1
0
Fork 0
mirror of synced 2024-06-26 18:20:50 +12: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 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.QtWidgets import QHBoxLayout, QLabel, QPushButton, QInputDialog, QFrame, QMessageBox, QSizePolicy, \
QWidget
QWidget, QScrollArea
from rare import shared
from rare.ui.components.tabs.settings.widgets.wrapper import Ui_WrapperSettings
@ -29,24 +29,31 @@ class WrapperWidget(QFrame):
if not show_text:
show_text = text
self.setLayout(QHBoxLayout())
self.text = text
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.setFrameShape(QFrame.StyledPanel)
self.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
self.delete_button = QPushButton(icon("ei.remove"), "")
self.layout().addWidget(self.delete_button)
self.text = text
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():
self.delete_button.setDisabled(True)
self.delete_button.setToolTip(self.tr("Disable it in settings"))
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):
self.delete_wrapper.emit(self.text)
@ -59,30 +66,59 @@ class WrapperWidget(QFrame):
drag.exec_(Qt.MoveAction)
class WrapperSettings(QFrame, Ui_WrapperSettings):
class WrapperSettings(QWidget, Ui_WrapperSettings):
wrappers: Dict[str, WrapperWidget] = dict()
app_name: str
def __init__(self):
super(WrapperSettings, self).__init__()
self.setupUi(self)
self.setProperty("frameShape", 6)
self.widget_stack.insertWidget(0, self.wrapper_scroll_area)
self.wrapper_scroll_area.setProperty("no_kinetic_scroll", True)
self.placeholder.deleteLater()
self.scroll_content.deleteLater()
self.wrapper_scroll = QScrollArea(self.widget_stack)
self.wrapper_scroll.setWidgetResizable(True)
self.wrapper_scroll.setSizeAdjustPolicy(QScrollArea.AdjustToContents)
self.wrapper_scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.wrapper_scroll.setProperty("no_kinetic_scroll", True)
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_area.setProperty("noBorder", 1)
self.wrapper_scroll.setWidget(self.scroll_content)
self.widget_stack.insertWidget(0, self.wrapper_scroll)
self.core = shared.LegendaryCoreSingleton()
self.add_button.clicked.connect(self.add_button_pressed)
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):
return " ".join(self.get_wrapper_list())
@ -132,8 +168,11 @@ class WrapperSettings(QFrame, Ui_WrapperSettings):
widget = WrapperWidget(text, show_text, self.scroll_content)
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)
self.scroll_content.layout().addWidget(widget)
self.wrappers[show_text] = widget
@ -147,6 +186,7 @@ class WrapperSettings(QFrame, Ui_WrapperSettings):
widget.deleteLater()
if not self.wrappers:
self.wrapper_scroll.setMaximumHeight(self.label_page.sizeHint().height())
self.widget_stack.setCurrentIndex(1)
self.save()
@ -178,6 +218,7 @@ class WrapperSettings(QFrame, Ui_WrapperSettings):
self.add_wrapper(wrapper, True)
if not self.wrappers:
self.wrapper_scroll.setMaximumHeight(self.label_page.sizeHint().height())
self.widget_stack.setCurrentIndex(1)
else:
self.widget_stack.setCurrentIndex(0)
@ -190,11 +231,15 @@ class WrapperContainer(QWidget):
def __init__(self, save_cb, parent=None):
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.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):
widget = e.source()

Binary file not shown.

View file

@ -336,11 +336,11 @@ QPushButton#menu_button:hover {
}
QPushButton[install="1"],
QPushButton#install_button {
background-color: "#090";
background-color: "#070";
}
QPushButton[install="1"]:hover,
QPushButton#install_button:hover {
background-color: "#060";
background-color: "#050";
}
QPushButton[install="1"]:disabled,
QPushButton#install_button:disabled {
@ -359,7 +359,7 @@ QPushButton#uninstall_button:disabled {
background-color: "#200";
}
QPushButton#success{
background-color: "lime";
background-color: lime;
}
QPushButton#installed_menu_button:hover {
background-color: green;
@ -461,7 +461,7 @@ QGroupBox#game_widget_icon {
border-width: 0px;
padding: 0px;
}
QToolBox:tab,
QToolBox::tab,
QGroupBox::title {
subcontrol-origin: border;
subcontrol-position: top left; /* position at the top left */
@ -727,3 +727,27 @@ QBalloonTip {
border-radius: 4px;
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):
def setupUi(self, WrapperSettings):
WrapperSettings.setObjectName("WrapperSettings")
WrapperSettings.resize(413, 106)
self.horizontalLayout = QtWidgets.QHBoxLayout(WrapperSettings)
self.horizontalLayout.setObjectName("horizontalLayout")
WrapperSettings.resize(199, 30)
WrapperSettings.setWindowTitle("WrapperSettings")
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.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.setObjectName("label_page")
self.verticalLayout = QtWidgets.QVBoxLayout(self.label_page)
self.verticalLayout.setObjectName("verticalLayout")
self.label_page_layout = QtWidgets.QVBoxLayout(self.label_page)
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.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.horizontalLayout.addWidget(self.widget_stack)
self.wrapper_settings_layout.addWidget(self.widget_stack)
self.add_button = QtWidgets.QPushButton(WrapperSettings)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
@ -56,7 +38,7 @@ class Ui_WrapperSettings(object):
sizePolicy.setHeightForWidth(self.add_button.sizePolicy().hasHeightForWidth())
self.add_button.setSizePolicy(sizePolicy)
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.widget_stack.setCurrentIndex(0)
@ -64,7 +46,6 @@ class Ui_WrapperSettings(object):
def retranslateUi(self, WrapperSettings):
_translate = QtCore.QCoreApplication.translate
WrapperSettings.setWindowTitle(_translate("WrapperSettings", "Frame"))
self.no_wrapper_label.setText(_translate("WrapperSettings", "No wrapper added"))
self.add_button.setText(_translate("WrapperSettings", "Add Wrapper"))
@ -72,7 +53,7 @@ class Ui_WrapperSettings(object):
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
WrapperSettings = QtWidgets.QFrame()
WrapperSettings = QtWidgets.QWidget()
ui = Ui_WrapperSettings()
ui.setupUi(WrapperSettings)
WrapperSettings.show()

View file

@ -1,57 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>WrapperSettings</class>
<widget class="QFrame" name="WrapperSettings">
<widget class="QWidget" name="WrapperSettings">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>413</width>
<height>106</height>
<width>199</width>
<height>30</height>
</rect>
</property>
<property name="windowTitle">
<string>Frame</string>
<string notr="true">WrapperSettings</string>
</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>
<widget class="QStackedWidget" name="widget_stack">
<property name="currentIndex">
<number>0</number>
</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">
<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>
<widget class="QLabel" name="no_wrapper_label">
<property name="text">
@ -63,7 +56,7 @@
</widget>
</widget>
</item>
<item>
<item alignment="Qt::AlignTop">
<widget class="QPushButton" name="add_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Maximum">