+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
-2e1d6dbba2557643f1a39c547a4be3a6ec8b8472
bf884630d6758c252d0d2c4fa5e866677cda66be
add9a03356d3d392e234354df4800b9042e0f426
*/
-#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;
ID_repeat = 1,
ID_join,
ID_find_missing,
+ ID_properties,
ID_re_examine,
ID_kdm,
ID_remove
_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 ();
_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);
_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) {
d->Destroy ();
}
+
+void
+ContentMenu::properties ()
+{
+ ContentPropertiesDialog* d = new ContentPropertiesDialog (_parent, _content.front ());
+ d->ShowModal ();
+ d->Destroy ();
+}
#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
{
void repeat ();
void join ();
void find_missing ();
+ void properties ();
void re_examine ();
void kdm ();
void remove ();
wxMenuItem* _repeat;
wxMenuItem* _join;
wxMenuItem* _find_missing;
+ wxMenuItem* _properties;
wxMenuItem* _re_examine;
wxMenuItem* _kdm;
wxMenuItem* _remove;
--- /dev/null
+/*
+ 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));
+}
--- /dev/null
+/*
+ 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);
+};
+
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