From 31705ab896ab0ddc91a8611db618da3b15c6f4ff Mon Sep 17 00:00:00 2001 From: Dmitriy Yefremov Date: Tue, 31 Oct 2017 20:49:36 +0300 Subject: [PATCH] added satellite and transponder dialogs --- main/ui/satellites_dialog.glade | 698 +++++++++++++++++++++++++++++--- main/ui/satellites_dialog.py | 149 ++++++- 2 files changed, 789 insertions(+), 58 deletions(-) diff --git a/main/ui/satellites_dialog.glade b/main/ui/satellites_dialog.glade index a6588e0f..3f66cbd8 100644 --- a/main/ui/satellites_dialog.glade +++ b/main/ui/satellites_dialog.glade @@ -63,6 +63,23 @@ + + + + + + + + Root + + + Gold + + + Combo + + + @@ -94,6 +111,7 @@ False True True + @@ -103,6 +121,7 @@ False True True + @@ -116,6 +135,11 @@ + + 180 + 0.10000000000000001 + 10 + @@ -144,20 +168,6 @@ - - - - - - - - DVB-S - - - DVB-S2 - - - 640 False @@ -221,6 +231,7 @@ False True True + @@ -376,6 +387,7 @@ Add True gtk-add + False @@ -385,11 +397,11 @@ True - False False Edit True gtk-edit + False @@ -453,10 +465,7 @@ Freq. True - - True - - + 1 @@ -469,10 +478,7 @@ Rate True - - True - - + 2 @@ -485,12 +491,7 @@ Pol. True - - True - pol_store - 0 - - + 3 @@ -503,12 +504,7 @@ Fec. True - - True - fec_store - 0 - - + 4 @@ -521,12 +517,7 @@ System True - - True - system_store - 0 - - + 5 @@ -539,12 +530,7 @@ Mod. True - - True - mod_store - 0 - - + 6 @@ -641,4 +627,622 @@ sat_ed_cancel_button + + + + + + + + E + + + W + + + + + False + Satellite + dialog + + + False + vertical + 2 + + + False + end + + + gtk-undo + True + True + True + True + + + True + True + 0 + + + + + gtk-ok + True + True + True + True + + + True + True + 1 + + + + + False + False + 0 + + + + + True + False + vertical + 2 + + + True + False + Satellite properties: + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + False + 2 + + + True + False + Name + + + 0 + 0 + + + + + True + False + Position + + + 1 + 0 + + + + + True + True + gtk-edit + False + False + False + satellite name + name + + + 0 + 1 + + + + + True + True + False + False + number + pos_adjustment + 1 + True + + + 1 + 1 + + + + + True + False + side_store + 0 + 0 + + + + 0 + + + + + 2 + 1 + + + + + + + + False + True + 2 + + + + + True + False + + + False + True + 3 + + + + + False + True + 1 + + + + + + button3 + button4 + + + + + + + + + + DVB-S + + + DVB-S2 + + + + + 320 + False + Transponder + False + True + 320 + True + dialog + + + False + vertical + 2 + + + False + end + + + gtk-undo + True + True + True + True + + + True + True + 0 + + + + + gtk-ok + True + True + True + True + + + True + True + 1 + + + + + False + False + 0 + + + + + True + False + vertical + 2 + + + True + False + Transponder properties: + False + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + False + 2 + + + True + False + Freq. + + + 0 + 0 + + + + + True + False + Rate + + + 1 + 0 + + + + + True + False + Pol. + + + 2 + 0 + + + + + True + False + Fec. + + + 3 + 0 + + + + + True + False + Sys. + + + 4 + 0 + + + + + True + False + Mod. + + + 5 + 0 + + + + + True + True + 12 + 10 + gtk-edit + False + False + False + 11700000 + digits + + + 0 + 1 + + + + + True + True + 12 + 10 + gtk-edit + 27500000 + digits + + + 1 + 1 + + + + + True + False + pol_store + 0 + + + + 0 + + + + + 2 + 1 + + + + + True + False + fec_store + 0 + + + + 0 + + + + + 3 + 1 + + + + + True + False + system_store + 0 + + + + 0 + + + + + 4 + 1 + + + + + True + False + mod_store + 0 + + + + 0 + + + + + 5 + 1 + + + + + False + True + 2 + + + + + True + False + + + False + True + 3 + + + + + True + True + True + + + True + False + 2 + + + True + False + Pls mode + + + 0 + 0 + + + + + True + False + Pls code + + + 1 + 0 + + + + + True + False + Is ID + + + 2 + 0 + + + + + True + False + pls_mode_store + 0 + + + + 0 + + + + + 0 + 1 + + + + + True + True + 5 + 12 + gtk-edit + False + 0 - 262142 + digits + + + 1 + 1 + + + + + True + True + 5 + 12 + gtk-edit + False + 0 - 255 + digits + + + 2 + 1 + + + + + + + True + False + Extra + + + + + False + True + 4 + + + + + False + True + 1 + + + + + + button1 + button2 + + diff --git a/main/ui/satellites_dialog.py b/main/ui/satellites_dialog.py index 116895ef..5c0a13cc 100644 --- a/main/ui/satellites_dialog.py +++ b/main/ui/satellites_dialog.py @@ -1,3 +1,5 @@ +from math import fabs + from main.commons import run_task from main.eparser import get_satellites, write_satellites, Satellite, Transponder from . import Gtk, Gdk @@ -19,10 +21,12 @@ class SatellitesDialog: "on_remove": self.on_remove, "on_save": self.on_save, "on_popup_menu": self.on_popup_menu, - "on_edited": self.on_edited} + "on_add": self.on_add, + "on_edit": self.on_edit} builder = Gtk.Builder() - builder.add_from_file("./ui/satellites_dialog.glade") + builder.add_objects_from_file("./ui/satellites_dialog.glade", + ("satellites_editor_dialog", "satellites_tree_store", "popup_menu")) builder.connect_signals(handlers) self._dialog = builder.get_object("satellites_editor_dialog") @@ -50,23 +54,47 @@ class SatellitesDialog: for transponder in transponders: model.append(parent, ["Transponder:", *transponder, None, None]) - 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() + def on_add(self, view): + self.on_edit(view, force=True) - 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 + def on_edit(self, view, force=False): + """ """ + model, paths = view.get_selection().get_selected_rows() + paths_count = len(paths) + + if paths_count == 0: + return + elif paths_count > 1: + print("Error dialog!") + return + + row = model.get(model.get_iter(paths[0]), *[x for x in range(view.get_n_columns())]) + # maybe temporary! + if row[-1]: # satellite + self.on_satellite(None if force else Satellite(row[0], None, row[-1], None)) else: - model[path][column_index] = value + self.on_transponder(None if force else Transponder(*row[1:-2])) + + def on_satellite(self, satellite=None): + sat_dialog = SatelliteDialog(self._dialog, satellite) + sat = sat_dialog.run() + if sat: + print(sat) + sat_dialog.destroy() + + def on_transponder(self, transponder=None): + dialog = TransponderDialog(self._dialog, transponder) + tr = dialog.run() + if tr: + print(tr) + dialog.destroy() @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) @@ -99,5 +127,104 @@ class SatellitesDialog: menu.popup(None, None, None, None, event.button, event.time) +class TransponderDialog: + """ Shows dialog for adding or edit transponder """ + + def __init__(self, transient, transponder: Transponder = None): + builder = Gtk.Builder() + builder.add_objects_from_file("./ui/satellites_dialog.glade", + ("transponder_dialog", + "pol_store", "fec_store", + "mod_store", "system_store", + "pls_mode_store")) + + self._dialog = builder.get_object("transponder_dialog") + self._dialog.set_transient_for(transient) + self._freq_entry = builder.get_object("freq_entry") + self._rate_entry = builder.get_object("rate_entry") + self._pol_box = builder.get_object("pol_box") + self._fec_box = builder.get_object("fec_box") + self._sys_box = builder.get_object("sys_box") + self._mod_box = builder.get_object("mod_box") + self._pls_mode_box = builder.get_object("pls_mode_box") + self._pls_code_entry = builder.get_object("pls_code_entry") + self._is_id_entry = builder.get_object("is_id_entry") + + if transponder: + self.init_transponder(transponder) + + def run(self): + if self._dialog.run() == Gtk.ResponseType.CANCEL: + return + + return self.to_transponder() + + def destroy(self): + self._dialog.destroy() + + def init_transponder(self, transponder): + print(transponder) + self._freq_entry.set_text(transponder.frequency) + self._rate_entry.set_text(transponder.symbol_rate) + self._pol_box.set_active_id(transponder.polarization) + self._fec_box.set_active_id(transponder.fec_inner) + self._sys_box.set_active_id(transponder.system) + self._mod_box.set_active_id(transponder.modulation) + self._pls_mode_box.set_active_id(transponder.pls_mode) + self._is_id_entry.set_text(transponder.is_id if transponder.is_id else "") + self._pls_code_entry.set_text(transponder.pls_code if transponder.pls_code else "") + + def to_transponder(self): + return Transponder(frequency=self._freq_entry.get_text(), + symbol_rate=self._freq_entry.get_text(), + polarization=self._pol_box.get_active_id(), + fec_inner=self._fec_box.get_active_id(), + system=self._sys_box.get_active_id(), + modulation=self._mod_box.get_active_id(), + pls_mode=self._pls_mode_box.get_active_id(), + pls_code=self._pls_code_entry.get_text(), + is_id=self._is_id_entry.get_text()) + + +class SatelliteDialog: + """ Shows dialog for adding or edit satellite """ + + def __init__(self, transient, satellite: Satellite = None): + builder = Gtk.Builder() + builder.add_objects_from_file("./ui/satellites_dialog.glade", + ("satellite_dialog", "side_store", "pos_adjustment")) + + self._dialog = builder.get_object("satellite_dialog") + self._dialog.set_transient_for(transient) + self._sat_name = builder.get_object("sat_name_entry") + self._sat_position = builder.get_object("sat_position_button") + self._side = builder.get_object("side_box") + + if satellite: + self._sat_name.set_text(satellite.name[0:satellite.name.find("(")].strip()) + pos = satellite.position + pos = float("{}.{}".format(pos[:-1], pos[-1:])) + self._sat_position.set_value(fabs(pos)) + self._side.set_active(0 if pos >= 0 else 1) + + def run(self): + if self._dialog.run() == Gtk.ResponseType.CANCEL: + return + + return self.to_satellite() + + def destroy(self): + self._dialog.destroy() + + def to_satellite(self): + name = self._sat_name.get_text() + pos = self._sat_position.get_value() + side = self._side.get_active() + name = "{}({}{})".format(name, pos, self._side.get_active_id()) + pos = "{}{}{}".format("-" if side == 1 else "", *str(pos).split(".")) + + return Satellite(name=name, flags=None, position=pos, transponders=None) + + if __name__ == "__main__": pass