1
0
Fork 0
mirror of synced 2024-06-26 18:20:50 +12:00

Merge pull request #128 from loathingKernel/main

Make window capable of smaller sizes.
This commit is contained in:
Dummerle 2021-11-22 20:02:43 +01:00 committed by GitHub
commit 6700974a36
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 170 additions and 103 deletions

View file

@ -27,7 +27,7 @@ class MainWindow(QMainWindow):
self.tab_widget = TabWidget(self)
self.setCentralWidget(self.tab_widget)
width, height = 1200, 800
width, height = 1280, 720
if self.settings.value("save_size", False):
width, height = self.settings.value("window_size", (width, height), tuple)

View file

@ -1,9 +1,9 @@
import datetime
from logging import getLogger
from PyQt5.QtCore import QThread, pyqtSignal, QSettings
from PyQt5.QtCore import QThread, pyqtSignal, QSettings, Qt, QRect
from PyQt5.QtWidgets import QWidget, QMessageBox, QVBoxLayout, QLabel, QGridLayout, QProgressBar, QPushButton, \
QHBoxLayout, QGroupBox
QHBoxLayout, QGroupBox, QScrollArea, QFrame, QSizePolicy
from legendary.core import LegendaryCore
from legendary.models.downloading import UIUpdate
@ -57,12 +57,37 @@ class DownloadTab(QWidget):
self.layout.addLayout(self.mini_layout)
# FIXME: Redisign this whole thing for the next release (current: 1.7.0)
self.scroll = QScrollArea(self)
self.scroll.setFocusPolicy(Qt.WheelFocus)
self.scroll.setFrameShape(QFrame.NoFrame)
self.scroll.setFrameShadow(QFrame.Sunken)
self.scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.scroll.setWidgetResizable(True)
self.scroll.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignTop)
self.scroll.setObjectName("scroll")
self.scroll_contents = QWidget()
self.scroll_contents.setGeometry(QRect(0, 0, 255, 16))
sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.scroll_contents.sizePolicy().hasHeightForWidth())
self.scroll_contents.setSizePolicy(sizePolicy)
self.scroll_contents.setObjectName("scroll_contents")
self.scroll_contents_layout = QVBoxLayout(self.scroll_contents)
self.scroll_contents_layout.setContentsMargins(0, 0, -1, 0)
self.scroll_contents_layout.setSpacing(6)
self.scroll_contents_layout.setObjectName("scroll_contents_layout")
self.scroll.setWidget(self.scroll_contents)
self.layout.addWidget(self.scroll)
# FIXME: End of FIXME
self.queue_widget = DlQueueWidget()
self.layout.addWidget(self.queue_widget)
self.scroll_contents_layout.addWidget(self.queue_widget)
self.queue_widget.update_list.connect(self.update_dl_queue)
self.updates = QGroupBox(self.tr("Updates"))
self.layout.addWidget(self.updates)
self.scroll_contents_layout.addWidget(self.updates)
self.update_layout = QVBoxLayout()
self.updates.setLayout(self.update_layout)
@ -77,8 +102,6 @@ class DownloadTab(QWidget):
for name in updates:
self.add_update(self.core.get_installed_game(name))
self.layout.addStretch(1)
self.setLayout(self.layout)
self.signals.install_game.connect(self.get_install_options)

View file

@ -3,7 +3,7 @@ import platform
from logging import getLogger
from typing import Tuple
from PyQt5.QtCore import QSettings, QThreadPool
from PyQt5.QtCore import QSettings, QThreadPool, Qt
from PyQt5.QtWidgets import QWidget, QFileDialog, QMessageBox, QLabel, QPushButton, QSizePolicy
from qtawesome import icon
@ -99,14 +99,16 @@ class GameSettings(QWidget, Ui_GameSettings):
self.proton_prefix_layout.addWidget(self.proton_prefix)
self.linux_settings = LinuxAppSettings()
# FIXME: Remove the spacerItem from the linux settings
# FIXME: Remove the spacerItem and margins from the linux settings
# FIXME: This should be handled differently at soem point in the future
self.linux_settings.layout().setContentsMargins(0, 0, 0, 0)
for item in [self.linux_settings.layout().itemAt(idx) for idx in range(self.linux_settings.layout().count())]:
if item.spacerItem():
self.linux_settings.layout().removeItem(item)
del item
# FIXME: End of FIXME
self.linux_layout.addWidget(self.linux_settings)
self.linux_settings_contents_layout.addWidget(self.linux_settings)
self.linux_settings_contents_layout.setAlignment(Qt.AlignTop)
else:
self.proton_groupbox.setVisible(False)
@ -230,9 +232,7 @@ class GameSettings(QWidget, Ui_GameSettings):
# Dont use Wine
self.linux_settings.wine_exec.setText("")
self.linux_settings.save_setting(self.linux_settings.wine_exec.text(), "wine_exec")
self.linux_settings.wine_prefix.setText("")
self.linux_settings.save_setting(self.linux_settings.wine_prefix.text(), "wine_prefix")
self.core.lgd.save_config()
@ -319,8 +319,8 @@ class LinuxAppSettings(LinuxSettings):
def update_game(self, app_name):
self.name = app_name
self.wine_prefix.setText(self.core.lgd.config.get(self.name, "wine_prefix", fallback=""))
self.wine_exec.setText(self.core.lgd.config.get(self.name, "wine_executable", fallback=""))
self.wine_prefix.setText(self.load_prefix())
self.wine_exec.setText(self.load_setting(self.name, "wine_executable"))
self.dxvk.name = app_name
self.dxvk.load_settings()

