gui rework

This commit is contained in:
DYefremov
2021-08-15 14:37:21 +03:00
parent 0aa9eaa401
commit 4b940b7135
8 changed files with 3297 additions and 3612 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -204,7 +204,7 @@ class ControlBox(Gtk.HBox):
builder = get_builder(UI_RESOURCES_PATH + "control.glade", handlers)
self.add(builder.get_object("main_box_frame"))
self.add(builder.get_object("control_box"))
self._stack = builder.get_object("stack")
self._screenshot_image = builder.get_object("screenshot_image")
self._screenshot_button_box = builder.get_object("screenshot_button_box")
@@ -218,7 +218,6 @@ class ControlBox(Gtk.HBox):
self._epg_list_box.set_filter_func(self.epg_filter_function)
self._epg_filter_entry = builder.get_object("epg_filter_entry")
self._timers_list_box = builder.get_object("timers_list_box")
self._app._control_revealer.bind_property("visible", self, "visible")
# Timers
self._timer_remove_button = builder.get_object("timer_remove_button")
self._timer_remove_button.bind_property("visible", builder.get_object("timer_edit_button"), "visible")

File diff suppressed because it is too large Load Diff

View File

@@ -47,7 +47,10 @@ from app.eparser.iptv import export_to_m3u
from app.eparser.neutrino.bouquets import BqType
from app.settings import SettingsType, Settings, SettingsException, PlayStreamsMode, SettingsReadException
from app.tools.media import Player, Recorder
from app.ui.control import ControlBox
from app.ui.epg_dialog import EpgDialog
from app.ui.ftp import FtpClientBox
from app.ui.satellites import SatellitesTool
from app.ui.transmitter import LinksTransmitter
from .backup import BackupDialog, backup_data, clear_data_path
from .dialogs import show_dialog, DialogType, get_chooser_dialog, WaitDialog, get_message, get_builder
@@ -59,12 +62,12 @@ from .main_helper import (insert_marker, move_items, rename, ViewTarget, set_fla
remove_picon, is_only_one_item_selected, gen_bouquets, BqGenType, get_iptv_url, append_picons,
get_selection, get_model_data, remove_all_unused_picons, get_picon_pixbuf, get_base_itrs)
from .picons_manager import PiconsDialog
from .satellites_dialog import show_satellites_dialog, ServicesUpdateDialog
from .satellites import SatellitesTool, ServicesUpdateDialog
from .search import SearchProvider
from .service_details_dialog import ServiceDetailsDialog, Action
from .settings_dialog import show_settings_dialog
from .uicommons import (Gtk, Gdk, UI_RESOURCES_PATH, LOCKED_ICON, HIDE_ICON, IPTV_ICON, MOVE_KEYS, KeyboardKey, Column,
FavClickMode, MOD_MASK, APP_FONT)
FavClickMode, MOD_MASK, APP_FONT, Page)
class Application(Gtk.Application):
@@ -118,7 +121,6 @@ class Application(Gtk.Application):
"on_tree_view_key_press": self.on_tree_view_key_press,
"on_tree_view_key_release": self.on_tree_view_key_release,
"on_bouquets_selection": self.on_bouquets_selection,
"on_satellite_editor_show": self.on_satellite_editor_show,
"on_fav_selection": self.on_fav_selection,
"on_alt_selection": self.on_alt_selection,
"on_services_selection": self.on_services_selection,
@@ -189,10 +191,8 @@ class Application(Gtk.Application):
"on_player_press": self.on_player_press,
"on_full_screen": self.on_full_screen,
"on_main_window_state": self.on_main_window_state,
"on_http_status_visible": self.on_http_status_visible,
"on_player_box_realize": self.on_player_box_realize,
"on_player_box_visibility": self.on_player_box_visibility,
"on_ftp_realize": self.on_ftp_realize,
"on_record": self.on_record,
"on_remove_all_unavailable": self.on_remove_all_unavailable,
"on_new_bouquet": self.on_new_bouquet,
@@ -202,7 +202,12 @@ class Application(Gtk.Application):
"on_create_bouquet_for_each_package": self.on_create_bouquet_for_each_package,
"on_create_bouquet_for_current_type": self.on_create_bouquet_for_current_type,
"on_create_bouquet_for_each_type": self.on_create_bouquet_for_each_type,
"on_add_alternatives": self.on_add_alternatives}
"on_add_alternatives": self.on_add_alternatives,
"on_satellites_realize": self.on_satellites_realize,
"on_picons_realize": self. on_picons_realize,
"on_control_realize": self.on_control_realize,
"on_ftp_realize": self.on_ftp_realize,
"on_visible_page": self.on_visible_page}
self._settings = Settings.get_instance()
self._s_type = self._settings.setting_type
@@ -229,6 +234,12 @@ class Application(Gtk.Application):
self._sat_positions = set()
self._service_types = set()
self._marker_types = {BqServiceType.MARKER.name, BqServiceType.SPACE.name, BqServiceType.ALT.name}
# Tools
self._links_transmitter = None
self._satellite_tool = None
self._picons_manager = None
self._control_box = None
self._ftp_client = None
# Player
self._player = None
self._full_screen = False
@@ -239,9 +250,6 @@ class Application(Gtk.Application):
# http api
self._http_api = None
self._fav_click_mode = None
self._links_transmitter = None
self._control_box = None
self._ftp_client = None
# Appearance
self._current_font = APP_FONT
self._picons_size = self._settings.list_picon_size
@@ -249,12 +257,16 @@ class Application(Gtk.Application):
self._NEW_COLOR = None # Color for new services in the main list
self._EXTRA_COLOR = None # Color for services with a extra name for the bouquet
builder = get_builder(UI_RESOURCES_PATH + "main_window.glade", handlers)
builder = get_builder(UI_RESOURCES_PATH + "main.glade", handlers)
self._main_window = builder.get_object("main_window")
main_window_size = self._settings.get("window_size")
# Setting the last size of the window if it was saved
if main_window_size:
self._main_window.resize(*main_window_size)
self._fav_paned = builder.get_object("fav_paned")
self._tool_box = builder.get_object("tool_box")
self._fav_paned.bind_property("visible", self._tool_box, "visible")
self._services_view = builder.get_object("services_tree_view")
self._fav_view = builder.get_object("fav_tree_view")
self._bouquets_view = builder.get_object("bouquets_tree_view")
@@ -272,13 +284,9 @@ class Application(Gtk.Application):
# Header bar elements.
main_header_box = builder.get_object("main_header_box")
main_popover_menu_box = builder.get_object("main_popover_menu_box")
self._right_header_box = builder.get_object("right_header_box")
self._left_header_box = builder.get_object("left_header_box")
# App info
self._app_info_box = builder.get_object("app_info_box")
self._app_info_box.bind_property("visible", builder.get_object("main_paned"), "visible", 4)
self._app_info_box.bind_property("visible", self._right_header_box, "visible", 4)
self._app_info_box.bind_property("visible", self._left_header_box, "visible", 4)
# Status bar
self._profile_combo_box = builder.get_object("profile_combo_box")
self._receiver_info_box = builder.get_object("receiver_info_box")
@@ -297,7 +305,6 @@ class Application(Gtk.Application):
self._data_count_label = builder.get_object("data_count_label")
self._services_load_spinner = builder.get_object("services_load_spinner")
self._save_header_button = builder.get_object("save_header_button")
self._app_info_box.bind_property("visible", self._save_header_button, "visible", 4)
self._save_header_button.bind_property("visible", builder.get_object("save_menu_button"), "visible")
self._save_header_button.bind_property("visible", builder.get_object("save_as_menu_button"), "visible")
self._signal_level_bar.bind_property("visible", builder.get_object("play_current_service_button"), "visible")
@@ -309,21 +316,6 @@ class Application(Gtk.Application):
self._alt_model = builder.get_object("alt_list_store")
self._alt_revealer = builder.get_object("alt_revealer")
self._alt_revealer.bind_property("visible", self._alt_revealer, "reveal-child")
# Control
self._control_button = builder.get_object("control_button")
self._receiver_info_box.bind_property("visible", self._control_button, "visible")
self._control_revealer = builder.get_object("control_revealer")
# FTP client
self._ftp_button = builder.get_object("ftp_button")
self._ftp_revealer = builder.get_object("ftp_revealer")
self._ftp_button.bind_property("active", self._ftp_revealer, "visible")
self._ftp_revealer.bind_property("visible", builder.get_object("main_box"), "visible", 4)
self._ftp_revealer.bind_property("visible", main_header_box, "visible", 4)
self._ftp_revealer.bind_property("visible", main_popover_menu_box, "visible", 4)
close_ftp_menu_button = builder.get_object("close_ftp_menu_button")
self._ftp_revealer.bind_property("visible", close_ftp_menu_button, "visible")
close_ftp_menu_button.connect("clicked", lambda b: self._ftp_button.set_active(False))
self._ftp_button.connect("toggled", self.on_ftp_toggle)
# Force Ctrl press event for view. Multiple selections in lists only with Space key(as in file managers)!!!
self._services_view.connect("key-press-event", self.force_ctrl)
self._fav_view.connect("key-press-event", self.force_ctrl)
@@ -353,15 +345,11 @@ class Application(Gtk.Application):
self._player_prev_button = builder.get_object("player_prev_button")
self._player_next_button = builder.get_object("player_next_button")
self._player_play_button = builder.get_object("player_play_button")
self._player_box.bind_property("visible", self._services_main_box, "visible", 4)
self._fav_bouquets_paned = builder.get_object("fav_bouquets_paned")
self._player_box.bind_property("visible", builder.get_object("close_player_menu_button"), "visible")
self._player_box.bind_property("visible", self._left_header_box, "visible", 4)
self._player_box.bind_property("visible", self._right_header_box, "visible", 4)
self._player_box.bind_property("visible", main_popover_menu_box, "visible", 4)
self._player_box.bind_property("visible", main_header_box, "visible", 4)
self._player_box.bind_property("visible", builder.get_object("left_header_separator"), "visible", 4)
self._player_box.bind_property("visible", builder.get_object("tools_button_box"), "visible", 4)
self._player_box.bind_property("visible", self._profile_combo_box, "visible", 4)
self._player_box.bind_property("visible", self._player_event_box, "visible")
self._fav_view.bind_property("sensitive", self._player_prev_button, "sensitive")
@@ -405,6 +393,28 @@ class Application(Gtk.Application):
gen = self.init_http_api()
GLib.idle_add(lambda: next(gen, False), priority=GLib.PRIORITY_LOW)
# ************** Pages initialization *************** #
def on_satellites_realize(self, box):
self._satellite_tool = SatellitesTool(self, self._settings)
box.pack_start(self._satellite_tool, True, True, 0)
def on_picons_realize(self, box):
self._picons_manager = None
def on_ftp_realize(self, box):
self._ftp_client = FtpClientBox(self, self._settings)
box.pack_start(self._ftp_client, True, True, 0)
def on_control_realize(self, box: Gtk.HBox):
self._control_box = ControlBox(self, self._http_api, self._settings)
box.pack_start(self._control_box, True, True, 0)
def on_visible_page(self, stack, param):
page = Page(stack.get_visible_child_name())
self._fav_paned.set_visible(page in (Page.SERVICES, Page.PLAYBACK))
self._save_header_button.set_visible(page in (Page.SERVICES, Page.SATELLITE))
def init_keys(self):
self.set_action("on_close_app", self.on_close_app)
self.set_action("on_data_save", self.on_data_save)
@@ -430,10 +440,6 @@ class Application(Gtk.Application):
self.set_action("upload_bouquets", lambda a, v: self.on_upload_data(DownloadType.BOUQUETS))
# Edit
self.set_action("on_edit", self.on_edit)
# Control
remote_action = Gio.SimpleAction.new_stateful("on_remote", None, GLib.Variant.new_boolean(False))
remote_action.connect("change-state", self.on_control)
self.add_action(remote_action)
def set_action(self, name, fun, enabled=True):
ac = Gio.SimpleAction.new(name, None)
@@ -1366,9 +1372,6 @@ class Application(Gtk.Application):
menu.popup(None, None, None, None, event.button, event.time)
return True
def on_satellite_editor_show(self, action, value=None):
""" Shows satellites editor dialog """
show_satellites_dialog(self._main_window, self._settings)
def on_download(self, action=None, value=None):
dialog = DownloadDialog(self._main_window, self._settings, self.open_data, self.update_settings)
@@ -1448,9 +1451,6 @@ class Application(Gtk.Application):
def open_data(self, data_path=None, callback=None):
""" Opening data and fill views. """
if self._ftp_button.get_active():
return
if data_path and os.path.isfile(data_path):
self.open_compressed_data(data_path)
else:
@@ -2011,12 +2011,9 @@ class Application(Gtk.Application):
gen = self.init_http_api()
GLib.idle_add(lambda: next(gen, False), priority=GLib.PRIORITY_LOW)
if self._ftp_button.get_active() and self._ftp_client:
if self._ftp_client:
self._ftp_client.init_ftp()
if self._app_info_box.get_visible():
return
if changed:
self.open_data()
@@ -2923,40 +2920,6 @@ class Application(Gtk.Application):
self._service_epg_label.set_text(dsc)
self._service_epg_label.set_tooltip_text(evn.get("e2eventdescription", ""))
# ******************* Control *********************** #
def on_control(self, action, state=False):
""" Shows/Hides [R key] remote controller. """
action.set_state(state)
self._control_revealer.set_visible(state)
self._control_revealer.set_reveal_child(state)
if not self._control_box:
from app.ui.control import ControlBox
self._control_box = ControlBox(self, self._http_api, self._settings)
self._control_revealer.add(self._control_box)
if state:
self._http_api.send(HttpAPI.Request.VOL, "state", self._control_box.update_volume)
def on_http_status_visible(self, img):
self._control_button.set_active(False)
# ****************** FTP client ********************* #
def on_ftp_toggle(self, button):
if not self._app_info_box.get_visible():
active = not button.get_active()
self._right_header_box.set_visible(active)
self._left_header_box.set_visible(active)
def on_ftp_realize(self, revealer):
if not self._ftp_client:
from app.ui.ftp import FtpClientBox
revealer.set_visible(True)
self._ftp_client = FtpClientBox(self, self._settings)
revealer.add(self._ftp_client)
# ***************** Filter and search ********************* #
def on_filter_toggled(self, action, value):

