diff --git a/pcbnew/footprint_wizard_frame.cpp b/pcbnew/footprint_wizard_frame.cpp index 7f615ae4c6..cd755bfdf4 100644 --- a/pcbnew/footprint_wizard_frame.cpp +++ b/pcbnew/footprint_wizard_frame.cpp @@ -118,7 +118,6 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, // This frame is always show modal: SetModal( true ); - m_messagesFrame = NULL; // This windows will be created the first time a wizard is loaded m_showAxis = true; // true to draw axis. // Give an icon @@ -153,18 +152,30 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, ReCreateVToolbar(); SetActiveLayer( F_Cu ); - // Creates the parameter pages list - m_pageList = new wxListBox( this, ID_FOOTPRINT_WIZARD_PAGE_LIST, + // Create the parameters panel + m_parametersPanel = new wxPanel( this, wxID_ANY ); + + m_pageList = new wxListBox( m_parametersPanel, ID_FOOTPRINT_WIZARD_PAGE_LIST, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_HSCROLL ); - // Creates the list of parameters for the current parameter page - m_parameterGridPage = -1; + m_parameterGrid = new wxGrid( m_parametersPanel, ID_FOOTPRINT_WIZARD_PARAMETER_LIST ); initParameterGrid(); m_parameterGrid->PushEventHandler( new GRID_TRICKS( m_parameterGrid ) ); ReCreatePageList(); + wxBoxSizer* parametersSizer = new wxBoxSizer( wxHORIZONTAL ); + parametersSizer->Add( m_pageList, 0, wxEXPAND|wxALL, 5 ); + parametersSizer->Add( m_parameterGrid, 1, wxEXPAND|wxALL, 5 ); + m_parametersPanel->SetSizer( parametersSizer ); + m_parametersPanel->Layout(); + + // Create the build message box + m_buildMessageBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString, + wxDefaultPosition, wxDefaultSize, + wxTE_MULTILINE|wxTE_READONLY ); + DisplayWizardInfos(); m_auimgr.SetManagedWindow( this ); @@ -182,15 +193,15 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, m_auimgr.AddPane( m_mainToolBar, wxAuiPaneInfo( horiztb ). Name( wxT ("m_mainToolBar" ) ).Top().Row( 0 ) ); - // Manage the left window (list of parameter pages) - EDA_PANEINFO paneList; - paneList.InfoToolbarPane().Name( wxT( "m_pageList" ) ).Left().Row( 0 ); - m_auimgr.AddPane( m_pageList, wxAuiPaneInfo( paneList ) ); + // Manage the parameters panel + EDA_PANEINFO parametersPaneInfo; + parametersPaneInfo.InfoToolbarPane().Name( wxT( "m_parametersPanel" ) ).Left().Position( 0 ); + m_auimgr.AddPane( m_parametersPanel, wxAuiPaneInfo( parametersPaneInfo ) ); - // Manage the parameters grid editor for the current parameter page - EDA_PANEINFO panePrms; - panePrms.InfoToolbarPane().Name( wxT( "m_parameterGrid" ) ).Left().Row( 1 ); - m_auimgr.AddPane( m_parameterGrid, wxAuiPaneInfo( panePrms ) ); + // Manage the build message box + EDA_PANEINFO buildMessageBoxInfo; + buildMessageBoxInfo.InfoToolbarPane().Name( wxT( "m_buildMessageBox" ) ).Left().Position( 1 ); + m_auimgr.AddPane( m_buildMessageBox, wxAuiPaneInfo( buildMessageBoxInfo ) ); // Manage the draw panel m_auimgr.AddPane( m_canvas, @@ -200,14 +211,10 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, m_auimgr.AddPane( m_messagePanel, wxAuiPaneInfo( mesg ).Name( wxT( "MsgPanel" ) ).Bottom().Layer(1) ); - // Gives a min size and the last saved size to left windows - m_auimgr.GetPane( m_pageList ).MinSize( wxSize(60, -1 ) ); - m_auimgr.GetPane( m_pageList ).BestSize( wxSize(m_pageListWidth, -1) ); + // Give a min size to the parameters + m_auimgr.GetPane( m_parametersPanel ).MinSize( wxSize( 360, 180 ) ); - m_auimgr.GetPane( m_parameterGrid ).MinSize( wxSize( 120, -1 ) ); - m_auimgr.GetPane( m_parameterGrid ).BestSize( wxSize(m_parameterGridWidth, -1) ); - - m_auimgr.Update(); + m_auimgr.LoadPerspective( m_auiPerspective ); // Now Drawpanel is sized, we can use BestZoom to show the component (if any) #ifdef USE_WX_GRAPHICS_CONTEXT @@ -239,9 +246,6 @@ FOOTPRINT_WIZARD_FRAME::~FOOTPRINT_WIZARD_FRAME() void FOOTPRINT_WIZARD_FRAME::OnCloseWindow( wxCloseEvent& Event ) { - if( m_messagesFrame ) - m_messagesFrame->SaveSettings(); - SaveSettings( config() ); if( IsModal() ) @@ -264,6 +268,7 @@ void FOOTPRINT_WIZARD_FRAME::ExportSelectedFootprint( wxCommandEvent& aEvent ) Close(); } + void FOOTPRINT_WIZARD_FRAME::OnGridSize( wxSizeEvent& aSizeEvent ) { // Resize the parameter columns @@ -272,6 +277,7 @@ void FOOTPRINT_WIZARD_FRAME::OnGridSize( wxSizeEvent& aSizeEvent ) aSizeEvent.Skip(); } + void FOOTPRINT_WIZARD_FRAME::OnSize( wxSizeEvent& SizeEv ) { if( m_auimgr.GetManagedWindow() ) @@ -287,24 +293,25 @@ void FOOTPRINT_WIZARD_FRAME::OnSetRelativeOffset( wxCommandEvent& event ) UpdateStatusBar(); } + void FOOTPRINT_WIZARD_FRAME::initParameterGrid() { + m_parameterGridPage = -1; + // Prepare the grid where parameters are displayed - m_parameterGrid = new wxGrid( this, ID_FOOTPRINT_WIZARD_PARAMETER_LIST ); + m_parameterGrid->CreateGrid( 0, 3 ); - // Columns m_parameterGrid->SetColLabelValue( WIZ_COL_NAME, _( "Parameter" ) ); m_parameterGrid->SetColLabelValue( WIZ_COL_VALUE, _( "Value" ) ); m_parameterGrid->SetColLabelValue( WIZ_COL_UNITS, _( "Units" ) ); + m_parameterGrid->SetColLabelSize( 22 ); m_parameterGrid->SetColLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE ); m_parameterGrid->AutoSizeColumns(); - // Rows m_parameterGrid->AutoSizeRows(); - m_parameterGrid->SetRowLabelSize( 25 ); - m_parameterGrid->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + m_parameterGrid->SetRowLabelSize( 0 ); m_parameterGrid->DisableDragGridSize(); m_parameterGrid->DisableDragColSize(); @@ -387,7 +394,6 @@ void FOOTPRINT_WIZARD_FRAME::ReCreateParameterList() // Set the 'Name' m_parameterGrid->SetCellValue( i, WIZ_COL_NAME, name ); m_parameterGrid->SetReadOnly( i, WIZ_COL_NAME ); - m_parameterGrid->SetCellAlignment( i, WIZ_COL_NAME, wxALIGN_LEFT, wxALIGN_CENTRE ); // Boolean parameters are displayed using a checkbox if( units == WIZARD_PARAM_UNITS_BOOL ) @@ -434,11 +440,9 @@ void FOOTPRINT_WIZARD_FRAME::ReCreateParameterList() // Set the 'Units' m_parameterGrid->SetCellValue( i, WIZ_COL_UNITS, units ); m_parameterGrid->SetReadOnly( i, WIZ_COL_UNITS ); - m_parameterGrid->SetCellAlignment( i, WIZ_COL_UNITS, wxALIGN_LEFT, wxALIGN_CENTRE ); // Set the 'Value' m_parameterGrid->SetCellValue( i, WIZ_COL_VALUE, value ); - m_parameterGrid->SetCellAlignment( i, WIZ_COL_VALUE, wxALIGN_CENTRE, wxALIGN_CENTRE ); } ResizeParamColumns(); @@ -480,23 +484,14 @@ void FOOTPRINT_WIZARD_FRAME::ClickOnPageList( wxCommandEvent& event ) } -#define PAGE_LIST_WIDTH_KEY wxT( "Fpwizard_Pagelist_width" ) -#define PARAMLIST_WIDTH_KEY wxT( "Fpwizard_Paramlist_width" ) +#define AUI_PERSPECTIVE_KEY wxT( "Fpwizard_auiPerspective" ) void FOOTPRINT_WIZARD_FRAME::LoadSettings( wxConfigBase* aCfg ) { EDA_DRAW_FRAME::LoadSettings( aCfg ); - aCfg->Read( PAGE_LIST_WIDTH_KEY, &m_pageListWidth, 100 ); - aCfg->Read( PARAMLIST_WIDTH_KEY, &m_parameterGridWidth, 200 ); - - // Set parameters to a reasonable value. - if( m_pageListWidth > m_FrameSize.x / 3 ) - m_pageListWidth = m_FrameSize.x / 3; - - if( m_parameterGridWidth > m_FrameSize.x / 2 ) - m_parameterGridWidth = m_FrameSize.x / 2; + aCfg->Read( AUI_PERSPECTIVE_KEY, &m_auiPerspective ); } @@ -504,8 +499,7 @@ void FOOTPRINT_WIZARD_FRAME::SaveSettings( wxConfigBase* aCfg ) { EDA_DRAW_FRAME::SaveSettings( aCfg ); - aCfg->Write( PAGE_LIST_WIDTH_KEY, m_pageList->GetSize().x ); - aCfg->Write( PARAMLIST_WIDTH_KEY, m_parameterGrid->GetSize().x ); + aCfg->Write( AUI_PERSPECTIVE_KEY, m_auimgr.SavePerspective() ); } @@ -739,91 +733,4 @@ void FOOTPRINT_WIZARD_FRAME::PythonPluginsReload() } #endif -// frame to display messages from footprint builder scripts -FOOTPRINT_WIZARD_MESSAGES::FOOTPRINT_WIZARD_MESSAGES( FOOTPRINT_WIZARD_FRAME* aParent, wxConfigBase* aCfg ) : - wxMiniFrame( aParent, wxID_ANY, _( "Footprint Builder Messages" ), - wxDefaultPosition, wxDefaultSize, - wxCAPTION | wxRESIZE_BORDER | wxFRAME_FLOAT_ON_PARENT ) -{ - m_canClose = false; - wxBoxSizer* bSizer = new wxBoxSizer( wxVERTICAL ); - SetSizer( bSizer ); - m_messageWindow = new wxTextCtrl( this, wxID_ANY, wxEmptyString, - wxDefaultPosition, wxDefaultSize, - wxTE_MULTILINE|wxTE_READONLY ); - bSizer->Add( m_messageWindow, 1, wxEXPAND, 0 ); - - m_config = aCfg; - - LoadSettings(); - - SetSize( m_position.x, m_position.y, m_size.x, m_size.y ); - - m_messageWindow->SetMinSize( wxSize( 350, 250 ) ); - Layout(); - - bSizer->SetSizeHints( this ); -} - - -FOOTPRINT_WIZARD_MESSAGES::~FOOTPRINT_WIZARD_MESSAGES() -{ -} - - -BEGIN_EVENT_TABLE( FOOTPRINT_WIZARD_MESSAGES, wxMiniFrame ) - EVT_CLOSE( FOOTPRINT_WIZARD_MESSAGES::OnCloseMsgWindow ) -END_EVENT_TABLE() - - -void FOOTPRINT_WIZARD_MESSAGES::OnCloseMsgWindow( wxCloseEvent& aEvent ) -{ - if( !m_canClose ) - aEvent.Veto(); - else - aEvent.Skip(); -} - - -void FOOTPRINT_WIZARD_MESSAGES::PrintMessage( const wxString& aMessage ) -{ - m_messageWindow->SetValue( aMessage ); -} - - -void FOOTPRINT_WIZARD_MESSAGES::ClearScreen() -{ - m_messageWindow->Clear(); -} - - -#define MESSAGE_BOX_POSX_KEY wxT( "Fpwizard_Msg_PosX" ) -#define MESSAGE_BOX_POSY_KEY wxT( "Fpwizard_Msg_PosY" ) -#define MESSAGE_BOX_SIZEX_KEY wxT( "Fpwizard_Msg_SIZEX" ) -#define MESSAGE_BOX_SIZEY_KEY wxT( "Fpwizard_Msg_SIZEY" ) - -void FOOTPRINT_WIZARD_MESSAGES::SaveSettings() -{ - if( !IsIconized() ) - { - m_position = GetPosition(); - m_size = GetSize(); - } - - m_config->Write( MESSAGE_BOX_POSX_KEY, m_position.x ); - m_config->Write( MESSAGE_BOX_POSY_KEY, m_position.y ); - m_config->Write( MESSAGE_BOX_SIZEX_KEY, m_size.x ); - m_config->Write( MESSAGE_BOX_SIZEY_KEY, m_size.y ); - - m_canClose = false; // close event now allowed -} - - -void FOOTPRINT_WIZARD_MESSAGES::LoadSettings() -{ - m_config->Read( MESSAGE_BOX_POSX_KEY, &m_position.x, -1 ); - m_config->Read( MESSAGE_BOX_POSY_KEY, &m_position.y, -1 ); - m_config->Read( MESSAGE_BOX_SIZEX_KEY, &m_size.x, 350 ); - m_config->Read( MESSAGE_BOX_SIZEY_KEY, &m_size.y, 250 ); -} diff --git a/pcbnew/footprint_wizard_frame.h b/pcbnew/footprint_wizard_frame.h index 441344051d..1edc35675a 100644 --- a/pcbnew/footprint_wizard_frame.h +++ b/pcbnew/footprint_wizard_frame.h @@ -39,8 +39,6 @@ class wxGrid; class wxGridEvent; class FOOTPRINT_EDIT_FRAME; -// A helper class to display messages when building a footprint -class FOOTPRINT_WIZARD_MESSAGES; enum WizardParameterColumnNames { @@ -55,14 +53,15 @@ enum WizardParameterColumnNames class FOOTPRINT_WIZARD_FRAME : public PCB_BASE_FRAME { private: + wxPanel* m_parametersPanel; ///< Panel for the page list and parameter grid wxListBox* m_pageList; ///< The list of pages - int m_pageListWidth; ///< width of the window wxGrid* m_parameterGrid; ///< The list of parameters - int m_parameterGridWidth; ///< size of the grid int m_parameterGridPage; ///< the page currently displayed by m_parameterGrid ///< it is most of time the m_pageList selection, but can differ ///< during transitions between pages. - FOOTPRINT_WIZARD_MESSAGES* m_messagesFrame; + wxTextCtrl* m_buildMessageBox; + + wxString m_auiPerspective; ///< Encoded string describing the AUI layout protected: wxString m_wizardName; ///< name of the current wizard @@ -225,27 +224,5 @@ private: }; -// A miniframe to display messages from the builder -class FOOTPRINT_WIZARD_MESSAGES: public wxMiniFrame -{ -public: - FOOTPRINT_WIZARD_MESSAGES( FOOTPRINT_WIZARD_FRAME* aParent, wxConfigBase* aCfg ); - ~FOOTPRINT_WIZARD_MESSAGES(); - void PrintMessage( const wxString& aMessage ); - void ClearScreen(); - void SaveSettings(); - void LoadSettings(); - -private: - wxTextCtrl* m_messageWindow; - wxPoint m_position; - wxSize m_size; - wxConfigBase* m_config; - bool m_canClose; // false to veto a close event, true to allow it - - void OnCloseMsgWindow( wxCloseEvent& aEvent ); - - DECLARE_EVENT_TABLE() -}; #endif // FOOTPRINT_WIZARD_FRM_H_ diff --git a/pcbnew/footprint_wizard_frame_functions.cpp b/pcbnew/footprint_wizard_frame_functions.cpp index 39e9fa88ff..d3ae1a4e12 100644 --- a/pcbnew/footprint_wizard_frame_functions.cpp +++ b/pcbnew/footprint_wizard_frame_functions.cpp @@ -146,17 +146,7 @@ void FOOTPRINT_WIZARD_FRAME::ReloadFootprint() void FOOTPRINT_WIZARD_FRAME::DisplayBuildMessage( wxString& aMessage ) { - if( m_messagesFrame == NULL ) - { - // Prepare the window to display the message generated by the footprint script builder - m_messagesFrame = new FOOTPRINT_WIZARD_MESSAGES( this, config() ); - m_messagesFrame->Show( true ); - } - - m_messagesFrame->ClearScreen(); - - if( !aMessage.IsEmpty() ) - m_messagesFrame->PrintMessage( aMessage ); + m_buildMessageBox->SetValue( aMessage ); }