Adds slider, and adapts title's rect to text

This commit is contained in:
Olivier Keshavjee 2016-02-28 09:24:30 +01:00
parent 998c38eb2a
commit 5d69b46786
4 changed files with 52 additions and 35 deletions

View file

@ -2,7 +2,8 @@
# Form implementation generated from reading ui file 'manuskript/ui/mainWindow.ui' # Form implementation generated from reading ui file 'manuskript/ui/mainWindow.ui'
# #
# Created by: PyQt5 UI code generator 5.4.2 # Created: Sun Feb 28 09:13:29 2016
# by: PyQt5 UI code generator 5.2.1
# #
# WARNING! All changes made in this file will be lost! # WARNING! All changes made in this file will be lost!
@ -16,8 +17,8 @@ class Ui_MainWindow(object):
self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget") self.centralwidget.setObjectName("centralwidget")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget) self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget)
self.horizontalLayout_2.setContentsMargins(0, 6, 0, 0)
self.horizontalLayout_2.setSpacing(0) self.horizontalLayout_2.setSpacing(0)
self.horizontalLayout_2.setContentsMargins(0, 6, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.stack = QtWidgets.QStackedWidget(self.centralwidget) self.stack = QtWidgets.QStackedWidget(self.centralwidget)
self.stack.setObjectName("stack") self.stack.setObjectName("stack")
@ -808,6 +809,7 @@ class Ui_MainWindow(object):
self.layoutWidget = QtWidgets.QWidget(self.splitterOutlineH) self.layoutWidget = QtWidgets.QWidget(self.splitterOutlineH)
self.layoutWidget.setObjectName("layoutWidget") self.layoutWidget.setObjectName("layoutWidget")
self.verticalLayout_14 = QtWidgets.QVBoxLayout(self.layoutWidget) self.verticalLayout_14 = QtWidgets.QVBoxLayout(self.layoutWidget)
self.verticalLayout_14.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_14.setObjectName("verticalLayout_14") self.verticalLayout_14.setObjectName("verticalLayout_14")
self.splitterOutlineV = QtWidgets.QSplitter(self.layoutWidget) self.splitterOutlineV = QtWidgets.QSplitter(self.layoutWidget)
self.splitterOutlineV.setOrientation(QtCore.Qt.Vertical) self.splitterOutlineV.setOrientation(QtCore.Qt.Vertical)
@ -1299,18 +1301,18 @@ class Ui_MainWindow(object):
self.actCompile.setShortcut(_translate("MainWindow", "F6")) self.actCompile.setShortcut(_translate("MainWindow", "F6"))
self.actToolFrequency.setText(_translate("MainWindow", "&Frequency Analyzer")) self.actToolFrequency.setText(_translate("MainWindow", "&Frequency Analyzer"))
from manuskript.ui.cheatSheet import cheatSheet
from manuskript.ui.editors.mainEditor import mainEditor
from manuskript.ui.search import search
from manuskript.ui.sldImportance import sldImportance
from manuskript.ui.views.basicItemView import basicItemView
from manuskript.ui.views.lineEditView import lineEditView
from manuskript.ui.views.metadataView import metadataView
from manuskript.ui.views.outlineView import outlineView
from manuskript.ui.views.persoTreeView import persoTreeView
from manuskript.ui.views.plotTreeView import plotTreeView from manuskript.ui.views.plotTreeView import plotTreeView
from manuskript.ui.views.storylineView import storylineView from manuskript.ui.views.storylineView import storylineView
from manuskript.ui.views.textEditCompleter import textEditCompleter from manuskript.ui.views.basicItemView import basicItemView
from manuskript.ui.views.textEditView import textEditView
from manuskript.ui.views.treeView import treeView from manuskript.ui.views.treeView import treeView
from manuskript.ui.views.outlineView import outlineView
from manuskript.ui.search import search
from manuskript.ui.sldImportance import sldImportance
from manuskript.ui.views.textEditCompleter import textEditCompleter
from manuskript.ui.views.metadataView import metadataView
from manuskript.ui.views.persoTreeView import persoTreeView
from manuskript.ui.cheatSheet import cheatSheet
from manuskript.ui.welcome import welcome from manuskript.ui.welcome import welcome
from manuskript.ui.editors.mainEditor import mainEditor
from manuskript.ui.views.lineEditView import lineEditView
from manuskript.ui.views.textEditView import textEditView

View file

@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
# --!-- coding: utf8 --!-- # --!-- coding: utf8 --!--
from PyQt5.QtCore import Qt, QTimer from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtGui import QBrush, QPen from PyQt5.QtGui import QBrush, QPen, QFontMetrics
from PyQt5.QtWidgets import QWidget, QGraphicsScene, QGraphicsSimpleTextItem, QMenu, QAction, QGraphicsRectItem, \ from PyQt5.QtWidgets import QWidget, QGraphicsScene, QGraphicsSimpleTextItem, QMenu, QAction, QGraphicsRectItem, \
QGraphicsLineItem QGraphicsLineItem
@ -14,7 +14,6 @@ class storylineView(QWidget, Ui_storylineView):
QWidget.__init__(self, parent) QWidget.__init__(self, parent)
self.setupUi(self) self.setupUi(self)
self._mdlPlots = None self._mdlPlots = None
self.btnRefresh.clicked.connect(self.refresh)
self.scene = QGraphicsScene() self.scene = QGraphicsScene()
self.view.setScene(self.scene) self.view.setScene(self.scene)
@ -23,6 +22,9 @@ class storylineView(QWidget, Ui_storylineView):
self.reloadTimer.setSingleShot(True) self.reloadTimer.setSingleShot(True)
self.reloadTimer.setInterval(500) self.reloadTimer.setInterval(500)
self.btnRefresh.clicked.connect(self.refresh)
self.sldTxtSize.sliderMoved.connect(self.reloadTimer.start)
self.generateMenu() self.generateMenu()
def generateMenu(self): def generateMenu(self):
@ -58,14 +60,13 @@ class storylineView(QWidget, Ui_storylineView):
LINE_HEIGHT = 32 LINE_HEIGHT = 32
SPACING = 6 SPACING = 6
RECT_WIDTH = 200 TEXT_WIDTH = self.sldTxtSize.value()
TEXT_WIDTH = 25
LEVEL_HEIGHT = 12 LEVEL_HEIGHT = 12
s = self.scene s = self.scene
s.clear() s.clear()
# Get Max Level # Get Max Level (max depth)
root = self._mdlOutline.rootItem root = self._mdlOutline.rootItem
def maxLevel(item, level=0, max=0): def maxLevel(item, level=0, max=0):
if level > max: if level > max:
@ -81,18 +82,23 @@ class storylineView(QWidget, Ui_storylineView):
# Get plots # Get plots
plotsID = self._mdlPlots.getPlotsByImportance() plotsID = self._mdlPlots.getPlotsByImportance()
plots = [] plots = []
fm = QFontMetrics(s.font())
max_name = 0
for importance in plotsID: for importance in plotsID:
for ID in importance: for ID in importance:
name = self._mdlPlots.getPlotNameByID(ID) name = self._mdlPlots.getPlotNameByID(ID)
plots.append((ID, name)) plots.append((ID, name))
max_name = max(fm.width(name), max_name)
ROWS_HEIGHT = len(plots) * (LINE_HEIGHT + SPACING ) ROWS_HEIGHT = len(plots) * (LINE_HEIGHT + SPACING )
TITLE_WIDTH = max_name + 2 * SPACING
# Add Folders and Texts # Add Folders and Texts
outline = OutlineRect(0, 0, 0, ROWS_HEIGHT + SPACING + MAX_LEVEL * LEVEL_HEIGHT) outline = OutlineRect(0, 0, 0, ROWS_HEIGHT + SPACING + MAX_LEVEL * LEVEL_HEIGHT)
s.addItem(outline) s.addItem(outline)
outline.setPos(RECT_WIDTH + SPACING, 0) outline.setPos(TITLE_WIDTH + SPACING, 0)
# A Function to add a rect with centered text # A Function to add a rect with centered text
def addRectText(x, w, parent, text="", level=0, tooltip=""): def addRectText(x, w, parent, text="", level=0, tooltip=""):
@ -114,7 +120,7 @@ class storylineView(QWidget, Ui_storylineView):
r = 0 r = 0
for c in item.children(): for c in item.children():
r += itemWidth(c) r += itemWidth(c)
return r return r or TEXT_WIDTH
else: else:
return TEXT_WIDTH return TEXT_WIDTH
@ -142,7 +148,7 @@ class storylineView(QWidget, Ui_storylineView):
color = randomColor() color = randomColor()
# Rect # Rect
r = QGraphicsRectItem(0, 0, RECT_WIDTH, LINE_HEIGHT, itemsRect) r = QGraphicsRectItem(0, 0, TITLE_WIDTH, LINE_HEIGHT, itemsRect)
r.setPen(QPen(Qt.NoPen)) r.setPen(QPen(Qt.NoPen))
r.setBrush(QBrush(color)) r.setBrush(QBrush(color))
r.setPos(0, i * LINE_HEIGHT + i * SPACING) r.setPos(0, i * LINE_HEIGHT + i * SPACING)
@ -153,9 +159,9 @@ class storylineView(QWidget, Ui_storylineView):
txt.setPos(r.boundingRect().center() - txt.boundingRect().center()) txt.setPos(r.boundingRect().center() - txt.boundingRect().center())
# Line # Line
line = PlotLine(RECT_WIDTH, line = PlotLine(TITLE_WIDTH,
r.mapToScene(r.rect().center()).y(), r.mapToScene(r.rect().center()).y(),
OUTLINE_WIDTH + RECT_WIDTH + SPACING, OUTLINE_WIDTH + TITLE_WIDTH + SPACING,
r.mapToScene(r.rect().center()).y()) r.mapToScene(r.rect().center()).y())
s.addItem(line) s.addItem(line)
line.setPen(QPen(color, 5)) line.setPen(QPen(color, 5))

View file

@ -2,7 +2,8 @@
# Form implementation generated from reading ui file 'manuskript/ui/views/storylineView_ui.ui' # Form implementation generated from reading ui file 'manuskript/ui/views/storylineView_ui.ui'
# #
# Created by: PyQt5 UI code generator 5.4.2 # Created: Sun Feb 28 09:13:29 2016
# by: PyQt5 UI code generator 5.2.1
# #
# WARNING! All changes made in this file will be lost! # WARNING! All changes made in this file will be lost!
@ -13,8 +14,8 @@ class Ui_storylineView(object):
storylineView.setObjectName("storylineView") storylineView.setObjectName("storylineView")
storylineView.resize(1040, 130) storylineView.resize(1040, 130)
self.horizontalLayout = QtWidgets.QHBoxLayout(storylineView) self.horizontalLayout = QtWidgets.QHBoxLayout(storylineView)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setSpacing(0) self.horizontalLayout.setSpacing(0)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout.setObjectName("horizontalLayout")
self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setSpacing(0) self.verticalLayout.setSpacing(0)
@ -37,8 +38,13 @@ class Ui_storylineView(object):
self.btnRefresh.setFlat(True) self.btnRefresh.setFlat(True)
self.btnRefresh.setObjectName("btnRefresh") self.btnRefresh.setObjectName("btnRefresh")
self.verticalLayout.addWidget(self.btnRefresh) self.verticalLayout.addWidget(self.btnRefresh)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.sldTxtSize = QtWidgets.QSlider(storylineView)
self.verticalLayout.addItem(spacerItem) self.sldTxtSize.setMinimum(1)
self.sldTxtSize.setMaximum(100)
self.sldTxtSize.setProperty("value", 20)
self.sldTxtSize.setOrientation(QtCore.Qt.Vertical)
self.sldTxtSize.setObjectName("sldTxtSize")
self.verticalLayout.addWidget(self.sldTxtSize)
self.btnSettings = QtWidgets.QPushButton(storylineView) self.btnSettings = QtWidgets.QPushButton(storylineView)
self.btnSettings.setMaximumSize(QtCore.QSize(32, 32)) self.btnSettings.setMaximumSize(QtCore.QSize(32, 32))
self.btnSettings.setText("") self.btnSettings.setText("")

View file

@ -88,17 +88,20 @@
</widget> </widget>
</item> </item>
<item> <item>
<spacer name="verticalSpacer"> <widget class="QSlider" name="sldTxtSize">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>20</number>
</property>
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
</property> </property>
<property name="sizeHint" stdset="0"> </widget>
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item> </item>
<item> <item>
<widget class="QPushButton" name="btnSettings"> <widget class="QPushButton" name="btnSettings">