From a88ca84c012db630abad08ba2e427335f1d40136 Mon Sep 17 00:00:00 2001 From: Dmitriy Yefremov Date: Fri, 3 Nov 2017 23:39:15 +0300 Subject: [PATCH] PageUp/PageDown impl --- main/ui/dialogs.glade | 126 ++++++++++++++++---------------- main/ui/main_app_window.py | 30 ++++++-- main/ui/satellites_dialog.glade | 10 ++- main/ui/satellites_dialog.py | 35 ++++++++- main/ui/settings_dialog.py | 98 +++++++++++++------------ 5 files changed, 178 insertions(+), 121 deletions(-) diff --git a/main/ui/dialogs.glade b/main/ui/dialogs.glade index 0847b75f..1d061648 100644 --- a/main/ui/dialogs.glade +++ b/main/ui/dialogs.glade @@ -166,6 +166,70 @@ dmitry.v.yefremov@gmail.com button4 + + False + + True + True + document-open + dialog + save + True + + + False + vertical + 2 + + + False + end + + + gtk-undo + True + True + True + True + + + True + True + 0 + + + + + gtk-ok + True + True + True + True + 0.55000001192092896 + + + True + True + 1 + + + + + False + False + 0 + + + + + + + + + button2 + button1 + + 320 False @@ -520,66 +584,4 @@ dmitry.v.yefremov@gmail.com ok_button - - False - - document-open - dialog - settings_dialog - save - - - False - vertical - 2 - - - False - end - - - gtk-undo - True - True - True - True - - - True - True - 0 - - - - - gtk-ok - True - True - True - True - 0.55000001192092896 - - - True - True - 1 - - - - - False - False - 0 - - - - - - - - - button2 - button1 - - diff --git a/main/ui/main_app_window.py b/main/ui/main_app_window.py index 4dc87928..d3ed732a 100644 --- a/main/ui/main_app_window.py +++ b/main/ui/main_app_window.py @@ -107,6 +107,14 @@ def move_items(key): prev_itr = model.iter_previous(itr) if prev_itr: model.move_before(itr, prev_itr) + elif key == Gdk.KEY_Page_Up: + up_itr = model.get_iter(__fav_view.get_cursor()[0]) + if up_itr: + model.move_before(itr, up_itr) + elif key == Gdk.KEY_Page_Down: + down_itr = model.get_iter(__fav_view.get_cursor()[0]) + if down_itr: + model.move_after(itr, down_itr) def on_cut(view): @@ -424,6 +432,11 @@ def on_fav_selection(model, path, column): def on_bouquets_selection(model, path, column): __fav_model.clear() + if __bouquets_view.row_expanded(path): + __bouquets_view.collapse_row(path) + else: + __bouquets_view.expand_row(path, column) + if len(path) > 1: delete_selection(__services_view) update_bouquet_channels(model, path) @@ -496,18 +509,21 @@ def on_preferences(item): show_settings_dialog(__main_window, __options) -def on_tree_view_key_release(view, event): +def on_tree_view_key_release(view: Gtk.TreeView, event): """ Handling keystrokes """ key = event.keyval ctrl = event.state & Gdk.ModifierType.CONTROL_MASK + alt = event.state & Gdk.ModifierType.MOD1_MASK model_name = view.get_model().get_name() if key == Gdk.KEY_Delete: on_delete(view) - elif ctrl and key == Gdk.KEY_Up: - move_items(Gdk.KEY_Up) - elif ctrl and key == Gdk.KEY_Down: - move_items(Gdk.KEY_Down) + elif ctrl and key == Gdk.KEY_Up or key == Gdk.KEY_Page_Up: + move_items(key) + elif ctrl and key == Gdk.KEY_Down or key == Gdk.KEY_Page_Down: + move_items(key) + elif model_name == FAV_LIST_NAME and key == Gdk.KEY_Control_L or key == Gdk.KEY_Control_R: + update_fav_num_column(view.get_model()) elif key == Gdk.KEY_Insert: # Move items from main to fav list if model_name == SERVICE_LIST_NAME: @@ -523,6 +539,10 @@ def on_tree_view_key_release(view, event): on_cut(view) elif ctrl and key == Gdk.KEY_v or key == Gdk.KEY_V: on_paste(view) + elif ctrl and key == Gdk.KEY_s or key == Gdk.KEY_S: + on_data_save() + elif key == Gdk.KEY_space and model_name == FAV_LIST_NAME: + pass @run_task diff --git a/main/ui/satellites_dialog.glade b/main/ui/satellites_dialog.glade index ef69a0f5..5685a75c 100644 --- a/main/ui/satellites_dialog.glade +++ b/main/ui/satellites_dialog.glade @@ -171,7 +171,7 @@ 640 False - Satellites + Satellites edit tool True True applications-utilities @@ -300,6 +300,7 @@ False True True + @@ -319,7 +320,7 @@ False True True - + @@ -343,8 +344,8 @@ False Load True - gtk-goto-bottom - + gtk-open + False @@ -452,6 +453,7 @@ True + multiple diff --git a/main/ui/satellites_dialog.py b/main/ui/satellites_dialog.py index 5ac81cd7..513d5adf 100644 --- a/main/ui/satellites_dialog.py +++ b/main/ui/satellites_dialog.py @@ -13,19 +13,21 @@ def show_satellites_dialog(transient, options): class SatellitesDialog: _aggr = [None for x in range(9)] # aggregate - __slots__ = ["_dialog", "_data_path", "_stores", "_options"] + + __slots__ = ["_dialog", "_data_path", "_stores", "_options", "_sat_view"] def __init__(self, transient, options): self._data_path = options["data_dir_path"] self._options = options - handlers = {"on_satellites_list_load": self.on_satellites_list_load, + handlers = {"on_open": self.on_open, "on_remove": self.on_remove, "on_save": self.on_save, "on_popup_menu": self.on_popup_menu, "on_add": self.on_add, "on_edit": self.on_edit, "on_key_release": self.on_key_release, + "on_row_activated": self.on_row_activated, "on_resize": self.on_resize} builder = Gtk.Builder() @@ -36,6 +38,7 @@ class SatellitesDialog: self._dialog = builder.get_object("satellites_editor_dialog") self._dialog.set_transient_for(transient) self._dialog.get_content_area().set_border_width(0) # The width of the border around the main dialog area! + self._sat_view = builder.get_object("satellites_editor_tree_view") # Setting the last size of the dialog window if it was saved window_size = self._options.get("sat_editor_window_size", None) if window_size: @@ -45,6 +48,7 @@ class SatellitesDialog: 4: builder.get_object("fec_store"), 5: builder.get_object("system_store"), 6: builder.get_object("mod_store")} + self.on_satellites_list_load(self._sat_view.get_model()) def run(self): self._dialog.run() @@ -57,6 +61,27 @@ class SatellitesDialog: if self._options: self._options["sat_editor_window_size"] = window.get_size() + def on_open(self, model): + builder = Gtk.Builder() + builder.add_objects_from_file("./ui/dialogs.glade", ("path_chooser_dialog",)) + ch_dialog = builder.get_object("path_chooser_dialog") + ch_dialog.set_transient_for(self._dialog) + + if ch_dialog.run() == 12: + path = ch_dialog.get_filename() + if path: + print(path) + self._data_path = path + self.on_satellites_list_load(model) + ch_dialog.destroy() + + @staticmethod + def on_row_activated(view, path, column): + if view.row_expanded(path): + view.collapse_row(path) + else: + view.expand_row(path, column) + def on_key_release(self, view, event): """ Handling keystrokes """ key = event.keyval @@ -68,6 +93,12 @@ class SatellitesDialog: self.on_add(view) elif key == Gdk.KEY_F2: self.on_edit(view) + elif ctrl and Gdk.KEY_s or Gdk.KEY_S: + self.on_satellite() + elif ctrl and Gdk.KEY_t or Gdk.KEY_T: + self.on_transponder() + elif key == Gdk.KEY_space: + pass @run_task def on_satellites_list_load(self, model): diff --git a/main/ui/settings_dialog.py b/main/ui/settings_dialog.py index 021f35e4..96d91898 100644 --- a/main/ui/settings_dialog.py +++ b/main/ui/settings_dialog.py @@ -1,59 +1,61 @@ from main.properties import write_config from . import Gtk -__current_data_path = "" - def show_settings_dialog(transient, options): - handlers = {"on_data_dir_field_icon_press": on_data_dir_field_icon_press} - builder = Gtk.Builder() - builder.add_from_file("ui/dialogs.glade") - builder.connect_signals(handlers) - dialog = builder.get_object("settings_dialog") - dialog.set_transient_for(transient) - host_field = builder.get_object("host_field") - host_field.set_text(options["host"]) - port_field = builder.get_object("port_field") - port_field.set_text(options["port"]) - login_field = builder.get_object("login_field") - login_field.set_text(options["user"]) - password_field = builder.get_object("password_field") - password_field.set_text(options["password"]) - services_field = builder.get_object("services_field") - services_field.set_text(options["services_path"]) - user_bouquet_field = builder.get_object("user_bouquet_field") - user_bouquet_field.set_text(options["user_bouquet_path"]) - satellites_xml_field = builder.get_object("satellites_xml_field") - satellites_xml_field.set_text(options["satellites_xml_path"]) - data_dir_field = builder.get_object("data_dir_field") - data_dir_field.set_text(options["data_dir_path"]) - global __current_data_path - __current_data_path = options["data_dir_path"] - - if dialog.run() == Gtk.ResponseType.OK: - options["host"] = host_field.get_text() - options["port"] = port_field.get_text() - options["user"] = login_field.get_text() - options["password"] = password_field.get_text() - options["services_path"] = services_field.get_text() - options["user_bouquet_path"] = user_bouquet_field.get_text() - options["satellites_xml_path"] = satellites_xml_field.get_text() - options["data_dir_path"] = data_dir_field.get_text() - write_config(options) - dialog.destroy() + SettingsDialog(transient, options) -def on_data_dir_field_icon_press(entry, icon, event_button): - builder = Gtk.Builder() - builder.add_from_file("ui/dialogs.glade") - dialog = builder.get_object("path_chooser_dialog") - dialog.set_current_folder(__current_data_path) - response = dialog.run() - if response == -12: # -12 for fix assertion 'gtk_widget_get_can_default (widget)' failed - entry.set_text(dialog.get_filename() if dialog.get_filename() else __current_data_path) - dialog.destroy() +class SettingsDialog: + def __init__(self, transient, options): + handlers = {"on_data_dir_field_icon_press": self.on_data_dir_field_icon_press} + builder = Gtk.Builder() + builder.add_from_file("ui/dialogs.glade") + builder.connect_signals(handlers) + self._dialog = builder.get_object("settings_dialog") + self._dialog.set_transient_for(transient) + self._host_field = builder.get_object("host_field") + self._host_field.set_text(options["host"]) + self._port_field = builder.get_object("port_field") + self._port_field.set_text(options["port"]) + self._login_field = builder.get_object("login_field") + self._login_field.set_text(options["user"]) + self._password_field = builder.get_object("password_field") + self._password_field.set_text(options["password"]) + self._services_field = builder.get_object("services_field") + self._services_field.set_text(options["services_path"]) + self._user_bouquet_field = builder.get_object("user_bouquet_field") + self._user_bouquet_field.set_text(options["user_bouquet_path"]) + self._satellites_xml_field = builder.get_object("satellites_xml_field") + self._satellites_xml_field.set_text(options["satellites_xml_path"]) + self._data_dir_field = builder.get_object("data_dir_field") + self._data_dir_field.set_text(options["data_dir_path"]) + self._current_data_path = options["data_dir_path"] - return response + if self._dialog.run() == Gtk.ResponseType.OK: + options["host"] = self._host_field.get_text() + options["port"] = self._port_field.get_text() + options["user"] = self._login_field.get_text() + options["password"] = self._password_field.get_text() + options["services_path"] = self._services_field.get_text() + options["user_bouquet_path"] = self._user_bouquet_field.get_text() + options["satellites_xml_path"] = self._satellites_xml_field.get_text() + options["data_dir_path"] = self._data_dir_field.get_text() + write_config(options) + self._dialog.destroy() + + def on_data_dir_field_icon_press(self, entry, icon, event_button): + builder = Gtk.Builder() + builder.add_from_file("ui/dialogs.glade") + dialog = builder.get_object("path_chooser_dialog") + dialog.set_transient_for(self._dialog) + dialog.set_current_folder(self._current_data_path) + response = dialog.run() + if response == -12: # -12 for fix assertion 'gtk_widget_get_can_default (widget)' failed + entry.set_text(dialog.get_filename() if dialog.get_filename() else self._current_data_path) + dialog.destroy() + + return response if __name__ == "__main__":