Browse Source

Reinstate collapsable controls in Appearances widget.

Also tries to fix highlighting on BOTH OSX and GTK (previuos efforts
have all worked only on one or the other).
pull/16/head
Jeff Young 5 years ago
parent
commit
800d8acb00
  1. 48
      pcbnew/widgets/appearance_controls.cpp
  2. 6
      pcbnew/widgets/appearance_controls.h
  3. 71
      pcbnew/widgets/appearance_controls_base.cpp
  4. 1512
      pcbnew/widgets/appearance_controls_base.fbp
  5. 5
      pcbnew/widgets/appearance_controls_base.h

48
pcbnew/widgets/appearance_controls.cpp

@ -470,8 +470,6 @@ APPEARANCE_CONTROLS::APPEARANCE_CONTROLS( PCB_BASE_FRAME* aParent, wxWindow* aFo
m_netsGrid->ShowScrollbars( wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT );
m_netclassScrolledWindow->ShowScrollbars( wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT );
m_currentLayer = F_Cu;
loadDefaultLayerPresets();
rebuildObjects();
OnBoardChanged();
@ -500,6 +498,26 @@ wxSize APPEARANCE_CONTROLS::GetBestSize() const
}
void APPEARANCE_CONTROLS::OnLayerDisplayPaneChanged( wxCollapsiblePaneEvent& event )
{
// Because wxWidgets is broken and will not properly lay these out automatically
Freeze();
m_panelLayers->Fit();
m_sizerOuter->Layout();
Thaw();
}
void APPEARANCE_CONTROLS::OnNetDisplayPaneChanged( wxCollapsiblePaneEvent& event )
{
// Because wxWidgets is broken and will not properly lay these out automatically
Freeze();
m_panelNetsAndClasses->Fit();
m_sizerOuter->Layout();
Thaw();
}
void APPEARANCE_CONTROLS::OnNotebookPageChanged( wxNotebookEvent& aEvent )
{
// Work around wxMac issue where the notebook pages are blank
@ -759,18 +777,32 @@ void APPEARANCE_CONTROLS::OnLayerChanged()
pair.second->ctl_indicator->SetIndicatorState( ROW_ICON_PROVIDER::STATE::OFF );
}
wxColour highlightColor = m_layerPanelColour.ChangeLightness( 160 );
wxChar r, g, b;
r = m_layerPanelColour.Red();
g = m_layerPanelColour.Green();
b = m_layerPanelColour.Blue();
if( r < 240 || g < 240 || b < 240 )
{
r = std::min( r + 15, 255 );
g = std::min( g + 15, 255 );
b = std::min( b + 15, 255 );
}
else
{
r = std::max( r - 15, 0 );
g = std::max( g - 15, 0 );
b = std::max( b - 15, 0 );
}
PCB_LAYER_ID current = m_frame->GetActiveLayer();
APPEARANCE_SETTING* newSetting = m_layerSettingsMap[ current ];
newSetting->ctl_panel->SetBackgroundColour( highlightColor );
newSetting->ctl_panel->SetBackgroundColour( wxColour( r, g, b ) );
newSetting->ctl_indicator->SetIndicatorState( ROW_ICON_PROVIDER::STATE::ON );
m_currentLayer = current;
#if defined( __WXMAC__ ) || defined( __WXMSW__ )
Refresh();
#endif
}

6
pcbnew/widgets/appearance_controls.h

@ -248,6 +248,10 @@ public:
protected:
void OnLayerDisplayPaneChanged( wxCollapsiblePaneEvent& event ) override;
void OnNetDisplayPaneChanged( wxCollapsiblePaneEvent& event ) override;
void OnNotebookPageChanged( wxNotebookEvent& event ) override;
void OnSetFocus( wxFocusEvent& aEvent ) override;
@ -281,8 +285,6 @@ private:
/// Grid cell that is being hovered over, for tooltips
wxGridCellCoords m_hoveredCell;
PCB_LAYER_ID m_currentLayer;
std::vector<std::unique_ptr<APPEARANCE_SETTING>> m_layerSettings;
std::map<PCB_LAYER_ID, APPEARANCE_SETTING*> m_layerSettingsMap;

