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'
#
# 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!
@ -16,8 +17,8 @@ class Ui_MainWindow(object):
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget)
self.horizontalLayout_2.setContentsMargins(0, 6, 0, 0)
self.horizontalLayout_2.setSpacing(0)
self.horizontalLayout_2.setContentsMargins(0, 6, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.stack = QtWidgets.QStackedWidget(self.centralwidget)
self.stack.setObjectName("stack")
@ -808,6 +809,7 @@ class Ui_MainWindow(object):
self.layoutWidget = QtWidgets.QWidget(self.splitterOutlineH)
self.layoutWidget.setObjectName("layoutWidget")
self.verticalLayout_14 = QtWidgets.QVBoxLayout(self.layoutWidget)
self.verticalLayout_14.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_14.setObjectName("verticalLayout_14")
self.splitterOutlineV = QtWidgets.QSplitter(self.layoutWidget)
self.splitterOutlineV.setOrientation(QtCore.Qt.Vertical)
@ -1299,18 +1301,18 @@ class Ui_MainWindow(object):
self.actCompile.setShortcut(_translate("MainWindow", "F6"))
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.storylineView import storylineView
from manuskript.ui.views.textEditCompleter import textEditCompleter
from manuskript.ui.views.textEditView import textEditView
from manuskript.ui.views.basicItemView import basicItemView
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.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
# --!-- coding: utf8 --!--
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, \
QGraphicsLineItem
@ -14,7 +14,6 @@ class storylineView(QWidget, Ui_storylineView):
QWidget.__init__(self, parent)
self.setupUi(self)
self._mdlPlots = None
self.btnRefresh.clicked.connect(self.refresh)
self.scene = QGraphicsScene()
self.view.setScene(self.scene)
@ -23,6 +22,9 @@ class storylineView(QWidget, Ui_storylineView):
self.reloadTimer.setSingleShot(True)
self.reloadTimer.setInterval(500)
self.btnRefresh.clicked.connect(self.refresh)
self.sldTxtSize.sliderMoved.connect(self.reloadTimer.start)
self.generateMenu()
def generateMenu(self):
@ -58,14 +60,13 @@ class storylineView(QWidget, Ui_storylineView):
LINE_HEIGHT = 32
SPACING = 6
RECT_WIDTH = 200
TEXT_WIDTH = 25
TEXT_WIDTH = self.sldTxtSize.value()
LEVEL_HEIGHT = 12
s = self.scene
s.clear()
# Get Max Level
# Get Max Level (max depth)
root = self._mdlOutline.rootItem
def maxLevel(item, level=0, max=0):
if level > max:
@ -81,18 +82,23 @@ class storylineView(QWidget, Ui_storylineView):
# Get plots
plotsID = self._mdlPlots.getPlotsByImportance()
plots = []
fm = QFontMetrics(s.font())
max_name = 0
for importance in plotsID:
for ID in importance:
name = self._mdlPlots.getPlotNameByID(ID)
plots.append((ID, name))
max_name = max(fm.width(name), max_name)
ROWS_HEIGHT = len(plots) * (LINE_HEIGHT + SPACING )
TITLE_WIDTH = max_name + 2 * SPACING
# Add Folders and Texts
outline = OutlineRect(0, 0, 0, ROWS_HEIGHT + SPACING + MAX_LEVEL * LEVEL_HEIGHT)
s.addItem(outline)
outline.setPos(RECT_WIDTH + SPACING, 0)
outline.setPos(TITLE_WIDTH + SPACING, 0)
# A Function to add a rect with centered text
def addRectText(x, w, parent, text="", level=0, tooltip=""):
@ -114,7 +120,7 @@ class storylineView(QWidget, Ui_storylineView):
r = 0
for c in item.children():
r += itemWidth(c)
return r
return r or TEXT_WIDTH
else:
return TEXT_WIDTH
@ -142,7 +148,7 @@ class storylineView(QWidget, Ui_storylineView):
color = randomColor()
# 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.setBrush(QBrush(color))
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())
# Line
line = PlotLine(RECT_WIDTH,
line = PlotLine(TITLE_WIDTH,
r.mapToScene(r.rect().center()).y(),
OUTLINE_WIDTH + RECT_WIDTH + SPACING,
OUTLINE_WIDTH + TITLE_WIDTH + SPACING,
r.mapToScene(r.rect().center()).y())
s.addItem(line)
line.setPen(QPen(color, 5))

View file

@ -2,7 +2,8 @@
# 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!
@ -13,8 +14,8 @@ class Ui_storylineView(object):
storylineView.setObjectName("storylineView")
storylineView.resize(1040, 130)
self.horizontalLayout = QtWidgets.QHBoxLayout(storylineView)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setSpacing(0)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setSpacing(0)
@ -37,8 +38,13 @@ class Ui_storylineView(object):
self.btnRefresh.setFlat(True)
self.btnRefresh.setObjectName("btnRefresh")
self.verticalLayout.addWidget(self.btnRefresh)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem)
self.sldTxtSize = QtWidgets.QSlider(storylineView)
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.setMaximumSize(QtCore.QSize(32, 32))
self.btnSettings.setText("")

View file

@ -88,17 +88,20 @@
</widget>
</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">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnSettings">