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 (C) 1992-2023 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 PCBNEW_SETTINGS* cfg = nullptr;
72
73 try
74 {
75 cfg = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>();
76 }
77 catch( const std::runtime_error& e )
78 {
79 wxFAIL_MSG( e.what() );
80 }
81
82 if( cfg && !IsIconized() )
83 {
84
85 cfg->m_FootprintWizardList.width = GetSize().x;
86 cfg->m_FootprintWizardList.height = GetSize().y;
87 }
88}
89
90
92{
93 // Current wizard selection, empty or first
94 m_footprintWizard = NULL;
95
97
98 if( n_wizards )
100
101 // Choose selection mode and insert the needed rows
102
103 m_footprintGeneratorsGrid->SetSelectionMode( wxGrid::wxGridSelectRows );
104
105 int curr_row_cnt = m_footprintGeneratorsGrid->GetNumberRows();
106
107 if( curr_row_cnt )
108 m_footprintGeneratorsGrid->DeleteRows( 0, curr_row_cnt );
109
110 if( n_wizards )
111 m_footprintGeneratorsGrid->InsertRows( 0, n_wizards );
112
113 // Put all wizards in the list
114 for( int ii = 0; ii < n_wizards; ii++ )
115 {
116 wxString num = wxString::Format( wxT( "%d" ), ii+1 );
118 wxString name = wizard->GetName();
119 wxString description = wizard->GetDescription();
120
121 m_footprintGeneratorsGrid->SetCellValue( ii, FP_GEN_ROW_NUMBER, num );
122 m_footprintGeneratorsGrid->SetCellValue( ii, FP_GEN_ROW_NAME, name );
123 m_footprintGeneratorsGrid->SetCellValue( ii, FP_GEN_ROW_DESCR, description );
124
125 }
126
127 m_footprintGeneratorsGrid->AutoSizeColumns();
128
129 // Auto-expand the description column
130 int width = m_footprintGeneratorsGrid->GetClientSize().GetWidth() -
131 m_footprintGeneratorsGrid->GetRowLabelSize() -
133
134 if ( width > m_footprintGeneratorsGrid->GetColMinimalAcceptableWidth() )
135 m_footprintGeneratorsGrid->SetColSize( FP_GEN_ROW_DESCR, width );
136
137 // Select the first row if it exists
138 m_footprintGeneratorsGrid->ClearSelection();
139
140 if( m_footprintGeneratorsGrid->GetNumberRows() > 0 )
141 m_footprintGeneratorsGrid->SelectRow( 0, false );
142
143 // Display info about scripts: Search paths
144 wxString message;
146 m_tcSearchPaths->SetValue( message );
147
148 // Display info about scripts: unloadable scripts (due to syntax errors is python source).
150
151 if( message.IsEmpty() )
152 {
153 m_tcNotLoaded->SetValue( _( "All footprint generator scripts were loaded" ) );
154 m_buttonShowTrace->Show( false );
155 }
156 else
157 m_tcNotLoaded->SetValue( message );
158}
159
160
162{
163 FOOTPRINT_WIZARD_FRAME* fpw_frame = static_cast<FOOTPRINT_WIZARD_FRAME*>( GetParent() );
164 fpw_frame->PythonPluginsReload();
165
166 initLists();
167}
168
169
171{
172 int click_row = event.GetRow();
174 m_footprintGeneratorsGrid->SelectRow( event.GetRow(), false );
175
176 // Move the grid cursor to the active line, mainly for aesthetic reasons:
177 m_footprintGeneratorsGrid->GoToCell( event.GetRow(), FP_GEN_ROW_NUMBER );
178}
179
180
182{
183 wxPostEvent( this, wxCommandEvent( wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK ) );
184}
185
186
187void DIALOG_FOOTPRINT_WIZARD_LIST::onShowTrace( wxCommandEvent& event )
188{
189 wxString trace;
191
192 // Now display the filtered trace in our dialog
193 // (a simple wxMessageBox is really not suitable for long messages)
194 DIALOG_FOOTPRINT_WIZARD_LOG logWindow( this );
195 logWindow.m_Message->SetValue( trace );
196 logWindow.ShowModal();
197}
198
199
201{
202 return m_footprintWizard;
203}
const char * name
Definition: DXF_plotter.cpp:57
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
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:119