make import remeber the inst + functonnal instance lists

This commit is contained in:
xgui4
2026-05-01 18:59:56 -04:00
parent 19ab5e198e
commit 226b1393ef
5 changed files with 88 additions and 29 deletions

View File

@@ -33,9 +33,9 @@
<property name="contextMenuPolicy">
<enum>Qt::ContextMenuPolicy::ActionsContextMenu</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTabWidget" name="mainWidget">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QTabWidget" name="instancesListWidget">
<property name="enabled">
<bool>true</bool>
</property>
@@ -58,7 +58,7 @@
<enum>QTabWidget::TabShape::Rounded</enum>
</property>
<property name="currentIndex">
<number>0</number>
<number>1</number>
</property>
<property name="usesScrollButtons">
<bool>false</bool>
@@ -420,10 +420,7 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="instancesListTab">
<property name="enabled">
<bool>false</bool>
</property>
<widget class="QWidget" name="InstancesList">
<attribute name="icon">
<iconset resource="../res.qrc">
<normaloff>:/assets/chest.png</normaloff>:/assets/chest.png</iconset>
@@ -431,14 +428,39 @@
<attribute name="title">
<string>Instances Lists</string>
</attribute>
<layout class="QVBoxLayout" name="InstancesListTabMasterLayout">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QWidget" name="defaulInstancesListWidget" native="true">
<property name="enabled">
<bool>false</bool>
</property>
<layout class="QHBoxLayout" name="defaultInstancesListLayout"/>
</widget>
<layout class="QVBoxLayout" name="InstancesListLayout">
<item>
<widget class="QListWidget" name="listWidget">
<property name="font">
<font>
<pointsize>24</pointsize>
<bold>true</bold>
<underline>false</underline>
</font>
</property>
<property name="frameShape">
<enum>QFrame::Shape::NoFrame</enum>
</property>
<property name="iconSize">
<size>
<width>30</width>
<height>30</height>
</size>
</property>
<property name="resizeMode">
<enum>QListView::ResizeMode::Fixed</enum>
</property>
<property name="itemAlignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
<property name="supportedDragActions">
<set>Qt::DropAction::ActionMask</set>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>

View File

