KiCad PCB EDA Suite
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 (C) 1992-2021 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 auto cfg = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>();
56
57 wxSize size;
58 size.x = cfg->m_FootprintWizardList.width;
59 size.y = cfg->m_FootprintWizardList.height;
60 SetSize( size );
61
64
65 Center();
66}
67
68
70{
71 if( !IsIconized() )
72 {
73 auto cfg = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>();
74
75 cfg->m_FootprintWizardList.width = GetSize().x;
76 cfg->m_FootprintWizardList.height = GetSize().y;
77 }
78}
79
80
82{
83 // Current wizard selection, empty or first
84 m_footprintWizard = NULL;
85
87
88 if( n_wizards )
90
91 // Choose selection mode and insert the needed rows
92
93 m_footprintGeneratorsGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
94
95 int curr_row_cnt = m_footprintGeneratorsGrid->GetNumberRows();
96
97 if( curr_row_cnt )
98 m_footprintGeneratorsGrid->DeleteRows( 0, curr_row_cnt );
99
100 if( n_wizards )
101 m_footprintGeneratorsGrid->InsertRows( 0, n_wizards );
102
103 // Put all wizards in the list
104 for( int ii = 0; ii < n_wizards; ii++ )
105 {
106 wxString num = wxString::Format( wxT( "%d" ), ii+1 );
108 wxString name = wizard->GetName();
109 wxString description = wizard->GetDescription();
110
111 m_footprintGeneratorsGrid->SetCellValue( ii, FP_GEN_ROW_NUMBER, num );
112 m_footprintGeneratorsGrid->SetCellValue( ii, FP_GEN_ROW_NAME, name );
113 m_footprintGeneratorsGrid->SetCellValue( ii, FP_GEN_ROW_DESCR, description );
114
115 }
116
117 m_footprintGeneratorsGrid->AutoSizeColumns();
118
119 // Auto-expand the description column
120 int width = m_footprintGeneratorsGrid->GetClientSize().GetWidth() -
121 m_footprintGeneratorsGrid->GetRowLabelSize() -
123
124 if ( width > m_footprintGeneratorsGrid->GetColMinimalAcceptableWidth() )
125 m_footprintGeneratorsGrid->SetColSize( FP_GEN_ROW_DESCR, width );
126
127 // Select the first row if it exists
128 m_footprintGeneratorsGrid->ClearSelection();
129
130 if( m_footprintGeneratorsGrid->GetNumberRows() > 0 )
131 m_footprintGeneratorsGrid->SelectRow( 0, false );
132
133 // Display info about scripts: Search paths
134 wxString message;
136 m_tcSearchPaths->SetValue( message );
137
138 // Display info about scripts: unloadable scripts (due to syntax errors is python source).
140
141 if( message.IsEmpty() )
142 {
143 m_tcNotLoaded->SetValue( _( "All footprint generator scripts were loaded" ) );
144 m_buttonShowTrace->Show( false );
145 }
146 else
147 m_tcNotLoaded->SetValue( message );
148}
149
150
152{
153 FOOTPRINT_WIZARD_FRAME* fpw_frame = static_cast<FOOTPRINT_WIZARD_FRAME*>( GetParent() );
154 fpw_frame->PythonPluginsReload();
155
156 initLists();
157}
158
159
161{
162 int click_row = event.GetRow();
164 m_footprintGeneratorsGrid->SelectRow( event.GetRow(), false );
165
166 // Move the grid cursor to the active line, mainly for aesthetic reasons:
167 m_footprintGeneratorsGrid->GoToCell( event.GetRow(), FP_GEN_ROW_NUMBER );
168}
169
170
172{
173 wxPostEvent( this, wxCommandEvent( wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK ) );
174}
175
176
177void DIALOG_FOOTPRINT_WIZARD_LIST::onShowTrace( wxCommandEvent& event )
178{
179 wxString trace;
181
182 // Now display the filtered trace in our dialog
183 // (a simple wxMessageBox is really not suitable for long messages)
184 DIALOG_FOOTPRINT_WIZARD_LOG logWindow( this );
185 logWindow.m_Message->SetValue( trace );
186 logWindow.ShowModal();
187}
188
189
191{
192 return m_footprintWizard;
193}
const char * name
Definition: DXF_plotter.cpp:56
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...
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
DIALOG_FOOTPRINT_WIZARD_LIST m_FootprintWizardList
#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
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:111