View File

@@ -74,119 +74,6 @@ Author: Dmitriy Yefremov
</row>
</data>
</object>
<object class="GtkPopoverMenu" id="left_header_menu">
<property name="can_focus">False</property>
<child>
<object class="GtkBox" id="left_popover_munu_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">center</property>
<property name="margin_left">10</property>
<property name="margin_right">10</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<object class="GtkModelButton" id="open_popover_munu_button">
<property name="width_request">85</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="text" translatable="yes">Open</property>
<signal name="clicked" handler="on_open" object="satellites_tree_store" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkModelButton" id="save_popover_munu_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="text" translatable="yes">Save</property>
<signal name="clicked" handler="on_save" object="satellites_editor_tree_view" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkModelButton" id="save_as_popover_munu_button">
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="text" translatable="yes">Save as...</property>
<signal name="clicked" handler="on_save_as" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkModelButton" id="update_popover_munu_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="text" translatable="yes">Update</property>
<signal name="clicked" handler="on_update" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">2</property>
<property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkModelButton" id="exit_popover_menu_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="text" translatable="yes">Exit</property>
<signal name="clicked" handler="on_quit" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
</object>
<packing>
<property name="submenu">main</property>
<property name="position">1</property>
</packing>
</child>
</object>
<object class="GtkListStore" id="mod_store">
<columns>
<!-- column-name mod -->
@@ -385,79 +272,33 @@ Author: Dmitriy Yefremov
<column type="gchararray"/>
</columns>
</object>
<object class="GtkWindow" id="satellites_editor_window">
<object class="GtkFrame" id="satellite_tool_frame">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="modal">True</property>
<property name="window_position">center-on-parent</property>
<property name="destroy_with_parent">True</property>
<property name="icon_name">applications-utilities</property>
<property name="skip_taskbar_hint">True</property>
<property name="skip_pager_hint">True</property>
<property name="gravity">center</property>
<signal name="check-resize" handler="on_resize" swapped="no"/>
<child type="titlebar">
<object class="GtkHeaderBar" id="satellites_editor_header">
<property name="margin_left">1</property>
<property name="margin_right">1</property>
<property name="margin_top">1</property>
<property name="margin_bottom">1</property>
<property name="label_xalign">0</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkBox" id="satellites_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="title" translatable="yes">Satellites edit tool</property>
<property name="show_close_button">True</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="left_header_box">
<object class="GtkBox" id="satellite_header_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">2</property>
<child>
<object class="GtkMenuButton" id="file_header_menu_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="popover">left_header_menu</property>
<child>
<object class="GtkImage" id="file_header_menu_button_img">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">find-location-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="save_header_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Save</property>
<signal name="clicked" handler="on_save" object="satellites_editor_tree_view" swapped="no"/>
<child>
<object class="GtkImage" id="save_header_button_img">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-save</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<property name="margin_left">15</property>
<property name="margin_right">15</property>
<property name="margin_top">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton" id="update_header_button">
<property name="visible">True</property>
@@ -476,220 +317,231 @@ Author: Dmitriy Yefremov
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="satellite_scrolled_window">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="satellites_editor_tree_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">satellites_tree_store</property>
<property name="search_column">0</property>
<property name="rubber_banding">True</property>
<property name="enable_tree_lines">True</property>
<signal name="button-press-event" handler="on_popup_menu" object="popup_menu" swapped="no"/>
<signal name="key-release-event" handler="on_key_release" swapped="no"/>
<signal name="row-activated" handler="on_row_activated" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection">
<property name="mode">multiple</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="satellite_column">
<property name="resizable">True</property>
<property name="min_width">250</property>
<property name="title" translatable="yes">Satellite</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="satellite_cellrenderertext">
<property name="ellipsize">end</property>
</object>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="freq_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="title" translatable="yes">Freq</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="frequency_cellrenderertext"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="rate_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="title" translatable="yes">Rate</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="sat_rate_cellrenderertext"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="pol_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="title" translatable="yes">Pol</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="sat_pol_cellrenderertext"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="fec_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="title" translatable="yes">FEC</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="set_fec_cellrenderertext"/>
<attributes>
<attribute name="text">4</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="sys_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="title" translatable="yes">System</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="sys_cellrenderertext"/>
<attributes>
<attribute name="text">5</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="mod_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="title" translatable="yes">Mod</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="mod_cellrenderertext"/>
<attributes>
<attribute name="text">6</attribute>
</attributes>
</child>
</object>
</child>
<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>
<object class="GtkCellRendererText" id="pls_mode_cellrenderertext"/>
<attributes>
<attribute name="text">7</attribute>
</attributes>
</child>
</object>
</child>
<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>
<object class="GtkCellRendererText" id="pls_code_cellrenderertext"/>
<attributes>
<attribute name="text">8</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="is_id_column">
<property name="visible">False</property>
<property name="resizable">True</property>
<property name="title" translatable="yes">Is ID</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="is_id_cellrenderertext"/>
<attributes>
<attribute name="text">9</attribute>
</attributes>
</child>
</object>
</child>
<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"/>
<attributes>
<attribute name="text">10</attribute>
</attributes>
</child>
</object>
</child>
<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"/>
<attributes>
<attribute name="text">11</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow">
<property name="width_request">480</property>
<property name="height_request">250</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="margin_left">1</property>
<property name="margin_right">1</property>
<property name="margin_top">1</property>
<property name="margin_bottom">1</property>
<property name="shadow_type">in</property>
<property name="min_content_width">320</property>
<property name="min_content_height">240</property>
<child>
<object class="GtkTreeView" id="satellites_editor_tree_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">satellites_tree_store</property>
<property name="search_column">0</property>
<property name="rubber_banding">True</property>
<property name="enable_tree_lines">True</property>
<signal name="button-press-event" handler="on_popup_menu" object="popup_menu" swapped="no"/>
<signal name="key-release-event" handler="on_key_release" swapped="no"/>
<signal name="row-activated" handler="on_row_activated" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection">
<property name="mode">multiple</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="satellite_column">
<property name="resizable">True</property>
<property name="min_width">250</property>
<property name="title" translatable="yes">Satellite</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="satellite_cellrenderertext">
<property name="ellipsize">end</property>
</object>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="freq_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="title" translatable="yes">Freq</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="frequency_cellrenderertext"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="rate_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="title" translatable="yes">Rate</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="sat_rate_cellrenderertext"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="pol_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="title" translatable="yes">Pol</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="sat_pol_cellrenderertext"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="fec_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="title" translatable="yes">FEC</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="set_fec_cellrenderertext"/>
<attributes>
<attribute name="text">4</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="sys_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="title" translatable="yes">System</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="sys_cellrenderertext"/>
<attributes>
<attribute name="text">5</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="mod_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="title" translatable="yes">Mod</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="mod_cellrenderertext"/>
<attributes>
<attribute name="text">6</attribute>
</attributes>
</child>
</object>
</child>
<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>
<object class="GtkCellRendererText" id="pls_mode_cellrenderertext"/>
<attributes>
<attribute name="text">7</attribute>
</attributes>
</child>
</object>
</child>
<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>
<object class="GtkCellRendererText" id="pls_code_cellrenderertext"/>
<attributes>
<attribute name="text">8</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="is_id_column">
<property name="visible">False</property>
<property name="resizable">True</property>
<property name="title" translatable="yes">Is ID</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="is_id_cellrenderertext"/>
<attributes>
<attribute name="text">9</attribute>
</attributes>
</child>
</object>
</child>
<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"/>
<attributes>
<attribute name="text">10</attribute>
</attributes>
</child>
</object>
</child>
<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"/>
<attributes>
<attribute name="text">11</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<child type="label_item">
<placeholder/>
</child>
</object>
<object class="GtkListStore" id="side_store">

