Commit 59549109 authored by jean-pierre charras's avatar jean-pierre charras

Fix some issues in modview, relative to some a bad use of some wxAuiManager functions.

parent f0412874
...@@ -118,6 +118,8 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( wxWindow* aParent, ...@@ -118,6 +118,8 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( wxWindow* aParent,
m_snapToGrid = true; m_snapToGrid = true;
m_MsgFrameHeight = EDA_MSG_PANEL::GetRequiredHeight(); m_MsgFrameHeight = EDA_MSG_PANEL::GetRequiredHeight();
m_auimgr.SetFlags(wxAUI_MGR_DEFAULT|wxAUI_MGR_LIVE_RESIZE);
CreateStatusBar( 6 ); CreateStatusBar( 6 );
// set the size of the status bar subwindows: // set the size of the status bar subwindows:
......
...@@ -117,6 +117,7 @@ static wxAcceleratorEntry accels[] = ...@@ -117,6 +117,7 @@ static wxAcceleratorEntry accels[] =
#define FOOTPRINT_VIEWER_FRAME_NAME wxT( "ModViewFrame" ) #define FOOTPRINT_VIEWER_FRAME_NAME wxT( "ModViewFrame" )
FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( PCB_BASE_FRAME* aParent, FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( PCB_BASE_FRAME* aParent,
FP_LIB_TABLE* aTable, FP_LIB_TABLE* aTable,
wxSemaphore* aSemaphore, wxSemaphore* aSemaphore,
...@@ -137,14 +138,12 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( PCB_BASE_FRAME* aParent, ...@@ -137,14 +138,12 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( PCB_BASE_FRAME* aParent,
SetIcon( icon ); SetIcon( icon );
m_HotkeysZoomAndGridList = g_Module_Viewer_Hokeys_Descr; m_HotkeysZoomAndGridList = g_Module_Viewer_Hokeys_Descr;
m_FootprintList = NULL; m_footprintList = NULL;
m_LibList = NULL; m_libList = NULL;
m_LibListWindow = NULL; m_semaphore = aSemaphore;
m_FootprintListWindow = NULL;
m_Semaphore = aSemaphore;
m_selectedFootprintName.Empty(); m_selectedFootprintName.Empty();
if( m_Semaphore ) if( m_semaphore )
SetModalMode( true ); SetModalMode( true );
SetBoard( new BOARD() ); SetBoard( new BOARD() );
...@@ -160,33 +159,17 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( PCB_BASE_FRAME* aParent, ...@@ -160,33 +159,17 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( PCB_BASE_FRAME* aParent,
ReCreateHToolbar(); ReCreateHToolbar();
ReCreateVToolbar(); ReCreateVToolbar();
wxSize initialSashSize( 100, -1 ); wxSize minsize(100,-1);
// Creates the library and footprint list
// Creates the libraries window display m_libList = new wxListBox( this, ID_MODVIEW_LIB_LIST,
m_LibListWindow = wxDefaultPosition, minsize,
new wxSashLayoutWindow( this, ID_MODVIEW_LIBWINDOW, wxDefaultPosition,
initialSashSize, wxCLIP_CHILDREN | wxSW_3D,
wxT( "LibWindow" ) );
m_LibListWindow->SetOrientation( wxLAYOUT_VERTICAL );
m_LibListWindow->SetAlignment( wxLAYOUT_LEFT );
m_LibListWindow->SetSashVisible( wxSASH_RIGHT, true );
m_LibListWindow->SetExtraBorderSize( EXTRA_BORDER_SIZE );
m_LibList = new wxListBox( m_LibListWindow, ID_MODVIEW_LIB_LIST,
wxDefaultPosition, initialSashSize,
0, NULL, wxLB_HSCROLL ); 0, NULL, wxLB_HSCROLL );
m_libList->SetMinSize( minsize );
// Creates the footprint window display m_footprintList = new wxListBox( this, ID_MODVIEW_FOOTPRINT_LIST,
m_FootprintListWindow = new wxSashLayoutWindow( this, ID_MODVIEW_FOOTPRINT_WINDOW, wxDefaultPosition, minsize,
wxDefaultPosition, initialSashSize,
wxCLIP_CHILDREN | wxSW_3D,
wxT( "CmpWindow" ) );
m_FootprintListWindow->SetOrientation( wxLAYOUT_VERTICAL );
m_FootprintListWindow->SetSashVisible( wxSASH_RIGHT, true );
m_FootprintListWindow->SetExtraBorderSize( EXTRA_BORDER_SIZE );
m_FootprintList = new wxListBox( m_FootprintListWindow, ID_MODVIEW_FOOTPRINT_LIST,
wxDefaultPosition, initialSashSize,
0, NULL, wxLB_HSCROLL ); 0, NULL, wxLB_HSCROLL );
m_footprintList->SetMinSize( minsize );
ReCreateLibraryList(); ReCreateLibraryList();
DisplayLibInfos(); DisplayLibInfos();
...@@ -211,7 +194,8 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( PCB_BASE_FRAME* aParent, ...@@ -211,7 +194,8 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( PCB_BASE_FRAME* aParent,
// most likely due to the fact that the other windows are not dockable and are preventing the // most likely due to the fact that the other windows are not dockable and are preventing the
// tool bar from docking on the right and left. // tool bar from docking on the right and left.
wxAuiPaneInfo toolbarPaneInfo; wxAuiPaneInfo toolbarPaneInfo;
toolbarPaneInfo.Name( wxT( "m_mainToolBar" ) ).ToolbarPane().Top().CloseButton( false ); toolbarPaneInfo.Name( wxT( "m_mainToolBar" ) ).ToolbarPane().Top()
.CloseButton( false );
EDA_PANEINFO info; EDA_PANEINFO info;
info.InfoToolbarPane(); info.InfoToolbarPane();
...@@ -223,40 +207,43 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( PCB_BASE_FRAME* aParent, ...@@ -223,40 +207,43 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( PCB_BASE_FRAME* aParent,
m_auimgr.AddPane( m_mainToolBar, toolbarPaneInfo ); m_auimgr.AddPane( m_mainToolBar, toolbarPaneInfo );
// Manage the list of libraries, left pane. // Manage the list of libraries, left pane.
if( m_LibListWindow ) m_auimgr.AddPane( m_libList,
m_auimgr.AddPane( m_LibListWindow, wxAuiPaneInfo( info ).Name( wxT( "m_LibList" ) ). wxAuiPaneInfo( info ).Name( wxT( "m_libList" ) )
Left().Row( 1 ) ); .Left().Row( 1 ) );
// Manage the list of footprints, center pane. // Manage the list of footprints, center pane.
m_auimgr.AddPane( m_FootprintListWindow, m_auimgr.AddPane( m_footprintList,
wxAuiPaneInfo( info ).Name( wxT( "m_FootprintList" ) ).Centre().Row( 1 ) ); wxAuiPaneInfo( info ).Name( wxT( "m_footprintList" ) )
.Left().Row( 2 ) );
// Manage the draw panel, right pane. // Manage the draw panel, right pane.
m_auimgr.AddPane( m_canvas, m_auimgr.AddPane( m_canvas,
wxAuiPaneInfo().Name( wxT( "DrawFrame" ) ).Right().Row( 1 ).CloseButton( false ) ); wxAuiPaneInfo().Name( wxT( "DrawFrame" ) ).Centre().Row( 1 ).CloseButton( false ) );
// Manage the message panel, bottom pane. // Manage the message panel, bottom pane.
m_auimgr.AddPane( m_messagePanel, m_auimgr.AddPane( m_messagePanel,
wxAuiPaneInfo( mesg ).Name( wxT( "MsgPanel" ) ).Bottom() ); wxAuiPaneInfo( mesg ).Name( wxT( "MsgPanel" ) ).Bottom() );
/* Now the minimum windows are fixed, set library list if( !m_perspective.IsEmpty() )
* and component list of the previous values from last viewlib use
*/
if( m_LibListWindow )
{ {
wxAuiPaneInfo& pane = m_auimgr.GetPane( m_LibListWindow ); // Restore last saved sizes, pos and other params
pane.MinSize( wxSize( 30, -1 ) ); // However m_mainToolBar size cannot be set to its last saved size
// because the actual size change depending on the way modview was called:
// the tool to export the current footprint exist or not.
// and the saved size is not always OK
// the trick is to get the default toolbar size, and set the size after
// calling LoadPerspective
wxSize tbsize = m_mainToolBar->GetSize();
m_auimgr.LoadPerspective( m_perspective, false );
m_auimgr.GetPane( m_mainToolBar ).BestSize( tbsize );
} }
if( m_FootprintListWindow ) // Set min size (overwrite params read in LoadPerspective(), is any)
{ m_auimgr.GetPane( m_libList ).MinSize( minsize );
wxAuiPaneInfo& pane = m_auimgr.GetPane( m_FootprintListWindow ); m_auimgr.GetPane( m_footprintList ).MinSize( minsize );
pane.MinSize( wxSize( 30, -1 ) );
}
if( !m_perspective.IsEmpty() ) // after changing something to the aui manager,
m_auimgr.LoadPerspective( m_perspective ); // call Update()() to reflect the changes
else
m_auimgr.Update(); m_auimgr.Update();
// Now Drawpanel is sized, we can use BestZoom to show the component (if any) // Now Drawpanel is sized, we can use BestZoom to show the component (if any)
...@@ -294,9 +281,9 @@ FOOTPRINT_VIEWER_FRAME* FOOTPRINT_VIEWER_FRAME::GetActiveFootprintViewer() ...@@ -294,9 +281,9 @@ FOOTPRINT_VIEWER_FRAME* FOOTPRINT_VIEWER_FRAME::GetActiveFootprintViewer()
void FOOTPRINT_VIEWER_FRAME::OnCloseWindow( wxCloseEvent& Event ) void FOOTPRINT_VIEWER_FRAME::OnCloseWindow( wxCloseEvent& Event )
{ {
if( m_Semaphore ) if( m_semaphore )
{ {
m_Semaphore->Post(); m_semaphore->Post();
SetModalMode( false ); SetModalMode( false );
// This window will be destroyed by the calling function, // This window will be destroyed by the calling function,
// to avoid side effects // to avoid side effects
...@@ -324,22 +311,22 @@ void FOOTPRINT_VIEWER_FRAME::OnSetRelativeOffset( wxCommandEvent& event ) ...@@ -324,22 +311,22 @@ void FOOTPRINT_VIEWER_FRAME::OnSetRelativeOffset( wxCommandEvent& event )
void FOOTPRINT_VIEWER_FRAME::ReCreateLibraryList() void FOOTPRINT_VIEWER_FRAME::ReCreateLibraryList()
{ {
if( m_LibList == NULL ) if( m_libList == NULL )
return; return;
m_LibList->Clear(); m_libList->Clear();
std::vector< wxString > libName = m_footprintLibTable->GetLogicalLibs(); std::vector< wxString > libName = m_footprintLibTable->GetLogicalLibs();
for( unsigned ii = 0; ii < libName.size(); ii++ ) for( unsigned ii = 0; ii < libName.size(); ii++ )
m_LibList->Append( libName[ii] ); m_libList->Append( libName[ii] );
// Search for a previous selection: // Search for a previous selection:
int index = m_LibList->FindString( m_libraryName ); int index = m_libList->FindString( m_libraryName );
if( index != wxNOT_FOUND ) if( index != wxNOT_FOUND )
{ {
m_LibList->SetSelection( index, true ); m_libList->SetSelection( index, true );
} }
else else
{ {
...@@ -358,10 +345,10 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateLibraryList() ...@@ -358,10 +345,10 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateLibraryList()
void FOOTPRINT_VIEWER_FRAME::ReCreateFootprintList() void FOOTPRINT_VIEWER_FRAME::ReCreateFootprintList()
{ {
if( m_FootprintList == NULL ) if( m_footprintList == NULL )
return; return;
m_FootprintList->Clear(); m_footprintList->Clear();
if( m_libraryName.IsEmpty() ) if( m_libraryName.IsEmpty() )
{ {
...@@ -387,25 +374,25 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateFootprintList() ...@@ -387,25 +374,25 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateFootprintList()
fpList.Add( footprint.GetFootprintName() ); fpList.Add( footprint.GetFootprintName() );
} }
m_FootprintList->Append( fpList ); m_footprintList->Append( fpList );
int index = m_FootprintList->FindString( m_footprintName ); int index = m_footprintList->FindString( m_footprintName );
if( index == wxNOT_FOUND ) if( index == wxNOT_FOUND )
m_footprintName = wxEmptyString; m_footprintName = wxEmptyString;
else else
m_FootprintList->SetSelection( index, true ); m_footprintList->SetSelection( index, true );
} }
void FOOTPRINT_VIEWER_FRAME::ClickOnLibList( wxCommandEvent& event ) void FOOTPRINT_VIEWER_FRAME::ClickOnLibList( wxCommandEvent& event )
{ {
int ii = m_LibList->GetSelection(); int ii = m_libList->GetSelection();
if( ii < 0 ) if( ii < 0 )
return; return;
wxString name = m_LibList->GetString( ii ); wxString name = m_libList->GetString( ii );
if( m_libraryName == name ) if( m_libraryName == name )
return; return;
...@@ -420,15 +407,15 @@ void FOOTPRINT_VIEWER_FRAME::ClickOnLibList( wxCommandEvent& event ) ...@@ -420,15 +407,15 @@ void FOOTPRINT_VIEWER_FRAME::ClickOnLibList( wxCommandEvent& event )
void FOOTPRINT_VIEWER_FRAME::ClickOnFootprintList( wxCommandEvent& event ) void FOOTPRINT_VIEWER_FRAME::ClickOnFootprintList( wxCommandEvent& event )
{ {
if( m_FootprintList->GetCount() == 0 ) if( m_footprintList->GetCount() == 0 )
return; return;
int ii = m_FootprintList->GetSelection(); int ii = m_footprintList->GetSelection();
if( ii < 0 ) if( ii < 0 )
return; return;
wxString name = m_FootprintList->GetString( ii ); wxString name = m_footprintList->GetString( ii );
if( m_footprintName.CmpNoCase( name ) != 0 ) if( m_footprintName.CmpNoCase( name ) != 0 )
{ {
...@@ -463,7 +450,7 @@ void FOOTPRINT_VIEWER_FRAME::ClickOnFootprintList( wxCommandEvent& event ) ...@@ -463,7 +450,7 @@ void FOOTPRINT_VIEWER_FRAME::ClickOnFootprintList( wxCommandEvent& event )
void FOOTPRINT_VIEWER_FRAME::DClickOnFootprintList( wxCommandEvent& event ) void FOOTPRINT_VIEWER_FRAME::DClickOnFootprintList( wxCommandEvent& event )
{ {
if( m_Semaphore ) if( m_semaphore )
{ {
ExportSelectedFootprint( event ); ExportSelectedFootprint( event );
// Prevent the double click from being as a single mouse button release // Prevent the double click from being as a single mouse button release
...@@ -478,10 +465,10 @@ void FOOTPRINT_VIEWER_FRAME::DClickOnFootprintList( wxCommandEvent& event ) ...@@ -478,10 +465,10 @@ void FOOTPRINT_VIEWER_FRAME::DClickOnFootprintList( wxCommandEvent& event )
void FOOTPRINT_VIEWER_FRAME::ExportSelectedFootprint( wxCommandEvent& event ) void FOOTPRINT_VIEWER_FRAME::ExportSelectedFootprint( wxCommandEvent& event )
{ {
int ii = m_FootprintList->GetSelection(); int ii = m_footprintList->GetSelection();
if( ii >= 0 ) if( ii >= 0 )
m_selectedFootprintName = m_FootprintList->GetString( ii ); m_selectedFootprintName = m_footprintList->GetString( ii );
else else
m_selectedFootprintName.Empty(); m_selectedFootprintName.Empty();
...@@ -524,13 +511,13 @@ void FOOTPRINT_VIEWER_FRAME::OnActivate( wxActivateEvent& event ) ...@@ -524,13 +511,13 @@ void FOOTPRINT_VIEWER_FRAME::OnActivate( wxActivateEvent& event )
// Ensure we have the right library list: // Ensure we have the right library list:
std::vector< wxString > libNicknames = m_footprintLibTable->GetLogicalLibs(); std::vector< wxString > libNicknames = m_footprintLibTable->GetLogicalLibs();
if( libNicknames.size() == m_LibList->GetCount() ) if( libNicknames.size() == m_libList->GetCount() )
{ {
unsigned ii; unsigned ii;
for( ii = 0; ii < libNicknames.size(); ii++ ) for( ii = 0; ii < libNicknames.size(); ii++ )
{ {
if( libNicknames[ii] != m_LibList->GetString( ii ) ) if( libNicknames[ii] != m_libList->GetString( ii ) )
break; break;
} }
...@@ -767,10 +754,10 @@ void FOOTPRINT_VIEWER_FRAME::SelectCurrentLibrary( wxCommandEvent& event ) ...@@ -767,10 +754,10 @@ void FOOTPRINT_VIEWER_FRAME::SelectCurrentLibrary( wxCommandEvent& event )
DisplayLibInfos(); DisplayLibInfos();
ReCreateFootprintList(); ReCreateFootprintList();
int id = m_LibList->FindString( m_libraryName ); int id = m_libList->FindString( m_libraryName );
if( id >= 0 ) if( id >= 0 )
m_LibList->SetSelection( id ); m_libList->SetSelection( id );
} }
...@@ -800,7 +787,7 @@ void FOOTPRINT_VIEWER_FRAME::SelectCurrentFootprint( wxCommandEvent& event ) ...@@ -800,7 +787,7 @@ void FOOTPRINT_VIEWER_FRAME::SelectCurrentFootprint( wxCommandEvent& event )
Zoom_Automatique( false ); Zoom_Automatique( false );
m_canvas->Refresh(); m_canvas->Refresh();
Update3D_Frame(); Update3D_Frame();
m_FootprintList->SetStringSelection( m_footprintName ); m_footprintList->SetStringSelection( m_footprintName );
} }
} }
...@@ -817,11 +804,11 @@ void FOOTPRINT_VIEWER_FRAME::SelectAndViewFootprint( int aMode ) ...@@ -817,11 +804,11 @@ void FOOTPRINT_VIEWER_FRAME::SelectAndViewFootprint( int aMode )
if( m_libraryName.IsEmpty() ) if( m_libraryName.IsEmpty() )
return; return;
int selection = m_FootprintList->FindString( m_footprintName ); int selection = m_footprintList->FindString( m_footprintName );
if( aMode == NEXT_PART ) if( aMode == NEXT_PART )
{ {
if( selection != wxNOT_FOUND && selection < (int)m_FootprintList->GetCount()-1 ) if( selection != wxNOT_FOUND && selection < (int)m_footprintList->GetCount()-1 )
selection++; selection++;
} }
...@@ -833,8 +820,8 @@ void FOOTPRINT_VIEWER_FRAME::SelectAndViewFootprint( int aMode ) ...@@ -833,8 +820,8 @@ void FOOTPRINT_VIEWER_FRAME::SelectAndViewFootprint( int aMode )
if( selection != wxNOT_FOUND ) if( selection != wxNOT_FOUND )
{ {
m_FootprintList->SetSelection( selection ); m_footprintList->SetSelection( selection );
m_footprintName = m_FootprintList->GetString( selection ); m_footprintName = m_footprintList->GetString( selection );
SetCurItem( NULL ); SetCurItem( NULL );
// Delete the current footprint // Delete the current footprint
......
...@@ -44,16 +44,11 @@ class FP_LIB_TABLE; ...@@ -44,16 +44,11 @@ class FP_LIB_TABLE;
class FOOTPRINT_VIEWER_FRAME : public PCB_BASE_FRAME class FOOTPRINT_VIEWER_FRAME : public PCB_BASE_FRAME
{ {
private: private:
// List of libraries (for selection ) wxListBox* m_libList; // The list of libs names
wxSashLayoutWindow* m_LibListWindow; wxListBox* m_footprintList; // The list of footprint names
wxListBox* m_LibList; // The list of libs names
// List of components in the selected library
wxSashLayoutWindow* m_FootprintListWindow;
wxListBox* m_FootprintList; // The list of footprint names
// Flags // Flags
wxSemaphore* m_Semaphore; // != NULL if the frame must emulate a modal dialog wxSemaphore* m_semaphore; // != NULL if the frame emulates a modal dialog
wxString m_configPath; // subpath for configuration wxString m_configPath; // subpath for configuration
protected: protected:
......
...@@ -47,7 +47,9 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateHToolbar() ...@@ -47,7 +47,9 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateHToolbar()
if( m_mainToolBar == NULL ) if( m_mainToolBar == NULL )
{ {
m_mainToolBar = new wxAuiToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_mainToolBar = new wxAuiToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_OVERFLOW ); wxAUI_TB_DEFAULT_STYLE
| wxAUI_TB_OVERFLOW
);
// Set up toolbar // Set up toolbar
m_mainToolBar->AddTool( ID_MODVIEW_SELECT_LIB, wxEmptyString, m_mainToolBar->AddTool( ID_MODVIEW_SELECT_LIB, wxEmptyString,
...@@ -93,22 +95,14 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateHToolbar() ...@@ -93,22 +95,14 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateHToolbar()
m_mainToolBar->AddTool( ID_ZOOM_PAGE, wxEmptyString, m_mainToolBar->AddTool( ID_ZOOM_PAGE, wxEmptyString,
KiBitmap( zoom_fit_in_page_xpm ), msg ); KiBitmap( zoom_fit_in_page_xpm ), msg );
if( m_Semaphore ) // Enable this tool only if the library browser is called from
// a "load component" command
if( m_semaphore )
{ {
// The library browser is called from a "load component" command
m_mainToolBar->AddSeparator(); m_mainToolBar->AddSeparator();
/*
this ID_MODVIEW_FOOTPRINT_EXPORT_TO_BOARD control
is broken it does not lead to a fetched footprint on linux, either 3.0 nor 2.8 wx:
and I really don't like the drop down menu here:
whoever broke it, please fix it:
m_mainToolBar->AddTool( ID_MODVIEW_FOOTPRINT_EXPORT_TO_BOARD, wxEmptyString, m_mainToolBar->AddTool( ID_MODVIEW_FOOTPRINT_EXPORT_TO_BOARD, wxEmptyString,
KiBitmap( export_footprint_names_xpm ), KiBitmap( export_footprint_names_xpm ),
_( "Insert footprint in board" ) ); _( "Insert footprint in board" ) );
*/
} }
// after adding the buttons to the toolbar, must call Realize() to // after adding the buttons to the toolbar, must call Realize() to
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment