service dialog elements update

This commit is contained in:
Dmitriy Yefremov
2018-02-15 15:16:34 +03:00
parent 99a9f081fa
commit e8f30b667d
4 changed files with 328 additions and 41 deletions

View File

@@ -1,10 +1,10 @@
# DemonEditor
Enigma2 channel and satellites list editor for GNU/Linux.
##Enigma2 channel and satellites list editor for GNU/Linux.
Experimental support of Neutrino-MP or others on the same basis (BPanther, etc).
Focused on the convenience of working in lists from the keyboard. The mouse is also fully supported (Drag and Drop etc)
Keyboard shortcuts:
###Keyboard shortcuts:
Ctrl + X, C, V, Up, Down, PageUp, PageDown, S, T, E, L, H, Space; Insert, Delete, F2.
Insert - copies the selected channels from the main list to the bouquet or inserts (creates) a new bouquet.
Ctrl + X - only in bouquet list. Ctrl + C - only in services list.
@@ -15,18 +15,17 @@ Ctrl + L - parental lock.
Ctrl + H - hide/skip.
Left/Right - remove selection.
Multiple selections in lists only with Space key (as in file managers)!
Extra:
Ability to import IPTV into bouquet from m3u files(Enigma2 only)!
###Extra:
Multiple selections in lists only with Space key (as in file managers)!
Ability to import IPTV into bouquet (Neutrino WEBTV) from m3u files!
Tool for downloading picons from lyngsat.com.
###Minimum requirements:
Python >= 3.5.2 and GTK+ 3 with PyGObject bindings.
####Note.
To create a simple debian package, you can use the build-deb.sh
Tests only in image based on OpenPLi or last BPanther(neutrino) images with GM 990 Spark Reloaded receiver
in my preferred linux distro (Last Linux Mint 18.* - MATE 64-bit)!
#####Terrestrial and cable channels at the moment are not supported!
Minimum requirements: Python >= 3.5.2 and GTK+ 3 with PyGObject bindings.
Terrestrial and cable channels at the moment are not supported!
Note. To create a simple debian package, you can use the build-deb.sh

View File

@@ -889,8 +889,9 @@ class MainAppWindow:
self.__services,
self.__bouquets)
@run_idle
def on_services_data_edit(self, item):
dialog = ServiceDetailsDialog(self.__main_window)
dialog = ServiceDetailsDialog(self.__main_window, Profile(self.__profile), self.__services_view)
dialog.show()
@run_idle

View File

