UI tweaks: custom navigation

This commit is contained in:
Olivier Keshavjee 2016-02-06 18:36:02 +01:00
parent c4e3fc7d04
commit d92c800f7b
11 changed files with 487 additions and 49 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View file

@ -3,13 +3,14 @@
import imp
import os
from PyQt5.QtCore import pyqtSignal, QSignalMapper, QTimer, QSettings, Qt, QRegExp, QUrl
from PyQt5.QtGui import QStandardItemModel
from PyQt5.QtWidgets import QMainWindow, QHeaderView, qApp, QMenu, QActionGroup, QAction, QStyle
from PyQt5.QtCore import pyqtSignal, QSignalMapper, QTimer, QSettings, Qt, QRegExp, QUrl, QSize
from PyQt5.QtGui import QStandardItemModel, QIcon
from PyQt5.QtWidgets import QMainWindow, QHeaderView, qApp, QMenu, QActionGroup, QAction, QStyle, QListWidgetItem, \
QLabel
from manuskript import settings
from manuskript.enums import Perso, Subplot, Plot, World
from manuskript.functions import AUC, wordCount
from manuskript.functions import AUC, wordCount, appPath
from manuskript.loadSave import loadStandardItemModelXML, loadFilesFromZip
from manuskript.loadSave import saveFilesToZip
from manuskript.loadSave import saveStandardItemModelXML
@ -792,6 +793,29 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.toolbar.addCustomWidget(self.tr("Project tree"), self.treeRedacWidget, self.TabRedac)
self.toolbar.addCustomWidget(self.tr("Metadata"), self.redacMetadata, self.TabRedac)
# Custom "tab" bar on the left
self.lstTabs.setIconSize(QSize(48, 48))
self.dckNavigation.setTitleBarWidget(QLabel())
for i in range(self.tabMain.count()):
icons = ["general-128px.png",
"summary-128px.png",
"characters-128px.png",
"plot-128px.png",
"world-128px.png",
"outline-128px.png",
"redaction-128px.png",
""
]
self.tabMain.setTabIcon(i, QIcon(appPath("icons/Custom/Tabs/{}".format(icons[i]))))
item = QListWidgetItem(self.tabMain.tabIcon(i),
self.tabMain.tabText(i))
item.setSizeHint(QSize(item.sizeHint().width(), 64))
item.setTextAlignment(Qt.AlignCenter)
self.lstTabs.addItem(item)
self.tabMain.tabBar().hide()
self.lstTabs.currentRowChanged.connect(self.tabMain.setCurrentIndex)
self.tabMain.currentChanged.connect(self.lstTabs.setCurrentRow)
# Splitters
self.splitterPersos.setStretchFactor(0, 25)
self.splitterPersos.setStretchFactor(1, 75)

View file

