Split config dialog classes in modules

This commit is contained in:
Mathieu Comandon 2018-12-21 02:26:14 -08:00
parent 1186e51caf
commit 39645c0a4a
13 changed files with 161 additions and 129 deletions

View file

@ -0,0 +1,2 @@
DIALOG_WIDTH = 780
DIALOG_HEIGHT = 560

View file

@ -0,0 +1,39 @@
from lutris.config import LutrisConfig, TEMP_CONFIG, make_game_config_id
from lutris.gui.widgets.dialogs import Dialog
from lutris.gui.config.common import GameDialogCommon
from lutris.gui.config import DIALOG_WIDTH, DIALOG_HEIGHT
class AddGameDialog(Dialog, GameDialogCommon):
"""Add game dialog class."""
def __init__(self, parent, game=None, runner=None, callback=None):
super().__init__("Add a new game", parent=parent)
self.game = game
self.saved = False
self.set_default_size(DIALOG_WIDTH, DIALOG_HEIGHT)
if game:
self.runner_name = game.runner_name
self.slug = game.slug
else:
self.runner_name = runner
self.slug = None
self.game_config_id = self.get_config_id()
self.lutris_config = LutrisConfig(
runner_slug=self.runner_name,
game_config_id=self.game_config_id,
level="game",
)
self.build_notebook()
self.build_tabs("game")
self.build_action_area(self.on_save, callback)
self.name_entry.grab_focus()
self.show_all()
def get_config_id(self):
"""For new games, create a special config type that won't be read
from disk.
"""
return make_game_config_id(self.slug) if self.slug else TEMP_CONFIG

View file

