mirror of
https://github.com/aclist/dztui.git
synced 2026-10-31 15:12:48 +01:00
feat: HeadingFrame class
This commit is contained in:
1 parent
2c07b8f3f2
commit
2dbdc3f928
4 files changed
+115
-20
No files matched your search
@@ -37,9 +37,9 @@ from gi.repository import Gtk, Gdk, GLib, GObject # noqa E402
|
|||||||
logger = logging.getLogger(APP_NAME)
|
logger = logging.getLogger(APP_NAME)
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
from dayzquery import DayzMod
|
||||||
from dzgui.api.servers import Record
|
from dzgui.api.servers import Record
|
||||||
from dzgui.const.enum import ServerTab
|
from dzgui.const.enum import ServerTab
|
||||||
from dzgui.lib.dayzquery import DayzMod
|
|
||||||
from dzgui.managers.filter import FilterManager
|
from dzgui.managers.filter import FilterManager
|
||||||
from dzgui.util.dist import Haversine
|
from dzgui.util.dist import Haversine
|
||||||
from dzgui.views.base import Notebook, Grid, OuterWindow
|
from dzgui.views.base import Notebook, Grid, OuterWindow
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
from dzgui.util import strings, css, open_links
|
||||||
|
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version("Gtk", "3.0")
|
||||||
|
from gi.repository import Gtk # noqa
|
||||||
|
|
||||||
|
class HeadingFrame(Gtk.Box):
|
||||||
|
def __init__(self, widget: Gtk.Widget, heading: str) -> None:
|
||||||
|
super().__init__(orientation=Gtk.Orientation.VERTICAL)
|
||||||
|
|
||||||
|
label = Gtk.Label(label=heading)
|
||||||
|
label.set_halign(Gtk.Align.START)
|
||||||
|
# TODO: rename selector
|
||||||
|
css.add_class(label, "settings-subheading")
|
||||||
|
|
||||||
|
frame = Gtk.Frame(hexpand=True)
|
||||||
|
frame.add(widget)
|
||||||
|
frame.set_label_widget(label)
|
||||||
|
|
||||||
|
self.add(frame)
|
||||||
@@ -9,6 +9,7 @@ from dzgui.util import strings, css, open_links
|
|||||||
from dzgui.views.components.labels import LeftLabel
|
from dzgui.views.components.labels import LeftLabel
|
||||||
from dzgui.views.components.eventbox import InfoEventBox
|
from dzgui.views.components.eventbox import InfoEventBox
|
||||||
from dzgui.views.components.buttons import WebButton
|
from dzgui.views.components.buttons import WebButton
|
||||||
|
from dzgui.views.components.frame import HeadingFrame
|
||||||
from dzgui.views.dialogs.generic import ExceptionDialog
|
from dzgui.views.dialogs.generic import ExceptionDialog
|
||||||
from dzgui.views.dialogs.link_dialog import WorkshopLinkDialog
|
from dzgui.views.dialogs.link_dialog import WorkshopLinkDialog
|
||||||
|
|
||||||
@@ -178,10 +179,10 @@ class Options(Gtk.Box):
|
|||||||
grid.attach(developers, 1, 0, self.DEFAULT_WIDTH, self.DEFAULT_HEIGHT)
|
grid.attach(developers, 1, 0, self.DEFAULT_WIDTH, self.DEFAULT_HEIGHT)
|
||||||
|
|
||||||
for frame in [
|
for frame in [
|
||||||
self.make_frame(api_box, strings.options.api_keys),
|
HeadingFrame(api_box, strings.options.api_keys),
|
||||||
self.make_frame(prefs_grid, strings.options.prefs),
|
HeadingFrame(prefs_grid, strings.options.prefs),
|
||||||
self.make_frame(mods_grid, strings.options.mods),
|
HeadingFrame(mods_grid, strings.options.mods),
|
||||||
self.make_frame(version_grid, strings.options.version),
|
HeadingFrame(version_grid, strings.options.version),
|
||||||
]:
|
]:
|
||||||
grid.attach(frame, col, row, self.DEFAULT_WIDTH, self.DEFAULT_HEIGHT)
|
grid.attach(frame, col, row, self.DEFAULT_WIDTH, self.DEFAULT_HEIGHT)
|
||||||
row += 1
|
row += 1
|
||||||
@@ -405,29 +406,16 @@ class Options(Gtk.Box):
|
|||||||
|
|
||||||
return hbox
|
return hbox
|
||||||
|
|
||||||
def make_frame(self, widget: Gtk.Widget, text: str) -> Gtk.Box:
|
|
||||||
label = Gtk.Label(label=text)
|
|
||||||
label.set_halign(Gtk.Align.START)
|
|
||||||
css.add_class(label, "settings-subheading")
|
|
||||||
|
|
||||||
frame = Gtk.Frame(hexpand=True)
|
|
||||||
frame.add(widget)
|
|
||||||
frame.set_label_widget(label)
|
|
||||||
|
|
||||||
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
|
||||||
box.add(frame)
|
|
||||||
|
|
||||||
return box
|
|
||||||
|
|
||||||
def populate_settings(self) -> None:
|
def populate_settings(self) -> None:
|
||||||
prefs = self.controller.get_prefs()
|
prefs = self.controller.get_prefs()
|
||||||
|
# NOTE: re-check in case file was removed by user between runs
|
||||||
if prefs.paths.config.is_file() is False:
|
if prefs.paths.config.is_file() is False:
|
||||||
# NOTE: in case file got deleted locally
|
|
||||||
dialog = ExceptionDialog(self.controller, strings.config_not_found)
|
dialog = ExceptionDialog(self.controller, strings.config_not_found)
|
||||||
dialog.run()
|
dialog.run()
|
||||||
raise Exception
|
raise Exception
|
||||||
|
|
||||||
config = query.get_config(prefs.paths.config)
|
config = query.get_config(prefs.paths.config)
|
||||||
|
# TODO: use newer config enums
|
||||||
name = config["name"]
|
name = config["name"]
|
||||||
default_steam_path = config["default_steam_path"]
|
default_steam_path = config["default_steam_path"]
|
||||||
steam = config["steam_api"]
|
steam = config["steam_api"]
|
||||||
@@ -435,6 +423,7 @@ class Options(Gtk.Box):
|
|||||||
install = config["auto_install"]
|
install = config["auto_install"]
|
||||||
|
|
||||||
steam_path = Path(default_steam_path)
|
steam_path = Path(default_steam_path)
|
||||||
|
# NOTE: this is a best effort guess at the most recent user
|
||||||
uid = find_user_id(steam_path)
|
uid = find_user_id(steam_path)
|
||||||
self.uid = "" if uid is None else uid
|
self.uid = "" if uid is None else uid
|
||||||
|
|
||||||
@@ -468,6 +457,7 @@ class Options(Gtk.Box):
|
|||||||
if field[0] == "":
|
if field[0] == "":
|
||||||
field[1].get_children()[1].set_sensitive(False)
|
field[1].get_children()[1].set_sensitive(False)
|
||||||
|
|
||||||
|
# TODO: abstract this logic
|
||||||
try:
|
try:
|
||||||
pe_file_path = PeFile.get_pefile_path(steam_path, APPID_DAYZ)
|
pe_file_path = PeFile.get_pefile_path(steam_path, APPID_DAYZ)
|
||||||
vers = PeFile.get_dayz_version(pe_file_path)
|
vers = PeFile.get_dayz_version(pe_file_path)
|
||||||
|
|||||||
@@ -0,0 +1,84 @@
|
|||||||
|
from typing import Any, TYPE_CHECKING
|
||||||
|
|
||||||
|
from dzgui.api import pefile as PeFile
|
||||||
|
from dzgui.const.constants import (
|
||||||
|
APPID_DAYZ,
|
||||||
|
APPID_DAYZ_EXP,
|
||||||
|
APPNAME_DAYZ,
|
||||||
|
APPNAME_DAYZ_EXP,
|
||||||
|
)
|
||||||
|
from dayzquery import DayzMod
|
||||||
|
from dzgui.views.components.frame import HeadingFrame
|
||||||
|
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version("Gtk", "3.0")
|
||||||
|
from gi.repository import Gtk # type: ignore # noqa E402
|
||||||
|
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from dzgui.controllers.mc import Controller
|
||||||
|
|
||||||
|
|
||||||
|
class PreConnectionAssistant(Gtk.Box):
|
||||||
|
def __init__(self, controller: "Controller") -> None:
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self.controller = controller
|
||||||
|
|
||||||
|
self.button_box = Gtk.Box(
|
||||||
|
orientation=Gtk.Orientation.HORIZONTAL,
|
||||||
|
halign=Gtk.Align.END,
|
||||||
|
valign=Gtk.Align.END,
|
||||||
|
hexpand=True,
|
||||||
|
spacing=10,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.rules: dict[Any]
|
||||||
|
self.mods: list["DayzMod"]
|
||||||
|
|
||||||
|
# TODO: pack in scrolled window
|
||||||
|
|
||||||
|
# TODO: strings
|
||||||
|
self.back = Gtk.Button(label="Back")
|
||||||
|
# TODO: dynamic button text if no mods needed
|
||||||
|
self.ok = Gtk.Button(label="Download mods and connect")
|
||||||
|
self.button_box.add(self.back)
|
||||||
|
self.button_box.add(self.ok)
|
||||||
|
|
||||||
|
self.ok.connect("clicked", self._on_ok_clicked)
|
||||||
|
self.back.connect("clicked", self._on_back_clicked)
|
||||||
|
|
||||||
|
self.warnings = []
|
||||||
|
# TODO: populate with strings and icons
|
||||||
|
# set visibility if warnings > 1
|
||||||
|
frame = HeadingFrame(Gtk.Label(label="ITEM ONE"), "Warnings")
|
||||||
|
self.add(frame)
|
||||||
|
|
||||||
|
self.add(self.button_box)
|
||||||
|
|
||||||
|
def _on_ok_clicked(self, button: Gtk.Button) -> None:
|
||||||
|
# TODO: update mod store in place with spinner/toast
|
||||||
|
# TODO: cancel mod downloads
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _on_back_clicked(self, button: Gtk.Button) -> None:
|
||||||
|
page = self.controller.get_prior_page()
|
||||||
|
self.controller.open_page(page)
|
||||||
|
|
||||||
|
def populate(self, res: dict[Any], mods: list["DayzMod"]) -> None:
|
||||||
|
# TODO: compare remote and local build versions
|
||||||
|
# try:
|
||||||
|
# pe_file_path = PeFile.get_pefile_path(steam_path, APPID_DAYZ)
|
||||||
|
# vers = PeFile.get_dayz_version(pe_file_path)
|
||||||
|
# dayz_version = PeFile.dayz_version_to_str(vers)
|
||||||
|
# except Exception:
|
||||||
|
# dayz_version = strings.null
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# exp_file_path = PeFile.get_pefile_path(steam_path, APPID_DAYZ_EXP)
|
||||||
|
# vers = PeFile.get_dayz_version(exp_file_path)
|
||||||
|
# dayz_exp_version = PeFile.dayz_version_to_str(vers)
|
||||||
|
# except Exception:
|
||||||
|
# dayz_exp_version = strings.null
|
||||||
|
pass
|
||||||
Reference in new issue
Block a user