From 4f2a5676c1505a0292ae00018cbf59940d573cc4 Mon Sep 17 00:00:00 2001 From: Christian Moser Date: Sat, 18 Jan 2025 02:31:03 +0100 Subject: [PATCH] 2025.01.18 02:31:03 --- sgbackup/gui/_app.py | 75 ++++++++++++++++++++++++------------- sgbackup/gui/_gamedialog.py | 8 +++- 2 files changed, 57 insertions(+), 26 deletions(-) diff --git a/sgbackup/gui/_app.py b/sgbackup/gui/_app.py index d6d1347..aa75c25 100644 --- a/sgbackup/gui/_app.py +++ b/sgbackup/gui/_app.py @@ -52,6 +52,8 @@ class GameView(Gtk.ScrolledWindow): pass self.__liststore.append(g) + self.__action_dialog = None + factory_icon = Gtk.SignalListItemFactory.new() factory_icon.connect('setup',self._on_icon_column_setup) factory_icon.connect('bind',self._on_icon_column_bind) @@ -142,8 +144,6 @@ class GameView(Gtk.ScrolledWindow): game.bind_property('savegame_type',icon,'icon_name',BindingFlags.SYNC_CREATE,transform_to_icon_name) - - def _on_key_column_setup(self,factory,item): item.set_child(Gtk.Label()) @@ -215,6 +215,12 @@ class GameView(Gtk.ScrolledWindow): def _on_actions_column_setup(self,action,item): child = Gtk.Box.new(Gtk.Orientation.HORIZONTAL,2) + + icon = Gtk.Image.new_from_icon_name('document-save-symbolic') + child.backup_button = Gtk.Button() + child.backup_button.set_child(icon) + child.append(child.backup_button) + icon = Gtk.Image.new_from_icon_name('document-edit-symbolic') child.edit_button = Gtk.Button() child.edit_button.set_child(icon) @@ -231,18 +237,34 @@ class GameView(Gtk.ScrolledWindow): child = item.get_child() game = item.get_item() + child.backup_button.connect('clicked',self._on_columnview_backup_button_clicked,item) child.edit_button.connect('clicked',self._on_columnview_edit_button_clicked,item) child.remove_button.connect('clicked',self._on_columnview_remove_button_clicked,item) + def _on_columnview_backup_button_clicked(self,button,item): + def on_dialog_response(dialog,response): + dialog.hide() + dialog.destroy() + + game = item.get_item() + print('{}.{}._on_columnview_backup_button_clicked() -> {}'.format(__name__,__class__,game.name)) + def _on_columnview_edit_button_clicked(self,button,item): def on_dialog_response(dialog,response): if response == Gtk.ResponseType.APPLY: self.refresh() - - game = item.get_item() - dialog = GameDialog(self.get_root(),game) - dialog.connect('response',on_dialog_response) - dialog.present() + self.__action_dialog = None + + if self.__action_dialog is None: + game = item.get_item() + + self.__action_dialog = GameDialog(self.get_root(),game) + self.__action_dialog.set_modal(False) + self.__action_dialog.connect('response',on_dialog_response) + self.__action_dialog.present() + else: + self.__action_dialog.present() + def _on_columnview_remove_button_clicked(self,button,item): def on_dialog_response(dialog,response,game:Game): @@ -252,21 +274,26 @@ class GameView(Gtk.ScrolledWindow): for i in range(self._liststore.get_n_items()): item = self._liststore.get_item(i) if item.key == game.key: - self._liststore.remove_item(i) - return - + self._liststore.remove(i) + break + dialog.hide() dialog.destroy() + self.__action_dialog = None game = item.get_item() - dialog = Gtk.MessageDialog(buttons=Gtk.ButtonsType.YES_NO, - text="Do you really want to remove the game {game}?".format( - game=game.name), - use_markup=True, - secondary_text="Removing games cannot be undone!!!") - dialog.set_transient_for(self.get_root()) - dialog.connect('response',on_dialog_response,game) - dialog.present() + if self.__action_dialog is None: + self.__action_dialog = Gtk.MessageDialog(buttons=Gtk.ButtonsType.YES_NO, + text="Do you really want to remove the game {game}?".format( + game=game.name), + use_markup=True, + secondary_text="Removing games cannot be undone!!!") + self.__action_dialog.set_transient_for(self.get_root()) + self.__action_dialog.set_modal(False) + self.__action_dialog.connect('response',on_dialog_response,game) + self.__action_dialog.present() + else: + self.__action_dialog.present() # GameView class @@ -559,6 +586,7 @@ class AppWindow(Gtk.ApplicationWindow): """ refresh Refresh the views of this window. """ + GameManager.get_global().load() self.gameview.refresh() #self.backupview.refresh() @@ -673,15 +701,12 @@ class Application(Gtk.Application): def _on_action_quit(self,action,param): self.quit() - def _on_dialog_response_refresh(self,dialog,response,check_response): - if response == check_response: - self.appwindow.refresh() - def _on_action_new_game(self,action,param): + def on_dialog_apply(dialog): + self.appwindow.refresh() + dialog = GameDialog(self.appwindow) - dialog.connect('response', - self._on_dialog_response_refresh, - Gtk.ResponseType.APPLY) + dialog.connect('apply',on_dialog_apply) dialog.present() def _on_action_steam_manage_libraries(self,action,param): diff --git a/sgbackup/gui/_gamedialog.py b/sgbackup/gui/_gamedialog.py index 008d37d..afafe78 100644 --- a/sgbackup/gui/_gamedialog.py +++ b/sgbackup/gui/_gamedialog.py @@ -19,7 +19,7 @@ from .. import _import_gtk from gi.repository import Gio,GLib,Gtk,Pango -from gi.repository.GObject import Property,Signal,GObject,BindingFlags +from gi.repository.GObject import Property,Signal,GObject,BindingFlags,SignalFlags from ..game import ( Game, @@ -1330,5 +1330,11 @@ class GameDialog(Gtk.Dialog): def do_response(self,response): if (response == Gtk.ResponseType.APPLY): self.save() + self.emit('apply') + self.hide() self.destroy() + + @Signal(name='apply',flags=SignalFlags.RUN_FIRST,return_type=None,arg_types=()) + def do_apply(self): + pass