summaryrefslogtreecommitdiff
path: root/src/main/python/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/python/utils')
-rw-r--r--src/main/python/utils/layout.py7
-rw-r--r--src/main/python/utils/toolbar.py113
2 files changed, 73 insertions, 47 deletions
diff --git a/src/main/python/utils/layout.py b/src/main/python/utils/layout.py
index 1aa59ac..6781249 100644
--- a/src/main/python/utils/layout.py
+++ b/src/main/python/utils/layout.py
@@ -9,7 +9,6 @@ class flowLayout(QLayout):
self.setContentsMargins(margin, margin, margin, margin)
self.setSpacing(spacing)
-
self.itemList = []
def __del__(self):
@@ -48,7 +47,7 @@ class flowLayout(QLayout):
def setGeometry(self, rect):
super(flowLayout, self).setGeometry(rect)
self.doLayout(rect, False)
-
+
def sizeHint(self):
return self.minimumSize()
@@ -70,8 +69,8 @@ class flowLayout(QLayout):
for item in self.itemList:
wid = item.widget()
- spaceX = self.spacing() + wid.style().layoutSpacing(QSizePolicy.PushButton, QSizePolicy.PushButton, Qt.Horizontal)
- spaceY = self.spacing() + wid.style().layoutSpacing(QSizePolicy.PushButton, QSizePolicy.PushButton, Qt.Vertical)
+ spaceX = self.spacing() + wid.style().layoutSpacing(QSizePolicy.ToolButton, QSizePolicy.ToolButton, Qt.Horizontal)
+ spaceY = self.spacing() + wid.style().layoutSpacing(QSizePolicy.ToolButton, QSizePolicy.ToolButton, Qt.Vertical)
nextX = x + item.sizeHint().width() + spaceX
if nextX - spaceX > rect.right() and lineHeight > 0:
x = rect.x()
diff --git a/src/main/python/utils/toolbar.py b/src/main/python/utils/toolbar.py
index 68e8865..b870259 100644
--- a/src/main/python/utils/toolbar.py
+++ b/src/main/python/utils/toolbar.py
@@ -1,8 +1,8 @@
from fbs_runtime.application_context.PyQt5 import ApplicationContext
-
-from PyQt5.QtCore import pyqtSignal, QSize, Qt
+from PyQt5.QtCore import QSize, Qt, pyqtSignal
from PyQt5.QtGui import QIcon
-from PyQt5.QtWidgets import QToolBar, QWidget, QGridLayout, QLineEdit, QToolButton, QScrollArea, QDockWidget, QVBoxLayout
+from PyQt5.QtWidgets import (QBoxLayout, QDockWidget, QGridLayout, QLineEdit,
+ QScrollArea, QToolButton, QWidget)
from .data import defaultToolbarItems, toolbarItems
from .funcs import grouper
@@ -10,68 +10,90 @@ from .layout import flowLayout
resourceManager = ApplicationContext()
-class toolbar(QToolBar):
+class toolbar(QDockWidget):
toolbuttonClicked = pyqtSignal(dict)
def __init__(self, parent = None):
super(toolbar, self).__init__(parent)
- self.toolbarItems = defaultToolbarItems
- # self.widget = QWidget(self)
- # self.layout = QVBoxLayout(self.widget)
- self.setAllowedAreas(Qt.LeftToolBarArea | Qt.RightToolBarArea)
+ self.toolbarButtonDict = dict()
+ self.toolbarItems(defaultToolbarItems)
+ self.diagAreaLayout = None
+
+ self.setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable)
+
+ self.widget = QWidget(self)
+ self.layout = QBoxLayout(QBoxLayout.TopToBottom, self.widget)
+ self.setAllowedAreas(Qt.AllDockWidgetAreas)
+
+ self.searchBox = QLineEdit(self.widget)
- self.searchBox = QLineEdit(self)
- # self.searchBox = QLineEdit(self.widget)
self.searchBox.textChanged.connect(self.searchQuery)
- self.addWidget(self.searchBox)
- # self.layout.addWidget(self.searchBox)
+ self.layout.addWidget(self.searchBox, alignment=Qt.AlignHCenter)
- self.addSeparator()
self.diagArea = QScrollArea(self)
- self.addWidget(self.diagArea)
- # self.layout.addWidget(self.diagArea)
+ self.layout.addWidget(self.diagArea)
self.diagAreaWidget = QWidget()
- self.diagAreaWidget.setFixedWidth(200)
- # self.setWidget(self.widget)
+
+ self.setWidget(self.widget)
- def populateToolbar(self):
- # layout = QGridLayout(self.diagAreaWidget)
- # n = self.width() // 45
- # for i, items in enumerate(grouper(n, self.toolbarItems)):
- # for j, item in enumerate(items):
- # if item is not None:
- # item = toolbarItems[item]
- # button = toolbarButton(self, item)
- # button.clicked.connect(lambda : self.toolbuttonClicked.emit(item))
- # layout.addWidget(button, i, j, 1, 1, alignment=Qt.AlignHCenter)
- layout = flowLayout(self.diagAreaWidget)
- for item in self.toolbarItems:
- obj = toolbarItems[item]
- button = toolbarButton(self, obj)
- button.clicked.connect(lambda : self.toolbuttonClicked.emit(obj))
- layout.addWidget(button)
+ def populateToolbar(self, list):
+ if self.diagAreaLayout:
+ self.diagAreaLayout.deleteLater()
+ self.diagAreaLayout = flowLayout(self.diagAreaWidget)
+ for item in list:
+ self.diagAreaLayout.addWidget(self.toolbarButtonDict[item])
self.diagArea.setWidget(self.diagAreaWidget)
def searchQuery(self):
# shorten toolbaritems list with search items
# self.populateToolbar() # populate with toolbar items
- text = self.searchBox.toPlainText()
+ text = self.searchBox.text()
if text == '':
- self.toolbarItems = defaultToolbarItems
+ self.populateToolbar(self.toolbarItemList)
else:
pass
#implement shortlisting
-
+
def resize(self):
- pass
+ parent = self.parentWidget()
+ # print(self.orientation())
+ if parent.dockWidgetArea in [Qt.TopDockWidgetArea, Qt.BottomDockWidgetArea] and not self.isFloating():
+ self.layout.setDirection(QBoxLayout.LeftToRight)
+ self.setFixedHeight(.12*parent.height())
+ self.setFixedWidth(parent.width())
+ self.diagAreaWidget.setFixedHeight(.12*parent.height() - 45)
+ else:
+ self.layout.setDirection(QBoxLayout.TopToBottom)
+ self.setFixedWidth(.12*parent.width())
+ self.setFixedHeight(self.height())
+ self.diagAreaWidget.setFixedWidth(.12*parent.width() - 45)
def resizeEvent(self, event):
- self.resize()
- self.setFixedWidth(.11*self.parentWidget().width())
- self.diagAreaWidget.setFixedWidth(.11*self.parentWidget().width() - 30)
- self.diagArea.setFixedHeight(.7*self.parentWidget().height())
+ parent = self.parentWidget()
+ self.layout.setDirection(QBoxLayout.TopToBottom)
+ self.setFixedWidth(.12*parent.width())
+ self.setFixedHeight(self.height())
+ width = .12*parent.width() - 45
+ self.diagAreaWidget.setFixedWidth(width)
+ self.diagAreaWidget.setFixedHeight(self.diagAreaLayout.heightForWidth(width))
return super(toolbar, self).resizeEvent(event)
+ # @property
+ # def toolbarItems(self):
+ # return self._toolbarItems
+
+ # @toolbarItems.setter
+ def toolbarItems(self, items):
+ for item in items:
+ obj = toolbarItems[item]
+ button = toolbarButton(self, obj)
+ button.clicked.connect(lambda : self.toolbuttonClicked.emit(obj))
+ self.toolbarButtonDict[item] = button
+
+ @property
+ def toolbarItemList(self):
+ return self.toolbarButtonDict.keys()
+
class toolbarButton(QToolButton):
def __init__(self, parent = None, item = None):
@@ -79,5 +101,10 @@ class toolbarButton(QToolButton):
self.setIcon(QIcon(resourceManager.get_resource(f'toolbar/{item["icon"]}')))
self.setIconSize(QSize(40, 40))
self.setText(f'item["name"]')
- self.setFixedSize(30, 30)
- \ No newline at end of file
+ # self.setFixedSize(30, 30)
+
+ def sizeHint(self):
+ return self.minimumSizeHint()
+
+ def minimumSizeHint(self):
+ return QSize(30, 30) \ No newline at end of file