From 93664a46e226aad6cfb71749e3a83904102ea896 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 16 Jan 2023 23:17:01 +0100 Subject: [PATCH] Double-click to edit cinemas/screens. --- src/wx/screens_panel.cc | 36 +++++++++++++++++++++++++++++++----- src/wx/screens_panel.h | 3 +++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/wx/screens_panel.cc b/src/wx/screens_panel.cc index b79459032..617ff9adc 100644 --- a/src/wx/screens_panel.cc +++ b/src/wx/screens_panel.cc @@ -102,6 +102,7 @@ ScreensPanel::ScreensPanel (wxWindow* parent) _search->Bind (wxEVT_TEXT, boost::bind (&ScreensPanel::search_changed, this)); _targets->Bind (wxEVT_TREELIST_SELECTION_CHANGED, &ScreensPanel::selection_changed_shim, this); _targets->Bind (wxEVT_TREELIST_ITEM_CHECKED, &ScreensPanel::checkbox_changed, this); + _targets->Bind (wxEVT_TREELIST_ITEM_ACTIVATED, &ScreensPanel::item_activated, this); _add_cinema->Bind (wxEVT_BUTTON, boost::bind (&ScreensPanel::add_cinema_clicked, this)); _edit_cinema->Bind (wxEVT_BUTTON, boost::bind (&ScreensPanel::edit_cinema_clicked, this)); @@ -293,10 +294,15 @@ void ScreensPanel::edit_cinema_clicked () { auto cinema = cinema_for_operation (); - if (!cinema) { - return; + if (cinema) { + edit_cinema(cinema); } +} + +void +ScreensPanel::edit_cinema(shared_ptr cinema) +{ CinemaDialog dialog( GetParent(), _("Edit cinema"), cinema->name, cinema->emails, cinema->notes, cinema->utc_offset_hour(), cinema->utc_offset_minute() ); @@ -382,12 +388,15 @@ ScreensPanel::add_screen_clicked () void ScreensPanel::edit_screen_clicked () { - if (_selected_screens.size() != 1) { - return; + if (_selected_screens.size() == 1) { + edit_screen(_selected_screens[0]); } +} - auto edit_screen = _selected_screens[0]; +void +ScreensPanel::edit_screen(shared_ptr edit_screen) +{ ScreenDialog dialog( GetParent(), _("Edit screen"), edit_screen->name, @@ -700,3 +709,20 @@ ScreensPanel::config_changed(Config::Property property) clear_and_re_add(); } } + + +void +ScreensPanel::item_activated(wxTreeListEvent& ev) +{ + auto iter = _item_to_cinema.find(ev.GetItem()); + if (iter != _item_to_cinema.end()) { + edit_cinema(iter->second); + } else { + auto iter = _item_to_screen.find(ev.GetItem()); + if (iter != _item_to_screen.end()) { + edit_screen(iter->second); + } + } +} + + diff --git a/src/wx/screens_panel.h b/src/wx/screens_panel.h index b469c19e3..bdbac5141 100644 --- a/src/wx/screens_panel.h +++ b/src/wx/screens_panel.h @@ -58,14 +58,17 @@ private: boost::optional add_screen (std::shared_ptr, std::shared_ptr); void add_cinema_clicked (); void edit_cinema_clicked (); + void edit_cinema(std::shared_ptr cinema); void remove_cinema_clicked (); void add_screen_clicked (); void edit_screen_clicked (); + void edit_screen(std::shared_ptr screen); void remove_screen_clicked (); void selection_changed_shim (wxTreeListEvent &); void selection_changed (); void search_changed (); void checkbox_changed (wxTreeListEvent& ev); + void item_activated(wxTreeListEvent& ev); std::shared_ptr cinema_for_operation () const; void set_screen_checked (wxTreeListItem item, bool checked); void setup_cinema_checked_state (wxTreeListItem screen); -- 2.30.2