novelWriter 2.1.1__py3-none-any.whl → 2.2rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {novelWriter-2.1.1.dist-info → novelWriter-2.2rc1.dist-info}/METADATA +3 -3
- {novelWriter-2.1.1.dist-info → novelWriter-2.2rc1.dist-info}/RECORD +105 -76
- novelwriter/__init__.py +6 -24
- novelwriter/assets/i18n/project_de_DE.json +10 -0
- novelwriter/assets/i18n/project_en_GB.json +11 -0
- novelwriter/assets/i18n/project_en_US.json +10 -0
- novelwriter/assets/i18n/project_ja_JP.json +11 -1
- novelwriter/assets/i18n/project_nb_NO.json +10 -0
- novelwriter/assets/i18n/project_nn_NO.json +10 -0
- novelwriter/assets/icons/novelwriter.ico +0 -0
- novelwriter/assets/icons/novelwriter.svg +8 -183
- novelwriter/assets/icons/typicons_dark/icons.conf +17 -2
- novelwriter/assets/icons/typicons_dark/nw_deco-h2-narrow.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_deco-h3-narrow.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_deco-h4-narrow.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_deco-note.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_panel.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-bold.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-italic.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-markdown.svg +8 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-shortcode.svg +8 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-strike.svg +4 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-subscript.svg +5 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-superscript.svg +5 -0
- novelwriter/assets/icons/typicons_dark/nw_tb-underline.svg +5 -0
- novelwriter/assets/icons/typicons_dark/typ_eye.svg +4 -0
- novelwriter/assets/icons/typicons_dark/typ_th-dot-menu.svg +4 -0
- novelwriter/assets/icons/typicons_light/icons.conf +17 -2
- novelwriter/assets/icons/typicons_light/nw_deco-h2-narrow.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_deco-h3-narrow.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_deco-h4-narrow.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_deco-note.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_panel.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_tb-bold.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_tb-italic.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_tb-markdown.svg +8 -0
- novelwriter/assets/icons/typicons_light/nw_tb-shortcode.svg +8 -0
- novelwriter/assets/icons/typicons_light/nw_tb-strike.svg +4 -0
- novelwriter/assets/icons/typicons_light/nw_tb-subscript.svg +5 -0
- novelwriter/assets/icons/typicons_light/nw_tb-superscript.svg +5 -0
- novelwriter/assets/icons/typicons_light/nw_tb-underline.svg +5 -0
- novelwriter/assets/icons/typicons_light/typ_eye.svg +4 -0
- novelwriter/assets/icons/typicons_light/typ_th-dot-menu.svg +4 -0
- novelwriter/assets/icons/x-novelwriter-project.ico +0 -0
- novelwriter/assets/icons/x-novelwriter-project.svg +7 -206
- novelwriter/assets/manual.pdf +0 -0
- novelwriter/assets/sample.zip +0 -0
- novelwriter/assets/syntax/default_dark.conf +1 -0
- novelwriter/assets/syntax/default_light.conf +1 -0
- novelwriter/assets/syntax/grey_dark.conf +1 -0
- novelwriter/assets/syntax/grey_light.conf +1 -0
- novelwriter/assets/syntax/light_owl.conf +1 -0
- novelwriter/assets/syntax/night_owl.conf +1 -0
- novelwriter/assets/syntax/solarized_dark.conf +1 -0
- novelwriter/assets/syntax/solarized_light.conf +1 -0
- novelwriter/assets/syntax/tomorrow.conf +1 -0
- novelwriter/assets/syntax/tomorrow_night.conf +1 -0
- novelwriter/assets/syntax/tomorrow_night_blue.conf +1 -0
- novelwriter/assets/syntax/tomorrow_night_bright.conf +1 -0
- novelwriter/assets/syntax/tomorrow_night_eighties.conf +1 -0
- novelwriter/assets/text/credits_en.htm +7 -0
- novelwriter/assets/text/release_notes.htm +7 -37
- novelwriter/common.py +22 -1
- novelwriter/config.py +27 -42
- novelwriter/constants.py +45 -7
- novelwriter/core/buildsettings.py +40 -24
- novelwriter/core/coretools.py +8 -1
- novelwriter/core/docbuild.py +2 -6
- novelwriter/core/index.py +264 -175
- novelwriter/core/options.py +8 -3
- novelwriter/core/project.py +2 -2
- novelwriter/core/projectdata.py +3 -3
- novelwriter/core/tohtml.py +60 -59
- novelwriter/core/tokenizer.py +110 -70
- novelwriter/core/tomd.py +51 -38
- novelwriter/core/toodt.py +184 -147
- novelwriter/dialogs/preferences.py +75 -106
- novelwriter/dialogs/projsettings.py +101 -110
- novelwriter/dialogs/updates.py +25 -14
- novelwriter/enum.py +28 -3
- novelwriter/extensions/novelselector.py +1 -1
- novelwriter/gui/doceditor.py +1345 -1235
- novelwriter/gui/dochighlight.py +98 -62
- novelwriter/gui/docviewer.py +151 -340
- novelwriter/gui/docviewerpanel.py +457 -0
- novelwriter/gui/editordocument.py +126 -0
- novelwriter/gui/mainmenu.py +350 -300
- novelwriter/gui/noveltree.py +101 -125
- novelwriter/gui/outline.py +154 -171
- novelwriter/gui/projtree.py +480 -380
- novelwriter/gui/sidebar.py +106 -75
- novelwriter/gui/statusbar.py +1 -1
- novelwriter/gui/theme.py +114 -75
- novelwriter/guimain.py +353 -254
- novelwriter/shared.py +36 -3
- novelwriter/tools/dictionaries.py +268 -0
- novelwriter/tools/manusbuild.py +17 -6
- novelwriter/tools/manuscript.py +11 -3
- novelwriter/tools/manussettings.py +0 -14
- novelwriter/tools/projwizard.py +16 -2
- novelwriter/tools/writingstats.py +1 -1
- novelwriter/assets/icons/typicons_dark/typ_at.svg +0 -4
- novelwriter/assets/icons/typicons_dark/typ_th-menu.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_at.svg +0 -4
- novelwriter/assets/icons/typicons_light/typ_th-menu.svg +0 -4
- {novelWriter-2.1.1.dist-info → novelWriter-2.2rc1.dist-info}/LICENSE.md +0 -0
- {novelWriter-2.1.1.dist-info → novelWriter-2.2rc1.dist-info}/WHEEL +0 -0
- {novelWriter-2.1.1.dist-info → novelWriter-2.2rc1.dist-info}/entry_points.txt +0 -0
- {novelWriter-2.1.1.dist-info → novelWriter-2.2rc1.dist-info}/top_level.txt +0 -0
novelwriter/gui/mainmenu.py
CHANGED
@@ -27,15 +27,14 @@ import logging
|
|
27
27
|
|
28
28
|
from typing import TYPE_CHECKING
|
29
29
|
from pathlib import Path
|
30
|
-
from urllib.parse import urljoin
|
31
|
-
from urllib.request import pathname2url
|
32
30
|
|
33
|
-
from PyQt5.QtCore import QUrl, pyqtSlot
|
34
31
|
from PyQt5.QtGui import QDesktopServices
|
32
|
+
from PyQt5.QtCore import QUrl, pyqtSignal, pyqtSlot
|
35
33
|
from PyQt5.QtWidgets import QMenuBar, QAction
|
36
34
|
|
37
35
|
from novelwriter import CONFIG, SHARED
|
38
36
|
from novelwriter.enum import nwDocAction, nwDocInsert, nwWidget
|
37
|
+
from novelwriter.common import openExternalPath
|
39
38
|
from novelwriter.constants import nwConst, trConst, nwKeyWords, nwLabels, nwUnicode
|
40
39
|
|
41
40
|
if TYPE_CHECKING: # pragma: no cover
|
@@ -50,6 +49,12 @@ class GuiMainMenu(QMenuBar):
|
|
50
49
|
add them from this class.
|
51
50
|
"""
|
52
51
|
|
52
|
+
requestDocAction = pyqtSignal(nwDocAction)
|
53
|
+
requestDocInsert = pyqtSignal(nwDocInsert)
|
54
|
+
requestDocInsertText = pyqtSignal(str)
|
55
|
+
requestDocKeyWordInsert = pyqtSignal(str)
|
56
|
+
requestFocusChange = pyqtSignal(nwWidget)
|
57
|
+
|
53
58
|
def __init__(self, mainGui: GuiMain) -> None:
|
54
59
|
super().__init__(parent=mainGui)
|
55
60
|
|
@@ -68,20 +73,16 @@ class GuiMainMenu(QMenuBar):
|
|
68
73
|
self._buildToolsMenu()
|
69
74
|
self._buildHelpMenu()
|
70
75
|
|
71
|
-
# Function Pointers
|
72
|
-
self._docAction = self.mainGui.passDocumentAction
|
73
|
-
self._docInsert = self.mainGui.docEditor.insertText
|
74
|
-
self._insertKeyWord = self.mainGui.docEditor.insertKeyWord
|
75
|
-
|
76
76
|
logger.debug("Ready: GuiMainMenu")
|
77
77
|
|
78
78
|
return
|
79
79
|
|
80
80
|
##
|
81
|
-
#
|
81
|
+
# Public Slots
|
82
82
|
##
|
83
83
|
|
84
|
-
|
84
|
+
@pyqtSlot(bool)
|
85
|
+
def setSpellCheckState(self, state: bool) -> None:
|
85
86
|
"""Forward spell check check state to its action."""
|
86
87
|
self.aSpellCheck.setChecked(state)
|
87
88
|
return
|
@@ -109,9 +110,7 @@ class GuiMainMenu(QMenuBar):
|
|
109
110
|
def _openUserManualFile(self) -> None:
|
110
111
|
"""Open the documentation in PDF format."""
|
111
112
|
if isinstance(CONFIG.pdfDocs, Path):
|
112
|
-
|
113
|
-
QUrl(urljoin("file:", pathname2url(str(CONFIG.pdfDocs))))
|
114
|
-
)
|
113
|
+
openExternalPath(CONFIG.pdfDocs)
|
115
114
|
return
|
116
115
|
|
117
116
|
@pyqtSlot(str)
|
@@ -131,72 +130,62 @@ class GuiMainMenu(QMenuBar):
|
|
131
130
|
self.projMenu = self.addMenu(self.tr("&Project"))
|
132
131
|
|
133
132
|
# Project > New Project
|
134
|
-
self.aNewProject =
|
133
|
+
self.aNewProject = self.projMenu.addAction(self.tr("New Project"))
|
135
134
|
self.aNewProject.triggered.connect(lambda: self.mainGui.newProject(None))
|
136
|
-
self.projMenu.addAction(self.aNewProject)
|
137
135
|
|
138
136
|
# Project > Open Project
|
139
|
-
self.aOpenProject =
|
137
|
+
self.aOpenProject = self.projMenu.addAction(self.tr("Open Project"))
|
140
138
|
self.aOpenProject.setShortcut("Ctrl+Shift+O")
|
141
139
|
self.aOpenProject.triggered.connect(lambda: self.mainGui.showProjectLoadDialog())
|
142
|
-
self.projMenu.addAction(self.aOpenProject)
|
143
140
|
|
144
141
|
# Project > Save Project
|
145
|
-
self.aSaveProject =
|
142
|
+
self.aSaveProject = self.projMenu.addAction(self.tr("Save Project"))
|
146
143
|
self.aSaveProject.setShortcut("Ctrl+Shift+S")
|
147
144
|
self.aSaveProject.triggered.connect(lambda: self.mainGui.saveProject())
|
148
|
-
self.projMenu.addAction(self.aSaveProject)
|
149
145
|
|
150
146
|
# Project > Close Project
|
151
|
-
self.aCloseProject =
|
147
|
+
self.aCloseProject = self.projMenu.addAction(self.tr("Close Project"))
|
152
148
|
self.aCloseProject.setShortcut("Ctrl+Shift+W")
|
153
149
|
self.aCloseProject.triggered.connect(lambda: self.mainGui.closeProject(False))
|
154
|
-
self.projMenu.addAction(self.aCloseProject)
|
155
150
|
|
156
151
|
# Project > Separator
|
157
152
|
self.projMenu.addSeparator()
|
158
153
|
|
159
154
|
# Project > Project Settings
|
160
|
-
self.aProjectSettings =
|
155
|
+
self.aProjectSettings = self.projMenu.addAction(self.tr("Project Settings"))
|
161
156
|
self.aProjectSettings.setShortcut("Ctrl+Shift+,")
|
162
157
|
self.aProjectSettings.triggered.connect(lambda: self.mainGui.showProjectSettingsDialog())
|
163
|
-
self.projMenu.addAction(self.aProjectSettings)
|
164
158
|
|
165
159
|
# Project > Project Details
|
166
|
-
self.aProjectDetails =
|
160
|
+
self.aProjectDetails = self.projMenu.addAction(self.tr("Project Details"))
|
167
161
|
self.aProjectDetails.setShortcut("Shift+F6")
|
168
162
|
self.aProjectDetails.triggered.connect(lambda: self.mainGui.showProjectDetailsDialog())
|
169
|
-
self.projMenu.addAction(self.aProjectDetails)
|
170
163
|
|
171
164
|
# Project > Separator
|
172
165
|
self.projMenu.addSeparator()
|
173
166
|
|
174
167
|
# Project > Edit
|
175
|
-
self.aEditItem =
|
168
|
+
self.aEditItem = self.projMenu.addAction(self.tr("Rename Item"))
|
176
169
|
self.aEditItem.setShortcut("F2")
|
177
170
|
self.aEditItem.triggered.connect(lambda: self.mainGui.editItemLabel(None))
|
178
|
-
self.projMenu.addAction(self.aEditItem)
|
179
171
|
|
180
172
|
# Project > Delete
|
181
|
-
self.aDeleteItem =
|
182
|
-
self.aDeleteItem.setShortcut("Ctrl+Shift+Del")
|
173
|
+
self.aDeleteItem = self.projMenu.addAction(self.tr("Delete Item"))
|
174
|
+
self.aDeleteItem.setShortcut("Ctrl+Shift+Del") # Cannot be Ctrl+Del, see #629
|
183
175
|
self.aDeleteItem.triggered.connect(lambda: self.mainGui.projView.requestDeleteItem(None))
|
184
|
-
self.projMenu.addAction(self.aDeleteItem)
|
185
176
|
|
186
177
|
# Project > Empty Trash
|
187
|
-
self.aEmptyTrash =
|
178
|
+
self.aEmptyTrash = self.projMenu.addAction(self.tr("Empty Trash"))
|
188
179
|
self.aEmptyTrash.triggered.connect(lambda: self.mainGui.projView.emptyTrash())
|
189
|
-
self.projMenu.addAction(self.aEmptyTrash)
|
190
180
|
|
191
181
|
# Project > Separator
|
192
182
|
self.projMenu.addSeparator()
|
193
183
|
|
194
184
|
# Project > Exit
|
195
|
-
self.aExitNW =
|
185
|
+
self.aExitNW = self.projMenu.addAction(self.tr("Exit"))
|
196
186
|
self.aExitNW.setShortcut("Ctrl+Q")
|
197
187
|
self.aExitNW.setMenuRole(QAction.QuitRole)
|
198
188
|
self.aExitNW.triggered.connect(lambda: self.mainGui.closeMain())
|
199
|
-
self.projMenu.addAction(self.aExitNW)
|
200
189
|
|
201
190
|
return
|
202
191
|
|
@@ -206,51 +195,44 @@ class GuiMainMenu(QMenuBar):
|
|
206
195
|
self.docuMenu = self.addMenu(self.tr("&Document"))
|
207
196
|
|
208
197
|
# Document > Open
|
209
|
-
self.aOpenDoc =
|
198
|
+
self.aOpenDoc = self.docuMenu.addAction(self.tr("Open Document"))
|
210
199
|
self.aOpenDoc.setShortcut("Ctrl+O")
|
211
200
|
self.aOpenDoc.triggered.connect(lambda: self.mainGui.openSelectedItem())
|
212
|
-
self.docuMenu.addAction(self.aOpenDoc)
|
213
201
|
|
214
202
|
# Document > Save
|
215
|
-
self.aSaveDoc =
|
203
|
+
self.aSaveDoc = self.docuMenu.addAction(self.tr("Save Document"))
|
216
204
|
self.aSaveDoc.setShortcut("Ctrl+S")
|
217
205
|
self.aSaveDoc.triggered.connect(lambda: self.mainGui.saveDocument())
|
218
|
-
self.docuMenu.addAction(self.aSaveDoc)
|
219
206
|
|
220
207
|
# Document > Close
|
221
|
-
self.aCloseDoc =
|
208
|
+
self.aCloseDoc = self.docuMenu.addAction(self.tr("Close Document"))
|
222
209
|
self.aCloseDoc.setShortcut("Ctrl+W")
|
223
|
-
self.aCloseDoc.triggered.connect(
|
224
|
-
self.docuMenu.addAction(self.aCloseDoc)
|
210
|
+
self.aCloseDoc.triggered.connect(self.mainGui.closeDocEditor)
|
225
211
|
|
226
212
|
# Document > Separator
|
227
213
|
self.docuMenu.addSeparator()
|
228
214
|
|
229
215
|
# Document > Preview
|
230
|
-
self.aViewDoc =
|
216
|
+
self.aViewDoc = self.docuMenu.addAction(self.tr("View Document"))
|
231
217
|
self.aViewDoc.setShortcut("Ctrl+R")
|
232
218
|
self.aViewDoc.triggered.connect(lambda: self.mainGui.viewDocument(None))
|
233
|
-
self.docuMenu.addAction(self.aViewDoc)
|
234
219
|
|
235
220
|
# Document > Close Preview
|
236
|
-
self.aCloseView =
|
221
|
+
self.aCloseView = self.docuMenu.addAction(self.tr("Close Document View"))
|
237
222
|
self.aCloseView.setShortcut("Ctrl+Shift+R")
|
238
223
|
self.aCloseView.triggered.connect(lambda: self.mainGui.closeDocViewer())
|
239
|
-
self.docuMenu.addAction(self.aCloseView)
|
240
224
|
|
241
225
|
# Document > Separator
|
242
226
|
self.docuMenu.addSeparator()
|
243
227
|
|
244
228
|
# Document > Show File Details
|
245
|
-
self.aFileDetails =
|
229
|
+
self.aFileDetails = self.docuMenu.addAction(self.tr("Show File Details"))
|
246
230
|
self.aFileDetails.triggered.connect(lambda: self.mainGui.docEditor.revealLocation())
|
247
|
-
self.docuMenu.addAction(self.aFileDetails)
|
248
231
|
|
249
232
|
# Document > Import From File
|
250
|
-
self.aImportFile =
|
233
|
+
self.aImportFile = self.docuMenu.addAction(self.tr("Import Text from File"))
|
251
234
|
self.aImportFile.setShortcut("Ctrl+Shift+I")
|
252
235
|
self.aImportFile.triggered.connect(lambda: self.mainGui.importDocument())
|
253
|
-
self.docuMenu.addAction(self.aImportFile)
|
254
236
|
|
255
237
|
return
|
256
238
|
|
@@ -260,52 +242,59 @@ class GuiMainMenu(QMenuBar):
|
|
260
242
|
self.editMenu = self.addMenu(self.tr("&Edit"))
|
261
243
|
|
262
244
|
# Edit > Undo
|
263
|
-
self.aEditUndo =
|
245
|
+
self.aEditUndo = self.editMenu.addAction(self.tr("Undo"))
|
264
246
|
self.aEditUndo.setShortcut("Ctrl+Z")
|
265
|
-
self.aEditUndo.triggered.connect(
|
266
|
-
|
247
|
+
self.aEditUndo.triggered.connect(
|
248
|
+
lambda: self.requestDocAction.emit(nwDocAction.UNDO)
|
249
|
+
)
|
267
250
|
|
268
251
|
# Edit > Redo
|
269
|
-
self.aEditRedo =
|
252
|
+
self.aEditRedo = self.editMenu.addAction(self.tr("Redo"))
|
270
253
|
self.aEditRedo.setShortcut("Ctrl+Y")
|
271
|
-
self.aEditRedo.triggered.connect(
|
272
|
-
|
254
|
+
self.aEditRedo.triggered.connect(
|
255
|
+
lambda: self.requestDocAction.emit(nwDocAction.REDO)
|
256
|
+
)
|
273
257
|
|
274
258
|
# Edit > Separator
|
275
259
|
self.editMenu.addSeparator()
|
276
260
|
|
277
261
|
# Edit > Cut
|
278
|
-
self.aEditCut =
|
262
|
+
self.aEditCut = self.editMenu.addAction(self.tr("Cut"))
|
279
263
|
self.aEditCut.setShortcut("Ctrl+X")
|
280
|
-
self.aEditCut.triggered.connect(
|
281
|
-
|
264
|
+
self.aEditCut.triggered.connect(
|
265
|
+
lambda: self.requestDocAction.emit(nwDocAction.CUT)
|
266
|
+
)
|
282
267
|
|
283
268
|
# Edit > Copy
|
284
|
-
self.aEditCopy =
|
269
|
+
self.aEditCopy = self.editMenu.addAction(self.tr("Copy"))
|
285
270
|
self.aEditCopy.setShortcut("Ctrl+C")
|
286
|
-
self.aEditCopy.triggered.connect(
|
287
|
-
|
271
|
+
self.aEditCopy.triggered.connect(
|
272
|
+
lambda: self.requestDocAction.emit(nwDocAction.COPY)
|
273
|
+
)
|
288
274
|
|
289
275
|
# Edit > Paste
|
290
|
-
self.aEditPaste =
|
276
|
+
self.aEditPaste = self.editMenu.addAction(self.tr("Paste"))
|
291
277
|
self.aEditPaste.setShortcut("Ctrl+V")
|
292
|
-
self.aEditPaste.triggered.connect(
|
293
|
-
|
278
|
+
self.aEditPaste.triggered.connect(
|
279
|
+
lambda: self.requestDocAction.emit(nwDocAction.PASTE)
|
280
|
+
)
|
294
281
|
|
295
282
|
# Edit > Separator
|
296
283
|
self.editMenu.addSeparator()
|
297
284
|
|
298
285
|
# Edit > Select All
|
299
|
-
self.aSelectAll =
|
286
|
+
self.aSelectAll = self.editMenu.addAction(self.tr("Select All"))
|
300
287
|
self.aSelectAll.setShortcut("Ctrl+A")
|
301
|
-
self.aSelectAll.triggered.connect(
|
302
|
-
|
288
|
+
self.aSelectAll.triggered.connect(
|
289
|
+
lambda: self.requestDocAction.emit(nwDocAction.SEL_ALL)
|
290
|
+
)
|
303
291
|
|
304
292
|
# Edit > Select Paragraph
|
305
|
-
self.aSelectPar =
|
293
|
+
self.aSelectPar = self.editMenu.addAction(self.tr("Select Paragraph"))
|
306
294
|
self.aSelectPar.setShortcut("Ctrl+Shift+A")
|
307
|
-
self.aSelectPar.triggered.connect(
|
308
|
-
|
295
|
+
self.aSelectPar.triggered.connect(
|
296
|
+
lambda: self.requestDocAction.emit(nwDocAction.SEL_PARA)
|
297
|
+
)
|
309
298
|
|
310
299
|
return
|
311
300
|
|
@@ -315,70 +304,51 @@ class GuiMainMenu(QMenuBar):
|
|
315
304
|
self.viewMenu = self.addMenu(self.tr("&View"))
|
316
305
|
|
317
306
|
# View > TreeView
|
318
|
-
self.aFocusTree =
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
self.aFocusEditor
|
328
|
-
|
329
|
-
|
330
|
-
else:
|
331
|
-
self.aFocusEditor.setShortcut("Alt+2")
|
332
|
-
self.aFocusEditor.triggered.connect(lambda: self.mainGui.switchFocus(nwWidget.EDITOR))
|
333
|
-
self.viewMenu.addAction(self.aFocusEditor)
|
334
|
-
|
335
|
-
# View > Document Pane 2
|
336
|
-
self.aFocusView = QAction(self.tr("Go to Document Viewer"), self)
|
337
|
-
if CONFIG.osWindows:
|
338
|
-
self.aFocusView.setShortcut("Ctrl+Alt+3")
|
339
|
-
else:
|
340
|
-
self.aFocusView.setShortcut("Alt+3")
|
341
|
-
self.aFocusView.triggered.connect(lambda: self.mainGui.switchFocus(nwWidget.VIEWER))
|
342
|
-
self.viewMenu.addAction(self.aFocusView)
|
307
|
+
self.aFocusTree = self.viewMenu.addAction(self.tr("Go to Project Tree"))
|
308
|
+
self.aFocusTree.setShortcut("Ctrl+T")
|
309
|
+
self.aFocusTree.triggered.connect(
|
310
|
+
lambda: self.requestFocusChange.emit(nwWidget.TREE)
|
311
|
+
)
|
312
|
+
|
313
|
+
# View > Document Editor
|
314
|
+
self.aFocusEditor = self.viewMenu.addAction(self.tr("Go to Document Editor"))
|
315
|
+
self.aFocusEditor.setShortcut("Ctrl+E")
|
316
|
+
self.aFocusEditor.triggered.connect(
|
317
|
+
lambda: self.requestFocusChange.emit(nwWidget.EDITOR)
|
318
|
+
)
|
343
319
|
|
344
320
|
# View > Outline
|
345
|
-
self.aFocusOutline =
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
self.aFocusOutline.triggered.connect(lambda: self.mainGui.switchFocus(nwWidget.OUTLINE))
|
351
|
-
self.viewMenu.addAction(self.aFocusOutline)
|
321
|
+
self.aFocusOutline = self.viewMenu.addAction(self.tr("Go to Outline"))
|
322
|
+
self.aFocusOutline.setShortcut("Ctrl+Shift+T")
|
323
|
+
self.aFocusOutline.triggered.connect(
|
324
|
+
lambda: self.requestFocusChange.emit(nwWidget.OUTLINE)
|
325
|
+
)
|
352
326
|
|
353
327
|
# View > Separator
|
354
328
|
self.viewMenu.addSeparator()
|
355
329
|
|
356
330
|
# View > Go Backward
|
357
|
-
self.aViewPrev =
|
331
|
+
self.aViewPrev = self.viewMenu.addAction(self.tr("Navigate Backward"))
|
358
332
|
self.aViewPrev.setShortcut("Alt+Left")
|
359
333
|
self.aViewPrev.triggered.connect(self.mainGui.docViewer.navBackward)
|
360
|
-
self.viewMenu.addAction(self.aViewPrev)
|
361
334
|
|
362
335
|
# View > Go Forward
|
363
|
-
self.aViewNext =
|
336
|
+
self.aViewNext = self.viewMenu.addAction(self.tr("Navigate Forward"))
|
364
337
|
self.aViewNext.setShortcut("Alt+Right")
|
365
338
|
self.aViewNext.triggered.connect(self.mainGui.docViewer.navForward)
|
366
|
-
self.viewMenu.addAction(self.aViewNext)
|
367
339
|
|
368
340
|
# View > Separator
|
369
341
|
self.viewMenu.addSeparator()
|
370
342
|
|
371
343
|
# View > Focus Mode
|
372
|
-
self.aFocusMode =
|
344
|
+
self.aFocusMode = self.viewMenu.addAction(self.tr("Focus Mode"))
|
373
345
|
self.aFocusMode.setShortcut("F8")
|
374
|
-
self.aFocusMode.triggered.connect(
|
375
|
-
self.viewMenu.addAction(self.aFocusMode)
|
346
|
+
self.aFocusMode.triggered.connect(self.mainGui.toggleFocusMode)
|
376
347
|
|
377
348
|
# View > Toggle Full Screen
|
378
|
-
self.aFullScreen =
|
349
|
+
self.aFullScreen = self.viewMenu.addAction(self.tr("Full Screen Mode"))
|
379
350
|
self.aFullScreen.setShortcut("F11")
|
380
351
|
self.aFullScreen.triggered.connect(lambda: self.mainGui.toggleFullScreenMode())
|
381
|
-
self.viewMenu.addAction(self.aFullScreen)
|
382
352
|
|
383
353
|
return
|
384
354
|
|
@@ -391,154 +361,177 @@ class GuiMainMenu(QMenuBar):
|
|
391
361
|
self.mInsDashes = self.insMenu.addMenu(self.tr("Dashes"))
|
392
362
|
|
393
363
|
# Insert > Short Dash
|
394
|
-
self.aInsENDash =
|
364
|
+
self.aInsENDash = self.mInsDashes.addAction(self.tr("Short Dash"))
|
395
365
|
self.aInsENDash.setShortcut("Ctrl+K, -")
|
396
|
-
self.aInsENDash.triggered.connect(
|
397
|
-
|
366
|
+
self.aInsENDash.triggered.connect(
|
367
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_ENDASH)
|
368
|
+
)
|
398
369
|
|
399
370
|
# Insert > Long Dash
|
400
|
-
self.aInsEMDash =
|
371
|
+
self.aInsEMDash = self.mInsDashes.addAction(self.tr("Long Dash"))
|
401
372
|
self.aInsEMDash.setShortcut("Ctrl+K, _")
|
402
|
-
self.aInsEMDash.triggered.connect(
|
403
|
-
|
373
|
+
self.aInsEMDash.triggered.connect(
|
374
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_EMDASH)
|
375
|
+
)
|
404
376
|
|
405
377
|
# Insert > Long Dash
|
406
|
-
self.aInsHorBar =
|
378
|
+
self.aInsHorBar = self.mInsDashes.addAction(self.tr("Horizontal Bar"))
|
407
379
|
self.aInsHorBar.setShortcut("Ctrl+K, Ctrl+_")
|
408
|
-
self.aInsHorBar.triggered.connect(
|
409
|
-
|
380
|
+
self.aInsHorBar.triggered.connect(
|
381
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_HBAR)
|
382
|
+
)
|
410
383
|
|
411
384
|
# Insert > Figure Dash
|
412
|
-
self.aInsFigDash =
|
385
|
+
self.aInsFigDash = self.mInsDashes.addAction(self.tr("Figure Dash"))
|
413
386
|
self.aInsFigDash.setShortcut("Ctrl+K, ~")
|
414
|
-
self.aInsFigDash.triggered.connect(
|
415
|
-
|
387
|
+
self.aInsFigDash.triggered.connect(
|
388
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_FGDASH)
|
389
|
+
)
|
416
390
|
|
417
391
|
# Insert > Quote Marks
|
418
392
|
self.mInsQuotes = self.insMenu.addMenu(self.tr("Quote Marks"))
|
419
393
|
|
420
394
|
# Insert > Left Single Quote
|
421
|
-
self.aInsQuoteLS =
|
395
|
+
self.aInsQuoteLS = self.mInsQuotes.addAction(self.tr("Left Single Quote"))
|
422
396
|
self.aInsQuoteLS.setShortcut("Ctrl+K, 1")
|
423
|
-
self.aInsQuoteLS.triggered.connect(
|
424
|
-
|
397
|
+
self.aInsQuoteLS.triggered.connect(
|
398
|
+
lambda: self.requestDocInsert.emit(nwDocInsert.QUOTE_LS)
|
399
|
+
)
|
425
400
|
|
426
401
|
# Insert > Right Single Quote
|
427
|
-
self.aInsQuoteRS =
|
402
|
+
self.aInsQuoteRS = self.mInsQuotes.addAction(self.tr("Right Single Quote"))
|
428
403
|
self.aInsQuoteRS.setShortcut("Ctrl+K, 2")
|
429
|
-
self.aInsQuoteRS.triggered.connect(
|
430
|
-
|
404
|
+
self.aInsQuoteRS.triggered.connect(
|
405
|
+
lambda: self.requestDocInsert.emit(nwDocInsert.QUOTE_RS)
|
406
|
+
)
|
431
407
|
|
432
408
|
# Insert > Left Double Quote
|
433
|
-
self.aInsQuoteLD =
|
409
|
+
self.aInsQuoteLD = self.mInsQuotes.addAction(self.tr("Left Double Quote"))
|
434
410
|
self.aInsQuoteLD.setShortcut("Ctrl+K, 3")
|
435
|
-
self.aInsQuoteLD.triggered.connect(
|
436
|
-
|
411
|
+
self.aInsQuoteLD.triggered.connect(
|
412
|
+
lambda: self.requestDocInsert.emit(nwDocInsert.QUOTE_LD)
|
413
|
+
)
|
437
414
|
|
438
415
|
# Insert > Right Double Quote
|
439
|
-
self.aInsQuoteRD =
|
416
|
+
self.aInsQuoteRD = self.mInsQuotes.addAction(self.tr("Right Double Quote"))
|
440
417
|
self.aInsQuoteRD.setShortcut("Ctrl+K, 4")
|
441
|
-
self.aInsQuoteRD.triggered.connect(
|
442
|
-
|
418
|
+
self.aInsQuoteRD.triggered.connect(
|
419
|
+
lambda: self.requestDocInsert.emit(nwDocInsert.QUOTE_RD)
|
420
|
+
)
|
443
421
|
|
444
422
|
# Insert > Alternative Apostrophe
|
445
|
-
self.aInsMSApos =
|
423
|
+
self.aInsMSApos = self.mInsQuotes.addAction(self.tr("Alternative Apostrophe"))
|
446
424
|
self.aInsMSApos.setShortcut("Ctrl+K, '")
|
447
|
-
self.aInsMSApos.triggered.connect(
|
448
|
-
|
425
|
+
self.aInsMSApos.triggered.connect(
|
426
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_MAPOSS)
|
427
|
+
)
|
449
428
|
|
450
429
|
# Insert > Symbols
|
451
430
|
self.mInsPunct = self.insMenu.addMenu(self.tr("General Punctuation"))
|
452
431
|
|
453
432
|
# Insert > Ellipsis
|
454
|
-
self.aInsEllipsis =
|
433
|
+
self.aInsEllipsis = self.mInsPunct.addAction(self.tr("Ellipsis"))
|
455
434
|
self.aInsEllipsis.setShortcut("Ctrl+K, .")
|
456
|
-
self.aInsEllipsis.triggered.connect(
|
457
|
-
|
435
|
+
self.aInsEllipsis.triggered.connect(
|
436
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_HELLIP)
|
437
|
+
)
|
458
438
|
|
459
439
|
# Insert > Prime
|
460
|
-
self.aInsPrime =
|
440
|
+
self.aInsPrime = self.mInsPunct.addAction(self.tr("Prime"))
|
461
441
|
self.aInsPrime.setShortcut("Ctrl+K, Ctrl+'")
|
462
|
-
self.aInsPrime.triggered.connect(
|
463
|
-
|
442
|
+
self.aInsPrime.triggered.connect(
|
443
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_PRIME)
|
444
|
+
)
|
464
445
|
|
465
446
|
# Insert > Double Prime
|
466
|
-
self.aInsDPrime =
|
447
|
+
self.aInsDPrime = self.mInsPunct.addAction(self.tr("Double Prime"))
|
467
448
|
self.aInsDPrime.setShortcut("Ctrl+K, Ctrl+\"")
|
468
|
-
self.aInsDPrime.triggered.connect(
|
469
|
-
|
449
|
+
self.aInsDPrime.triggered.connect(
|
450
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_DPRIME)
|
451
|
+
)
|
470
452
|
|
471
453
|
# Insert > White Spaces
|
472
454
|
self.mInsSpace = self.insMenu.addMenu(self.tr("White Spaces"))
|
473
455
|
|
474
456
|
# Insert > Non-Breaking Space
|
475
|
-
self.aInsNBSpace =
|
457
|
+
self.aInsNBSpace = self.mInsSpace.addAction(self.tr("Non-Breaking Space"))
|
476
458
|
self.aInsNBSpace.setShortcut("Ctrl+K, Space")
|
477
|
-
self.aInsNBSpace.triggered.connect(
|
478
|
-
|
459
|
+
self.aInsNBSpace.triggered.connect(
|
460
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_NBSP)
|
461
|
+
)
|
479
462
|
|
480
463
|
# Insert > Thin Space
|
481
|
-
self.aInsThinSpace =
|
464
|
+
self.aInsThinSpace = self.mInsSpace.addAction(self.tr("Thin Space"))
|
482
465
|
self.aInsThinSpace.setShortcut("Ctrl+K, Shift+Space")
|
483
|
-
self.aInsThinSpace.triggered.connect(
|
484
|
-
|
466
|
+
self.aInsThinSpace.triggered.connect(
|
467
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_THSP)
|
468
|
+
)
|
485
469
|
|
486
470
|
# Insert > Thin Non-Breaking Space
|
487
|
-
self.aInsThinNBSpace =
|
471
|
+
self.aInsThinNBSpace = self.mInsSpace.addAction(self.tr("Thin Non-Breaking Space"))
|
488
472
|
self.aInsThinNBSpace.setShortcut("Ctrl+K, Ctrl+Space")
|
489
|
-
self.aInsThinNBSpace.triggered.connect(
|
490
|
-
|
473
|
+
self.aInsThinNBSpace.triggered.connect(
|
474
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_THNBSP)
|
475
|
+
)
|
491
476
|
|
492
477
|
# Insert > Symbols
|
493
478
|
self.mInsSymbol = self.insMenu.addMenu(self.tr("Other Symbols"))
|
494
479
|
|
495
480
|
# Insert > List Bullet
|
496
|
-
self.aInsBullet =
|
481
|
+
self.aInsBullet = self.mInsSymbol.addAction(self.tr("List Bullet"))
|
497
482
|
self.aInsBullet.setShortcut("Ctrl+K, *")
|
498
|
-
self.aInsBullet.triggered.connect(
|
499
|
-
|
483
|
+
self.aInsBullet.triggered.connect(
|
484
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_BULL)
|
485
|
+
)
|
500
486
|
|
501
487
|
# Insert > Hyphen Bullet
|
502
|
-
self.aInsHyBull =
|
488
|
+
self.aInsHyBull = self.mInsSymbol.addAction(self.tr("Hyphen Bullet"))
|
503
489
|
self.aInsHyBull.setShortcut("Ctrl+K, Ctrl+-")
|
504
|
-
self.aInsHyBull.triggered.connect(
|
505
|
-
|
490
|
+
self.aInsHyBull.triggered.connect(
|
491
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_HYBULL)
|
492
|
+
)
|
506
493
|
|
507
494
|
# Insert > Flower Mark
|
508
|
-
self.aInsFlower =
|
495
|
+
self.aInsFlower = self.mInsSymbol.addAction(self.tr("Flower Mark"))
|
509
496
|
self.aInsFlower.setShortcut("Ctrl+K, Ctrl+*")
|
510
|
-
self.aInsFlower.triggered.connect(
|
511
|
-
|
497
|
+
self.aInsFlower.triggered.connect(
|
498
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_FLOWER)
|
499
|
+
)
|
512
500
|
|
513
501
|
# Insert > Per Mille
|
514
|
-
self.aInsPerMille =
|
502
|
+
self.aInsPerMille = self.mInsSymbol.addAction(self.tr("Per Mille"))
|
515
503
|
self.aInsPerMille.setShortcut("Ctrl+K, %")
|
516
|
-
self.aInsPerMille.triggered.connect(
|
517
|
-
|
504
|
+
self.aInsPerMille.triggered.connect(
|
505
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_PERMIL)
|
506
|
+
)
|
518
507
|
|
519
508
|
# Insert > Degree Symbol
|
520
|
-
self.aInsDegree =
|
509
|
+
self.aInsDegree = self.mInsSymbol.addAction(self.tr("Degree Symbol"))
|
521
510
|
self.aInsDegree.setShortcut("Ctrl+K, Ctrl+O")
|
522
|
-
self.aInsDegree.triggered.connect(
|
523
|
-
|
511
|
+
self.aInsDegree.triggered.connect(
|
512
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_DEGREE)
|
513
|
+
)
|
524
514
|
|
525
515
|
# Insert > Minus Sign
|
526
|
-
self.aInsMinus =
|
516
|
+
self.aInsMinus = self.mInsSymbol.addAction(self.tr("Minus Sign"))
|
527
517
|
self.aInsMinus.setShortcut("Ctrl+K, Ctrl+M")
|
528
|
-
self.aInsMinus.triggered.connect(
|
529
|
-
|
518
|
+
self.aInsMinus.triggered.connect(
|
519
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_MINUS)
|
520
|
+
)
|
530
521
|
|
531
522
|
# Insert > Times Sign
|
532
|
-
self.aInsTimes =
|
523
|
+
self.aInsTimes = self.mInsSymbol.addAction(self.tr("Times Sign"))
|
533
524
|
self.aInsTimes.setShortcut("Ctrl+K, Ctrl+X")
|
534
|
-
self.aInsTimes.triggered.connect(
|
535
|
-
|
525
|
+
self.aInsTimes.triggered.connect(
|
526
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_TIMES)
|
527
|
+
)
|
536
528
|
|
537
529
|
# Insert > Division
|
538
|
-
self.aInsDivide =
|
530
|
+
self.aInsDivide = self.mInsSymbol.addAction(self.tr("Division Sign"))
|
539
531
|
self.aInsDivide.setShortcut("Ctrl+K, Ctrl+D")
|
540
|
-
self.aInsDivide.triggered.connect(
|
541
|
-
|
532
|
+
self.aInsDivide.triggered.connect(
|
533
|
+
lambda: self.requestDocInsertText.emit(nwUnicode.U_DIVIDE)
|
534
|
+
)
|
542
535
|
|
543
536
|
# Insert > Tags and References
|
544
537
|
self.mInsKeywords = self.insMenu.addMenu(self.tr("Tags and References"))
|
@@ -557,7 +550,7 @@ class GuiMainMenu(QMenuBar):
|
|
557
550
|
self.mInsKWItems[keyWord][0].setText(trConst(nwLabels.KEY_NAME[keyWord]))
|
558
551
|
self.mInsKWItems[keyWord][0].setShortcut(self.mInsKWItems[keyWord][1])
|
559
552
|
self.mInsKWItems[keyWord][0].triggered.connect(
|
560
|
-
lambda n, keyWord=keyWord: self.
|
553
|
+
lambda n, keyWord=keyWord: self.requestDocKeyWordInsert.emit(keyWord)
|
561
554
|
)
|
562
555
|
self.mInsKeywords.addAction(self.mInsKWItems[keyWord][0])
|
563
556
|
|
@@ -565,33 +558,43 @@ class GuiMainMenu(QMenuBar):
|
|
565
558
|
self.mInsComments = self.insMenu.addMenu(self.tr("Special Comments"))
|
566
559
|
|
567
560
|
# Insert > Synopsis Comment
|
568
|
-
self.aInsSynopsis =
|
561
|
+
self.aInsSynopsis = self.mInsComments.addAction(self.tr("Synopsis Comment"))
|
569
562
|
self.aInsSynopsis.setShortcut("Ctrl+K, S")
|
570
|
-
self.aInsSynopsis.triggered.connect(
|
571
|
-
|
563
|
+
self.aInsSynopsis.triggered.connect(
|
564
|
+
lambda: self.requestDocInsert.emit(nwDocInsert.SYNOPSIS)
|
565
|
+
)
|
566
|
+
|
567
|
+
# Insert > Short Description Comment
|
568
|
+
self.aInsShort = self.mInsComments.addAction(self.tr("Short Description Comment"))
|
569
|
+
self.aInsShort.setShortcut("Ctrl+K, U")
|
570
|
+
self.aInsShort.triggered.connect(
|
571
|
+
lambda: self.requestDocInsert.emit(nwDocInsert.SHORT)
|
572
|
+
)
|
572
573
|
|
573
574
|
# Insert > Symbols
|
574
575
|
self.mInsBreaks = self.insMenu.addMenu(self.tr("Page Break and Space"))
|
575
576
|
|
576
577
|
# Insert > New Page
|
577
|
-
self.aInsNewPage =
|
578
|
-
self.aInsNewPage.triggered.connect(
|
579
|
-
|
578
|
+
self.aInsNewPage = self.mInsBreaks.addAction(self.tr("Page Break"))
|
579
|
+
self.aInsNewPage.triggered.connect(
|
580
|
+
lambda: self.requestDocInsert.emit(nwDocInsert.NEW_PAGE)
|
581
|
+
)
|
580
582
|
|
581
583
|
# Insert > Vertical Space (Single)
|
582
|
-
self.aInsVSpaceS =
|
583
|
-
self.aInsVSpaceS.triggered.connect(
|
584
|
-
|
584
|
+
self.aInsVSpaceS = self.mInsBreaks.addAction(self.tr("Vertical Space (Single)"))
|
585
|
+
self.aInsVSpaceS.triggered.connect(
|
586
|
+
lambda: self.requestDocInsert.emit(nwDocInsert.VSPACE_S)
|
587
|
+
)
|
585
588
|
|
586
589
|
# Insert > Vertical Space (Multi)
|
587
|
-
self.aInsVSpaceM =
|
588
|
-
self.aInsVSpaceM.triggered.connect(
|
589
|
-
|
590
|
+
self.aInsVSpaceM = self.mInsBreaks.addAction(self.tr("Vertical Space (Multi)"))
|
591
|
+
self.aInsVSpaceM.triggered.connect(
|
592
|
+
lambda: self.requestDocInsert.emit(nwDocInsert.VSPACE_M)
|
593
|
+
)
|
590
594
|
|
591
595
|
# Insert > Placeholder Text
|
592
|
-
self.aLipsumText =
|
596
|
+
self.aLipsumText = self.mInsBreaks.addAction(self.tr("Placeholder Text"))
|
593
597
|
self.aLipsumText.triggered.connect(lambda: self.mainGui.showLoremIpsumDialog())
|
594
|
-
self.insMenu.addAction(self.aLipsumText)
|
595
598
|
|
596
599
|
return
|
597
600
|
|
@@ -601,146 +604,209 @@ class GuiMainMenu(QMenuBar):
|
|
601
604
|
self.fmtMenu = self.addMenu(self.tr("&Format"))
|
602
605
|
|
603
606
|
# Format > Emphasis
|
604
|
-
self.aFmtEmph =
|
607
|
+
self.aFmtEmph = self.fmtMenu.addAction(self.tr("Emphasis"))
|
605
608
|
self.aFmtEmph.setShortcut("Ctrl+I")
|
606
|
-
self.aFmtEmph.triggered.connect(
|
607
|
-
|
609
|
+
self.aFmtEmph.triggered.connect(
|
610
|
+
lambda: self.requestDocAction.emit(nwDocAction.EMPH)
|
611
|
+
)
|
608
612
|
|
609
613
|
# Format > Strong Emphasis
|
610
|
-
self.aFmtStrong =
|
614
|
+
self.aFmtStrong = self.fmtMenu.addAction(self.tr("Strong Emphasis"))
|
611
615
|
self.aFmtStrong.setShortcut("Ctrl+B")
|
612
|
-
self.aFmtStrong.triggered.connect(
|
613
|
-
|
616
|
+
self.aFmtStrong.triggered.connect(
|
617
|
+
lambda: self.requestDocAction.emit(nwDocAction.STRONG)
|
618
|
+
)
|
614
619
|
|
615
620
|
# Format > Strikethrough
|
616
|
-
self.aFmtStrike =
|
621
|
+
self.aFmtStrike = self.fmtMenu.addAction(self.tr("Strikethrough"))
|
617
622
|
self.aFmtStrike.setShortcut("Ctrl+D")
|
618
|
-
self.aFmtStrike.triggered.connect(
|
619
|
-
|
623
|
+
self.aFmtStrike.triggered.connect(
|
624
|
+
lambda: self.requestDocAction.emit(nwDocAction.STRIKE)
|
625
|
+
)
|
620
626
|
|
621
627
|
# Edit > Separator
|
622
628
|
self.fmtMenu.addSeparator()
|
623
629
|
|
624
630
|
# Format > Double Quotes
|
625
|
-
self.aFmtDQuote =
|
631
|
+
self.aFmtDQuote = self.fmtMenu.addAction(self.tr("Wrap Double Quotes"))
|
626
632
|
self.aFmtDQuote.setShortcut("Ctrl+\"")
|
627
|
-
self.aFmtDQuote.triggered.connect(
|
628
|
-
|
633
|
+
self.aFmtDQuote.triggered.connect(
|
634
|
+
lambda: self.requestDocAction.emit(nwDocAction.D_QUOTE)
|
635
|
+
)
|
629
636
|
|
630
637
|
# Format > Single Quotes
|
631
|
-
self.aFmtSQuote =
|
638
|
+
self.aFmtSQuote = self.fmtMenu.addAction(self.tr("Wrap Single Quotes"))
|
632
639
|
self.aFmtSQuote.setShortcut("Ctrl+'")
|
633
|
-
self.aFmtSQuote.triggered.connect(
|
634
|
-
|
640
|
+
self.aFmtSQuote.triggered.connect(
|
641
|
+
lambda: self.requestDocAction.emit(nwDocAction.S_QUOTE)
|
642
|
+
)
|
643
|
+
|
644
|
+
# Format > Separator
|
645
|
+
self.fmtMenu.addSeparator()
|
646
|
+
|
647
|
+
# Shortcodes
|
648
|
+
self.mShortcodes = self.fmtMenu.addMenu(self.tr("More Formats ..."))
|
649
|
+
|
650
|
+
# Shortcode Italic
|
651
|
+
self.aScItalic = self.mShortcodes.addAction(self.tr("Italics (Shortcode)"))
|
652
|
+
self.aScItalic.triggered.connect(
|
653
|
+
lambda: self.requestDocAction.emit(nwDocAction.SC_ITALIC)
|
654
|
+
)
|
655
|
+
|
656
|
+
# Shortcode Bold
|
657
|
+
self.aScBold = self.mShortcodes.addAction(self.tr("Bold (Shortcode)"))
|
658
|
+
self.aScBold.triggered.connect(
|
659
|
+
lambda: self.requestDocAction.emit(nwDocAction.SC_BOLD)
|
660
|
+
)
|
661
|
+
|
662
|
+
# Shortcode Strikethrough
|
663
|
+
self.aScStrike = self.mShortcodes.addAction(self.tr("Strikethrough (Shortcode)"))
|
664
|
+
self.aScStrike.triggered.connect(
|
665
|
+
lambda: self.requestDocAction.emit(nwDocAction.SC_STRIKE)
|
666
|
+
)
|
667
|
+
|
668
|
+
# Shortcode Underline
|
669
|
+
self.aScULine = self.mShortcodes.addAction(self.tr("Underline"))
|
670
|
+
self.aScULine.triggered.connect(
|
671
|
+
lambda: self.requestDocAction.emit(nwDocAction.SC_ULINE)
|
672
|
+
)
|
673
|
+
|
674
|
+
# Shortcode Superscript
|
675
|
+
self.aScSuper = self.mShortcodes.addAction(self.tr("Superscript"))
|
676
|
+
self.aScSuper.triggered.connect(
|
677
|
+
lambda: self.requestDocAction.emit(nwDocAction.SC_SUP)
|
678
|
+
)
|
679
|
+
|
680
|
+
# Shortcode Subscript
|
681
|
+
self.aScSub = self.mShortcodes.addAction(self.tr("Subscript"))
|
682
|
+
self.aScSub.triggered.connect(
|
683
|
+
lambda: self.requestDocAction.emit(nwDocAction.SC_SUB)
|
684
|
+
)
|
635
685
|
|
636
686
|
# Format > Separator
|
637
687
|
self.fmtMenu.addSeparator()
|
638
688
|
|
639
689
|
# Format > Header 1 (Partition)
|
640
|
-
self.aFmtHead1 =
|
690
|
+
self.aFmtHead1 = self.fmtMenu.addAction(self.tr("Header 1 (Partition)"))
|
641
691
|
self.aFmtHead1.setShortcut("Ctrl+1")
|
642
|
-
self.aFmtHead1.triggered.connect(
|
643
|
-
|
692
|
+
self.aFmtHead1.triggered.connect(
|
693
|
+
lambda: self.requestDocAction.emit(nwDocAction.BLOCK_H1)
|
694
|
+
)
|
644
695
|
|
645
696
|
# Format > Header 2 (Chapter)
|
646
|
-
self.aFmtHead2 =
|
697
|
+
self.aFmtHead2 = self.fmtMenu.addAction(self.tr("Header 2 (Chapter)"))
|
647
698
|
self.aFmtHead2.setShortcut("Ctrl+2")
|
648
|
-
self.aFmtHead2.triggered.connect(
|
649
|
-
|
699
|
+
self.aFmtHead2.triggered.connect(
|
700
|
+
lambda: self.requestDocAction.emit(nwDocAction.BLOCK_H2)
|
701
|
+
)
|
650
702
|
|
651
703
|
# Format > Header 3 (Scene)
|
652
|
-
self.aFmtHead3 =
|
704
|
+
self.aFmtHead3 = self.fmtMenu.addAction(self.tr("Header 3 (Scene)"))
|
653
705
|
self.aFmtHead3.setShortcut("Ctrl+3")
|
654
|
-
self.aFmtHead3.triggered.connect(
|
655
|
-
|
706
|
+
self.aFmtHead3.triggered.connect(
|
707
|
+
lambda: self.requestDocAction.emit(nwDocAction.BLOCK_H3)
|
708
|
+
)
|
656
709
|
|
657
710
|
# Format > Header 4 (Section)
|
658
|
-
self.aFmtHead4 =
|
711
|
+
self.aFmtHead4 = self.fmtMenu.addAction(self.tr("Header 4 (Section)"))
|
659
712
|
self.aFmtHead4.setShortcut("Ctrl+4")
|
660
|
-
self.aFmtHead4.triggered.connect(
|
661
|
-
|
713
|
+
self.aFmtHead4.triggered.connect(
|
714
|
+
lambda: self.requestDocAction.emit(nwDocAction.BLOCK_H4)
|
715
|
+
)
|
662
716
|
|
663
717
|
# Format > Separator
|
664
718
|
self.fmtMenu.addSeparator()
|
665
719
|
|
666
720
|
# Format > Novel Title
|
667
|
-
self.aFmtTitle =
|
668
|
-
self.aFmtTitle.triggered.connect(
|
669
|
-
|
721
|
+
self.aFmtTitle = self.fmtMenu.addAction(self.tr("Novel Title"))
|
722
|
+
self.aFmtTitle.triggered.connect(
|
723
|
+
lambda: self.requestDocAction.emit(nwDocAction.BLOCK_TTL)
|
724
|
+
)
|
670
725
|
|
671
726
|
# Format > Unnumbered Chapter
|
672
|
-
self.aFmtUnNum =
|
673
|
-
self.aFmtUnNum.triggered.connect(
|
674
|
-
|
727
|
+
self.aFmtUnNum = self.fmtMenu.addAction(self.tr("Unnumbered Chapter"))
|
728
|
+
self.aFmtUnNum.triggered.connect(
|
729
|
+
lambda: self.requestDocAction.emit(nwDocAction.BLOCK_UNN)
|
730
|
+
)
|
675
731
|
|
676
732
|
# Format > Separator
|
677
733
|
self.fmtMenu.addSeparator()
|
678
734
|
|
679
735
|
# Format > Align Left
|
680
|
-
self.aFmtAlignLeft =
|
736
|
+
self.aFmtAlignLeft = self.fmtMenu.addAction(self.tr("Align Left"))
|
681
737
|
self.aFmtAlignLeft.setShortcut("Ctrl+5")
|
682
|
-
self.aFmtAlignLeft.triggered.connect(
|
683
|
-
|
738
|
+
self.aFmtAlignLeft.triggered.connect(
|
739
|
+
lambda: self.requestDocAction.emit(nwDocAction.ALIGN_L)
|
740
|
+
)
|
684
741
|
|
685
742
|
# Format > Align Centre
|
686
|
-
self.aFmtAlignCentre =
|
743
|
+
self.aFmtAlignCentre = self.fmtMenu.addAction(self.tr("Align Centre"))
|
687
744
|
self.aFmtAlignCentre.setShortcut("Ctrl+6")
|
688
|
-
self.aFmtAlignCentre.triggered.connect(
|
689
|
-
|
745
|
+
self.aFmtAlignCentre.triggered.connect(
|
746
|
+
lambda: self.requestDocAction.emit(nwDocAction.ALIGN_C)
|
747
|
+
)
|
690
748
|
|
691
749
|
# Format > Align Right
|
692
|
-
self.aFmtAlignRight =
|
750
|
+
self.aFmtAlignRight = self.fmtMenu.addAction(self.tr("Align Right"))
|
693
751
|
self.aFmtAlignRight.setShortcut("Ctrl+7")
|
694
|
-
self.aFmtAlignRight.triggered.connect(
|
695
|
-
|
752
|
+
self.aFmtAlignRight.triggered.connect(
|
753
|
+
lambda: self.requestDocAction.emit(nwDocAction.ALIGN_R)
|
754
|
+
)
|
696
755
|
|
697
756
|
# Format > Separator
|
698
757
|
self.fmtMenu.addSeparator()
|
699
758
|
|
700
759
|
# Format > Indent Left
|
701
|
-
self.aFmtIndentLeft =
|
760
|
+
self.aFmtIndentLeft = self.fmtMenu.addAction(self.tr("Indent Left"))
|
702
761
|
self.aFmtIndentLeft.setShortcut("Ctrl+8")
|
703
|
-
self.aFmtIndentLeft.triggered.connect(
|
704
|
-
|
762
|
+
self.aFmtIndentLeft.triggered.connect(
|
763
|
+
lambda: self.requestDocAction.emit(nwDocAction.INDENT_L)
|
764
|
+
)
|
705
765
|
|
706
766
|
# Format > Indent Right
|
707
|
-
self.aFmtIndentRight =
|
767
|
+
self.aFmtIndentRight = self.fmtMenu.addAction(self.tr("Indent Right"))
|
708
768
|
self.aFmtIndentRight.setShortcut("Ctrl+9")
|
709
|
-
self.aFmtIndentRight.triggered.connect(
|
710
|
-
|
769
|
+
self.aFmtIndentRight.triggered.connect(
|
770
|
+
lambda: self.requestDocAction.emit(nwDocAction.INDENT_R)
|
771
|
+
)
|
711
772
|
|
712
773
|
# Format > Separator
|
713
774
|
self.fmtMenu.addSeparator()
|
714
775
|
|
715
776
|
# Format > Comment
|
716
|
-
self.aFmtComment =
|
777
|
+
self.aFmtComment = self.fmtMenu.addAction(self.tr("Toggle Comment"))
|
717
778
|
self.aFmtComment.setShortcut("Ctrl+/")
|
718
|
-
self.aFmtComment.triggered.connect(
|
719
|
-
|
779
|
+
self.aFmtComment.triggered.connect(
|
780
|
+
lambda: self.requestDocAction.emit(nwDocAction.BLOCK_COM)
|
781
|
+
)
|
720
782
|
|
721
783
|
# Format > Remove Block Format
|
722
|
-
self.aFmtNoFormat =
|
784
|
+
self.aFmtNoFormat = self.fmtMenu.addAction(self.tr("Remove Block Format"))
|
723
785
|
self.aFmtNoFormat.setShortcuts(["Ctrl+0", "Ctrl+Shift+/"])
|
724
|
-
self.aFmtNoFormat.triggered.connect(
|
725
|
-
|
786
|
+
self.aFmtNoFormat.triggered.connect(
|
787
|
+
lambda: self.requestDocAction.emit(nwDocAction.BLOCK_TXT)
|
788
|
+
)
|
726
789
|
|
727
790
|
# Format > Separator
|
728
791
|
self.fmtMenu.addSeparator()
|
729
792
|
|
730
793
|
# Format > Replace Single Quotes
|
731
|
-
self.aFmtReplSng =
|
732
|
-
self.aFmtReplSng.triggered.connect(
|
733
|
-
|
794
|
+
self.aFmtReplSng = self.fmtMenu.addAction(self.tr("Convert Single Quotes"))
|
795
|
+
self.aFmtReplSng.triggered.connect(
|
796
|
+
lambda: self.requestDocAction.emit(nwDocAction.REPL_SNG)
|
797
|
+
)
|
734
798
|
|
735
799
|
# Format > Replace Double Quotes
|
736
|
-
self.aFmtReplDbl =
|
737
|
-
self.aFmtReplDbl.triggered.connect(
|
738
|
-
|
800
|
+
self.aFmtReplDbl = self.fmtMenu.addAction(self.tr("Convert Double Quotes"))
|
801
|
+
self.aFmtReplDbl.triggered.connect(
|
802
|
+
lambda: self.requestDocAction.emit(nwDocAction.REPL_DBL)
|
803
|
+
)
|
739
804
|
|
740
805
|
# Format > Remove In-Paragraph Breaks
|
741
|
-
self.aFmtRmBreaks =
|
742
|
-
self.aFmtRmBreaks.triggered.connect(
|
743
|
-
|
806
|
+
self.aFmtRmBreaks = self.fmtMenu.addAction(self.tr("Remove In-Paragraph Breaks"))
|
807
|
+
self.aFmtRmBreaks.triggered.connect(
|
808
|
+
lambda: self.requestDocAction.emit(nwDocAction.RM_BREAKS)
|
809
|
+
)
|
744
810
|
|
745
811
|
return
|
746
812
|
|
@@ -750,36 +816,31 @@ class GuiMainMenu(QMenuBar):
|
|
750
816
|
self.srcMenu = self.addMenu(self.tr("&Search"))
|
751
817
|
|
752
818
|
# Search > Find
|
753
|
-
self.aFind =
|
819
|
+
self.aFind = self.srcMenu.addAction(self.tr("Find"))
|
754
820
|
self.aFind.setShortcut("Ctrl+F")
|
755
821
|
self.aFind.triggered.connect(lambda: self.mainGui.docEditor.beginSearch())
|
756
|
-
self.srcMenu.addAction(self.aFind)
|
757
822
|
|
758
823
|
# Search > Replace
|
759
|
-
self.aReplace =
|
824
|
+
self.aReplace = self.srcMenu.addAction(self.tr("Replace"))
|
760
825
|
self.aReplace.setShortcut("Ctrl+=" if CONFIG.osDarwin else "Ctrl+H")
|
761
826
|
self.aReplace.triggered.connect(lambda: self.mainGui.docEditor.beginReplace())
|
762
|
-
self.srcMenu.addAction(self.aReplace)
|
763
827
|
|
764
828
|
# Search > Find Next
|
765
|
-
self.aFindNext =
|
829
|
+
self.aFindNext = self.srcMenu.addAction(self.tr("Find Next"))
|
766
830
|
self.aFindNext.setShortcuts(["Ctrl+G", "F3"] if CONFIG.osDarwin else ["F3", "Ctrl+G"])
|
767
831
|
self.aFindNext.triggered.connect(lambda: self.mainGui.docEditor.findNext())
|
768
|
-
self.srcMenu.addAction(self.aFindNext)
|
769
832
|
|
770
833
|
# Search > Find Prev
|
771
|
-
self.aFindPrev =
|
834
|
+
self.aFindPrev = self.srcMenu.addAction(self.tr("Find Previous"))
|
772
835
|
self.aFindPrev.setShortcuts(
|
773
836
|
["Ctrl+Shift+G", "Shift+F3"] if CONFIG.osDarwin else ["Shift+F3", "Ctrl+Shift+G"]
|
774
837
|
)
|
775
838
|
self.aFindPrev.triggered.connect(lambda: self.mainGui.docEditor.findNext(goBack=True))
|
776
|
-
self.srcMenu.addAction(self.aFindPrev)
|
777
839
|
|
778
840
|
# Search > Replace Next
|
779
|
-
self.aReplaceNext =
|
841
|
+
self.aReplaceNext = self.srcMenu.addAction(self.tr("Replace Next"))
|
780
842
|
self.aReplaceNext.setShortcut("Ctrl+Shift+1")
|
781
843
|
self.aReplaceNext.triggered.connect(lambda: self.mainGui.docEditor.replaceNext())
|
782
|
-
self.srcMenu.addAction(self.aReplaceNext)
|
783
844
|
|
784
845
|
return
|
785
846
|
|
@@ -789,12 +850,11 @@ class GuiMainMenu(QMenuBar):
|
|
789
850
|
self.toolsMenu = self.addMenu(self.tr("&Tools"))
|
790
851
|
|
791
852
|
# Tools > Check Spelling
|
792
|
-
self.aSpellCheck =
|
853
|
+
self.aSpellCheck = self.toolsMenu.addAction(self.tr("Check Spelling"))
|
793
854
|
self.aSpellCheck.setCheckable(True)
|
794
855
|
self.aSpellCheck.setChecked(SHARED.project.data.spellCheck)
|
795
856
|
self.aSpellCheck.triggered.connect(self._toggleSpellCheck) # triggered, not toggled!
|
796
857
|
self.aSpellCheck.setShortcut("Ctrl+F7")
|
797
|
-
self.toolsMenu.addAction(self.aSpellCheck)
|
798
858
|
|
799
859
|
self.mSelectLanguage = self.toolsMenu.addMenu(self.tr("Spell Check Language"))
|
800
860
|
languages = SHARED.spelling.listDictionaries()
|
@@ -806,51 +866,49 @@ class GuiMainMenu(QMenuBar):
|
|
806
866
|
self.mSelectLanguage.addAction(aSpell)
|
807
867
|
|
808
868
|
# Tools > Re-Run Spell Check
|
809
|
-
self.aReRunSpell =
|
869
|
+
self.aReRunSpell = self.toolsMenu.addAction(self.tr("Re-Run Spell Check"))
|
810
870
|
self.aReRunSpell.setShortcut("F7")
|
811
871
|
self.aReRunSpell.triggered.connect(lambda: self.mainGui.docEditor.spellCheckDocument())
|
812
|
-
self.toolsMenu.addAction(self.aReRunSpell)
|
813
872
|
|
814
873
|
# Tools > Project Word List
|
815
|
-
self.aEditWordList =
|
874
|
+
self.aEditWordList = self.toolsMenu.addAction(self.tr("Project Word List"))
|
816
875
|
self.aEditWordList.triggered.connect(lambda: self.mainGui.showProjectWordListDialog())
|
817
|
-
|
876
|
+
|
877
|
+
# Tools > Add Dictionaries
|
878
|
+
if CONFIG.osWindows or CONFIG.isDebug:
|
879
|
+
self.aAddDicts = self.toolsMenu.addAction(self.tr("Add Dictionaries"))
|
880
|
+
self.aAddDicts.triggered.connect(self.mainGui.showDictionariesDialog)
|
818
881
|
|
819
882
|
# Tools > Separator
|
820
883
|
self.toolsMenu.addSeparator()
|
821
884
|
|
822
885
|
# Tools > Rebuild Index
|
823
|
-
self.aRebuildIndex =
|
886
|
+
self.aRebuildIndex = self.toolsMenu.addAction(self.tr("Rebuild Index"))
|
824
887
|
self.aRebuildIndex.setShortcut("F9")
|
825
888
|
self.aRebuildIndex.triggered.connect(lambda: self.mainGui.rebuildIndex())
|
826
|
-
self.toolsMenu.addAction(self.aRebuildIndex)
|
827
889
|
|
828
890
|
# Tools > Separator
|
829
891
|
self.toolsMenu.addSeparator()
|
830
892
|
|
831
893
|
# Tools > Backup Project
|
832
|
-
self.aBackupProject =
|
894
|
+
self.aBackupProject = self.toolsMenu.addAction(self.tr("Backup Project"))
|
833
895
|
self.aBackupProject.triggered.connect(lambda: SHARED.project.backupProject(True))
|
834
|
-
self.toolsMenu.addAction(self.aBackupProject)
|
835
896
|
|
836
897
|
# Tools > Build Manuscript
|
837
|
-
self.aBuildManuscript =
|
898
|
+
self.aBuildManuscript = self.toolsMenu.addAction(self.tr("Build Manuscript"))
|
838
899
|
self.aBuildManuscript.setShortcut("F5")
|
839
900
|
self.aBuildManuscript.triggered.connect(self.mainGui.showBuildManuscriptDialog)
|
840
|
-
self.toolsMenu.addAction(self.aBuildManuscript)
|
841
901
|
|
842
902
|
# Tools > Writing Statistics
|
843
|
-
self.aWritingStats =
|
903
|
+
self.aWritingStats = self.toolsMenu.addAction(self.tr("Writing Statistics"))
|
844
904
|
self.aWritingStats.setShortcut("F6")
|
845
905
|
self.aWritingStats.triggered.connect(lambda: self.mainGui.showWritingStatsDialog())
|
846
|
-
self.toolsMenu.addAction(self.aWritingStats)
|
847
906
|
|
848
907
|
# Tools > Preferences
|
849
|
-
self.aPreferences =
|
908
|
+
self.aPreferences = self.toolsMenu.addAction(self.tr("Preferences"))
|
850
909
|
self.aPreferences.setShortcut("Ctrl+,")
|
851
910
|
self.aPreferences.setMenuRole(QAction.PreferencesRole)
|
852
911
|
self.aPreferences.triggered.connect(lambda: self.mainGui.showPreferencesDialog())
|
853
|
-
self.toolsMenu.addAction(self.aPreferences)
|
854
912
|
|
855
913
|
return
|
856
914
|
|
@@ -860,58 +918,50 @@ class GuiMainMenu(QMenuBar):
|
|
860
918
|
self.helpMenu = self.addMenu(self.tr("&Help"))
|
861
919
|
|
862
920
|
# Help > About
|
863
|
-
self.aAboutNW =
|
921
|
+
self.aAboutNW = self.helpMenu.addAction(self.tr("About novelWriter"))
|
864
922
|
self.aAboutNW.setMenuRole(QAction.AboutRole)
|
865
923
|
self.aAboutNW.triggered.connect(lambda: self.mainGui.showAboutNWDialog())
|
866
|
-
self.helpMenu.addAction(self.aAboutNW)
|
867
924
|
|
868
925
|
# Help > About Qt5
|
869
|
-
self.aAboutQt =
|
926
|
+
self.aAboutQt = self.helpMenu.addAction(self.tr("About Qt5"))
|
870
927
|
self.aAboutQt.setMenuRole(QAction.AboutQtRole)
|
871
928
|
self.aAboutQt.triggered.connect(lambda: self.mainGui.showAboutQtDialog())
|
872
|
-
self.helpMenu.addAction(self.aAboutQt)
|
873
929
|
|
874
930
|
# Help > Separator
|
875
931
|
self.helpMenu.addSeparator()
|
876
932
|
|
877
933
|
# Help > User Manual (Online)
|
878
|
-
self.aHelpDocs =
|
934
|
+
self.aHelpDocs = self.helpMenu.addAction(self.tr("User Manual (Online)"))
|
879
935
|
self.aHelpDocs.setShortcut("F1")
|
880
936
|
self.aHelpDocs.triggered.connect(lambda: self._openWebsite(nwConst.URL_DOCS))
|
881
|
-
self.helpMenu.addAction(self.aHelpDocs)
|
882
937
|
|
883
938
|
# Help > User Manual (PDF)
|
884
939
|
if isinstance(CONFIG.pdfDocs, Path):
|
885
|
-
self.aPdfDocs =
|
940
|
+
self.aPdfDocs = self.helpMenu.addAction(self.tr("User Manual (PDF)"))
|
886
941
|
self.aPdfDocs.setShortcut("Shift+F1")
|
887
942
|
self.aPdfDocs.triggered.connect(self._openUserManualFile)
|
888
|
-
self.helpMenu.addAction(self.aPdfDocs)
|
889
943
|
|
890
944
|
# Help > Separator
|
891
945
|
self.helpMenu.addSeparator()
|
892
946
|
|
893
947
|
# Document > Report an Issue
|
894
|
-
self.aIssue =
|
948
|
+
self.aIssue = self.helpMenu.addAction(self.tr("Report an Issue (GitHub)"))
|
895
949
|
self.aIssue.triggered.connect(lambda: self._openWebsite(nwConst.URL_REPORT))
|
896
|
-
self.helpMenu.addAction(self.aIssue)
|
897
950
|
|
898
951
|
# Document > Ask a Question
|
899
|
-
self.aQuestion =
|
952
|
+
self.aQuestion = self.helpMenu.addAction(self.tr("Ask a Question (GitHub)"))
|
900
953
|
self.aQuestion.triggered.connect(lambda: self._openWebsite(nwConst.URL_HELP))
|
901
|
-
self.helpMenu.addAction(self.aQuestion)
|
902
954
|
|
903
955
|
# Document > Main Website
|
904
|
-
self.aWebsite =
|
956
|
+
self.aWebsite = self.helpMenu.addAction(self.tr("The novelWriter Website"))
|
905
957
|
self.aWebsite.triggered.connect(lambda: self._openWebsite(nwConst.URL_WEB))
|
906
|
-
self.helpMenu.addAction(self.aWebsite)
|
907
958
|
|
908
959
|
# Help > Separator
|
909
960
|
self.helpMenu.addSeparator()
|
910
961
|
|
911
962
|
# Document > Check for Updates
|
912
|
-
self.aUpdates =
|
963
|
+
self.aUpdates = self.helpMenu.addAction(self.tr("Check for New Release"))
|
913
964
|
self.aUpdates.triggered.connect(lambda: self.mainGui.showUpdatesDialog())
|
914
|
-
self.helpMenu.addAction(self.aUpdates)
|
915
965
|
|
916
966
|
return
|
917
967
|
|