diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index bff9806..5e254b3 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -1,3 +1,3 @@
-blank_issues_enabled: true
+blank_issues_enabled: false
1-bug.yml
2-feature-request.yml
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index afaff2a..60f8d97 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -25,7 +25,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
with:
- python-version: "3.x"
+ python-version: "3.12.x"
- name: Install dependencies
run: |
diff --git a/src/ascii-art-text.png b/assets/ascii-art-text.png
similarity index 100%
rename from src/ascii-art-text.png
rename to assets/ascii-art-text.png
diff --git a/assets/pointer.png b/assets/pointer.png
new file mode 100644
index 0000000..f26583e
Binary files /dev/null and b/assets/pointer.png differ
diff --git a/assets/styles/dark.qss b/assets/styles/dark.qss
new file mode 100644
index 0000000..8e6a686
--- /dev/null
+++ b/assets/styles/dark.qss
@@ -0,0 +1,29 @@
+* {
+ color : white;
+ font-family : "Monocraft"
+}
+
+QPushButton {
+ color : black;
+ border : none;
+}
+
+QPushButton::pressed {
+ color : blue;
+ border : none;
+}
+
+QPushButton::hover {
+ color : gray;
+ border : none;
+}
+
+QMenuBar {
+ background-color : black
+}
+
+QSatusBar
+
+QLineEdit {
+ background : black;
+}
\ No newline at end of file
diff --git a/src/user_data.py b/assets/styles/light.qss
similarity index 100%
rename from src/user_data.py
rename to assets/styles/light.qss
diff --git a/assets/styles/minecraft.qss b/assets/styles/minecraft.qss
index df3034a..07d31dd 100644
--- a/assets/styles/minecraft.qss
+++ b/assets/styles/minecraft.qss
@@ -1,6 +1,6 @@
* {
color : white;
- font-family : "Monocraft"
+ font-family : "Monocraft";
}
QPushButton {
@@ -10,9 +10,30 @@ QPushButton {
QPushButton::pressed {
border-image : url(":/assets/button-pressed.png");
+ font : bold;
border : none;
}
+QPushButton::hover {
+ border-image : url(":/assets/button-pressed.png");
+ text-decoration : underline
+ border : none;
+}
+
+QPushButton::disabled {
+ border-image : url(":/assets/button.png");
+ color : black;
+ border : none;
+}
+
+QMenuBar {
+ background-color : black
+}
+
QLineEdit {
background : black;
+}
+
+QWidget {
+ background-color : black;
}
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index 0ffa374..d920f68 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,8 +1,13 @@
[project]
name = "LCE-Qt-Launcher"
version = "0.0.1"
-description = "This is a custom MCLCE Launcher written in python and Qt with Freedom and GNU/Linux support in mind."
+description = "This is a custom Free/Libre Minecraft LCE Launcher written in Python and Qt."
requires-python = "==3.12.*"
+license = {text = "GPLv3"}
+
+[project.urls]
+repository = "https://github.com/xgui4/LCE-QT-Launcher"
+license = "https://www.gnu.org/licenses/gpl-3.0"
dependencies = [
"pyside6",
@@ -21,7 +26,8 @@ files = [
"src/instance_manager.py",
"src/launcher.py",
"src/system_manager.py",
- "src/user_data.py",
+ "src/theme.py",
+ "src/setting_dialog.py",
"src/form.ui",
"src/system_info.ui",
"src/json_trans.py",
diff --git a/pysidedeploy.spec b/pysidedeploy.spec
index 1c318d1..b7532e0 100644
--- a/pysidedeploy.spec
+++ b/pysidedeploy.spec
@@ -7,7 +7,7 @@ title = LCE Qt Launcher
project_dir = .
# source file entry point path. default = main.py
-input_file = src/launcher.py
+input_file = src/main.py
# directory where the executable output is generated
exec_directory = output/
diff --git a/res.qrc b/res.qrc
index c180653..bc57bcb 100644
--- a/res.qrc
+++ b/res.qrc
@@ -9,8 +9,12 @@
assets/button.png
assets/button-pressed.png
assets/app.ico
+ assets/pointer.png
+ assets/ascii-art-text.png
- assets/styles/minecraft.qss
+ assets/styles/minecraft.qss
+ assets/styles/dark.qss
+ assets/styles/light.qss
diff --git a/src/build_info.py b/src/build_info.py
index ee4666a..6c2d205 100644
--- a/src/build_info.py
+++ b/src/build_info.py
@@ -12,7 +12,7 @@ _APP_NAME = "Minecraft LCE QT Launcher"
_VERSION_TYPE = "nighly"
_VERSION_NUMBER = "0.0.1"
_LICENSE = "GPLv3"
-_LICENSE_LINK = "https://www.gnu.org/licenses/gpl-3.0.en.html"
+_LICENSE_LINK = "https://www.gnu.org/licenses/gpl-3.0"
_GIT_REPO_URL = "https://github.com/xgui4/LCE-QT-Launcher"
_INSTANCE_EXTENSION = ".lce_inst"
@@ -49,11 +49,11 @@ def get_version_info():
return f"{branch}-{date_info}_{commit_hash}"
except Exception:
- return f"{_VERSION_TYPE} {_VERSION_NUMBER}"
+ return ""
class BuildInfo:
def __init__(self):
- self.version : str = _VERSION_NUMBER + "-" + get_version_info()
+ self.version : str = f"{_VERSION_TYPE} { _VERSION_NUMBER}-{get_version_info()}"
self.app_name : str = _APP_NAME
self.version_type : str = _VERSION_TYPE
self.license : str = _LICENSE
diff --git a/src/cli.py b/src/cli.py
index d8fd57d..dfcde46 100755
--- a/src/cli.py
+++ b/src/cli.py
@@ -5,6 +5,10 @@ from rich import print
from instance_manager import InstanceManager, Instance
+import build_info
+
+import os
+
MENU_STR = """
1. [bold green] Play [/bold green]
2. [bold green] Install [/bold green]
@@ -12,7 +16,10 @@ MENU_STR = """
"""
def launch_cli():
- image = from_file("/home/xgui4/Downloads/ascii-art-text.png")
+
+ ascii_art = os.path.join(build_info.get_assets_dir(), "ascii-art-text.png")
+
+ image = from_file(ascii_art)
image.draw()
diff --git a/src/main.py b/src/main.py
index c60aa3d..ae32a23 100755
--- a/src/main.py
+++ b/src/main.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-from PySide6.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QDialog, QMessageBox, QFileDialog, QInputDialog
+from PySide6.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QDialog, QMessageBox, QFileDialog, QInputDialog
from PySide6.QtGui import QPalette, QPixmap, QBrush
from PySide6.QtCore import qVersion
from user_pref import UserPref
@@ -9,6 +9,7 @@ from instance_manager import InstanceManager, Instance
from cmd_arg import CmdArgAction, parse_args, argsDetected
from browser_dialog import BrowserDialog
+from setting_dialog import SettingDialog
from cli import launch_cli
import sys
@@ -144,6 +145,9 @@ class launcher(QMainWindow):
file_name = QFileDialog.getSaveFileName(self, "Set the instance save file path to load", f"{buildInfo.system_manager.found_default_save_path }(\"LCE Instance Save File\" (*{buildInfo.instance_extension}))")
instanceManager.load_instance(file_name)
+ def show_setting_dialog(self):
+ SettingDialog(self)
+
def __init__(self, parent=None):
super().__init__(parent)
@@ -178,6 +182,7 @@ class launcher(QMainWindow):
self.ui.playButton.clicked.connect(self.launch)
self.ui.installButton.clicked.connect(self.install)
self.ui.confirmChangesButton.clicked.connect(self.confirm_changes_button)
+ self.ui.settingButton.clicked.connect(self.show_setting_dialog)
self.ui.actionQuit.triggered.connect(app.quit)
self.ui.actionUpdate.triggered.connect(self.update_page)
@@ -217,7 +222,7 @@ if __name__ == "__main__":
with open("assets/styles/minecraft.qss", "r") as file:
app.setStyleSheet(file.read())
except FileNotFoundError:
- print(f"Error : qrc:/styles/minecraft.qss file not found. Reverting to default theme")
+ print(f"Error : :/styles/minecraft.qss file not found. Reverting to default theme")
widget = launcher()
widget.show()
diff --git a/src/setting_dialog.py b/src/setting_dialog.py
new file mode 100644
index 0000000..a00c0b3
--- /dev/null
+++ b/src/setting_dialog.py
@@ -0,0 +1,15 @@
+from PySide6.QtWidgets import QDialog, QVBoxLayout, QLabel
+
+class SettingDialog(QDialog):
+ def __init__(self, parent):
+ setting_dialog = QDialog(parent)
+ layout = QVBoxLayout()
+
+ label = QLabel("Setting")
+ layout.addWidget(label)
+
+ label2 = QLabel("Coming Soon!")
+ layout.addWidget(label2)
+
+ setting_dialog.setLayout(layout)
+ setting_dialog.show()
\ No newline at end of file
diff --git a/src/system_manager.py b/src/system_manager.py
index 1f7bf3a..8e44456 100644
--- a/src/system_manager.py
+++ b/src/system_manager.py
@@ -19,21 +19,34 @@ class SystemManager():
self.name : str = None
self.version : str = None
- self.determine_os_type()
+ self.determine_os_info()
- def determine_os_type(self):
+ def determine_os_info(self):
if (platform.system() == "Linux") :
self.type = OperatingSystemType.LINUX
+ self.name = self.type.name
+ self.version = platform.version()
if (platform.system() == "Darwin") :
self.type = OperatingSystemType.MACOS
+ self.name = self.type.name
+ self.version = platform.mac_ver()
if (platform.system() == "Windows") :
self.type = OperatingSystemType.WINDOWS
+ self.name = self.type.name
+ self.version = platform.win32_ver()
if (platform.system() == "FreeBSD"):
self.type = OperatingSystemType.FREEBSD
+ self.name = self.type.name
+ self.version = platform.version()
if (platform.system() == "Android") :
self.type = OperatingSystemType.ANDROID
+ self.name = self.type.name
+ self.version = platform.version()
else:
self.type = OperatingSystemType.UNKNOWN
+ self.name = self.type.name
+ self.version = platform.version()
+
def set_file_permission(self, file_abs_path : str) -> str:
if self.type in [OperatingSystemType.LINUX, OperatingSystemType.FREEBSD, OperatingSystemType.MACOS]:
diff --git a/src/theme.py b/src/theme.py
new file mode 100644
index 0000000..2c566ab
--- /dev/null
+++ b/src/theme.py
@@ -0,0 +1,9 @@
+from enum import StrEnum
+
+class Theme(StrEnum):
+ MINECRAFT = ":/styles/minecraft.qss"
+ SYSTEM = ""
+ DARK = ":/styles/minecraft.qss"
+ LIGHT = ":/sytles/light.qss"
+ CUSTOM = ""
+
diff --git a/src/user_pref.py b/src/user_pref.py
index b60d42b..ec21ab3 100644
--- a/src/user_pref.py
+++ b/src/user_pref.py
@@ -1,58 +1,18 @@
from PySide6.QtCore import QSettings
+from theme import Theme
+
class UserPref (QSettings):
def __init__(self):
super().__init__(QSettings.NativeFormat, QSettings.UserScope, "Xgui4", "LCE-QT-Laucher")
- def set_instance_url(self, url_str : str):
- super().setValue("instances/repo", url_str)
- super().sync()
- def set_instance_exe_name(self, filename : str):
- super().setValue("instances/filename", filename)
+ def set_theme_pref(self, theme : str):
+ super().setValue("customisation/theme", theme)
super().sync()
- def set_instance_archive(self, archive : str):
- super().setValue("instances/archive", archive)
- super().sync()
-
- def set_instance_name(self, name : str):
- super().setValue("instances/name", name)
- super().sync()
-
- def set_instance_version(self, version : str):
- super().setValue("instances/version", version)
- super().sync()
-
- def set_profile_skin(self, skin_file_path : str):
- super().setValue("profiles/skin_file_path", skin_file_path)
- super().sync()
-
- def set_profile_name(self, name : str):
- super().setValue("profiles/name", name)
- super().sync()
-
- def get__instance_url(self) -> str:
- return self.value("instances/repo", "https://github.com/smartcmd/MinecraftConsoles");
- def get_instance_name(self) -> str:
- return self.value("instances/name", "default")
- def get_instance_exe_name(self) -> str:
- return self.value("instances/filename", "Minecraft.Client.exe")
- def get_instance_archive(self) -> str:
- return self.value("instances/archive", "LCEWindows64.zip")
- def get_instance_version(self) -> str:
- return self.value("instances/version", "default")
-
- def get_profile_skin(self) -> str:
- return self.value("profiles/skin_file_path", "default")
-
- def get_profile_name(self) -> str:
- return self.value("profiles/name", "default")
+ def get_theme_pref(self) -> str:
+ return self.value("ustomisation/theme", Theme.MINECRAFT);
def generate_default_config(self):
- self.set_instance_url("https://github.com/smartcmd/MinecraftConsoles")
- self.set_instance_name("default")
- self.set_instance_exe_name("Minecraft.Client.exe")
- self.set_instance_archive("LCEWindows64.zip")
- self.set_instance_version("nightly")
- self.set_profile_skin("default")
- self.set_profile_name("Steve")
+ super().setValue("customisation/theme", Theme.MINECRAFT)
+ super().sync()