1
0
Fork 0
mirror of synced 2024-09-29 08:51:43 +13:00

Merge pull request #188 from loathingKernel/wrapper_size

Wrappers: Make widgets and the scrollarea smaller
This commit is contained in:
Dummerle 2022-03-20 20:38:03 +01:00 committed by GitHub
commit a495724373
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 144 additions and 101 deletions

View file

@ -3,10 +3,10 @@ import shutil
from logging import getLogger from logging import getLogger
from typing import Dict, List from typing import Dict, List
from PyQt5.QtCore import pyqtSignal, QSettings, QSize, Qt, QMimeData from PyQt5.QtCore import pyqtSignal, QSettings, QSize, Qt, QMimeData, pyqtSlot
from PyQt5.QtGui import QDrag, QDropEvent, QDragEnterEvent, QDragMoveEvent, QFont from PyQt5.QtGui import QDrag, QDropEvent, QDragEnterEvent, QDragMoveEvent, QFont
from PyQt5.QtWidgets import QHBoxLayout, QLabel, QPushButton, QInputDialog, QFrame, QMessageBox, QSizePolicy, \ from PyQt5.QtWidgets import QHBoxLayout, QLabel, QPushButton, QInputDialog, QFrame, QMessageBox, QSizePolicy, \
QWidget QWidget, QScrollArea
from rare import shared from rare import shared
from rare.ui.components.tabs.settings.widgets.wrapper import Ui_WrapperSettings from rare.ui.components.tabs.settings.widgets.wrapper import Ui_WrapperSettings
@ -29,24 +29,31 @@ class WrapperWidget(QFrame):
if not show_text: if not show_text:
show_text = text show_text = text
self.setLayout(QHBoxLayout()) self.setFrameShape(QFrame.StyledPanel)
self.text = text self.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
self.image_lbl = QLabel()
self.text_lbl = QLabel(show_text)
self.text_lbl.setFont(QFont("monospace"))
self.image_lbl.setPixmap(icon("mdi.drag-vertical").pixmap(QSize(20, 20)))
self.layout().addWidget(self.image_lbl)
self.layout().addWidget(self.text_lbl)
self.setProperty("frameShape", 6)
self.delete_button = QPushButton(icon("ei.remove"), "") self.text = text
self.layout().addWidget(self.delete_button) self.text_lbl = QLabel(show_text, parent=self)
self.text_lbl.setFont(QFont("monospace"))
self.image_lbl = QLabel(parent=self)
self.image_lbl.setPixmap(icon("mdi.drag-vertical").pixmap(QSize(20, 20)))
self.delete_button = QPushButton(icon("ei.remove"), "", parent=self)
if show_text in extra_wrapper_regex.keys(): if show_text in extra_wrapper_regex.keys():
self.delete_button.setDisabled(True) self.delete_button.setDisabled(True)
self.delete_button.setToolTip(self.tr("Disable it in settings")) self.delete_button.setToolTip(self.tr("Disable it in settings"))
self.delete_button.clicked.connect(self.delete) self.delete_button.clicked.connect(self.delete)
self.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed) layout = QHBoxLayout()
layout.setContentsMargins(0, 0, 0, 0)
layout.addWidget(self.image_lbl)
layout.addWidget(self.text_lbl)
layout.addWidget(self.delete_button)
self.setLayout(layout)
# lk: set object names for the stylesheet
self.setObjectName(type(self).__name__)
self.delete_button.setObjectName(f"{self.objectName()}Button")
def delete(self): def delete(self):
self.delete_wrapper.emit(self.text) self.delete_wrapper.emit(self.text)
@ -59,30 +66,59 @@ class WrapperWidget(QFrame):
drag.exec_(Qt.MoveAction) drag.exec_(Qt.MoveAction)
class WrapperSettings(QFrame, Ui_WrapperSettings): class WrapperSettings(QWidget, Ui_WrapperSettings):
wrappers: Dict[str, WrapperWidget] = dict() wrappers: Dict[str, WrapperWidget] = dict()
app_name: str app_name: str
def __init__(self): def __init__(self):
super(WrapperSettings, self).__init__() super(WrapperSettings, self).__init__()
self.setupUi(self) self.setupUi(self)
self.setProperty("frameShape", 6)
self.widget_stack.insertWidget(0, self.wrapper_scroll_area) self.wrapper_scroll = QScrollArea(self.widget_stack)
self.wrapper_scroll_area.setProperty("no_kinetic_scroll", True) self.wrapper_scroll.setWidgetResizable(True)
self.placeholder.deleteLater() self.wrapper_scroll.setSizeAdjustPolicy(QScrollArea.AdjustToContents)
self.scroll_content.deleteLater() self.wrapper_scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.wrapper_scroll.setProperty("no_kinetic_scroll", True)
self.scroll_content = WrapperContainer( self.scroll_content = WrapperContainer(
save_cb=self.save, parent=self.wrapper_scroll_area save_cb=self.save, parent=self.wrapper_scroll
) )
self.wrapper_scroll_area.setWidget(self.scroll_content) self.wrapper_scroll.setWidget(self.scroll_content)
self.wrapper_scroll_area.setProperty("noBorder", 1) self.widget_stack.insertWidget(0, self.wrapper_scroll)
self.core = shared.LegendaryCoreSingleton() self.core = shared.LegendaryCoreSingleton()
self.add_button.clicked.connect(self.add_button_pressed) self.add_button.clicked.connect(self.add_button_pressed)
self.settings = QSettings() self.settings = QSettings()
self.setStyleSheet("""QFrame{padding: 0px}""") self.wrapper_scroll.horizontalScrollBar().rangeChanged.connect(self.adjust_scrollarea)
# lk: set object names for the stylesheet
self.setObjectName(type(self).__name__)
self.no_wrapper_label.setObjectName(f"{self.objectName()}Label")
self.wrapper_scroll.setObjectName(f"{self.objectName()}Scroll")
self.wrapper_scroll.horizontalScrollBar().setObjectName(
f"{self.wrapper_scroll.objectName()}Bar")
self.wrapper_scroll.verticalScrollBar().setObjectName(
f"{self.wrapper_scroll.objectName()}Bar")
@pyqtSlot(int, int)
def adjust_scrollarea(self, min: int, max: int):
wrapper_widget = self.scroll_content.findChildren(WrapperWidget)[0]
# lk: when the scrollbar is not visible, min and max are 0
if max > min:
self.wrapper_scroll.setMaximumHeight(
wrapper_widget.sizeHint().height()
+ self.wrapper_scroll.rect().height() // 2
- self.wrapper_scroll.contentsRect().height() // 2
+ self.scroll_content.layout().spacing()
+ self.wrapper_scroll.horizontalScrollBar().sizeHint().height()
)
else:
self.wrapper_scroll.setMaximumHeight(
wrapper_widget.sizeHint().height()
+ self.wrapper_scroll.rect().height()
- self.wrapper_scroll.contentsRect().height()
)
def get_wrapper_string(self): def get_wrapper_string(self):
return " ".join(self.get_wrapper_list()) return " ".join(self.get_wrapper_list())
@ -132,8 +168,11 @@ class WrapperSettings(QFrame, Ui_WrapperSettings):
widget = WrapperWidget(text, show_text, self.scroll_content) widget = WrapperWidget(text, show_text, self.scroll_content)
self.scroll_content.layout().addWidget(widget) self.scroll_content.layout().addWidget(widget)
self.adjust_scrollarea(
self.wrapper_scroll.horizontalScrollBar().minimum(),
self.wrapper_scroll.horizontalScrollBar().maximum()
)
widget.delete_wrapper.connect(self.delete_wrapper) widget.delete_wrapper.connect(self.delete_wrapper)
self.scroll_content.layout().addWidget(widget)
self.wrappers[show_text] = widget self.wrappers[show_text] = widget
@ -147,6 +186,7 @@ class WrapperSettings(QFrame, Ui_WrapperSettings):
widget.deleteLater() widget.deleteLater()
if not self.wrappers: if not self.wrappers:
self.wrapper_scroll.setMaximumHeight(self.label_page.sizeHint().height())
self.widget_stack.setCurrentIndex(1) self.widget_stack.setCurrentIndex(1)
self.save() self.save()
@ -178,6 +218,7 @@ class WrapperSettings(QFrame, Ui_WrapperSettings):
self.add_wrapper(wrapper, True) self.add_wrapper(wrapper, True)
if not self.wrappers: if not self.wrappers:
self.wrapper_scroll.setMaximumHeight(self.label_page.sizeHint().height())
self.widget_stack.setCurrentIndex(1) self.widget_stack.setCurrentIndex(1)
else: else:
self.widget_stack.setCurrentIndex(0) self.widget_stack.setCurrentIndex(0)
@ -190,11 +231,15 @@ class WrapperContainer(QWidget):
def __init__(self, save_cb, parent=None): def __init__(self, save_cb, parent=None):
super(WrapperContainer, self).__init__(parent=parent) super(WrapperContainer, self).__init__(parent=parent)
self.setLayout(QHBoxLayout())
self.layout().setContentsMargins(0, 0, 0, 0)
self.layout().setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
self.setAcceptDrops(True) self.setAcceptDrops(True)
self.save = save_cb self.save = save_cb
layout = QHBoxLayout()
layout.setContentsMargins(0, 0, 0, 0)
layout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
self.setLayout(layout)
# lk: set object names for the stylesheet
self.setObjectName(type(self).__name__)
def dragEnterEvent(self, e: QDragEnterEvent): def dragEnterEvent(self, e: QDragEnterEvent):
widget = e.source() widget = e.source()