71
pcbnew/widgets/appearance_controls_base.cpp

@ -23,46 +23,49 @@ APPEARANCE_CONTROLS_BASE::APPEARANCE_CONTROLS_BASE( wxWindow* parent, wxWindowID
m_windowLayers = new wxScrolledCanvas( m_panelLayers, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL );
m_panelLayersSizer->Add( m_windowLayers, 1, wxEXPAND, 5 );
m_paneLayerDisplay = new wxCollapsiblePane( m_panelLayers, wxID_ANY, wxT("Layer Display Options"), wxDefaultPosition, wxDefaultSize, wxCP_DEFAULT_STYLE|wxCP_NO_TLW_RESIZE );
m_paneLayerDisplay->Collapse( true );
wxBoxSizer* bSizer121;
bSizer121 = new wxBoxSizer( wxVERTICAL );
m_staticText13 = new wxStaticText( m_panelLayers, wxID_ANY, wxT("Non-active layers:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText13 = new wxStaticText( m_paneLayerDisplay->GetPane(), wxID_ANY, wxT("Non-active layers:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText13->Wrap( -1 );
bSizer121->Add( m_staticText13, 0, wxEXPAND|wxBOTTOM, 2 );
wxBoxSizer* bSizer19;
bSizer19 = new wxBoxSizer( wxHORIZONTAL );
m_rbHighContrastNormal = new wxRadioButton( m_panelLayers, wxID_ANY, wxT("Normal"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
m_rbHighContrastNormal = new wxRadioButton( m_paneLayerDisplay->GetPane(), wxID_ANY, wxT("Normal"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
m_rbHighContrastNormal->SetValue( true );
m_rbHighContrastNormal->SetToolTip( wxT("Non-active layers will be shown in full color") );
bSizer19->Add( m_rbHighContrastNormal, 0, wxRIGHT, 8 );
bSizer19->Add( m_rbHighContrastNormal, 0, wxRIGHT, 4 );
m_rbHighContrastDim = new wxRadioButton( m_panelLayers, wxID_ANY, wxT("Dim"), wxDefaultPosition, wxDefaultSize, 0 );
m_rbHighContrastDim = new wxRadioButton( m_paneLayerDisplay->GetPane(), wxID_ANY, wxT("Dim"), wxDefaultPosition, wxDefaultSize, 0 );
m_rbHighContrastDim->SetToolTip( wxT("Non-active layers will be dimmed") );
bSizer19->Add( m_rbHighContrastDim, 0, wxRIGHT, 14 );
bSizer19->Add( m_rbHighContrastDim, 0, wxRIGHT|wxLEFT, 10 );
m_rbHighContrastOff = new wxRadioButton( m_panelLayers, wxID_ANY, wxT("Hide"), wxDefaultPosition, wxDefaultSize, 0 );
m_rbHighContrastOff = new wxRadioButton( m_paneLayerDisplay->GetPane(), wxID_ANY, wxT("Hide"), wxDefaultPosition, wxDefaultSize, 0 );
m_rbHighContrastOff->SetToolTip( wxT("Non-active layers will be hidden") );
bSizer19->Add( m_rbHighContrastOff, 0, wxRIGHT, 5 );
bSizer19->Add( m_rbHighContrastOff, 0, 0, 5 );
bSizer121->Add( bSizer19, 0, wxEXPAND, 5 );
m_staticline5 = new wxStaticLine( m_panelLayers, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
bSizer121->Add( m_staticline5, 0, wxEXPAND|wxTOP, 5 );
m_staticline5 = new wxStaticLine( m_paneLayerDisplay->GetPane(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
bSizer121->Add( m_staticline5, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
bSizer121->Add( 0, 3, 1, wxEXPAND, 5 );
m_cbFlipBoard = new wxCheckBox( m_paneLayerDisplay->GetPane(), wxID_ANY, wxT("Flip board view"), wxDefaultPosition, wxDefaultSize, 0 );
bSizer121->Add( m_cbFlipBoard, 0, 0, 5 );
m_cbFlipBoard = new wxCheckBox( m_panelLayers, wxID_ANY, wxT("Flip board view"), wxDefaultPosition, wxDefaultSize, 0 );
bSizer121->Add( m_cbFlipBoard, 0, wxRIGHT, 5 );
m_panelLayersSizer->Add( bSizer121, 0, wxEXPAND|wxTOP, 5 );
m_paneLayerDisplay->GetPane()->SetSizer( bSizer121 );
m_paneLayerDisplay->GetPane()->Layout();
bSizer121->Fit( m_paneLayerDisplay->GetPane() );
m_panelLayersSizer->Add( m_paneLayerDisplay, 0, wxBOTTOM|wxTOP|wxEXPAND, 5 );
m_panelLayers->SetSizer( m_panelLayersSizer );
@ -186,39 +189,45 @@ APPEARANCE_CONTROLS_BASE::APPEARANCE_CONTROLS_BASE( wxWindow* parent, wxWindowID
m_netsTabSplitter->SplitHorizontally( m_panelNets, m_panelNetclasses, 300 );
bSizer16->Add( m_netsTabSplitter, 1, wxEXPAND, 5 );
m_paneNetDisplay = new wxCollapsiblePane( m_panelNetsAndClasses, wxID_ANY, wxT("Net Display Options"), wxDefaultPosition, wxDefaultSize, wxCP_DEFAULT_STYLE|wxCP_NO_TLW_RESIZE );
m_paneNetDisplay->Collapse( true );
wxBoxSizer* bSizerNetDisplay;
bSizerNetDisplay = new wxBoxSizer( wxVERTICAL );
m_staticTextNetDsplayTitle = new wxStaticText( m_panelNetsAndClasses, wxID_ANY, wxT("Apply net and netclass colors to:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextNetDsplayTitle = new wxStaticText( m_paneNetDisplay->GetPane(), wxID_ANY, wxT("Net colors:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextNetDsplayTitle->Wrap( -1 );
m_staticTextNetDsplayTitle->SetToolTip( wxT("Choose when to show net and netclass colors") );
bSizerNetDisplay->Add( m_staticTextNetDsplayTitle, 0, wxEXPAND|wxBOTTOM|wxRIGHT, 2 );
bSizerNetDisplay->Add( m_staticTextNetDsplayTitle, 0, wxEXPAND|wxBOTTOM, 2 );
wxBoxSizer* bSizer191;
bSizer191 = new wxBoxSizer( wxHORIZONTAL );
m_rbNetColorAll = new wxRadioButton( m_panelNetsAndClasses, wxID_ANY, wxT("All"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
m_rbNetColorAll = new wxRadioButton( m_paneNetDisplay->GetPane(), wxID_ANY, wxT("All"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
m_rbNetColorAll->SetToolTip( wxT("Net and netclass colors are shown on all copper items") );
bSizer191->Add( m_rbNetColorAll, 0, wxRIGHT, 16 );
bSizer191->Add( m_rbNetColorAll, 0, wxRIGHT, 10 );
m_rbNetColorRatsnest = new wxRadioButton( m_panelNetsAndClasses, wxID_ANY, wxT("Ratsnest"), wxDefaultPosition, wxDefaultSize, 0 );
m_rbNetColorRatsnest = new wxRadioButton( m_paneNetDisplay->GetPane(), wxID_ANY, wxT("Ratsnest"), wxDefaultPosition, wxDefaultSize, 0 );
m_rbNetColorRatsnest->SetValue( true );
m_rbNetColorRatsnest->SetToolTip( wxT("Net and netclass colors are shown on the ratsnest only") );
bSizer191->Add( m_rbNetColorRatsnest, 0, wxRIGHT, 8 );
bSizer191->Add( m_rbNetColorRatsnest, 0, wxRIGHT, 4 );
m_rbNetColorOff = new wxRadioButton( m_panelNetsAndClasses, wxID_ANY, wxT("None"), wxDefaultPosition, wxDefaultSize, 0 );
m_rbNetColorOff = new wxRadioButton( m_paneNetDisplay->GetPane(), wxID_ANY, wxT("None"), wxDefaultPosition, wxDefaultSize, 0 );
m_rbNetColorOff->SetToolTip( wxT("Net and netclass colors are not shown") );
bSizer191->Add( m_rbNetColorOff, 0, 0, 5 );
bSizerNetDisplay->Add( bSizer191, 0, wxEXPAND, 5 );
bSizerNetDisplay->Add( bSizer191, 0, wxEXPAND|wxBOTTOM, 5 );
bSizer16->Add( bSizerNetDisplay, 0, wxEXPAND|wxTOP, 5 );
m_paneNetDisplay->GetPane()->SetSizer( bSizerNetDisplay );
m_paneNetDisplay->GetPane()->Layout();
bSizerNetDisplay->Fit( m_paneNetDisplay->GetPane() );
bSizer16->Add( m_paneNetDisplay, 0, wxEXPAND|wxTOP, 5 );
m_panelNetsAndClasses->SetSizer( bSizer16 );
@ -239,14 +248,14 @@ APPEARANCE_CONTROLS_BASE::APPEARANCE_CONTROLS_BASE( wxWindow* parent, wxWindowID
presetsLabel = new wxStaticText( this, wxID_ANY, wxT("Presets:"), wxDefaultPosition, wxDefaultSize, 0 );
presetsLabel->Wrap( -1 );
bPresetsLabels->Add( presetsLabel, 1, wxTOP|wxRIGHT|wxLEFT, 2 );
bPresetsLabels->Add( presetsLabel, 1, wxRIGHT|wxLEFT, 2 );
presetsHotkey = new wxStaticText( this, wxID_ANY, wxT("(Ctrl+Tab)"), wxDefaultPosition, wxDefaultSize, 0 );
presetsHotkey->Wrap( -1 );
bPresetsLabels->Add( presetsHotkey, 0, wxTOP|wxRIGHT|wxLEFT, 2 );
bPresetsLabels->Add( presetsHotkey, 0, wxRIGHT|wxLEFT, 2 );
bPresets->Add( bPresetsLabels, 1, wxEXPAND|wxTOP, 3 );
bPresets->Add( bPresetsLabels, 1, wxEXPAND|wxTOP, 7 );
wxString m_cbLayerPresetsChoices[] = { wxT("All Layers"), wxT("(unsaved)") };
int m_cbLayerPresetsNChoices = sizeof( m_cbLayerPresetsChoices ) / sizeof( wxString );
@ -273,6 +282,8 @@ APPEARANCE_CONTROLS_BASE::APPEARANCE_CONTROLS_BASE( wxWindow* parent, wxWindowID
m_notebook->Connect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( APPEARANCE_CONTROLS_BASE::OnNotebookPageChanged ), NULL, this );
m_notebook->Connect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
m_panelLayers->Connect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
m_paneLayerDisplay->Connect( wxEVT_COLLAPSIBLEPANE_CHANGED, wxCollapsiblePaneEventHandler( APPEARANCE_CONTROLS_BASE::OnLayerDisplayPaneChanged ), NULL, this );
m_paneLayerDisplay->Connect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
m_cbFlipBoard->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( APPEARANCE_CONTROLS_BASE::OnFlipBoardChecked ), NULL, this );
m_panelObjects->Connect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
m_panelNetsAndClasses->Connect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
@ -282,6 +293,8 @@ APPEARANCE_CONTROLS_BASE::APPEARANCE_CONTROLS_BASE( wxWindow* parent, wxWindowID
m_netsGrid->Connect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( APPEARANCE_CONTROLS_BASE::OnNetGridRightClick ), NULL, this );
m_netsGrid->Connect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
m_panelNetclasses->Connect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
m_paneNetDisplay->Connect( wxEVT_COLLAPSIBLEPANE_CHANGED, wxCollapsiblePaneEventHandler( APPEARANCE_CONTROLS_BASE::OnNetDisplayPaneChanged ), NULL, this );
m_paneNetDisplay->Connect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
m_cbLayerPresets->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( APPEARANCE_CONTROLS_BASE::onLayerPresetChanged ), NULL, this );
}
@ -293,6 +306,8 @@ APPEARANCE_CONTROLS_BASE::~APPEARANCE_CONTROLS_BASE()
m_notebook->Disconnect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( APPEARANCE_CONTROLS_BASE::OnNotebookPageChanged ), NULL, this );
m_notebook->Disconnect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
m_panelLayers->Disconnect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
m_paneLayerDisplay->Disconnect( wxEVT_COLLAPSIBLEPANE_CHANGED, wxCollapsiblePaneEventHandler( APPEARANCE_CONTROLS_BASE::OnLayerDisplayPaneChanged ), NULL, this );
m_paneLayerDisplay->Disconnect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
m_cbFlipBoard->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( APPEARANCE_CONTROLS_BASE::OnFlipBoardChecked ), NULL, this );
m_panelObjects->Disconnect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
m_panelNetsAndClasses->Disconnect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
@ -302,6 +317,8 @@ APPEARANCE_CONTROLS_BASE::~APPEARANCE_CONTROLS_BASE()
m_netsGrid->Disconnect( wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler( APPEARANCE_CONTROLS_BASE::OnNetGridRightClick ), NULL, this );
m_netsGrid->Disconnect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
m_panelNetclasses->Disconnect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
m_paneNetDisplay->Disconnect( wxEVT_COLLAPSIBLEPANE_CHANGED, wxCollapsiblePaneEventHandler( APPEARANCE_CONTROLS_BASE::OnNetDisplayPaneChanged ), NULL, this );
m_paneNetDisplay->Disconnect( wxEVT_SET_FOCUS, wxFocusEventHandler( APPEARANCE_CONTROLS_BASE::OnSetFocus ), NULL, this );
m_cbLayerPresets->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( APPEARANCE_CONTROLS_BASE::onLayerPresetChanged ), NULL, this );
}

1512
pcbnew/widgets/appearance_controls_base.fbp
File diff suppressed because it is too large
View File

5
pcbnew/widgets/appearance_controls_base.h

@ -20,6 +20,7 @@
#include <wx/sizer.h>
#include <wx/statline.h>
#include <wx/checkbox.h>
#include <wx/collpane.h>
#include <wx/panel.h>
#include <wx/bitmap.h>
#include <wx/image.h>
@ -48,6 +49,7 @@ class APPEARANCE_CONTROLS_BASE : public wxPanel
wxPanel* m_panelLayers;
wxBoxSizer* m_panelLayersSizer;
wxScrolledCanvas* m_windowLayers;
wxCollapsiblePane* m_paneLayerDisplay;
wxStaticText* m_staticText13;
wxRadioButton* m_rbHighContrastNormal;
wxRadioButton* m_rbHighContrastDim;
@ -69,6 +71,7 @@ class APPEARANCE_CONTROLS_BASE : public wxPanel
wxBitmapButton* m_btnConfigureNetClasses;
wxScrolledWindow* m_netclassScrolledWindow;
wxBoxSizer* m_netclassOuterSizer;
wxCollapsiblePane* m_paneNetDisplay;
wxStaticText* m_staticTextNetDsplayTitle;
wxRadioButton* m_rbNetColorAll;
wxRadioButton* m_rbNetColorRatsnest;
@ -81,10 +84,12 @@ class APPEARANCE_CONTROLS_BASE : public wxPanel
virtual void OnSetFocus( wxFocusEvent& event ) { event.Skip(); }
virtual void OnSize( wxSizeEvent& event ) { event.Skip(); }
virtual void OnNotebookPageChanged( wxNotebookEvent& event ) { event.Skip(); }
virtual void OnLayerDisplayPaneChanged( wxCollapsiblePaneEvent& event ) { event.Skip(); }
virtual void OnFlipBoardChecked( wxCommandEvent& event ) { event.Skip(); }
virtual void OnNetGridClick( wxGridEvent& event ) { event.Skip(); }
virtual void OnNetGridDoubleClick( wxGridEvent& event ) { event.Skip(); }
virtual void OnNetGridRightClick( wxGridEvent& event ) { event.Skip(); }
virtual void OnNetDisplayPaneChanged( wxCollapsiblePaneEvent& event ) { event.Skip(); }
virtual void onLayerPresetChanged( wxCommandEvent& event ) { event.Skip(); }

Loading…
Cancel
Save