diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-08-07 21:37:35 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-08-07 21:37:35 +0200 |
| commit | 563fc75855b9649cf135cf137cc1b0c43ebc8286 (patch) | |
| tree | fc9862a10f052725b6bd1a1af0101b167c19891b /src/wx/content_panel.cc | |
| parent | ec65767c7b1b8439b2b1414998db9c1f4048c1de (diff) | |
Fix layout bug where the stuff in the content panel would be completely
hidden in some cases (seen on Linux only, I think).
wxDisplay::GetFromWindow sometimes returns -1 (perhaps when multiple
monitors are connected) and we have to set the splitter position
in this case.
Diffstat (limited to 'src/wx/content_panel.cc')
| -rw-r--r-- | src/wx/content_panel.cc | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/src/wx/content_panel.cc b/src/wx/content_panel.cc index 7d854224d..ef770484c 100644 --- a/src/wx/content_panel.cc +++ b/src/wx/content_panel.cc @@ -99,20 +99,14 @@ ContentPanel::ContentPanel (wxNotebook* n, shared_ptr<Film> film, weak_ptr<FilmV } _splitter = new LimitedSplitter (n); - optional<wxRect> screen; - int const sn = wxDisplay::GetFromWindow(_splitter); - if (sn >= 0) { - screen = wxDisplay(sn).GetClientArea(); - } - wxPanel* top = new wxPanel (_splitter); + _top_panel = new wxPanel (_splitter); _menu = new ContentMenu (_splitter); - { wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); - _content = new wxListCtrl (top, wxID_ANY, wxDefaultPosition, wxSize (320, 160), wxLC_REPORT | wxLC_NO_HEADER); + _content = new wxListCtrl (_top_panel, wxID_ANY, wxDefaultPosition, wxSize (320, 160), wxLC_REPORT | wxLC_NO_HEADER); _content->DragAcceptFiles (true); s->Add (_content, 1, wxEXPAND | wxTOP | wxBOTTOM, 6); @@ -121,47 +115,40 @@ ContentPanel::ContentPanel (wxNotebook* n, shared_ptr<Film> film, weak_ptr<FilmV wxBoxSizer* b = new wxBoxSizer (wxVERTICAL); - _add_file = new Button (top, _("Add file(s)...")); + _add_file = new Button (_top_panel, _("Add file(s)...")); _add_file->SetToolTip (_("Add video, image, sound or subtitle files to the film.")); b->Add (_add_file, 0, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP); - _add_folder = new Button (top, _("Add folder...")); + _add_folder = new Button (_top_panel, _("Add folder...")); _add_folder->SetToolTip (_("Add a folder of image files (which will be used as a moving image sequence) or a folder of sound files.")); b->Add (_add_folder, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP); - _add_dcp = new Button (top, _("Add DCP...")); + _add_dcp = new Button (_top_panel, _("Add DCP...")); _add_dcp->SetToolTip (_("Add a DCP.")); b->Add (_add_dcp, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP); - _remove = new Button (top, _("Remove")); + _remove = new Button (_top_panel, _("Remove")); _remove->SetToolTip (_("Remove the selected piece of content from the film.")); b->Add (_remove, 0, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP); - _earlier = new Button (top, _("Earlier")); + _earlier = new Button (_top_panel, _("Earlier")); _earlier->SetToolTip (_("Move the selected piece of content earlier in the film.")); b->Add (_earlier, 0, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP); - _later = new Button (top, _("Later")); + _later = new Button (_top_panel, _("Later")); _later->SetToolTip (_("Move the selected piece of content later in the film.")); b->Add (_later, 0, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP); - _timeline = new Button (top, _("Timeline...")); + _timeline = new Button (_top_panel, _("Timeline...")); _timeline->SetToolTip (_("Open the timeline for the film.")); b->Add (_timeline, 0, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP); s->Add (b, 0, wxALL, 4); - top->SetSizer (s); + _top_panel->SetSizer (s); } _notebook = new wxNotebook (_splitter, wxID_ANY); - /* 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. - */ - if (screen) { - _splitter->SplitHorizontally (top, _notebook, screen->height > 800 ? -600 : -150); - } - _timing_panel = new TimingPanel (this, _film_viewer); _notebook->AddPage (_timing_panel, _("Timing"), false); @@ -178,6 +165,24 @@ ContentPanel::ContentPanel (wxNotebook* n, shared_ptr<Film> film, weak_ptr<FilmV _timeline->Bind (wxEVT_BUTTON, boost::bind (&ContentPanel::timeline_clicked, this)); } + +void +ContentPanel::first_shown () +{ + int const sn = wxDisplay::GetFromWindow(_splitter); + 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. + */ + _splitter->SplitHorizontally (_top_panel, _notebook, screen.height > 800 ? -600 : -150); + } else { + /* Fallback for when GetFromWindow fails for reasons that aren't clear */ + _splitter->SplitHorizontally (_top_panel, _notebook, -600); + } +} + + ContentList ContentPanel::selected () { |