View file

@ -16,34 +16,53 @@ class LinuxSettings(QWidget, Ui_LinuxSettings):
self.setupUi(self)
self.name = name if name is not None else "default"
self.core = shared.core
# Wine prefix
self.wine_prefix = PathEdit(self.core.lgd.config.get(self.name, "wine_prefix", fallback=""),
file_type=QFileDialog.DirectoryOnly,
save_func=lambda text: self.save_setting(text, "wine_prefix"))
self.wine_prefix = PathEdit(
self.load_prefix(),
file_type=QFileDialog.DirectoryOnly,
save_func=self.save_prefix)
self.prefix_layout.addWidget(self.wine_prefix)
# Wine executable
self.wine_exec = PathEdit(self.core.lgd.config.get(self.name, "wine_executable", fallback=""),
file_type=QFileDialog.ExistingFile,
name_filter="Wine executable (wine wine64)",
save_func=lambda text: self.save_setting(text, "wine_executable"))
self.wine_exec = PathEdit(
self.load_setting(self.name, "wine_executable"),
file_type=QFileDialog.ExistingFile,
name_filter="Wine executable (wine wine64)",
save_func=lambda text: self.save_setting(text, section=self.name, setting="wine_executable"))
self.exec_layout.addWidget(self.wine_exec)
# dxvk
self.dxvk = DxvkSettings(self.name)
self.dxvk_layout.addWidget(self.dxvk)
def save_setting(self, text: str, setting_name: str):
if self.name not in self.core.lgd.config.sections():
self.core.lgd.config.add_section(self.name)
def load_prefix(self) -> str:
return self.load_setting(f'{self.name}.env',
'WINEPREFIX',
fallback=self.load_setting(self.name, 'wine_prefix'))
def save_prefix(self, text: str):
self.save_setting(text, f'{self.name}.env', 'WINEPREFIX')
self.save_setting(text, self.name, 'wine_prefix')
@staticmethod
def load_setting(section: str, setting: str, fallback: str = str()):
return shared.core.lgd.config.get(section, setting, fallback=fallback)
@staticmethod
def save_setting(text: str, section: str, setting: str):
if text:
if section not in shared.core.lgd.config.sections():
shared.core.lgd.config.add_section(section)
logger.debug(f"Added {f'[{section}]'} configuration section")
shared.core.lgd.config.set(section, setting, text)
logger.debug(f"Set {setting} in {f'[{section}]'} to {text}")
self.core.lgd.config.set(self.name, setting_name, text)
if not text:
self.core.lgd.config.remove_option(self.name, setting_name)
else:
logger.debug("Set config of wine_prefix to " + text)
if self.core.lgd.config[self.name] == {}:
self.core.lgd.config.remove_section(self.name)
self.core.lgd.save_config()
shared.core.lgd.config.remove_option(section, setting)
logger.debug(f"Unset {setting} from {f'[{section}]'}")
if not shared.core.lgd.config[section]:
shared.core.lgd.config.remove_section(section)
logger.debug(f"Removed {f'[{section}]'} configuration section")
shared.core.lgd.save_config()

View file

