From 56f1c75a417c3cbc6e2f9b4f9961a4a9ce0c2175 Mon Sep 17 00:00:00 2001 From: DYefremov Date: Sat, 21 Aug 2021 14:50:05 +0300 Subject: [PATCH] rework of view menu --- app/settings.py | 4 +-- app/ui/app_menu.ui | 74 ++++++++++++++++++++++++++++++---------------- app/ui/main.py | 49 ++++++++++++++++++++++++++++-- 3 files changed, 97 insertions(+), 30 deletions(-) diff --git a/app/settings.py b/app/settings.py index e7984ccf..5f42ff24 100644 --- a/app/settings.py +++ b/app/settings.py @@ -204,9 +204,9 @@ class Settings: """ Adds extra options """ self._settings[name] = value - def get(self, name): + def get(self, name, default=None): """ Returns extra options or None """ - return self._settings.get(name, None) + return self._settings.get(name, default) @property def settings(self): diff --git a/app/ui/app_menu.ui b/app/ui/app_menu.ui index d5e46a5a..a2f3d536 100644 --- a/app/ui/app_menu.ui +++ b/app/ui/app_menu.ui @@ -80,18 +80,38 @@ - + View app.hide_menu_bar action-disabled
- Search - win.search + Bouquets + app.show_bouquets - Filter - win.filter + Satellites + app.show_satellites + + + Picons + app.show_picons + + + Timers + app.show_timers + + + Recordings + app.show_recordings + + + FTP + app.show_ftp + + + Control + app.show_control
@@ -100,14 +120,6 @@ app.hide_menu_bar action-disabled
- - Satellites editor - app.on_satellite_editor_show - - - Picons manager - app.on_picons_manager_show - Backups app.on_backup_tool_show @@ -266,12 +278,32 @@ action-disabled
- Search - win.search + Bouquets + app.show_bouquets - Filter - win.filter + Satellites + app.show_satellites + + + Picons + app.show_picons + + + Timers + app.show_timers + + + Recordings + app.show_recordings + + + FTP + app.show_ftp + + + Control + app.show_control
@@ -280,14 +312,6 @@ app.hide_menu_bar action-disabled
- - Satellites editor - app.on_satellite_editor_show - - - Picons manager - app.on_picons_manager_show - Backups app.on_backup_tool_show diff --git a/app/ui/main.py b/app/ui/main.py index 120dba84..84685df8 100644 --- a/app/ui/main.py +++ b/app/ui/main.py @@ -340,6 +340,7 @@ class Application(Gtk.Application): self._fav_view.bind_property("sensitive", self._player_prev_button, "sensitive") self._fav_view.bind_property("sensitive", self._player_next_button, "sensitive") self._fav_view.bind_property("sensitive", self._bouquets_view, "sensitive") + self._player_tool_bar.bind_property("visible", builder.get_object("fs_box"), "visible") # Record self._record_image = builder.get_object("record_button_image") # Search @@ -352,7 +353,17 @@ class Application(Gtk.Application): d_elements = (self._SERVICE_ELEMENTS, self._BOUQUET_ELEMENTS, self._COMMONS_ELEMENTS, self._FAV_ELEMENTS, self._FAV_ENIGMA_ELEMENTS, self._FAV_IPTV_ELEMENTS, self._LOCK_HIDE_ELEMENTS) self._tool_elements = {k: builder.get_object(k) for k in set(chain.from_iterable(d_elements))} - + # Stack page widgets. + self._stack_services_frame = builder.get_object("services_frame") + self._stack_services_frame.set_visible(self._settings.get("show_bouquets", True)) + self._stack_satellite_box = builder.get_object("satellite_box") + self._stack_satellite_box.set_visible(self._settings.get("show_satellites", True)) + self._stack_picon_box = builder.get_object("picon_box") + self._stack_picon_box.set_visible(self._settings.get("show_picons", True)) + self._stack_ftp_box = builder.get_object("ftp_box") + self._stack_ftp_box.set_visible(self._settings.get("show_ftp", True)) + self._stack_control_box = builder.get_object("control_box") + self._stack_control_box.set_visible(self._settings.get("show_control", True)) # Header bar. if IS_GNOME_SESSION: header_bar = Gtk.HeaderBar(visible=True, show_close_button=True) @@ -374,7 +385,7 @@ class Application(Gtk.Application): main_box = builder.get_object("main_window_box") main_box.add(main_header_box) main_box.reorder_child(main_header_box, 0) - + self._player_tool_bar.bind_property("visible", main_header_box, "visible") # Style style_provider = Gtk.CssProvider() style_provider.load_from_path(UI_RESOURCES_PATH + "style.css") @@ -384,13 +395,18 @@ class Application(Gtk.Application): def do_startup(self): Gtk.Application.do_startup(self) # App menu. + builder = get_builder(UI_RESOURCES_PATH + "app_menu.ui") if not IS_GNOME_SESSION: - builder = get_builder(UI_RESOURCES_PATH + "app_menu.ui") if IS_DARWIN: self.set_app_menu(builder.get_object("mac_app_menu")) self.set_menubar(builder.get_object("mac_menu_bar")) else: self.set_menubar(builder.get_object("menu_bar")) + else: + view_menu = builder.get_object("view_menu") + view_button = Gtk.MenuButton(visible=True, menu_model=view_menu, direction=Gtk.ArrowType.NONE) + view_button.set_tooltip_text(get_message("View")) + self._main_window.get_titlebar().pack_end(view_button) self.init_actions() self.set_accels() @@ -440,6 +456,19 @@ class Application(Gtk.Application): self.set_action("on_archive_open", self.on_archive_open) # Edit. self.set_action("on_edit", self.on_edit) + # View actions. + sa = self.set_state_action("show_bouquets", self.on_page_show, self._settings.get("show_bouquets", True)) + sa.connect("change-state", lambda a, v: self._stack_services_frame.set_visible(v)) + sa = self.set_state_action("show_satellites", self.on_page_show, self._settings.get("show_satellites", True)) + sa.connect("change-state", lambda a, v: self._stack_satellite_box.set_visible(v)) + sa = self.set_state_action("show_picons", self.on_page_show, self._settings.get("show_picons", True)) + sa.connect("change-state", lambda a, v: self._stack_picon_box.set_visible(v)) + sa = self.set_state_action("show_timers", self.on_page_show, self._settings.get("show_timers", True)) + sa = self.set_state_action("show_recordings", self.on_page_show, self._settings.get("show_recordings", True)) + sa = self.set_state_action("show_ftp", self.on_page_show, self._settings.get("show_ftp", True)) + sa.connect("change-state", lambda a, v: self._stack_ftp_box.set_visible(v)) + sa = self.set_state_action("show_control", self.on_page_show, self._settings.get("show_control", True)) + sa.connect("change-state", lambda a, v: self._stack_control_box.set_visible(v)) # Menu bar. if not IS_GNOME_SESSION: # We are working with the "hidden-when" submenu attribute. See 'app_menu_.ui' file. @@ -451,8 +480,16 @@ class Application(Gtk.Application): ac.connect("activate", fun) ac.set_enabled(enabled) self.add_action(ac) + return ac + def set_state_action(self, name, fun, enabled=True): + action = Gio.SimpleAction.new_stateful(name, None, GLib.Variant.new_boolean(enabled)) + action.connect("change-state", fun) + self.add_action(action) + + return action + def set_accels(self): """ Setting accelerators for the actions. """ self.set_accels_for_action("app.on_data_save", ["s"]) @@ -687,6 +724,10 @@ class Application(Gtk.Application): self._fav_paned.set_visible(page in (Page.SERVICES, Page.PICONS, Page.PLAYBACK)) self._save_tool_button.set_visible(page in (Page.SERVICES, Page.SATELLITE)) + def on_page_show(self, action, value): + action.set_state(value) + self._settings.add(action.get_name(), bool(value)) + # ***************** Copy - Cut - Paste ********************* # def on_services_copy(self, view): @@ -2671,6 +2712,8 @@ class Application(Gtk.Application): self._player_tool_bar.set_visible(visible) self._fav_paned.set_visible(visible) self._status_bar_box.set_visible(visible and not self._app_info_box.get_visible()) + if not IS_GNOME_SESSION: + self._main_window.set_show_menubar(visible) def on_main_window_state(self, window, event): if event.new_window_state & Gdk.WindowState.FULLSCREEN or event.new_window_state & Gdk.WindowState.MAXIMIZED: