From 7bb52c80a5aa57cedc76f19e25daa840c926e67f Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Thu, 24 Mar 2016 13:42:47 +0100 Subject: [PATCH] View mode working --- manuskript/functions.py | 45 +++++++++++++--- manuskript/mainWindow.py | 69 ++++++++++++++++++++++--- manuskript/settings.py | 11 +++- manuskript/settingsWindow.py | 10 ++-- manuskript/ui/collapsibleDockWidgets.py | 11 +++- manuskript/ui/mainWindow.py | 66 +++++++++++------------ manuskript/ui/mainWindow.ui | 50 ++++++++++-------- manuskript/ui/views/outlineView.py | 4 ++ 8 files changed, 189 insertions(+), 77 deletions(-) diff --git a/manuskript/functions.py b/manuskript/functions.py index fa8cffd8..948d9fc3 100644 --- a/manuskript/functions.py +++ b/manuskript/functions.py @@ -4,7 +4,7 @@ import os from random import * -from PyQt5.QtCore import Qt, QRect, QStandardPaths, QObject +from PyQt5.QtCore import Qt, QRect, QStandardPaths, QObject, QRegExp # Used to detect multiple connections from PyQt5.QtGui import QBrush, QIcon, QPainter @@ -18,27 +18,32 @@ from manuskript.enums import Outline AUC = Qt.AutoConnection | Qt.UniqueConnection MW = None + def wordCount(text): return len(text.strip().replace(" ", "\n").split("\n")) if text else 0 + def toInt(text): if text: return int(text) else: return 0 - + + def toFloat(text): if text: return float(text) else: return 0. - + + def toString(text): if text in [None, "None"]: return "" else: return str(text) - + + def drawProgress(painter, rect, progress, radius=0): painter.setPen(Qt.NoPen) painter.setBrush(QColor("#dddddd")) @@ -49,7 +54,8 @@ def drawProgress(painter, rect, progress, radius=0): r2 = QRect(rect) r2.setWidth(r2.width() * min(progress, 1)) painter.drawRoundedRect(r2, radius, radius) - + + def colorFromProgress(progress): progress = toFloat(progress) c1 = QColor(Qt.red) @@ -65,7 +71,8 @@ def colorFromProgress(progress): return c4 else: return c3 - + + def mainWindow(): global MW if not MW: @@ -77,6 +84,7 @@ def mainWindow(): else: return MW + def iconColor(icon): """Returns a QRgb from a QIcon, assuming its all the same color""" px = icon.pixmap(5, 5) @@ -85,14 +93,17 @@ def iconColor(icon): else: return QColor(Qt.transparent) + def iconFromColor(color): px = QPixmap(32, 32) px.fill(color) return QIcon(px) + def iconFromColorString(string): return iconFromColor(QColor(string)) + def randomColor(mix=None): """Generates a random color. If mix (QColor) is given, mixes the random color and mix.""" r = randint(0, 255) @@ -106,6 +117,7 @@ def randomColor(mix=None): return QColor(r, g, b) + def mixColors(col1, col2, f=.5): f2 = 1-f r = col1.red() * f + col2.red() * f2 @@ -113,6 +125,7 @@ def mixColors(col1, col2, f=.5): b = col1.blue() * f + col2.blue() * f2 return QColor(r, g, b) + def outlineItemColors(item): """Takes an OutlineItem and returns a dict of colors.""" colors = {} @@ -144,7 +157,8 @@ def outlineItemColors(item): colors["Compile"] = QColor(Qt.black) return colors - + + def colorifyPixmap(pixmap, color): # FIXME: ugly p = QPainter(pixmap) @@ -152,12 +166,14 @@ def colorifyPixmap(pixmap, color): p.fillRect(pixmap.rect(), color) return pixmap + def appPath(suffix=None): p = os.path.realpath(os.path.join(os.path.split(__file__)[0], "..")) if suffix: p = os.path.join(p, suffix) return p + def writablePath(suffix=None): if hasattr(QStandardPaths, "AppLocalDataLocation"): p = QStandardPaths.writableLocation(QStandardPaths.AppLocalDataLocation) @@ -170,6 +186,7 @@ def writablePath(suffix=None): os.makedirs(p) return p + def allPaths(suffix=None): paths = [] # src directory @@ -178,6 +195,7 @@ def allPaths(suffix=None): paths.append(writablePath(suffix)) return paths + def lightBlue(): """ A light blue used in several places in manuskript. @@ -185,8 +203,19 @@ def lightBlue(): """ return QColor(Qt.blue).lighter(190) + def totalObjects(): return len(mainWindow().findChildren(QObject)) + def printObjects(): - print("Objects:", str(totalObjects())) \ No newline at end of file + print("Objects:", str(totalObjects())) + + +def findWidgetsOfClass(cls): + """ + Returns all widgets, children of MainWindow, whose class is cls. + @param cls: a class + @return: list of QWidgets + """ + return mainWindow().findChildren(cls, QRegExp()) diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index 13b4cd97..f92c73eb 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -9,8 +9,8 @@ from PyQt5.QtWidgets import QMainWindow, QHeaderView, qApp, QMenu, QActionGroup, QLabel from manuskript import settings -from manuskript.enums import Character, PlotStep, Plot, World -from manuskript.functions import AUC, wordCount, appPath +from manuskript.enums import Character, PlotStep, Plot, World, Outline +from manuskript.functions import AUC, wordCount, appPath, findWidgetsOfClass from manuskript import loadSave from manuskript.models.characterModel import characterModel from manuskript.models.outlineModel import outlineModel @@ -93,8 +93,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Main Menu for i in [self.actSave, self.actSaveAs, self.actCloseProject, - self.menuEdit, self.menuMode, self.menuView, self.menuTools, - self.menuHelp]: + self.menuEdit, self.menuView, self.menuTools, self.menuHelp]: i.setEnabled(False) self.actOpen.triggered.connect(self.welcome.openFile) @@ -109,6 +108,14 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.actToolFrequency.triggered.connect(self.frequencyAnalyzer) self.generateViewMenu() + self.actModeGroup = QActionGroup(self) + self.actModeSimple.setActionGroup(self.actModeGroup) + self.actModeFiction.setActionGroup(self.actModeGroup) + self.actModeSnowflake.setActionGroup(self.actModeGroup) + self.actModeSimple.triggered.connect(self.setViewModeSimple) + self.actModeFiction.triggered.connect(self.setViewModeFiction) + self.actModeSnowflake.setEnabled(False) + self.makeUIConnections() # self.loadProject(os.path.join(appPath(), "test_project.zip")) @@ -322,6 +329,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): # We force to emit even if it opens on the current tab self.tabMain.currentChanged.emit(settings.lastTab) self.mainEditor.updateCorkBackground() + if settings.viewMode == "simple": + self.setViewModeSimple() + else: + self.setViewModeFiction() # Set autosave self.saveTimer = QTimer() @@ -349,8 +360,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): # UI for i in [self.actSave, self.actSaveAs, self.actCloseProject, - self.menuEdit, self.menuMode, self.menuView, self.menuTools, - self.menuHelp]: + self.menuEdit, self.menuView, self.menuTools, self.menuHelp]: i.setEnabled(True) # FIXME: set Window's name: project name @@ -379,8 +389,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): # UI for i in [self.actSave, self.actSaveAs, self.actCloseProject, - self.menuEdit, self.menuMode, self.menuView, self.menuTools, - self.menuHelp]: + self.menuEdit, self.menuView, self.menuTools, self.menuHelp]: i.setEnabled(False) # Reload recent files @@ -979,6 +988,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): } self.menuView.clear() + self.menuView.addMenu(self.menuMode) + self.menuView.addSeparator() # print("Generating menus with", settings.viewSettings) @@ -1014,6 +1025,48 @@ class MainWindow(QMainWindow, Ui_MainWindow): if item == "Tree": self.treeRedacOutline.viewport().update() + ############################################################################### + # VIEW MODES + ############################################################################### + + def setViewModeSimple(self): + settings.viewMode = "simple" + self.tabMain.setCurrentIndex(self.TabRedac) + self.viewModeFictionVisibilitySwitch(False) + self.actModeSimple.setChecked(True) + + def setViewModeFiction(self): + settings.viewMode = "fiction" + self.viewModeFictionVisibilitySwitch(True) + self.actModeFiction.setChecked(True) + + def viewModeFictionVisibilitySwitch(self, val): + """ + Swtiches the visibility of some UI components useful for fiction only + @param val: sets visibility to val + """ + + # Menu navigation & boutton in toolbar + self.toolbar.setDockVisibility(self.dckNavigation, val) + + # POV in metadatas + from manuskript.ui.views.propertiesView import propertiesView + for w in findWidgetsOfClass(propertiesView): + w.lblPOV.setVisible(val) + w.cmbPOV.setVisible(val) + + # POV in outline view + if Outline.POV.value in settings.outlineViewColumns: + settings.outlineViewColumns.remove(Outline.POV.value) + + from manuskript.ui.views.outlineView import outlineView + for w in findWidgetsOfClass(outlineView): + w.hideColumns() + + # TODO: clean up all other fiction things in non-fiction view mode + # Character in search widget + # POV in settings / views + ############################################################################### # COMPILE ############################################################################### diff --git a/manuskript/settings.py b/manuskript/settings.py index 8086eaef..9bff1208 100644 --- a/manuskript/settings.py +++ b/manuskript/settings.py @@ -85,12 +85,14 @@ frequencyAnalyzer = { "phraseMin": 2, "phraseMax": 5 } + +viewMode = "fiction" def save(filename=None, protocol=None): global spellcheck, dict, corkSliderFactor, viewSettings, corkSizeFactor, folderView, lastTab, openIndexes, \ autoSave, autoSaveDelay, saveOnQuit, autoSaveNoChanges, autoSaveNoChangesDelay, outlineViewColumns, \ - corkBackground, fullScreenTheme, defaultTextType, textEditor, revisions, frequencyAnalyzer + corkBackground, fullScreenTheme, defaultTextType, textEditor, revisions, frequencyAnalyzer, viewMode allSettings = { "viewSettings": viewSettings, @@ -111,7 +113,8 @@ def save(filename=None, protocol=None): "defaultTextType":defaultTextType, "textEditor":textEditor, "revisions":revisions, - "frequencyAnalyzer": frequencyAnalyzer + "frequencyAnalyzer": frequencyAnalyzer, + "viewMode": viewMode, } #pp=pprint.PrettyPrinter(indent=4, compact=False) @@ -244,3 +247,7 @@ def load(string, fromString=False, protocol=None): global frequencyAnalyzer frequencyAnalyzer = allSettings["frequencyAnalyzer"] + if "viewMode" in allSettings: + global viewMode + viewMode = allSettings["viewMode"] + diff --git a/manuskript/settingsWindow.py b/manuskript/settingsWindow.py index 1a745a2b..5e1bf928 100644 --- a/manuskript/settingsWindow.py +++ b/manuskript/settingsWindow.py @@ -11,12 +11,13 @@ from PyQt5.QtWidgets import qApp # Spell checker support from manuskript import settings from manuskript.enums import Outline -from manuskript.functions import allPaths, iconColor, writablePath, appPath +from manuskript.functions import allPaths, iconColor, writablePath, appPath, findWidgetsOfClass from manuskript.functions import mainWindow from manuskript.ui.editors.themes import createThemePreview from manuskript.ui.editors.themes import getThemeName from manuskript.ui.editors.themes import loadThemeDatas from manuskript.ui.settings_ui import Ui_Settings +from manuskript.ui.views.outlineView import outlineView from manuskript.ui.views.textEditView import textEditView from manuskript.ui.welcome import welcome @@ -99,6 +100,8 @@ class settingsWindow(QWidget, Ui_Settings): chk.setChecked(col in settings.outlineViewColumns) chk.stateChanged.connect(self.outlineColumnsChanged) + self.chkOutlinePOV.setVisible(settings.viewMode != "simple") # Hides checkbox if non-fiction view mode + for item, what, value in [ (self.rdoTreeItemCount, "InfoFolder", "Count"), (self.rdoTreeWC, "InfoFolder", "WC"), @@ -264,6 +267,7 @@ class settingsWindow(QWidget, Ui_Settings): item, part = self.viewSettingsDatas()[cmb] element = lst[cmb.currentIndex()] self.mw.setViewSettings(item, part, element) + self.mw.generateViewMenu() def outlineColumnsData(self): return { @@ -287,8 +291,8 @@ class settingsWindow(QWidget, Ui_Settings): settings.outlineViewColumns.remove(col) # Update views - self.mw.redacEditor.outlineView.hideColumns() - self.mw.treePlanOutline.hideColumns() + for w in findWidgetsOfClass(outlineView): + w.hideColumns() def treeViewSettignsChanged(self): for item, what, value in [ diff --git a/manuskript/ui/collapsibleDockWidgets.py b/manuskript/ui/collapsibleDockWidgets.py index 5afebf0d..9562b2bd 100644 --- a/manuskript/ui/collapsibleDockWidgets.py +++ b/manuskript/ui/collapsibleDockWidgets.py @@ -2,7 +2,7 @@ # --!-- coding: utf8 --!-- from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QToolBar, QDockWidget, QAction, QToolButton, QSizePolicy, QStylePainter, \ - QStyleOptionButton, QStyle, QLabel + QStyleOptionButton, QStyle class collapsibleDockWidgets(QToolBar): @@ -31,6 +31,8 @@ class collapsibleDockWidgets(QToolBar): # self.setAllowedAreas(self.TRANSPOSED_AREA[self._area]) self.parent().addToolBar(self.TRANSPOSED_AREA[self._area], self) + self._dockToButtonAction = {} + # Dock widgets for d in self._dockWidgets(): b = verticalButton(self) @@ -48,7 +50,8 @@ class collapsibleDockWidgets(QToolBar): background: lightBlue; } """) - self.addWidget(b) + a = self.addWidget(b) + self._dockToButtonAction[d] = a self.addSeparator() @@ -88,6 +91,10 @@ class collapsibleDockWidgets(QToolBar): else: action.setVisible(True) + def setDockVisibility(self, dock, val): + dock.setVisible(val) + self._dockToButtonAction[dock].setVisible(val) + def saveState(self): # We just need to save states of the custom widgets. state = [] diff --git a/manuskript/ui/mainWindow.py b/manuskript/ui/mainWindow.py index ed9ab078..1b2a6149 100644 --- a/manuskript/ui/mainWindow.py +++ b/manuskript/ui/mainWindow.py @@ -2,8 +2,7 @@ # Form implementation generated from reading ui file 'manuskript/ui/mainWindow.ui' # -# Created: Thu Mar 3 18:52:22 2016 -# by: PyQt5 UI code generator 5.2.1 +# Created by: PyQt5 UI code generator 5.4.2 # # WARNING! All changes made in this file will be lost! @@ -17,8 +16,8 @@ class Ui_MainWindow(object): self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget) - self.horizontalLayout_2.setSpacing(0) self.horizontalLayout_2.setContentsMargins(0, 6, 0, 0) + self.horizontalLayout_2.setSpacing(0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.stack = QtWidgets.QStackedWidget(self.centralwidget) self.stack.setObjectName("stack") @@ -809,7 +808,6 @@ 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) @@ -996,7 +994,7 @@ class Ui_MainWindow(object): self.horizontalLayout_2.addWidget(self.stack) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 20)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 30)) self.menubar.setObjectName("menubar") self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") @@ -1004,8 +1002,6 @@ class Ui_MainWindow(object): icon = QtGui.QIcon.fromTheme("folder-recent") self.menuRecents.setIcon(icon) self.menuRecents.setObjectName("menuRecents") - self.menuMode = QtWidgets.QMenu(self.menubar) - self.menuMode.setObjectName("menuMode") self.menuHelp = QtWidgets.QMenu(self.menubar) self.menuHelp.setObjectName("menuHelp") self.menuTools = QtWidgets.QMenu(self.menubar) @@ -1014,6 +1010,8 @@ class Ui_MainWindow(object): self.menuEdit.setObjectName("menuEdit") self.menuView = QtWidgets.QMenu(self.menubar) self.menuView.setObjectName("menuView") + self.menuMode = QtWidgets.QMenu(self.menuView) + self.menuMode.setObjectName("menuMode") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") @@ -1113,16 +1111,16 @@ class Ui_MainWindow(object): self.actStatus.setObjectName("actStatus") self.actViewTree = QtWidgets.QAction(MainWindow) self.actViewTree.setObjectName("actViewTree") - self.actModeNorma = QtWidgets.QAction(MainWindow) - self.actModeNorma.setCheckable(True) - self.actModeNorma.setChecked(True) - self.actModeNorma.setObjectName("actModeNorma") self.actModeSimple = QtWidgets.QAction(MainWindow) self.actModeSimple.setCheckable(True) + self.actModeSimple.setChecked(True) self.actModeSimple.setObjectName("actModeSimple") - self.actModeFractal = QtWidgets.QAction(MainWindow) - self.actModeFractal.setCheckable(True) - self.actModeFractal.setObjectName("actModeFractal") + self.actModeFiction = QtWidgets.QAction(MainWindow) + self.actModeFiction.setCheckable(True) + self.actModeFiction.setObjectName("actModeFiction") + self.actModeSnowflake = QtWidgets.QAction(MainWindow) + self.actModeSnowflake.setCheckable(True) + self.actModeSnowflake.setObjectName("actModeSnowflake") self.actViewCork = QtWidgets.QAction(MainWindow) self.actViewCork.setObjectName("actViewCork") self.actViewOutline = QtWidgets.QAction(MainWindow) @@ -1139,6 +1137,8 @@ class Ui_MainWindow(object): self.actCompile.setObjectName("actCompile") self.actToolFrequency = QtWidgets.QAction(MainWindow) self.actToolFrequency.setObjectName("actToolFrequency") + self.actionTest = QtWidgets.QAction(MainWindow) + self.actionTest.setObjectName("actionTest") self.menuFile.addAction(self.actOpen) self.menuFile.addAction(self.menuRecents.menuAction()) self.menuFile.addAction(self.actSave) @@ -1148,25 +1148,26 @@ class Ui_MainWindow(object): self.menuFile.addAction(self.actCompile) self.menuFile.addSeparator() self.menuFile.addAction(self.actQuit) - self.menuMode.addAction(self.actModeNorma) - self.menuMode.addAction(self.actModeSimple) - self.menuMode.addAction(self.actModeFractal) self.menuHelp.addAction(self.actShowHelp) self.menuTools.addAction(self.actSpellcheck) self.menuTools.addAction(self.actToolFrequency) self.menuEdit.addAction(self.actLabels) self.menuEdit.addAction(self.actStatus) self.menuEdit.addAction(self.actSettings) + self.menuMode.addAction(self.actModeSimple) + self.menuMode.addAction(self.actModeFiction) + self.menuMode.addAction(self.actModeSnowflake) + self.menuView.addAction(self.menuMode.menuAction()) + self.menuView.addSeparator() self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuEdit.menuAction()) - self.menubar.addAction(self.menuMode.menuAction()) self.menubar.addAction(self.menuView.menuAction()) self.menubar.addAction(self.menuTools.menuAction()) self.menubar.addAction(self.menuHelp.menuAction()) self.retranslateUi(MainWindow) self.stack.setCurrentIndex(1) - self.tabMain.setCurrentIndex(2) + self.tabMain.setCurrentIndex(4) self.tabSummary.setCurrentIndex(0) self.tabPersos.setCurrentIndex(0) self.tabPlot.setCurrentIndex(0) @@ -1268,11 +1269,11 @@ class Ui_MainWindow(object): self.tabMain.setTabText(self.tabMain.indexOf(self.lytTabDebug), _translate("MainWindow", "Debug")) self.menuFile.setTitle(_translate("MainWindow", "Fi&le")) 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", "E&dit")) self.menuView.setTitle(_translate("MainWindow", "&View")) + self.menuMode.setTitle(_translate("MainWindow", "&Mode")) self.dckCheatSheet.setWindowTitle(_translate("MainWindow", "&Cheat sheet")) self.dckSearch.setWindowTitle(_translate("MainWindow", "Sea&rch")) self.dckNavigation.setWindowTitle(_translate("MainWindow", "&Navigation")) @@ -1291,9 +1292,9 @@ class Ui_MainWindow(object): self.actLabels.setText(_translate("MainWindow", "&Labels...")) self.actStatus.setText(_translate("MainWindow", "&Status...")) self.actViewTree.setText(_translate("MainWindow", "Tree")) - self.actModeNorma.setText(_translate("MainWindow", "&Normal")) self.actModeSimple.setText(_translate("MainWindow", "&Simple")) - self.actModeFractal.setText(_translate("MainWindow", "&Fractal")) + self.actModeFiction.setText(_translate("MainWindow", "&Fiction")) + self.actModeSnowflake.setText(_translate("MainWindow", "&Snowflake")) self.actViewCork.setText(_translate("MainWindow", "Index cards")) self.actViewOutline.setText(_translate("MainWindow", "Outline")) self.actSettings.setText(_translate("MainWindow", "S&ettings")) @@ -1302,19 +1303,20 @@ class Ui_MainWindow(object): self.actCompile.setText(_translate("MainWindow", "Co&mpile")) self.actCompile.setShortcut(_translate("MainWindow", "F6")) self.actToolFrequency.setText(_translate("MainWindow", "&Frequency Analyzer")) + self.actionTest.setText(_translate("MainWindow", "test")) -from manuskript.ui.views.outlineView import outlineView -from manuskript.ui.views.textEditView import textEditView -from manuskript.ui.views.basicItemView import basicItemView -from manuskript.ui.views.plotTreeView import plotTreeView from manuskript.ui.cheatSheet import cheatSheet -from manuskript.ui.views.sldImportance import sldImportance -from manuskript.ui.views.metadataView import metadataView -from manuskript.ui.views.characterTreeView import characterTreeView from manuskript.ui.editors.mainEditor import mainEditor from manuskript.ui.search import search +from manuskript.ui.views.basicItemView import basicItemView +from manuskript.ui.views.characterTreeView import characterTreeView from manuskript.ui.views.lineEditView import lineEditView -from manuskript.ui.welcome import welcome -from manuskript.ui.views.treeView import treeView -from manuskript.ui.views.textEditCompleter import textEditCompleter +from manuskript.ui.views.metadataView import metadataView +from manuskript.ui.views.outlineView import outlineView +from manuskript.ui.views.plotTreeView import plotTreeView +from manuskript.ui.views.sldImportance import sldImportance 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.treeView import treeView +from manuskript.ui.welcome import welcome diff --git a/manuskript/ui/mainWindow.ui b/manuskript/ui/mainWindow.ui index 9f9e7c6e..f673905c 100644 --- a/manuskript/ui/mainWindow.ui +++ b/manuskript/ui/mainWindow.ui @@ -124,7 +124,7 @@ QTabWidget::Rounded - 2 + 4 true @@ -1979,7 +1979,7 @@ 0 0 1112 - 20 + 30 @@ -2006,14 +2006,6 @@ - - - &Mode - - - - - Help @@ -2039,10 +2031,19 @@ &View + + + &Mode + + + + + + + - @@ -2266,31 +2267,31 @@ QListView::item:hover { Tree - + true true - - &Normal - - - - - true - &Simple - + true - &Fractal + &Fiction + + + + + true + + + &Snowflake @@ -2338,6 +2339,11 @@ QListView::item:hover { &Frequency Analyzer + + + test + + diff --git a/manuskript/ui/views/outlineView.py b/manuskript/ui/views/outlineView.py index 50e44ecc..8c4d4bc1 100644 --- a/manuskript/ui/views/outlineView.py +++ b/manuskript/ui/views/outlineView.py @@ -65,6 +65,10 @@ class outlineView(QTreeView, dndView, outlineBasics): self.header().setSectionResizeMode(Outline.goalPercentage.value, QHeaderView.ResizeToContents) def hideColumns(self): + if not self.model(): + # outlineView is probably not initialized, because editorWidgets shows index cards or text. + return + for c in range(self.model().columnCount()): self.hideColumn(c) for c in settings.outlineViewColumns: