added download dialog

This commit is contained in:
Dmitriy Yefremov
2017-11-06 22:17:43 +03:00
parent 3f9eff2dce
commit 219f8f5e7f
6 changed files with 882 additions and 404 deletions

View File

@@ -1,41 +1,52 @@
from enum import Enum
from ftplib import FTP
import os
__DATA_FILES_LIST = ("tv", "radio", "lamedb")
def download_data(*, properties):
class DownloadDataType(Enum):
ALL = 0
BOUQUETS = 1
SATELLITES = 2
def download_data(*, properties, download_type=DownloadDataType.ALL):
with FTP(properties["host"]) as ftp:
print(download_type)
ftp.login(user=properties["user"], passwd=properties["password"])
save_path = properties["data_dir_path"]
# bouquets section
ftp.cwd(properties["services_path"])
files = []
ftp.dir(files.append)
# bouquets section
if download_type is DownloadDataType.ALL or download_type is DownloadDataType.BOUQUETS:
ftp.cwd(properties["services_path"])
ftp.dir(files.append)
for file in files:
name = str(file).strip()
if name.endswith(__DATA_FILES_LIST):
name = name.split()[-1]
with open(save_path + name, 'wb') as f:
ftp.retrbinary('RETR ' + name, f.write)
for file in files:
name = str(file).strip()
if name.endswith(__DATA_FILES_LIST):
name = name.split()[-1]
with open(save_path + name, 'wb') as f:
ftp.retrbinary('RETR ' + name, f.write)
# satellites.xml section
ftp.cwd(properties["satellites_xml_path"])
files.clear()
ftp.dir(files.append)
if download_type is DownloadDataType.ALL or download_type is DownloadDataType.SATELLITES:
ftp.cwd(properties["satellites_xml_path"])
files.clear()
ftp.dir(files.append)
for file in files:
name = str(file).strip()
xml_file = "satellites.xml"
if name.endswith(xml_file):
with open(save_path + xml_file, 'wb') as f:
ftp.retrbinary('RETR ' + xml_file, f.write)
for file in files:
name = str(file).strip()
xml_file = "satellites.xml"
if name.endswith(xml_file):
with open(save_path + xml_file, 'wb') as f:
ftp.retrbinary('RETR ' + xml_file, f.write)
return ftp.voidcmd("NOOP")
def upload_data(*, properties):
def upload_data(*, properties, download_type=DownloadDataType.ALL, remove_unused=False):
load_path = properties["data_dir_path"]
for file_name in os.listdir(load_path):

View File

