From: Carl Hetherington Date: Sun, 10 Jan 2016 01:36:47 +0000 (+0000) Subject: Allow removal of multiple cinemas / screens. X-Git-Tag: v2.6.15~3 X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=b9f427f1365c7aa25b0f2282a4dcefa25c3d8ef6 Allow removal of multiple cinemas / screens. --- diff --git a/src/wx/screens_panel.cc b/src/wx/screens_panel.cc index 7a5eb5fad..63d528b77 100644 --- a/src/wx/screens_panel.cc +++ b/src/wx/screens_panel.cc @@ -72,7 +72,7 @@ ScreensPanel::ScreensPanel (wxWindow* parent) sizer->Add (targets, 1, wxEXPAND); _search->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ScreensPanel::search_changed, this)); - _targets->Bind (wxEVT_COMMAND_TREE_SEL_CHANGED, &ScreensPanel::selection_changed, this); + _targets->Bind (wxEVT_COMMAND_TREE_SEL_CHANGED, &ScreensPanel::selection_changed_shim, this); _add_cinema->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&ScreensPanel::add_cinema_clicked, this)); _edit_cinema->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&ScreensPanel::edit_cinema_clicked, this)); @@ -87,7 +87,7 @@ ScreensPanel::ScreensPanel (wxWindow* parent) ScreensPanel::~ScreensPanel () { - _targets->Unbind (wxEVT_COMMAND_TREE_SEL_CHANGED, &ScreensPanel::selection_changed, this); + _targets->Unbind (wxEVT_COMMAND_TREE_SEL_CHANGED, &ScreensPanel::selection_changed_shim, this); } void @@ -97,11 +97,11 @@ ScreensPanel::setup_sensitivity () bool const ss = _selected_screens.size() == 1; _edit_cinema->Enable (sc); - _remove_cinema->Enable (sc); + _remove_cinema->Enable (_selected_cinemas.size() >= 1); _add_screen->Enable (sc); _edit_screen->Enable (ss); - _remove_screen->Enable (ss); + _remove_screen->Enable (_selected_screens.size() >= 1); } void @@ -180,14 +180,12 @@ ScreensPanel::edit_cinema_clicked () void ScreensPanel::remove_cinema_clicked () { - if (_selected_cinemas.size() != 1) { - return; + for (CinemaMap::iterator i = _selected_cinemas.begin(); i != _selected_cinemas.end(); ++i) { + Config::instance()->remove_cinema (i->second); + _targets->Delete (i->first); } - pair > c = *_selected_cinemas.begin(); - - Config::instance()->remove_cinema (c.second); - _targets->Delete (c.first); + selection_changed (); } void @@ -240,29 +238,25 @@ ScreensPanel::edit_screen_clicked () void ScreensPanel::remove_screen_clicked () { - if (_selected_screens.size() != 1) { - return; - } - - pair > s = *_selected_screens.begin(); + for (ScreenMap::iterator i = _selected_screens.begin(); i != _selected_screens.end(); ++i) { + CinemaMap::iterator j = _cinemas.begin (); + while (j != _cinemas.end ()) { + list > sc = j->second->screens (); + if (find (sc.begin(), sc.end(), i->second) != sc.end ()) { + break; + } - CinemaMap::iterator i = _cinemas.begin (); - while (i != _cinemas.end ()) { - list > sc = i->second->screens (); - if (find (sc.begin(), sc.end(), s.second) != sc.end ()) { - break; + ++j; } - ++i; - } + if (j == _cinemas.end()) { + continue; + } - if (i == _cinemas.end()) { - return; + j->second->remove_screen (i->second); + _targets->Delete (i->first); } - i->second->remove_screen (s.second); - _targets->Delete (s.first); - Config::instance()->changed (); } @@ -289,7 +283,13 @@ ScreensPanel::screens () const } void -ScreensPanel::selection_changed (wxTreeEvent &) +ScreensPanel::selection_changed_shim (wxTreeEvent &) +{ + selection_changed (); +} + +void +ScreensPanel::selection_changed () { if (_ignore_selection_change) { return; diff --git a/src/wx/screens_panel.h b/src/wx/screens_panel.h index cc5170d97..a982b8a2d 100644 --- a/src/wx/screens_panel.h +++ b/src/wx/screens_panel.h @@ -48,7 +48,8 @@ private: void add_screen_clicked (); void edit_screen_clicked (); void remove_screen_clicked (); - void selection_changed (wxTreeEvent &); + void selection_changed_shim (wxTreeEvent &); + void selection_changed (); void search_changed (); wxSearchCtrl* _search;