701e75b87018ab1ec831f84b5325a0c76bd9f6ba from master; content properties dialog.
authorCarl Hetherington <cth@carlh.net>
Mon, 4 May 2015 00:35:54 +0000 (01:35 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 4 May 2015 00:35:54 +0000 (01:35 +0100)
ChangeLog
TO_PORT
src/wx/content_menu.cc
src/wx/content_menu.h
src/wx/content_properties_dialog.cc [new file with mode: 0644]
src/wx/content_properties_dialog.h [new file with mode: 0644]
src/wx/wscript

index 8a255946ae91ef3868035ee0f7ecc8fe1a5cae9c..78ca54717b08aca8c9ab9eff500fa22ccfaea7b7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2015-05-04  Carl Hetherington  <cth@carlh.net>
+
+       * Add a simple content properties dialog (#554).
+
 2015-05-01  carl  <cth@carlh.net>
 
        * Don't load image files whose names start with ._ as they
diff --git a/TO_PORT b/TO_PORT
index 02b51d6b3b9a5f66bf596a5c46c6df43b3ead026..78fa0c6584171a55cfc175879164a0dce0c901d7 100644 (file)
--- a/TO_PORT
+++ b/TO_PORT
@@ -1,3 +1,2 @@
-2e1d6dbba2557643f1a39c547a4be3a6ec8b8472
 bf884630d6758c252d0d2c4fa5e866677cda66be
 add9a03356d3d392e234354df4800b9042e0f426
index 23767bbe75e4a20a866b93f50243b348293195a4..daadab7d7d6ce15cb53ce2869a10ce9e7370b3a6 100644 (file)
 
 */
 
-#include <wx/wx.h>
-#include <wx/dirdlg.h>
+#include "content_menu.h"
+#include "repeat_dialog.h"
+#include "wx_util.h"
+#include "timeline_video_content_view.h"
+#include "timeline_audio_content_view.h"
+#include "content_properties_dialog.h"
 #include "lib/playlist.h"
 #include "lib/film.h"
 #include "lib/image_content.h"
 #include "lib/job_manager.h"
 #include "lib/exceptions.h"
 #include "lib/dcp_content.h"
-#include "content_menu.h"
-#include "repeat_dialog.h"
-#include "wx_util.h"
-#include "timeline_video_content_view.h"
-#include "timeline_audio_content_view.h"
+#include <wx/wx.h>
+#include <wx/dirdlg.h>
 
 using std::cout;
 using std::vector;
@@ -43,6 +44,7 @@ enum {
        ID_repeat = 1,
        ID_join,
        ID_find_missing,
+       ID_properties,
        ID_re_examine,
        ID_kdm,
        ID_remove
@@ -55,6 +57,7 @@ ContentMenu::ContentMenu (wxWindow* p)
        _repeat = _menu->Append (ID_repeat, _("Repeat..."));
        _join = _menu->Append (ID_join, _("Join"));
        _find_missing = _menu->Append (ID_find_missing, _("Find missing..."));
+       _properties = _menu->Append (ID_properties, _("Properties..."));
        _re_examine = _menu->Append (ID_re_examine, _("Re-examine..."));
        _kdm = _menu->Append (ID_kdm, _("Add KDM..."));
        _menu->AppendSeparator ();
@@ -63,6 +66,7 @@ ContentMenu::ContentMenu (wxWindow* p)
        _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::repeat, this), ID_repeat);
        _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::join, this), ID_join);
        _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::find_missing, this), ID_find_missing);
+       _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::properties, this), ID_properties);
        _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::re_examine, this), ID_re_examine);
        _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::kdm, this), ID_kdm);
        _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::remove, this), ID_remove);
