From e8f30b667d7a50a841da0202eb13421f8405ec81 Mon Sep 17 00:00:00 2001 From: Dmitriy Yefremov Date: Thu, 15 Feb 2018 15:16:34 +0300 Subject: [PATCH] service dialog elements update --- README.md | 21 +-- app/ui/main_app_window.py | 3 +- app/ui/service_details_dialog.glade | 273 +++++++++++++++++++++++++--- app/ui/service_details_dialog.py | 72 +++++++- 4 files changed, 328 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 9a1d8b5d..5b3985b4 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # DemonEditor -Enigma2 channel and satellites list editor for GNU/Linux. +##Enigma2 channel and satellites list editor for GNU/Linux. Experimental support of Neutrino-MP or others on the same basis (BPanther, etc). Focused on the convenience of working in lists from the keyboard. The mouse is also fully supported (Drag and Drop etc) -Keyboard shortcuts: +###Keyboard shortcuts: Ctrl + X, C, V, Up, Down, PageUp, PageDown, S, T, E, L, H, Space; Insert, Delete, F2. Insert - copies the selected channels from the main list to the bouquet or inserts (creates) a new bouquet. Ctrl + X - only in bouquet list. Ctrl + C - only in services list. @@ -15,18 +15,17 @@ Ctrl + L - parental lock. Ctrl + H - hide/skip. Left/Right - remove selection. -Multiple selections in lists only with Space key (as in file managers)! - -Extra: -Ability to import IPTV into bouquet from m3u files(Enigma2 only)! +###Extra: +Multiple selections in lists only with Space key (as in file managers)! +Ability to import IPTV into bouquet (Neutrino WEBTV) from m3u files! Tool for downloading picons from lyngsat.com. +###Minimum requirements: +Python >= 3.5.2 and GTK+ 3 with PyGObject bindings. +####Note. +To create a simple debian package, you can use the build-deb.sh Tests only in image based on OpenPLi or last BPanther(neutrino) images with GM 990 Spark Reloaded receiver in my preferred linux distro (Last Linux Mint 18.* - MATE 64-bit)! +#####Terrestrial and cable channels at the moment are not supported! -Minimum requirements: Python >= 3.5.2 and GTK+ 3 with PyGObject bindings. - -Terrestrial and cable channels at the moment are not supported! - -Note. To create a simple debian package, you can use the build-deb.sh diff --git a/app/ui/main_app_window.py b/app/ui/main_app_window.py index 1ef0f0ff..addf7a60 100644 --- a/app/ui/main_app_window.py +++ b/app/ui/main_app_window.py @@ -889,8 +889,9 @@ class MainAppWindow: self.__services, self.__bouquets) + @run_idle def on_services_data_edit(self, item): - dialog = ServiceDetailsDialog(self.__main_window) + dialog = ServiceDetailsDialog(self.__main_window, Profile(self.__profile), self.__services_view) dialog.show() @run_idle diff --git a/app/ui/service_details_dialog.glade b/app/ui/service_details_dialog.glade index 215b0691..e5fca4c8 100644 --- a/app/ui/service_details_dialog.glade +++ b/app/ui/service_details_dialog.glade @@ -2,6 +2,142 @@ + + + + + + + + Auto + + + 1/2 + + + 2/3 + + + 3/4 + + + 5/6 + + + 7/8 + + + 8/9 + + + 3/5 + + + 4/5 + + + 9/10 + + + + + + + + + + + + + + + + + Auto + + + QPSK + + + 8PSK + + + 16APSK + + + 32APSK + + + + + + + + + + + + + + + + + Root + + + Gold + + + Combo + + + + + + + + + + + H + + + V + + + R + + + L + + + + + + + + + + + + + + + + + + + + + + + DVB-S + + + DVB-S2 + + + False Service details @@ -154,7 +290,7 @@ True False - ID: + SSID: 1 @@ -251,6 +387,7 @@ 10 10 0 + 0.75 2 @@ -328,7 +465,7 @@ - + True True 4 @@ -340,7 +477,7 @@ - + True True 4 @@ -585,13 +722,34 @@ - + + True + False + + + 1 + 0 + - + + True + False + + + 2 + 0 + - + + True + False + + + 3 + 0 + @@ -730,18 +888,6 @@ 2 - - - True - True - 10 - 10 - - - 1 - 0 - - True @@ -854,6 +1000,13 @@ True False + pol_list_store + + + + 0 + + 1 @@ -864,6 +1017,13 @@ True False + fec_list_store + + + + 0 + + 1 @@ -874,6 +1034,13 @@ True False + sys_list_store + + + + 0 + + 1 @@ -896,7 +1063,7 @@ True True - 10 + 5 10 @@ -920,7 +1087,7 @@ True True - 10 + 5 10 @@ -932,7 +1099,7 @@ True False - PLS mode: + PLS code: 1 @@ -941,10 +1108,10 @@ - + True True - 10 + 5 10 @@ -956,7 +1123,7 @@ True False - PLS code: + PLS mode: 1 @@ -980,6 +1147,13 @@ True False + pilot_list_store + + + + 0 + + 3 @@ -1002,6 +1176,13 @@ True False + rolloff_list_store + + + + 0 + + 3 @@ -1024,6 +1205,13 @@ True False + invertion_list_store + + + + 0 + + 3 @@ -1046,6 +1234,13 @@ True False + mod_list_store + + + + 0 + + 3 @@ -1053,11 +1248,33 @@ - + True - True - 10 - 10 + False + sat_pos_list_store + + + + 0 + + + + + 1 + 0 + + + + + True + False + pls_mode_list_store + + + + 0 + + 3 diff --git a/app/ui/service_details_dialog.py b/app/ui/service_details_dialog.py index 2b488bb0..e54ed063 100644 --- a/app/ui/service_details_dialog.py +++ b/app/ui/service_details_dialog.py @@ -1,13 +1,83 @@ +from app.commons import run_idle +from app.eparser import Service +from app.ui.main_helper import get_base_model, is_only_one_item_selected from . import Gtk, UI_RESOURCES_PATH class ServiceDetailsDialog: - def __init__(self, transient): + def __init__(self, transient, options, view): builder = Gtk.Builder() builder.add_from_file(UI_RESOURCES_PATH + "service_details_dialog.glade") self._dialog = builder.get_object("service_details_dialog") self._dialog.set_transient_for(transient) + self._options = options + self._services_view = view + # Service elements + self._name_entry = builder.get_object("name_entry") + self._package_entry = builder.get_object("package_entry") + self._id_entry = builder.get_object("id_entry") + self._type_entry = builder.get_object("type_entry") + self._extra_entry = builder.get_object("extra_entry") + self._bitstream_entry = builder.get_object("bitstream_entry") + self._pcm_entry = builder.get_object("pcm_entry") + self._reference_entry = builder.get_object("reference_entry") + self._video_pid_entry = builder.get_object("video_pid_entry") + self._pcr_pid_entry = builder.get_object("pcr_pid_entry") + self._mpeg_pid_entry = builder.get_object("mpeg_pid_entry") + self._ac3_pid_entry = builder.get_object("ac3_pid_entry") + self._ac3plus_pid_entry = builder.get_object("ac3plus_pid_entry") + self._acc_pid_entry = builder.get_object("acc_pid_entry") + self._he_acc_pid_entry = builder.get_object("he_acc_pid_entry") + self._teletext_pid_entry = builder.get_object("teletext_pid_entry") + self._keep_check_button = builder.get_object("keep_check_button") + self._hide_check_button = builder.get_object("hide_check_button") + self._use_pids_check_button = builder.get_object("use_pids_check_button") + self._new_check_button = builder.get_object("new_check_button") + # Transponder elements + self._sat_pos_combo_box = builder.get_object("sat_pos_combo_box") + self._transponder_id_entry = builder.get_object("transponder_id_entry") + self._network_id_entry = builder.get_object("network_id_entry") + self._freq_entry = builder.get_object("freq_entry") + self._rate_entry = builder.get_object("rate_entry") + self._pol_combo_box = builder.get_object("pol_combo_box") + self._fec_combo_box = builder.get_object("fec_combo_box") + self._sys_combo_box = builder.get_object("sys_combo_box") + self._mod_combo_box = builder.get_object("mod_combo_box") + self._invertion_combo_box = builder.get_object("invertion_combo_box") + self._rolloff_combo_box = builder.get_object("rolloff_combo_box") + self._pilot_combo_box = builder.get_object("pilot_combo_box") + self._pls_mode_combo_box = builder.get_object("pls_mode_combo_box") + self._pls_code_entry = builder.get_object("pls_code_entry") + self._stream_id_entry = builder.get_object("stream_id_entry") + self._flags_entry = builder.get_object("flags_entry") + self._namespace_entry = builder.get_object("namespace_entry") + self.update_data_elements() + + @run_idle + def update_data_elements(self): + model, paths = self._services_view.get_selection().get_selected_rows() + model = get_base_model(model) + if is_only_one_item_selected(paths, self._dialog): + srv = Service(*model[paths][:]) + self._name_entry.set_text(srv.service) + self._package_entry.set_text(srv.package) + self._type_entry.set_text("") + self._id_entry.set_text(str(int(srv.ssid, 16))) + self._reference_entry.set_text(srv.picon_id.replace("_", ":").rstrip(".png")) + # transponder + self._freq_entry.set_text(srv.freq) + self._rate_entry.set_text(srv.rate) + self.select_active_text(self._pol_combo_box, srv.pol) + self.select_active_text(self._fec_combo_box, srv.fec) + self.select_active_text(self._sys_combo_box, srv.system) + + def select_active_text(self, box: Gtk.ComboBox, text): + model = box.get_model() + for index, row in enumerate(model): + if row[0] == text: + box.set_active(index) + break def show(self): response = self._dialog.run()