2025.01.08 10:09:55

This commit is contained in:
Christian Moser 2025-01-08 10:09:55 +01:00
parent e4ec86195a
commit 0f6f3c1444
3 changed files with 67 additions and 37 deletions

View File

@ -16,7 +16,8 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>. # # along with this program. If not, see <https://www.gnu.org/licenses/>. #
############################################################################### ###############################################################################
from gi.repository import Gtk,GObject,Gio,Gdk from gi.repository import Gtk,Gio,Gdk
from gi.repository.GObject import GObject,Signal,Property,SignalFlags
import logging; logger=logging.getLogger(__name__) import logging; logger=logging.getLogger(__name__)
@ -24,27 +25,29 @@ import os
from datetime import datetime as DateTime from datetime import datetime as DateTime
from pathlib import Path from pathlib import Path
from .. import game
from ..settings import settings from ..settings import settings
from ._settingsdialog import SettingsDialog from ._settingsdialog import SettingsDialog
from ._gamedialog import GameDialog from ._gamedialog import GameDialog
from ..game import Game from ..game import Game,GameManager
__gtype_name__ = __name__ __gtype_name__ = __name__
class GameView(Gtk.ScrolledWindow): class GameView(Gtk.ScrolledWindow):
__gtype_name__ = "GameView"
def __init__(self):
""" """
GameView The View for games. GameView The View for games.
This is widget presents a clumnview for the installed games. This is widget presents a clumnview for the installed games.
""" """
__gtype_name__ = "GameView"
def __init__(self):
"""
GameView
"""
Gtk.ScrolledWindow.__init__(self) Gtk.ScrolledWindow.__init__(self)
self.__liststore = Gio.ListStore.new(game.Game) self.__liststore = Gio.ListStore.new(game.Game)
for g in game.GameManager.get_global().games.values(): for g in GameManager.get_global().games.values():
pass pass
self.__liststore.append(g) self.__liststore.append(g)
@ -82,13 +85,34 @@ class GameView(Gtk.ScrolledWindow):
self.set_child(self._columnview) self.set_child(self._columnview)
@property @property
def _liststore(self): def _liststore(self)->Gio.ListStore:
"""
The `Gio.ListStore` that holds the list of installed games.
:type: Gio.ListStore
"""
return self.__liststore return self.__liststore
@property @property
def _columnview(self)->Gtk.ColumnView: def columnview(self)->Gtk.ColumnView:
"""
columnview The `Gtk.ColumnView` of the widget.
:type: Gtk.ColumnView
"""
return self.__columnview return self.__columnview
def refresh(self):
"""
refresh Refresh the view.
This method reloads the installed Games.
"""
self.__liststore.remove_all()
for game in GameManager.get_global().games.values():
self.__liststore.append(game)
def _on_key_column_setup(self,factory,item): def _on_key_column_setup(self,factory,item):
item.set_child(Gtk.Label()) item.set_child(Gtk.Label())
@ -160,6 +184,13 @@ class GameView(Gtk.ScrolledWindow):
@property @property
def current_game(self)->Game|None: def current_game(self)->Game|None:
"""
current_game Get the currently selected `Game`
If no `Game` is selected this property resolves to `Null`
:type: Game|None
"""
selection = self._columnview.get_model() selection = self._columnview.get_model()
pos = selection.get_selected() pos = selection.get_selected()
if pos == Gtk.INVALID_LIST_POSITION: if pos == Gtk.INVALID_LIST_POSITION:
@ -168,8 +199,8 @@ class GameView(Gtk.ScrolledWindow):
# GameView class # GameView class
class BackupViewData(GObject.GObject): class BackupViewData(GObject):
def __init__(self,_game:game.Game,filename:str): def __init__(self,_game:Game,filename:str):
GObject.GObject.__init__(self) GObject.GObject.__init__(self)
self.__game = _game self.__game = _game
self.__filename = filename self.__filename = filename
@ -183,26 +214,26 @@ class BackupViewData(GObject.GObject):
self.__extension = '.' + parts[3:] self.__extension = '.' + parts[3:]
@property @property
def game(self)->game.Game: def game(self)->Game:
return self.__game return self.__game
@GObject.Property @Property
def savegame_name(self): def savegame_name(self):
return self.__savegame_name return self.__savegame_name
@GObject.Property(type=str) @Property(type=str)
def filename(self)->str: def filename(self)->str:
return self.__filename return self.__filename
@GObject.Property(type=bool,default=False) @Property(type=bool,default=False)
def is_live(self)->bool: def is_live(self)->bool:
pass pass
@GObject.Property @Property
def extension(self): def extension(self):
return self.__extension return self.__extension
@GObject.Property @Property
def timestamp(self): def timestamp(self):
return self.__timestamp return self.__timestamp
@ -240,7 +271,7 @@ class BackupView(Gtk.ScrolledWindow):
self.__columnview.append_column(timestamp_column) self.__columnview.append_column(timestamp_column)
self._on_gameview_selection_changed(selection) self._on_gameview_selection_changed(selection)
self.gameview._columnview.get_model().connect('selection-changed',self._on_gameview_selection_changed) self.gameview.columnview.get_model().connect('selection-changed',self._on_gameview_selection_changed)
self.set_child(self.__columnview) self.set_child(self.__columnview)
@ -357,18 +388,21 @@ class AppWindow(Gtk.ApplicationWindow):
self.set_child(vbox) self.set_child(vbox)
@GObject.Property @property
def builder(self): def builder(self):
return self.__builder return self.__builder
@GObject.Property @property
def backupview(self): def backupview(self):
return self.__backupview return self.__backupview
@GObject.Property @property
def gameview(self): def gameview(self):
return self.__gameview return self.__gameview
def refresh(self):
self.gameview.refresh()
#self.backupview.refresh()
class Application(Gtk.Application): class Application(Gtk.Application):
__gtype_name__ = "Application" __gtype_name__ = "Application"
@ -387,7 +421,7 @@ class Application(Gtk.Application):
def _logger(self): def _logger(self):
return self.__logger return self.__logger
@GObject.Property @property
def appwindow(self): def appwindow(self):
return self.__appwindow return self.__appwindow
@ -424,7 +458,7 @@ class Application(Gtk.Application):
# add accels # add accels
self.set_accels_for_action('app.quit',["<Primary>q"]) self.set_accels_for_action('app.quit',["<Primary>q"])
@GObject.Property @Property
def builder(self): def builder(self):
return self.__builder return self.__builder
@ -448,7 +482,8 @@ class Application(Gtk.Application):
def on_action_new_game(self,action,param): def on_action_new_game(self,action,param):
def on_reponse(dialog,response): def on_reponse(dialog,response):
dialog.destroy() if response == Gtk.RESPONSE_APPLY:
self.appwindow.resfresh()
dialog = GameDialog(self.appwindow) dialog = GameDialog(self.appwindow)
dialog.connect('response',on_reponse) dialog.connect('response',on_reponse)
@ -459,8 +494,8 @@ class Application(Gtk.Application):
self.emit('settings-dialog-init',dialog) self.emit('settings-dialog-init',dialog)
return dialog return dialog
@GObject.Signal(name='settings-dialog-init', @Signal(name='settings-dialog-init',
flags=GObject.SignalFlags.RUN_LAST, flags=SignalFlags.RUN_LAST,
return_type=None, return_type=None,
arg_types=(SettingsDialog,)) arg_types=(SettingsDialog,))
def do_settings_dialog_init(self,dialog): def do_settings_dialog_init(self,dialog):

View File

@ -2,17 +2,8 @@
Applicaction Applicaction
============ ============
Applicaction
------------
.. autoclass:: sgbackup.gui.Application .. autoclass:: sgbackup.gui.Application
:members: :members:
:undoc-members: :undoc-members:
Application Window
------------------
.. autoclass:: sgbackup.gui.AppWindow
:members:
:undoc-members:

View File

@ -2,6 +2,10 @@
Widgets Widgets
======= =======
.. autoclass:: sgbackup.gui.AppWindow
:members:
:undoc-members:
.. autoclass:: sgbackup.gui.GameView .. autoclass:: sgbackup.gui.GameView
:members: :members:
:undoc-members: :undoc-members: