+
+private:
+ void sized(wxSizeEvent& ev)
+ {
+ auto const height = GetSize().GetHeight();
+ if (_first_shown && (!_last_height || *_last_height != height) && height > _top_panel_minimum_size && GetSashPosition() < _top_panel_minimum_size) {
+ /* The window is now fairly big but the top panel is small; this happens when the DCP-o-matic window
+ * is shrunk and then made larger again. Try to set a sensible top panel size in this case (#1839).
+ */
+ SetSashPosition(Config::instance()->main_content_divider_sash_position().get_value_or(_top_panel_minimum_size));
+ }
+
+ ev.Skip ();
+ _last_height = height;
+ }
+
+ bool _first_shown = false;
+ int const _top_panel_minimum_size = 350;
+ boost::optional<int> _last_height;
+};
+
+
+class ContentDropTarget : public wxFileDropTarget
+{
+public:
+ ContentDropTarget(ContentPanel* owner)
+ : _panel(owner)
+ {}
+
+ bool OnDropFiles(wxCoord, wxCoord, wxArrayString const& filenames) override
+ {
+ vector<boost::filesystem::path> files;
+ vector<boost::filesystem::path> dcps;
+ vector<boost::filesystem::path> folders;
+ for (size_t i = 0; i < filenames.GetCount(); ++i) {
+ auto path = boost::filesystem::path(wx_to_std(filenames[i]));
+ if (dcp::filesystem::is_regular_file(path)) {
+ files.push_back(path);
+ } else if (dcp::filesystem::is_directory(path)) {
+ if (contains_assetmap(path)) {
+ dcps.push_back(path);
+ } else {
+ folders.push_back(path);
+ }
+ }
+ }
+
+ if (!filenames.empty()) {
+ _panel->add_files(files);
+ }
+
+ for (auto dcp: dcps) {
+ _panel->add_dcp(dcp);
+ }
+
+ for (auto dir: folders) {
+ _panel->add_folder(dir);
+ }
+
+ return true;
+ };
+
+private:
+ ContentPanel* _panel;