satellites merge support for web import (#165)

This commit is contained in:
DYefremov
2023-04-06 00:24:45 +03:00
parent 57e4fdff7f
commit 95a1732f01
6 changed files with 399 additions and 229 deletions

View File

@@ -30,6 +30,7 @@
import re
from app.commons import log
from app.eparser.satxml import get_pos_str
from app.ui.uicommons import CODED_ICON, LOCKED_ICON, HIDE_ICON
from .blacklist import get_blacklist
from ..ecommons import Service, POLARIZATION, FEC, SERVICE_TYPE, Flag, T_FEC, TrType, FEC_DEFAULT, T_SYSTEM
@@ -220,8 +221,7 @@ class LameDbReader:
freq = f"{int(freq) // 1000}"
rate = f"{int(rate) // 1000}"
if tr_type is TrType.Satellite:
pos = int(pos)
pos = f"{abs(pos / 10):0.1f}{'W' if pos < 0 else 'E'}"
pos = get_pos_str(int(pos))
except ValueError as e:
log(f"Parse error [parse_services]: {e}")

View File

@@ -2,7 +2,7 @@
#
# The MIT License (MIT)
#
# Copyright (c) 2018-2022 Dmitriy Yefremov
# Copyright (c) 2018-2023 Dmitriy Yefremov
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -192,5 +192,10 @@ def indent(elem, parent=None, index=-1, level=0, space=" "):
elem.tail = f"\n{space * (level - 1)}"
def get_pos_str(pos: int) -> str:
""" Converts satellite position int value to readable string. """
return f"{abs(pos / 10):0.1f}{'W' if pos < 0 else 'E'}"
if __name__ == "__main__":
pass

View File

@@ -42,6 +42,7 @@ from app.eparser.ecommons import (PLS_MODE, get_key_by_value, POLARIZATION, FEC,
T_SYSTEM, BANDWIDTH, CONSTELLATION, T_FEC, GUARD_INTERVAL, TRANSMISSION_MODE,
HIERARCHY, Inversion, C_MODULATION, FEC_DEFAULT, TerTransponder, CableTransponder,
Bouquet, BouquetService, BqServiceType, Bouquets, BqType)
from app.eparser.satxml import get_pos_str
from app.settings import USE_HEADER_BAR
from app.tools.satellites import SatellitesParser, SatelliteSource, ServicesParser
from ..dialogs import show_dialog, DialogType, get_message, get_builder
@@ -463,6 +464,9 @@ class UpdateDialog:
builder.get_object("sat_update_find_button").connect("toggled", search_provider.on_search_toggled)
# Satellite lists init on dialog start.
self._sat_view.connect("realize", self.on_update_satellites_list)
# Options.
self._general_options_box = builder.get_object("general_options_box")
self._skip_c_band_switch = builder.get_object("skip_c_band_switch")
if self._settings.use_header_bar:
header_bar = HeaderBar()
@@ -644,6 +648,15 @@ class SatellitesUpdateDialog(UpdateDialog):
self._main_model = main_model
self._source_box.connect("changed", self.on_update_satellites_list)
# Options.
self._merge_sat_switch = Gtk.Switch()
box = Gtk.Box(spacing=5, orientation=Gtk.Orientation.HORIZONTAL)
box.pack_start(Gtk.Label(get_message("Merge satellites by positions")), False, True, 0)
box.pack_end(self._merge_sat_switch, False, True, 0)
self._general_options_box.pack_start(box, True, True, 0)
self._general_options_box.show_all()
self._skip_c_band_switch.get_parent().set_visible(False)
@run_idle
def on_receive_data(self, item):
@@ -659,6 +672,7 @@ class SatellitesUpdateDialog(UpdateDialog):
self.update_log_visibility()
model = self._sat_view.get_model()
start = time.time()
_len = 75
with concurrent.futures.ProcessPoolExecutor(max_workers=4) as executor:
text = "Processing: {}\n"
@@ -678,10 +692,39 @@ class SatellitesUpdateDialog(UpdateDialog):
appender.send(text.format(data[0]))
sats.append(data)
appender.send("-" * 75 + "\n")
appender.send("-" * _len + "\n")
sat_count = len(sats)
sats = {s[0]: s for s in sats} # key = name, v = satellite
if self._merge_sat_switch.get_active():
def grouper(sat):
try:
return int(sat.position)
except ValueError:
pass
return 0
sat_groups = groupby(sorted(sats, key=grouper, reverse=True), key=grouper)
sats = {}
for pos, satellites in sat_groups:
satellites = list(satellites)
if len(satellites) > 1:
position = get_pos_str(pos)
appender.send(f"Merging satellites for position: {position}\n")
names = []
transponders = []
for s in satellites:
names.append(s.name.lstrip(position).strip().split())
transponders.extend(s.transponders)
transponders.sort(key=lambda t: int(t.frequency))
sat = Satellite(self.get_grouped_satellite_name(names, pos), "0", str(pos), transponders)
sats[sat.name] = sat
else:
sat = satellites.pop()
sats[sat.name] = sat
appender.send("-" * _len + "\n")
else:
sats = {s.name: s for s in sats} # key = name, v = satellite
for row in self._main_model:
pos = row[0]
@@ -694,11 +737,39 @@ class SatellitesUpdateDialog(UpdateDialog):
appender.send(f"Adding satellite: {s.name}\n")
self.append_satellite(s)
appender.send("-" * 75 + "\n")
appender.send("-" * _len + "\n")
appender.send(f"Consumed: {time.time() - start:0.0f}s, {sat_count} satellites received.\n")
appender.close()
self.is_download = False
def get_grouped_satellite_name(self, sat_names, pos):
""" Forms name for merged satellites. """
def name_grouper(nd):
if nd:
return nd[0]
return ""
name_groups = groupby(sorted(sat_names, key=name_grouper), key=name_grouper)
names = []
for s, s_names in name_groups:
tk = set()
name = s
for i, n_data in enumerate(s_names):
if i == 0:
name = " ".join(n_data)
tk.update(n_data)
else:
for n in n_data:
if n in tk:
continue
name = f"{name}/{n}"
tk.add(n)
names.append(name)
return f"{pos} {' & '.join(names)}"
@run_idle
def append_satellite(self, sat):
self._main_model.append(sat)
@@ -736,8 +807,6 @@ class ServicesUpdateDialog(UpdateDialog):
self._source_box.connect("changed", self.on_update_satellites_list)
self._source_box.connect("changed", self.on_source_changed)
# Options for KingOfSat source.
popover = Gtk.Popover()
main_options_box = Gtk.Box(spacing=5, margin_left=10, margin_right=10, orientation=Gtk.Orientation.VERTICAL)
self._kos_bq_groups_switch = Gtk.Switch()
self._kos_bq_lang_switch = Gtk.Switch()
self._kos_options_box = Gtk.Box(spacing=5, orientation=Gtk.Orientation.VERTICAL)
@@ -749,26 +818,8 @@ class ServicesUpdateDialog(UpdateDialog):
box.pack_start(Gtk.Label(get_message("Create Regional bouquets")), False, True, 0)
box.pack_end(self._kos_bq_lang_switch, False, True, 0)
self._kos_options_box.add(box)
main_options_box.add(self._kos_options_box)
# General options.
self._general_options_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self._skip_c_band_switch = Gtk.Switch()
box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5, margin_top=5)
box.pack_start(Gtk.Label(get_message("Skip C-band")), False, True, 0)
box.pack_end(self._skip_c_band_switch, False, True, 0)
self._general_options_box.add(box)
main_options_box.add(self._general_options_box)
main_options_box.add(Gtk.ModelButton(get_message("Close"), margin_bottom=5))
main_options_box.show_all()
popover.add(main_options_box)
# Options button.
option_button_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5)
option_button_box.add(Gtk.Image.new_from_icon_name("applications-system-symbolic", Gtk.IconSize.BUTTON))
option_button_box.add(Gtk.Label(get_message("Options")))
menu_button = Gtk.MenuButton(popover=popover)
menu_button.add(option_button_box)
menu_button.show_all()
self._right_action_box.pack_end(menu_button, False, False, 0)
self._general_options_box.pack_start(self._kos_options_box, True, True, 0)
self._general_options_box.show_all()
@run_idle
def on_receive_data(self, item):

