set transponder for services

This commit is contained in:
Dmitriy Yefremov
2018-02-25 22:59:36 +03:00
parent b17bd13fb5
commit 4288d62a53
3 changed files with 117 additions and 21 deletions

View File

@@ -101,6 +101,9 @@ FEC = {"0": "Auto", "1": "1/2", "2": "2/3", "3": "3/4", "4": "5/6", "5": "7/8",
"17": "4/5", "18": "9/10", "19": "1/2", "20": "2/3", "21": "3/4", "22": "5/6", "23": "7/8", "24": "8/9",
"25": "3/5", "26": "4/5", "27": "9/10", "28": "Auto"}
FEC_DEFAULT = {"0": "Auto", "1": "1/2", "2": "2/3", "3": "3/4", "4": "5/6", "5": "7/8", "6": "8/9", "7": "3/5",
"8": "4/5", "9": "9/10"}
SYSTEM = {"0": "DVB-S", "1": "DVB-S2"}
MODULATION = {"0": "Auto", "1": "QPSK", "2": "8PSK", "3": "16APSK", "5": "32APSK"}

View File

@@ -1470,18 +1470,26 @@
<column type="gchararray"/>
<!-- column-name package -->
<column type="gchararray"/>
<!-- column-name type -->
<column type="gchararray"/>
<!-- column-name ssid -->
<column type="gchararray"/>
<!-- column-name freq -->
<column type="gchararray"/>
<!-- column-name pos -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkDialog" id="tr_services_dialog">
<property name="can_focus">False</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="window_position">center-on-parent</property>
<property name="destroy_with_parent">True</property>
<property name="type_hint">dialog</property>
<property name="skip_taskbar_hint">True</property>
<property name="skip_pager_hint">True</property>
<property name="gravity">center</property>
<child internal-child="vbox">
<object class="GtkBox" id="tr_services_dialog_vbox">
<property name="can_focus">False</property>
@@ -1566,9 +1574,11 @@
</child>
<child>
<object class="GtkScrolledWindow" id="tr_srv_scrolled_window">
<property name="height_request">120</property>
<property name="width_request">480</property>
<property name="height_request">100</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">never</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="tr_services_list_treeview">
@@ -1576,6 +1586,7 @@
<property name="can_focus">False</property>
<property name="model">transponder_services_liststore</property>
<property name="enable_search">False</property>
<property name="enable_grid_lines">vertical</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/>
</child>
@@ -1607,6 +1618,21 @@
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="type_treeviewcolumn">
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Type</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="type_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="ssid_treeviewcolumn">
<property name="sizing">autosize</property>
@@ -1614,9 +1640,41 @@
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="ssid_cellrenderertext"/>
<object class="GtkCellRendererText" id="ssid_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
<attribute name="text">2</attribute>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="freq_treeviewcolumn">
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Freq.</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="freq_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
<attribute name="text">4</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="pos_treeviewcolumn">
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Pos.</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="pos_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
<attribute name="text">5</attribute>
</attributes>
</child>
</object>
@@ -1644,7 +1702,7 @@
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>

View File