@ -1,14 +1,13 @@
"""Shared config dialog stuff"""
import os
from gi.repository import Gtk, Pango
from lutris import runners, settings
from lutris.config import LutrisConfig, TEMP_CONFIG, make_game_config_id
from lutris.game import Game
from lutris import gui
from lutris.config import LutrisConfig, TEMP_CONFIG
from lutris.gui.widgets.common import VBox, SlugEntry, NumberEntry, Label
from lutris.gui.config_boxes import GameBox, RunnerBox, SystemBox
from lutris.gui.dialogs import ErrorDialog
from lutris.gui.widgets.common import VBox, SlugEntry, NumberEntry, Label
from lutris.gui.widgets.dialogs import Dialog
from lutris import runners, settings
from lutris import gui
from lutris.gui.widgets.utils import (
get_pixbuf_for_game,
get_pixbuf,
@ -18,13 +17,18 @@ from lutris.gui.widgets.utils import (
from lutris.util.strings import slugify
from lutris.util import datapath, resources
DIALOG_WIDTH = 780
DIALOG_HEIGHT = 560
# pylint: disable=too-many-instance-attributes,missing-docstring
class GameDialogCommon:
"""Mixin for config dialogs"""
no_runner_label = "Select a runner in the Game Info tab"
def __init__(self):
self.notebook = None
self.vbox = None
self.name_entry = None
self.runner_box = None
@staticmethod
def build_scrolled_window(widget):
scrolled_window = Gtk.ScrolledWindow()
@ -456,101 +460,3 @@ class GameDialogCommon:
raise ValueError("Unsupported image type %s", image_type)
os.remove(dest_path)
self._set_image(image_type)
class AddGameDialog(Dialog, GameDialogCommon):
"""Add game dialog class."""
def __init__(self, parent, game=None, runner=None, callback=None):
super().__init__("Add a new game", parent=parent)
self.game = game
self.saved = False
self.set_default_size(DIALOG_WIDTH, DIALOG_HEIGHT)
if game:
self.runner_name = game.runner_name
self.slug = game.slug
else:
self.runner_name = runner
self.slug = None
self.game_config_id = self.get_config_id()
self.lutris_config = LutrisConfig(
runner_slug=self.runner_name,
game_config_id=self.game_config_id,
level="game",
)
self.build_notebook()
self.build_tabs("game")
self.build_action_area(self.on_save, callback)
self.name_entry.grab_focus()
self.show_all()
def get_config_id(self):
"""For new games, create a special config type that won't be read
from disk.
"""
return make_game_config_id(self.slug) if self.slug else TEMP_CONFIG
class EditGameConfigDialog(Dialog, GameDialogCommon):
"""Game config edit dialog."""
def __init__(self, parent, game, callback):
super().__init__("Configure %s" % game.name, parent=parent)
self.game = game
self.lutris_config = game.config
self.game_config_id = game.config.game_config_id
self.slug = game.slug
self.runner_name = game.runner_name
self.set_default_size(DIALOG_WIDTH, DIALOG_HEIGHT)
self.build_notebook()
self.build_tabs("game")
self.build_action_area(self.on_save, callback)
self.show_all()
class RunnerConfigDialog(Dialog, GameDialogCommon):
"""Runner config edit dialog."""
def __init__(self, runner, parent=None):
self.runner_name = runner.__class__.__name__
super().__init__("Configure %s" % runner.human_name, parent=parent)
self.game = None
self.saved = False
self.lutris_config = LutrisConfig(runner_slug=self.runner_name)
self.set_default_size(DIALOG_WIDTH, DIALOG_HEIGHT)
self.build_notebook()
self.build_tabs("runner")
self.build_action_area(self.on_save)
self.show_all()
def on_save(self, wigdet, data=None):
self.lutris_config.save()
self.destroy()
class SystemConfigDialog(Dialog, GameDialogCommon):
def __init__(self, parent=None):
super().__init__("System preferences", parent=parent)
self.game = None
self.runner_name = None
self.lutris_config = LutrisConfig()
self.set_default_size(DIALOG_WIDTH, DIALOG_HEIGHT)
self.system_box = SystemBox(self.lutris_config)
self.system_sw = self.build_scrolled_window(self.system_box)
self.vbox.pack_start(self.system_sw, True, True, 0)
self.build_action_area(self.on_save)
self.show_all()
def on_save(self, widget):
self.lutris_config.save()
self.destroy()

View file

@ -0,0 +1,22 @@
from lutris.gui.widgets.dialogs import Dialog
from lutris.gui.config.common import GameDialogCommon
from lutris.gui.config import DIALOG_WIDTH, DIALOG_HEIGHT
class EditGameConfigDialog(Dialog, GameDialogCommon):
"""Game config edit dialog."""
def __init__(self, parent, game, callback):
super().__init__("Configure %s" % game.name, parent=parent)
self.game = game
self.lutris_config = game.config
self.game_config_id = game.config.game_config_id
self.slug = game.slug
self.runner_name = game.runner_name
self.set_default_size(DIALOG_WIDTH, DIALOG_HEIGHT)
self.build_notebook()
self.build_tabs("game")
self.build_action_area(self.on_save, callback)
self.show_all()

View file

View file

@ -0,0 +1,27 @@
from lutris.config import LutrisConfig
from lutris.gui.widgets.dialogs import Dialog
from lutris.gui.config.common import GameDialogCommon
from lutris.gui.config import DIALOG_WIDTH, DIALOG_HEIGHT
class RunnerConfigDialog(Dialog, GameDialogCommon):
"""Runner config edit dialog."""
def __init__(self, runner, parent=None):
self.runner_name = runner.__class__.__name__
super().__init__("Configure %s" % runner.human_name, parent=parent)
self.game = None
self.saved = False
self.lutris_config = LutrisConfig(runner_slug=self.runner_name)
self.set_default_size(DIALOG_WIDTH, DIALOG_HEIGHT)
self.build_notebook()
self.build_tabs("runner")
self.build_action_area(self.on_save)
self.show_all()
def on_save(self, wigdet, data=None):
self.lutris_config.save()
self.destroy()

View file

@ -0,0 +1,26 @@
from lutris.config import LutrisConfig
from lutris.gui.widgets.dialogs import Dialog
from lutris.gui.config.common import GameDialogCommon
from lutris.gui.config_boxes import SystemBox
from lutris.gui.config import DIALOG_WIDTH, DIALOG_HEIGHT
class SystemConfigDialog(Dialog, GameDialogCommon):
def __init__(self, parent=None):
super().__init__("System preferences", parent=parent)
self.game = None
self.runner_name = None
self.lutris_config = LutrisConfig()
self.set_default_size(DIALOG_WIDTH, DIALOG_HEIGHT)
self.system_box = SystemBox(self.lutris_config)
self.system_sw = self.build_scrolled_window(self.system_box)
self.vbox.pack_start(self.system_sw, True, True, 0)
self.build_action_area(self.on_save)
self.show_all()
def on_save(self, widget):
self.lutris_config.save()
self.destroy()

View file

@ -9,7 +9,7 @@ from lutris import api, pga, settings
from lutris.installer import interpreter
from lutris.installer.errors import ScriptingError
from lutris.game import Game
from lutris.gui.config_dialogs import AddGameDialog
from lutris.gui.config.add_game import AddGameDialog
from lutris.gui.dialogs import NoInstallerDialog, DirectoryDialog, InstallerSourceDialog
from lutris.gui.widgets.download_progress import DownloadProgressBox
from lutris.gui.widgets.common import FileChooserEntry
@ -28,12 +28,12 @@ class InstallerWindow(Gtk.ApplicationWindow):
download_progress = None
def __init__(
self,
game_slug=None,
installer_file=None,
revision=None,
parent=None,
application=None,
self,
game_slug=None,
installer_file=None,
revision=None,
parent=None,
application=None,
):
Gtk.ApplicationWindow.__init__(self, application=application)
self.set_default_icon_name("lutris")

View file

@ -37,11 +37,9 @@ from lutris.gui.sync import SyncServiceWindow
from lutris.gui.runnersdialog import RunnersDialog
from lutris.gui.installerwindow import InstallerWindow
from lutris.gui.uninstallgamedialog import UninstallGameDialog
from lutris.gui.config_dialogs import (
AddGameDialog,
EditGameConfigDialog,
SystemConfigDialog,
)
from lutris.gui.config.add_game import AddGameDialog
from lutris.gui.config.edit_game import EditGameConfigDialog
from lutris.gui.config.system import SystemConfigDialog
from lutris.gui.gameviews import GameListView, GameGridView, ContextualMenu, GameStore
from lutris.gui.widgets.utils import IMAGE_SIZES

View file

@ -10,7 +10,7 @@ from lutris import settings
from lutris.util.log import logger
from lutris.gui.util import open_uri
from lutris.gui.dialogs import ErrorDialog, GtkBuilderDialog, DownloadDialog
from lutris.gui.config_dialogs import RunnerConfigDialog
from lutris.gui.config.runner import RunnerConfigDialog
from lutris.gui.runnerinstalldialog import RunnerInstallDialog
from lutris.gui.widgets.utils import get_icon, ICON_SIZE, get_builder_from_file

View file

@ -7,7 +7,7 @@ from lutris import platforms
from lutris import pga
from lutris.util import datapath
from lutris.gui.runnerinstalldialog import RunnerInstallDialog
from lutris.gui.config_dialogs import RunnerConfigDialog
from lutris.gui.config.runner import RunnerConfigDialog
from lutris.gui.runnersdialog import RunnersDialog
TYPE = 0

View file

@ -25,10 +25,21 @@ setup(
license='GPL-3',
author='Mathieu Comandon',
author_email='strider@strycore.com',
packages=['lutris', 'lutris.gui', 'lutris.gui.widgets', 'lutris.util',
'lutris.util.steam', 'lutris.util.wine', 'lutris.runners',
'lutris.runners.commands', 'lutris.services', 'lutris.installer',
'lutris.migrations', 'lutris.vendor'],
packages=[
'lutris',
'lutris.gui',
'lutris.gui.widgets',
'lutris.gui.config',
'lutris.installer',
'lutris.migrations',
'lutris.runners',
'lutris.runners.commands',
'lutris.services',
'lutris.util',
'lutris.util.steam',
'lutris.util.wine',
'lutris.vendor'
],
scripts=['bin/lutris'],
data_files=data_files,
zip_safe=False,

View file

@ -3,12 +3,13 @@ import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gio, Gtk
from gi.repository import Gtk
from lutris.game import Game
from lutris.config import check_config
# from lutris import settings
from lutris import pga
from lutris.gui import config_dialogs
from lutris.gui.config.common import GameDialogCommon
from lutris.gui.config.add_game import AddGameDialog
from lutris.gui.application import Application
from unittest import TestCase
from lutris import runners
@ -18,7 +19,7 @@ TEST_PGA_PATH = os.path.join(os.path.dirname(__file__), 'pga.db')
class TestGameDialogCommon(TestCase):
def test_get_runner_liststore(self):
dlg = config_dialogs.GameDialogCommon()
dlg = GameDialogCommon()
list_store = dlg._get_runner_liststore()
self.assertTrue(
list_store[1][0].startswith(runners.get_installed()[0].human_name)
@ -31,7 +32,7 @@ class TestGameDialog(TestCase):
check_config()
lutris_application = Application()
lutris_window = lutris_application.window
self.dlg = config_dialogs.AddGameDialog(lutris_window)
self.dlg = AddGameDialog(lutris_window)
def get_notebook(self):
return self.dlg.vbox.get_children()[0]