X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fcontent_panel.h;h=e25dedceabc94064de40e7386361cfed4d428b41;hb=6cac49dc50dae6b173135df101d532f20031ca70;hp=1f64d51c63bd8bf86332f9574b32efb54e0c60af;hpb=cf8bbea2de38c4e9ac140f55b27311b7b6dcd814;p=dcpomatic.git diff --git a/src/wx/content_panel.h b/src/wx/content_panel.h index 1f64d51c6..e25dedcea 100644 --- a/src/wx/content_panel.h +++ b/src/wx/content_panel.h @@ -1,56 +1,94 @@ /* - Copyright (C) 2012-2014 Carl Hetherington + Copyright (C) 2012-2021 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ -#include -#include -#include "lib/types.h" -#include "lib/film.h" + #include "content_menu.h" +#include "lib/film.h" +#include "lib/types.h" +#include +#include + class wxNotebook; class wxPanel; class wxSizer; class wxListCtrl; class wxListEvent; +class wxSplitterWindow; class TimelineDialog; class FilmEditor; class ContentSubPanel; +class TextPanel; +class VideoPanel; +class AudioPanel; +class TimingPanel; class Film; +class FilmViewer; + + +class LimitedSplitter : public wxSplitterWindow +{ +public: + LimitedSplitter (wxWindow* parent); + + bool OnSashPositionChange (int new_position) + { + /* 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); + +private: + void sized (wxSizeEvent& ev); + + bool _first_shown; + int const _top_panel_minimum_size; +}; + class ContentPanel { public: - ContentPanel (wxNotebook *, boost::shared_ptr); + ContentPanel (wxNotebook *, std::shared_ptr, std::weak_ptr viewer); + + ContentPanel (ContentPanel const&) = delete; + ContentPanel& operator= (ContentPanel const&) = delete; - boost::shared_ptr film () const { + std::shared_ptr film () const { return _film; } - void set_film (boost::shared_ptr f); + void set_film (std::shared_ptr); void set_general_sensitivity (bool s); - void set_selection (boost::weak_ptr); + void set_selection (std::weak_ptr); + void set_selection (ContentList cl); + void select_all (); void film_changed (Film::Property p); void film_content_changed (int p); - wxPanel* panel () const { - return _panel; + void first_shown (); + + wxWindow* window () const { + return _splitter; } wxNotebook* notebook () const { @@ -58,45 +96,62 @@ public: } ContentList selected (); - VideoContentList selected_video (); - AudioContentList selected_audio (); - SubtitleContentList selected_subtitle (); + ContentList selected_video (); + ContentList selected_audio (); + ContentList selected_text (); FFmpegContentList selected_ffmpeg (); -private: - void sequence_video_changed (); - void selection_changed (); void add_file_clicked (); + bool remove_clicked (bool hotkey); + void timeline_clicked (); + + std::weak_ptr film_viewer () const { + return _film_viewer; + } + + boost::signals2::signal SelectionChanged; + +private: + void item_selected (); + void item_deselected (); + void item_deselected_idle (); + void check_selection (); void add_folder_clicked (); - void remove_clicked (); + void add_dcp_clicked (); void earlier_clicked (); void later_clicked (); void right_click (wxListEvent &); void files_dropped (wxDropFilesEvent &); - void timeline_clicked (); void setup (); void setup_sensitivity (); - wxPanel* _panel; - wxSizer* _sizer; + void add_files (std::vector); + std::list panels () const; + + LimitedSplitter* _splitter; + wxPanel* _top_panel; wxNotebook* _notebook; wxListCtrl* _content; wxButton* _add_file; wxButton* _add_folder; + wxButton* _add_dcp; wxButton* _remove; wxButton* _earlier; wxButton* _later; wxButton* _timeline; - wxCheckBox* _sequence_video; - ContentSubPanel* _video_panel; - ContentSubPanel* _audio_panel; - ContentSubPanel* _subtitle_panel; - ContentSubPanel* _timing_panel; - std::list _panels; + VideoPanel* _video_panel = nullptr; + AudioPanel* _audio_panel = nullptr; + TextPanel* _text_panel[static_cast(TextType::COUNT)]; + TimingPanel* _timing_panel; ContentMenu* _menu; - TimelineDialog* _timeline_dialog; + TimelineDialog* _timeline_dialog = nullptr; + wxNotebook* _parent; + wxWindow* _last_selected_tab = nullptr; - boost::shared_ptr _film; + std::shared_ptr _film; + std::weak_ptr _film_viewer; bool _generally_sensitive; + bool _ignore_deselect; + bool _no_check_selection; };