@@ -43,6 +43,348 @@ dmitry.v.yefremov@gmail.com
</object>
</child>
</object>
<object class="GtkDialog" id="download_dialog">
<property name="width_request">320</property>
<property name="can_focus">False</property>
<property name="title" translatable="yes">FTP-transfer</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="default_width">320</property>
<property name="destroy_with_parent">True</property>
<property name="icon_name">mail-send-receive</property>
<property name="type_hint">dialog</property>
<child internal-child="vbox">
<object class="GtkBox" id="download_dialog_vbox">
<property name="width_request">320</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child internal-child="action_area">
<object class="GtkButtonBox" id="doawload_dialog_action_area">
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="cancel_download_dialog_button">
<property name="label">gtk-undo</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="download_dialog_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">1</property>
<child>
<object class="GtkGrid" id="download_dialog_grid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Receive</property>
<property name="column_spacing">1</property>
<child>
<object class="GtkLabel" id="label9">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Receiver IP:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="host_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">False</property>
<property name="max_width_chars">10</property>
<property name="text" translatable="yes">127.0.0.1</property>
<property name="caps_lock_warning">False</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label11">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Current data path:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="data_path_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">False</property>
<property name="text" translatable="yes">data/</property>
<property name="caps_lock_warning">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="download_dialogbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label10">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Data:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="all_radio_button">
<property name="label" translatable="yes">All</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">satellites_radio_button</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="bouquets_radio_button">
<property name="label" translatable="yes">Bouquets</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">satellites_radio_button</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="satellites_radio_button">
<property name="label" translatable="yes">Satellites</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">all_radio_button</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkToolbar" id="toolbar1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkToolButton" id="receive_button">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Receive files from receiver</property>
<property name="is_important">True</property>
<property name="label" translatable="yes">Receive</property>
<property name="stock_id">gtk-goto-bottom</property>
<signal name="clicked" handler="on_receive" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="send_button">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Send files to receiver</property>
<property name="is_important">True</property>
<property name="label" translatable="yes">Send</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-goto-top</property>
<signal name="clicked" handler="on_send" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="homogeneous">True</property>
</packing>
</child>
<style>
<class name="primary-toolbar"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkCheckButton" id="remove_unused_check_button">
<property name="label" translatable="yes">Remove unused bouquets</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</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">3</property>
</packing>
</child>
<child>
<object class="GtkSeparator" id="separator4">
<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">4</property>
</packing>
</child>
<child>
<object class="GtkInfoBar" id="info_bar">
<property name="app_paintable">True</property>
<property name="can_focus">False</property>
<property name="show_close_button">True</property>
<signal name="response" handler="on_info_bar_close" swapped="no"/>
<child internal-child="action_area">
<object class="GtkButtonBox" id="infobar-action_area1">
<property name="can_focus">False</property>
<property name="layout_style">expand</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child internal-child="content_area">
<object class="GtkBox" id="infobar-content_area1">
<property name="can_focus">False</property>
<property name="spacing">16</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkLabel" id="info_bar_message_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Info</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<action-widgets>
<action-widget response="-6">cancel_download_dialog_button</action-widget>
</action-widgets>
</object>
<object class="GtkMessageDialog" id="error_dialog">
<property name="width_request">320</property>
<property name="can_focus">False</property>
@@ -319,6 +661,7 @@ dmitry.v.yefremov@gmail.com
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="column_spacing">1</property>
<property name="column_homogeneous">True</property>
<child>
<object class="GtkLabel" id="label1">

View File

@@ -0,0 +1,80 @@
from main.commons import run_task
from main.ftp import download_data, upload_data, DownloadDataType
from . import Gtk
def show_download_dialog(transient, options, open_data):
dialog = DownloadDialog(transient, options, open_data)
dialog.run()
dialog.destroy()
class DownloadDialog:
def __init__(self, transient, properties, open_data):
self._properties = properties
self._open_data = open_data
handlers = {"on_receive": self.on_receive,
"on_send": self.on_send,
"on_info_bar_close": self.on_info_bar_close}
builder = Gtk.Builder()
builder.add_objects_from_file("./ui/dialogs.glade", ("download_dialog",))
builder.connect_signals(handlers)
self._dialog = builder.get_object("download_dialog")
self._dialog.set_transient_for(transient)
self._info_bar = builder.get_object("info_bar")
self._message_label = builder.get_object("info_bar_message_label")
self._host_entry = builder.get_object("host_entry").set_text(properties["host"])
self._data_path_entry = builder.get_object("data_path_entry").set_text(properties["data_dir_path"])
self._remove_unused_check_button = builder.get_object("remove_unused_check_button")
self._all_radio_button = builder.get_object("all_radio_button")
self._bouquets_radio_button = builder.get_object("bouquets_radio_button")
self._satellites_radio_button = builder.get_object("satellites_radio_button")
# self._dialog.get_content_area().set_border_width(0)
@run_task
def on_receive(self, item):
self.download(True, d_type=self.get_download_type())
def on_send(self, item):
self.download(d_type=self.get_download_type())
def get_download_type(self):
download_type = DownloadDataType.ALL
if self._bouquets_radio_button.get_active():
download_type = DownloadDataType.BOUQUETS
elif self._satellites_radio_button.get_active():
download_type = DownloadDataType.SATELLITES
return download_type
def run(self):
return self._dialog.run()
def destroy(self):
self._dialog.destroy()
def on_info_bar_close(self, *args):
self._info_bar.set_visible(False)
def download(self, download=False, d_type=DownloadDataType.ALL):
""" Download/upload data from/to receiver """
try:
self._info_bar.set_visible(True)
if download:
download_data(properties=self._properties, download_type=d_type)
else:
upload_data(properties=self._properties, download_type=d_type)
except Exception as e:
self._info_bar.set_message_type(Gtk.MessageType.ERROR)
self._message_label.set_text(getattr(e, "message", repr(e))) # Or maybe so: getattr(e, 'message', str(e))
else:
self._info_bar.set_message_type(Gtk.MessageType.INFO)
self._message_label.set_text("OK")
if download and d_type is not DownloadDataType.SATELLITES:
self._open_data()
if __name__ == "__main__":
pass