Binary file not shown.

View file

@ -336,11 +336,11 @@ QPushButton#menu_button:hover {
} }
QPushButton[install="1"], QPushButton[install="1"],
QPushButton#install_button { QPushButton#install_button {
background-color: "#090"; background-color: "#070";
} }
QPushButton[install="1"]:hover, QPushButton[install="1"]:hover,
QPushButton#install_button:hover { QPushButton#install_button:hover {
background-color: "#060"; background-color: "#050";
} }
QPushButton[install="1"]:disabled, QPushButton[install="1"]:disabled,
QPushButton#install_button:disabled { QPushButton#install_button:disabled {
@ -359,7 +359,7 @@ QPushButton#uninstall_button:disabled {
background-color: "#200"; background-color: "#200";
} }
QPushButton#success{ QPushButton#success{
background-color: "lime"; background-color: lime;
} }
QPushButton#installed_menu_button:hover { QPushButton#installed_menu_button:hover {
background-color: green; background-color: green;
@ -461,7 +461,7 @@ QGroupBox#game_widget_icon {
border-width: 0px; border-width: 0px;
padding: 0px; padding: 0px;
} }
QToolBox:tab, QToolBox::tab,
QGroupBox::title { QGroupBox::title {
subcontrol-origin: border; subcontrol-origin: border;
subcontrol-position: top left; /* position at the top left */ subcontrol-position: top left; /* position at the top left */
@ -727,3 +727,27 @@ QBalloonTip {
border-radius: 4px; border-radius: 4px;
padding: 1px; padding: 1px;
} }
/* Wrapper settings styling */
QPushButton#WrapperWidgetButton {
border-color: rgba(67, 71, 77, 55%);
}
QPushButton#WrapperWidgetButton:disabled {
border-color: rgba(67, 71, 77, 25%);
}
QScrollArea#WrapperSettingsScroll {
border-color: #2f4f4f;
background-color: #282a2e;
}
QScrollBar#WrapperSettingsScrollBar {
background-color: #282a2e;
}
QLabel#WrapperSettingsLabel {
border-width: 1px;
border-style: solid;
border-radius: 2px;
padding: 2px;
color: #999;
border-color: #2f4f4f;
background-color: #282a2e;
}

