diff --git a/app/eparser/satxml.py b/app/eparser/satxml.py
index c5b7cc22..5bdfe207 100644
--- a/app/eparser/satxml.py
+++ b/app/eparser/satxml.py
@@ -33,9 +33,7 @@
from xml.dom.minidom import Document
import xml.etree.ElementTree as ETree
-from .ecommons import (POLARIZATION, FEC, SYSTEM, MODULATION, Transponder, Satellite, get_key_by_value,
- Terrestrial, Cable, TerTransponder, CableTransponder, T_SYSTEM, BANDWIDTH, GUARD_INTERVAL,
- TRANSMISSION_MODE, T_FEC, HIERARCHY, C_MODULATION, FEC_DEFAULT, Inversion, CONSTELLATION)
+from .ecommons import Satellite, Terrestrial, Cable, Transponder, TerTransponder, CableTransponder
_SAT_COMMENT = (" File was created in DemonEditor\n\n"
"usable flags are\n"
@@ -71,10 +69,10 @@ def get_sat_transponders(elem):
""" Returns satellite transponders list. """
return [Transponder(e.get("frequency", "0"),
e.get("symbol_rate", "0"),
- POLARIZATION[e.get("polarization", "0")],
- FEC[e.get("fec_inner", "0")],
- SYSTEM[e.get("system", "0")],
- MODULATION[e.get("modulation", "0")],
+ e.get("polarization", None),
+ e.get("fec_inner", None),
+ e.get("system", None),
+ e.get("modulation", None),
e.get("pls_mode", None),
e.get("pls_code", None),
e.get("is_id", None),
@@ -93,15 +91,15 @@ def get_terrestrial(path):
def get_ter_transponder(elem):
""" Returns terrestrial transponder. """
return TerTransponder(elem.get("centre_frequency", "0"),
- T_SYSTEM.get(elem.get("system", None), None),
- BANDWIDTH.get(elem.get("bandwidth", None), None),
- CONSTELLATION.get(elem.get("constellation", None), None),
- T_FEC.get(elem.get("code_rate_hp", None), None),
- T_FEC.get(elem.get("code_rate_lp", None), None),
- GUARD_INTERVAL.get(elem.get("guard_interval", None), None),
- TRANSMISSION_MODE.get(elem.get("transmission_mode", None), None),
- HIERARCHY.get(elem.get("hierarchy_information", None), None),
- Inversion(elem.get("inversion")).name if "inversion" in elem.keys() else None,
+ elem.get("system", None),
+ elem.get("bandwidth", None),
+ elem.get("constellation", None),
+ elem.get("code_rate_hp", None),
+ elem.get("code_rate_lp", None),
+ elem.get("guard_interval", None),
+ elem.get("transmission_mode", None),
+ elem.get("hierarchy_information", None),
+ elem.get("inversion", None),
elem.get("plp_id", None))
@@ -118,8 +116,8 @@ def get_cable_transponders(elem):
""" Returns cable transponders list. """
return [CableTransponder(e.get("frequency", "0"),
e.get("symbol_rate", "0"),
- FEC_DEFAULT[e.get("fec_inner", "0")],
- C_MODULATION[e.get("modulation", "0")]) for e in elem.iter("transponder")]
+ e.get("fec_inner", None),
+ e.get("modulation", None)) for e in elem.iter("transponder")]
def write_satellites(satellites, data_path):
@@ -141,10 +139,10 @@ def write_satellites(satellites, data_path):
transponder_child = doc.createElement("transponder")
transponder_child.setAttribute("frequency", tr.frequency)
transponder_child.setAttribute("symbol_rate", tr.symbol_rate)
- transponder_child.setAttribute("polarization", get_key_by_value(POLARIZATION, tr.polarization))
- transponder_child.setAttribute("fec_inner", get_key_by_value(FEC, tr.fec_inner) or "0")
- transponder_child.setAttribute("system", get_key_by_value(SYSTEM, tr.system) or "0")
- transponder_child.setAttribute("modulation", get_key_by_value(MODULATION, tr.modulation) or "0")
+ transponder_child.setAttribute("polarization", tr.polarization)
+ transponder_child.setAttribute("fec_inner", tr.fec_inner or "0")
+ transponder_child.setAttribute("system", tr.system or "0")
+ transponder_child.setAttribute("modulation", tr.modulation or "0")
if tr.pls_mode:
transponder_child.setAttribute("pls_mode", tr.pls_mode)
if tr.pls_code:
diff --git a/app/ui/xml/dialogs.py b/app/ui/xml/dialogs.py
index d352afad..e8bdef45 100644
--- a/app/ui/xml/dialogs.py
+++ b/app/ui/xml/dialogs.py
@@ -36,7 +36,7 @@ from gi.repository import GLib
from app.commons import run_idle, run_task, log
from app.eparser import Satellite, Transponder
-from app.eparser.ecommons import PLS_MODE, get_key_by_value
+from app.eparser.ecommons import PLS_MODE, get_key_by_value, POLARIZATION, FEC, SYSTEM, MODULATION
from app.tools.satellites import SatellitesParser, SatelliteSource, ServicesParser
from ..dialogs import show_dialog, DialogType, get_chooser_dialog, get_message, get_builder
from ..main_helper import append_text_to_tview, get_base_model, on_popup_menu
@@ -92,10 +92,10 @@ class TransponderDialog:
def init_transponder(self, 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._pol_box.set_active_id(POLARIZATION.get(transponder.polarization, None))
+ self._fec_box.set_active_id(FEC.get(transponder.fec_inner, None))
+ self._sys_box.set_active_id(SYSTEM.get(transponder.system, None))
+ self._mod_box.set_active_id(MODULATION.get(transponder.modulation, None))
self._pls_mode_box.set_active_id(PLS_MODE.get(transponder.pls_mode, None))
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 "")
@@ -104,10 +104,10 @@ class TransponderDialog:
def to_transponder(self):
return Transponder(frequency=self._freq_entry.get_text(),
symbol_rate=self._rate_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(),
+ polarization=get_key_by_value(POLARIZATION, self._pol_box.get_active_id()),
+ fec_inner=get_key_by_value(FEC, self._fec_box.get_active_id()),
+ system=get_key_by_value(SYSTEM, self._sys_box.get_active_id()),
+ modulation=get_key_by_value(MODULATION, self._mod_box.get_active_id()),
pls_mode=get_key_by_value(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(),
diff --git a/app/ui/xml/edit.py b/app/ui/xml/edit.py
index bd409b8e..b62c86c0 100644
--- a/app/ui/xml/edit.py
+++ b/app/ui/xml/edit.py
@@ -34,6 +34,8 @@ from gi.repository import GLib
from app.commons import run_idle
from app.connections import DownloadType
from app.eparser import get_satellites, write_satellites, Satellite, Transponder
+from app.eparser.ecommons import (POLARIZATION, FEC, SYSTEM, MODULATION, T_SYSTEM, BANDWIDTH, CONSTELLATION, T_FEC,
+ GUARD_INTERVAL, TRANSMISSION_MODE, HIERARCHY, Inversion, FEC_DEFAULT, C_MODULATION)
from app.eparser.satxml import get_terrestrial, get_cable
from .dialogs import SatelliteDialog, TransponderDialog, SatellitesUpdateDialog
from ..dialogs import show_dialog, DialogType, get_chooser_dialog, get_message, get_builder
@@ -43,7 +45,6 @@ from ..uicommons import Gtk, Gdk, UI_RESOURCES_PATH, MOVE_KEYS, KeyboardKey, MOD
class SatellitesTool(Gtk.Box):
""" Class to processing *.xml data. """
- _aggr = [None for x in range(9)] # aggregate
class DVB(str, Enum):
SAT = "satellites"
@@ -79,7 +80,7 @@ class SatellitesTool(Gtk.Box):
"on_add": self.on_add,
"on_transponder_add": self.on_transponder_add,
"on_edit": self.on_edit,
- "on_key_release": self.on_key_release,
+ "on_key_press": self.on_key_press,
"on_visible_page": self.on_visible_page,
"on_satellite_selection": self.on_satellite_selection,
"on_terrestrial_selection": self.on_terrestrial_selection,
@@ -97,28 +98,122 @@ class SatellitesTool(Gtk.Box):
self._add_header_button = builder.get_object("add_header_button")
self._update_header_button = builder.get_object("update_header_button")
self.pack_start(builder.get_object("main_paned"), True, True, 0)
- self._app.connect("profile-changed", lambda a, m: self.load_satellites_list())
- # Custom renderer
- sat_pos_renderer = builder.get_object("sat_pos_renderer")
- builder.get_object("sat_pos_column").set_cell_data_func(sat_pos_renderer, self.sat_pos_func)
+ self._app.connect("profile-changed", self.on_profile_changed)
+ # Custom renderers.
+ renderer = builder.get_object("sat_pos_renderer")
+ builder.get_object("sat_pos_column").set_cell_data_func(renderer, self.sat_pos_func)
+ # Satellite.
+ renderer = builder.get_object("sat_pol_renderer")
+ builder.get_object("pol_column").set_cell_data_func(renderer, self.sat_pol_func)
+ renderer = builder.get_object("sat_fec_renderer")
+ builder.get_object("fec_column").set_cell_data_func(renderer, self.sat_fec_func)
+ renderer = builder.get_object("sat_sys_renderer")
+ builder.get_object("sys_column").set_cell_data_func(renderer, self.sat_sys_func)
+ renderer = builder.get_object("sat_mod_renderer")
+ builder.get_object("mod_column").set_cell_data_func(renderer, self.sat_mod_func)
+ # Terrestrial.
+ renderer = builder.get_object("ter_system_renderer")
+ builder.get_object("ter_system_column").set_cell_data_func(renderer, self.ter_sys_func)
+ renderer = builder.get_object("ter_bandwidth_renderer")
+ builder.get_object("ter_bandwidth_column").set_cell_data_func(renderer, self.ter_bandwidth_func)
+ renderer = builder.get_object("ter_constellation_renderer")
+ builder.get_object("ter_constellation_column").set_cell_data_func(renderer, self.ter_constellation_func)
+ renderer = builder.get_object("ter_rate_hp_renderer")
+ builder.get_object("ter_rate_hp_column").set_cell_data_func(renderer, self.ter_fec_hp_func)
+ renderer = builder.get_object("ter_rate_lp_renderer")
+ builder.get_object("ter_rate_lp_column").set_cell_data_func(renderer, self.ter_fec_lp_func)
+ renderer = builder.get_object("ter_guard_renderer")
+ builder.get_object("ter_guard_column").set_cell_data_func(renderer, self.ter_guard_func)
+ renderer = builder.get_object("ter_tr_mode_renderer")
+ builder.get_object("ter_tr_mode_column").set_cell_data_func(renderer, self.ter_transmission_func)
+ renderer = builder.get_object("ter_hierarchy_renderer")
+ builder.get_object("ter_hierarchy_column").set_cell_data_func(renderer, self.ter_hierarchy_func)
+ renderer = builder.get_object("ter_inversion_renderer")
+ builder.get_object("ter_inversion_column").set_cell_data_func(renderer, self.ter_inversion_func)
+ # Cable.
+ renderer = builder.get_object("cable_fec_renderer")
+ builder.get_object("cable_fec_column").set_cell_data_func(renderer, self.cable_fec_func)
+ renderer = builder.get_object("cable_mod_renderer")
+ builder.get_object("cable_mod_column").set_cell_data_func(renderer, self.cable_mod_func)
self.show()
+ # ******************** Custom renderers ******************** #
+
+ def sat_pos_func(self, column, renderer, model, itr, data):
+ """ Converts and sets the satellite position value to a readable format. """
+ pos = int(model.get_value(itr, 2))
+ renderer.set_property("text", f"{abs(pos / 10):0.1f}{'W' if pos < 0 else 'E'}")
+
+ def sat_pol_func(self, column, renderer, model, itr, data):
+ renderer.set_property("text", POLARIZATION.get(model.get_value(itr, 2), None))
+
+ def sat_fec_func(self, column, renderer, model, itr, data):
+ renderer.set_property("text", FEC.get(model.get_value(itr, 3), None))
+
+ def sat_sys_func(self, column, renderer, model, itr, data):
+ renderer.set_property("text", SYSTEM.get(model.get_value(itr, 4), None))
+
+ def sat_mod_func(self, column, renderer, model, itr, data):
+ renderer.set_property("text", MODULATION.get(model.get_value(itr, 5), None))
+
+ def ter_sys_func(self, column, renderer, model, itr, data):
+ renderer.set_property("text", T_SYSTEM.get(model.get_value(itr, 1), None))
+
+ def ter_bandwidth_func(self, column, renderer, model, itr, data):
+ renderer.set_property("text", BANDWIDTH.get(model.get_value(itr, 2), None))
+
+ def ter_constellation_func(self, column, renderer, model, itr, data):
+ renderer.set_property("text", CONSTELLATION.get(model.get_value(itr, 3), None))
+
+ def ter_fec_hp_func(self, column, renderer, model, itr, data):
+ renderer.set_property("text", T_FEC.get(model.get_value(itr, 4), None))
+
+ def ter_fec_lp_func(self, column, renderer, model, itr, data):
+ renderer.set_property("text", T_FEC.get(model.get_value(itr, 5), None))
+
+ def ter_guard_func(self, column, renderer, model, itr, data):
+ renderer.set_property("text", GUARD_INTERVAL.get(model.get_value(itr, 6), None))
+
+ def ter_transmission_func(self, column, renderer, model, itr, data):
+ renderer.set_property("text", TRANSMISSION_MODE.get(model.get_value(itr, 7), None))
+
+ def ter_hierarchy_func(self, column, renderer, model, itr, data):
+ renderer.set_property("text", HIERARCHY.get(model.get_value(itr, 8), None))
+
+ def ter_inversion_func(self, column, renderer, model, itr, data):
+ value = model.get_value(itr, 9)
+ if value:
+ value = Inversion(value).name
+ renderer.set_property("text", value)
+
+ def cable_fec_func(self, column, renderer, model, itr, data):
+ renderer.set_property("text", FEC_DEFAULT.get(model.get_value(itr, 2), None))
+
+ def cable_mod_func(self, column, renderer, model, itr, data):
+ renderer.set_property("text", C_MODULATION.get(model.get_value(itr, 3), None))
+
def on_satellite_view_realize(self, view):
self.load_satellites_list()
def on_terrestrial_view_realize(self, view):
- gen = self.on_terrestrial_list_load()
- GLib.idle_add(lambda: next(gen, False), priority=GLib.PRIORITY_LOW)
+ self.load_terrestrial_list()
def on_cable_view_realize(self, view):
- gen = self.on_cable_list_load()
- GLib.idle_add(lambda: next(gen, False), priority=GLib.PRIORITY_LOW)
+ self.load_cable_list()
def load_satellites_list(self, path=None):
gen = self.on_satellites_list_load(path)
GLib.idle_add(lambda: next(gen, False), priority=GLib.PRIORITY_LOW)
+ def load_terrestrial_list(self, path=None):
+ gen = self.on_terrestrial_list_load(path)
+ GLib.idle_add(lambda: next(gen, False), priority=GLib.PRIORITY_LOW)
+
+ def load_cable_list(self, path=None):
+ gen = self.on_cable_list_load(path)
+ GLib.idle_add(lambda: next(gen, False), priority=GLib.PRIORITY_LOW)
+
def on_visible_page(self, stack, param):
self._dvb_type = self.DVB(stack.get_visible_child_name())
self._transponders_stack.set_visible_child_name(self._dvb_type)
@@ -136,7 +231,8 @@ class SatellitesTool(Gtk.Box):
self._current_sat_path, column = view.get_cursor()
if self._current_sat_path:
- list(map(model.append, view.get_model()[self._current_sat_path][-1]))
+ sat_model = view.get_model()
+ list(map(model.append, sat_model[self._current_sat_path][-1]))
def on_terrestrial_selection(self, view):
model = self._ter_tr_view.get_model()
@@ -144,7 +240,8 @@ class SatellitesTool(Gtk.Box):
self._current_ter_path, column = view.get_cursor()
if self._current_ter_path:
- list(map(model.append, view.get_model()[self._current_ter_path][-1]))
+ ter_model = view.get_model()
+ list(map(model.append, ter_model[self._current_ter_path][-1]))
def on_cable_selection(self, view):
model = self._cable_tr_view.get_model()
@@ -152,7 +249,8 @@ class SatellitesTool(Gtk.Box):
self._current_cable_path, column = view.get_cursor()
if self._current_cable_path:
- list(map(model.append, view.get_model()[self._current_cable_path][-1]))
+ cable_model = view.get_model()
+ list(map(model.append, cable_model[self._current_cable_path][-1]))
def on_up(self, item):
move_items(KeyboardKey.UP, self._satellite_view)
@@ -167,7 +265,7 @@ class SatellitesTool(Gtk.Box):
else:
on_popup_menu(menu, event)
- def on_key_release(self, view, event):
+ def on_key_press(self, view, event):
""" Handling keystrokes """
key_code = event.hardware_keycode
if not KeyboardKey.value_exist(key_code):
@@ -192,15 +290,15 @@ class SatellitesTool(Gtk.Box):
def on_satellites_list_load(self, path=None):
""" Load satellites data into model """
- path = path or self._settings.profile_data_path + "satellites.xml"
+ path = path or f"{self._settings.profile_data_path}satellites.xml"
yield from self.load_data(self._satellite_view, get_satellites, path)
def on_terrestrial_list_load(self, path=None):
- path = path or self._settings.profile_data_path + "terrestrial.xml"
+ path = path or f"{self._settings.profile_data_path}terrestrial.xml"
yield from self.load_data(self._terrestrial_view, get_terrestrial, path)
def on_cable_list_load(self, path=None):
- path = path or self._settings.profile_data_path + "cables.xml"
+ path = path or f"{self._settings.profile_data_path}cables.xml"
yield from self.load_data(self._cable_view, get_cable, path)
def load_data(self, view, func, path):
@@ -227,9 +325,6 @@ class SatellitesTool(Gtk.Box):
else:
self._app.show_error_message("Not implemented yet!")
- def on_satellite_add(self, item):
- self.on_satellite()
-
def on_transponder_add(self, item):
if self._dvb_type is self.DVB.SAT:
self.on_transponder()
@@ -328,22 +423,34 @@ class SatellitesTool(Gtk.Box):
else:
self._app.show_error_message("Not implemented yet!")
- def sat_pos_func(self, column, renderer, model, itr, data):
- """ Converts and sets the satellite position value to a readable format. """
- pos = int(model.get_value(itr, 2))
- renderer.set_property("text", f"{abs(pos / 10):0.1f}{'W' if pos < 0 else 'E'}")
-
@run_idle
def on_open(self):
- response = get_chooser_dialog(self._app.app_window, self._settings, "satellites.xml", ("*.xml",))
+ xml_file = "satellites.xml"
+ if self._dvb_type is self.DVB.TERRESTRIAL:
+ xml_file = "terrestrial.xml"
+ elif self._dvb_type is self.DVB.CABLE:
+ xml_file = "cables.xml"
+
+ response = get_chooser_dialog(self._app.app_window, self._settings, xml_file, ("*.xml",))
if response in (Gtk.ResponseType.CANCEL, Gtk.ResponseType.DELETE_EVENT):
return
- if not str(response).endswith("satellites.xml"):
- self._app.show_error_message("No satellites.xml file is selected!")
+ if not str(response).endswith(xml_file):
+ self._app.show_error_message(f"No {xml_file} file is selected!")
return
- self.load_satellites_list(response)
+ if self._dvb_type is self.DVB.SAT:
+ self.load_satellites_list(response)
+ elif self._dvb_type is self.DVB.TERRESTRIAL:
+ self.load_terrestrial_list(response)
+ else:
+ self.load_cable_list(response)
+
+ @run_idle
+ def on_profile_changed(self, app, profile):
+ self.load_satellites_list()
+ self.load_terrestrial_list()
+ self.load_cable_list()
@run_idle
def on_save(self, app, page):
diff --git a/app/ui/xml/editor.glade b/app/ui/xml/editor.glade
index 4e7e9dd0..a3d91b81 100644
--- a/app/ui/xml/editor.glade
+++ b/app/ui/xml/editor.glade
@@ -354,7 +354,7 @@ Author: Dmitriy Yefremov
True
-
+