View File

@@ -2,9 +2,9 @@ from contextlib import suppress
from main.commons import run_task
from main.eparser import get_channels, get_bouquets, write_bouquets, write_channels, Bouquets, Bouquet, Channel
from main.ftp import download_data, upload_data
from main.properties import get_config, write_config
from . import Gtk, Gdk
from .download_dialog import show_download_dialog
from .satellites_dialog import show_satellites_dialog
from .settings_dialog import show_settings_dialog
@@ -47,7 +47,6 @@ def get_handlers():
"on_about_app": on_about_app,
"on_preferences": on_preferences,
"on_download": on_download,
"on_upload": on_upload,
"on_data_open": on_data_open,
"on_data_save": on_data_save,
"on_tree_view_key_release": on_tree_view_key_release,
@@ -95,11 +94,12 @@ def move_items(key):
""" Move items in fav tree view """
selection = __fav_view.get_selection()
model, paths = selection.get_selected_rows()
# for correct down move!
if key in (Gdk.KEY_Down, Gdk.KEY_Page_Down, Gdk.KEY_KP_Page_Down):
paths = reversed(paths)
if paths:
# for correct down move!
if key in (Gdk.KEY_Down, Gdk.KEY_Page_Down, Gdk.KEY_KP_Page_Down):
paths = reversed(paths)
for path in paths:
itr = model.get_iter(path)
if key == Gdk.KEY_Down:
@@ -548,19 +548,9 @@ def on_tree_view_key_release(view: Gtk.TreeView, event):
pass
@run_task
def on_upload(item):
connect(__options, False)
@run_task
def on_download(item):
connect(__options)
open_data()
def on_reload(item):
pass
show_download_dialog(__main_window, __options, open_data)
@run_task
@@ -591,15 +581,6 @@ def on_view_focus(view, focus_event):
__tool_elements[elem].set_sensitive(not empty)
def connect(properties, download=True):
try:
res = download_data(properties=properties) if download else upload_data(properties=properties)
__status_bar.push(1, res)
except Exception as e:
__status_bar.remove_all(1)
__status_bar.push(1, getattr(e, "message", repr(e))) # Or maybe so: getattr(e, 'message', str(e))
def init_ui():
builder = Gtk.Builder()
builder.add_from_file("ui/main_window.glade")

View File