@ -87,7 +87,7 @@ class Ui_GameSettings(object):
self.wrapper_button.setObjectName("wrapper_button")
self.wrapper_layout.addWidget(self.wrapper_button)
self.launch_settings_layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.wrapper_widget)
self.game_settings_layout.addWidget(self.launch_settings_groupbox, 0, QtCore.Qt.AlignTop)
self.game_settings_layout.addWidget(self.launch_settings_groupbox)
self.cloud_gb = QtWidgets.QGroupBox(GameSettings)
self.cloud_gb.setObjectName("cloud_gb")
self.cloud_saves_layout = QtWidgets.QFormLayout(self.cloud_gb)
@ -101,7 +101,19 @@ class Ui_GameSettings(object):
self.cloud_sync.setObjectName("cloud_sync")
self.cloud_saves_layout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cloud_sync)
self.game_settings_layout.addWidget(self.cloud_gb)
self.proton_groupbox = QtWidgets.QGroupBox(GameSettings)
self.linux_settings_scroll = QtWidgets.QScrollArea(GameSettings)
self.linux_settings_scroll.setFrameShape(QtWidgets.QFrame.NoFrame)
self.linux_settings_scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.linux_settings_scroll.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
self.linux_settings_scroll.setWidgetResizable(True)
self.linux_settings_scroll.setObjectName("linux_settings_scroll")
self.linux_settings_contents = QtWidgets.QWidget()
self.linux_settings_contents.setGeometry(QtCore.QRect(0, 0, 747, 343))
self.linux_settings_contents.setObjectName("linux_settings_contents")
self.linux_settings_contents_layout = QtWidgets.QVBoxLayout(self.linux_settings_contents)
self.linux_settings_contents_layout.setContentsMargins(0, 0, -1, 0)
self.linux_settings_contents_layout.setObjectName("linux_settings_contents_layout")
self.proton_groupbox = QtWidgets.QGroupBox(self.linux_settings_contents)
self.proton_groupbox.setObjectName("proton_groupbox")
self.proton_layout = QtWidgets.QFormLayout(self.proton_groupbox)
self.proton_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
@ -124,13 +136,9 @@ class Ui_GameSettings(object):
self.proton_prefix_layout = QtWidgets.QVBoxLayout()
self.proton_prefix_layout.setObjectName("proton_prefix_layout")
self.proton_layout.setLayout(2, QtWidgets.QFormLayout.FieldRole, self.proton_prefix_layout)
self.linux_layout = QtWidgets.QVBoxLayout()
self.linux_layout.setSpacing(0)
self.linux_layout.setObjectName("linux_layout")
self.proton_layout.setLayout(3, QtWidgets.QFormLayout.SpanningRole, self.linux_layout)
self.game_settings_layout.addWidget(self.proton_groupbox, 0, QtCore.Qt.AlignTop)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.game_settings_layout.addItem(spacerItem)
self.linux_settings_contents_layout.addWidget(self.proton_groupbox, 0, QtCore.Qt.AlignTop)
self.linux_settings_scroll.setWidget(self.linux_settings_contents)
self.game_settings_layout.addWidget(self.linux_settings_scroll)
self.retranslateUi(GameSettings)
QtCore.QMetaObject.connectSlotsByName(GameSettings)
@ -155,7 +163,7 @@ class Ui_GameSettings(object):
self.wrapper_button.setText(_translate("GameSettings", "Save"))
self.cloud_gb.setTitle(_translate("GameSettings", "Cloud Saves"))
self.cloud_sync_label.setText(_translate("GameSettings", "Sync with cloud"))
self.proton_groupbox.setTitle(_translate("GameSettings", "Linux Settings"))
self.proton_groupbox.setTitle(_translate("GameSettings", "Proton Settings"))
self.proton_wrapper_label.setText(_translate("GameSettings", "Proton"))
self.proton_wrapper.setItemText(0, _translate("GameSettings", "Don\'t use Proton"))
self.proton_prefix_label.setText(_translate("GameSettings", "Prefix"))

View file

@ -24,7 +24,7 @@
</property>
</widget>
</item>
<item alignment="Qt::AlignTop">
<item>
<widget class="QGroupBox" name="launch_settings_groupbox">
<property name="title">
<string>Launch Settings</string>
@ -216,69 +216,86 @@
</layout>
</widget>
</item>
<item alignment="Qt::AlignTop">
<widget class="QGroupBox" name="proton_groupbox">
<property name="title">
<string>Linux Settings</string>
</property>
<layout class="QFormLayout" name="proton_layout">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="1" column="0">
<widget class="QLabel" name="proton_wrapper_label">
<property name="text">
<string>Proton</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="proton_wrapper">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Don't use Proton</string>
</property>
</item>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="proton_prefix_label">
<property name="text">
<string>Prefix</string>
</property>
</widget>
</item>
<item row="2" column="1">
<layout class="QVBoxLayout" name="proton_prefix_layout"/>
</item>
<item row="3" column="0" colspan="2">
<layout class="QVBoxLayout" name="linux_layout">
<property name="spacing">
<number>0</number>
</property>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="game_settings_vspacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
<widget class="QScrollArea" name="linux_settings_scroll">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
</spacer>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="linux_settings_contents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>747</width>
<height>343</height>
</rect>
</property>
<layout class="QVBoxLayout" name="linux_settings_contents_layout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item alignment="Qt::AlignTop">
<widget class="QGroupBox" name="proton_groupbox">
<property name="title">
<string>Proton Settings</string>
</property>
<layout class="QFormLayout" name="proton_layout">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="1" column="0">
<widget class="QLabel" name="proton_wrapper_label">
<property name="text">
<string>Proton</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="proton_wrapper">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Don't use Proton</string>
</property>
</item>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="proton_prefix_label">
<property name="text">
<string>Prefix</string>
</property>
</widget>
</item>
<item row="2" column="1">
<layout class="QVBoxLayout" name="proton_prefix_layout"/>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>