diff --git a/app/ui/dialogs.glade b/app/ui/dialogs.glade
index 3a9a532f..1fb23878 100644
--- a/app/ui/dialogs.glade
+++ b/app/ui/dialogs.glade
@@ -1263,4 +1263,77 @@ dmitry.v.yefremov@gmail.com
ok_button
+
diff --git a/app/ui/dialogs.py b/app/ui/dialogs.py
index 92315254..be40a35f 100644
--- a/app/ui/dialogs.py
+++ b/app/ui/dialogs.py
@@ -1,24 +1,36 @@
""" Common module for showing dialogs """
from enum import Enum
+from app.commons import run_idle
from . import Gtk, UI_RESOURCES_PATH
class DialogType(Enum):
INPUT = "input_dialog"
- MESSAGE = ""
CHOOSER = "path_chooser_dialog"
ERROR = "error_dialog"
QUESTION = "question_dialog"
ABOUT = "about_dialog"
+ WAIT = "wait_dialog"
+
+
+class WaitDialog:
+ def __init__(self, transient):
+ builder, dialog = get_dialog_from_xml(DialogType.WAIT, transient)
+ self._dialog = dialog
+ self._dialog.set_transient_for(transient)
+
+ def show(self):
+ self._dialog.show()
+
+ @run_idle
+ def hide(self):
+ self._dialog.hide()
def show_dialog(dialog_type: DialogType, transient, text=None, options=None, action_type=None, file_filter=None):
""" Shows dialogs by name """
- builder = Gtk.Builder()
- builder.add_from_file(UI_RESOURCES_PATH + "dialogs.glade")
- dialog = builder.get_object(dialog_type.value)
- dialog.set_transient_for(transient)
+ builder, dialog = get_dialog_from_xml(dialog_type, transient)
if dialog_type is DialogType.CHOOSER and options:
if action_type is not None:
@@ -58,6 +70,14 @@ def show_dialog(dialog_type: DialogType, transient, text=None, options=None, act
return response
+def get_dialog_from_xml(dialog_type, transient):
+ builder = Gtk.Builder()
+ builder.add_from_file(UI_RESOURCES_PATH + "dialogs.glade")
+ dialog = builder.get_object(dialog_type.value)
+ dialog.set_transient_for(transient)
+ return builder, dialog
+
+
def get_chooser_dialog(transient, options, pattern, name):
file_filter = Gtk.FileFilter()
file_filter.add_pattern(pattern)
diff --git a/app/ui/main_app_window.py b/app/ui/main_app_window.py
index b24995a3..8114f95d 100644
--- a/app/ui/main_app_window.py
+++ b/app/ui/main_app_window.py
@@ -12,7 +12,7 @@ from app.eparser.enigma.bouquets import BqServiceType
from app.eparser.neutrino.bouquets import BqType
from app.properties import get_config, write_config, Profile
from . import Gtk, Gdk, UI_RESOURCES_PATH, LOCKED_ICON, HIDE_ICON, IPTV_ICON
-from .dialogs import show_dialog, DialogType, get_chooser_dialog
+from .dialogs import show_dialog, DialogType, get_chooser_dialog, WaitDialog
from .download_dialog import show_download_dialog
from .main_helper import edit_marker, insert_marker, move_items, rename, ViewTarget, set_flags, locate_in_services, \
scroll_to, get_base_model, update_picons, copy_picon_reference, assign_picon, remove_picon, search
@@ -156,6 +156,8 @@ class MainAppWindow:
self.__fav_view.connect("key-press-event", self.force_ctrl)
# Clipboard
self.__clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
+ # Wait dialog
+ self.__wait_dialog = WaitDialog(self.__main_window)
self.__main_window.show()
def init_drag_and_drop(self):
@@ -495,6 +497,7 @@ class MainAppWindow:
@run_idle
def open_data(self, data_path=None):
""" Opening data and fill views. """
+ self.__wait_dialog.show()
self.clear_current_data()
data_path = self.__options.get(self.__profile).get("data_dir_path") if data_path is None else data_path
@@ -510,6 +513,8 @@ class MainAppWindow:
"\n\nPlease, download files from receiver or setup your path for read data!")
except SyntaxError as e:
show_dialog(DialogType.ERROR, self.__main_window, str(e))
+ finally:
+ self.__wait_dialog.hide()
def append_blacklist(self, data_path):
black_list = get_blacklist(data_path)
diff --git a/app/ui/satellites_dialog.py b/app/ui/satellites_dialog.py
index 0c74abba..652d17e6 100644
--- a/app/ui/satellites_dialog.py
+++ b/app/ui/satellites_dialog.py
@@ -4,7 +4,7 @@ from math import fabs
from app.commons import run_idle
from app.eparser import get_satellites, write_satellites, Satellite, Transponder
from . import Gtk, Gdk, UI_RESOURCES_PATH
-from .dialogs import show_dialog, DialogType
+from .dialogs import show_dialog, DialogType, WaitDialog
from .main_helper import move_items, scroll_to
@@ -15,7 +15,7 @@ def show_satellites_dialog(transient, options):
class SatellitesDialog:
- __slots__ = ["_dialog", "_data_path", "_stores", "_options", "_sat_view"]
+ __slots__ = ["_dialog", "_data_path", "_stores", "_options", "_sat_view", "_wait_dialog"]
_aggr = [None for x in range(9)] # aggregate
@@ -50,6 +50,7 @@ class SatellitesDialog:
self._dialog.set_transient_for(transient)
self._dialog.get_content_area().set_border_width(0) # The width of the border around the app dialog area!
self._sat_view = builder.get_object("satellites_editor_tree_view")
+ self._wait_dialog = WaitDialog(self._dialog)
# Setting the last size of the dialog window if it was saved
window_size = self._options.get("sat_editor_window_size", None)
if window_size:
@@ -132,6 +133,7 @@ class SatellitesDialog:
def on_satellites_list_load(self, model):
""" Load satellites data into model """
try:
+ self._wait_dialog.show()
satellites = get_satellites(self._data_path)
except FileNotFoundError as e:
show_dialog(DialogType.ERROR, self._dialog, getattr(e, "message", str(e)) +
@@ -139,6 +141,8 @@ class SatellitesDialog:
else:
model.clear()
self.append_data(model, satellites)
+ finally:
+ self._wait_dialog.hide()
@run_idle
def append_data(self, model, satellites):
diff --git a/app/ui/service_details_dialog.glade b/app/ui/service_details_dialog.glade
index 6822f3eb..78089f11 100644
--- a/app/ui/service_details_dialog.glade
+++ b/app/ui/service_details_dialog.glade
@@ -220,7 +220,9 @@
True
True
True
+ Cancel
True
+ True
True
@@ -230,11 +232,14 @@
- gtk-apply
+ gtk-save
True
True
True
+ Save current service
True
+ True
+
True
@@ -242,6 +247,23 @@
1
+
+
+ gtk-new
+ True
+ True
+ True
+ Create and save as new service
+ True
+ True
+
+
+
+ True
+ True
+ 2
+
+
False
@@ -1341,6 +1363,7 @@
True
False
+ Save as new service
False
diff --git a/app/ui/service_details_dialog.py b/app/ui/service_details_dialog.py
index 766c0679..28e849f3 100644
--- a/app/ui/service_details_dialog.py
+++ b/app/ui/service_details_dialog.py
@@ -5,6 +5,7 @@ from app.commons import run_idle
from app.eparser import Service, get_satellites
from app.eparser.ecommons import MODULATION, Inversion, ROLL_OFF, Pilot
from app.properties import Profile
+from app.ui.dialogs import show_dialog, DialogType
from . import Gtk, UI_RESOURCES_PATH
from .main_helper import is_only_one_item_selected
@@ -29,7 +30,9 @@ def get_sat_positions(path):
class ServiceDetailsDialog:
def __init__(self, transient, options, view):
- handlers = {"on_system_changed": self.on_system_changed}
+ handlers = {"on_system_changed": self.on_system_changed,
+ "on_save": self.on_save,
+ "on_create_new": self.on_create_new}
builder = Gtk.Builder()
builder.add_from_file(UI_RESOURCES_PATH + "service_details_dialog.glade")
@@ -184,6 +187,16 @@ class ServiceDetailsDialog:
return response
+ def on_save(self, item):
+ show_dialog(DialogType.ERROR, transient=self._dialog, text="Not implemented yet!")
+ # if show_dialog(DialogType.QUESTION, self._dialog) == Gtk.ResponseType.CANCEL:
+ # return
+
+ def on_create_new(self, item):
+ show_dialog(DialogType.ERROR, transient=self._dialog, text="Not implemented yet!")
+ # if show_dialog(DialogType.QUESTION, self._dialog) == Gtk.ResponseType.CANCEL:
+ # return
+
if __name__ == "__main__":
dialog = ServiceDetailsDialog()