Change bitmap_path to take a full name with extension.
[dcpomatic.git] / src / wx / timeline_dialog.cc
index b487bdb819cbdc953749d2a00eaccc2ad0e7c793..1c67622c2bffb21858dc405a17afb15fc3fd343d 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2013-2018 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2013-2021 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 
 */
 
+
+#include "content_panel.h"
 #include "film_editor.h"
 #include "timeline_dialog.h"
 #include "wx_util.h"
-#include "content_panel.h"
-#include "lib/playlist.h"
-#include "lib/cross.h"
 #include "lib/compose.hpp"
+#include "lib/cross.h"
+#include "lib/playlist.h"
+#include <dcp/warnings.h>
+LIBDCP_DISABLE_WARNINGS
 #include <wx/graphics.h>
-#include <iostream>
+LIBDCP_ENABLE_WARNINGS
 #include <list>
 
+
 using std::list;
-using std::cout;
+using std::shared_ptr;
 using std::string;
-using boost::shared_ptr;
+using std::weak_ptr;
+#if BOOST_VERSION >= 106100
+using namespace boost::placeholders;
+#endif
 
-TimelineDialog::TimelineDialog (ContentPanel* cp, shared_ptr<Film> film)
+
+TimelineDialog::TimelineDialog (ContentPanel* cp, shared_ptr<Film> film, weak_ptr<FilmViewer> viewer)
        : wxDialog (
-               cp->panel(),
+               cp->window(),
                wxID_ANY,
                _("Timeline"),
                wxDefaultPosition,
@@ -51,24 +59,25 @@ TimelineDialog::TimelineDialog (ContentPanel* cp, shared_ptr<Film> film)
 #endif
                )
        , _film (film)
-       , _timeline (this, cp, film)
+       , _timeline (this, cp, film, viewer)
 {
-       wxBoxSizer* sizer = new wxBoxSizer (wxVERTICAL);
-
-       wxBitmap select (bitmap_path("select"), wxBITMAP_TYPE_PNG);
-       wxBitmap zoom (bitmap_path("zoom"), wxBITMAP_TYPE_PNG);
-       wxBitmap zoom_all (bitmap_path("zoom_all"), wxBITMAP_TYPE_PNG);
-       wxBitmap snap (bitmap_path("snap"), wxBITMAP_TYPE_PNG);
-       wxBitmap sequence (bitmap_path("sequence"), wxBITMAP_TYPE_PNG);
+       auto sizer = new wxBoxSizer (wxVERTICAL);
 
-       cout << "select OK: " << select.IsOk() << "\n";
+       wxBitmap select (bitmap_path("select.png"), wxBITMAP_TYPE_PNG);
+       wxBitmap zoom (bitmap_path("zoom.png"), wxBITMAP_TYPE_PNG);
+       wxBitmap zoom_all (bitmap_path("zoom_all.png"), wxBITMAP_TYPE_PNG);
+       wxBitmap snap (bitmap_path("snap.png"), wxBITMAP_TYPE_PNG);
+       wxBitmap sequence (bitmap_path("sequence.png"), wxBITMAP_TYPE_PNG);
 
-       _toolbar = new wxToolBar (this, wxID_ANY);
+       _toolbar = new wxToolBar (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTB_HORIZONTAL);
+       _toolbar->SetMargins (4, 4);
+       _toolbar->SetToolBitmapSize (wxSize(32, 32));
        _toolbar->AddRadioTool ((int) Timeline::SELECT, _("Select"), select, wxNullBitmap, _("Select and move content"));
        _toolbar->AddRadioTool ((int) Timeline::ZOOM, _("Zoom"), zoom, wxNullBitmap, _("Zoom in / out"));
        _toolbar->AddTool ((int) Timeline::ZOOM_ALL, _("Zoom all"), zoom_all, _("Zoom out to whole film"));
        _toolbar->AddCheckTool ((int) Timeline::SNAP, _("Snap"), snap, wxNullBitmap, _("Snap"));
        _toolbar->AddCheckTool ((int) Timeline::SEQUENCE, _("Sequence"), sequence, wxNullBitmap, _("Keep video and subtitles in sequence"));
+       _toolbar->Realize ();
 
        _toolbar->Bind (wxEVT_TOOL, bind (&TimelineDialog::tool_clicked, this, _1));
 
@@ -76,7 +85,7 @@ TimelineDialog::TimelineDialog (ContentPanel* cp, shared_ptr<Film> film)
        sizer->Add (&_timeline, 1, wxEXPAND | wxALL, 12);
 
 #ifdef DCPOMATIC_LINUX
-       wxSizer* buttons = CreateSeparatedButtonSizer (wxCLOSE);
+       auto buttons = CreateSeparatedButtonSizer (wxCLOSE);
        if (buttons) {
                sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder());
        }
@@ -87,49 +96,48 @@ TimelineDialog::TimelineDialog (ContentPanel* cp, shared_ptr<Film> film)
        sizer->SetSizeHints (this);
 
         _toolbar->ToggleTool ((int) Timeline::SNAP, _timeline.snap ());
-       film_changed (Film::SEQUENCE);
+       film_change (ChangeType::DONE, Film::Property::SEQUENCE);
 
-       _film_changed_connection = film->Changed.connect (bind (&TimelineDialog::film_changed, this, _1));
+       _film_changed_connection = film->Change.connect (bind (&TimelineDialog::film_change, this, _1, _2));
 }
 
-wxString
-TimelineDialog::bitmap_path (string name)
-{
-       boost::filesystem::path p = shared_path() / String::compose("%1.png", name);
-       cout << "Loading " << p.string() << "\n";
-       return std_to_wx (p.string());
-}
 
 void
-TimelineDialog::film_changed (Film::Property p)
+TimelineDialog::film_change (ChangeType type, Film::Property p)
 {
-       shared_ptr<Film> film = _film.lock ();
+       if (type != ChangeType::DONE) {
+               return;
+       }
+
+       auto film = _film.lock ();
        if (!film) {
                return;
        }
 
-       if (p == Film::SEQUENCE) {
+       if (p == Film::Property::SEQUENCE) {
                _toolbar->ToggleTool ((int) Timeline::SEQUENCE, film->sequence ());
        }
 }
 
+
 void
 TimelineDialog::set_selection (ContentList selection)
 {
        _timeline.set_selection (selection);
 }
 
+
 void
 TimelineDialog::tool_clicked (wxCommandEvent& ev)
 {
-       Timeline::Tool t = (Timeline::Tool) ev.GetId();
+       Timeline::Tool t = static_cast<Timeline::Tool>(ev.GetId());
        _timeline.tool_clicked (t);
        if (t == Timeline::SNAP) {
-               _timeline.set_snap (_snap->IsToggled());
+               _timeline.set_snap (_toolbar->GetToolState(static_cast<int>(t)));
        } else if (t == Timeline::SEQUENCE) {
-               shared_ptr<Film> film = _film.lock ();
+               auto film = _film.lock ();
                if (film) {
-                       film->set_sequence (_sequence->IsToggled());
+                       film->set_sequence (_toolbar->GetToolState(static_cast<int>(t)));
                }
        }
 }