KiCad PCB EDA Suite
Loading...
Searching...
No Matches
dialog_footprint_wizard_list.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2012-2014 Miguel Angel Ajo <[email protected]>
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, you may find one here:
19 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20 * or you may search the http://www.gnu.org website for the version 2 license,
21 * or you may write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23 */
24
29#include <wx/grid.h>
30
31#include <pcbnew_settings.h>
32#include <pgm_base.h>
34#include <string_utils.h>
35#include <kiface_base.h>
38
40
41
43{
47};
48
49
52{
53 initLists();
54
55 if( PCBNEW_SETTINGS* cfg = GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" ) )
56 SetSize( wxSize( cfg->m_FootprintWizardList.width, cfg->m_FootprintWizardList.height ) );
57
60
61 Center();
62}
63
64
66{
67 if( !IsIconized() )
68 {
69 if( PCBNEW_SETTINGS* cfg = GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" ) )
70 {
71 cfg->m_FootprintWizardList.width = GetSize().x;
72 cfg->m_FootprintWizardList.height = GetSize().y;
73 }
74 }
75}
76
77
79{
80 // Current wizard selection, empty or first
81 m_footprintWizard = NULL;
82
84
85 if( n_wizards )
87
88 // Choose selection mode and insert the needed rows
89
90 m_footprintGeneratorsGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
91
92 int curr_row_cnt = m_footprintGeneratorsGrid->GetNumberRows();
93
94 if( curr_row_cnt )
95 m_footprintGeneratorsGrid->DeleteRows( 0, curr_row_cnt );
96
97 if( n_wizards )
98 m_footprintGeneratorsGrid->InsertRows( 0, n_wizards );
99
100 // Put all wizards in the list
101 for( int ii = 0; ii < n_wizards; ii++ )
102 {
103 wxString num = wxString::Format( wxT( "%d" ), ii+1 );
105 wxString name = wizard->GetName();
106 wxString description = wizard->GetDescription();
107
108 m_footprintGeneratorsGrid->SetCellValue( ii, FP_GEN_ROW_NUMBER, num );
109 m_footprintGeneratorsGrid->SetCellValue( ii, FP_GEN_ROW_NAME, name );
110 m_footprintGeneratorsGrid->SetCellValue( ii, FP_GEN_ROW_DESCR, description );
111
112 }
113
114 m_footprintGeneratorsGrid->AutoSizeColumns();
115
116 // Auto-expand the description column
117 int width = m_footprintGeneratorsGrid->GetClientSize().GetWidth() -
118 m_footprintGeneratorsGrid->GetRowLabelSize() -
120
121 if ( width > m_footprintGeneratorsGrid->GetColMinimalAcceptableWidth() )
122 m_footprintGeneratorsGrid->SetColSize( FP_GEN_ROW_DESCR, width );
123
124 // Select the first row if it exists
125 m_footprintGeneratorsGrid->ClearSelection();
126
127 if( m_footprintGeneratorsGrid->GetNumberRows() > 0 )
128 m_footprintGeneratorsGrid->SelectRow( 0, false );
129
130 // Display info about scripts: Search paths
131 wxString message;
133 m_tcSearchPaths->SetValue( message );
134
135 // Display info about scripts: unloadable scripts (due to syntax errors is python source).
137
138 if( message.IsEmpty() )
139 {
140 m_tcNotLoaded->SetValue( _( "All footprint generator scripts were loaded" ) );
141 m_buttonShowTrace->Show( false );
142 }
143 else
144 m_tcNotLoaded->SetValue( message );
145}
146
147
149{
150 FOOTPRINT_WIZARD_FRAME* fpw_frame = static_cast<FOOTPRINT_WIZARD_FRAME*>( GetParent() );
151 fpw_frame->PythonPluginsReload();
152
153 initLists();
154}
155
156
158{
159 int click_row = event.GetRow();
161 m_footprintGeneratorsGrid->SelectRow( event.GetRow(), false );
162
163 // Move the grid cursor to the active line, mainly for aesthetic reasons:
164 m_footprintGeneratorsGrid->GoToCell( event.GetRow(), FP_GEN_ROW_NUMBER );
165}
166
167
169{
170 wxPostEvent( this, wxCommandEvent( wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK ) );
171}
172
173
174void DIALOG_FOOTPRINT_WIZARD_LIST::onShowTrace( wxCommandEvent& event )
175{
176 wxString trace;
178
179 // Now display the filtered trace in our dialog
180 // (a simple wxMessageBox is really not suitable for long messages)
181 DIALOG_FOOTPRINT_WIZARD_LOG logWindow( this );
182 logWindow.m_Message->SetValue( trace );
183 logWindow.ShowModal();
184}
185
186
188{
189 return m_footprintWizard;
190}
const char * name
Definition: DXF_plotter.cpp:62
Class DIALOG_FOOTPRINT_WIZARD_LIST_BASE.
void onShowTrace(wxCommandEvent &event) override
void onUpdatePythonModulesClick(wxCommandEvent &event) override
void OnCellFpGeneratorDoubleClick(wxGridEvent &event) override
void OnCellFpGeneratorClick(wxGridEvent &event) override
FOOTPRINT_WIZARD * m_footprintWizard
The selected python script wizard.
Class DIALOG_FOOTPRINT_WIZARD_LOG.
void SetupStandardButtons(std::map< int, wxString > aLabels={})
void finishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
int ShowModal() override
void PythonPluginsReload()
Reload the Python plugins if they are newer than the already loaded, and load new plugins if any.
static FOOTPRINT_WIZARD * GetWizard(const wxString &aName)
The parent class from where any footprint wizard class must derive.
virtual wxString GetName()=0
virtual wxString GetDescription()=0
#define _(s)
void pcbnewGetUnloadableScriptNames(wxString &aNames)
Collect the list of python scripts which could not be loaded.
void pcbnewGetScriptsSearchPaths(wxString &aNames)
Collect the list of paths where python scripts are searched.
void pcbnewGetWizardsBackTrace(wxString &aTrace)
Return the backtrace of errors (if any) when wizard python scripts are loaded.
see class PGM_BASE