summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2022-03-11 21:00:32 +0100
committerCarl Hetherington <cth@carlh.net>2022-03-11 21:00:32 +0100
commit06df771b17b64228a696f06d6154aac0047158af (patch)
tree08049360f98dd5de9e9a13514110f10edf826aa1
parent10c9dbd18c11dc57629b5a0e0b8f33079f5d2d8f (diff)
Allow editing of a screen's cinema / adding a new screen when
a screen is selected (#2210).
-rw-r--r--src/wx/screens_panel.cc49
-rw-r--r--src/wx/screens_panel.h1
2 files changed, 31 insertions, 19 deletions
diff --git a/src/wx/screens_panel.cc b/src/wx/screens_panel.cc
index c5aea4223..c03490312 100644
--- a/src/wx/screens_panel.cc
+++ b/src/wx/screens_panel.cc
@@ -109,10 +109,10 @@ ScreensPanel::setup_sensitivity ()
bool const sc = _selected_cinemas.size() == 1;
bool const ss = _selected_screens.size() == 1;
- _edit_cinema->Enable (sc);
+ _edit_cinema->Enable (sc || ss);
_remove_cinema->Enable (_selected_cinemas.size() >= 1);
- _add_screen->Enable (sc);
+ _add_screen->Enable (sc || ss);
_edit_screen->Enable (ss);
_remove_screen->Enable (_selected_screens.size() >= 1);
}
@@ -181,26 +181,38 @@ ScreensPanel::add_cinema_clicked ()
}
+optional<pair<wxTreeListItem, shared_ptr<Cinema>>>
+ScreensPanel::cinema_for_operation () const
+{
+ if (_selected_cinemas.size() == 1) {
+ return make_pair(_selected_cinemas.begin()->first, _selected_cinemas.begin()->second);
+ } else if (_selected_screens.size() == 1) {
+ return make_pair(_targets->GetItemParent(_selected_screens.begin()->first), _selected_screens.begin()->second->cinema);
+ }
+
+ return {};
+}
+
+
void
ScreensPanel::edit_cinema_clicked ()
{
- if (_selected_cinemas.size() != 1) {
+ auto cinema = cinema_for_operation ();
+ if (!cinema) {
return;
}
- auto c = *_selected_cinemas.begin();
-
auto d = new CinemaDialog (
- GetParent(), _("Edit cinema"), c.second->name, c.second->emails, c.second->notes, c.second->utc_offset_hour(), c.second->utc_offset_minute()
+ GetParent(), _("Edit cinema"), cinema->second->name, cinema->second->emails, cinema->second->notes, cinema->second->utc_offset_hour(), cinema->second->utc_offset_minute()
);
if (d->ShowModal() == wxID_OK) {
- c.second->name = d->name ();
- c.second->emails = d->emails ();
- c.second->notes = d->notes ();
- c.second->set_utc_offset_hour (d->utc_offset_hour ());
- c.second->set_utc_offset_minute (d->utc_offset_minute ());
- _targets->SetItemText (c.first, std_to_wx (d->name()));
+ cinema->second->name = d->name ();
+ cinema->second->emails = d->emails ();
+ cinema->second->notes = d->notes ();
+ cinema->second->set_utc_offset_hour (d->utc_offset_hour ());
+ cinema->second->set_utc_offset_minute (d->utc_offset_minute ());
+ _targets->SetItemText (cinema->first, std_to_wx(d->name()));
Config::instance()->changed (Config::CINEMAS);
}
@@ -233,19 +245,18 @@ ScreensPanel::remove_cinema_clicked ()
void
ScreensPanel::add_screen_clicked ()
{
- if (_selected_cinemas.size() != 1) {
+ auto cinema = cinema_for_operation ();
+ if (!cinema) {
return;
}
- auto c = _selected_cinemas.begin()->second;
-
auto d = new ScreenDialog (GetParent(), _("Add Screen"));
if (d->ShowModal () != wxID_OK) {
d->Destroy ();
return;
}
- for (auto i: c->screens ()) {
+ for (auto i: cinema->second->screens()) {
if (i->name == d->name()) {
error_dialog (
GetParent(),
@@ -258,9 +269,9 @@ ScreensPanel::add_screen_clicked ()
}
}
- auto s = std::make_shared<Screen>(d->name(), d->notes(), d->recipient(), d->recipient_file(), d->trusted_devices());
- c->add_screen (s);
- auto id = add_screen (c, s);
+ auto screen = std::make_shared<Screen>(d->name(), d->notes(), d->recipient(), d->recipient_file(), d->trusted_devices());
+ cinema->second->add_screen (screen);
+ auto id = add_screen (cinema->second, screen);
if (id) {
_targets->Expand (id.get ());
}
diff --git a/src/wx/screens_panel.h b/src/wx/screens_panel.h
index bea9c2995..4885a8454 100644
--- a/src/wx/screens_panel.h
+++ b/src/wx/screens_panel.h
@@ -80,6 +80,7 @@ private:
void selection_changed ();
void search_changed ();
void checkbox_changed (wxTreeListEvent& ev);
+ boost::optional<std::pair<wxTreeListItem, std::shared_ptr<Cinema>>> cinema_for_operation () const;
wxSearchCtrl* _search;
TreeListCtrl* _targets;