diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-10-12 22:14:57 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-10-14 11:41:18 +0200 |
| commit | 13e39a9f48b1a7b94870d4751426ec5cfa10d405 (patch) | |
| tree | 93ac8293e5403ace7e36726257666e9f5d72f2e1 /src/wx/content_panel.cc | |
| parent | 449f383f13e5755c523db11f9adef53b58391025 (diff) | |
Cleanup: move LimitedSplitter out of the header.
Diffstat (limited to 'src/wx/content_panel.cc')
| -rw-r--r-- | src/wx/content_panel.cc | 99 |
1 files changed, 57 insertions, 42 deletions
diff --git a/src/wx/content_panel.cc b/src/wx/content_panel.cc index 637de9f0f..643efa787 100644 --- a/src/wx/content_panel.cc +++ b/src/wx/content_panel.cc @@ -73,6 +73,60 @@ using namespace boost::placeholders; #endif +class LimitedSplitter : public wxSplitterWindow +{ +public: + LimitedSplitter(wxWindow* parent) + : wxSplitterWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_NOBORDER | wxSP_3DSASH | wxSP_LIVE_UPDATE) + { + /* This value doesn't really mean much but we just want to stop double-click on the + divider from shrinking the bottom panel (#1601). + */ + SetMinimumPaneSize(64); + + Bind(wxEVT_SIZE, boost::bind(&LimitedSplitter::sized, this, _1)); + } + + bool OnSashPositionChange(int new_position) override + { + /* Try to stop the top bit of the splitter getting so small that buttons disappear */ + return new_position > 220; + } + + void first_shown(wxWindow* top, wxWindow* bottom) + { + int const sn = wxDisplay::GetFromWindow(this); + if (sn >= 0) { + wxRect const screen = wxDisplay(sn).GetClientArea(); + /* This is a hack to try and make the content notebook a sensible size; large on big displays but small + enough on small displays to leave space for the content area. + */ + SplitHorizontally(top, bottom, screen.height > 800 ? -600 : -_top_panel_minimum_size); + } else { + /* Fallback for when GetFromWindow fails for reasons that aren't clear */ + SplitHorizontally(top, bottom, -600); + } + _first_shown = true; + } + +private: + void sized(wxSizeEvent& ev) + { + if (_first_shown && GetSize().GetHeight() > _top_panel_minimum_size && GetSashPosition() < _top_panel_minimum_size) { + /* The window is now fairly big but the top panel is small; this happens when the DCP-o-matic window + * is shrunk and then made larger again. Try to set a sensible top panel size in this case (#1839). + */ + SetSashPosition(_top_panel_minimum_size); + } + + ev.Skip (); + } + + bool _first_shown = false; + int const _top_panel_minimum_size = 350; +}; + + class ContentDropTarget : public wxFileDropTarget { public: @@ -921,47 +975,8 @@ ContentPanel::set_selected_state(int item, bool state) } -LimitedSplitter::LimitedSplitter (wxWindow* parent) - : wxSplitterWindow (parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_NOBORDER | wxSP_3DSASH | wxSP_LIVE_UPDATE) - , _first_shown (false) - , _top_panel_minimum_size (350) -{ - /* This value doesn't really mean much but we just want to stop double-click on the - divider from shrinking the bottom panel (#1601). - */ - SetMinimumPaneSize (64); - - Bind (wxEVT_SIZE, boost::bind(&LimitedSplitter::sized, this, _1)); -} - - -void -LimitedSplitter::first_shown (wxWindow* top, wxWindow* bottom) +wxWindow* +ContentPanel::window() const { - int const sn = wxDisplay::GetFromWindow(this); - if (sn >= 0) { - wxRect const screen = wxDisplay(sn).GetClientArea(); - /* This is a hack to try and make the content notebook a sensible size; large on big displays but small - enough on small displays to leave space for the content area. - */ - SplitHorizontally (top, bottom, screen.height > 800 ? -600 : -_top_panel_minimum_size); - } else { - /* Fallback for when GetFromWindow fails for reasons that aren't clear */ - SplitHorizontally (top, bottom, -600); - } - _first_shown = true; -} - - -void -LimitedSplitter::sized (wxSizeEvent& ev) -{ - if (_first_shown && GetSize().GetHeight() > _top_panel_minimum_size && GetSashPosition() < _top_panel_minimum_size) { - /* The window is now fairly big but the top panel is small; this happens when the DCP-o-matic window - * is shrunk and then made larger again. Try to set a sensible top panel size in this case (#1839). - */ - SetSashPosition (_top_panel_minimum_size); - } - - ev.Skip (); + return _splitter; } |