@@ -3,8 +3,8 @@ from functools import lru_cache
from app.commons import run_idle
from app.eparser import Service, get_satellites
from app.eparser.ecommons import MODULATION, Inversion, ROLL_OFF, Pilot, Flag, Pids, SERVICE_TYPE, POLARIZATION, FEC, \
SYSTEM, get_key_by_value, get_value_by_name
from app.eparser.ecommons import MODULATION, Inversion, ROLL_OFF, Pilot, Flag, Pids, SERVICE_TYPE, POLARIZATION, \
SYSTEM, get_key_by_value, get_value_by_name, FEC_DEFAULT
from app.properties import Profile
from app.ui.dialogs import show_dialog, DialogType
from app.ui.main_helper import get_base_model
@@ -47,6 +47,7 @@ class ServiceDetailsDialog:
self._old_service = None
self._services = services
self._bouquets = bouquets
self._transponder_services_iters = None
self._current_model = None
self._pattern = re.compile("\D")
# style
@@ -96,6 +97,7 @@ class ServiceDetailsDialog:
self._rolloff_combo_box = builder.get_object("rolloff_combo_box")
self._pilot_combo_box = builder.get_object("pilot_combo_box")
self._pls_mode_combo_box = builder.get_object("pls_mode_combo_box")
self._tr_edit_switch = builder.get_object("tr_edit_switch")
self._DVB_S2_ELEMENTS = (self._mod_combo_box, self._rolloff_combo_box, self._pilot_combo_box,
self._pls_mode_combo_box, self._pls_code_entry, self._stream_id_entry)
@@ -231,7 +233,33 @@ class ServiceDetailsDialog:
def on_save(self, item):
if show_dialog(DialogType.QUESTION, self._dialog) == Gtk.ResponseType.CANCEL:
return
fav_id, data_id = self.get_srv_data()
# transponder
transponder = self._old_service.transponder
freq = self._freq_entry.get_text()
rate = self._rate_entry.get_text()
pol = self._pol_combo_box.get_active_id()
fec = self._fec_combo_box.get_active_id()
system = self._sys_combo_box.get_active_id()
pos = self._sat_pos_combo_box.get_active_id()
if self._tr_edit_switch.get_active():
transponder = self.get_transponder_data()
if self._transponder_services_iters:
for itr in self._transponder_services_iters:
srv = self._current_model[itr][:]
srv[-9] = freq
srv[-8] = rate
srv[-7] = pol
srv[-6] = fec
srv[-5] = system
srv[-4] = pos
srv[-1] = transponder
srv = Service(*srv)
self._services[srv.fav_id] = srv
self._current_model.set(itr, {i: v for i, v in enumerate(srv)})
service = Service(flags_cas=self.get_flags(),
transponder_type="s",
coded=self._old_service.coded,
@@ -243,15 +271,15 @@ class ServiceDetailsDialog:
picon=self._old_service.picon,
picon_id=self._old_service.picon_id,
ssid="{:x}".format(int(self._id_entry.get_text())),
freq=self._freq_entry.get_text(),
rate=self._rate_entry.get_text(),
pol=self._pol_combo_box.get_active_id(),
fec=self._fec_combo_box.get_active_id(),
system=self._sys_combo_box.get_active_id(),
pos=self._sat_pos_combo_box.get_active_id(),
freq=freq,
rate=rate,
pol=pol,
fec=fec,
system=system,
pos=pos,
data_id=data_id,
fav_id=fav_id,
transponder=self._old_service.transponder)
transponder=transponder)
old_fav_id = self._old_service.fav_id
if old_fav_id != fav_id:
@@ -349,7 +377,7 @@ class ServiceDetailsDialog:
freq = self._freq_entry.get_text()
rate = self._rate_entry.get_text()
pol = self.get_value_from_combobox_id(self._pol_combo_box, POLARIZATION)
fec = self.get_value_from_combobox_id(self._fec_combo_box, FEC)
fec = self.get_value_from_combobox_id(self._fec_combo_box, FEC_DEFAULT)
sat_pos = self._sat_pos_combo_box.get_active_id().replace(".", "")
inv = get_value_by_name(Inversion, self._invertion_combo_box.get_active_id())
srv_sys = get_key_by_value(SYSTEM, sys)
@@ -376,11 +404,16 @@ class ServiceDetailsDialog:
@run_idle
def on_tr_edit_toggled(self, switch: Gtk.Switch, active):
if active:
response = TransponderServicesDialog(self._dialog, self._services_view,
self._old_service.transponder).show()
self._transponder_services_iters = []
response = TransponderServicesDialog(self._dialog,
self._services_view,
self._old_service.transponder,
self._transponder_services_iters).show()
if response == Gtk.ResponseType.CANCEL or response == -4:
switch.set_active(False)
self._transponder_services_iters = None
return
for elem in self._TRANSPONDER_ELEMENTS:
@@ -388,19 +421,21 @@ class ServiceDetailsDialog:
class TransponderServicesDialog:
def __init__(self, transient, view, transponder):
def __init__(self, transient, view, transponder, tr_iters):
builder = Gtk.Builder()
builder.add_objects_from_file(UI_RESOURCES_PATH + "service_details_dialog.glade",
("tr_services_dialog", "transponder_services_liststore"))
self._dialog = builder.get_object("tr_services_dialog")
self._dialog.set_transient_for(transient)
self._srv_model = builder.get_object("transponder_services_liststore")
self.append_services(view, transponder)
self.append_services(view, transponder, tr_iters)
def append_services(self, view, transponder):
for row in view.get_model():
def append_services(self, view, transponder, tr_iters):
model = get_base_model(view.get_model())
for row in model:
if row[-1] == transponder:
self._srv_model.append((row[3], row[6], row[10]))
self._srv_model.append((row[3], row[6], row[7], row[10], row[11], row[16]))
tr_iters.append(model.get_iter(row.path))
def show(self):
response = self._dialog.run()