View file

@ -14,41 +14,23 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_WrapperSettings(object): class Ui_WrapperSettings(object):
def setupUi(self, WrapperSettings): def setupUi(self, WrapperSettings):
WrapperSettings.setObjectName("WrapperSettings") WrapperSettings.setObjectName("WrapperSettings")
WrapperSettings.resize(413, 106) WrapperSettings.resize(199, 30)
self.horizontalLayout = QtWidgets.QHBoxLayout(WrapperSettings) WrapperSettings.setWindowTitle("WrapperSettings")
self.horizontalLayout.setObjectName("horizontalLayout") self.wrapper_settings_layout = QtWidgets.QHBoxLayout(WrapperSettings)
self.wrapper_settings_layout.setContentsMargins(0, 0, 0, 0)
self.wrapper_settings_layout.setObjectName("wrapper_settings_layout")
self.widget_stack = QtWidgets.QStackedWidget(WrapperSettings) self.widget_stack = QtWidgets.QStackedWidget(WrapperSettings)
self.widget_stack.setObjectName("widget_stack") self.widget_stack.setObjectName("widget_stack")
self.placeholder = QtWidgets.QWidget()
self.placeholder.setObjectName("placeholder")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.placeholder)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.wrapper_scroll_area = QtWidgets.QScrollArea(self.placeholder)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.wrapper_scroll_area.sizePolicy().hasHeightForWidth())
self.wrapper_scroll_area.setSizePolicy(sizePolicy)
self.wrapper_scroll_area.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.wrapper_scroll_area.setWidgetResizable(True)
self.wrapper_scroll_area.setObjectName("wrapper_scroll_area")
self.scroll_content = QtWidgets.QWidget()
self.scroll_content.setGeometry(QtCore.QRect(0, 0, 286, 68))
self.scroll_content.setObjectName("scroll_content")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.scroll_content)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.wrapper_scroll_area.setWidget(self.scroll_content)
self.horizontalLayout_2.addWidget(self.wrapper_scroll_area)
self.widget_stack.addWidget(self.placeholder)
self.label_page = QtWidgets.QWidget() self.label_page = QtWidgets.QWidget()
self.label_page.setObjectName("label_page") self.label_page.setObjectName("label_page")
self.verticalLayout = QtWidgets.QVBoxLayout(self.label_page) self.label_page_layout = QtWidgets.QVBoxLayout(self.label_page)
self.verticalLayout.setObjectName("verticalLayout") self.label_page_layout.setContentsMargins(0, 0, 0, 0)
self.label_page_layout.setObjectName("label_page_layout")
self.no_wrapper_label = QtWidgets.QLabel(self.label_page) self.no_wrapper_label = QtWidgets.QLabel(self.label_page)
self.no_wrapper_label.setObjectName("no_wrapper_label") self.no_wrapper_label.setObjectName("no_wrapper_label")
self.verticalLayout.addWidget(self.no_wrapper_label) self.label_page_layout.addWidget(self.no_wrapper_label)
self.widget_stack.addWidget(self.label_page) self.widget_stack.addWidget(self.label_page)
self.horizontalLayout.addWidget(self.widget_stack) self.wrapper_settings_layout.addWidget(self.widget_stack)
self.add_button = QtWidgets.QPushButton(WrapperSettings) self.add_button = QtWidgets.QPushButton(WrapperSettings)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
@ -56,7 +38,7 @@ class Ui_WrapperSettings(object):
sizePolicy.setHeightForWidth(self.add_button.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.add_button.sizePolicy().hasHeightForWidth())
self.add_button.setSizePolicy(sizePolicy) self.add_button.setSizePolicy(sizePolicy)
self.add_button.setObjectName("add_button") self.add_button.setObjectName("add_button")
self.horizontalLayout.addWidget(self.add_button) self.wrapper_settings_layout.addWidget(self.add_button, 0, QtCore.Qt.AlignTop)
self.retranslateUi(WrapperSettings) self.retranslateUi(WrapperSettings)
self.widget_stack.setCurrentIndex(0) self.widget_stack.setCurrentIndex(0)
@ -64,7 +46,6 @@ class Ui_WrapperSettings(object):
def retranslateUi(self, WrapperSettings): def retranslateUi(self, WrapperSettings):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
WrapperSettings.setWindowTitle(_translate("WrapperSettings", "Frame"))
self.no_wrapper_label.setText(_translate("WrapperSettings", "No wrapper added")) self.no_wrapper_label.setText(_translate("WrapperSettings", "No wrapper added"))
self.add_button.setText(_translate("WrapperSettings", "Add Wrapper")) self.add_button.setText(_translate("WrapperSettings", "Add Wrapper"))
@ -72,7 +53,7 @@ class Ui_WrapperSettings(object):
if __name__ == "__main__": if __name__ == "__main__":
import sys import sys
app = QtWidgets.QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)
WrapperSettings = QtWidgets.QFrame() WrapperSettings = QtWidgets.QWidget()
ui = Ui_WrapperSettings() ui = Ui_WrapperSettings()
ui.setupUi(WrapperSettings) ui.setupUi(WrapperSettings)
WrapperSettings.show() WrapperSettings.show()

View file

@ -1,57 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>WrapperSettings</class> <class>WrapperSettings</class>
<widget class="QFrame" name="WrapperSettings"> <widget class="QWidget" name="WrapperSettings">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>413</width> <width>199</width>
<height>106</height> <height>30</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Frame</string> <string notr="true">WrapperSettings</string>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="wrapper_settings_layout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item> <item>
<widget class="QStackedWidget" name="widget_stack"> <widget class="QStackedWidget" name="widget_stack">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="placeholder">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QScrollArea" name="wrapper_scroll_area">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scroll_content">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>286</width>
<height>68</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3"/>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="label_page"> <widget class="QWidget" name="label_page">
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="label_page_layout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item> <item>
<widget class="QLabel" name="no_wrapper_label"> <widget class="QLabel" name="no_wrapper_label">
<property name="text"> <property name="text">
@ -63,7 +56,7 @@
</widget> </widget>
</widget> </widget>
</item> </item>
<item> <item alignment="Qt::AlignTop">
<widget class="QPushButton" name="add_button"> <widget class="QPushButton" name="add_button">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Maximum"> <sizepolicy hsizetype="Minimum" vsizetype="Maximum">