From 92b4b7187e831480a4571a4f5198ee4d13259f83 Mon Sep 17 00:00:00 2001 From: Jeff Young <jeff@rokeby.ie> Date: Mon, 3 Mar 2025 20:19:50 +0000 Subject: [PATCH] Fix job run-log sizing issues. wxLIST_AUTOSIZE_USEHEADER doesn't work on some platforms, and using OnSize was having seizures on Mac. --- kicad/dialogs/panel_jobset.cpp | 33 ++++++++++++++++++++++------- kicad/dialogs/panel_jobset_base.cpp | 8 +++---- kicad/dialogs/panel_jobset_base.fbp | 6 +++--- kicad/dialogs/panel_jobset_base.h | 2 +- 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/kicad/dialogs/panel_jobset.cpp b/kicad/dialogs/panel_jobset.cpp index 7e7034c5b9..c86588a60d 100644 --- a/kicad/dialogs/panel_jobset.cpp +++ b/kicad/dialogs/panel_jobset.cpp @@ -57,7 +57,9 @@ public: JOBSET_DESTINATION* aDestination ) : DIALOG_JOBSET_RUN_LOG_BASE( aParent ), m_jobsFile( aJobsFile ), - m_destination( aDestination ) + m_destination( aDestination ), + m_lastWidth( -1 ), + m_marginsWidth( -1 ) { m_staticTextOutputName->SetLabel( wxString::Format( _( "Destination: %s" ), aDestination->GetDescription() ) ); @@ -66,9 +68,9 @@ public: int jobNoColId = m_jobList->AppendColumn( _( "No." ) ); int jobDescColId = m_jobList->AppendColumn( _( "Job Description" ) ); int jobSourceColId = m_jobList->AppendColumn( _( "Source" ) ); - m_jobList->SetColumnWidth( jobBmpColId, GetTextExtent( wxT( "XXXX" ) ).GetWidth() ); + m_jobList->SetColumnWidth( jobBmpColId, 26 ); m_jobList->SetColumnWidth( jobNoColId, GetTextExtent( wxT( "XXXX" ) ).GetWidth() ); - m_jobList->SetColumnWidth( jobSourceColId, GetTextExtent( wxT( "XXXXXXXX" ) ).GetWidth() ); + m_jobList->SetColumnWidth( jobSourceColId, GetTextExtent( wxT( "XXXXXX" ) ).GetWidth() ); wxImageList* imageList = new wxImageList( 16, 16, true, 3 ); imageList->Add( KiBitmapBundle( BITMAPS::ercerr ).GetBitmap( wxSize( 16, 16 ) ) ); @@ -109,13 +111,25 @@ public: SetupStandardButtons( { { wxID_OK, _( "Close" ) } } ); finishDialogSettings(); + } - int width = m_jobList->GetSize().x; - width -= m_jobList->GetColumnWidth( jobBmpColId ); - width -= m_jobList->GetColumnWidth( jobNoColId ); - width -= m_jobList->GetColumnWidth( jobSourceColId ); + virtual void OnUpdateUI( wxUpdateUIEvent& event ) override + { + if( GetSize().GetWidth() != m_lastWidth ) + { + m_lastWidth = GetSize().GetWidth(); - m_jobList->SetColumnWidth( jobDescColId, width ); + if( m_marginsWidth < 0 ) + m_marginsWidth = m_lastWidth - ( m_jobList->GetSize().GetWidth() * 2 ); + + int width = ( m_lastWidth / 2 ); + width -= m_marginsWidth; + width -= m_jobList->GetColumnWidth( 0 ); + width -= m_jobList->GetColumnWidth( 1 ); + width -= m_jobList->GetColumnWidth( 3 ); + + m_jobList->SetColumnWidth( 2, width ); + } } void OnJobListItemSelected( wxListEvent& event ) override @@ -150,6 +164,9 @@ public: private: JOBSET* m_jobsFile; JOBSET_DESTINATION* m_destination; + + int m_lastWidth; + int m_marginsWidth; }; diff --git a/kicad/dialogs/panel_jobset_base.cpp b/kicad/dialogs/panel_jobset_base.cpp index 262d223316..7c03f8eb22 100644 --- a/kicad/dialogs/panel_jobset_base.cpp +++ b/kicad/dialogs/panel_jobset_base.cpp @@ -241,12 +241,12 @@ DIALOG_JOBSET_RUN_LOG_BASE::DIALOG_JOBSET_RUN_LOG_BASE( wxWindow* parent, wxWind bSizer16 = new wxBoxSizer( wxHORIZONTAL ); m_jobList = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_SINGLE_SEL ); - bSizer16->Add( m_jobList, 3, wxALL|wxEXPAND, 5 ); + bSizer16->Add( m_jobList, 1, wxALL|wxEXPAND, 5 ); m_textCtrlOutput = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_BESTWRAP|wxTE_MULTILINE|wxTE_READONLY ); m_textCtrlOutput->SetMinSize( wxSize( 420,-1 ) ); - bSizer16->Add( m_textCtrlOutput, 4, wxALL|wxEXPAND, 5 ); + bSizer16->Add( m_textCtrlOutput, 1, wxALL|wxEXPAND, 5 ); bMainSizer->Add( bSizer16, 1, wxEXPAND, 5 ); @@ -266,16 +266,16 @@ DIALOG_JOBSET_RUN_LOG_BASE::DIALOG_JOBSET_RUN_LOG_BASE( wxWindow* parent, wxWind this->Centre( wxBOTH ); // Connect Events + this->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_JOBSET_RUN_LOG_BASE::OnUpdateUI ) ); m_jobList->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( DIALOG_JOBSET_RUN_LOG_BASE::OnJobListItemSelected ), NULL, this ); - m_jobList->Connect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_JOBSET_RUN_LOG_BASE::onJobListSize ), NULL, this ); m_sdbSizerOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_JOBSET_RUN_LOG_BASE::OnButtonOk ), NULL, this ); } DIALOG_JOBSET_RUN_LOG_BASE::~DIALOG_JOBSET_RUN_LOG_BASE() { // Disconnect Events + this->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_JOBSET_RUN_LOG_BASE::OnUpdateUI ) ); m_jobList->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( DIALOG_JOBSET_RUN_LOG_BASE::OnJobListItemSelected ), NULL, this ); - m_jobList->Disconnect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_JOBSET_RUN_LOG_BASE::onJobListSize ), NULL, this ); m_sdbSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_JOBSET_RUN_LOG_BASE::OnButtonOk ), NULL, this ); } diff --git a/kicad/dialogs/panel_jobset_base.fbp b/kicad/dialogs/panel_jobset_base.fbp index 54c3edcda2..9d7a7add77 100644 --- a/kicad/dialogs/panel_jobset_base.fbp +++ b/kicad/dialogs/panel_jobset_base.fbp @@ -1361,6 +1361,7 @@ <property name="window_extra_style"></property> <property name="window_name"></property> <property name="window_style"></property> + <event name="OnUpdateUI">OnUpdateUI</event> <object class="wxBoxSizer" expanded="true"> <property name="minimum_size"></property> <property name="name">bMainSizer</property> @@ -1440,7 +1441,7 @@ <object class="sizeritem" expanded="false"> <property name="border">5</property> <property name="flag">wxALL|wxEXPAND</property> - <property name="proportion">3</property> + <property name="proportion">1</property> <object class="wxListCtrl" expanded="false"> <property name="BottomDockable">1</property> <property name="LeftDockable">1</property> @@ -1499,13 +1500,12 @@ <property name="window_name"></property> <property name="window_style"></property> <event name="OnListItemSelected">OnJobListItemSelected</event> - <event name="OnSize">onJobListSize</event> </object> </object> <object class="sizeritem" expanded="true"> <property name="border">5</property> <property name="flag">wxALL|wxEXPAND</property> - <property name="proportion">4</property> + <property name="proportion">1</property> <object class="wxTextCtrl" expanded="true"> <property name="BottomDockable">1</property> <property name="LeftDockable">1</property> diff --git a/kicad/dialogs/panel_jobset_base.h b/kicad/dialogs/panel_jobset_base.h index d8b9702ae0..c5d3b128b3 100644 --- a/kicad/dialogs/panel_jobset_base.h +++ b/kicad/dialogs/panel_jobset_base.h @@ -123,8 +123,8 @@ class DIALOG_JOBSET_RUN_LOG_BASE : public DIALOG_SHIM wxButton* m_sdbSizerOK; // Virtual event handlers, override them in your derived class + virtual void OnUpdateUI( wxUpdateUIEvent& event ) { event.Skip(); } virtual void OnJobListItemSelected( wxListEvent& event ) { event.Skip(); } - virtual void onJobListSize( wxSizeEvent& event ) { event.Skip(); } virtual void OnButtonOk( wxCommandEvent& event ) { event.Skip(); }