View File

@@ -2,7 +2,7 @@
#
# The MIT License (MIT)
#
# Copyright (c) 2018-2022 Dmitriy Yefremov
# Copyright (c) 2018-2023 Dmitriy Yefremov
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -37,9 +37,9 @@ from app.eparser import get_satellites, write_satellites, Satellite, Transponder
from app.eparser.ecommons import (POLARIZATION, FEC, SYSTEM, MODULATION, T_SYSTEM, BANDWIDTH, CONSTELLATION, T_FEC,
GUARD_INTERVAL, TRANSMISSION_MODE, HIERARCHY, Inversion, FEC_DEFAULT, C_MODULATION,
Terrestrial, Cable, CableTransponder, TerTransponder)
from app.eparser.satxml import get_terrestrial, get_cable, write_terrestrial, write_cable
from .dialogs import SatelliteDialog, SatellitesUpdateDialog, TerrestrialDialog, CableDialog, SatTransponderDialog, \
CableTransponderDialog, TerTransponderDialog
from app.eparser.satxml import get_terrestrial, get_cable, write_terrestrial, write_cable, get_pos_str
from .dialogs import (SatelliteDialog, SatellitesUpdateDialog, TerrestrialDialog, CableDialog, SatTransponderDialog,
CableTransponderDialog, TerTransponderDialog)
from ..dialogs import show_dialog, DialogType, get_chooser_dialog, get_message, get_builder
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
@@ -56,8 +56,8 @@ class SatellitesTool(Gtk.Box):
def __str__(self):
return self.value
def __init__(self, app, settings, *args, **kwargs):
super().__init__(*args, **kwargs)
def __init__(self, app, settings, **kwargs):
super().__init__(**kwargs)
self._app = app
self._app.connect("data-save", self.on_save)
@@ -162,8 +162,7 @@ class SatellitesTool(Gtk.Box):
def sat_pos_func(self, column, renderer, model, itr, data):
""" Converts and sets the satellite position value to a readable format. """
pos = int(model.get_value(itr, 2))
renderer.set_property("text", f"{abs(pos / 10):0.1f}{'W' if pos < 0 else 'E'}")
renderer.set_property("text", get_pos_str(int(model.get_value(itr, 2))))
def sat_pol_func(self, column, renderer, model, itr, data):
renderer.set_property("text", POLARIZATION.get(model.get_value(itr, 2), None))

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.2
<!-- Generated with glade 3.38.2
The MIT License (MIT)
@@ -65,19 +65,19 @@ Author: Dmitriy Yefremov
</object>
<object class="GtkImage" id="popup_menu_add_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="stock">gtk-add</property>
</object>
<object class="GtkMenu" id="popup_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<child>
<object class="GtkImageMenuItem" id="add_sat_popup_menu_item">
<property name="label" translatable="yes">Add</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="image">popup_menu_add_image</property>
<property name="use_stock">False</property>
<property name="use-stock">False</property>
<signal name="activate" handler="on_add" swapped="no"/>
<accelerator key="Insert" signal="activate"/>
</object>
@@ -85,16 +85,16 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkSeparatorMenuItem" id="popup_sat_menu_separator">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="edit_sat_popup_menu_item">
<property name="label">gtk-edit</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<property name="can-focus">False</property>
<property name="use-underline">True</property>
<property name="use-stock">True</property>
<signal name="activate" handler="on_edit" swapped="no"/>
<accelerator key="e" signal="activate" modifiers="Primary"/>
</object>
@@ -102,16 +102,16 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkSeparatorMenuItem" id="popup_sat_menu_separator_2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="remove_sat_popup_menu_item">
<property name="label">gtk-remove</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<property name="can-focus">False</property>
<property name="use-underline">True</property>
<property name="use-stock">True</property>
<signal name="activate" handler="on_remove" swapped="no"/>
<accelerator key="Delete" signal="activate"/>
</object>
@@ -119,19 +119,19 @@ Author: Dmitriy Yefremov
</object>
<object class="GtkImage" id="popup_menu_add_image_2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="stock">gtk-add</property>
</object>
<object class="GtkMenu" id="transponder_popup_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<child>
<object class="GtkImageMenuItem" id="add_tr_popup_menu_item">
<property name="label" translatable="yes">Add</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="image">popup_menu_add_image_2</property>
<property name="use_stock">False</property>
<property name="use-stock">False</property>
<signal name="activate" handler="on_transponder_add" swapped="no"/>
<accelerator key="Insert" signal="activate"/>
</object>
@@ -139,16 +139,16 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkSeparatorMenuItem" id="popup_tr_menu_separator">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="edit_tr_popup_menu_item">
<property name="label">gtk-edit</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<property name="can-focus">False</property>
<property name="use-underline">True</property>
<property name="use-stock">True</property>
<signal name="activate" handler="on_transponder_edit" swapped="no"/>
<accelerator key="e" signal="activate" modifiers="Primary"/>
</object>
@@ -156,16 +156,16 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkSeparatorMenuItem" id="popup_tr_menu_separator_2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="remove_tr_popup_menu_item">
<property name="label">gtk-remove</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<property name="can-focus">False</property>
<property name="use-underline">True</property>
<property name="use-stock">True</property>
<signal name="activate" handler="on_transponder_remove" swapped="no"/>
<accelerator key="Delete" signal="activate"/>
</object>
@@ -255,45 +255,58 @@ Author: Dmitriy Yefremov
</object>
<object class="GtkPaned" id="main_paned">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="wide_handle">True</property>
<property name="can-focus">True</property>
<property name="wide-handle">True</property>
<child>
<object class="GtkFrame" id="editor_sat_frame">
<property name="width_request">360</property>
<property name="width-request">360</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0.49000000953674316</property>
<property name="shadow_type">in</property>
<property name="can-focus">False</property>
<property name="label-xalign">0.49000000953674316</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkBox" id="editor_sat_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="editor_header_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">2</property>
<property name="margin_bottom">5</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">2</property>
<property name="margin-bottom">5</property>
<property name="spacing">5</property>
<child type="center">
<object class="GtkStackSwitcher" id="stack_switcher">
<property name="name">header-stack-switcher</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stack">sat_stack</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="add_header_button">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Add</property>
<property name="can-focus">False</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Add</property>
<signal name="clicked" handler="on_add" swapped="no"/>
<child>
<object class="GtkImage" id="add_satellite_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">document-new-symbolic</property>
<property name="can-focus">False</property>
<property name="icon-name">document-new-symbolic</property>
</object>
</child>
</object>
@@ -306,15 +319,15 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkButton" id="update_header_button">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Update</property>
<property name="can-focus">False</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Update</property>
<signal name="clicked" handler="on_update" swapped="no"/>
<child>
<object class="GtkImage" id="update_header_button_img">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">emblem-synchronizing-symbolic</property>
<property name="can-focus">False</property>
<property name="icon-name">emblem-synchronizing-symbolic</property>
</object>
</child>
</object>
@@ -324,19 +337,6 @@ Author: Dmitriy Yefremov
<property name="position">1</property>
</packing>
</child>
<child type="center">
<object class="GtkStackSwitcher" id="stack_switcher">
<property name="visible">True</property>
<property name="name">header-stack-switcher</property>
<property name="can_focus">False</property>
<property name="stack">sat_stack</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
@@ -347,26 +347,26 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkStack" id="sat_stack">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<signal name="notify::visible-child-name" handler="on_visible_page" swapped="no"/>
<child>
<object class="GtkBox" id="satellite_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Satellites</property>
<property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">Satellites</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="satellite_view_scrolled">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTreeView" id="satellite_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can-focus">True</property>
<property name="model">satellite_model</property>
<property name="rubber_banding">True</property>
<property name="activate_on_single_click">True</property>
<property name="rubber-banding">True</property>
<property name="activate-on-single-click">True</property>
<signal name="button-press-event" handler="on_button_press" object="popup_menu" swapped="no"/>
<signal name="cursor-changed" handler="on_satellite_selection" swapped="no"/>
<signal name="key-press-event" handler="on_key_press" swapped="no"/>
@@ -393,7 +393,7 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkTreeViewColumn" id="sat_pos_column">
<property name="fixed_width">85</property>
<property name="fixed-width">85</property>
<property name="title" translatable="yes">Pos</property>
<property name="alignment">0.49000000953674316</property>
<child>
@@ -417,17 +417,17 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkBox" id="sat_status_box">
<property name="height_request">26</property>
<property name="height-request">26</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage" id="sat_count_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">document-properties</property>
<property name="can-focus">False</property>
<property name="icon-name">document-properties</property>
</object>
<packing>
<property name="expand">False</property>
@@ -438,9 +438,9 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkLabel" id="sat_count_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">0</property>
<property name="width_chars">4</property>
<property name="width-chars">4</property>
<property name="xalign">0</property>
</object>
<packing>
@@ -465,22 +465,22 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkBox" id="terrestrial_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Terrestrial</property>
<property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">Terrestrial</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="terrestrial_view_scrolled">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTreeView" id="terrestrial_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can-focus">True</property>
<property name="model">terrestrial_model</property>
<property name="search_column">0</property>
<property name="rubber_banding">True</property>
<property name="activate_on_single_click">True</property>
<property name="search-column">0</property>
<property name="rubber-banding">True</property>
<property name="activate-on-single-click">True</property>
<signal name="button-press-event" handler="on_button_press" object="popup_menu" swapped="no"/>
<signal name="cursor-changed" handler="on_terrestrial_selection" swapped="no"/>
<signal name="key-press-event" handler="on_key_press" swapped="no"/>
@@ -516,17 +516,17 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkBox" id="ter_status_box">
<property name="height_request">26</property>
<property name="height-request">26</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage" id="ter_count_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">document-properties</property>
<property name="can-focus">False</property>
<property name="icon-name">document-properties</property>
</object>
<packing>
<property name="expand">False</property>
@@ -537,9 +537,9 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkLabel" id="ter_count_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">0</property>
<property name="width_chars">4</property>
<property name="width-chars">4</property>
<property name="xalign">0</property>
</object>
<packing>
@@ -565,22 +565,22 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkBox" id="cable_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Cable</property>
<property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">Cable</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="cable_view_scrolled">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTreeView" id="cable_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can-focus">True</property>
<property name="model">cable_model</property>
<property name="search_column">0</property>
<property name="rubber_banding">True</property>
<property name="activate_on_single_click">True</property>
<property name="search-column">0</property>
<property name="rubber-banding">True</property>
<property name="activate-on-single-click">True</property>
<signal name="button-press-event" handler="on_button_press" object="popup_menu" swapped="no"/>
<signal name="cursor-changed" handler="on_cable_selection" swapped="no"/>
<signal name="key-press-event" handler="on_key_press" swapped="no"/>
@@ -616,17 +616,17 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkBox" id="cable_status_box">
<property name="height_request">26</property>
<property name="height-request">26</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage" id="cable_count_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">document-properties</property>
<property name="can-focus">False</property>
<property name="icon-name">document-properties</property>
</object>
<packing>
<property name="expand">False</property>
@@ -637,9 +637,9 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkLabel" id="cable_count_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">0</property>
<property name="width_chars">4</property>
<property name="width-chars">4</property>
<property name="xalign">0</property>
</object>
<packing>
@@ -674,7 +674,7 @@ Author: Dmitriy Yefremov
<child type="label">
<object class="GtkLabel" id="editor_sat_frame_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">DVB</property>
</object>
</child>
@@ -687,39 +687,39 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkFrame" id="editor_transponder_frame">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0.49000000953674316</property>
<property name="shadow_type">in</property>
<property name="can-focus">False</property>
<property name="label-xalign">0.49000000953674316</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkBox" id="transponders_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-top">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="editor_tr_header_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">15</property>
<property name="margin_right">15</property>
<property name="margin_top">2</property>
<property name="margin_bottom">5</property>
<property name="can-focus">False</property>
<property name="margin-left">15</property>
<property name="margin-right">15</property>
<property name="margin-top">2</property>
<property name="margin-bottom">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton" id="transponder_add_button">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Add</property>
<property name="can-focus">False</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Add</property>
<signal name="clicked" handler="on_transponder_add" swapped="no"/>
<child>
<object class="GtkImage" id="add_transponder_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">document-new-symbolic</property>
<property name="can-focus">False</property>
<property name="icon-name">document-new-symbolic</property>
</object>
</child>
</object>
@@ -742,25 +742,25 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkStack" id="transponders_stack">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<child>
<object class="GtkBox" id="sat_tr_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="sat_tr_view_scrolled">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTreeView" id="sat_tr_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can-focus">True</property>
<property name="model">sat_tr_view_model</property>
<property name="search_column">0</property>
<property name="rubber_banding">True</property>
<property name="enable_grid_lines">both</property>
<property name="search-column">0</property>
<property name="rubber-banding">True</property>
<property name="enable-grid-lines">both</property>
<signal name="button-press-event" handler="on_tr_button_press" object="transponder_popup_menu" swapped="no"/>
<signal name="key-press-event" handler="on_tr_key_press" swapped="no"/>
<child internal-child="selection">
@@ -771,7 +771,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="freq_column">
<property name="resizable">True</property>
<property name="min_width">20</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>
@@ -788,7 +788,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="rate_column">
<property name="resizable">True</property>
<property name="min_width">20</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>
@@ -805,7 +805,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="pol_column">
<property name="resizable">True</property>
<property name="min_width">20</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>
@@ -822,7 +822,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="fec_column">
<property name="resizable">True</property>
<property name="min_width">20</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>
@@ -839,7 +839,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="sys_column">
<property name="resizable">True</property>
<property name="min_width">20</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>
@@ -856,7 +856,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="mod_column">
<property name="resizable">True</property>
<property name="min_width">20</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>
@@ -935,17 +935,17 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkBox" id="sat_tr_status_box">
<property name="height_request">26</property>
<property name="height-request">26</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage" id="sat_tr_count_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">document-properties</property>
<property name="can-focus">False</property>
<property name="icon-name">document-properties</property>
</object>
<packing>
<property name="expand">False</property>
@@ -956,9 +956,9 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkLabel" id="sat_tr_count_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">0</property>
<property name="width_chars">4</property>
<property name="width-chars">4</property>
<property name="xalign">0</property>
</object>
<packing>
@@ -983,21 +983,21 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkBox" id="ter_tr_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="ter_tr_view_scrolled">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTreeView" id="ter_tr_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can-focus">True</property>
<property name="model">ter_tr_view_model</property>
<property name="search_column">0</property>
<property name="rubber_banding">True</property>
<property name="enable_grid_lines">both</property>
<property name="search-column">0</property>
<property name="rubber-banding">True</property>
<property name="enable-grid-lines">both</property>
<signal name="button-press-event" handler="on_tr_button_press" object="transponder_popup_menu" swapped="no"/>
<signal name="key-press-event" handler="on_tr_key_press" swapped="no"/>
<child internal-child="selection">
@@ -1008,7 +1008,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="ter_freq_column">
<property name="resizable">True</property>
<property name="min_width">20</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>
@@ -1025,7 +1025,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="ter_system_column">
<property name="resizable">True</property>
<property name="min_width">20</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>
@@ -1042,7 +1042,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="ter_bandwidth_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Bandwidth</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
@@ -1059,7 +1059,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="ter_constellation_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Constellation</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
@@ -1076,7 +1076,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="ter_rate_hp_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">SR (HP)</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
@@ -1107,7 +1107,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="ter_guard_column">
<property name="resizable">True</property>
<property name="min_width">20</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Guard</property>
<property name="expand">True</property>
<property name="alignment">0.5</property>
@@ -1177,17 +1177,17 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkBox" id="ter_tr_status_box">
<property name="height_request">26</property>
<property name="height-request">26</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage" id="ter_tr_count_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">document-properties</property>
<property name="can-focus">False</property>
<property name="icon-name">document-properties</property>
</object>
<packing>
<property name="expand">False</property>
@@ -1198,9 +1198,9 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkLabel" id="ter_tr_count_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">0</property>
<property name="width_chars">4</property>
<property name="width-chars">4</property>
<property name="xalign">0</property>
</object>
<packing>
@@ -1226,21 +1226,21 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkBox" id="cable_tr_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="cable_tr_view_scrolled">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTreeView" id="cable_tr_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can-focus">True</property>
<property name="model">cable_tr_view_model</property>
<property name="search_column">0</property>
<property name="rubber_banding">True</property>
<property name="enable_grid_lines">both</property>
<property name="search-column">0</property>
<property name="rubber-banding">True</property>
<property name="enable-grid-lines">both</property>
<signal name="button-press-event" handler="on_tr_button_press" object="transponder_popup_menu" swapped="no"/>
<signal name="key-press-event" handler="on_tr_key_press" swapped="no"/>
<child internal-child="selection">
@@ -1251,7 +1251,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="cable_freq_column">
<property name="resizable">True</property>
<property name="min_width">20</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>
@@ -1268,7 +1268,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="cable_rate_column">
<property name="resizable">True</property>
<property name="min_width">20</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>
@@ -1285,7 +1285,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="cable_fec_column">
<property name="resizable">True</property>
<property name="min_width">20</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>
@@ -1302,7 +1302,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="cable_mod_column">
<property name="resizable">True</property>
<property name="min_width">20</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>
@@ -1327,17 +1327,17 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkBox" id="cable_tr_status_box">
<property name="height_request">26</property>
<property name="height-request">26</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage" id="cable_tr_count_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">document-properties</property>
<property name="can-focus">False</property>
<property name="icon-name">document-properties</property>
</object>
<packing>
<property name="expand">False</property>
@@ -1348,9 +1348,9 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkLabel" id="cable_tr_count_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">0</property>
<property name="width_chars">4</property>
<property name="width-chars">4</property>
<property name="xalign">0</property>
</object>
<packing>
@@ -1385,7 +1385,7 @@ Author: Dmitriy Yefremov
<child type="label">
<object class="GtkLabel" id="editor_transponder_frame_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Transponder</property>
</object>
</child>

View File

@@ -33,6 +33,74 @@ Author: Dmitriy Yefremov
<!-- interface-name DemonEditor -->
<!-- interface-copyright 2018-2023 Dmitriy Yefremov -->
<!-- interface-authors Dmitriy Yefremov -->
<object class="GtkPopover" id="options_popover">
<property name="can-focus">False</property>
<child>
<object class="GtkBox" id="general_options_box">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">10</property>
<property name="margin-end">10</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="GtkModelButton" id="options_close_button">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="text" translatable="yes">Close</property>
<property name="centered">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="skip_c_band_box">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="skip_c_band_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Skip C-band</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="skip_c_band_switch">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="valign">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkAdjustment" id="pos_adjustment">
<property name="upper">180</property>
<property name="step-increment">0.10</property>
@@ -324,6 +392,53 @@ Author: Dmitriy Yefremov
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkMenuButton" id="options_menu_button">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="direction">none</property>
<property name="popover">options_popover</property>
<child>
<object class="GtkBox" id="options_button_box">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage" id="options_button_image">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">Options</property>
<property name="icon-name">applications-system-symbolic</property>
<property name="icon_size">1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="options_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Options</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>