@@ -401,7 +401,7 @@
<property name="tooltip_text" translatable="yes">Download data from receiver</property>
<property name="label" translatable="yes">Download</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-goto-bottom</property>
<property name="icon_name">mail-send-receive</property>
<signal name="clicked" handler="on_download" swapped="no"/>
</object>
<packing>
@@ -409,20 +409,6 @@
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="upload_tool_button">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Upload data into receiver</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-goto-top</property>
<signal name="clicked" handler="on_upload" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="toolbutton2">
<property name="visible">True</property>
@@ -550,7 +536,7 @@
<property name="label" translatable="yes">Paste</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-paste</property>
<signal name="clicked" handler="on_paste" swapped="no"/>
<signal name="clicked" handler="on_paste" object="fav_tree_view" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
@@ -716,268 +702,292 @@
<property name="margin_right">2</property>
<property name="wide_handle">True</property>
<child>
<object class="GtkScrolledWindow" id="services_scrolled_window">
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkTreeView" id="services_tree_view">
<object class="GtkLabel" id="services_header_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Services</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="services_scrolled_window">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">services_list_store</property>
<property name="search_column">2</property>
<property name="rubber_banding">True</property>
<property name="enable_grid_lines">both</property>
<property name="activate_on_single_click">True</property>
<signal name="button-press-event" handler="on_view_popup_menu" object="services_popup_menu" swapped="no"/>
<signal name="drag-data-get" handler="on_services_tree_view_drag_data_get" swapped="no"/>
<signal name="focus-in-event" handler="on_view_focus" swapped="no"/>
<signal name="key-release-event" handler="on_tree_view_key_release" swapped="no"/>
<signal name="row-activated" handler="on_services_selection" object="services_list_store" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="services_selection">
<property name="mode">multiple</property>
</object>
</child>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeViewColumn" id="cas_column">
<property name="visible">False</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">CAS</property>
<child>
<object class="GtkCellRendererText" id="cas_cellrenderertext1"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="type_column">
<property name="visible">False</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Type</property>
<child>
<object class="GtkCellRendererText" id="type_cellrenderertext2"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="service_column2">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Service</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">2</property>
<child>
<object class="GtkCellRendererText" id="service_cellrenderertext"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="package_column2">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Package</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">3</property>
<child>
<object class="GtkCellRendererText" id="package_cellrenderertext"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="service_type_column">
<property name="resizable">True</property>
<property name="title" translatable="yes">Type</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">4</property>
<child>
<object class="GtkCellRendererText" id="service_type_cellrenderertex">
<property name="xalign">0.51999998092651367</property>
<object class="GtkTreeView" id="services_tree_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">services_list_store</property>
<property name="search_column">2</property>
<property name="rubber_banding">True</property>
<property name="enable_grid_lines">both</property>
<property name="activate_on_single_click">True</property>
<signal name="button-press-event" handler="on_view_popup_menu" object="services_popup_menu" swapped="no"/>
<signal name="drag-data-get" handler="on_services_tree_view_drag_data_get" swapped="no"/>
<signal name="focus-in-event" handler="on_view_focus" swapped="no"/>
<signal name="key-release-event" handler="on_tree_view_key_release" swapped="no"/>
<signal name="row-activated" handler="on_services_selection" object="services_list_store" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="services_selection">
<property name="mode">multiple</property>
</object>
<attributes>
<attribute name="text">4</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="ssid_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Ssid</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">5</property>
<child>
<object class="GtkCellRendererText" id="ssid_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
<object class="GtkTreeViewColumn" id="cas_column">
<property name="visible">False</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">CAS</property>
<child>
<object class="GtkCellRendererText" id="cas_cellrenderertext1"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<attributes>
<attribute name="text">5</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="freq_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Freq</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">6</property>
<child>
<object class="GtkCellRendererText" id="freq_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
<object class="GtkTreeViewColumn" id="type_column">
<property name="visible">False</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Type</property>
<child>
<object class="GtkCellRendererText" id="type_cellrenderertext2"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
<attributes>
<attribute name="text">6</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="rate_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Rate</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">7</property>
<child>
<object class="GtkCellRendererText" id="rate_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
<object class="GtkTreeViewColumn" id="service_column2">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Service</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">2</property>
<child>
<object class="GtkCellRendererText" id="service_cellrenderertext"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
<attributes>
<attribute name="text">7</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="pol_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Pol</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">8</property>
<child>
<object class="GtkCellRendererText" id="pol_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
<object class="GtkTreeViewColumn" id="package_column2">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Package</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">3</property>
<child>
<object class="GtkCellRendererText" id="package_cellrenderertext"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
<attributes>
<attribute name="text">8</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="fec_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">FEC</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">9</property>
<child>
<object class="GtkCellRendererText" id="fec_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
<object class="GtkTreeViewColumn" id="service_type_column">
<property name="resizable">True</property>
<property name="title" translatable="yes">Type</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">4</property>
<child>
<object class="GtkCellRendererText" id="service_type_cellrenderertex">
<property name="xalign">0.51999998092651367</property>
</object>
<attributes>
<attribute name="text">4</attribute>
</attributes>
</child>
</object>
<attributes>
<attribute name="text">9</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="system_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">System</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">10</property>
<child>
<object class="GtkCellRendererText" id="system_cellrenderertex">
<property name="xalign">0.50999999046325684</property>
<object class="GtkTreeViewColumn" id="ssid_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Ssid</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">5</property>
<child>
<object class="GtkCellRendererText" id="ssid_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
<attribute name="text">5</attribute>
</attributes>
</child>
</object>
<attributes>
<attribute name="text">10</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="pos_column1">
<property name="resizable">True</property>
<property name="title" translatable="yes">Pos</property>
<property name="expand">True</property>
<property name="sort_column_id">11</property>
<child>
<object class="GtkCellRendererText" id="pos_cellrenderertext1">
<property name="xalign">0.50999999046325684</property>
<object class="GtkTreeViewColumn" id="freq_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Freq</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">6</property>
<child>
<object class="GtkCellRendererText" id="freq_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
<attribute name="text">6</attribute>
</attributes>
</child>
</object>
<attributes>
<attribute name="text">11</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="data_id_column">
<property name="visible">False</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">data_id</property>
<child>
<object class="GtkCellRendererText" id="data_id_cellrenderertext"/>
<attributes>
<attribute name="text">12</attribute>
</attributes>
<object class="GtkTreeViewColumn" id="rate_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Rate</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">7</property>
<child>
<object class="GtkCellRendererText" id="rate_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
<attribute name="text">7</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="fav_id_column">
<property name="visible">False</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">fav_id</property>
<child>
<object class="GtkCellRendererText" id="fav_id_cellrenderertext"/>
<attributes>
<attribute name="text">13</attribute>
</attributes>
<object class="GtkTreeViewColumn" id="pol_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Pol</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">8</property>
<child>
<object class="GtkCellRendererText" id="pol_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
<attribute name="text">8</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="transponder_column">
<property name="visible">False</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">transponder</property>
<child>
<object class="GtkCellRendererText" id="transponder_cellrenderertext3"/>
<attributes>
<attribute name="text">14</attribute>
</attributes>
<object class="GtkTreeViewColumn" id="fec_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">FEC</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">9</property>
<child>
<object class="GtkCellRendererText" id="fec_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
<attribute name="text">9</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="system_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">System</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">10</property>
<child>
<object class="GtkCellRendererText" id="system_cellrenderertex">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
<attribute name="text">10</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="pos_column1">
<property name="resizable">True</property>
<property name="title" translatable="yes">Pos</property>
<property name="expand">True</property>
<property name="sort_column_id">11</property>
<child>
<object class="GtkCellRendererText" id="pos_cellrenderertext1">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
<attribute name="text">11</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="data_id_column">
<property name="visible">False</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">data_id</property>
<child>
<object class="GtkCellRendererText" id="data_id_cellrenderertext"/>
<attributes>
<attribute name="text">12</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="fav_id_column">
<property name="visible">False</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">fav_id</property>
<child>
<object class="GtkCellRendererText" id="fav_id_cellrenderertext"/>
<attributes>
<attribute name="text">13</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="transponder_column">
<property name="visible">False</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">transponder</property>
<child>
<object class="GtkCellRendererText" id="transponder_cellrenderertext3"/>
<attributes>
<attribute name="text">14</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>
</object>
<packing>
@@ -991,100 +1001,124 @@
<property name="can_focus">True</property>
<property name="wide_handle">True</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow2">
<object class="GtkBox" id="box2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkTreeView" id="fav_tree_view">
<object class="GtkLabel" id="fav_header_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Bouquet details</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">fav_list_store</property>
<property name="search_column">1</property>
<property name="rubber_banding">True</property>
<property name="enable_grid_lines">both</property>
<property name="activate_on_single_click">True</property>
<signal name="button-press-event" handler="on_view_popup_menu" object="fav_popup_menu" swapped="no"/>
<signal name="drag-data-get" handler="on_fav_tree_view_drag_data_get" swapped="no"/>
<signal name="drag-data-received" handler="on_fav_tree_view_drag_data_received" swapped="no"/>
<signal name="focus" handler="on_view_focus" swapped="no"/>
<signal name="focus-in-event" handler="on_view_focus" swapped="no"/>
<signal name="key-release-event" handler="on_tree_view_key_release" swapped="no"/>
<signal name="row-activated" handler="on_fav_selection" object="fav_list_store" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="fav_selection">
<property name="mode">multiple</property>
</object>
</child>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeViewColumn" id="num_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Num</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="num_cellrenderertext"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="service_column1">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Service</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="service_cellrenderertext1"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="type_column1">
<property name="title" translatable="yes">Type</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="type_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
<object class="GtkTreeView" id="fav_tree_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">fav_list_store</property>
<property name="search_column">1</property>
<property name="rubber_banding">True</property>
<property name="enable_grid_lines">both</property>
<property name="activate_on_single_click">True</property>
<signal name="button-press-event" handler="on_view_popup_menu" object="fav_popup_menu" swapped="no"/>
<signal name="drag-data-get" handler="on_fav_tree_view_drag_data_get" swapped="no"/>
<signal name="drag-data-received" handler="on_fav_tree_view_drag_data_received" swapped="no"/>
<signal name="focus" handler="on_view_focus" swapped="no"/>
<signal name="focus-in-event" handler="on_view_focus" swapped="no"/>
<signal name="key-release-event" handler="on_tree_view_key_release" swapped="no"/>
<signal name="row-activated" handler="on_fav_selection" object="fav_list_store" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="fav_selection">
<property name="mode">multiple</property>
</object>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="pos_column">
<property name="title" translatable="yes">Pos</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="pos_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
<object class="GtkTreeViewColumn" id="num_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Num</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="num_cellrenderertext"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="fav_id_column1">
<property name="visible">False</property>
<property name="title" translatable="yes">fav_id</property>
<child>
<object class="GtkCellRendererText" id="fav_id_cellrenderertext4"/>
<attributes>
<attribute name="text">4</attribute>
</attributes>
<object class="GtkTreeViewColumn" id="service_column1">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Service</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="service_cellrenderertext1"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="type_column1">
<property name="title" translatable="yes">Type</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="type_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="pos_column">
<property name="title" translatable="yes">Pos</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="pos_cellrenderertext">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="fav_id_column1">
<property name="visible">False</property>
<property name="title" translatable="yes">fav_id</property>
<child>
<object class="GtkCellRendererText" id="fav_id_cellrenderertext4"/>
<attributes>
<attribute name="text">4</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>
</object>
<packing>
@@ -1093,54 +1127,78 @@
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow3">
<object class="GtkBox" id="box3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkTreeView" id="bouquets_tree_view">
<object class="GtkLabel" id="bouquets_header_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Bouquets</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">bouquets_tree_store</property>
<property name="headers_clickable">False</property>
<property name="enable_search">False</property>
<property name="activate_on_single_click">True</property>
<signal name="button-press-event" handler="on_view_popup_menu" object="bouquets_popup_menu" swapped="no"/>
<signal name="focus-in-event" handler="on_view_focus" swapped="no"/>
<signal name="key-release-event" handler="on_tree_view_key_release" swapped="no"/>
<signal name="row-activated" handler="on_bouquets_selection" object="bouquets_tree_store" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="bouquets_selection"/>
</child>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeViewColumn" id="bouquets_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Bouquets</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="bouquets_cellrenderertext"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
<object class="GtkTreeView" id="bouquets_tree_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">bouquets_tree_store</property>
<property name="headers_clickable">False</property>
<property name="enable_search">False</property>
<property name="activate_on_single_click">True</property>
<signal name="button-press-event" handler="on_view_popup_menu" object="bouquets_popup_menu" swapped="no"/>
<signal name="focus-in-event" handler="on_view_focus" swapped="no"/>
<signal name="key-release-event" handler="on_tree_view_key_release" swapped="no"/>
<signal name="row-activated" handler="on_bouquets_selection" object="bouquets_tree_store" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="bouquets_selection"/>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="bouquet_type_column">
<property name="visible">False</property>
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Type</property>
<child>
<object class="GtkCellRendererText" id="bouquet_type_cellrenderertext"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
<object class="GtkTreeViewColumn" id="bouquets_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Bouquets</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="bouquets_cellrenderertext"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="bouquet_type_column">
<property name="visible">False</property>
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Type</property>
<child>
<object class="GtkCellRendererText" id="bouquet_type_cellrenderertext"/>
<attributes>
<attribute name="text">1</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>
</object>
<packing>
@@ -1183,8 +1241,13 @@
<property name="margin_end">10</property>
<property name="margin_top">6</property>
<property name="margin_bottom">6</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>

View File

@@ -10,7 +10,7 @@ class SettingsDialog:
def __init__(self, transient, options):
handlers = {"on_data_dir_field_icon_press": self.on_data_dir_field_icon_press}
builder = Gtk.Builder()
builder.add_from_file("ui/dialogs.glade")
builder.add_objects_from_file("ui/dialogs.glade", ("settings_dialog", ))
builder.connect_signals(handlers)
self._dialog = builder.get_object("settings_dialog")
self._dialog.set_transient_for(transient)