Patch annoying large checkbox cols in wxWidgets 3.1.x on OSX.

This commit is contained in:
Jeff Young 2022-07-08 11:16:14 -06:00
parent 5479514819
commit ded611aed5
5 changed files with 47 additions and 17 deletions

View File

@ -737,6 +737,7 @@ DIALOG_SYMBOL_FIELDS_TABLE::DIALOG_SYMBOL_FIELDS_TABLE( SCH_EDIT_FRAME* parent )
m_parent( parent )
{
wxSize defaultDlgSize = ConvertDialogToPixels( wxSize( 600, 300 ) );
int nameColWidthMargin = 44;
// Get all symbols from the list of schematic sheets
m_parent->Schematic().GetSheets().GetSymbols( m_symbolsList, false );
@ -785,6 +786,8 @@ DIALOG_SYMBOL_FIELDS_TABLE::DIALOG_SYMBOL_FIELDS_TABLE( SCH_EDIT_FRAME* parent )
nameColWidth = std::max( nameColWidth, KIUI::GetTextSize( fieldName, m_fieldsCtrl ).x );
}
nameColWidth += nameColWidthMargin;
int fieldsMinWidth = nameColWidth + m_groupByColWidth + m_showColWidth;
m_fieldsCtrl->GetColumn( DISPLAY_NAME_COLUMN )->SetWidth( nameColWidth );
@ -798,6 +801,7 @@ DIALOG_SYMBOL_FIELDS_TABLE::DIALOG_SYMBOL_FIELDS_TABLE( SCH_EDIT_FRAME* parent )
m_dataModel->RebuildRows( m_filter, m_groupSymbolsBox, m_fieldsCtrl );
m_dataModel->Sort( 0, true );
m_grid->UseNativeColHeader( true );
m_grid->SetTable( m_dataModel, true );
// must be done after SetTable(), which appears to re-set it
@ -1303,14 +1307,12 @@ void DIALOG_SYMBOL_FIELDS_TABLE::OnTableItemContextMenu( wxGridEvent& event )
void DIALOG_SYMBOL_FIELDS_TABLE::OnSizeFieldList( wxSizeEvent& event )
{
#ifdef __WXMAC__
// I'm not sure why KIPLATFORM::UI::GetUnobscuredSize() doesn't give us the correct size
// on Mac, but I do know the old code worked.
int nameColWidth = event.GetSize().GetX() - wxSystemSettings::GetMetric( wxSYS_VSCROLL_X );
#else
int nameColWidth = KIPLATFORM::UI::GetUnobscuredSize( m_fieldsCtrl ).x;
#endif
nameColWidth -= m_showColWidth + m_groupByColWidth;
#ifdef __WXMAC__
// TODO: something in wxWidgets 3.1.x makes checkboxes really wide...
nameColWidth -= 40;
#endif
// GTK loses its head and messes these up when resizing the splitter bar:
m_fieldsCtrl->GetColumn( SHOW_FIELD_COLUMN )->SetWidth( m_showColWidth );

View File

@ -27,7 +27,7 @@ DIALOG_SYMBOL_FIELDS_TABLE_BASE::DIALOG_SYMBOL_FIELDS_TABLE_BASE( wxWindow* pare
bLeftSizer = new wxBoxSizer( wxVERTICAL );
m_fieldsCtrl = new wxDataViewListCtrl( m_leftPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
m_fieldsCtrl->SetMinSize( wxSize( -1,220 ) );
m_fieldsCtrl->SetMinSize( wxSize( -1,320 ) );
bLeftSizer->Add( m_fieldsCtrl, 1, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );

View File

@ -194,7 +194,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="maximum_size"></property>
<property name="minimum_size">-1,220</property>
<property name="minimum_size">-1,320</property>
<property name="name">m_fieldsCtrl</property>
<property name="permission">protected</property>
<property name="pos"></property>

View File

@ -88,17 +88,22 @@ DIALOG_PLOT::DIALOG_PLOT( PCB_EDIT_FRAME* aParent ) :
m_messagesPanel->SetFileName( Prj().GetProjectPath() + wxT( "report.txt" ) );
int order = 0;
LSET plotOnAllLayersSelection = m_plotOpts.GetPlotOnAllLayersSelection();
wxArrayInt plotAllLayersOrder;
wxArrayString plotAllLayersChoicesStrings;
int order = 0;
LSET plotOnAllLayersSelection = m_plotOpts.GetPlotOnAllLayersSelection();
wxArrayInt plotAllLayersOrder;
wxArrayString plotAllLayersChoicesStrings;
std::vector<PCB_LAYER_ID> layersIdChoiceList;
int textWidth = 0;
for( LSEQ seq = board->GetEnabledLayers().UIOrder(); seq; ++seq )
{
PCB_LAYER_ID id = *seq;
wxString layerName = board->GetLayerName( id );
plotAllLayersChoicesStrings.Add( board->GetLayerName( id ) );
// wxCOL_WIDTH_AUTOSIZE doesn't work on all platforms, so we calculate width here
textWidth = std::max( textWidth, KIUI::GetTextSize( layerName, m_layerCheckListBox ).x );
plotAllLayersChoicesStrings.Add( layerName );
layersIdChoiceList.push_back( id );
size_t size = plotOnAllLayersSelection.size();
@ -111,14 +116,29 @@ DIALOG_PLOT::DIALOG_PLOT( PCB_EDIT_FRAME* aParent ) :
order += 1;
}
wxStaticBoxSizer* sbSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY,
_("Plot on All Layers") ),
wxVERTICAL );
int checkColSize = 22;
int layerColSize = textWidth + 15;
#ifdef __WXMAC__
// TODO: something in wxWidgets 3.1.x makes checkbox padding really large...
int checkColMargins = 40;
#else
int checkColMargins = 0;
#endif
m_layerCheckListBox->SetMinClientSize( wxSize( checkColSize + checkColMargins + layerColSize,
m_layerCheckListBox->GetMinClientSize().y ) );
wxStaticBox* allLayersLabel = new wxStaticBox( this, wxID_ANY, _( "Plot on All Layers" ) );
wxStaticBoxSizer* sbSizer = new wxStaticBoxSizer( allLayersLabel, wxVERTICAL );
m_plotAllLayersList = new wxRearrangeList( sbSizer->GetStaticBox(), wxID_ANY,
wxDefaultPosition, wxDefaultSize,
plotAllLayersOrder, plotAllLayersChoicesStrings, 0 );
m_plotAllLayersList->SetMinClientSize( wxSize( checkColSize + checkColMargins + layerColSize,
m_plotAllLayersList->GetMinClientSize().y ) );
// Attach the LAYER_ID to each item in m_plotAllLayersList
// plotAllLayersChoicesStrings and layersIdChoiceList are in the same order,
// but m_plotAllLayersList has these strings in a different order

View File

@ -246,10 +246,18 @@ void ZONE_SETTINGS::SetupLayersList( wxDataViewListCtrl* aList, PCB_BASE_FRAME*
int checkColSize = 22;
int layerColSize = textWidth + LAYER_BITMAP_SIZE.x + 15;
#ifdef __WXMAC__
// TODO: something in wxWidgets 3.1.x makes checkbox padding really large...
int checkColMargins = 40;
#else
int checkColMargins = 0;
#endif
// You'd think the fact that m_layers is a list would encourage wxWidgets not to save room
// for the tree expanders... but you'd be wrong. Force indent to 0.
aList->SetIndent( 0 );
aList->SetMinClientSize( wxSize( checkColSize + layerColSize, aList->GetMinClientSize().y ) );
aList->SetMinClientSize( wxSize( checkColSize + checkColMargins + layerColSize,
aList->GetMinClientSize().y ) );
checkColumn->SetWidth( checkColSize );
layerColumn->SetWidth( layerColSize );