manuskript/manuskript/ui/collapsibleGroupBox2.py

76 lines
2.2 KiB
Python
Raw Permalink Normal View History

2015-06-07 01:31:11 +12:00
#!/usr/bin/env python
2016-02-07 00:34:22 +13:00
# --!-- coding: utf8 --!--
from PyQt5.QtCore import Qt
2016-04-09 06:09:41 +12:00
from PyQt5.QtWidgets import QWidget, QFrame, QPushButton, QVBoxLayout, QSizePolicy, qApp
2015-06-07 01:31:11 +12:00
from manuskript.ui import style
2016-02-08 22:30:32 +13:00
2015-06-07 01:31:11 +12:00
class collapsibleGroupBox2(QWidget):
2016-04-15 21:58:09 +12:00
def __init__(self, parent=None, title=None):
2015-06-07 01:31:11 +12:00
QWidget.__init__(self, parent)
self.title = "Toggle" if title is None else title
2015-06-07 01:31:11 +12:00
self.frame = QFrame(self)
self.button = QPushButton(self.title, self)
2015-06-07 01:31:11 +12:00
self.button.setCheckable(True)
self.button.setChecked(True)
self.switched = False
self.vPolicy = None
2016-04-09 06:09:41 +12:00
self.button.setStyleSheet(style.collapsibleGroupBoxButton())
2016-02-07 00:34:22 +13:00
2016-04-15 21:58:09 +12:00
if title:
self.setTitle(title)
2016-02-07 00:34:22 +13:00
2015-06-07 01:31:11 +12:00
def resizeEvent(self, event):
if not self.switched:
self.switchLayout()
return QWidget.resizeEvent(self, event)
2016-02-07 00:34:22 +13:00
2015-06-07 01:31:11 +12:00
def switchLayout(self):
self.frame.setLayout(self.layout())
self.wLayout = QVBoxLayout(self)
self.wLayout.setContentsMargins(0, 0, 0, 0)
2016-02-08 22:30:32 +13:00
self.wLayout.setSpacing(0)
2015-06-07 01:31:11 +12:00
self.wLayout.addWidget(self.button)
self.wLayout.addWidget(self.frame)
self.button.toggled.connect(self.setExpanded)
2016-02-08 22:30:32 +13:00
self.frame.layout().setContentsMargins(0, 0, 0, 4)
self.frame.layout().setSpacing(0)
2015-06-07 01:31:11 +12:00
self.switched = True
2016-02-07 00:34:22 +13:00
2015-06-07 01:31:11 +12:00
self.vPolicy = self.sizePolicy().verticalPolicy()
2015-06-30 22:27:43 +12:00
self.parent().layout().setAlignment(Qt.AlignTop)
2016-02-07 00:34:22 +13:00
2015-07-04 19:59:35 +12:00
self.setExpanded(self.button.isChecked())
2016-02-07 00:34:22 +13:00
2015-06-07 01:31:11 +12:00
def setFlat(self, val):
if val:
self.frame.setFrameShape(QFrame.NoFrame)
2016-02-07 00:34:22 +13:00
2015-06-07 01:31:11 +12:00
def setCheckable(self, val):
pass
2016-02-07 00:34:22 +13:00
2015-06-07 01:31:11 +12:00
def setTitle(self, title):
self.title = title
if self.button.isChecked():
self.button.setText("{}".format(self.title))
else:
self.button.setText("{}".format(self.title))
2016-02-07 00:34:22 +13:00
2015-06-07 01:31:11 +12:00
def setExpanded(self, val):
self.frame.setVisible(val)
if val:
self.setSizePolicy(QSizePolicy.Preferred, self.vPolicy)
else:
2015-07-04 19:59:35 +12:00
self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)
2016-02-07 00:34:22 +13:00
self.setTitle(self.title)
2015-07-04 19:59:35 +12:00
def saveState(self):
return self.button.isChecked()
2016-02-07 00:34:22 +13:00
2015-07-04 19:59:35 +12:00
def restoreState(self, val):
2016-02-07 00:34:22 +13:00
self.button.setChecked(val)