pcbnew: Make the netlist class panel usable with a lot of classes

Fixes: lp:1826154
* https://bugs.launchpad.net/kicad/+bug/1826154

(cherry picked from commit 39954b20fe)
This commit is contained in:
Ian McInerney 2019-07-09 22:25:58 +02:00 committed by Seth Hillbrand
parent 2e8bceb676
commit 02d43be93c
5 changed files with 1266 additions and 1131 deletions

View File

@ -64,6 +64,14 @@ PANEL_SETUP_NETCLASSES::PANEL_SETUP_NETCLASSES( PAGED_DIALOG* aParent, PCB_EDIT_
m_netclassesDirty = true; m_netclassesDirty = true;
// Figure out the smallest the netclass membership pane can ever be so that nothing is cutoff
// and force it to be that size.
m_membershipSize = GetSize();
m_membershipSize.y -= m_netclassesPane->GetSize().y;
m_membershipSize.x = -1;
m_membershipPane->SetMinSize( m_membershipSize );
m_membershipPane->SetMaxSize( m_membershipSize );
// Prevent Size events from firing before we are ready // Prevent Size events from firing before we are ready
Freeze(); Freeze();
m_originalColWidths = new int[ m_netclassGrid->GetNumberCols() ]; m_originalColWidths = new int[ m_netclassGrid->GetNumberCols() ];
@ -472,6 +480,17 @@ void PANEL_SETUP_NETCLASSES::OnUpdateUI( wxUpdateUIEvent& event )
rebuildNetclassDropdowns(); rebuildNetclassDropdowns();
m_netclassesDirty = false; m_netclassesDirty = false;
} }
// Recompute the desired size for the two content panes. We cannot leave this sizing to
// wxWidgets because it wants to shrink the membership panel to an unusable size when the
// netlist panel grows, and also it introduces undesired artifacts when the window is resized
// and the panes can grow/shrink.
wxSize netclassSize = GetClientSize();
netclassSize.y -= m_membershipSize.y;
m_netclassesPane->SetMinSize( netclassSize );
m_netclassesPane->SetMaxSize( netclassSize );
Layout();
} }

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2018 KiCad Developers, see change_log.txt for contributors. * Copyright (C) 2019 KiCad Developers, see change_log.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -51,6 +51,8 @@ private:
int* m_originalColWidths; int* m_originalColWidths;
bool m_netclassesDirty; // Indicates the netclass drop-down bool m_netclassesDirty; // Indicates the netclass drop-down
// menus need rebuilding // menus need rebuilding
wxSize m_membershipSize; // The size needed to show the membership
// properties
private: private:
void OnAddNetclassClick( wxCommandEvent& event ) override; void OnAddNetclassClick( wxCommandEvent& event ) override;
void OnRemoveNetclassClick( wxCommandEvent& event ) override; void OnRemoveNetclassClick( wxCommandEvent& event ) override;

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Dec 1 2018) // C++ code generated with wxFormBuilder (version Oct 26 2018)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO *NOT* EDIT THIS FILE!
@ -19,11 +19,12 @@ PANEL_SETUP_NETCLASSES_BASE::PANEL_SETUP_NETCLASSES_BASE( wxWindow* parent, wxWi
wxBoxSizer* bMargins; wxBoxSizer* bMargins;
bMargins = new wxBoxSizer( wxVERTICAL ); bMargins = new wxBoxSizer( wxVERTICAL );
m_netclassesPane = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxStaticBoxSizer* sbSizerUpper; wxStaticBoxSizer* sbSizerUpper;
sbSizerUpper = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Net Classes") ), wxVERTICAL ); sbSizerUpper = new wxStaticBoxSizer( new wxStaticBox( m_netclassesPane, wxID_ANY, _("Net Classes") ), wxVERTICAL );
sbSizerUpper->SetMinSize( wxSize( -1,220 ) ); sbSizerUpper->SetMinSize( wxSize( -1,220 ) );
m_netclassGrid = new WX_GRID( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_DEFAULT|wxHSCROLL|wxTAB_TRAVERSAL|wxVSCROLL ); m_netclassGrid = new WX_GRID( m_netclassesPane, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_DEFAULT|wxHSCROLL|wxTAB_TRAVERSAL|wxVSCROLL );
// Grid // Grid
m_netclassGrid->CreateGrid( 1, 9 ); m_netclassGrid->CreateGrid( 1, 9 );
@ -74,7 +75,7 @@ PANEL_SETUP_NETCLASSES_BASE::PANEL_SETUP_NETCLASSES_BASE( wxWindow* parent, wxWi
wxBoxSizer* buttonBoxSizer; wxBoxSizer* buttonBoxSizer;
buttonBoxSizer = new wxBoxSizer( wxHORIZONTAL ); buttonBoxSizer = new wxBoxSizer( wxHORIZONTAL );
m_addButton = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); m_addButton = new wxBitmapButton( m_netclassesPane, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
m_addButton->SetMinSize( wxSize( 30,29 ) ); m_addButton->SetMinSize( wxSize( 30,29 ) );
buttonBoxSizer->Add( m_addButton, 0, wxRIGHT, 5 ); buttonBoxSizer->Add( m_addButton, 0, wxRIGHT, 5 );
@ -82,7 +83,7 @@ PANEL_SETUP_NETCLASSES_BASE::PANEL_SETUP_NETCLASSES_BASE( wxWindow* parent, wxWi
buttonBoxSizer->Add( 0, 0, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); buttonBoxSizer->Add( 0, 0, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
m_removeButton = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); m_removeButton = new wxBitmapButton( m_netclassesPane, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
m_removeButton->SetMinSize( wxSize( 30,29 ) ); m_removeButton->SetMinSize( wxSize( 30,29 ) );
buttonBoxSizer->Add( m_removeButton, 0, wxRIGHT|wxLEFT, 5 ); buttonBoxSizer->Add( m_removeButton, 0, wxRIGHT|wxLEFT, 5 );
@ -91,16 +92,20 @@ PANEL_SETUP_NETCLASSES_BASE::PANEL_SETUP_NETCLASSES_BASE( wxWindow* parent, wxWi
sbSizerUpper->Add( buttonBoxSizer, 0, wxTOP|wxEXPAND, 2 ); sbSizerUpper->Add( buttonBoxSizer, 0, wxTOP|wxEXPAND, 2 );
bMargins->Add( sbSizerUpper, 4, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); m_netclassesPane->SetSizer( sbSizerUpper );
m_netclassesPane->Layout();
sbSizerUpper->Fit( m_netclassesPane );
bMargins->Add( m_netclassesPane, 1, wxALIGN_TOP|wxALL|wxEXPAND, 5 );
m_membershipPane = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxStaticBoxSizer* sbMembership; wxStaticBoxSizer* sbMembership;
sbMembership = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Net Class Memberships") ), wxHORIZONTAL ); sbMembership = new wxStaticBoxSizer( new wxStaticBox( m_membershipPane, wxID_ANY, _("Net Class Memberships") ), wxHORIZONTAL );
wxBoxSizer* bLeft; wxBoxSizer* bLeft;
bLeft = new wxBoxSizer( wxVERTICAL ); bLeft = new wxBoxSizer( wxVERTICAL );
wxStaticBoxSizer* sbFilters; wxStaticBoxSizer* sbFilters;
sbFilters = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Filter Nets") ), wxVERTICAL ); sbFilters = new wxStaticBoxSizer( new wxStaticBox( m_membershipPane, wxID_ANY, _("Filter Nets") ), wxVERTICAL );
wxBoxSizer* bSizer9; wxBoxSizer* bSizer9;
bSizer9 = new wxBoxSizer( wxHORIZONTAL ); bSizer9 = new wxBoxSizer( wxHORIZONTAL );
@ -153,7 +158,7 @@ PANEL_SETUP_NETCLASSES_BASE::PANEL_SETUP_NETCLASSES_BASE( wxWindow* parent, wxWi
bLeft->Add( sbFilters, 0, wxEXPAND|wxBOTTOM, 5 ); bLeft->Add( sbFilters, 0, wxEXPAND|wxBOTTOM, 5 );
wxStaticBoxSizer* sbEdit; wxStaticBoxSizer* sbEdit;
sbEdit = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Assign Net Class") ), wxVERTICAL ); sbEdit = new wxStaticBoxSizer( new wxStaticBox( m_membershipPane, wxID_ANY, _("Assign Net Class") ), wxVERTICAL );
wxBoxSizer* bSizer11; wxBoxSizer* bSizer11;
bSizer11 = new wxBoxSizer( wxHORIZONTAL ); bSizer11 = new wxBoxSizer( wxHORIZONTAL );
@ -196,7 +201,7 @@ PANEL_SETUP_NETCLASSES_BASE::PANEL_SETUP_NETCLASSES_BASE( wxWindow* parent, wxWi
wxBoxSizer* bRight; wxBoxSizer* bRight;
bRight = new wxBoxSizer( wxVERTICAL ); bRight = new wxBoxSizer( wxVERTICAL );
m_membershipGrid = new WX_GRID( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_DEFAULT ); m_membershipGrid = new WX_GRID( m_membershipPane, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_DEFAULT );
// Grid // Grid
m_membershipGrid->CreateGrid( 0, 2 ); m_membershipGrid->CreateGrid( 0, 2 );
@ -229,10 +234,13 @@ PANEL_SETUP_NETCLASSES_BASE::PANEL_SETUP_NETCLASSES_BASE( wxWindow* parent, wxWi
sbMembership->Add( bRight, 1, wxEXPAND|wxLEFT, 5 ); sbMembership->Add( bRight, 1, wxEXPAND|wxLEFT, 5 );
bMargins->Add( sbMembership, 5, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); m_membershipPane->SetSizer( sbMembership );
m_membershipPane->Layout();
sbMembership->Fit( m_membershipPane );
bMargins->Add( m_membershipPane, 1, wxALIGN_BOTTOM|wxALL|wxEXPAND, 5 );
bpanelNetClassesSizer->Add( bMargins, 1, wxEXPAND|wxRIGHT, 5 ); bpanelNetClassesSizer->Add( bMargins, 1, wxALIGN_BOTTOM|wxALIGN_TOP|wxEXPAND|wxRIGHT, 5 );
this->SetSizer( bpanelNetClassesSizer ); this->SetSizer( bpanelNetClassesSizer );

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Dec 1 2018) // C++ code generated with wxFormBuilder (version Oct 26 2018)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO *NOT* EDIT THIS FILE!
@ -25,10 +25,10 @@ class WX_GRID;
#include <wx/button.h> #include <wx/button.h>
#include <wx/sizer.h> #include <wx/sizer.h>
#include <wx/statbox.h> #include <wx/statbox.h>
#include <wx/panel.h>
#include <wx/stattext.h> #include <wx/stattext.h>
#include <wx/choice.h> #include <wx/choice.h>
#include <wx/textctrl.h> #include <wx/textctrl.h>
#include <wx/panel.h>
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
@ -40,9 +40,11 @@ class PANEL_SETUP_NETCLASSES_BASE : public wxPanel
private: private:
protected: protected:
wxPanel* m_netclassesPane;
WX_GRID* m_netclassGrid; WX_GRID* m_netclassGrid;
wxBitmapButton* m_addButton; wxBitmapButton* m_addButton;
wxBitmapButton* m_removeButton; wxBitmapButton* m_removeButton;
wxPanel* m_membershipPane;
wxStaticText* m_ncfilterLabel; wxStaticText* m_ncfilterLabel;
wxChoice* m_netClassFilter; wxChoice* m_netClassFilter;
wxStaticText* m_filterLabel; wxStaticText* m_filterLabel;