diff --git a/pcbnew/class_footprint_wizard.cpp b/pcbnew/class_footprint_wizard.cpp index 2e7f4776b2..f841b5fbbc 100644 --- a/pcbnew/class_footprint_wizard.cpp +++ b/pcbnew/class_footprint_wizard.cpp @@ -36,12 +36,8 @@ void FOOTPRINT_WIZARD::register_wizard() FOOTPRINT_WIZARDS::register_wizard( this ); } -/** - * FOOTPRINT_WIZARD system wide static list - */ std::vector FOOTPRINT_WIZARDS::m_FootprintWizards; - FOOTPRINT_WIZARD* FOOTPRINT_WIZARDS::GetWizard( int aIndex ) { return m_FootprintWizards[aIndex]; @@ -50,17 +46,17 @@ FOOTPRINT_WIZARD* FOOTPRINT_WIZARDS::GetWizard( int aIndex ) FOOTPRINT_WIZARD* FOOTPRINT_WIZARDS::GetWizard( wxString aName ) { int max = GetSize(); - + for( int i=0; iGetName(); - + if ( name.Cmp( aName ) ) - return wizard; + return wizard; } - + return NULL; } @@ -71,10 +67,10 @@ int FOOTPRINT_WIZARDS::GetSize() void FOOTPRINT_WIZARDS::register_wizard(FOOTPRINT_WIZARD *aWizard) { - - wxString name = aWizard->GetName(); + + wxString name = aWizard->GetName(); m_FootprintWizards.push_back( aWizard ); - + } diff --git a/pcbnew/class_footprint_wizard.h b/pcbnew/class_footprint_wizard.h index 89b58f764c..5b4edd69dd 100644 --- a/pcbnew/class_footprint_wizard.h +++ b/pcbnew/class_footprint_wizard.h @@ -134,6 +134,9 @@ public: class FOOTPRINT_WIZARDS { private: + /** + * FOOTPRINT_WIZARD system wide static list + */ static std::vector m_FootprintWizards; public: diff --git a/pcbnew/footprint_wizard.cpp b/pcbnew/footprint_wizard.cpp index a0bd1ea6d1..db13e71066 100644 --- a/pcbnew/footprint_wizard.cpp +++ b/pcbnew/footprint_wizard.cpp @@ -20,25 +20,28 @@ #include #include -#define NEXT_PART 1 -#define NEW_PART 0 -#define PREVIOUS_PART -1 +#define NEXT_PART 1 +#define NEW_PART 0 +#define PREVIOUS_PART -1 void FOOTPRINT_WIZARD_FRAME::Process_Special_Functions( wxCommandEvent& event ) { - wxString msg; - int page; + wxString msg; + int page; switch( event.GetId() ) { case ID_FOOTPRINT_WIZARD_NEXT: - m_PageList->SetSelection( m_PageList->GetSelection()+1, true ); + m_PageList->SetSelection( m_PageList->GetSelection() + 1, true ); break; case ID_FOOTPRINT_WIZARD_PREVIOUS: - page = m_PageList->GetSelection()-1; - if (page<0) page=0; + page = m_PageList->GetSelection() - 1; + + if( page<0 ) + page = 0; + m_PageList->SetSelection( page, true ); break; @@ -50,17 +53,19 @@ void FOOTPRINT_WIZARD_FRAME::Process_Special_Functions( wxCommandEvent& event ) } } + /* Function OnLeftClick * Captures a left click event in the dialog - * + * */ void FOOTPRINT_WIZARD_FRAME::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) { } + /* Function OnRightClick - * Captures a right click event in the dialog - * + * Captures a right click event in the dialog + * */ bool FOOTPRINT_WIZARD_FRAME::OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ) { @@ -71,12 +76,12 @@ bool FOOTPRINT_WIZARD_FRAME::OnRightClick( const wxPoint& MousePos, wxMenu* PopM /* Displays the name of the current opened library in the caption */ void FOOTPRINT_WIZARD_FRAME::DisplayWizardInfos() { - wxString msg; + wxString msg; msg = _( "Footprint Wizard" ); msg << wxT( " [" ); - if( ! m_wizardName.IsEmpty() ) + if( !m_wizardName.IsEmpty() ) msg << m_wizardName; else msg += _( "no wizard selected" ); @@ -86,6 +91,7 @@ void FOOTPRINT_WIZARD_FRAME::DisplayWizardInfos() SetTitle( msg ); } + void FOOTPRINT_WIZARD_FRAME::ReloadFootprint() { if( m_FootprintWizard == NULL ) @@ -94,25 +100,28 @@ void FOOTPRINT_WIZARD_FRAME::ReloadFootprint() SetCurItem( NULL ); // Delete the current footprint GetBoard()->m_Modules.DeleteAll(); - MODULE *m = m_FootprintWizard->GetModule(); - if ( m ) + MODULE* m = m_FootprintWizard->GetModule(); + + if( m ) { /* Here we should make a copy of the object before adding to board*/ - m->SetParent((EDA_ITEM*)GetBoard()); - GetBoard()->m_Modules.Append(m); - wxPoint p( 0 , 0 ); + m->SetParent( (EDA_ITEM*) GetBoard() ); + GetBoard()->m_Modules.Append( m ); + wxPoint p( 0, 0 ); m->SetPosition( p ); } else { - printf ("m_FootprintWizard->GetModule() returns NULL\n"); + printf( "m_FootprintWizard->GetModule() returns NULL\n" ); } + m_canvas->Refresh(); } + MODULE* FOOTPRINT_WIZARD_FRAME::GetBuiltFootprint() { - if ( m_FootprintWizard ) + if( m_FootprintWizard ) { return m_FootprintWizard->GetModule(); } @@ -122,16 +131,17 @@ MODULE* FOOTPRINT_WIZARD_FRAME::GetBuiltFootprint() } } + void FOOTPRINT_WIZARD_FRAME::SelectFootprintWizard() { - DIALOG_FOOTPRINT_WIZARD_LIST *selectWizard = - new DIALOG_FOOTPRINT_WIZARD_LIST( this ); - + DIALOG_FOOTPRINT_WIZARD_LIST* selectWizard = + new DIALOG_FOOTPRINT_WIZARD_LIST( this ); + selectWizard->ShowModal(); - + m_FootprintWizard = selectWizard->GetWizard(); - if ( m_FootprintWizard ) + if( m_FootprintWizard ) { m_wizardName = m_FootprintWizard->GetName(); m_wizardDescription = m_FootprintWizard->GetDescription(); @@ -142,64 +152,63 @@ void FOOTPRINT_WIZARD_FRAME::SelectFootprintWizard() DisplayWizardInfos(); ReCreatePageList(); ReCreateParameterList(); - } + void FOOTPRINT_WIZARD_FRAME::SelectCurrentWizard( wxCommandEvent& event ) { - SelectFootprintWizard(); - } + /** * Function SelectCurrentFootprint * Selects the current footprint name and display it */ void FOOTPRINT_WIZARD_FRAME::ParametersUpdated( wxGridEvent& event ) { - int page = m_PageList->GetSelection(); - - if ( page<0 ) + + if( page<0 ) return; - - int n=m_ParameterGrid->GetNumberRows(); - wxArrayString arr; - wxArrayString ptList = m_FootprintWizard->GetParameterTypes(page); - - for ( int i=0; iGetNumberRows(); + wxArrayString arr; + wxArrayString ptList = m_FootprintWizard->GetParameterTypes( page ); + + for( int i = 0; iGetCellValue( i, 1 ); - - // if this parameter is expected to be an internal + + // if this parameter is expected to be an internal // unit convert it back from the user format - if (ptList[i]==wxT("IU")) + if( ptList[i]==wxT( "IU" ) ) { + LOCALE_IO toggle; double dValue; + value.ToDouble( &dValue ); // convert from mils to inches where it's needed - if (g_UserUnit==INCHES) dValue = dValue / 1000.0; - dValue = From_User_Unit( g_UserUnit, dValue); - - value.Printf( wxT("%lf"), dValue ); - + if( g_UserUnit==INCHES ) + dValue = dValue / 1000.0; + + dValue = From_User_Unit( g_UserUnit, dValue ); + + value.Printf( wxT( "%lf" ), dValue ); } // If our locale is set to use , for decimal point, just change it // to be scripting compatible - value.Replace( wxT( "," ), wxT( "." ) ); arr.Add( value ); } - + wxString res = m_FootprintWizard->SetParameterValues( page, arr ); - + ReloadFootprint(); DisplayWizardInfos(); - } @@ -207,8 +216,8 @@ void FOOTPRINT_WIZARD_FRAME::ParametersUpdated( wxGridEvent& event ) * Function RedrawActiveWindow * Display the current selected component. * If the component is an alias, the ROOT component is displayed - * -*/ + * + */ void FOOTPRINT_WIZARD_FRAME::RedrawActiveWindow( wxDC* DC, bool EraseBg ) { if( !GetBoard() ) @@ -219,7 +228,7 @@ void FOOTPRINT_WIZARD_FRAME::RedrawActiveWindow( wxDC* DC, bool EraseBg ) MODULE* module = GetBoard()->m_Modules; - if ( module ) + if( module ) SetMsgPanel( module ); m_canvas->DrawCrossHair( DC ); diff --git a/pcbnew/footprint_wizard_frame.cpp b/pcbnew/footprint_wizard_frame.cpp index 48b94378ce..b3d7e4afd0 100644 --- a/pcbnew/footprint_wizard_frame.cpp +++ b/pcbnew/footprint_wizard_frame.cpp @@ -63,7 +63,7 @@ BEGIN_EVENT_TABLE( FOOTPRINT_WIZARD_FRAME, EDA_DRAW_FRAME ) /* Toolbar events */ EVT_TOOL( ID_FOOTPRINT_WIZARD_SELECT_WIZARD, - FOOTPRINT_WIZARD_FRAME::SelectCurrentWizard) + FOOTPRINT_WIZARD_FRAME::SelectCurrentWizard ) EVT_TOOL( ID_FOOTPRINT_WIZARD_NEXT, FOOTPRINT_WIZARD_FRAME::Process_Special_Functions ) @@ -79,7 +79,8 @@ BEGIN_EVENT_TABLE( FOOTPRINT_WIZARD_FRAME, EDA_DRAW_FRAME ) /* listbox events */ EVT_LISTBOX( ID_FOOTPRINT_WIZARD_PAGE_LIST, FOOTPRINT_WIZARD_FRAME::ClickOnPageList ) - EVT_GRID_CMD_CELL_CHANGE( ID_FOOTPRINT_WIZARD_PARAMETER_LIST, FOOTPRINT_WIZARD_FRAME::ParametersUpdated ) + EVT_GRID_CMD_CELL_CHANGE( ID_FOOTPRINT_WIZARD_PARAMETER_LIST, + FOOTPRINT_WIZARD_FRAME::ParametersUpdated ) EVT_MENU( ID_SET_RELATIVE_OFFSET, FOOTPRINT_WIZARD_FRAME::OnSetRelativeOffset ) END_EVENT_TABLE() @@ -92,11 +93,11 @@ END_EVENT_TABLE() */ static wxAcceleratorEntry accels[] = { - wxAcceleratorEntry( wxACCEL_NORMAL, WXK_F1, ID_ZOOM_IN ), - wxAcceleratorEntry( wxACCEL_NORMAL, WXK_F2, ID_ZOOM_OUT ), - wxAcceleratorEntry( wxACCEL_NORMAL, WXK_F3, ID_ZOOM_REDRAW ), - wxAcceleratorEntry( wxACCEL_NORMAL, WXK_F4, ID_POPUP_ZOOM_CENTER ), - wxAcceleratorEntry( wxACCEL_NORMAL, WXK_HOME, ID_ZOOM_PAGE ), + wxAcceleratorEntry( wxACCEL_NORMAL, WXK_F1, ID_ZOOM_IN ), + wxAcceleratorEntry( wxACCEL_NORMAL, WXK_F2, ID_ZOOM_OUT ), + wxAcceleratorEntry( wxACCEL_NORMAL, WXK_F3, ID_ZOOM_REDRAW ), + wxAcceleratorEntry( wxACCEL_NORMAL, WXK_F4, ID_POPUP_ZOOM_CENTER ), + wxAcceleratorEntry( wxACCEL_NORMAL, WXK_HOME, ID_ZOOM_PAGE ), wxAcceleratorEntry( wxACCEL_NORMAL, WXK_SPACE, ID_SET_RELATIVE_OFFSET ) }; @@ -118,9 +119,9 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( FOOTPRINT_EDIT_FRAME* parent, { wxAcceleratorTable table( ACCEL_TABLE_CNT, accels ); - m_FrameName = FOOTPRINT_WIZARD_FRAME_NAME; - m_configPath = wxT( "FootprintWizard" ); - m_showAxis = true; // true to draw axis. + m_FrameName = FOOTPRINT_WIZARD_FRAME_NAME; + m_configPath = wxT( "FootprintWizard" ); + m_showAxis = true; // true to draw axis. // Give an icon @@ -131,20 +132,20 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( FOOTPRINT_EDIT_FRAME* parent, m_HotkeysZoomAndGridList = g_Module_Viewer_Hokeys_Descr; m_FootprintWizard = NULL; - m_PageList= NULL; - m_ParameterGrid = NULL; - m_PageListWindow = NULL; + m_PageList = NULL; + m_ParameterGrid = NULL; + m_PageListWindow = NULL; m_ParameterGridWindow = NULL; - m_Semaphore = semaphore; + m_Semaphore = semaphore; m_wizardName.Empty(); if( m_Semaphore ) - SetModalMode(true); + SetModalMode( true ); SetBoard( new BOARD() ); // Ensure all layers and items are visible: GetBoard()->SetVisibleAlls(); - SetScreen( new PCB_SCREEN(GetPageSizeIU()) ); + SetScreen( new PCB_SCREEN( GetPageSizeIU() ) ); GetScreen()->m_Center = true; // Center coordinate origins on screen. LoadSettings(); @@ -154,14 +155,14 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( FOOTPRINT_EDIT_FRAME* parent, ReCreateHToolbar(); ReCreateVToolbar(); - wxSize size = GetClientSize(); + wxSize size = GetClientSize(); size.y -= m_MsgFrameHeight + 2; m_PageListSize.y = -1; wxPoint win_pos( 0, 0 ); - // Creates the libraries window display + // Creates the libraries window display m_PageListWindow = new wxSashLayoutWindow( this, ID_FOOTPRINT_WIZARD_PAGES_WINDOW, win_pos, wxDefaultSize, wxCLIP_CHILDREN | wxSW_3D, @@ -171,39 +172,38 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( FOOTPRINT_EDIT_FRAME* parent, m_PageListWindow->SetSashVisible( wxSASH_RIGHT, true ); m_PageListWindow->SetExtraBorderSize( EXTRA_BORDER_SIZE ); m_PageList = new wxListBox( m_PageListWindow, ID_FOOTPRINT_WIZARD_PAGE_LIST, - wxPoint( 0, 0 ), wxDefaultSize, - 0, NULL, wxLB_HSCROLL ); + wxPoint( 0, 0 ), wxDefaultSize, + 0, NULL, wxLB_HSCROLL ); // Creates the component window display m_ParameterGridSize.y = size.y; win_pos.x = m_PageListSize.x; m_ParameterGridWindow = new wxSashLayoutWindow( this, - ID_FOOTPRINT_WIZARD_PARAMETERS_WINDOW, - win_pos, wxDefaultSize, - wxCLIP_CHILDREN | wxSW_3D, - wxT( "ParameterList" ) ); + ID_FOOTPRINT_WIZARD_PARAMETERS_WINDOW, + win_pos, wxDefaultSize, + wxCLIP_CHILDREN | wxSW_3D, + wxT( "ParameterList" ) ); m_ParameterGridWindow->SetOrientation( wxLAYOUT_VERTICAL ); m_ParameterGridWindow->SetSashVisible( wxSASH_RIGHT, true ); m_ParameterGridWindow->SetExtraBorderSize( EXTRA_BORDER_SIZE ); m_ParameterGrid = new wxGrid( m_ParameterGridWindow, - ID_FOOTPRINT_WIZARD_PARAMETER_LIST, - wxPoint( 0 , 0 ), - wxDefaultSize ); + ID_FOOTPRINT_WIZARD_PARAMETER_LIST, + wxPoint( 0, 0 ), + wxDefaultSize ); m_ParameterGrid->CreateGrid( 1, 3 ); // Columns m_ParameterGrid->AutoSizeColumns(); m_ParameterGrid->SetColLabelSize( 20 ); - m_ParameterGrid->SetColLabelValue( 0, _("Parameter") ); - m_ParameterGrid->SetColLabelValue( 1, _("Value") ); - m_ParameterGrid->SetColLabelValue( 2, _("Units") ); + m_ParameterGrid->SetColLabelValue( 0, _( "Parameter" ) ); + m_ParameterGrid->SetColLabelValue( 1, _( "Value" ) ); + m_ParameterGrid->SetColLabelValue( 2, _( "Units" ) ); m_ParameterGrid->SetColLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE ); - ReCreatePageList(); DisplayWizardInfos(); @@ -214,29 +214,29 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( FOOTPRINT_EDIT_FRAME* parent, m_auimgr.SetManagedWindow( this ); - EDA_PANEINFO horiz; + EDA_PANEINFO horiz; horiz.HorizontalToolbarPane(); - EDA_PANEINFO vert; + EDA_PANEINFO vert; vert.VerticalToolbarPane(); - EDA_PANEINFO info; + EDA_PANEINFO info; info.InfoToolbarPane(); - EDA_PANEINFO mesg; + EDA_PANEINFO mesg; mesg.MessageToolbarPane(); // Manage main toolbal m_auimgr.AddPane( m_mainToolBar, - wxAuiPaneInfo( horiz ).Name( wxT ("m_mainToolBar" ) ).Top().Row( 0 ) ); + wxAuiPaneInfo( horiz ).Name( wxT( "m_mainToolBar" ) ).Top().Row( 0 ) ); wxSize minsize( 60, -1 ); // Manage the left window (list of pages) if( m_PageListWindow ) m_auimgr.AddPane( m_PageListWindow, wxAuiPaneInfo( info ).Name( wxT( "m_PageList" ) ). - Left().Row( 0 )); + Left().Row( 0 ) ); // Manage the list of parameters) m_auimgr.AddPane( m_ParameterGridWindow, @@ -249,7 +249,7 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( FOOTPRINT_EDIT_FRAME* parent, // Manage the message panel m_auimgr.AddPane( m_messagePanel, - wxAuiPaneInfo( mesg ).Name( wxT( "MsgPanel" ) ).Bottom().Layer(10) ); + wxAuiPaneInfo( mesg ).Name( wxT( "MsgPanel" ) ).Bottom().Layer( 10 ) ); /* Now the minimum windows are fixed, set library list * and component list of the previous values from last viewlib use @@ -259,6 +259,7 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( FOOTPRINT_EDIT_FRAME* parent, wxAuiPaneInfo& pane = m_auimgr.GetPane( m_PageListWindow ); pane.MinSize( wxSize( m_PageListSize.x, -1 ) ); } + wxAuiPaneInfo& pane = m_auimgr.GetPane( m_ParameterGridWindow ); pane.MinSize( wxSize( m_ParameterGridSize.x, -1 ) ); @@ -292,18 +293,19 @@ FOOTPRINT_WIZARD_FRAME::~FOOTPRINT_WIZARD_FRAME() void FOOTPRINT_WIZARD_FRAME::OnCloseWindow( wxCloseEvent& Event ) { wxCommandEvent fakeEvent; + ExportSelectedFootprint( fakeEvent ); } + void FOOTPRINT_WIZARD_FRAME::ExportSelectedFootprint( wxCommandEvent& aEvent ) { - SaveSettings(); if( m_Semaphore ) { m_Semaphore->Post(); - SetModalMode(false); + SetModalMode( false ); // This window will be destroyed by the calling function, // to avoid side effects } @@ -311,8 +313,6 @@ void FOOTPRINT_WIZARD_FRAME::ExportSelectedFootprint( wxCommandEvent& aEvent ) { Destroy(); } - - } @@ -330,6 +330,7 @@ void FOOTPRINT_WIZARD_FRAME::OnSashDrag( wxSashEvent& event ) switch( event.GetId() ) { case ID_FOOTPRINT_WIZARD_WINDOW: + if( m_PageListWindow ) { wxAuiPaneInfo& pane = m_auimgr.GetPane( m_PageListWindow ); @@ -337,15 +338,16 @@ void FOOTPRINT_WIZARD_FRAME::OnSashDrag( wxSashEvent& event ) pane.MinSize( m_PageListSize ); m_auimgr.Update(); } + break; case ID_FOOTPRINT_WIZARD_PARAMETERS_WINDOW: - { - wxAuiPaneInfo& pane = m_auimgr.GetPane( m_ParameterGridWindow ); - m_ParameterGridSize.x = event.GetDragRect().width; - pane.MinSize( m_ParameterGridSize ); - m_auimgr.Update(); - } + { + wxAuiPaneInfo& pane = m_auimgr.GetPane( m_ParameterGridWindow ); + m_ParameterGridSize.x = event.GetDragRect().width; + pane.MinSize( m_ParameterGridSize ); + m_auimgr.Update(); + } break; } } @@ -363,6 +365,7 @@ void FOOTPRINT_WIZARD_FRAME::OnSize( wxSizeEvent& SizeEv ) SizeEv.Skip(); } + /* Function OnSetRelativeOffset * Updates the cursor position and the status bar * @@ -373,6 +376,7 @@ void FOOTPRINT_WIZARD_FRAME::OnSetRelativeOffset( wxCommandEvent& event ) UpdateStatusBar(); } + /* Function ReCreatePageList * It recreates the list of pages for a new loaded wizard * @@ -382,12 +386,13 @@ void FOOTPRINT_WIZARD_FRAME::ReCreatePageList() if( m_PageList == NULL ) return; - if (m_FootprintWizard == NULL) + if( m_FootprintWizard == NULL ) return; m_PageList->Clear(); int max_page = m_FootprintWizard->GetNumParameterPages(); - for ( int i=0; iGetParameterPageName( i ); m_PageList->Append( name ); @@ -401,6 +406,7 @@ void FOOTPRINT_WIZARD_FRAME::ReCreatePageList() m_canvas->Refresh(); } + /* Function ReCreateParameterList * It creates the parameter grid for a certain wizard page of the current wizard * @@ -411,12 +417,12 @@ void FOOTPRINT_WIZARD_FRAME::ReCreateParameterList() if( m_ParameterGrid == NULL ) return; - if (m_FootprintWizard == NULL ) + if( m_FootprintWizard == NULL ) return; int page = m_PageList->GetSelection(); - if (page<0) + if( page<0 ) return; m_ParameterGrid->ClearGrid(); @@ -429,58 +435,59 @@ void FOOTPRINT_WIZARD_FRAME::ReCreateParameterList() m_ParameterGrid->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); // Get the list of names, values, and types - wxArrayString fpList = m_FootprintWizard->GetParameterNames( page ); - wxArrayString fvList = m_FootprintWizard->GetParameterValues( page ); - wxArrayString ptList = m_FootprintWizard->GetParameterTypes( page ); + wxArrayString fpList = m_FootprintWizard->GetParameterNames( page ); + wxArrayString fvList = m_FootprintWizard->GetParameterValues( page ); + wxArrayString ptList = m_FootprintWizard->GetParameterTypes( page ); // Dimension the wxGrid m_ParameterGrid->DeleteRows( 0, m_ParameterGrid->GetNumberRows() ); m_ParameterGrid->AppendRows( fpList.size() ); - for (unsigned int i=0; iSetCellValue( i, 0, name ); m_ParameterGrid->SetReadOnly( i, 0 ); - if ( ptList[i]==wxT( "IU" ) ) + if( ptList[i]==wxT( "IU" ) ) { + LOCALE_IO toggle; + // We are handling internal units, so convert them to the current // system selected units and store into value. double dValue; + value.ToDouble( &dValue ); dValue = To_User_Unit( g_UserUnit, dValue ); - if ( g_UserUnit==INCHES ) // we convert inches into mils for more detail + if( g_UserUnit==INCHES ) // we convert inches into mils for more detail { - dValue = dValue*1000.0; - units = wxT( "mils" ); + dValue = dValue * 1000.0; + units = wxT( "mils" ); } - else if ( g_UserUnit==MILLIMETRES ) + else if( g_UserUnit==MILLIMETRES ) { units = wxT( "mm" ); } value.Printf( wxT( "%lf" ), dValue ); - value.Replace( wxT( "," ), wxT( "." ) ); } - else if ( ptList[i]==wxT( "UNITS" ) ) // 1,2,3,4,5 ... N + else if( ptList[i]==wxT( "UNITS" ) ) // 1,2,3,4,5 ... N { units = wxT( "" ); } - m_ParameterGrid->SetCellValue( i, 1 , value ); - m_ParameterGrid->SetCellValue( i, 2 , units ); + m_ParameterGrid->SetCellValue( i, 1, value ); + m_ParameterGrid->SetCellValue( i, 2, units ); m_ParameterGrid->SetReadOnly( i, 2 ); } m_ParameterGrid->AutoSizeColumns(); - } @@ -497,33 +504,32 @@ void FOOTPRINT_WIZARD_FRAME::ClickOnPageList( wxCommandEvent& event ) } - -#define PARTLIST_WIDTH_KEY wxT( "Partlist_width" ) +#define PARTLIST_WIDTH_KEY wxT( "Partlist_width" ) #define PARAMLIST_WIDTH_KEY wxT( "Paramlist_width" ) -void FOOTPRINT_WIZARD_FRAME::LoadSettings( ) +void FOOTPRINT_WIZARD_FRAME::LoadSettings() { - wxConfig* cfg ; + wxConfig* cfg; EDA_DRAW_FRAME::LoadSettings(); wxConfigPathChanger cpc( wxGetApp().GetSettings(), m_configPath ); + cfg = wxGetApp().GetSettings(); - m_PageListSize.x = 150; // default width of libs list - m_ParameterGridSize.x = 350; // default width of component list + m_PageListSize.x = 150; // default width of libs list + m_ParameterGridSize.x = 350; // default width of component list - cfg->Read( PARTLIST_WIDTH_KEY , &m_PageListSize.x ); + cfg->Read( PARTLIST_WIDTH_KEY, &m_PageListSize.x ); cfg->Read( PARAMLIST_WIDTH_KEY, &m_ParameterGridSize.x ); // Set parameters to a reasonable value. - if ( m_PageListSize.x > m_FrameSize.x/2 ) - m_PageListSize.x = m_FrameSize.x/2; - - if ( m_ParameterGridSize.x > m_FrameSize.x/2 ) - m_ParameterGridSize.x = m_FrameSize.x/2; + if( m_PageListSize.x > m_FrameSize.x / 2 ) + m_PageListSize.x = m_FrameSize.x / 2; + if( m_ParameterGridSize.x > m_FrameSize.x / 2 ) + m_ParameterGridSize.x = m_FrameSize.x / 2; } @@ -534,9 +540,10 @@ void FOOTPRINT_WIZARD_FRAME::SaveSettings() EDA_DRAW_FRAME::SaveSettings(); wxConfigPathChanger cpc( wxGetApp().GetSettings(), m_configPath ); + cfg = wxGetApp().GetSettings(); - if ( m_PageListSize.x ) + if( m_PageListSize.x ) cfg->Write( PARTLIST_WIDTH_KEY, m_PageListSize.x ); cfg->Write( PARAMLIST_WIDTH_KEY, m_ParameterGridSize.x ); @@ -548,28 +555,29 @@ void FOOTPRINT_WIZARD_FRAME::OnActivate( wxActivateEvent& event ) EDA_DRAW_FRAME::OnActivate( event ); // Ensure we do not have old selection: - if( ! m_FrameIsActive ) + if( !m_FrameIsActive ) return; - bool footprintWizardsChanged=false; - if ( footprintWizardsChanged ) + bool footprintWizardsChanged = false; + + if( footprintWizardsChanged ) { - // If we are here, the library list has changed, rebuild it + // If we are here, the library list has changed, rebuild it ReCreatePageList(); DisplayWizardInfos(); - } } void FOOTPRINT_WIZARD_FRAME::GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey ) { - wxRealPoint gridSize; - wxPoint oldpos; - PCB_SCREEN* screen = GetScreen(); - wxPoint pos = aPosition; + wxRealPoint gridSize; + wxPoint oldpos; + PCB_SCREEN* screen = GetScreen(); + wxPoint pos = aPosition; + + wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED ); - wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED ); cmd.SetEventObject( this ); pos = screen->GetNearestGridPosition( pos ); @@ -659,7 +667,7 @@ void FOOTPRINT_WIZARD_FRAME::Show3D_Frame( wxCommandEvent& event ) // Raising the window does not show the window on Windows if iconized. // This should work on any platform. if( m_Draw3DFrame->IsIconized() ) - m_Draw3DFrame->Iconize( false ); + m_Draw3DFrame->Iconize( false ); m_Draw3DFrame->Raise(); @@ -675,6 +683,7 @@ void FOOTPRINT_WIZARD_FRAME::Show3D_Frame( wxCommandEvent& event ) m_Draw3DFrame->Show( true ); } + /** * Function Update3D_Frame * must be called after a footprint selection @@ -692,6 +701,7 @@ void FOOTPRINT_WIZARD_FRAME::Update3D_Frame( bool aForceReloadFootprint ) if( aForceReloadFootprint ) { m_Draw3DFrame->ReloadRequest(); + // Force 3D screen refresh immediately if( GetBoard()->m_Modules ) m_Draw3DFrame->NewDisplay(); @@ -741,12 +751,13 @@ void FOOTPRINT_WIZARD_FRAME::ReCreateHToolbar() msg = AddHotkeyName( _( "Redraw view" ), g_Module_Editor_Hokeys_Descr, HK_ZOOM_REDRAW, IS_COMMENT ); m_mainToolBar->AddTool( ID_ZOOM_REDRAW, wxEmptyString, - KiBitmap( zoom_redraw_xpm ), msg ); + KiBitmap( zoom_redraw_xpm ), msg ); msg = AddHotkeyName( _( "Zoom auto" ), g_Module_Editor_Hokeys_Descr, HK_ZOOM_AUTO, IS_COMMENT ); m_mainToolBar->AddTool( ID_ZOOM_PAGE, wxEmptyString, KiBitmap( zoom_fit_in_page_xpm ), msg ); + if( m_Semaphore ) { // The library browser is called from a "load component" command @@ -767,5 +778,4 @@ void FOOTPRINT_WIZARD_FRAME::ReCreateHToolbar() void FOOTPRINT_WIZARD_FRAME::ReCreateVToolbar() { - } diff --git a/pcbnew/footprint_wizard_frame.h b/pcbnew/footprint_wizard_frame.h index d253fb491a..223b9ebcd1 100644 --- a/pcbnew/footprint_wizard_frame.h +++ b/pcbnew/footprint_wizard_frame.h @@ -48,105 +48,104 @@ class FOOTPRINT_WIZARD_FRAME : public PCB_BASE_FRAME { private: - wxSashLayoutWindow* m_PageListWindow; //< List of libraries (for selection ) - wxListBox* m_PageList; //< The list of pages - wxSize m_PageListSize; //< size of the window + wxSashLayoutWindow* m_PageListWindow; // < List of libraries (for selection ) + wxListBox* m_PageList; // < The list of pages + wxSize m_PageListSize; // < size of the window - wxSashLayoutWindow* m_ParameterGridWindow; //< List of components in the selected library - wxGrid* m_ParameterGrid; //< The list of parameters - wxSize m_ParameterGridSize; //< size of the window + wxSashLayoutWindow* m_ParameterGridWindow; // < List of components in the selected library + wxGrid* m_ParameterGrid; // < The list of parameters + wxSize m_ParameterGridSize; // < size of the window // Flags - wxSemaphore* m_Semaphore; //< != NULL if the frame must emulate a modal dialog - wxString m_configPath; //< subpath for configuration - - FOOTPRINT_WIZARD* m_FootprintWizard; + wxSemaphore* m_Semaphore; // < != NULL if the frame must emulate a modal dialog + wxString m_configPath; // < subpath for configuration + FOOTPRINT_WIZARD* m_FootprintWizard; protected: - wxString m_wizardName; //< name of the current wizard - wxString m_wizardDescription; //< description of the wizard - wxString m_wizardStatus; //< current wizard status - + wxString m_wizardName; // < name of the current wizard + wxString m_wizardDescription; // < description of the wizard + wxString m_wizardStatus; // < current wizard status public: - FOOTPRINT_WIZARD_FRAME( FOOTPRINT_EDIT_FRAME* parent, - wxSemaphore* semaphore = NULL, - long style = KICAD_DEFAULT_DRAWFRAME_STYLE ); + FOOTPRINT_WIZARD_FRAME( FOOTPRINT_EDIT_FRAME* parent, + wxSemaphore* semaphore = NULL, + long style = KICAD_DEFAULT_DRAWFRAME_STYLE ); ~FOOTPRINT_WIZARD_FRAME(); - MODULE* GetBuiltFootprint( void ); + MODULE* GetBuiltFootprint( void ); private: - void OnSize( wxSizeEvent& event ); + void OnSize( wxSizeEvent& event ); + /** * Function ExportSelectedFootprint(); * will let the caller exit from the wait loop, and get the built footprint * */ - void ExportSelectedFootprint( wxCommandEvent& aEvent ); + void ExportSelectedFootprint( wxCommandEvent& aEvent ); /** * Function OnSashDrag * resizes the child windows when dragging a sash window border. */ - void OnSashDrag( wxSashEvent& event ); + void OnSashDrag( wxSashEvent& event ); /** * Function ReCreatePageList * Creates or recreates the list of parameter pages for the current wizard. * This list is sorted */ - void ReCreatePageList(); + void ReCreatePageList(); /** * Function ReCreateParameterList * Creates the list of parameters for the current page */ - void ReCreateParameterList(); + void ReCreateParameterList(); /** * Function SelectFootprintWizard * Shows the list of footprint wizards available into the system */ - void SelectFootprintWizard(); + void SelectFootprintWizard(); /** * Function ReloadFootprint * Reloads the current footprint */ - void ReloadFootprint(); + void ReloadFootprint(); - void Process_Special_Functions( wxCommandEvent& event ); + void Process_Special_Functions( wxCommandEvent& event ); /** * Function DisplayWizardInfos * Shows all the details about the current wizard */ - void DisplayWizardInfos(); + void DisplayWizardInfos(); - void RedrawActiveWindow( wxDC* DC, bool EraseBg ); - void OnCloseWindow( wxCloseEvent& Event ); - void ReCreateHToolbar(); - void ReCreateVToolbar(); - void OnLeftClick( wxDC* DC, const wxPoint& MousePos ); - void ClickOnPageList( wxCommandEvent& event ); - void OnSetRelativeOffset( wxCommandEvent& event ); + void RedrawActiveWindow( wxDC* DC, bool EraseBg ); + void OnCloseWindow( wxCloseEvent& Event ); + void ReCreateHToolbar(); + void ReCreateVToolbar(); + void OnLeftClick( wxDC* DC, const wxPoint& MousePos ); + void ClickOnPageList( wxCommandEvent& event ); + void OnSetRelativeOffset( wxCommandEvent& event ); - void GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 ); + void GeneralControl( wxDC* aDC, const wxPoint& aPosition, int aHotKey = 0 ); - /** + /** * Function LoadSettings * loads the library viewer frame specific configuration settings. * * Don't forget to call this base method from any derived classes or the * settings will not get loaded. */ - void LoadSettings(); + void LoadSettings(); /** * Function SaveSettings @@ -155,7 +154,7 @@ private: * Don't forget to call this base method from any derived classes or the * settings will not get saved. */ - void SaveSettings(); + void SaveSettings(); /** @@ -163,21 +162,20 @@ private: * is called when the frame frame is activate to reload the libraries and component lists * that can be changed by the schematic editor or the library editor. */ - virtual void OnActivate( wxActivateEvent& event ); + virtual void OnActivate( wxActivateEvent& event ); - void SelectCurrentWizard( wxCommandEvent& event ); + void SelectCurrentWizard( wxCommandEvent& event ); - void ParametersUpdated( wxGridEvent& event ); + void ParametersUpdated( wxGridEvent& event ); - - bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ); + bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ); /** * Function Show3D_Frame (virtual) * displays 3D view of the footprint (module) being edited. */ - void Show3D_Frame( wxCommandEvent& event ); + void Show3D_Frame( wxCommandEvent& event ); /** * Function Update3D_Frame @@ -186,18 +184,18 @@ private: * @param aForceReloadFootprint = true to reload data (default) * = false to update title only -(aftre creating the 3D viewer) */ - void Update3D_Frame( bool aForceReloadFootprint = true ); + void Update3D_Frame( bool aForceReloadFootprint = true ); /* * Virtual functions, not used here, but needed by PCB_BASE_FRAME * (virtual pure functions ) */ - void OnLeftDClick(wxDC*, const wxPoint&) {} - void SaveCopyInUndoList(BOARD_ITEM*, UNDO_REDO_T, const wxPoint&) {} - void SaveCopyInUndoList(PICKED_ITEMS_LIST&, UNDO_REDO_T, const wxPoint&) {} + void OnLeftDClick( wxDC*, const wxPoint& ) {} + void SaveCopyInUndoList( BOARD_ITEM*, UNDO_REDO_T, const wxPoint& ) {} + void SaveCopyInUndoList( PICKED_ITEMS_LIST&, UNDO_REDO_T, const wxPoint& ) {} DECLARE_EVENT_TABLE() }; -#endif // FOOTPRINT_WIZARD_FRM_H_ +#endif // FOOTPRINT_WIZARD_FRM_H_ diff --git a/pcbnew/scripting/pcbnew_footprint_wizards.cpp b/pcbnew/scripting/pcbnew_footprint_wizards.cpp index 7b3505d7f7..0bacd3fbc9 100644 --- a/pcbnew/scripting/pcbnew_footprint_wizards.cpp +++ b/pcbnew/scripting/pcbnew_footprint_wizards.cpp @@ -29,22 +29,21 @@ #include "pcbnew_footprint_wizards.h" #include - #include PYTHON_FOOTPRINT_WIZARD::PYTHON_FOOTPRINT_WIZARD( PyObject* aWizard ) { - PyLOCK lock; + PyLOCK lock; - this->m_PyWizard= aWizard; + this->m_PyWizard = aWizard; Py_XINCREF( aWizard ); } PYTHON_FOOTPRINT_WIZARD::~PYTHON_FOOTPRINT_WIZARD() { - PyLOCK lock; + PyLOCK lock; Py_XDECREF( this->m_PyWizard ); } @@ -52,10 +51,10 @@ PYTHON_FOOTPRINT_WIZARD::~PYTHON_FOOTPRINT_WIZARD() PyObject* PYTHON_FOOTPRINT_WIZARD::CallMethod( const char* aMethod, PyObject* aArglist ) { - PyLOCK lock; + PyLOCK lock; // pFunc is a new reference to the desired method - PyObject* pFunc = PyObject_GetAttrString( this->m_PyWizard, aMethod ); + PyObject* pFunc = PyObject_GetAttrString( this->m_PyWizard, aMethod ); if( pFunc && PyCallable_Check( pFunc ) ) { @@ -63,23 +62,23 @@ PyObject* PYTHON_FOOTPRINT_WIZARD::CallMethod( const char* aMethod, PyObject* aA if( PyErr_Occurred() ) { - wxString message; - PyObject* t; - PyObject* v; - PyObject* b; + wxString message; + PyObject* t; + PyObject* v; + PyObject* b; PyErr_Fetch( &t, &v, &b ); - message.Printf ( wxT( "calling %s()\n" - "Exception: %s\n" - " : %s\n"), - aMethod, - PyString_AsString( PyObject_Str( v ) ), - PyString_AsString( PyObject_Str( b ) ) + message.Printf( wxT( "calling %s()\n" + "Exception: %s\n" + " : %s\n" ), + aMethod, + FROM_UTF8( PyString_AsString( PyObject_Str( v ) ) ), + FROM_UTF8( PyString_AsString( PyObject_Str( b ) ) ) ); wxMessageBox( message, wxT( "Exception on python footprint wizard code" ), - wxICON_ERROR|wxOK); + wxICON_ERROR | wxOK ); } if( result ) @@ -105,48 +104,52 @@ wxString PYTHON_FOOTPRINT_WIZARD::CallRetStrMethod( const char* aMethod, PyObjec wxString ret; PyLOCK lock; - PyObject* result = CallMethod( aMethod, aArglist ); + PyObject* result = CallMethod( aMethod, aArglist ); + if( result ) { - const char* str_res = PyString_AsString( result ); - ret = wxString::FromUTF8( str_res ); - Py_DECREF( result ); + const char* str_res = PyString_AsString( result ); + ret = FROM_UTF8( str_res ); + Py_DECREF( result ); } + return ret; } -wxArrayString PYTHON_FOOTPRINT_WIZARD::CallRetArrayStrMethod - ( const char* aMethod, PyObject* aArglist ) +wxArrayString PYTHON_FOOTPRINT_WIZARD::CallRetArrayStrMethod( const char* aMethod, + PyObject* aArglist ) { - wxArrayString ret; - wxString str_item; - PyLOCK lock; + wxArrayString ret; + wxString str_item; + PyLOCK lock; - PyObject* result = CallMethod( aMethod, aArglist ); + PyObject* result = CallMethod( aMethod, aArglist ); if( result ) { - if( !PyList_Check( result ) ) - { - Py_DECREF( result ); - ret.Add( wxT( "PYTHON_FOOTPRINT_WIZARD::CallRetArrayStrMethod, result is not a list" ), 1 ); - return ret; - } + if( !PyList_Check( result ) ) + { + Py_DECREF( result ); + ret.Add( wxT( + "PYTHON_FOOTPRINT_WIZARD::CallRetArrayStrMethod, result is not a list" ), + 1 ); + return ret; + } - int list_size = PyList_Size( result ); + int list_size = PyList_Size( result ); - for ( int n=0; nGetName().mb_str() - // ); - - // this get the wizard registered in the common - // FOOTPRINT_WIZARDS class - fw->register_wizard(); - -#if 0 - // just to test if it works correctly - int pages = fw->GetNumParameterPages(); - printf( " %d pages\n",pages ); - - for ( int n=0; n'%s'\n",n, - ( const char* )fw->GetParameterPageName( n ).mb_str() ); - } -#endif - } diff --git a/pcbnew/scripting/pcbnew_footprint_wizards.h b/pcbnew/scripting/pcbnew_footprint_wizards.h index 77854e36b0..d3e98ac244 100644 --- a/pcbnew/scripting/pcbnew_footprint_wizards.h +++ b/pcbnew/scripting/pcbnew_footprint_wizards.h @@ -28,45 +28,41 @@ */ #ifndef PCBNEW_FOOTPRINT_WIZARDS_H -#define PCBNEW_FOOTPRINT_WIZARDS_H +#define PCBNEW_FOOTPRINT_WIZARDS_H #include #include #include - -class PYTHON_FOOTPRINT_WIZARD: public FOOTPRINT_WIZARD +class PYTHON_FOOTPRINT_WIZARD : public FOOTPRINT_WIZARD { - - PyObject *m_PyWizard; - PyObject *CallMethod( const char *aMethod, PyObject *aArglist=NULL ); - wxString CallRetStrMethod( const char *aMethod, PyObject *aArglist=NULL ); - wxArrayString CallRetArrayStrMethod( const char *aMethod, - PyObject *aArglist=NULL ); + PyObject* m_PyWizard; + PyObject* CallMethod( const char* aMethod, PyObject* aArglist = NULL ); + wxString CallRetStrMethod( const char* aMethod, PyObject* aArglist = NULL ); + wxArrayString CallRetArrayStrMethod( const char* aMethod, + PyObject* aArglist = NULL ); public: - PYTHON_FOOTPRINT_WIZARD( PyObject *wizard ); + PYTHON_FOOTPRINT_WIZARD( PyObject* wizard ); ~PYTHON_FOOTPRINT_WIZARD(); - wxString GetName(); - wxString GetImage(); - wxString GetDescription(); - int GetNumParameterPages(); - wxString GetParameterPageName( int aPage ); - wxArrayString GetParameterNames( int aPage ); - wxArrayString GetParameterTypes( int aPage ); - wxArrayString GetParameterValues( int aPage ); - wxArrayString GetParameterErrors( int aPage ); - wxString SetParameterValues( int aPage, wxArrayString& aValues ); //< must return "OK" or error description - MODULE* GetModule(); + wxString GetName(); + wxString GetImage(); + wxString GetDescription(); + int GetNumParameterPages(); + wxString GetParameterPageName( int aPage ); + wxArrayString GetParameterNames( int aPage ); + wxArrayString GetParameterTypes( int aPage ); + wxArrayString GetParameterValues( int aPage ); + wxArrayString GetParameterErrors( int aPage ); + wxString SetParameterValues( int aPage, wxArrayString& aValues ); // < must return "OK" or error description + MODULE* GetModule(); }; class PYTHON_FOOTPRINT_WIZARDS { public: - static void register_wizard( PyObject *aPyWizard ); - + static void register_wizard( PyObject* aPyWizard ); }; -#endif /* PCBNEW_FOOTPRINT_WIZARDS_H */ - +#endif /* PCBNEW_FOOTPRINT_WIZARDS_H */ diff --git a/pcbnew/scripting/pcbnew_scripting_helpers.cpp b/pcbnew/scripting/pcbnew_scripting_helpers.cpp index 9241c427ca..d26f76d374 100644 --- a/pcbnew/scripting/pcbnew_scripting_helpers.cpp +++ b/pcbnew/scripting/pcbnew_scripting_helpers.cpp @@ -39,68 +39,68 @@ #include #include -static PCB_EDIT_FRAME *PcbEditFrame=NULL; +static PCB_EDIT_FRAME* PcbEditFrame = NULL; -BOARD *GetBoard() +BOARD* GetBoard() { - if (PcbEditFrame) + if( PcbEditFrame ) return PcbEditFrame->GetBoard(); - else return NULL; + else + return NULL; } -void ScriptingSetPcbEditFrame( PCB_EDIT_FRAME *aPCBEdaFrame ) + +void ScriptingSetPcbEditFrame( PCB_EDIT_FRAME* aPCBEdaFrame ) { - PcbEditFrame = aPCBEdaFrame; + PcbEditFrame = aPCBEdaFrame; } + BOARD* LoadBoard( wxString& aFileName ) { + if( aFileName.EndsWith( wxT( ".kicad_pcb" ) ) ) + return LoadBoard( aFileName, IO_MGR::KICAD ); - if ( aFileName.EndsWith( wxT( ".kicad_pcb" ) ) ) - return LoadBoard(aFileName,IO_MGR::KICAD); - - else if (aFileName.EndsWith(wxT(".brd"))) - return LoadBoard(aFileName,IO_MGR::LEGACY); + else if( aFileName.EndsWith( wxT( ".brd" ) ) ) + return LoadBoard( aFileName, IO_MGR::LEGACY ); // as fall back for any other kind use the legacy format - return LoadBoard(aFileName,IO_MGR::LEGACY); - + return LoadBoard( aFileName, IO_MGR::LEGACY ); } + BOARD* LoadBoard( wxString& aFileName, IO_MGR::PCB_FILE_T aFormat ) { - return IO_MGR::Load( aFormat, aFileName ); + return IO_MGR::Load( aFormat, aFileName ); } + bool SaveBoard( wxString& aFilename, BOARD* aBoard ) { - return SaveBoard( aFilename, aBoard,IO_MGR::KICAD ); + return SaveBoard( aFilename, aBoard, IO_MGR::KICAD ); } + bool SaveBoard( wxString& aFileName, BOARD* aBoard, IO_MGR::PCB_FILE_T aFormat ) { - aBoard->m_Status_Pcb &= ~CONNEXION_OK; - aBoard->SynchronizeNetsAndNetClasses(); - aBoard->SetCurrentNetClass( aBoard->m_NetClasses.GetDefault()->GetName() ); + aBoard->m_Status_Pcb &= ~CONNEXION_OK; + aBoard->SynchronizeNetsAndNetClasses(); + aBoard->SetCurrentNetClass( aBoard->m_NetClasses.GetDefault()->GetName() ); - wxString header; - PROPERTIES props; + wxString header; + PROPERTIES props; - if ( aFormat==IO_MGR::LEGACY ) - { - header = wxString::Format( - wxT( "PCBNEW-BOARD Version %d date %s\n\n# Created by Pcbnew%s scripting\n\n" ), - LEGACY_BOARD_FILE_VERSION, DateAndTime().GetData(), - GetBuildVersion().GetData() ); - props["header"] = header; - } + if( aFormat==IO_MGR::LEGACY ) + { + header = wxString::Format( + wxT( "PCBNEW-BOARD Version %d date %s\n\n# Created by Pcbnew%s scripting\n\n" ), + LEGACY_BOARD_FILE_VERSION, DateAndTime().GetData(), + GetBuildVersion().GetData() ); + props["header"] = header; + } - - IO_MGR::Save( aFormat, aFileName, aBoard, &props ); - return true; - + IO_MGR::Save( aFormat, aFileName, aBoard, &props ); + return true; } - - diff --git a/pcbnew/scripting/pcbnew_scripting_helpers.h b/pcbnew/scripting/pcbnew_scripting_helpers.h index 24f108fb0b..bff3d0e133 100644 --- a/pcbnew/scripting/pcbnew_scripting_helpers.h +++ b/pcbnew/scripting/pcbnew_scripting_helpers.h @@ -31,16 +31,17 @@ * we want plain pcbnew. access from python */ #ifndef SWIG -void ScriptingSetPcbEditFrame( PCB_EDIT_FRAME *aPCBEdaFrame ); -#endif +void ScriptingSetPcbEditFrame( PCB_EDIT_FRAME* aPCBEdaFrame ); -BOARD *GetBoard(); +#endif -BOARD* LoadBoard( wxString& aFileName, IO_MGR::PCB_FILE_T aFormat ); -BOARD* LoadBoard( wxString& aFileName ); +BOARD* GetBoard(); -bool SaveBoard( wxString& aFileName, BOARD* aBoard, IO_MGR::PCB_FILE_T aFormat ); -bool SaveBoard( wxString& aFileName, BOARD* aBoard ); +BOARD* LoadBoard( wxString& aFileName, IO_MGR::PCB_FILE_T aFormat ); +BOARD* LoadBoard( wxString& aFileName ); + +bool SaveBoard( wxString& aFileName, BOARD* aBoard, IO_MGR::PCB_FILE_T aFormat ); +bool SaveBoard( wxString& aFileName, BOARD* aBoard ); #endif diff --git a/scripting/python_scripting.cpp b/scripting/python_scripting.cpp index b929b7b308..a521f64123 100644 --- a/scripting/python_scripting.cpp +++ b/scripting/python_scripting.cpp @@ -54,18 +54,18 @@ extern "C" void init_pcbnew( void ); * our own ones */ -struct _inittab *SwigImportInittab; -static int SwigNumModules = 0; +struct _inittab* SwigImportInittab; +static int SwigNumModules = 0; /* Add a name + initfuction to our SwigImportInittab */ static void swigAddModule( const char* name, void (* initfunc)() ) { - SwigImportInittab[SwigNumModules].name = (char*) name; + SwigImportInittab[SwigNumModules].name = (char*) name; SwigImportInittab[SwigNumModules].initfunc = initfunc; SwigNumModules++; - SwigImportInittab[SwigNumModules].name = (char*) 0; + SwigImportInittab[SwigNumModules].name = (char*) 0; SwigImportInittab[SwigNumModules].initfunc = 0; } @@ -81,11 +81,12 @@ static void swigAddBuiltin() i++; /* allocate memory for the python module table */ - SwigImportInittab = (struct _inittab*) malloc( - sizeof(struct _inittab)*(i+EXTRA_PYTHON_MODULES)); + SwigImportInittab = (struct _inittab*) malloc( + sizeof(struct _inittab) * (i + EXTRA_PYTHON_MODULES) ); /* copy all pre-existing python modules into our newly created table */ - i=0; + i = 0; + while( PyImport_Inittab[i].name ) { swigAddModule( PyImport_Inittab[i].name, PyImport_Inittab[i].initfunc ); @@ -107,9 +108,10 @@ static void swigAddModules() // finally it seems better to include all in just one module // but in case we needed to include any other modules, // it must be done like this: - // swigAddModule("_kicad",init_kicad); + // swigAddModule( "_kicad", init_kicad ); } + /* Function swigSwitchPythonBuiltin * switches python module table to our built one . * @@ -120,6 +122,7 @@ static void swigSwitchPythonBuiltin() PyImport_Inittab = SwigImportInittab; } + /* Function pcbnewInitPythonScripting * Initializes all the python environment and publish our interface inside it * initializes all the wxpython interface, and returns the python thread control structure @@ -142,9 +145,9 @@ bool pcbnewInitPythonScripting() // Load the wxPython core API. Imports the wx._core_ module and sets a // local pointer to a function table located there. The pointer is used // internally by the rest of the API functions. - if( ! wxPyCoreAPI_IMPORT() ) + if( !wxPyCoreAPI_IMPORT() ) { - wxLogError(wxT("***** Error importing the wxPython API! *****")); + wxLogError( wxT( "***** Error importing the wxPython API! *****" ) ); PyErr_Print(); Py_Finalize(); return false; @@ -160,7 +163,7 @@ bool pcbnewInitPythonScripting() #endif { - PyLOCK lock; + PyLOCK lock; PyRun_SimpleString( "import sys\n" "sys.path.append(\".\")\n" @@ -172,10 +175,11 @@ bool pcbnewInitPythonScripting() return true; } + void pcbnewFinishPythonScripting() { #ifdef KICAD_SCRIPTING_WXPYTHON - wxPyEndAllowThreads(g_PythonMainTState); + wxPyEndAllowThreads( g_PythonMainTState ); #endif Py_Finalize(); } @@ -189,54 +193,55 @@ void RedirectStdio() // redirects Python's stdout and stderr to a window that will popup // only on demand when something is printed, like a traceback. const char* python_redirect = -"import sys\n\ -import wx\n\ -output = wx.PyOnDemandOutputWindow()\n\ -c sys.stderr = output\n"; + "import sys\n" + "import wx\n" + "output = wx.PyOnDemandOutputWindow()\n" + "sys.stderr = output\n"; + + PyLOCK lock; - PyLOCK lock; PyRun_SimpleString( python_redirect ); } -wxWindow* CreatePythonShellWindow(wxWindow* parent) +wxWindow* CreatePythonShellWindow( wxWindow* parent ) { - -const char* pycrust_panel = "\ -import wx\n\ -from wx.py import shell, version\n\ -\n\ -class PyCrustPanel(wx.Panel):\n\ -\tdef __init__(self, parent):\n\ -\t\twx.Panel.__init__(self, parent, -1, style=wx.SUNKEN_BORDER)\n\ -\t\t\n\ -\t\t\n\ -\t\tintro = \"Welcome To PyCrust %s - KiCAD Python Shell\" % version.VERSION\n\ -\t\tpycrust = shell.Shell(self, -1, introText=intro)\n\ -\t\t\n\ -\t\tsizer = wx.BoxSizer(wx.VERTICAL)\n\n\ -\t\tsizer.Add(pycrust, 1, wx.EXPAND|wx.BOTTOM|wx.LEFT|wx.RIGHT, 10)\n\n\ -\t\tself.SetSizer(sizer)\n\n\ -\n\ -def makeWindow(parent):\n\ - win = PyCrustPanel(parent)\n\ - return win\n\ -"; + const char* pycrust_panel = + "import wx\n" + "from wx.py import shell, version\n" + "\n" + "class PyCrustPanel(wx.Panel):\n" + "\tdef __init__(self, parent):\n" + "\t\twx.Panel.__init__(self, parent, -1, style=wx.SUNKEN_BORDER)\n" + "\t\t\n" + "\t\t\n" + "\t\tintro = \"Welcome To PyCrust %s - KiCAD Python Shell\" % version.VERSION\n" + "\t\tpycrust = shell.Shell(self, -1, introText=intro)\n" + "\t\t\n" + "\t\tsizer = wx.BoxSizer(wx.VERTICAL)\n\n" + "\t\tsizer.Add(pycrust, 1, wx.EXPAND|wx.BOTTOM|wx.LEFT|wx.RIGHT, 10)\n\n" + "\t\tself.SetSizer(sizer)\n\n" + "\n" + "def makeWindow(parent):\n" + " win = PyCrustPanel(parent)\n" + " return win\n" + "\n"; - wxWindow* window = NULL; - PyObject* result; + wxWindow* window = NULL; + PyObject* result; // As always, first grab the GIL - PyLOCK lock; + PyLOCK lock; // Now make a dictionary to serve as the global namespace when the code is // executed. Put a reference to the builtins module in it. - PyObject* globals = PyDict_New(); - PyObject* builtins = PyImport_ImportModule( "__builtin__" ); + PyObject* globals = PyDict_New(); + PyObject* builtins = PyImport_ImportModule( "__builtin__" ); + PyDict_SetItemString( globals, "__builtins__", builtins ); - Py_DECREF(builtins); + Py_DECREF( builtins ); // Execute the code to make the makeWindow function we defined above result = PyRun_String( pycrust_panel, Py_file_input, globals, globals ); @@ -247,7 +252,8 @@ def makeWindow(parent):\n\ PyErr_Print(); return NULL; } - Py_DECREF(result); + + Py_DECREF( result ); // Now there should be an object named 'makeWindow' in the dictionary that // we can grab a pointer to: @@ -258,10 +264,10 @@ def makeWindow(parent):\n\ // use of another wxPython API to take a wxWindows object and build a // wxPython object that wraps it. - PyObject* arg = wxPyMake_wxObject( parent, false ); + PyObject* arg = wxPyMake_wxObject( parent, false ); wxASSERT( arg != NULL ); - PyObject* tuple = PyTuple_New( 1 ); + PyObject* tuple = PyTuple_New( 1 ); PyTuple_SET_ITEM( tuple, 0, arg ); result = PyEval_CallObject( func, tuple ); @@ -273,11 +279,11 @@ def makeWindow(parent):\n\ { // Otherwise, get the returned window out of Python-land and // into C++-ville... - bool success = wxPyConvertSwigPtr(result, (void**)&window, _T("wxWindow") ); - (void)success; + bool success = wxPyConvertSwigPtr( result, (void**) &window, _T( "wxWindow" ) ); + (void) success; - wxASSERT_MSG(success, _T("Returned object was not a wxWindow!") ); - Py_DECREF(result); + wxASSERT_MSG( success, _T( "Returned object was not a wxWindow!" ) ); + Py_DECREF( result ); } // Release the python objects we still have @@ -286,4 +292,6 @@ def makeWindow(parent):\n\ return window; } + + #endif diff --git a/scripting/python_scripting.h b/scripting/python_scripting.h index 2b646de4ab..a4e3748135 100644 --- a/scripting/python_scripting.h +++ b/scripting/python_scripting.h @@ -1,7 +1,7 @@ #ifndef __PYTHON_SCRIPTING_H #define __PYTHON_SCRIPTING_H - // undefs explained here: https://bugzilla.redhat.com/show_bug.cgi?id=427617 +// undefs explained here: https://bugzilla.redhat.com/show_bug.cgi?id=427617 #ifdef _POSIX_C_SOURCE #undef _POSIX_C_SOURCE @@ -21,19 +21,18 @@ * Initializes the Python engine inside pcbnew */ -bool pcbnewInitPythonScripting(); -void pcbnewFinishPythonScripting(); +bool pcbnewInitPythonScripting(); +void pcbnewFinishPythonScripting(); #ifdef KICAD_SCRIPTING_WXPYTHON -void RedirectStdio(); -wxWindow* CreatePythonShellWindow( wxWindow* parent ); +void RedirectStdio(); +wxWindow* CreatePythonShellWindow( wxWindow* parent ); class PyLOCK { - wxPyBlock_t b; - + wxPyBlock_t b; public: // @todo, find out why these are wxPython specific. We need the GIL regardless. @@ -46,13 +45,12 @@ public: #else class PyLOCK { - PyGILState_STATE gil_state; - + PyGILState_STATE gil_state; public: - PyLOCK() { gil_state = PyGILState_Ensure(); } - ~PyLOCK() { PyGILState_Release( gil_state ); } + PyLOCK() { gil_state = PyGILState_Ensure(); } + ~PyLOCK() { PyGILState_Release( gil_state ); } }; #endif -#endif // __PYTHON_SCRIPTING_H +#endif // __PYTHON_SCRIPTING_H diff --git a/scripting/wx_python_helpers.cpp b/scripting/wx_python_helpers.cpp index ec01a396c8..a97314b355 100644 --- a/scripting/wx_python_helpers.cpp +++ b/scripting/wx_python_helpers.cpp @@ -65,8 +65,8 @@ wxString* newWxStringFromPy( PyObject* src ) { bool must_unref_str = false; - wxString* result = NULL; - PyObject* obj = src; + wxString* result = NULL; + PyObject* obj = src; #if wxUSE_UNICODE bool must_unref_obj = false; @@ -111,14 +111,14 @@ wxString* newWxStringFromPy( PyObject* src ) // normal string (or object) to normal python string PyObject* str = src; - if( PyUnicode_Check( src ) ) // if it's unicode convert to normal string + if( PyUnicode_Check( src ) ) // if it's unicode convert to normal string { str = PyUnicode_AsEncodedString( src, wxPythonEncoding, "strict" ); if( PyErr_Occurred() ) return NULL; } - else if( !PyString_Check( src ) ) // if it's not a string, str(obj) + else if( !PyString_Check( src ) ) // if it's not a string, str(obj) { str = PyObject_Str( src ); must_unref_str = true;