mirror of
https://github.com/DYefremov/DemonEditor.git
synced 2025-12-23 17:09:41 +01:00
decoupling of processing DVB data
This commit is contained in:
@@ -80,6 +80,7 @@ class TransponderDialog(DVBDialog):
|
|||||||
|
|
||||||
def __init__(self, parent, title, data=None, *args, **kwargs):
|
def __init__(self, parent, title, data=None, *args, **kwargs):
|
||||||
super().__init__(parent, title, data, *args, **kwargs)
|
super().__init__(parent, title, data, *args, **kwargs)
|
||||||
|
self.frame.set_label(get_message("Transponder properties:"))
|
||||||
# Pattern for digits entries.
|
# Pattern for digits entries.
|
||||||
self.digit_pattern = re.compile(r"\D")
|
self.digit_pattern = re.compile(r"\D")
|
||||||
# Style
|
# Style
|
||||||
@@ -135,6 +136,7 @@ class SatelliteDialog(DVBDialog):
|
|||||||
objects=("sat_dialog_box", "side_store", "pos_adjustment"))
|
objects=("sat_dialog_box", "side_store", "pos_adjustment"))
|
||||||
|
|
||||||
self.frame.add(builder.get_object("sat_dialog_box"))
|
self.frame.add(builder.get_object("sat_dialog_box"))
|
||||||
|
self.frame.set_label(get_message("Satellite properties:"))
|
||||||
self._sat_name = builder.get_object("sat_name_entry")
|
self._sat_name = builder.get_object("sat_name_entry")
|
||||||
self._sat_position = builder.get_object("sat_position_button")
|
self._sat_position = builder.get_object("sat_position_button")
|
||||||
self._side = builder.get_object("side_box")
|
self._side = builder.get_object("side_box")
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ from app.eparser.satxml import get_terrestrial, get_cable, write_terrestrial, wr
|
|||||||
from .dialogs import SatelliteDialog, SatellitesUpdateDialog, TerrestrialDialog, CableDialog, SatTransponderDialog, \
|
from .dialogs import SatelliteDialog, SatellitesUpdateDialog, TerrestrialDialog, CableDialog, SatTransponderDialog, \
|
||||||
CableTransponderDialog, TerTransponderDialog
|
CableTransponderDialog, TerTransponderDialog
|
||||||
from ..dialogs import show_dialog, DialogType, get_chooser_dialog, get_message, get_builder
|
from ..dialogs import show_dialog, DialogType, get_chooser_dialog, get_message, get_builder
|
||||||
from ..main_helper import move_items, on_popup_menu
|
from ..main_helper import move_items, on_popup_menu, scroll_to
|
||||||
from ..uicommons import Gtk, Gdk, UI_RESOURCES_PATH, MOVE_KEYS, KeyboardKey, MOD_MASK, Page
|
from ..uicommons import Gtk, Gdk, UI_RESOURCES_PATH, MOVE_KEYS, KeyboardKey, MOD_MASK, Page
|
||||||
|
|
||||||
|
|
||||||
@@ -74,15 +74,19 @@ class SatellitesTool(Gtk.Box):
|
|||||||
handlers = {"on_satellite_view_realize": self.on_satellite_view_realize,
|
handlers = {"on_satellite_view_realize": self.on_satellite_view_realize,
|
||||||
"on_terrestrial_view_realize": self.on_terrestrial_view_realize,
|
"on_terrestrial_view_realize": self.on_terrestrial_view_realize,
|
||||||
"on_cable_view_realize": self.on_cable_view_realize,
|
"on_cable_view_realize": self.on_cable_view_realize,
|
||||||
"on_remove": self.on_remove,
|
|
||||||
"on_update": self.on_update,
|
"on_update": self.on_update,
|
||||||
"on_up": self.on_up,
|
"on_up": self.on_up,
|
||||||
"on_down": self.on_down,
|
"on_down": self.on_down,
|
||||||
"on_button_press": self.on_button_press,
|
"on_button_press": self.on_button_press,
|
||||||
|
"on_tr_button_press": self.on_tr_button_press,
|
||||||
"on_add": self.on_add,
|
"on_add": self.on_add,
|
||||||
"on_transponder_add": self.on_transponder_add,
|
|
||||||
"on_edit": self.on_edit,
|
"on_edit": self.on_edit,
|
||||||
|
"on_remove": self.on_remove,
|
||||||
|
"on_transponder_add": self.on_transponder_add,
|
||||||
|
"on_transponder_edit": self.on_transponder_edit,
|
||||||
|
"on_transponder_remove": self.on_transponder_remove,
|
||||||
"on_key_press": self.on_key_press,
|
"on_key_press": self.on_key_press,
|
||||||
|
"on_tr_key_press": self.on_tr_key_press,
|
||||||
"on_visible_page": self.on_visible_page,
|
"on_visible_page": self.on_visible_page,
|
||||||
"on_satellite_selection": self.on_satellite_selection,
|
"on_satellite_selection": self.on_satellite_selection,
|
||||||
"on_terrestrial_selection": self.on_terrestrial_selection,
|
"on_terrestrial_selection": self.on_terrestrial_selection,
|
||||||
@@ -298,8 +302,14 @@ class SatellitesTool(Gtk.Box):
|
|||||||
else:
|
else:
|
||||||
on_popup_menu(menu, event)
|
on_popup_menu(menu, event)
|
||||||
|
|
||||||
|
def on_tr_button_press(self, menu, event):
|
||||||
|
if event.get_event_type() == Gdk.EventType.DOUBLE_BUTTON_PRESS:
|
||||||
|
self.on_transponder_edit()
|
||||||
|
else:
|
||||||
|
on_popup_menu(menu, event)
|
||||||
|
|
||||||
def on_key_press(self, view, event):
|
def on_key_press(self, view, event):
|
||||||
""" Handling keystrokes. """
|
""" Handling keystrokes. """
|
||||||
key_code = event.hardware_keycode
|
key_code = event.hardware_keycode
|
||||||
if not KeyboardKey.value_exist(key_code):
|
if not KeyboardKey.value_exist(key_code):
|
||||||
return
|
return
|
||||||
@@ -313,10 +323,26 @@ class SatellitesTool(Gtk.Box):
|
|||||||
self.on_edit(force=True)
|
self.on_edit(force=True)
|
||||||
elif ctrl and key is KeyboardKey.E:
|
elif ctrl and key is KeyboardKey.E:
|
||||||
self.on_edit()
|
self.on_edit()
|
||||||
elif ctrl and key is KeyboardKey.S:
|
elif ctrl and key in MOVE_KEYS:
|
||||||
self.on_satellite()
|
move_items(key, view)
|
||||||
elif ctrl and key is KeyboardKey.T:
|
elif key is KeyboardKey.LEFT or key is KeyboardKey.RIGHT:
|
||||||
self.on_transponder()
|
view.do_unselect_all(view)
|
||||||
|
|
||||||
|
def on_tr_key_press(self, view, event):
|
||||||
|
""" Handling transponder view keystrokes. """
|
||||||
|
key_code = event.hardware_keycode
|
||||||
|
if not KeyboardKey.value_exist(key_code):
|
||||||
|
return
|
||||||
|
|
||||||
|
key = KeyboardKey(key_code)
|
||||||
|
ctrl = event.state & MOD_MASK
|
||||||
|
|
||||||
|
if key is KeyboardKey.DELETE:
|
||||||
|
self.on_transponder_remove()
|
||||||
|
elif key is KeyboardKey.INSERT:
|
||||||
|
self.on_transponder_edit(force=True)
|
||||||
|
elif ctrl and key is KeyboardKey.E:
|
||||||
|
self.on_transponder_edit()
|
||||||
elif ctrl and key in MOVE_KEYS:
|
elif ctrl and key in MOVE_KEYS:
|
||||||
move_items(key, view)
|
move_items(key, view)
|
||||||
elif key is KeyboardKey.LEFT or key is KeyboardKey.RIGHT:
|
elif key is KeyboardKey.LEFT or key is KeyboardKey.RIGHT:
|
||||||
@@ -357,24 +383,26 @@ class SatellitesTool(Gtk.Box):
|
|||||||
self.on_edit(item, force=True)
|
self.on_edit(item, force=True)
|
||||||
|
|
||||||
def on_transponder_add(self, item):
|
def on_transponder_add(self, item):
|
||||||
if self._dvb_type is self.DVB.SAT:
|
self.on_transponder_edit(force=True)
|
||||||
self.on_edit(force=True)
|
|
||||||
else:
|
|
||||||
self._app.show_error_message("Not implemented yet!")
|
|
||||||
|
|
||||||
def on_edit(self, item=None, force=False):
|
def on_edit(self, item=None, force=False):
|
||||||
""" Common edit. """
|
self.on_data_edit(self.get_active_dvb_view(), force)
|
||||||
view = self.get_active_view()
|
|
||||||
if not view:
|
|
||||||
return
|
|
||||||
|
|
||||||
paths = self.check_selection(view, "Please, select only one item!")
|
def on_transponder_edit(self, item=None, force=False):
|
||||||
if not paths:
|
self.on_data_edit(self.get_active_transponder_view(), force)
|
||||||
return
|
|
||||||
|
def on_data_edit(self, view, force=False):
|
||||||
|
""" Common edit. """
|
||||||
|
if force:
|
||||||
|
model, paths = view.get_selection().get_selected_rows()
|
||||||
|
else:
|
||||||
|
paths = self.check_selection(view, "Please, select only one item!")
|
||||||
|
if not paths:
|
||||||
|
return
|
||||||
|
|
||||||
model = view.get_model()
|
model = view.get_model()
|
||||||
row = model[paths][:]
|
row = model[paths][:] if paths else None
|
||||||
itr = model.get_iter(paths)
|
itr = model.get_iter(paths) if paths else None
|
||||||
|
|
||||||
if view is self._satellite_view:
|
if view is self._satellite_view:
|
||||||
self.on_dvb_data_edit(SatelliteDialog, "Satellite", view, None if force else Satellite(*row), itr)
|
self.on_dvb_data_edit(SatelliteDialog, "Satellite", view, None if force else Satellite(*row), itr)
|
||||||
@@ -404,11 +432,12 @@ class SatellitesTool(Gtk.Box):
|
|||||||
if data and edited_itr:
|
if data and edited_itr:
|
||||||
model.set(edited_itr, {i: v for i, v in enumerate(dvb_data)})
|
model.set(edited_itr, {i: v for i, v in enumerate(dvb_data)})
|
||||||
else:
|
else:
|
||||||
if len(model):
|
if paths:
|
||||||
index = paths[0].get_indices()[0] + 1
|
index = paths[0].get_indices()[0] + 1
|
||||||
model.insert(index, dvb_data)
|
model.insert(index, dvb_data)
|
||||||
else:
|
else:
|
||||||
model.append(dvb_data)
|
model.append(dvb_data)
|
||||||
|
scroll_to(len(model) - 1, view)
|
||||||
dialog.destroy()
|
dialog.destroy()
|
||||||
|
|
||||||
def on_transponder_data_edit(self, dialog, title, view, src_view, data=None, edited_itr=None):
|
def on_transponder_data_edit(self, dialog, title, view, src_view, data=None, edited_itr=None):
|
||||||
@@ -451,36 +480,48 @@ class SatellitesTool(Gtk.Box):
|
|||||||
|
|
||||||
def on_remove(self, view=None):
|
def on_remove(self, view=None):
|
||||||
""" Removes selected satellites and transponders. """
|
""" Removes selected satellites and transponders. """
|
||||||
view = self.get_active_view()
|
view = self.get_active_dvb_view()
|
||||||
if not view:
|
|
||||||
return
|
|
||||||
|
|
||||||
selection = view.get_selection()
|
selection = view.get_selection()
|
||||||
model, paths = selection.get_selected_rows()
|
model, paths = selection.get_selected_rows()
|
||||||
|
list(map(model.remove, [model.get_iter(path) for path in paths]))
|
||||||
|
|
||||||
if view in {self._satellite_view, self._terrestrial_view, self._cable_view}:
|
def on_transponder_remove(self, item=None):
|
||||||
|
view = self.get_active_transponder_view()
|
||||||
|
trs = None
|
||||||
|
if view is self._sat_tr_view:
|
||||||
|
if self._current_sat_path:
|
||||||
|
trs = self._satellite_view.get_model()[self._current_sat_path][-1]
|
||||||
|
else:
|
||||||
|
self._app.show_error_message("No satellite is selected!")
|
||||||
|
elif view is self._ter_tr_view:
|
||||||
|
if self._current_ter_path:
|
||||||
|
trs = self._terrestrial_view.get_model()[self._current_ter_path][-1]
|
||||||
|
else:
|
||||||
|
self._app.show_error_message("No terrestrial is selected!")
|
||||||
|
elif view is self._cable_tr_view:
|
||||||
|
if self._current_cable_path:
|
||||||
|
trs = self._cable_view.get_model()[self._current_cable_path][-1]
|
||||||
|
else:
|
||||||
|
self._app.show_error_message("No cable is selected!")
|
||||||
|
|
||||||
|
if trs:
|
||||||
|
model, paths = view.get_selection().get_selected_rows()
|
||||||
|
list(map(trs.pop, sorted(map(lambda p: p.get_indices()[0], paths), reverse=True)))
|
||||||
list(map(model.remove, [model.get_iter(path) for path in paths]))
|
list(map(model.remove, [model.get_iter(path) for path in paths]))
|
||||||
else:
|
|
||||||
trs = None
|
|
||||||
if view is self._sat_tr_view:
|
|
||||||
if self._current_sat_path:
|
|
||||||
trs = self._satellite_view.get_model()[self._current_sat_path][-1]
|
|
||||||
else:
|
|
||||||
self._app.show_error_message("No satellite is selected!")
|
|
||||||
elif view is self._ter_tr_view:
|
|
||||||
if self._current_ter_path:
|
|
||||||
trs = self._terrestrial_view.get_model()[self._current_ter_path][-1]
|
|
||||||
else:
|
|
||||||
self._app.show_error_message("No terrestrial is selected!")
|
|
||||||
elif view is self._cable_tr_view:
|
|
||||||
if self._current_cable_path:
|
|
||||||
trs = self._cable_view.get_model()[self._current_cable_path][-1]
|
|
||||||
else:
|
|
||||||
self._app.show_error_message("No cable is selected!")
|
|
||||||
|
|
||||||
if trs:
|
def get_active_dvb_view(self):
|
||||||
list(map(trs.pop, sorted(map(lambda p: p.get_indices()[0], paths), reverse=True)))
|
if self._dvb_type is self.DVB.SAT:
|
||||||
list(map(model.remove, [model.get_iter(path) for path in paths]))
|
return self._satellite_view
|
||||||
|
elif self._dvb_type is self.DVB.TERRESTRIAL:
|
||||||
|
return self._terrestrial_view
|
||||||
|
return self._cable_view
|
||||||
|
|
||||||
|
def get_active_transponder_view(self):
|
||||||
|
if self._dvb_type is self.DVB.SAT:
|
||||||
|
return self._sat_tr_view
|
||||||
|
elif self._dvb_type is self.DVB.TERRESTRIAL:
|
||||||
|
return self._ter_tr_view
|
||||||
|
return self._cable_tr_view
|
||||||
|
|
||||||
@run_idle
|
@run_idle
|
||||||
def on_open(self):
|
def on_open(self):
|
||||||
@@ -539,21 +580,6 @@ class SatellitesTool(Gtk.Box):
|
|||||||
def on_update(self, item):
|
def on_update(self, item):
|
||||||
SatellitesUpdateDialog(self._app.get_active_window(), self._settings, self._satellite_view.get_model()).show()
|
SatellitesUpdateDialog(self._app.get_active_window(), self._settings, self._satellite_view.get_model()).show()
|
||||||
|
|
||||||
def get_active_view(self):
|
|
||||||
""" Returns current active view. """
|
|
||||||
if self._satellite_view.is_focus():
|
|
||||||
return self._satellite_view
|
|
||||||
elif self._terrestrial_view.is_focus():
|
|
||||||
return self._terrestrial_view
|
|
||||||
elif self._cable_view.is_focus():
|
|
||||||
return self._cable_view
|
|
||||||
elif self._sat_tr_view.is_focus():
|
|
||||||
return self._sat_tr_view
|
|
||||||
elif self._ter_tr_view.is_focus():
|
|
||||||
return self._ter_tr_view
|
|
||||||
elif self._cable_tr_view.is_focus():
|
|
||||||
return self._cable_tr_view
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ Author: Dmitriy Yefremov
|
|||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="activate" handler="on_edit" swapped="no"/>
|
<signal name="activate" handler="on_transponder_edit" swapped="no"/>
|
||||||
<accelerator key="e" signal="activate" modifiers="Primary"/>
|
<accelerator key="e" signal="activate" modifiers="Primary"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -166,7 +166,7 @@ Author: Dmitriy Yefremov
|
|||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="activate" handler="on_remove" swapped="no"/>
|
<signal name="activate" handler="on_transponder_remove" swapped="no"/>
|
||||||
<accelerator key="Delete" signal="activate"/>
|
<accelerator key="Delete" signal="activate"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@@ -760,8 +760,8 @@ Author: Dmitriy Yefremov
|
|||||||
<property name="search_column">0</property>
|
<property name="search_column">0</property>
|
||||||
<property name="rubber_banding">True</property>
|
<property name="rubber_banding">True</property>
|
||||||
<property name="enable_grid_lines">both</property>
|
<property name="enable_grid_lines">both</property>
|
||||||
<signal name="button-press-event" handler="on_button_press" object="transponder_popup_menu" swapped="no"/>
|
<signal name="button-press-event" handler="on_tr_button_press" object="transponder_popup_menu" swapped="no"/>
|
||||||
<signal name="key-press-event" handler="on_key_press" swapped="no"/>
|
<signal name="key-press-event" handler="on_tr_key_press" swapped="no"/>
|
||||||
<child internal-child="selection">
|
<child internal-child="selection">
|
||||||
<object class="GtkTreeSelection" id="sat_tr_view_selection">
|
<object class="GtkTreeSelection" id="sat_tr_view_selection">
|
||||||
<property name="mode">multiple</property>
|
<property name="mode">multiple</property>
|
||||||
@@ -997,8 +997,8 @@ Author: Dmitriy Yefremov
|
|||||||
<property name="search_column">0</property>
|
<property name="search_column">0</property>
|
||||||
<property name="rubber_banding">True</property>
|
<property name="rubber_banding">True</property>
|
||||||
<property name="enable_grid_lines">both</property>
|
<property name="enable_grid_lines">both</property>
|
||||||
<signal name="button-press-event" handler="on_button_press" object="transponder_popup_menu" swapped="no"/>
|
<signal name="button-press-event" handler="on_tr_button_press" object="transponder_popup_menu" swapped="no"/>
|
||||||
<signal name="key-press-event" handler="on_key_press" swapped="no"/>
|
<signal name="key-press-event" handler="on_tr_key_press" swapped="no"/>
|
||||||
<child internal-child="selection">
|
<child internal-child="selection">
|
||||||
<object class="GtkTreeSelection" id="ter_tr_view_selection">
|
<object class="GtkTreeSelection" id="ter_tr_view_selection">
|
||||||
<property name="mode">multiple</property>
|
<property name="mode">multiple</property>
|
||||||
@@ -1240,8 +1240,8 @@ Author: Dmitriy Yefremov
|
|||||||
<property name="search_column">0</property>
|
<property name="search_column">0</property>
|
||||||
<property name="rubber_banding">True</property>
|
<property name="rubber_banding">True</property>
|
||||||
<property name="enable_grid_lines">both</property>
|
<property name="enable_grid_lines">both</property>
|
||||||
<signal name="button-press-event" handler="on_button_press" object="transponder_popup_menu" swapped="no"/>
|
<signal name="button-press-event" handler="on_tr_button_press" object="transponder_popup_menu" swapped="no"/>
|
||||||
<signal name="key-press-event" handler="on_key_press" swapped="no"/>
|
<signal name="key-press-event" handler="on_tr_key_press" swapped="no"/>
|
||||||
<child internal-child="selection">
|
<child internal-child="selection">
|
||||||
<object class="GtkTreeSelection" id="cable_tr_view_selection">
|
<object class="GtkTreeSelection" id="cable_tr_view_selection">
|
||||||
<property name="mode">multiple</property>
|
<property name="mode">multiple</property>
|
||||||
|
|||||||
Reference in New Issue
Block a user