@@ -14,8 +14,10 @@ from PySide6.QtWidgets import (
from lce_qt_launcher.app_context import AppContext
from lce_qt_launcher.build_info import BuildInfo
from lce_qt_launcher.managers import import_managers
from lce_qt_launcher.managers.instance_manager import Instance, InstanceManager
from lce_qt_launcher.managers.system_manager import SystemManager
from lce_qt_launcher.models.app_data import AppData
from lce_qt_launcher.models.preferences import UserPref
from lce_qt_launcher.ui_settingDialog import Ui_settingDialog
from lce_qt_launcher.views.browser_dialog import BrowserDialog
@@ -82,13 +84,14 @@ def show_instance_editor(parent : QWidget) -> None:
"""Features : Open the Instance Editor"""
parent.instance_window.show()
def load_instance(parent : QWidget, instanceManager : InstanceManager, appContext: AppContext, buildInfo : BuildInfo) -> None:
def load_instance(parent : QWidget, instanceManager : InstanceManager, appContext: AppContext, buildInfo : BuildInfo, appData : AppData) -> None:
"""Features : Load the Selected Instance"""
file_name: tuple[str, str] = QFileDialog.getOpenFileName(
parent, "Load Instance File",
appContext.sys_man.found_default_save_path(),
f"{buildInfo.app_name} Instance (*{buildInfo.instance_extension})")
instanceManager.load_instance(file_name[0])
import_managers.import_inst_file_to_app_data(file_name[0], appData)
def show_about_qt(parent : QWidget) -> None:
"""Features : Load the Selected Instance"""

View File

@@ -0,0 +1,12 @@
from lce_qt_launcher.models.app_data import AppData
from pathlib import Path
import os
def import_inst_file_to_app_data(instance_file_path : str, appData : AppData, filename : str = ""):
if filename == "":
filename_Path = Path(f"{instance_file_path}")
filename = filename_Path.name
destinations = os.path.join(appData.appDataDirs[0], "instances", filename)
os.symlink(instance_file_path, destinations)

View File

@@ -9,6 +9,8 @@ from pathlib import Path
import json
import os
from lce_qt_launcher.views import term_service
def _is_compiled() -> bool:
return "__compiled__" in globals()
@@ -37,7 +39,15 @@ class AppData(QObject):
#TODO : docstring
"""
defaults_insts_dir : Path = Path(os.path.join(self.appDataDirs[0], "instances"))
print(defaults_insts_dir)
if not defaults_insts_dir.exists():
term_service.print_information(f"{defaults_insts_dir} did not exist. Trying to recreate it.")
try:
os.makedirs(defaults_insts_dir)
except OSError:
term_service.print_error("An OS error have occured : {OSError}")
except RuntimeError:
term_service.print_error("An une error have occured : {RuntineError}")
return
instancesLists : list[Instance] = []
for file_path in defaults_insts_dir.iterdir():
@@ -49,7 +59,9 @@ class AppData(QObject):
new_inst.load_inst_from_dict(context_dict)
instancesLists.append(new_inst)
except (json.JSONDecodeError, OSError, ValueError):
continue
term_service.print_error(f"Cannot decode JSON {OSError} {ValueError} {json.JSONDecodeError}")
else:
term_service.print_information(f"{file_path} was not a file.")
self.instsList = instancesLists
def _get_source_dir(self) -> str:
@@ -98,7 +110,7 @@ class AppData(QObject):
Returns:
str: _description_
"""
dirs: PlatformDirs = PlatformDirs("Xgui4", "LCE-Qt-Launcher")
dirs: PlatformDirs = PlatformDirs("LCE-Qt-Launcher", "Xgui4")
return dirs.user_data_dir
def _get_site_app_data_dir(self) -> str:
@@ -107,7 +119,7 @@ class AppData(QObject):
Returns:
str: _description_
"""
dirs: PlatformDirs = PlatformDirs("Xgui4", "LCE-Qt-Launcher")
dirs: PlatformDirs = PlatformDirs("LCE-Qt-Launcher", "Xgui4")
return dirs.site_data_dir
def _get_app_cache_dir(self) -> str:
@@ -116,7 +128,7 @@ class AppData(QObject):
Returns:
str: _description_
"""
dirs: PlatformDirs = PlatformDirs("Xgui4", "LCE-Qt-Launcher")
dirs: PlatformDirs = PlatformDirs("LCE-Qt-Launcher", "Xgui4")
return dirs.user_cache_dir
def _get_app_log_dir(self) -> str:
@@ -125,7 +137,7 @@ class AppData(QObject):
Returns:
str: _description_
"""
dirs: PlatformDirs = PlatformDirs("Xgui4", "LCE-Qt-Launcher")
dirs: PlatformDirs = PlatformDirs("LCE-Qt-Launcher", "Xgui4")
return dirs.user_log_dir
def _get_app_config_dir(self) -> str:
@@ -134,5 +146,5 @@ class AppData(QObject):
Returns:
str: _description_
"""
dirs: PlatformDirs = PlatformDirs("Xgui4", "LCE-Qt-Launcher")
dirs: PlatformDirs = PlatformDirs("LCE-Qt-Launcher", "Xgui4")
return dirs.user_config_dir

View File

@@ -2,15 +2,17 @@ from PySide6.QtWidgets import (
QApplication,
QMainWindow,
QLabel,
QDialog
QDialog,
QListWidgetItem
)
from PySide6.QtGui import (
QPalette,
QPixmap,
QPixmap,
QBrush
)
from PySide6.QtCore import (
qVersion
qVersion,
Qt
)
import sys
@@ -22,7 +24,7 @@ from pathlib import Path
from lce_qt_launcher.managers.system_manager import SystemManager
from lce_qt_launcher.app_context import AppContext
from lce_qt_launcher.managers.instance_manager import InstanceManager
from lce_qt_launcher.managers.instance_manager import Instance, InstanceManager
from lce_qt_launcher.build_info import BuildInfo
from lce_qt_launcher.models.app_data import AppData
from lce_qt_launcher.ui_about import Ui_AboutDialog
@@ -118,7 +120,7 @@ class Launcher(QMainWindow):
def load_instance() -> None:
"""_summary_ Open the Load Save File Dialog
"""
features.load_instance(self, instanceManager, appContext, buildInfo)
features.load_instance(self, instanceManager, appContext, buildInfo, appData)
self.image_label = instanceManager.instance.image
self.news_feed = instanceManager.instance.news_feed
self.instance_name = instanceManager.instance.name
@@ -128,7 +130,7 @@ class Launcher(QMainWindow):
pixmap = QPixmap(self.image_label)
self.ui.instance_img.setPixmap(pixmap)
self.ui.repo_name_branch.setText(self.instance_name)
self.ui.newsEngineView.setUrl(self.news_feed)
self.ui.newsEngineView.setUrl(self.news_feed)
def show_setting_dialog() -> None:
"""_summary_ Show the setting Dialog
@@ -264,7 +266,15 @@ class Launcher(QMainWindow):
open_github_issues = lambda : webbrowser.open(appContext.buildInfo.git_repo_url + "/issues")
_ = self.ui.actionReport_a_Bugs_or_Sugess_a_feature.triggered.connect(open_github_issues)
self.ui.InstancesListTabMasterLayout
instances : list[Instance] = list()
for inst in appData.instsList:
instances.append(inst)
item = QListWidgetItem()
item.setText(inst.name)
item.setIcon(QPixmap(inst.image))
item.setData(Qt.ItemDataRole.FileInfoRole, inst)
self.ui.listWidget.addItem(item)
self.versionlabel: QLabel = QLabel(f"Version {buildInfo.version}")
self.ui.statusbar.addPermanentWidget(self.versionlabel)