diff --git a/default.nix b/default.nix
index 42c7bae..cc97f35 100644
--- a/default.nix
+++ b/default.nix
@@ -18,6 +18,7 @@ pkgs.python3Packages.buildPythonApplication rec {
pkgs.bash
pkgs.coreutils
pkgs.gnused
+ pkgs.steamtinkerlaunch
];
propagatedBuildInputs = with pkgs.python3Packages; [
diff --git a/packages/linux/dev/PKGBUILD b/packages/linux/dev/PKGBUILD
index 24bdde0..7044b73 100644
--- a/packages/linux/dev/PKGBUILD
+++ b/packages/linux/dev/PKGBUILD
@@ -25,8 +25,9 @@ makedepends=(
'qt6-tools'
)
optdepends=(
- 'wine: Allow to launch non-Linux-native Minecraft LCE ports'
+ 'wine: Allow to launch non-Linux-native Minecraft LCE ports'
'steam: Allow for Steam integration'
+ 'steamtinkerlaunch: For better Stream integration on Linux'
)
provides=("${pkgname%-dev}" "${pkgname%-beta}" "${pkgname%}")
diff --git a/pyproject.toml b/pyproject.toml
index cee4754..342cf0b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -71,7 +71,6 @@ files = [
"src/lce_qt_launcher/views/term_service.py",
"src/lce_qt_launcher/views/cli.py",
"src/lce_qt_launcher/views/launcher.py",
- "src/lce_qt_launcher/views/theme.py",
"src/lce_qt_launcher/views/launcher.py",
"src/lce_qt_launcher/views/app_data.py",
"src/lce_qt_launcher/managers/__init__.py",
@@ -85,6 +84,7 @@ files = [
"src/lce_qt_launcher/models/__init__.py",
"src/lce_qt_launcher/models/image_class.py",
"src/lce_qt_launcher/models/preferences.py",
+ "src/lce_qt_launcher/models/theme.py",
"src/lce_qt_launcher/utils/__init__.py",
"src/lce_qt_launcher/utils/json_trans.py",
"src/lce_qt_launcher/utils/holyday.py",
diff --git a/src/lce_qt_launcher/app.py b/src/lce_qt_launcher/app.py
index 183bd95..9891e2c 100644
--- a/src/lce_qt_launcher/app.py
+++ b/src/lce_qt_launcher/app.py
@@ -6,13 +6,13 @@ from PySide6.QtWidgets import QApplication, QMessageBox
from lce_qt_launcher.app_context import AppContext
from lce_qt_launcher.models.app_data import AppData
from lce_qt_launcher.views.launcher import LauncherView
-from lce_qt_launcher.views.theme import Theme
+from lce_qt_launcher.models.theme import StrTheme
import lce_qt_launcher.views.term_service as term_service
class App(QApplication):
"""QApplication Main Instance"""
def __init__(self,
- theme : Theme,
+ theme : StrTheme,
appContext : AppContext,
argv : list[str] ) -> None:
super().__init__(argv)
@@ -26,7 +26,7 @@ class App(QApplication):
self.set_theme(theme)
- def set_theme(self, theme : Theme) -> None:
+ def set_theme(self, theme : StrTheme) -> None:
"""#Set Application Theme using a pretermined theme
#TODO To Upgrade!
"""
diff --git a/src/lce_qt_launcher/app_context.py b/src/lce_qt_launcher/app_context.py
index e06344f..04b03e5 100644
--- a/src/lce_qt_launcher/app_context.py
+++ b/src/lce_qt_launcher/app_context.py
@@ -9,11 +9,11 @@ from lce_qt_launcher.managers.system_manager import SystemManager
from lce_qt_launcher.models.preferences import UserPref
from lce_qt_launcher.build_info import BuildInfo
from lce_qt_launcher.managers.instance_manager import InstanceManager, Instance
-from lce_qt_launcher.views.theme import Theme
+from lce_qt_launcher.models.theme import StrTheme
from lce_qt_launcher.utils.json_trans import JsonTrans
_default_instance : Instance = Instance()
-_default_theme : Theme = Theme.MINECRAFT
+_default_theme : StrTheme = StrTheme.MINECRAFT
_default_language : str = "en"
class AppContext():
@@ -21,14 +21,14 @@ class AppContext():
"""
def __init__(self,
appData: AppData,
- theme : Theme = _default_theme,
+ theme : StrTheme = _default_theme,
instance : Instance = _default_instance,
lang : str = _default_language) -> None:
self.buildInfo: BuildInfo = BuildInfo()
self.sys_man: SystemManager = SystemManager()
self.userPref: UserPref = UserPref(self.buildInfo)
self.instanceMan: InstanceManager = InstanceManager(instance, self.buildInfo, self)
- self.theme: Theme = theme
+ self.theme: StrTheme = theme
self.translator: JsonTrans = JsonTrans(appData, lang)
self.accesibleModeEnabled : bool = self.userPref.default_accesibility_mode
self.devModeEnabled : bool = self.userPref.default_developper_mode
@@ -40,7 +40,7 @@ class AppContext():
self.MINECRAFT_WEBSITE : str = "https://minecraft.net"
self.MINECRAFT_LCE_WEBSITE : str = "https://minecraftlegacy.com/"
- def updateTheme(self, theme : Theme) -> None:
+ def updateTheme(self, theme : StrTheme) -> None:
"""_summary_ Update the theme
Args:
diff --git a/src/lce_qt_launcher/main.py b/src/lce_qt_launcher/main.py
index ed68c94..33d9219 100755
--- a/src/lce_qt_launcher/main.py
+++ b/src/lce_qt_launcher/main.py
@@ -47,8 +47,8 @@ from lce_qt_launcher.views.cmd_arg import CmdArgAction, parse_args, argsDetected
from lce_qt_launcher.app_context import AppContext
from lce_qt_launcher.app import App
from lce_qt_launcher.managers.system_manager import SystemManager
-from lce_qt_launcher.views.theme import Theme
-import lce_qt_launcher.views.theme as theme
+from lce_qt_launcher.models.theme import StrTheme
+import lce_qt_launcher.models.theme as theme
import sys
import os
@@ -74,7 +74,7 @@ def main() -> None:
accessible_mode: str = userPref.get_accesible_mode()
try:
- selected_theme: Theme = theme.from_str_to_theme(user_theme)
+ selected_theme: StrTheme = theme.from_str_to_strTheme(user_theme)
appContext.updateTheme(selected_theme)
appContext.updateShowHolidayStatus(show_holiday)
appContext.updateSetDevMoodeStatus(developer_mode)
diff --git a/src/lce_qt_launcher/managers/steam_manager.py b/src/lce_qt_launcher/managers/steam_manager.py
index 2ea1100..026bb55 100644
--- a/src/lce_qt_launcher/managers/steam_manager.py
+++ b/src/lce_qt_launcher/managers/steam_manager.py
@@ -22,8 +22,9 @@ from PySide6.QtWidgets import (
)
import argparse
-# import subprocess
-# import os
+import subprocess
+import platform
+import os
import sys
LEGAL_TEXT = """
@@ -33,7 +34,7 @@ LEGAL_TEXT = """
under certain conditions; type `show c' for details.
"""
-def add_instance_to_steam(instance_exe_path : str, instance_name : str, icon : str):
+def add_instance_to_steam(abs_instance_exe_path : str, instance_name : str, icon : str):
"""#TODO _summary_
#TODO Args:
@@ -42,7 +43,24 @@ def add_instance_to_steam(instance_exe_path : str, instance_name : str, icon : s
icon (str): _description_
"""
try:
- QMessageBox.critical(None, "Critical Error", "Not Implemented Yet")
+ try:
+ QMessageBox.warning(None, "Warning", "For this operation, it is recommended to close steam. ")
+ except RuntimeError:
+ input("Warning : For this operation, it is recommended to close steam.")
+ QMessageBox.warning(None, "Warning", "For this operation, it is recommended to close steam. ")
+ if platform.uname().system == "Linux":
+ subprocess.run(["steamtinkerlaunch", "ansg",
+ f"-an=\"Minecraft LCE ({instance_name}\"",
+ f"-ep=\"{abs_instance_exe_path}\"",
+ f"-ip={icon}"])
+ try:
+ QMessageBox.warning(None, "Warning", "This function is in work in progress and the id is not saved in the launcher. \n" \
+ "Until this is added, a manual intervention is needed to found the id and put in the save file. ")
+ except RuntimeError:
+ print("Warning : This function is in work in progress and the id is not saved in the launcher. \n" \
+ "Until this is added, a manual intervention is needed to found the id and put in the save file. ")
+ else :
+ QMessageBox.critical(None, "Critical Error", "Not Implemented Yet!")
except RuntimeError as err:
print(f"Error while adding program to steam : {err}")
diff --git a/src/lce_qt_launcher/models/preferences.py b/src/lce_qt_launcher/models/preferences.py
index 74432a0..17ef0f1 100644
--- a/src/lce_qt_launcher/models/preferences.py
+++ b/src/lce_qt_launcher/models/preferences.py
@@ -3,7 +3,7 @@
from PySide6.QtCore import QSettings
from lce_qt_launcher.build_info import BuildInfo
-from lce_qt_launcher.views.theme import Theme
+from lce_qt_launcher.models.theme import StrTheme
_THEME_OPTION : str = "customisation/theme"
_INSTANCE_PATH_OPTION : str = "preferences/default_path"
@@ -20,7 +20,7 @@ class UserPref (QSettings):
"""
def __init__(self, build_info : BuildInfo) -> None:
super().__init__(QSettings.Format.IniFormat, QSettings.Scope.UserScope, "Xgui4", build_info.app_name)
- self.default_theme : Theme = Theme.MINECRAFT
+ self.default_theme : StrTheme = StrTheme.MINECRAFT
self.default_instance_path : str = "~/.local/share/lce_qt_launcher/default"
self.default_language : str = "en"
self.default_show_holiday : bool = True
diff --git a/src/lce_qt_launcher/models/theme.py b/src/lce_qt_launcher/models/theme.py
new file mode 100644
index 0000000..445ea3a
--- /dev/null
+++ b/src/lce_qt_launcher/models/theme.py
@@ -0,0 +1,66 @@
+from ctypes import ArgumentError
+from enum import StrEnum, Enum
+
+class StrTheme(StrEnum):
+ """_summary_ The QtApp Stylesheet theme"""
+ MINECRAFT = ":/styles/minecraft.qss"
+ DARK = ":/styles/dark.qss"
+ LIGHT = ":/sytles/light.qss"
+ SYSTEM = "SYSTEM"
+
+class ThemeEntity(Enum):
+ """ TODO _summary_
+
+ Args:
+ Enum (_type_): _description_
+ """
+ DEFAULT = 0
+ MINECRAFT = 1
+ LIGHT = 2
+ DARK = 3
+ SYSTEM = 4
+
+def from_entity_to_strTheme(entity : ThemeEntity) -> StrTheme:
+ match entity:
+ case ThemeEntity.DEFAULT | ThemeEntity.MINECRAFT:
+ return StrTheme.MINECRAFT
+ case ThemeEntity.LIGHT:
+ return StrTheme.LIGHT
+ case ThemeEntity.DARK:
+ return StrTheme.DARK
+ case ThemeEntity.SYSTEM:
+ return StrTheme.SYSTEM
+
+def get_theme_file_name(strTheme : StrTheme) -> str:
+ """ TODO _summary_
+
+ Args:
+ strTheme (StrTheme): _description_
+
+ Returns:
+ _type_: _description_
+ """
+ match strTheme:
+ case StrTheme.MINECRAFT : return "minecraft.qss"
+ case StrTheme.DARK : return "dark.qss"
+ case StrTheme.LIGHT : return "light.qss"
+ case StrTheme.SYSTEM : return "SYSTEM"
+
+def from_str_to_strTheme(string : str) -> StrTheme:
+ """ TODO _summary_
+
+ Args:
+ string (str): _description_
+
+ Raises:
+ ArgumentError: _description_
+
+ Returns:
+ StrTheme: _description_
+ """
+ match string:
+ case ":/styles/minecraft.qss": return StrTheme.MINECRAFT
+ case ":/styles/dark.qss": return StrTheme.DARK
+ case ":/sytles/light.qss" : return StrTheme.LIGHT
+ case "": return StrTheme.SYSTEM
+ case _ : raise ArgumentError(f"{string} is not a valid theme")
\ No newline at end of file
diff --git a/src/lce_qt_launcher/views/setting_dialog.py b/src/lce_qt_launcher/views/setting_dialog.py
index f327070..4935106 100644
--- a/src/lce_qt_launcher/views/setting_dialog.py
+++ b/src/lce_qt_launcher/views/setting_dialog.py
@@ -1,5 +1,7 @@
-from PySide6.QtWidgets import QDialog, QWidget
+from PySide6.QtWidgets import QDialog, QWidget, QMessageBox
+from PySide6.QtCore import Qt
+import lce_qt_launcher.models.theme as theme
from lce_qt_launcher.ui_settingDialog import Ui_settingDialog
class SettingDialog(QDialog):
@@ -9,4 +11,18 @@ class SettingDialog(QDialog):
self.setting_dialog: QDialog = QDialog(parent)
self.ui_setting: Ui_settingDialog = ui_setting
self.ui_setting.setupUi(self.setting_dialog) # pyright: ignore[reportUnknownMemberType]
- self.setting_dialog.show()
\ No newline at end of file
+ self.setting_dialog.show()
+
+ def applyButtonCommand():
+ isDevelopperModeEnabled = self.ui_setting.developperModeDheckBox.isChecked()
+ isAccesbilityModeEnabled = self.ui_setting.accesibilitycheckBox.isChecked()
+ isHolidayEnabled = self.ui_setting.holydayDheckBox.isChecked()
+ themeSelectedIndex = self.ui_setting.themesComboBox.currentIndex()
+ languageSelectedIndex = self.ui_setting.languagesComboBox.currentData()
+ QMessageBox.information(self, "Setting", "Functionnal Setting Coming Later")
+
+ self.ui_setting.settingsOptions.accepted.connect(applyButtonCommand)
+
+ comingSoonMsgBox = lambda : QMessageBox().information(self, "Setting", "Not Implemented Yet!")
+
+ self.ui_setting.settingsOptions.helpRequested.connect(comingSoonMsgBox)
\ No newline at end of file
diff --git a/src/lce_qt_launcher/views/theme.py b/src/lce_qt_launcher/views/theme.py
deleted file mode 100644
index 2b8b8a5..0000000
--- a/src/lce_qt_launcher/views/theme.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from ctypes import ArgumentError
-from enum import StrEnum
-
-class Theme(StrEnum):
- """_summary_ The QtApp Stylesheet theme"""
- MINECRAFT = ":/styles/minecraft.qss"
- DARK = ":/styles/dark.qss"
- LIGHT = ":/sytles/light.qss"
- SYSTEM = ""
-
-def from_str_to_theme(string : str) -> Theme:
- match string:
- case ":/styles/minecraft.qss": return Theme.MINECRAFT
- case ":/styles/dark.qss": return Theme.DARK
- case ":/sytles/light.qss" : return Theme.LIGHT
- case "": return Theme.SYSTEM
- case _ : raise ArgumentError(f"{string} is not a valid theme")
\ No newline at end of file
diff --git a/src/settingDialog.ui b/src/settingDialog.ui
index 361401a..8a6f84f 100644
--- a/src/settingDialog.ui
+++ b/src/settingDialog.ui
@@ -16,9 +16,9 @@
- 30
+ 430
240
- 661
+ 261
32
@@ -26,7 +26,7 @@
Qt::Orientation::Horizontal
- QDialogButtonBox::StandardButton::Apply|QDialogButtonBox::StandardButton::Close|QDialogButtonBox::StandardButton::Help|QDialogButtonBox::StandardButton::RestoreDefaults
+ QDialogButtonBox::StandardButton::Apply|QDialogButtonBox::StandardButton::Close|QDialogButtonBox::StandardButton::Help