View File

@@ -14,24 +14,20 @@ from .main_helper import move_items, scroll_to, append_text_to_tview, get_base_m
from .search import SearchProvider
from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, MOVE_KEYS, KeyboardKey, MOD_MASK
_UI_PATH = UI_RESOURCES_PATH + "satellites_dialog.glade"
_UI_PATH = UI_RESOURCES_PATH + "satellites.glade"
def show_satellites_dialog(transient, options):
SatellitesDialog(transient, options).show()
class SatellitesDialog:
class SatellitesTool(Gtk.Box):
_aggr = [None for x in range(9)] # aggregate
def __init__(self, transient, settings):
def __init__(self, app, settings, *args, **kwargs):
super().__init__(*args, **kwargs)
self._app = app
self._data_path = settings.data_local_path + "satellites.xml"
self._settings = settings
handlers = {"on_open": self.on_open,
"on_remove": self.on_remove,
"on_save": self.on_save,
"on_save_as": self.on_save_as,
handlers = {"on_remove": self.on_remove,
"on_update": self.on_update,
"on_up": self.on_up,
"on_down": self.on_down,
@@ -40,45 +36,26 @@ class SatellitesDialog:
"on_transponder_add": self.on_transponder_add,
"on_edit": self.on_edit,
"on_key_release": self.on_key_release,
"on_row_activated": self.on_row_activated,
"on_resize": self.on_resize,
"on_quit": self.on_quit}
"on_row_activated": self.on_row_activated}
builder = get_builder(_UI_PATH, handlers, use_str=True,
objects=("satellites_editor_window", "satellites_tree_store", "popup_menu",
objects=("satellite_tool_frame", "satellites_tree_store", "popup_menu",
"left_header_menu", "popup_menu_add_image", "popup_menu_add_image_2"))
self._window = builder.get_object("satellites_editor_window")
self._window.set_transient_for(transient)
self._sat_view = builder.get_object("satellites_editor_tree_view")
# Setting the last size of the dialog window if it was saved
window_size = self._settings.get("sat_editor_window_size")
if window_size:
self._window.resize(*window_size)
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")}
self.pack_start(builder.get_object("satellite_tool_frame"), True, True, 0)
self.show()
self.load_satellites_list(self._sat_view.get_model())
def load_satellites_list(self, model):
gen = self.on_satellites_list_load(model)
GLib.idle_add(lambda: next(gen, False), priority=GLib.PRIORITY_LOW)
def show(self):
self._window.show()
def on_resize(self, window):
""" Stores new size properties for dialog window after resize """
if self._settings:
self._settings.add("sat_editor_window_size", window.get_size())
@run_idle
def on_quit(self, *args):
self._window.destroy()
@run_idle
def on_open(self, model):
response = get_chooser_dialog(self._window, self._settings, "satellites.xml", ("*.xml",))
@@ -170,7 +147,7 @@ class SatellitesDialog:
def on_satellite(self, satellite=None, edited_itr=None):
""" Create or edit satellite"""
sat_dialog = SatelliteDialog(self._window, satellite)
sat_dialog = SatelliteDialog(self._app.get_active_window(), satellite)
sat = sat_dialog.run()
sat_dialog.destroy()
@@ -194,7 +171,7 @@ class SatellitesDialog:
show_dialog(DialogType.ERROR, self._window, "No satellite is selected!")
return
dialog = TransponderDialog(self._window, transponder)
dialog = TransponderDialog(self._app.get_active_window(), transponder)
tr = dialog.run()
dialog.destroy()
@@ -285,7 +262,7 @@ class SatellitesDialog:
@run_idle
def on_update(self, item):
SatellitesUpdateDialog(self._window, self._settings, self._sat_view.get_model()).show()
SatellitesUpdateDialog(self._app.get_active_window(), self._settings, self._sat_view.get_model()).show()
@staticmethod
def parse_data(model, path, itr, sats):
@@ -454,7 +431,7 @@ class UpdateDialog:
self._parser = None
self._size_name = "{}_window_size".format("_".join(re.findall("[A-Z][^A-Z]*", self.__class__.__name__))).lower()
builder = get_builder(UI_RESOURCES_PATH + "satellites_dialog.glade", handlers,
builder = get_builder(UI_RESOURCES_PATH + "satellites.glade", handlers,
objects=("satellites_update_window", "update_source_store", "update_sat_list_store",
"update_sat_list_model_filter", "update_sat_list_model_sort", "side_store",
"pos_adjustment", "pos_adjustment2", "satellites_update_popup_menu",

View File

@@ -90,6 +90,17 @@ def show_notification(message, timeout=10000, urgency=1):
notify.show()
class Page(Enum):
""" Main stack widget page. """
INFO = "info"
SERVICES = "services"
SATELLITE = "satellite"
PICONS = "picons"
PLAYBACK = "playback"
FTP = "ftp"
CONTROL = "control"
class KeyboardKey(Enum):
""" The raw(hardware) codes of the keyboard keys. """
E = 26

View File

@@ -23,7 +23,7 @@ def update_icon():
if __name__ == "__main__":
from app.ui.main_app_window import start_app
from app.ui.main import start_app
update_icon()
start_app()