From 27bc65463dd9867c5d8c011639b7958bd7824518 Mon Sep 17 00:00:00 2001 From: Blaine Date: Mon, 11 May 2020 19:44:11 +0530 Subject: refactoring and toolbar --- src/main/icons/toolbar/ellipse.png | Bin 0 -> 37162 bytes src/main/python/main.py | 28 ++++++++++++------ src/main/python/utils/canvas.py | 2 +- src/main/python/utils/data.py | 47 ++++++++++++++++++++++++++++++ src/main/python/utils/dialogs.py | 2 +- src/main/python/utils/funcs.py | 4 +++ src/main/python/utils/sizes.py | 36 ----------------------- src/main/python/utils/toolbar.py | 58 +++++++++++++++++++++++++++++++++++++ 8 files changed, 130 insertions(+), 47 deletions(-) create mode 100644 src/main/icons/toolbar/ellipse.png create mode 100644 src/main/python/utils/data.py create mode 100644 src/main/python/utils/funcs.py delete mode 100644 src/main/python/utils/sizes.py create mode 100644 src/main/python/utils/toolbar.py diff --git a/src/main/icons/toolbar/ellipse.png b/src/main/icons/toolbar/ellipse.png new file mode 100644 index 0000000..e708bdd Binary files /dev/null and b/src/main/icons/toolbar/ellipse.png differ diff --git a/src/main/python/main.py b/src/main/python/main.py index fc4c145..583baf0 100644 --- a/src/main/python/main.py +++ b/src/main/python/main.py @@ -3,15 +3,17 @@ import sys from fbs_runtime.application_context.PyQt5 import ApplicationContext from PyQt5.QtCore import QObject, Qt, pyqtSignal -from PyQt5.QtGui import QBrush, QColor, QImage, QPainter, QPalette +from PyQt5.QtGui import QBrush, QColor, QImage, QPainter, QPalette, QPen from PyQt5.QtWidgets import (QComboBox, QFileDialog, QFormLayout, QVBoxLayout, QHBoxLayout, QLabel, QMainWindow, QMenu, - QPushButton, QWidget, QMdiArea, QSplitter) + QPushButton, QWidget, QMdiArea, QSplitter, QGraphicsItem) +from PyQt5 import QtWidgets from utils.canvas import canvas from utils.fileWindow import fileWindow -from utils.sizes import ppiList, sheetDimensionList +from utils.data import ppiList, sheetDimensionList from utils import dialogs +from utils.toolbar import toolbar class appWindow(QMainWindow): """ @@ -44,7 +46,7 @@ class appWindow(QMainWindow): #create toolbar and add the toolbar plus mdi to layout self.createToolbar() - mainLayout.addWidget(self.toolbar) + # mainLayout.addWidget(self.toolbar) mainLayout.addWidget(QSplitter(Qt.Vertical, self)) mainLayout.addWidget(self.mdi) @@ -62,11 +64,19 @@ class appWindow(QMainWindow): def createToolbar(self): #place holder for toolbar with fixed width, layout may change - self.toolbar = QWidget(self.mainWidget) - self.toolbar.setObjectName("Toolbar") - self.toolbar.setFixedWidth(200) - toolbarLayout = QFormLayout(self.toolbar) - self.toolbar.setLayout(toolbarLayout) + self.toolbar = toolbar(self.mainWidget) + # self.toolbar.setObjectName("Toolbar") + self.addToolBar(Qt.LeftToolBarArea, self.toolbar) + self.toolbar.toolbuttonClicked.connect(self.toolButtonClicked) + self.toolbar.populateToolbar() + + def toolButtonClicked(self, object): + currentDiagram = self.mdi.currentSubWindow().tabber.currentWidget().painter + if currentDiagram: + graphic = getattr(QtWidgets, object['object'])(*object['args']) + graphic.setPen(QPen(Qt.black, 2)) + graphic.setFlags(QGraphicsItem.ItemIsSelectable | QGraphicsItem.ItemIsMovable) + currentDiagram.addItem(graphic) def newProject(self): #call to create a new file inside mdi area diff --git a/src/main/python/utils/canvas.py b/src/main/python/utils/canvas.py index a4c56f3..d393e36 100644 --- a/src/main/python/utils/canvas.py +++ b/src/main/python/utils/canvas.py @@ -8,7 +8,7 @@ from PyQt5.QtWidgets import (QFileDialog, QApplication, from . import dialogs from .graphics import customView -from .sizes import paperSizes, ppiList, sheetDimensionList +from .data import paperSizes, ppiList, sheetDimensionList class canvas(QWidget): """ diff --git a/src/main/python/utils/data.py b/src/main/python/utils/data.py new file mode 100644 index 0000000..d0b5ca1 --- /dev/null +++ b/src/main/python/utils/data.py @@ -0,0 +1,47 @@ +paperSizes = { + "A0": { + "72": [2384, 3370], + "96": [3179, 4494], + "150": [4967, 7022], + "300": [9933, 14043] + }, + "A1": { + "72": [1684, 2384], + "96": [2245, 3179], + "150": [3508, 4967], + "300": [7016, 9933] + }, + "A2": { + "72": [1191, 1684], + "96": [1587, 2245], + "150": [2480, 3508], + "300": [4960, 7016] + }, + "A3": { + "72": [842, 1191], + "96": [1123, 1587], + "150": [1754, 2480], + "300": [3508, 4960] + }, + "A4": { + "72": [595, 842], + "96": [794, 1123], + "150": [1240, 1754], + "300": [2480, 3508] + } +} + +sheetDimensionList = [f'A{i}' for i in range(5)] + +ppiList = ["72", "96", "150", "300"] + +toolbarItems = { + 'Ellipse': { + 'name': 'Ellipse', + 'icon': 'ellipse.png', + 'object': 'QGraphicsEllipseItem', + 'args': [20, 20, 300, 300] + } +} + +defaultToolbarItems = toolbarItems.keys() \ No newline at end of file diff --git a/src/main/python/utils/dialogs.py b/src/main/python/utils/dialogs.py index 4351f16..e008aa5 100644 --- a/src/main/python/utils/dialogs.py +++ b/src/main/python/utils/dialogs.py @@ -1,5 +1,5 @@ from PyQt5.QtWidgets import QDialog, QPushButton, QFormLayout, QComboBox, QLabel, QMessageBox, QDialogButtonBox -from .sizes import sheetDimensionList, ppiList +from .data import sheetDimensionList, ppiList class paperDims(QDialog): """ diff --git a/src/main/python/utils/funcs.py b/src/main/python/utils/funcs.py new file mode 100644 index 0000000..cd2dc65 --- /dev/null +++ b/src/main/python/utils/funcs.py @@ -0,0 +1,4 @@ +from itertools import zip_longest +def grouper(n, iterable, fillvalue=None): + args = [iter(iterable)] * n + return zip_longest(fillvalue=fillvalue, *args) \ No newline at end of file diff --git a/src/main/python/utils/sizes.py b/src/main/python/utils/sizes.py deleted file mode 100644 index b0aa70a..0000000 --- a/src/main/python/utils/sizes.py +++ /dev/null @@ -1,36 +0,0 @@ -paperSizes = { - "A0": { - "72": [2384, 3370], - "96": [3179, 4494], - "150": [4967, 7022], - "300": [9933, 14043] - }, - "A1": { - "72": [1684, 2384], - "96": [2245, 3179], - "150": [3508, 4967], - "300": [7016, 9933] - }, - "A2": { - "72": [1191, 1684], - "96": [1587, 2245], - "150": [2480, 3508], - "300": [4960, 7016] - }, - "A3": { - "72": [842, 1191], - "96": [1123, 1587], - "150": [1754, 2480], - "300": [3508, 4960] - }, - "A4": { - "72": [595, 842], - "96": [794, 1123], - "150": [1240, 1754], - "300": [2480, 3508] - } -} - -sheetDimensionList = [f'A{i}' for i in range(5)] - -ppiList = ["72", "96", "150", "300"] \ No newline at end of file diff --git a/src/main/python/utils/toolbar.py b/src/main/python/utils/toolbar.py new file mode 100644 index 0000000..9a48aa9 --- /dev/null +++ b/src/main/python/utils/toolbar.py @@ -0,0 +1,58 @@ +from PyQt5.QtCore import pyqtSignal, QSize +from PyQt5.QtGui import QIcon +from PyQt5.QtWidgets import QToolBar, QWidget, QHBoxLayout, QLineEdit, QToolButton + +from .data import defaultToolbarItems, toolbarItems +from .funcs import grouper + +class toolbar(QToolBar): + toolbuttonClicked = pyqtSignal(dict) + + def __init__(self, parent = None): + super(toolbar, self).__init__(parent) + self.toolbarItems = defaultToolbarItems + self.toolbarWidgets = [] + self.setFixedWidth = 200 + + self.searchBox = QLineEdit(self) + self.searchBox.textChanged.connect(self.searchQuery) + self.addWidget(self.searchBox) + + def populateToolbar(self): + # self.clearWidgets() + + for a, b, c in grouper(3, self.toolbarItems): + widget = QWidget(self) + layout = QHBoxLayout(widget) + if a is not None: + item = toolbarItems[a] + button = toolbarButton(self, item) + button.clicked.connect(lambda : self.toolbuttonClicked.emit(item)) + layout.addWidget(button) + # layout.addItem(b) + # layout.addItem(c) + self.toolbarWidgets.append(widget) + self.addWidget(widget) + + def clearWidgets(self): + for i in self.toolbarWidgets(): + i.deleteLater() + + def searchQuery(self): + # shorten toolbaritems list with search items + # self.populateToolbar() # populate with toolbar items + text = self.searchBox.toPlainText() + if text == '': + self.toolbarItems = defaultToolbarItems + else: + pass + #implement shortlisting + +class toolbarButton(QToolButton): + + def __init__(self, parent = None, item = None): + super(toolbarButton, self).__init__(parent) + self.setIcon(QIcon(f'../../icons/toolbar/{item["icon"]}')) + self.setIconSize(QSize(25, 25)) + self.setText(f'item["name"]') + self.setFixedSize(30, 30) \ No newline at end of file -- cgit