mirror of
https://github.com/DYefremov/DemonEditor.git
synced 2026-01-27 09:50:11 +01:00
skeleton for transponders editing
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -98,11 +98,6 @@
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkImage" id="image1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-edit</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
@@ -655,7 +650,7 @@
|
||||
<object class="GtkToolButton" id="tools_button">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Satellites edit tool</property>
|
||||
<property name="tooltip_text" translatable="yes">Satellites editor</property>
|
||||
<property name="label" translatable="yes">Tools</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="icon_name">applications-utilities</property>
|
||||
|
||||
@@ -2,6 +2,87 @@
|
||||
<!-- Generated with glade 3.18.3 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.12"/>
|
||||
<object class="GtkListStore" id="fec_store">
|
||||
<columns>
|
||||
<!-- column-name fec -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0">1/2</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">2/3</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">3/4</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">5/6</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">6/7</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">7/8</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">8/9</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">3/5</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">4/5</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">9/10</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="mod_store">
|
||||
<columns>
|
||||
<!-- column-name mod -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0">Auto</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">QPSK</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">8PSK</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">16APSK</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">32APSK</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkListStore" id="pol_store">
|
||||
<columns>
|
||||
<!-- column-name pol -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0">H</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">V</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">R</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">L</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkMenu" id="popup_menu">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
@@ -63,6 +144,20 @@
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkListStore" id="system_store">
|
||||
<columns>
|
||||
<!-- column-name system -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0">DVB-S</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">DVB-S2</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkDialog" id="satellites_editor_dialog">
|
||||
<property name="width_request">640</property>
|
||||
<property name="can_focus">False</property>
|
||||
@@ -290,6 +385,7 @@
|
||||
<child>
|
||||
<object class="GtkToolButton" id="edit_tool_button">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Edit</property>
|
||||
<property name="use_underline">True</property>
|
||||
@@ -340,6 +436,7 @@
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="satellite_column">
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Satellite</property>
|
||||
<property name="expand">True</property>
|
||||
<child>
|
||||
@@ -352,11 +449,13 @@
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="freq_column">
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Freq.</property>
|
||||
<property name="expand">True</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="frequency_cellrenderertext">
|
||||
<property name="editable">True</property>
|
||||
<signal name="edited" handler="on_edited" object="satellites_editor_tree_view" swapped="no"/>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">1</attribute>
|
||||
@@ -365,12 +464,14 @@
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="rate_column1">
|
||||
<object class="GtkTreeViewColumn" id="rate_column">
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Rate</property>
|
||||
<property name="expand">True</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="sat_rate_cellrenderertext">
|
||||
<property name="editable">True</property>
|
||||
<signal name="edited" handler="on_edited" object="satellites_editor_tree_view" swapped="no"/>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">2</attribute>
|
||||
@@ -380,10 +481,16 @@
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="pol_column">
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Pol.</property>
|
||||
<property name="expand">True</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="sat_pol_cellrenderertext"/>
|
||||
<object class="GtkCellRendererCombo" id="sat_pol_cellrenderertext">
|
||||
<property name="editable">True</property>
|
||||
<property name="model">pol_store</property>
|
||||
<property name="text_column">0</property>
|
||||
<signal name="changed" handler="on_edited" object="satellites_editor_tree_view" swapped="no"/>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">3</attribute>
|
||||
</attributes>
|
||||
@@ -392,10 +499,16 @@
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="fec_column">
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Fec.</property>
|
||||
<property name="expand">True</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="set_fec_cellrenderertext"/>
|
||||
<object class="GtkCellRendererCombo" id="set_fec_cellrenderertext">
|
||||
<property name="editable">True</property>
|
||||
<property name="model">fec_store</property>
|
||||
<property name="text_column">0</property>
|
||||
<signal name="changed" handler="on_edited" object="satellites_editor_tree_view" swapped="no"/>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">4</attribute>
|
||||
</attributes>
|
||||
@@ -404,10 +517,16 @@
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="sys_column">
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">System</property>
|
||||
<property name="expand">True</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="sys_cellrenderertext"/>
|
||||
<object class="GtkCellRendererCombo" id="sys_cellrenderertext">
|
||||
<property name="editable">True</property>
|
||||
<property name="model">system_store</property>
|
||||
<property name="text_column">0</property>
|
||||
<signal name="changed" handler="on_edited" object="satellites_editor_tree_view" swapped="no"/>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">5</attribute>
|
||||
</attributes>
|
||||
@@ -416,10 +535,16 @@
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="mod_column">
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Mod.</property>
|
||||
<property name="expand">True</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="mod_cellrenderertext"/>
|
||||
<object class="GtkCellRendererCombo" id="mod_cellrenderertext">
|
||||
<property name="editable">True</property>
|
||||
<property name="model">mod_store</property>
|
||||
<property name="text_column">0</property>
|
||||
<signal name="changed" handler="on_edited" object="satellites_editor_tree_view" swapped="no"/>
|
||||
</object>
|
||||
<attributes>
|
||||
<attribute name="text">6</attribute>
|
||||
</attributes>
|
||||
@@ -429,6 +554,7 @@
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="pls_mode_column">
|
||||
<property name="visible">False</property>
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Pls mode</property>
|
||||
<property name="expand">True</property>
|
||||
<child>
|
||||
@@ -442,6 +568,7 @@
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="pls_code_column">
|
||||
<property name="visible">False</property>
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Pls code</property>
|
||||
<property name="expand">True</property>
|
||||
<child>
|
||||
@@ -469,6 +596,7 @@
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="flags_column">
|
||||
<property name="visible">False</property>
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Flags</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="flags_cellrenderertext"/>
|
||||
@@ -481,6 +609,7 @@
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="pos_column">
|
||||
<property name="visible">False</property>
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Pos:</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="pos_cellrenderertext"/>
|
||||
|
||||
@@ -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__":
|
||||
|
||||
Reference in New Issue
Block a user