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
+
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__":