@@ -2,6 +2,142 @@
<!-- Generated with glade 3.18.3 -->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkListStore" id="fec_list_store">
<columns>
<!-- column-name fec -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">Auto</col>
</row>
<row>
<col id="0" translatable="yes">1/2</col>
</row>
<row>
<col id="0" translatable="yes">2/3</col>
</row>
<row>
<col id="0" translatable="yes">3/4</col>
</row>
<row>
<col id="0" translatable="yes">5/6</col>
</row>
<row>
<col id="0" translatable="yes">7/8</col>
</row>
<row>
<col id="0" translatable="yes">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="invertion_list_store">
<columns>
<!-- column-name invertion -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkListStore" id="mod_list_store">
<columns>
<!-- column-name mod -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">Auto</col>
</row>
<row>
<col id="0" translatable="yes">QPSK</col>
</row>
<row>
<col id="0" translatable="yes">8PSK</col>
</row>
<row>
<col id="0" translatable="yes">16APSK</col>
</row>
<row>
<col id="0" translatable="yes">32APSK</col>
</row>
</data>
</object>
<object class="GtkListStore" id="pilot_list_store">
<columns>
<!-- column-name pilot -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkListStore" id="pls_mode_list_store">
<columns>
<!-- column-name pls_mode -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">Root</col>
</row>
<row>
<col id="0" translatable="yes">Gold</col>
</row>
<row>
<col id="0" translatable="yes">Combo</col>
</row>
</data>
</object>
<object class="GtkListStore" id="pol_list_store">
<columns>
<!-- column-name pol -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">H</col>
</row>
<row>
<col id="0" translatable="yes">V</col>
</row>
<row>
<col id="0" translatable="yes">R</col>
</row>
<row>
<col id="0" translatable="yes">L</col>
</row>
</data>
</object>
<object class="GtkListStore" id="rolloff_list_store">
<columns>
<!-- column-name rolloff -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkListStore" id="sat_pos_list_store">
<columns>
<!-- column-name sat_pos -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkListStore" id="sys_list_store">
<columns>
<!-- column-name sys -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">DVB-S</col>
</row>
<row>
<col id="0" translatable="yes">DVB-S2</col>
</row>
</data>
</object>
<object class="GtkDialog" id="service_details_dialog">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Service details</property>
@@ -154,7 +290,7 @@
<object class="GtkLabel" id="label6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">ID:</property>
<property name="label" translatable="yes">SSID:</property>
<property name="xalign">1</property>
</object>
<packing>
@@ -251,6 +387,7 @@
<property name="width_chars">10</property>
<property name="max_width_chars">10</property>
<property name="xalign">0</property>
<property name="yalign">0.75</property>
</object>
<packing>
<property name="left_attach">2</property>
@@ -328,7 +465,7 @@
</packing>
</child>
<child>
<object class="GtkEntry" id="acc_entry">
<object class="GtkEntry" id="acc_pid_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="width_chars">4</property>
@@ -340,7 +477,7 @@
</packing>
</child>
<child>
<object class="GtkEntry" id="ac3+_pid_entry">
<object class="GtkEntry" id="ac3plus_pid_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="width_chars">4</property>
@@ -585,13 +722,34 @@
</packing>
</child>
<child>
<placeholder/>
<object class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<placeholder/>
<object class="GtkLabel" id="label9">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<placeholder/>
<object class="GtkLabel" id="label10">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">3</property>
<property name="top_attach">0</property>
</packing>
</child>
</object>
<packing>
@@ -730,18 +888,6 @@
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="sat_position_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="width_chars">10</property>
<property name="max_width_chars">10</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="transponder_id_entry">
<property name="visible">True</property>
@@ -854,6 +1000,13 @@
<object class="GtkComboBox" id="pol_combo_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">pol_list_store</property>
<child>
<object class="GtkCellRendererText" id="pol_cellrenderertext"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="left_attach">1</property>
@@ -864,6 +1017,13 @@
<object class="GtkComboBox" id="fec_combo_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">fec_list_store</property>
<child>
<object class="GtkCellRendererText" id="fec_cellrenderertext"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="left_attach">1</property>
@@ -874,6 +1034,13 @@
<object class="GtkComboBox" id="sys_combo_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">sys_list_store</property>
<child>
<object class="GtkCellRendererText" id="sys_cellrenderertext"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="left_attach">1</property>
@@ -896,7 +1063,7 @@
<object class="GtkEntry" id="flags_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="width_chars">10</property>
<property name="width_chars">5</property>
<property name="max_width_chars">10</property>
</object>
<packing>
@@ -920,7 +1087,7 @@
<object class="GtkEntry" id="stream_id_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="width_chars">10</property>
<property name="width_chars">5</property>
<property name="max_width_chars">10</property>
</object>
<packing>
@@ -932,7 +1099,7 @@
<object class="GtkLabel" id="label27">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">PLS mode:</property>
<property name="label" translatable="yes">PLS code:</property>
<property name="xalign">1</property>
</object>
<packing>
@@ -941,10 +1108,10 @@
</packing>
</child>
<child>
<object class="GtkEntry" id="pls_mode_entry">
<object class="GtkEntry" id="pls_code_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="width_chars">10</property>
<property name="width_chars">5</property>
<property name="max_width_chars">10</property>
</object>
<packing>
@@ -956,7 +1123,7 @@
<object class="GtkLabel" id="label26">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">PLS code:</property>
<property name="label" translatable="yes">PLS mode:</property>
<property name="xalign">1</property>
</object>
<packing>
@@ -980,6 +1147,13 @@
<object class="GtkComboBox" id="pilot_combo_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">pilot_list_store</property>
<child>
<object class="GtkCellRendererText" id="pilot_cellrenderertext"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="left_attach">3</property>
@@ -1002,6 +1176,13 @@
<object class="GtkComboBox" id="rolloff_combo_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">rolloff_list_store</property>
<child>
<object class="GtkCellRendererText" id="rolloff_cellrenderertext"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="left_attach">3</property>
@@ -1024,6 +1205,13 @@
<object class="GtkComboBox" id="invertion_combo_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">invertion_list_store</property>
<child>
<object class="GtkCellRendererText" id="inv_cellrenderertext"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="left_attach">3</property>
@@ -1046,6 +1234,13 @@
<object class="GtkComboBox" id="mod_combo_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">mod_list_store</property>
<child>
<object class="GtkCellRendererText" id="mod_cellrenderertext"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="left_attach">3</property>
@@ -1053,11 +1248,33 @@
</packing>
</child>
<child>
<object class="GtkEntry" id="pls_code_entry">
<object class="GtkComboBox" id="sat_pos_combo_box">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="width_chars">10</property>
<property name="max_width_chars">10</property>
<property name="can_focus">False</property>
<property name="model">sat_pos_list_store</property>
<child>
<object class="GtkCellRendererText" id="sat_pos_cellrenderertext"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="pls_mode_combo_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">pls_mode_list_store</property>
<child>
<object class="GtkCellRendererText" id="pls_mode_cellrenderertext"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="left_attach">3</property>

