pcbnew: synchronize zone visibility view menu entries with the toolbar buttons

This commit is contained in:
Tomasz Włostowski 2018-02-26 13:00:08 +01:00
parent aeae32b1a2
commit af7064ef89
6 changed files with 47 additions and 17 deletions

View File

@ -430,7 +430,7 @@ void TOOL_DISPATCHER::DispatchWxEvent( wxEvent& aEvent )
aEvent.Skip();
#endif
updateUI();
updateUI( aEvent );
}
@ -443,11 +443,11 @@ void TOOL_DISPATCHER::DispatchWxCommand( wxCommandEvent& aEvent )
else
aEvent.Skip();
updateUI();
updateUI( aEvent );
}
void TOOL_DISPATCHER::updateUI()
void TOOL_DISPATCHER::updateUI( wxEvent& aEvent )
{
// TODO I don't feel it is the right place for updating UI,
// but at the moment I cannot think of a better one..
@ -456,6 +456,6 @@ void TOOL_DISPATCHER::updateUI()
if( frame )
{
frame->UpdateStatusBar();
//frame->UpdateMsgPanel();
frame->SyncMenusAndToolbars( aEvent );
}
}

View File

@ -902,6 +902,13 @@ public:
*/
KIGFX::GAL_DISPLAY_OPTIONS& GetGalDisplayOptions() { return *m_galDisplayOptions; }
/**
* Function SyncMenusAndToolbars
* Updates the toolbars and menus (mostly settings/check buttons/checkboxes)
* with the current controller state
*/
virtual void SyncMenusAndToolbars( wxEvent& aEvent ) {};
DECLARE_EVENT_TABLE()
};

View File

@ -115,8 +115,8 @@ private:
return mods;
}
///> Redraws the status bar and message panel.
void updateUI();
///> Redraws the status bar and message panel, synchronizes menus and toolbars.
void updateUI( wxEvent& aEvent );
///> Stores all the informations regarding a mouse button state.
struct BUTTON_STATE;

View File

@ -308,8 +308,6 @@ BEGIN_EVENT_TABLE( PCB_EDIT_FRAME, PCB_BASE_FRAME )
PCB_EDIT_FRAME::OnUpdateSelectViaSize )
EVT_UPDATE_UI_RANGE( ID_PCB_HIGHLIGHT_BUTT, ID_PCB_MEASUREMENT_TOOL,
PCB_EDIT_FRAME::OnUpdateVerticalToolbar )
EVT_UPDATE_UI_RANGE( ID_TB_OPTIONS_SHOW_ZONES, ID_TB_OPTIONS_SHOW_ZONES_OUTLINES_ONLY,
PCB_EDIT_FRAME::OnUpdateZoneDisplayStyle )
EVT_UPDATE_UI_RANGE( ID_PCB_MUWAVE_START_CMD, ID_PCB_MUWAVE_END_CMD,
PCB_EDIT_FRAME::OnUpdateMuWaveToolbar )

View File

@ -1730,6 +1730,8 @@ public:
int GetIconScale() override;
void SetIconScale( int aScale ) override;
void SyncMenusAndToolbars( wxEvent& aEvent ) override;
DECLARE_EVENT_TABLE()
};

View File

@ -119,13 +119,7 @@ void PCB_EDIT_FRAME::OnUpdateScriptingConsoleState( wxUpdateUIEvent& aEvent )
void PCB_EDIT_FRAME::OnUpdateZoneDisplayStyle( wxUpdateUIEvent& aEvent )
{
int selected = aEvent.GetId() - ID_TB_OPTIONS_SHOW_ZONES;
auto displ_opts = (PCB_DISPLAY_OPTIONS*)GetDisplayOptions();
if( aEvent.IsChecked() && ( displ_opts->m_DisplayZonesMode == selected ) )
return;
aEvent.Check( displ_opts->m_DisplayZonesMode == selected );
}
@ -231,3 +225,32 @@ void PCB_EDIT_FRAME::OnUpdateAutoPlaceModulesMode( wxUpdateUIEvent& aEvent )
{
//Nothing to do.
}
void PCB_EDIT_FRAME::SyncMenusAndToolbars( wxEvent& aEvent )
{
auto displOpts = (PCB_DISPLAY_OPTIONS*)GetDisplayOptions();
auto menuBar = GetMenuBar();
m_optionsToolBar->ToggleTool( ID_TB_OPTIONS_SHOW_ZONES, false );
m_optionsToolBar->ToggleTool( ID_TB_OPTIONS_SHOW_ZONES_DISABLE, false );
m_optionsToolBar->ToggleTool( ID_TB_OPTIONS_SHOW_ZONES_OUTLINES_ONLY, false );
switch( displOpts->m_DisplayZonesMode )
{
case 0:
menuBar->FindItem( ID_TB_OPTIONS_SHOW_ZONES )->Check( true );
m_optionsToolBar->ToggleTool( ID_TB_OPTIONS_SHOW_ZONES, true );
break;
case 1:
menuBar->FindItem( ID_TB_OPTIONS_SHOW_ZONES_DISABLE )->Check( true );
m_optionsToolBar->ToggleTool( ID_TB_OPTIONS_SHOW_ZONES_DISABLE, true );
break;
case 2:
menuBar->FindItem( ID_TB_OPTIONS_SHOW_ZONES_OUTLINES_ONLY )->Check( true );
m_optionsToolBar->ToggleTool( ID_TB_OPTIONS_SHOW_ZONES_OUTLINES_ONLY, true );
break;
}
}