Initial cucumber test.
[dcpomatic.git] / src / wx / content_panel.cc
index 8a98bc1a43d706ee78336f1c61a8171ec9629d7f..07d2e142acfe456363ef33a16643e246f6fca84a 100644 (file)
@@ -21,6 +21,9 @@
 
 #include "audio_panel.h"
 #include "content_panel.h"
+#include "content_panel.h"
+#include "cucumber_bridge.h"
+#include "cucumber_registry.h"
 #include "dcpomatic_button.h"
 #include "dir_dialog.h"
 #include "file_dialog.h"
@@ -30,6 +33,8 @@
 #include "timeline_dialog.h"
 #include "timing_panel.h"
 #include "video_panel.h"
+#include "video_panel.h"
+#include "wx_util.h"
 #include "wx_util.h"
 #include "lib/audio_content.h"
 #include "lib/case_insensitive_sorter.h"
@@ -858,6 +863,36 @@ ContentPanel::film_content_changed (int property)
 }
 
 
+static
+wxString
+text_for_content(shared_ptr<Content> content, bool& alert)
+{
+       bool const valid = content->paths_valid();
+
+       auto dcp = dynamic_pointer_cast<DCPContent>(content);
+       bool const needs_kdm = dcp && dcp->needs_kdm();
+       bool const needs_assets = dcp && dcp->needs_assets();
+
+       auto s = std_to_wx(content->summary());
+
+       if (!valid) {
+               s = _("MISSING: ") + s;
+       }
+
+       if (needs_kdm) {
+               s = _("NEEDS KDM: ") + s;
+       }
+
+       if (needs_assets) {
+               s = _("NEEDS OV: ") + s;
+       }
+
+       alert = !valid || needs_kdm || needs_assets;
+
+       return s;
+}
+
+
 void
 ContentPanel::setup ()
 {
@@ -873,27 +908,24 @@ ContentPanel::setup ()
        vector<ContentListCtrl::Item> items;
 
        for (auto i: content) {
-               bool const valid = i->paths_valid ();
-
-               auto dcp = dynamic_pointer_cast<DCPContent> (i);
-               bool const needs_kdm = dcp && dcp->needs_kdm ();
-               bool const needs_assets = dcp && dcp->needs_assets ();
-
-               auto s = std_to_wx (i->summary ());
-
-               if (!valid) {
-                       s = _("MISSING: ") + s;
-               }
-
-               if (needs_kdm) {
-                       s = _("NEEDS KDM: ") + s;
+               int const t = _content->GetItemCount ();
+               bool alert = false;
+               wxString const s = text_for_content(i, alert);
+               items.push_back({s, i, alert});
+
+               wxListItem item;
+               item.SetId (t);
+               item.SetText (s);
+               item.SetData (i.get ());
+               _content->InsertItem (item);
+
+               if (i.get() == selected_content) {
+                       _content->SetItemState (t, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
                }
 
-               if (needs_assets) {
-                       s = _("NEEDS OV: ") + s;
+               if (alert) {
+                       _content->SetItemTextColour (t, *wxRED);
                }
-
-               items.push_back({s, i, !valid || needs_kdm || needs_assets});
        }
 
        _content->set(items);
@@ -986,3 +1018,26 @@ ContentPanel::window() const
 {
        return _splitter;
 }
+
+
+void
+ContentPanel::cucumber_add_content_file (string filename)
+{
+       list<boost::filesystem::path> path_list;
+       path_list.push_back (filename);
+       add_files (path_list);
+}
+
+
+/** This may not be called from the GUI thread */
+std::string
+ContentPanel::cucumber_get_content_list ()
+{
+       /* The playlist method that we end up calling has a mutex, so this should be ok */
+       std::string s;
+       BOOST_FOREACH (shared_ptr<Content> i, _film->content()) {
+               bool alert;
+               s += wx_to_std (text_for_content(i, alert)) + "\n";
+       }
+       return s;
+}