From f3a6d2bd9c96a12f82af614cdd85e5d600d653e8 Mon Sep 17 00:00:00 2001 From: DYefremov Date: Mon, 1 Aug 2022 18:19:15 +0300 Subject: [PATCH] transponder dialog refactoring --- app/ui/xml/dialogs.glade | 896 ++++++++++++++++++--------------------- app/ui/xml/dialogs.py | 52 ++- app/ui/xml/edit.py | 48 +-- 3 files changed, 460 insertions(+), 536 deletions(-) diff --git a/app/ui/xml/dialogs.glade b/app/ui/xml/dialogs.glade index 683113f8..587f6fdd 100644 --- a/app/ui/xml/dialogs.glade +++ b/app/ui/xml/dialogs.glade @@ -1,5 +1,5 @@ - @@ -271,406 +252,337 @@ Author: Dmitriy Yefremov - - {use_header} - 320 + + True False - Transponder - False - True - center-on-parent - 320 - True - dialog - True - True - - - Cancel + 5 + 5 + 5 + vertical + 2 + + True - True - True - center - - - - - OK - True - True - True - center - - - - False - vertical - 2 + 5 - + True False - 5 - 5 - 5 - 5 - 0.02 - in + Freq + + + 0 + 0 + + + + + True + False + Rate + + + 1 + 0 + + + + + True + False + Pol + + + 2 + 0 + + + + + True + False + FEC + + + 3 + 0 + + + + + True + False + System + + + 4 + 0 + + + + + True + False + Mod + + + 5 + 0 + + + + + True + True + 12 + 14 + document-edit-symbolic + False + False + False + 11700000 + digits + + + + 0 + 1 + + + + + True + True + 12 + 14 + document-edit-symbolic + 27500000 + digits + + + + 1 + 1 + + + + + True + False + pol_store + 0 - - True - False - 5 - 5 - 5 - vertical - 2 - - - True - False - 5 - - - True - False - Freq - - - 0 - 0 - - - - - True - False - Rate - - - 1 - 0 - - - - - True - False - Pol - - - 2 - 0 - - - - - True - False - FEC - - - 3 - 0 - - - - - True - False - System - - - 4 - 0 - - - - - True - False - Mod - - - 5 - 0 - - - - - True - True - 12 - 14 - document-edit-symbolic - False - False - False - 11700000 - digits - - - - 0 - 1 - - - - - True - True - 12 - 14 - document-edit-symbolic - 27500000 - digits - - - - 1 - 1 - - - - - True - False - pol_store - 0 - - - - 0 - - - - - 2 - 1 - - - - - True - False - fec_store - 0 - - - - 0 - - - - - 3 - 1 - - - - - True - False - system_store - 0 - - - - 0 - - - - - 4 - 1 - - - - - True - False - mod_store - 0 - - - - 0 - - - - - 5 - 1 - - - - - False - True - 2 - - - - - True - True - True - - - True - False - 5 - - - True - False - Pls mode - - - 0 - 0 - - - - - True - False - Pls code - - - 1 - 0 - - - - - True - False - Is ID - - - 2 - 0 - - - - - True - False - pls_mode_store - 0 - - - - 0 - - - - - 0 - 1 - - - - - True - True - 5 - 12 - document-edit-symbolic - False - 0 - 262142 - digits - - - - 1 - 1 - - - - - True - True - 5 - 12 - document-edit-symbolic - False - 0 - 255 - digits - - - - 2 - 1 - - - - - True - False - T2-MI PLP ID - - - 3 - 0 - - - - - True - True - 5 - 12 - document-edit-symbolic - False - 0 - 255 - digits - - - - 3 - 1 - - - - - - - True - False - Extra: - - - - - False - True - 4 - - - - - - - True - False - Transponder properties: - + + + 0 + - False - True - 1 + 2 + 1 + + + + + True + False + fec_store + 0 + + + + 0 + + + + + 3 + 1 + + + + + True + False + system_store + 0 + + + + 0 + + + + + 4 + 1 + + + + + True + False + mod_store + 0 + + + + 0 + + + + + 5 + 1 + + False + True + 2 + + + + + True + True + True + + + True + False + 5 + + + True + False + Pls mode + + + 0 + 0 + + + + + True + False + Pls code + + + 1 + 0 + + + + + True + False + Is ID + + + 2 + 0 + + + + + True + False + pls_mode_store + 0 + + + + 0 + + + + + 0 + 1 + + + + + True + True + 5 + 12 + document-edit-symbolic + False + 0 - 262142 + digits + + + + 1 + 1 + + + + + True + True + 5 + 12 + document-edit-symbolic + False + 0 - 255 + digits + + + + 2 + 1 + + + + + True + False + T2-MI PLP ID + + + 3 + 0 + + + + + True + True + 5 + 12 + document-edit-symbolic + False + 0 - 255 + digits + + + + 3 + 1 + + + + + + + True + False + Extra: + + + + + False + True + 4 + - - tr_cancel_button - tr_ok_button - diff --git a/app/ui/xml/dialogs.py b/app/ui/xml/dialogs.py index da158888..37c7d983 100644 --- a/app/ui/xml/dialogs.py +++ b/app/ui/xml/dialogs.py @@ -55,10 +55,17 @@ class DVBDialog(Gtk.Dialog): modal=True, resizable=False, default_width=320, + skip_taskbar_hint=True, + skip_pager_hint=True, + destroy_with_parent=True, use_header_bar=IS_GNOME_SESSION, + window_position=Gtk.WindowPosition.CENTER_ON_PARENT, buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK), *args, **kwargs) + self.frame = Gtk.Frame(margin=5, label_xalign=0.02) + self.get_content_area().pack_start(self.frame, True, True, 0) + self._data = data @property @@ -70,10 +77,9 @@ class TCDialog(DVBDialog): def __init__(self, parent, title=None, data=None, *args, **kwargs): super().__init__(parent, title, data, *args, **kwargs) - self.frame = Gtk.Frame(margin=5, label=get_message("Name:"), label_xalign=0.02) self._entry = Gtk.Entry(margin=5) self.frame.add(self._entry) - self.get_content_area().pack_start(self.frame, True, True, 0) + self.frame.set_label(get_message("Name:")) self.show_all() if data: @@ -86,13 +92,14 @@ class SatelliteDialog(DVBDialog): def __init__(self, transient, title, satellite=None, *args, **kwargs): super().__init__(transient, title, *args, **kwargs) builder = get_builder(_DIALOGS_UI_PATH, use_str=True, - objects=("satellite_dialog_frame", "side_store", "pos_adjustment")) + objects=("sat_dialog_box", "side_store", "pos_adjustment")) - self.get_content_area().pack_start(builder.get_object("satellite_dialog_frame"), True, True, 0) + self.frame.add(builder.get_object("sat_dialog_box")) self._sat_name = builder.get_object("sat_name_entry") self._sat_position = builder.get_object("sat_position_button") self._side = builder.get_object("side_box") self._transponders = satellite.transponders if satellite else [] + self.show_all() if satellite: self._sat_name.set_text(satellite.name) @@ -132,17 +139,17 @@ class CableDialog(TCDialog): return self._data._replace(name=name) if self._data else Cable(name, "true", "9", None, []) -class TransponderDialog: - """ Shows dialog for adding or edit transponder """ +class SatTransponderDialog(DVBDialog): + """ Dialog for adding or edit satellite transponder. """ - def __init__(self, transient, transponder: Transponder = None): + def __init__(self, transient, title, data=None, *args, **kwargs): + super().__init__(transient, title, data, *args, **kwargs) handlers = {"on_entry_changed": self.on_entry_changed} - objects = ("transponder_dialog", "pol_store", "fec_store", "mod_store", "system_store", "pls_mode_store") + objects = ("sat_tr_box", "pol_store", "fec_store", "mod_store", "system_store", "pls_mode_store") builder = get_builder(_DIALOGS_UI_PATH, handlers, use_str=True, objects=objects) - self._dialog = builder.get_object("transponder_dialog") - self._dialog.set_transient_for(transient) + self.frame.add(builder.get_object("sat_tr_box")) self._freq_entry = builder.get_object("freq_entry") self._rate_entry = builder.get_object("rate_entry") self._pol_box = builder.get_object("pol_box") @@ -162,18 +169,22 @@ class TransponderDialog: Gtk.STYLE_PROVIDER_PRIORITY_USER) self._rate_entry.get_style_context().add_provider_for_screen(Gdk.Screen.get_default(), self._style_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) - if transponder: - self.init_transponder(transponder) + self.show_all() + if data: + self.init_transponder(data) def run(self): - while self._dialog.run() != Gtk.ResponseType.CANCEL: - tr = self.to_transponder() - if self.is_accept(tr): - return tr - show_dialog(DialogType.ERROR, self._dialog, "Please check your parameters and try again.") + resp = super().run() + while resp == Gtk.ResponseType.OK: + if self.is_accept(): + return resp + show_dialog(DialogType.ERROR, self, "Please check your parameters and try again.") + resp = super().run() + return resp - def destroy(self): - self._dialog.destroy() + @property + def data(self): + return self.to_transponder() def init_transponder(self, transponder): self._freq_entry.set_text(transponder.frequency) @@ -202,7 +213,8 @@ class TransponderDialog: def on_entry_changed(self, entry): entry.set_name("digit-entry" if self._pattern.search(entry.get_text()) else "GtkEntry") - def is_accept(self, tr): + def is_accept(self): + tr = self.to_transponder() if self._pattern.search(tr.frequency) or not tr.frequency: return False elif self._pattern.search(tr.symbol_rate) or not tr.symbol_rate: diff --git a/app/ui/xml/edit.py b/app/ui/xml/edit.py index 4f7be68c..1c403d61 100644 --- a/app/ui/xml/edit.py +++ b/app/ui/xml/edit.py @@ -38,7 +38,7 @@ from app.eparser.ecommons import (POLARIZATION, FEC, SYSTEM, MODULATION, T_SYSTE GUARD_INTERVAL, TRANSMISSION_MODE, HIERARCHY, Inversion, FEC_DEFAULT, C_MODULATION, Terrestrial, Cable) from app.eparser.satxml import get_terrestrial, get_cable, write_terrestrial, write_cable -from .dialogs import SatelliteDialog, TransponderDialog, SatellitesUpdateDialog, TerrestrialDialog, CableDialog +from .dialogs import SatelliteDialog, SatellitesUpdateDialog, TerrestrialDialog, CableDialog, SatTransponderDialog from ..dialogs import show_dialog, DialogType, get_chooser_dialog, get_message, get_builder from ..main_helper import move_items, on_popup_menu from ..uicommons import Gtk, Gdk, UI_RESOURCES_PATH, MOVE_KEYS, KeyboardKey, MOD_MASK, Page @@ -377,17 +377,18 @@ class SatellitesTool(Gtk.Box): if view is self._satellite_view: self.on_dvb_data_edit(SatelliteDialog, "Satellite", view, None if force else Satellite(*row), itr) - elif view is self._sat_tr_view: - self.on_transponder(None if force else Transponder(*row), itr) elif view is self._terrestrial_view: self.on_dvb_data_edit(TerrestrialDialog, "Region", view, None if force else Terrestrial(*row), itr) elif view is self._cable_view: self.on_dvb_data_edit(CableDialog, "Provider", view, None if force else Cable(*row), itr) + elif view is self._sat_tr_view: + data = None if force else Transponder(*row) + self.on_transponder_data_edit(SatTransponderDialog, "Transponder", view, self._satellite_view, data, itr) else: self._app.show_error_message("Not implemented yet!") def on_dvb_data_edit(self, dialog, title, view, data=None, edited_itr=None): - """ Create or edit satellite. """ + """ Creates or edits DVB data. """ dialog = dialog(self._app.get_active_window(), title, data) if dialog.run() == Gtk.ResponseType.OK: dvb_data = dialog.data @@ -403,33 +404,32 @@ class SatellitesTool(Gtk.Box): model.append(dvb_data) dialog.destroy() - def on_transponder(self, transponder=None, edited_itr=None): - """ Create or edit transponder. """ - - paths = self.check_selection(self._satellite_view, "Please, select only one satellite!") + def on_transponder_data_edit(self, dialog, title, view, src_view, data=None, edited_itr=None): + """ Creates or edits transponder data. """ + paths = self.check_selection(src_view, "Please, select only one item!") if paths is None: return elif len(paths) == 0: - self._app.show_error_message("No satellite is selected!") + self._app.show_error_message("No source selected!") return - dialog = TransponderDialog(self._app.get_active_window(), transponder) - tr = dialog.run() + dialog = dialog(self._app.app_window, title, data) + if dialog.run() == Gtk.ResponseType.OK: + tr = dialog.data + if tr: + src_model = src_view.get_model() + transponders = src_model[paths][-1] + tr_model, tr_paths = view.get_selection().get_selected_rows() + + if data and edited_itr: + tr_model.set(edited_itr, {i: v for i, v in enumerate(tr)}) + transponders[tr_model.get_path(edited_itr).get_indices()[0]] = tr + else: + index = paths[0].get_indices()[0] + 1 + tr_model.insert(index, tr) + transponders.insert(index, tr) dialog.destroy() - if tr: - sat_model = self._satellite_view.get_model() - transponders = sat_model[paths][-1] - tr_model, tr_paths = self._sat_tr_view.get_selection().get_selected_rows() - - if transponder and edited_itr: - tr_model.set(edited_itr, {i: v for i, v in enumerate(tr)}) - transponders[tr_model.get_path(edited_itr).get_indices()[0]] = tr - else: - index = paths[0].get_indices()[0] + 1 - tr_model.insert(index, tr) - transponders.insert(index, tr) - def check_selection(self, view, message): """ Checks if any row is selected. Shows error dialog if selected more than one.