Properties: improve handling of column splitter

This commit is contained in:
Jon Evans 2022-11-25 09:58:44 -05:00
parent 8c7691fbc3
commit 696a1cd39d
2 changed files with 33 additions and 3 deletions

View File

@ -33,8 +33,10 @@
extern APIIMPORT wxPGGlobalVarsClass* wxPGGlobalVars;
PROPERTIES_PANEL::PROPERTIES_PANEL( wxWindow* aParent, EDA_BASE_FRAME* aFrame )
: wxPanel( aParent ), m_frame( aFrame )
PROPERTIES_PANEL::PROPERTIES_PANEL( wxWindow* aParent, EDA_BASE_FRAME* aFrame ) :
wxPanel( aParent ),
m_frame( aFrame ),
m_splitter_key_proportion( -1 )
{
wxBoxSizer* mainSizer = new wxBoxSizer( wxVERTICAL );
@ -62,6 +64,20 @@ PROPERTIES_PANEL::PROPERTIES_PANEL( wxWindow* aParent, EDA_BASE_FRAME* aFrame )
Connect( wxEVT_PG_CHANGED, wxPropertyGridEventHandler( PROPERTIES_PANEL::valueChanged ), NULL, this );
Connect( wxEVT_PG_CHANGING, wxPropertyGridEventHandler( PROPERTIES_PANEL::valueChanging ), NULL, this );
Connect( wxEVT_SHOW, wxShowEventHandler( PROPERTIES_PANEL::onShow ), NULL, this );
Bind( wxEVT_PG_COL_END_DRAG,
[&]( wxPropertyGridEvent& )
{
m_splitter_key_proportion =
static_cast<float>( m_grid->GetSplitterPosition() ) / m_grid->GetSize().x;
} );
Bind( wxEVT_SIZE,
[&]( wxSizeEvent& aEvent )
{
RecalculateSplitterPos();
aEvent.Skip();
} );
}
@ -174,7 +190,7 @@ void PROPERTIES_PANEL::update( const SELECTION& aSelection )
}
}
m_grid->FitColumns();
RecalculateSplitterPos();
}
@ -183,3 +199,12 @@ void PROPERTIES_PANEL::onShow( wxShowEvent& aEvent )
if( aEvent.IsShown() )
UpdateData();
}
void PROPERTIES_PANEL::RecalculateSplitterPos()
{
if( m_splitter_key_proportion < 0 )
m_grid->CenterSplitter();
else
m_grid->SetSplitterPosition( m_splitter_key_proportion * m_grid->GetSize().x );
}

View File

@ -60,6 +60,8 @@ public:
return m_displayed;
}
void RecalculateSplitterPos();
protected:
virtual void update( const SELECTION& aSelection );
virtual wxPGProperty* createPGProperty( const PROPERTY_BASE* aProperty ) const = 0;
@ -73,6 +75,9 @@ protected:
wxPropertyGrid* m_grid;
EDA_BASE_FRAME* m_frame;
wxStaticText* m_caption;
/// Proportion of the grid column splitter that is used for the key column (0.0 - 1.0)
float m_splitter_key_proportion;
};
#endif /* PROPERTIES_PANEL_H */