@@ -91,6 +95,7 @@ ContentMenu::popup (weak_ptr<Film> f, ContentList c, TimelineContentViewList v,
        _join->Enable (n > 1);
        
        _find_missing->Enable (_content.size() == 1 && !_content.front()->paths_valid ());
+       _properties->Enable (_content.size() == 1);
        _re_examine->Enable (!_content.empty ());
 
        if (_content.size() == 1) {
@@ -315,3 +320,11 @@ ContentMenu::kdm ()
        
        d->Destroy ();
 }
+
+void
+ContentMenu::properties ()
+{
+       ContentPropertiesDialog* d = new ContentPropertiesDialog (_parent, _content.front ());
+       d->ShowModal ();
+       d->Destroy ();
+}
index 5f2a7f7b6dd35c0bbdbbd5b7ca29bb38fbe602ca..a0ac3f48148730bb01c24414c13b4fc4131c5be4 100644 (file)
 #ifndef DCPOMATIC_CONTENT_MENU_H
 #define DCPOMATIC_CONTENT_MENU_H
 
+#include "timeline_content_view.h"
+#include "lib/types.h"
 #include <wx/wx.h>
 #include <boost/shared_ptr.hpp>
 #include <boost/weak_ptr.hpp>
-#include "timeline_content_view.h"
-#include "lib/types.h"
 
 class Film;
+class Job;
 
 class ContentMenu : public boost::noncopyable
 {
@@ -40,6 +41,7 @@ private:
        void repeat ();
        void join ();
        void find_missing ();
+       void properties ();
        void re_examine ();
        void kdm ();
        void remove ();
@@ -54,6 +56,7 @@ private:
        wxMenuItem* _repeat;
        wxMenuItem* _join;
        wxMenuItem* _find_missing;
+       wxMenuItem* _properties;
        wxMenuItem* _re_examine;
        wxMenuItem* _kdm;
        wxMenuItem* _remove;
diff --git a/src/wx/content_properties_dialog.cc b/src/wx/content_properties_dialog.cc
new file mode 100644 (file)
index 0000000..0618441
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+    Copyright (C) 2015 Carl Hetherington <cth@carlh.net>
+
+    This program 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,
+    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.
+
+*/
+
+#include "content_properties_dialog.h"
+#include "wx_util.h"
+#include "lib/raw_convert.h"
+#include "lib/content.h"
+#include "lib/video_content.h"
+#include "lib/audio_content.h"
+
+using std::string;
+using boost::shared_ptr;
+using boost::dynamic_pointer_cast;
+
+ContentPropertiesDialog::ContentPropertiesDialog (wxWindow* parent, shared_ptr<Content> content)
+       : TableDialog (parent, _("Content Properties"), 2, false)
+{
+       string n = content->path(0).string();
+       boost::algorithm::replace_all (n, "&", "&&");
+       add_property (_("Filename"), std_to_wx (n));
+
+       shared_ptr<VideoContent> video = dynamic_pointer_cast<VideoContent> (content);
+       if (video) {
+               add_property (
+                       _("Video length"),
+                       std_to_wx (raw_convert<string> (video->video_length ().frames (video->video_frame_rate ()))) + " " + _("video frames")
+                       );
+               add_property (
+                       _("Video size"),
+                       std_to_wx (raw_convert<string> (video->video_size().width) + "x" + raw_convert<string> (video->video_size().height))
+                       );
+               add_property (
+                       _("Video frame rate"),
+                       std_to_wx (raw_convert<string> (video->video_frame_rate())) + " " + _("frames per second")
+                       );
+       }
+
+       shared_ptr<AudioContent> audio = dynamic_pointer_cast<AudioContent> (content);
+       if (audio) {
+               add_property (
+                       _("Audio channels"),
+                       std_to_wx (raw_convert<string> (audio->audio_channels ()))
+                       );
+               add_property (
+                       _("Audio length"),
+                       std_to_wx (raw_convert<string> (audio->audio_length().frames (audio->audio_frame_rate ()))) + " " + _("audio frames")
+                       );
+       }
+       
+       layout ();
+}
+
+void
+ContentPropertiesDialog::add_property (wxString k, wxString v)
+{
+       add (k, true);
+       add (new wxStaticText (this, wxID_ANY, v));
+}
diff --git a/src/wx/content_properties_dialog.h b/src/wx/content_properties_dialog.h
new file mode 100644 (file)
index 0000000..5c5efa1
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+    Copyright (C) 2015 Carl Hetherington <cth@carlh.net>
+
+    This program 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,
+    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.
+
+*/
+
+#include "table_dialog.h"
+#include <boost/shared_ptr.hpp>
+
+class Content;
+
+class ContentPropertiesDialog : public TableDialog
+{
+public:
+       ContentPropertiesDialog (wxWindow* parent, boost::shared_ptr<Content> content);
+
+private:
+       void add_property (wxString k, wxString v);
+};
+
index 1b701bb074bec3d1aba88536a0d9be42264c1cab..7b5904b4bcf882b3fc84cb985b58c38eeba616c4 100644 (file)
@@ -16,6 +16,7 @@ sources = """
           content_colour_conversion_dialog.cc
           content_menu.cc
           content_panel.cc
+          content_properties_dialog.cc
           content_sub_panel.cc
           dcp_panel.cc
           image_sequence_dialog.cc