View File

@@ -1,13 +1,83 @@
from app.commons import run_idle
from app.eparser import Service
from app.ui.main_helper import get_base_model, is_only_one_item_selected
from . import Gtk, UI_RESOURCES_PATH
class ServiceDetailsDialog:
def __init__(self, transient):
def __init__(self, transient, options, view):
builder = Gtk.Builder()
builder.add_from_file(UI_RESOURCES_PATH + "service_details_dialog.glade")
self._dialog = builder.get_object("service_details_dialog")
self._dialog.set_transient_for(transient)
self._options = options
self._services_view = view
# Service elements
self._name_entry = builder.get_object("name_entry")
self._package_entry = builder.get_object("package_entry")
self._id_entry = builder.get_object("id_entry")
self._type_entry = builder.get_object("type_entry")
self._extra_entry = builder.get_object("extra_entry")
self._bitstream_entry = builder.get_object("bitstream_entry")
self._pcm_entry = builder.get_object("pcm_entry")
self._reference_entry = builder.get_object("reference_entry")
self._video_pid_entry = builder.get_object("video_pid_entry")
self._pcr_pid_entry = builder.get_object("pcr_pid_entry")
self._mpeg_pid_entry = builder.get_object("mpeg_pid_entry")
self._ac3_pid_entry = builder.get_object("ac3_pid_entry")
self._ac3plus_pid_entry = builder.get_object("ac3plus_pid_entry")
self._acc_pid_entry = builder.get_object("acc_pid_entry")
self._he_acc_pid_entry = builder.get_object("he_acc_pid_entry")
self._teletext_pid_entry = builder.get_object("teletext_pid_entry")
self._keep_check_button = builder.get_object("keep_check_button")
self._hide_check_button = builder.get_object("hide_check_button")
self._use_pids_check_button = builder.get_object("use_pids_check_button")
self._new_check_button = builder.get_object("new_check_button")
# Transponder elements
self._sat_pos_combo_box = builder.get_object("sat_pos_combo_box")
self._transponder_id_entry = builder.get_object("transponder_id_entry")
self._network_id_entry = builder.get_object("network_id_entry")
self._freq_entry = builder.get_object("freq_entry")
self._rate_entry = builder.get_object("rate_entry")
self._pol_combo_box = builder.get_object("pol_combo_box")
self._fec_combo_box = builder.get_object("fec_combo_box")
self._sys_combo_box = builder.get_object("sys_combo_box")
self._mod_combo_box = builder.get_object("mod_combo_box")
self._invertion_combo_box = builder.get_object("invertion_combo_box")
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._pls_code_entry = builder.get_object("pls_code_entry")
self._stream_id_entry = builder.get_object("stream_id_entry")
self._flags_entry = builder.get_object("flags_entry")
self._namespace_entry = builder.get_object("namespace_entry")
self.update_data_elements()
@run_idle
def update_data_elements(self):
model, paths = self._services_view.get_selection().get_selected_rows()
model = get_base_model(model)
if is_only_one_item_selected(paths, self._dialog):
srv = Service(*model[paths][:])
self._name_entry.set_text(srv.service)
self._package_entry.set_text(srv.package)
self._type_entry.set_text("")
self._id_entry.set_text(str(int(srv.ssid, 16)))
self._reference_entry.set_text(srv.picon_id.replace("_", ":").rstrip(".png"))
# transponder
self._freq_entry.set_text(srv.freq)
self._rate_entry.set_text(srv.rate)
self.select_active_text(self._pol_combo_box, srv.pol)
self.select_active_text(self._fec_combo_box, srv.fec)
self.select_active_text(self._sys_combo_box, srv.system)
def select_active_text(self, box: Gtk.ComboBox, text):
model = box.get_model()
for index, row in enumerate(model):
if row[0] == text:
box.set_active(index)
break
def show(self):
response = self._dialog.run()