manuskript/manuskript/ui/collapsibleGroupBox2.py
TheJackiMonster a6ac2705d5
Add visual indicator to collapsibleGroupBox2 (fix #1132)
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
2023-02-13 21:22:39 +01:00

76 lines
2.2 KiB
Python

#!/usr/bin/env python
# --!-- coding: utf8 --!--
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QFrame, QPushButton, QVBoxLayout, QSizePolicy, qApp
from manuskript.ui import style
class collapsibleGroupBox2(QWidget):
def __init__(self, parent=None, title=None):
QWidget.__init__(self, parent)
self.title = "Toggle" if title is None else title
self.frame = QFrame(self)
self.button = QPushButton(self.title, self)
self.button.setCheckable(True)
self.button.setChecked(True)
self.switched = False
self.vPolicy = None
self.button.setStyleSheet(style.collapsibleGroupBoxButton())
if title:
self.setTitle(title)
def resizeEvent(self, event):
if not self.switched:
self.switchLayout()
return QWidget.resizeEvent(self, event)
def switchLayout(self):
self.frame.setLayout(self.layout())
self.wLayout = QVBoxLayout(self)
self.wLayout.setContentsMargins(0, 0, 0, 0)
self.wLayout.setSpacing(0)
self.wLayout.addWidget(self.button)
self.wLayout.addWidget(self.frame)
self.button.toggled.connect(self.setExpanded)
self.frame.layout().setContentsMargins(0, 0, 0, 4)
self.frame.layout().setSpacing(0)
self.switched = True
self.vPolicy = self.sizePolicy().verticalPolicy()
self.parent().layout().setAlignment(Qt.AlignTop)
self.setExpanded(self.button.isChecked())
def setFlat(self, val):
if val:
self.frame.setFrameShape(QFrame.NoFrame)
def setCheckable(self, val):
pass
def setTitle(self, title):
self.title = title
if self.button.isChecked():
self.button.setText("{}".format(self.title))
else:
self.button.setText("{}".format(self.title))
def setExpanded(self, val):
self.frame.setVisible(val)
if val:
self.setSizePolicy(QSizePolicy.Preferred, self.vPolicy)
else:
self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)
self.setTitle(self.title)
def saveState(self):
return self.button.isChecked()
def restoreState(self, val):
self.button.setChecked(val)