@ -11,13 +11,13 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1145, 801)
MainWindow.resize(1112, 808)
MainWindow.setWindowTitle("Manuskript")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.horizontalLayout_12 = QtWidgets.QHBoxLayout(self.centralwidget)
self.horizontalLayout_12.setContentsMargins(0, 6, 0, 0)
self.horizontalLayout_12.setObjectName("horizontalLayout_12")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget)
self.horizontalLayout_2.setContentsMargins(0, 6, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.stack = QtWidgets.QStackedWidget(self.centralwidget)
self.stack.setObjectName("stack")
self.welcomePage = QtWidgets.QWidget()
@ -39,16 +39,17 @@ class Ui_MainWindow(object):
self.stack.addWidget(self.welcomePage)
self.page_4 = QtWidgets.QWidget()
self.page_4.setObjectName("page_4")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.page_4)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setSpacing(0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.horizontalLayout_33 = QtWidgets.QHBoxLayout(self.page_4)
self.horizontalLayout_33.setObjectName("horizontalLayout_33")
self.tabMain = QtWidgets.QTabWidget(self.page_4)
self.tabMain.setTabPosition(QtWidgets.QTabWidget.North)
self.tabMain.setTabShape(QtWidgets.QTabWidget.Rounded)
self.tabMain.setDocumentMode(True)
self.tabMain.setObjectName("tabMain")
self.lytTabOverview = QtWidgets.QWidget()
self.lytTabOverview.setObjectName("lytTabOverview")
self.verticalLayout_23 = QtWidgets.QVBoxLayout(self.lytTabOverview)
self.verticalLayout_23.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_23.setObjectName("verticalLayout_23")
self.horizontalLayout_26 = QtWidgets.QHBoxLayout()
self.horizontalLayout_26.setObjectName("horizontalLayout_26")
@ -123,6 +124,7 @@ class Ui_MainWindow(object):
self.lytTabSummary = QtWidgets.QWidget()
self.lytTabSummary.setObjectName("lytTabSummary")
self.verticalLayout_24 = QtWidgets.QVBoxLayout(self.lytTabSummary)
self.verticalLayout_24.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_24.setObjectName("verticalLayout_24")
self.formLayout_5 = QtWidgets.QFormLayout()
self.formLayout_5.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTop|QtCore.Qt.AlignTrailing)
@ -322,6 +324,7 @@ class Ui_MainWindow(object):
self.lytTabPersos = QtWidgets.QWidget()
self.lytTabPersos.setObjectName("lytTabPersos")
self.verticalLayout_25 = QtWidgets.QVBoxLayout(self.lytTabPersos)
self.verticalLayout_25.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_25.setObjectName("verticalLayout_25")
self.splitterPersos = QtWidgets.QSplitter(self.lytTabPersos)
self.splitterPersos.setOrientation(QtCore.Qt.Horizontal)
@ -508,6 +511,7 @@ class Ui_MainWindow(object):
self.lytTabPlot = QtWidgets.QWidget()
self.lytTabPlot.setObjectName("lytTabPlot")
self.verticalLayout_26 = QtWidgets.QVBoxLayout(self.lytTabPlot)
self.verticalLayout_26.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_26.setObjectName("verticalLayout_26")
self.splitterPlot = QtWidgets.QSplitter(self.lytTabPlot)
self.splitterPlot.setOrientation(QtCore.Qt.Horizontal)
@ -699,6 +703,7 @@ class Ui_MainWindow(object):
self.lytTabContext = QtWidgets.QWidget()
self.lytTabContext.setObjectName("lytTabContext")
self.verticalLayout_33 = QtWidgets.QVBoxLayout(self.lytTabContext)
self.verticalLayout_33.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_33.setObjectName("verticalLayout_33")
self.splitterWorld = QtWidgets.QSplitter(self.lytTabContext)
self.splitterWorld.setOrientation(QtCore.Qt.Horizontal)
@ -707,6 +712,7 @@ class Ui_MainWindow(object):
self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_3.setObjectName("frame_3")
self.verticalLayout_32 = QtWidgets.QVBoxLayout(self.frame_3)
self.verticalLayout_32.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_32.setObjectName("verticalLayout_32")
self.treeWorld = QtWidgets.QTreeView(self.frame_3)
self.treeWorld.setEditTriggers(QtWidgets.QAbstractItemView.EditKeyPressed)
@ -786,6 +792,7 @@ class Ui_MainWindow(object):
self.lytTabOutline = QtWidgets.QWidget()
self.lytTabOutline.setObjectName("lytTabOutline")
self.verticalLayout_27 = QtWidgets.QVBoxLayout(self.lytTabOutline)
self.verticalLayout_27.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_27.setObjectName("verticalLayout_27")
self.splitterOutlineH = QtWidgets.QSplitter(self.lytTabOutline)
self.splitterOutlineH.setOrientation(QtCore.Qt.Horizontal)
@ -973,12 +980,12 @@ class Ui_MainWindow(object):
self.tabWidget.addTab(self.tab, "")
self.verticalLayout_29.addWidget(self.tabWidget)
self.tabMain.addTab(self.lytTabDebug, "")
self.horizontalLayout_2.addWidget(self.tabMain)
self.horizontalLayout_33.addWidget(self.tabMain)
self.stack.addWidget(self.page_4)
self.horizontalLayout_12.addWidget(self.stack)
self.horizontalLayout_2.addWidget(self.stack)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1145, 30))
self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 30))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
@ -1030,6 +1037,34 @@ class Ui_MainWindow(object):
self.verticalLayout_40.addWidget(self.widget)
self.dckSearch.setWidget(self.dockWidgetContents_6)
MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.dckSearch)
self.dckNavigation = QtWidgets.QDockWidget(MainWindow)
self.dckNavigation.setFeatures(QtWidgets.QDockWidget.DockWidgetClosable|QtWidgets.QDockWidget.DockWidgetMovable)
self.dckNavigation.setObjectName("dckNavigation")
self.dockWidgetContents = QtWidgets.QWidget()
self.dockWidgetContents.setObjectName("dockWidgetContents")
self.verticalLayout_16 = QtWidgets.QVBoxLayout(self.dockWidgetContents)
self.verticalLayout_16.setObjectName("verticalLayout_16")
self.lstTabs = QtWidgets.QListWidget(self.dockWidgetContents)
self.lstTabs.setStyleSheet("QListView {\n"
" show-decoration-selected: 0;\n"
" outline: none;\n"
" background-color: transparent;\n"
"}\n"
"\n"
"QListView::item:selected {\n"
" background: #DCDEF1;\n"
" color: black;\n"
"}\n"
"\n"
"QListView::item:hover {\n"
" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\n"
" stop: 0 #FAFBFE, stop: 1 #DCDEF1);\n"
"}")
self.lstTabs.setFrameShape(QtWidgets.QFrame.NoFrame)
self.lstTabs.setObjectName("lstTabs")
self.verticalLayout_16.addWidget(self.lstTabs)
self.dckNavigation.setWidget(self.dockWidgetContents)
MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dckNavigation)
self.actOpen = QtWidgets.QAction(MainWindow)
icon = QtGui.QIcon.fromTheme("document-open")
self.actOpen.setIcon(icon)
@ -1114,7 +1149,7 @@ class Ui_MainWindow(object):
self.retranslateUi(MainWindow)
self.stack.setCurrentIndex(1)
self.tabMain.setCurrentIndex(5)
self.tabMain.setCurrentIndex(4)
self.tabSummary.setCurrentIndex(0)
self.tabPersos.setCurrentIndex(0)
self.tabPlot.setCurrentIndex(0)
@ -1141,7 +1176,7 @@ class Ui_MainWindow(object):
self.grpAuthor.setTitle(_translate("MainWindow", "Author"))
self.label_15.setText(_translate("MainWindow", "Name"))
self.label_19.setText(_translate("MainWindow", "Email"))
self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabOverview), _translate("MainWindow", "Overview"))
self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabOverview), _translate("MainWindow", "General"))
self.label_9.setText(_translate("MainWindow", "Situation:"))
self.label_29.setText(_translate("MainWindow", "Summary:"))
self.cmbSummary.setItemText(0, _translate("MainWindow", "One sentance"))
@ -1218,11 +1253,12 @@ class Ui_MainWindow(object):
self.menuRecents.setTitle(_translate("MainWindow", "&Recents"))
self.menuMode.setTitle(_translate("MainWindow", "&Mode"))
self.menuHelp.setTitle(_translate("MainWindow", "Help"))
self.menuTools.setTitle(_translate("MainWindow", "Tools"))
self.menuEdit.setTitle(_translate("MainWindow", "Edit"))
self.menuTools.setTitle(_translate("MainWindow", "&Tools"))
self.menuEdit.setTitle(_translate("MainWindow", "E&dit"))
self.menuView.setTitle(_translate("MainWindow", "&View"))
self.dckCheatSheet.setWindowTitle(_translate("MainWindow", "&Cheat sheet"))
self.dckSearch.setWindowTitle(_translate("MainWindow", "Sea&rch"))
self.dckNavigation.setWindowTitle(_translate("MainWindow", "&Navigation"))
self.actOpen.setText(_translate("MainWindow", "&Open"))
self.actOpen.setShortcut(_translate("MainWindow", "Ctrl+O"))
self.actSave.setText(_translate("MainWindow", "&Save"))

