From 39e2134910fc916a45ebddf121664afcbd76cc19 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 9 Jan 2019 13:51:45 +0000 Subject: [PATCH] Try a draggable splitter in the LHS. --- src/wx/content_panel.cc | 52 +++++++++++++++++++++---------------- src/wx/content_panel.h | 16 +++++++----- src/wx/content_sub_panel.cc | 8 ------ src/wx/film_editor.cc | 2 +- src/wx/timeline_dialog.cc | 2 +- 5 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/wx/content_panel.cc b/src/wx/content_panel.cc index ad3419d14..4587b8cc3 100644 --- a/src/wx/content_panel.cc +++ b/src/wx/content_panel.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2018 Carl Hetherington + Copyright (C) 2012-2019 Carl Hetherington This file is part of DCP-o-matic. @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #include @@ -76,16 +77,16 @@ ContentPanel::ContentPanel (wxNotebook* n, shared_ptr film, weak_ptrSetSizer (_sizer); + _splitter = new wxSplitterWindow (n); + wxPanel* top = new wxPanel (_splitter); + + _menu = new ContentMenu (_splitter); - _menu = new ContentMenu (_panel); { wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); - _content = new wxListCtrl (_panel, wxID_ANY, wxDefaultPosition, wxSize (320, 160), wxLC_REPORT | wxLC_NO_HEADER); + _content = new wxListCtrl (top, wxID_ANY, wxDefaultPosition, wxSize (320, 160), wxLC_REPORT | wxLC_NO_HEADER); _content->DragAcceptFiles (true); s->Add (_content, 1, wxEXPAND | wxTOP | wxBOTTOM, 6); @@ -94,41 +95,46 @@ ContentPanel::ContentPanel (wxNotebook* n, shared_ptr film, weak_ptrSetToolTip (_("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 (_panel, _("Add folder...")); + _add_folder = new Button (top, _("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 (_panel, _("Add DCP...")); + _add_dcp = new Button (top, _("Add DCP...")); _add_dcp->SetToolTip (_("Add a DCP.")); b->Add (_add_dcp, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP); - _remove = new Button (_panel, _("Remove")); + _remove = new Button (top, _("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 (_panel, _("Earlier")); + _earlier = new Button (top, _("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 (_panel, _("Later")); + _later = new Button (top, _("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 (_panel, _("Timeline...")); + _timeline = new Button (top, _("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); - - _sizer->Add (s, 1, wxEXPAND | wxALL, 6); + top->SetSizer (s); } - _notebook = new wxNotebook (_panel, wxID_ANY); - _sizer->Add (_notebook, 0, wxEXPAND | wxTOP, 6); + _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. + */ + wxDisplay display (wxDisplay::GetFromWindow(_splitter)); + wxRect screen = display.GetClientArea(); + _splitter->SplitHorizontally (top, _notebook, screen.height > 800 ? -600 : -150); _timing_panel = new TimingPanel (this, _film_viewer); _notebook->AddPage (_timing_panel, _("Timing"), false); @@ -401,7 +407,7 @@ ContentPanel::add_file_clicked () /* This method is also called when Ctrl-A is pressed, so check that our notebook page is visible. */ - if (_parent->GetCurrentPage() != _panel || !_film) { + if (_parent->GetCurrentPage() != _splitter || !_film) { return; } @@ -409,7 +415,7 @@ ContentPanel::add_file_clicked () non-Latin filenames or paths. */ wxFileDialog* d = new wxFileDialog ( - _panel, + _splitter, _("Choose a file or files"), wxT (""), wxT (""), @@ -438,7 +444,7 @@ ContentPanel::add_file_clicked () void ContentPanel::add_folder_clicked () { - wxDirDialog* d = new wxDirDialog (_panel, _("Choose a folder"), wxT (""), wxDD_DIR_MUST_EXIST); + wxDirDialog* d = new wxDirDialog (_splitter, _("Choose a folder"), wxT(""), wxDD_DIR_MUST_EXIST); int r = d->ShowModal (); boost::filesystem::path const path (wx_to_std (d->GetPath ())); d->Destroy (); @@ -464,7 +470,7 @@ ContentPanel::add_folder_clicked () BOOST_FOREACH (shared_ptr i, content) { shared_ptr ic = dynamic_pointer_cast (i); if (ic) { - ImageSequenceDialog* e = new ImageSequenceDialog (_panel); + ImageSequenceDialog* e = new ImageSequenceDialog (_splitter); r = e->ShowModal (); float const frame_rate = e->frame_rate (); e->Destroy (); @@ -483,7 +489,7 @@ ContentPanel::add_folder_clicked () void ContentPanel::add_dcp_clicked () { - wxDirDialog* d = new wxDirDialog (_panel, _("Choose a DCP folder"), wxT (""), wxDD_DIR_MUST_EXIST); + wxDirDialog* d = new wxDirDialog (_splitter, _("Choose a DCP folder"), wxT(""), wxDD_DIR_MUST_EXIST); int r = d->ShowModal (); boost::filesystem::path const path (wx_to_std (d->GetPath ())); d->Destroy (); @@ -506,7 +512,7 @@ ContentPanel::remove_clicked (bool hotkey) /* If the method was called because Delete was pressed check that our notebook page is visible and that the content list is focussed. */ - if (hotkey && (_parent->GetCurrentPage() != _panel || !_content->HasFocus())) { + if (hotkey && (_parent->GetCurrentPage() != _splitter || !_content->HasFocus())) { return true; } diff --git a/src/wx/content_panel.h b/src/wx/content_panel.h index 4a41ad189..9d6e6a8b5 100644 --- a/src/wx/content_panel.h +++ b/src/wx/content_panel.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2018 Carl Hetherington + Copyright (C) 2012-2019 Carl Hetherington This file is part of DCP-o-matic. @@ -18,17 +18,19 @@ */ -#include -#include +#include "content_menu.h" #include "lib/types.h" #include "lib/film.h" -#include "content_menu.h" +#include +#include +#include class wxNotebook; class wxPanel; class wxSizer; class wxListCtrl; class wxListEvent; +class wxSplitterWindow; class TimelineDialog; class FilmEditor; class ContentSubPanel; @@ -56,8 +58,8 @@ public: void film_changed (Film::Property p); void film_content_changed (int p); - wxPanel* panel () const { - return _panel; + wxWindow* window () const { + return _splitter; } wxNotebook* notebook () const { @@ -98,7 +100,7 @@ private: void add_files (std::list); std::list panels () const; - wxPanel* _panel; + wxSplitterWindow* _splitter; wxSizer* _sizer; wxNotebook* _notebook; wxListCtrl* _content; diff --git a/src/wx/content_sub_panel.cc b/src/wx/content_sub_panel.cc index ac3a02ce9..5cdd2e5c3 100644 --- a/src/wx/content_sub_panel.cc +++ b/src/wx/content_sub_panel.cc @@ -25,7 +25,6 @@ #include "lib/compose.hpp" #include "lib/log.h" #include -#include #include using std::list; @@ -41,13 +40,6 @@ ContentSubPanel::ContentSubPanel (ContentPanel* p, wxString name) SetScrollRate (8, 8); SetSizer (_sizer); - /* 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. - */ - wxDisplay display (wxDisplay::GetFromWindow(p->notebook())); - wxRect screen = display.GetClientArea(); - SetMinSize (wxSize(-1, screen.height > 800 ? 600 : 320)); - _grid = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); _sizer->Add (_grid, 0, wxALL, 8); diff --git a/src/wx/film_editor.cc b/src/wx/film_editor.cc index 34aad9078..59b44cd8c 100644 --- a/src/wx/film_editor.cc +++ b/src/wx/film_editor.cc @@ -51,7 +51,7 @@ FilmEditor::FilmEditor (wxWindow* parent, weak_ptr viewer) s->Add (_main_notebook, 1); _content_panel = new ContentPanel (_main_notebook, _film, viewer); - _main_notebook->AddPage (_content_panel->panel (), _("Content"), true); + _main_notebook->AddPage (_content_panel->window(), _("Content"), true); _dcp_panel = new DCPPanel (_main_notebook, _film); _main_notebook->AddPage (_dcp_panel->panel (), _("DCP"), false); diff --git a/src/wx/timeline_dialog.cc b/src/wx/timeline_dialog.cc index 050f90053..3af86b707 100644 --- a/src/wx/timeline_dialog.cc +++ b/src/wx/timeline_dialog.cc @@ -36,7 +36,7 @@ using boost::shared_ptr; TimelineDialog::TimelineDialog (ContentPanel* cp, shared_ptr film) : wxDialog ( - cp->panel(), + cp->window(), wxID_ANY, _("Timeline"), wxDefaultPosition, -- 2.30.2