diff --git a/main/eparser/satxml.py b/main/eparser/satxml.py index 12bedf78..6ea41435 100644 --- a/main/eparser/satxml.py +++ b/main/eparser/satxml.py @@ -1,16 +1,6 @@ """ Module foe parsing Satellites.xml -Transponder parameters: -polarization: 0 - Horizontal, 1 - Vertical, 2 - Left Circular, 3 - Right Circular -fec_inner: 0 - Auto, 1 - 1/2, 2 - 2_3, 3 - 3/4, 4 - 5/6, 5 - 6/7, 6 - 7/8, 7 - 8/9, 8 - 3/5, 9 - 4/5, 10 - 9/10 -modulation: 0 - Auto, 1 - QPSK, 2 - 8PSK, 3 - 16APSK, 5 - 32APSK -rolloff: 0 - 0.35, 1 - 0.25, 2 - 0.20, 3 - Auto -pilot: 0 - Off, 1 - On, 2 - Auto -inversion: 0 = Off, 1 = On, 2 = Auto (default) -system: 0 = DVB-S, 1 = DVB-S2 -is_id: 0 - 255 -pls_mode: 0 - Root, 1 - Gold, 2 - Combo -pls_code: 0 - 262142 + For more info see __COMMENT """ from collections import namedtuple from xml.dom.minidom import parse, Document @@ -34,7 +24,7 @@ __COMMENT = (" File was created in DemonEditor\n\n" "transponder parameters:\n" "polarization: 0 - Horizontal, 1 - Vertical, 2 - Left Circular, 3 - Right Circular\n" - "fec_inner: 0 - Auto, 1 - 1/2, 2 - 2_3, 3 - 3/4, 4 - 5/6, 5 - 6/7, 6 - 7/8, 7 - 8/9, " + "fec_inner: 0 - Auto, 1 - 1/2, 2 - 2/3, 3 - 3/4, 4 - 5/6, 5 - 6/7, 6 - 7/8, 7 - 8/9, " "8 - 3/5, 9 - 4/5, 10 - 9/10\n" "modulation: 0 - Auto, 1 - QPSK, 2 - 8PSK, 3 - 16APSK, 5 - 32APSK\n" "rolloff: 0 - 0.35, 1 - 0.25, 2 - 0.20, 3 - Auto\n" diff --git a/main/ui/main_app_window.py b/main/ui/main_app_window.py index a15fa86f..9e214609 100644 --- a/main/ui/main_app_window.py +++ b/main/ui/main_app_window.py @@ -389,9 +389,7 @@ def on_data_save(*args): path = __options["data_dir_path"] bouquets = [] - services = [] services_model = __services_view.get_model() - s_n_columns = services_model.get_n_columns() def parse_bouquets(model, b_path, itr): if model.iter_has_child(itr): @@ -411,8 +409,7 @@ def on_data_save(*args): __bouquets_view.get_model().foreach(parse_bouquets) write_bouquets(path + "tmp/", bouquets, __bouquets) # Getting services - services_model.foreach(lambda model, s_path, itr: - services.append(Channel(*model.get(itr, *[item for item in range(s_n_columns)])))) + services = [Channel(*row[:]) for row in services_model] write_channels(path + "tmp/", services) diff --git a/main/ui/main_window.glade b/main/ui/main_window.glade index 667165a4..dbfbb886 100644 --- a/main/ui/main_window.glade +++ b/main/ui/main_window.glade @@ -98,11 +98,6 @@ - - True - False - gtk-edit - True False @@ -655,7 +650,7 @@ True False - Satellites edit tool + Satellites editor Tools True applications-utilities diff --git a/main/ui/satellites_dialog.glade b/main/ui/satellites_dialog.glade index 2eb156cd..a6588e0f 100644 --- a/main/ui/satellites_dialog.glade +++ b/main/ui/satellites_dialog.glade @@ -2,6 +2,87 @@ + + + + + + + + 1/2 + + + 2/3 + + + 3/4 + + + 5/6 + + + 6/7 + + + 7/8 + + + 8/9 + + + 3/5 + + + 4/5 + + + 9/10 + + + + + + + + + + + Auto + + + QPSK + + + 8PSK + + + 16APSK + + + 32APSK + + + + + + + + + + + H + + + V + + + R + + + L + + + True False @@ -63,6 +144,20 @@ + + + + + + + + DVB-S + + + DVB-S2 + + + 640 False @@ -290,6 +385,7 @@ True + False False Edit True @@ -340,6 +436,7 @@ + True Satellite True @@ -352,11 +449,13 @@ + True Freq. True True + 1 @@ -365,12 +464,14 @@ - + + True Rate True True + 2 @@ -380,10 +481,16 @@ + True Pol. True - + + True + pol_store + 0 + + 3 @@ -392,10 +499,16 @@ + True Fec. True - + + True + fec_store + 0 + + 4 @@ -404,10 +517,16 @@ + True System True - + + True + system_store + 0 + + 5 @@ -416,10 +535,16 @@ + True Mod. True - + + True + mod_store + 0 + + 6 @@ -429,6 +554,7 @@ False + True Pls mode True @@ -442,6 +568,7 @@ False + True Pls code True @@ -469,6 +596,7 @@ False + True Flags @@ -481,6 +609,7 @@ False + True Pos: diff --git a/main/ui/satellites_dialog.py b/main/ui/satellites_dialog.py index f2c257c4..116895ef 100644 --- a/main/ui/satellites_dialog.py +++ b/main/ui/satellites_dialog.py @@ -2,72 +2,101 @@ from main.commons import run_task from main.eparser import get_satellites, write_satellites, Satellite, Transponder from . import Gtk, Gdk -__data_path = None - def show_satellites_dialog(transient, data_path): - global __data_path - __data_path = data_path - handlers = {"on_satellites_list_load": on_satellites_list_load, - "on_remove": on_remove, "on_save": on_save, - "on_popup_menu": on_popup_menu} - builder = Gtk.Builder() - builder.add_from_file("./ui/satellites_dialog.glade") - builder.connect_signals(handlers) - dialog = builder.get_object("satellites_editor_dialog") - dialog.set_transient_for(transient) + dialog = SatellitesDialog(transient, data_path) dialog.run() dialog.destroy() -@run_task -def on_satellites_list_load(model): - """ Load satellites data into model """ - satellites = get_satellites(__data_path) - model.clear() - aggr = [None for x in range(9)] +class SatellitesDialog: + __slots__ = ["_dialog", "_data_path", "_stores"] - for name, flags, pos, transponders in satellites: - parent = model.append(None, [name, *aggr, flags, pos]) - for transponder in transponders: - model.append(parent, ["Transponder:", *transponder, None, None]) + def __init__(self, transient, data_path): + self._data_path = data_path + handlers = {"on_satellites_list_load": self.on_satellites_list_load, + "on_remove": self.on_remove, + "on_save": self.on_save, + "on_popup_menu": self.on_popup_menu, + "on_edited": self.on_edited} -def on_remove(view): - selection = view.get_selection() - model, paths = selection.get_selected_rows() - itrs = [model.get_iter(path) for path in paths] - for itr in itrs: - model.remove(itr) + builder = Gtk.Builder() + builder.add_from_file("./ui/satellites_dialog.glade") + builder.connect_signals(handlers) + self._dialog = builder.get_object("satellites_editor_dialog") + self._dialog.set_transient_for(transient) + self._stores = {3: builder.get_object("pol_store"), + 4: builder.get_object("fec_store"), + 5: builder.get_object("system_store"), + 6: builder.get_object("mod_store")} -@run_task -def on_save(view): - model = view.get_model() - satellites = [] - model.foreach(parse_data, satellites) - write_satellites(satellites, __data_path + "tmp/") + def run(self): + self._dialog.run() + def destroy(self): + self._dialog.destroy() -def parse_data(model, path, itr, sats): - if model.iter_has_child(itr): - num_of_children = model.iter_n_children(itr) - transponders = [] - num_columns = model.get_n_columns() + @run_task + def on_satellites_list_load(self, model): + """ Load satellites data into model """ + satellites = get_satellites(self._data_path) + model.clear() + aggr = [None for x in range(9)] - for num in range(num_of_children): - transponder_itr = model.iter_nth_child(itr, num) - transponder = model.get(transponder_itr, *[item for item in range(num_columns)]) - transponders.append(Transponder(*transponder[1:-2])) + for name, flags, pos, transponders in satellites: + parent = model.append(None, [name, *aggr, flags, pos]) + for transponder in transponders: + model.append(parent, ["Transponder:", *transponder, None, None]) - sat = model.get(itr, *[item for item in range(num_columns)]) - satellite = Satellite(sat[0], sat[-2], sat[-1], transponders) - sats.append(satellite) + def on_edited(self, view, path, value): + path, focus_column = view.get_cursor() + column_index = view.get_columns().index(focus_column) + model = view.get_model() + if column_index > 2: + # value type is Gtk.TreeIter + new_value = self._stores[column_index].get_value(value, 0) + # model[path][column_index] = new_value + else: + model[path][column_index] = value -def on_popup_menu(menu, event): - if event.get_event_type() == Gdk.EventType.BUTTON_PRESS and event.button == Gdk.BUTTON_SECONDARY: - menu.popup(None, None, None, None, event.button, event.time) + @staticmethod + def on_remove(view): + selection = view.get_selection() + model, paths = selection.get_selected_rows() + itrs = [model.get_iter(path) for path in paths] + for itr in itrs: + model.remove(itr) + + @run_task + def on_save(self, view): + model = view.get_model() + satellites = [] + model.foreach(self.parse_data, satellites) + write_satellites(satellites, self._data_path + "tmp/") # temporary!!! + + @staticmethod + def parse_data(model, path, itr, sats): + if model.iter_has_child(itr): + num_of_children = model.iter_n_children(itr) + transponders = [] + num_columns = model.get_n_columns() + + for num in range(num_of_children): + transponder_itr = model.iter_nth_child(itr, num) + transponder = model.get(transponder_itr, *[item for item in range(num_columns)]) + transponders.append(Transponder(*transponder[1:-2])) + + sat = model.get(itr, *[item for item in range(num_columns)]) + satellite = Satellite(sat[0], sat[-2], sat[-1], transponders) + sats.append(satellite) + + @staticmethod + def on_popup_menu(menu, event): + if event.get_event_type() == Gdk.EventType.BUTTON_PRESS and event.button == Gdk.BUTTON_SECONDARY: + menu.popup(None, None, None, None, event.button, event.time) if __name__ == "__main__":