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 @@
+
@@ -103,6 +121,7 @@
False
True
True
+
@@ -116,6 +135,11 @@
+
-
@@ -376,6 +387,7 @@
Add
True
gtk-add
+
False
@@ -385,11 +397,11 @@
False
@@ -453,10 +465,7 @@
Freq.
True
-
+
1
@@ -469,10 +478,7 @@
Rate
True
-
+
2
@@ -485,12 +491,7 @@
Pol.
True
-
+
3
@@ -503,12 +504,7 @@
Fec.
True
-
+
4
@@ -521,12 +517,7 @@
System
True
-
+
5
@@ -539,12 +530,7 @@
Mod.
True
-
+
6
@@ -641,4 +627,622 @@
sat_ed_cancel_button
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+ 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