View file

@ -6,15 +6,15 @@
<rect>
<x>0</x>
<y>0</y>
<width>1145</width>
<height>801</height>
<width>1112</width>
<height>808</height>
</rect>
</property>
<property name="windowTitle">
<string notr="true">Manuskript</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QHBoxLayout" name="horizontalLayout_12">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
@ -99,35 +99,38 @@
</layout>
</widget>
<widget class="QWidget" name="page_4">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_33">
<item>
<widget class="QTabWidget" name="tabMain">
<property name="tabPosition">
<enum>QTabWidget::North</enum>
</property>
<property name="tabShape">
<enum>QTabWidget::Rounded</enum>
</property>
<property name="currentIndex">
<number>5</number>
<number>4</number>
</property>
<property name="documentMode">
<bool>true</bool>
</property>
<widget class="QWidget" name="lytTabOverview">
<attribute name="title">
<string>Overview</string>
<string>General</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_23">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_26">
<item>
@ -275,6 +278,18 @@
<string>Summary</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_24">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QFormLayout" name="formLayout_5">
<property name="labelAlignment">
@ -658,6 +673,18 @@
<string>Characters</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_25">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QSplitter" name="splitterPersos">
<property name="orientation">
@ -1013,6 +1040,18 @@
<string>Plots</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_26">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QSplitter" name="splitterPlot">
<property name="orientation">
@ -1364,6 +1403,18 @@
<string>World</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_33">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QSplitter" name="splitterWorld">
<property name="orientation">
@ -1374,6 +1425,18 @@
<enum>QFrame::StyledPanel</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_32">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QTreeView" name="treeWorld">
<property name="editTriggers">
@ -1529,6 +1592,18 @@
<string>Outline</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_27">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QSplitter" name="splitterOutlineH">
<property name="orientation">
@ -1876,7 +1951,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>1145</width>
<width>1112</width>
<height>30</height>
</rect>
</property>
@ -1920,13 +1995,13 @@
</widget>
<widget class="QMenu" name="menuTools">
<property name="title">
<string>Tools</string>
<string>&amp;Tools</string>
</property>
<addaction name="actSpellcheck"/>
</widget>
<widget class="QMenu" name="menuEdit">
<property name="title">
<string>Edit</string>
<string>E&amp;dit</string>
</property>
<addaction name="actLabels"/>
<addaction name="actStatus"/>
@ -1989,6 +2064,45 @@
</layout>
</widget>
</widget>
<widget class="QDockWidget" name="dckNavigation">
<property name="features">
<set>QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetMovable</set>
</property>
<property name="windowTitle">
<string>&amp;Navigation</string>
</property>
<attribute name="dockWidgetArea">
<number>1</number>
</attribute>
<widget class="QWidget" name="dockWidgetContents">
<layout class="QVBoxLayout" name="verticalLayout_16">
<item>
<widget class="QListWidget" name="lstTabs">
<property name="styleSheet">
<string notr="true">QListView {
show-decoration-selected: 0;
outline: none;
background-color: transparent;
}
QListView::item:selected {
background: #DCDEF1;
color: black;
}
QListView::item:hover {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #FAFBFE, stop: 1 #DCDEF1);
}</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<action name="actOpen">
<property name="icon">
<iconset theme="document-open">
@ -2244,8 +2358,8 @@
<slot>setCurrentIndex(int)</slot>
<hints>
<hint type="sourcelabel">
<x>868</x>
<y>129</y>
<x>1033</x>
<y>126</y>
</hint>
<hint type="destinationlabel">
<x>868</x>
@ -2260,8 +2374,8 @@
<slot>setVisible(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>999</x>
<y>768</y>
<x>1039</x>
<y>769</y>
</hint>
<hint type="destinationlabel">
<x>1000</x>
@ -2312,8 +2426,8 @@
<y>127</y>
</hint>
<hint type="destinationlabel">
<x>404</x>
<y>120</y>
<x>411</x>
<y>119</y>
</hint>
</hints>
</connection>