novelWriter 2.5.1__py3-none-any.whl → 2.6b1__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.5.1.dist-info → novelWriter-2.6b1.dist-info}/METADATA +2 -1
- {novelWriter-2.5.1.dist-info → novelWriter-2.6b1.dist-info}/RECORD +61 -56
- {novelWriter-2.5.1.dist-info → novelWriter-2.6b1.dist-info}/WHEEL +1 -1
- novelwriter/__init__.py +3 -3
- novelwriter/assets/i18n/project_en_GB.json +1 -0
- novelwriter/assets/icons/typicons_dark/icons.conf +1 -0
- novelwriter/assets/icons/typicons_dark/mixed_copy.svg +4 -0
- novelwriter/assets/icons/typicons_light/icons.conf +1 -0
- novelwriter/assets/icons/typicons_light/mixed_copy.svg +4 -0
- novelwriter/assets/manual.pdf +0 -0
- novelwriter/assets/sample.zip +0 -0
- novelwriter/assets/themes/default_light.conf +2 -2
- novelwriter/common.py +63 -0
- novelwriter/config.py +10 -3
- novelwriter/constants.py +153 -60
- novelwriter/core/buildsettings.py +66 -39
- novelwriter/core/coretools.py +34 -22
- novelwriter/core/docbuild.py +130 -169
- novelwriter/core/index.py +29 -18
- novelwriter/core/item.py +2 -2
- novelwriter/core/options.py +4 -1
- novelwriter/core/spellcheck.py +9 -14
- novelwriter/dialogs/preferences.py +45 -32
- novelwriter/dialogs/projectsettings.py +3 -3
- novelwriter/enum.py +29 -23
- novelwriter/extensions/configlayout.py +24 -11
- novelwriter/extensions/modified.py +13 -1
- novelwriter/extensions/pagedsidebar.py +5 -5
- novelwriter/formats/shared.py +155 -0
- novelwriter/formats/todocx.py +1195 -0
- novelwriter/formats/tohtml.py +452 -0
- novelwriter/{core → formats}/tokenizer.py +483 -485
- novelwriter/formats/tomarkdown.py +217 -0
- novelwriter/{core → formats}/toodt.py +270 -320
- novelwriter/formats/toqdoc.py +436 -0
- novelwriter/formats/toraw.py +91 -0
- novelwriter/gui/doceditor.py +240 -193
- novelwriter/gui/dochighlight.py +96 -84
- novelwriter/gui/docviewer.py +56 -30
- novelwriter/gui/docviewerpanel.py +3 -3
- novelwriter/gui/editordocument.py +17 -2
- novelwriter/gui/itemdetails.py +8 -4
- novelwriter/gui/mainmenu.py +121 -60
- novelwriter/gui/noveltree.py +35 -37
- novelwriter/gui/outline.py +186 -238
- novelwriter/gui/projtree.py +142 -131
- novelwriter/gui/sidebar.py +7 -6
- novelwriter/gui/theme.py +5 -4
- novelwriter/guimain.py +43 -155
- novelwriter/shared.py +14 -4
- novelwriter/text/counting.py +2 -0
- novelwriter/text/patterns.py +155 -59
- novelwriter/tools/manusbuild.py +1 -1
- novelwriter/tools/manuscript.py +121 -78
- novelwriter/tools/manussettings.py +403 -260
- novelwriter/tools/welcome.py +4 -4
- novelwriter/tools/writingstats.py +3 -3
- novelwriter/types.py +16 -6
- novelwriter/core/tohtml.py +0 -530
- novelwriter/core/tomarkdown.py +0 -252
- novelwriter/core/toqdoc.py +0 -419
- {novelWriter-2.5.1.dist-info → novelWriter-2.6b1.dist-info}/LICENSE.md +0 -0
- {novelWriter-2.5.1.dist-info → novelWriter-2.6b1.dist-info}/entry_points.txt +0 -0
- {novelWriter-2.5.1.dist-info → novelWriter-2.6b1.dist-info}/top_level.txt +0 -0
novelwriter/gui/mainmenu.py
CHANGED
@@ -28,13 +28,15 @@ import logging
|
|
28
28
|
from pathlib import Path
|
29
29
|
from typing import TYPE_CHECKING
|
30
30
|
|
31
|
-
from PyQt5.QtCore import
|
32
|
-
from PyQt5.QtGui import QDesktopServices
|
31
|
+
from PyQt5.QtCore import pyqtSignal, pyqtSlot
|
33
32
|
from PyQt5.QtWidgets import QAction, QMenuBar
|
34
33
|
|
35
34
|
from novelwriter import CONFIG, SHARED
|
36
|
-
from novelwriter.common import openExternalPath
|
37
|
-
from novelwriter.constants import
|
35
|
+
from novelwriter.common import openExternalPath, qtLambda
|
36
|
+
from novelwriter.constants import (
|
37
|
+
nwConst, nwKeyWords, nwLabels, nwShortcode, nwStats, nwStyles, nwUnicode,
|
38
|
+
trConst
|
39
|
+
)
|
38
40
|
from novelwriter.enum import nwDocAction, nwDocInsert, nwFocus, nwView
|
39
41
|
from novelwriter.extensions.eventfilters import StatusTipFilter
|
40
42
|
|
@@ -104,12 +106,6 @@ class GuiMainMenu(QMenuBar):
|
|
104
106
|
self.mainGui.docEditor.toggleSpellCheck(None)
|
105
107
|
return
|
106
108
|
|
107
|
-
@pyqtSlot(str)
|
108
|
-
def _openWebsite(self, url: str) -> None:
|
109
|
-
"""Open a URL in the system's default browser."""
|
110
|
-
QDesktopServices.openUrl(QUrl(url))
|
111
|
-
return
|
112
|
-
|
113
109
|
@pyqtSlot()
|
114
110
|
def _openUserManualFile(self) -> None:
|
115
111
|
"""Open the documentation in PDF format."""
|
@@ -141,12 +137,13 @@ class GuiMainMenu(QMenuBar):
|
|
141
137
|
# Project > Save Project
|
142
138
|
self.aSaveProject = self.projMenu.addAction(self.tr("Save Project"))
|
143
139
|
self.aSaveProject.setShortcut("Ctrl+Shift+S")
|
144
|
-
self.aSaveProject.triggered.connect(
|
140
|
+
self.aSaveProject.triggered.connect(qtLambda(self.mainGui.saveProject))
|
141
|
+
self.mainGui.addAction(self.aSaveProject)
|
145
142
|
|
146
143
|
# Project > Close Project
|
147
144
|
self.aCloseProject = self.projMenu.addAction(self.tr("Close Project"))
|
148
145
|
self.aCloseProject.setShortcut("Ctrl+Shift+W")
|
149
|
-
self.aCloseProject.triggered.connect(
|
146
|
+
self.aCloseProject.triggered.connect(qtLambda(self.mainGui.closeProject, False))
|
150
147
|
|
151
148
|
# Project > Separator
|
152
149
|
self.projMenu.addSeparator()
|
@@ -167,16 +164,17 @@ class GuiMainMenu(QMenuBar):
|
|
167
164
|
# Project > Edit
|
168
165
|
self.aEditItem = self.projMenu.addAction(self.tr("Rename Item"))
|
169
166
|
self.aEditItem.setShortcut("F2")
|
170
|
-
self.aEditItem.triggered.connect(
|
167
|
+
self.aEditItem.triggered.connect(qtLambda(self.mainGui.projView.renameTreeItem, None))
|
168
|
+
self.mainGui.addAction(self.aEditItem)
|
171
169
|
|
172
170
|
# Project > Delete
|
173
171
|
self.aDeleteItem = self.projMenu.addAction(self.tr("Delete Item"))
|
174
172
|
self.aDeleteItem.setShortcut("Ctrl+Shift+Del") # Cannot be Ctrl+Del, see #629
|
175
|
-
self.aDeleteItem.triggered.connect(
|
173
|
+
self.aDeleteItem.triggered.connect(qtLambda(self.mainGui.projView.requestDeleteItem, None))
|
176
174
|
|
177
175
|
# Project > Empty Trash
|
178
176
|
self.aEmptyTrash = self.projMenu.addAction(self.tr("Empty Trash"))
|
179
|
-
self.aEmptyTrash.triggered.connect(
|
177
|
+
self.aEmptyTrash.triggered.connect(qtLambda(self.mainGui.projView.emptyTrash))
|
180
178
|
|
181
179
|
# Project > Separator
|
182
180
|
self.projMenu.addSeparator()
|
@@ -184,8 +182,9 @@ class GuiMainMenu(QMenuBar):
|
|
184
182
|
# Project > Exit
|
185
183
|
self.aExitNW = self.projMenu.addAction(self.tr("Exit"))
|
186
184
|
self.aExitNW.setShortcut("Ctrl+Q")
|
187
|
-
self.aExitNW.setMenuRole(QAction.QuitRole)
|
188
|
-
self.aExitNW.triggered.connect(
|
185
|
+
self.aExitNW.setMenuRole(QAction.MenuRole.QuitRole)
|
186
|
+
self.aExitNW.triggered.connect(qtLambda(self.mainGui.closeMain))
|
187
|
+
self.mainGui.addAction(self.aExitNW)
|
189
188
|
|
190
189
|
return
|
191
190
|
|
@@ -203,11 +202,13 @@ class GuiMainMenu(QMenuBar):
|
|
203
202
|
self.aSaveDoc = self.docuMenu.addAction(self.tr("Save Document"))
|
204
203
|
self.aSaveDoc.setShortcut("Ctrl+S")
|
205
204
|
self.aSaveDoc.triggered.connect(self.mainGui.forceSaveDocument)
|
205
|
+
self.mainGui.addAction(self.aSaveDoc)
|
206
206
|
|
207
207
|
# Document > Close
|
208
208
|
self.aCloseDoc = self.docuMenu.addAction(self.tr("Close Document"))
|
209
209
|
self.aCloseDoc.setShortcut("Ctrl+W")
|
210
210
|
self.aCloseDoc.triggered.connect(self.mainGui.closeDocEditor)
|
211
|
+
self.mainGui.addAction(self.aCloseDoc)
|
211
212
|
|
212
213
|
# Document > Separator
|
213
214
|
self.docuMenu.addSeparator()
|
@@ -215,7 +216,7 @@ class GuiMainMenu(QMenuBar):
|
|
215
216
|
# Document > Preview
|
216
217
|
self.aViewDoc = self.docuMenu.addAction(self.tr("View Document"))
|
217
218
|
self.aViewDoc.setShortcut("Ctrl+R")
|
218
|
-
self.aViewDoc.triggered.connect(
|
219
|
+
self.aViewDoc.triggered.connect(qtLambda(self.mainGui.viewDocument, None))
|
219
220
|
|
220
221
|
# Document > Close Preview
|
221
222
|
self.aCloseView = self.docuMenu.addAction(self.tr("Close Document View"))
|
@@ -227,11 +228,11 @@ class GuiMainMenu(QMenuBar):
|
|
227
228
|
|
228
229
|
# Document > Show File Details
|
229
230
|
self.aFileDetails = self.docuMenu.addAction(self.tr("Show File Details"))
|
230
|
-
self.aFileDetails.triggered.connect(
|
231
|
+
self.aFileDetails.triggered.connect(qtLambda(self.mainGui.docEditor.revealLocation))
|
231
232
|
|
232
233
|
# Document > Import From File
|
233
234
|
self.aImportFile = self.docuMenu.addAction(self.tr("Import Text from File"))
|
234
|
-
self.aImportFile.triggered.connect(
|
235
|
+
self.aImportFile.triggered.connect(qtLambda(self.mainGui.importDocument))
|
235
236
|
|
236
237
|
return
|
237
238
|
|
@@ -246,6 +247,7 @@ class GuiMainMenu(QMenuBar):
|
|
246
247
|
self.aEditUndo.triggered.connect(
|
247
248
|
lambda: self.requestDocAction.emit(nwDocAction.UNDO)
|
248
249
|
)
|
250
|
+
self.mainGui.addAction(self.aEditUndo)
|
249
251
|
|
250
252
|
# Edit > Redo
|
251
253
|
self.aEditRedo = self.editMenu.addAction(self.tr("Redo"))
|
@@ -253,6 +255,7 @@ class GuiMainMenu(QMenuBar):
|
|
253
255
|
self.aEditRedo.triggered.connect(
|
254
256
|
lambda: self.requestDocAction.emit(nwDocAction.REDO)
|
255
257
|
)
|
258
|
+
self.mainGui.addAction(self.aEditRedo)
|
256
259
|
|
257
260
|
# Edit > Separator
|
258
261
|
self.editMenu.addSeparator()
|
@@ -263,6 +266,7 @@ class GuiMainMenu(QMenuBar):
|
|
263
266
|
self.aEditCut.triggered.connect(
|
264
267
|
lambda: self.requestDocAction.emit(nwDocAction.CUT)
|
265
268
|
)
|
269
|
+
self.mainGui.addAction(self.aEditCut)
|
266
270
|
|
267
271
|
# Edit > Copy
|
268
272
|
self.aEditCopy = self.editMenu.addAction(self.tr("Copy"))
|
@@ -270,6 +274,7 @@ class GuiMainMenu(QMenuBar):
|
|
270
274
|
self.aEditCopy.triggered.connect(
|
271
275
|
lambda: self.requestDocAction.emit(nwDocAction.COPY)
|
272
276
|
)
|
277
|
+
self.mainGui.addAction(self.aEditCopy)
|
273
278
|
|
274
279
|
# Edit > Paste
|
275
280
|
self.aEditPaste = self.editMenu.addAction(self.tr("Paste"))
|
@@ -277,6 +282,7 @@ class GuiMainMenu(QMenuBar):
|
|
277
282
|
self.aEditPaste.triggered.connect(
|
278
283
|
lambda: self.requestDocAction.emit(nwDocAction.PASTE)
|
279
284
|
)
|
285
|
+
self.mainGui.addAction(self.aEditPaste)
|
280
286
|
|
281
287
|
# Edit > Separator
|
282
288
|
self.editMenu.addSeparator()
|
@@ -287,6 +293,7 @@ class GuiMainMenu(QMenuBar):
|
|
287
293
|
self.aSelectAll.triggered.connect(
|
288
294
|
lambda: self.requestDocAction.emit(nwDocAction.SEL_ALL)
|
289
295
|
)
|
296
|
+
self.mainGui.addAction(self.aSelectAll)
|
290
297
|
|
291
298
|
# Edit > Select Paragraph
|
292
299
|
self.aSelectPar = self.editMenu.addAction(self.tr("Select Paragraph"))
|
@@ -294,6 +301,7 @@ class GuiMainMenu(QMenuBar):
|
|
294
301
|
self.aSelectPar.triggered.connect(
|
295
302
|
lambda: self.requestDocAction.emit(nwDocAction.SEL_PARA)
|
296
303
|
)
|
304
|
+
self.mainGui.addAction(self.aSelectPar)
|
297
305
|
|
298
306
|
return
|
299
307
|
|
@@ -343,11 +351,13 @@ class GuiMainMenu(QMenuBar):
|
|
343
351
|
self.aFocusMode = self.viewMenu.addAction(self.tr("Focus Mode"))
|
344
352
|
self.aFocusMode.setShortcut("F8")
|
345
353
|
self.aFocusMode.triggered.connect(self.mainGui.toggleFocusMode)
|
354
|
+
self.mainGui.addAction(self.aFocusMode)
|
346
355
|
|
347
356
|
# View > Toggle Full Screen
|
348
357
|
self.aFullScreen = self.viewMenu.addAction(self.tr("Full Screen Mode"))
|
349
358
|
self.aFullScreen.setShortcut("F11")
|
350
|
-
self.aFullScreen.triggered.connect(
|
359
|
+
self.aFullScreen.triggered.connect(self.mainGui.toggleFullScreenMode)
|
360
|
+
self.mainGui.addAction(self.aFullScreen)
|
351
361
|
|
352
362
|
return
|
353
363
|
|
@@ -365,6 +375,7 @@ class GuiMainMenu(QMenuBar):
|
|
365
375
|
self.aInsENDash.triggered.connect(
|
366
376
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_ENDASH)
|
367
377
|
)
|
378
|
+
self.mainGui.addAction(self.aInsENDash)
|
368
379
|
|
369
380
|
# Insert > Long Dash
|
370
381
|
self.aInsEMDash = self.mInsDashes.addAction(self.tr("Long Dash"))
|
@@ -372,6 +383,7 @@ class GuiMainMenu(QMenuBar):
|
|
372
383
|
self.aInsEMDash.triggered.connect(
|
373
384
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_EMDASH)
|
374
385
|
)
|
386
|
+
self.mainGui.addAction(self.aInsEMDash)
|
375
387
|
|
376
388
|
# Insert > Long Dash
|
377
389
|
self.aInsHorBar = self.mInsDashes.addAction(self.tr("Horizontal Bar"))
|
@@ -379,6 +391,7 @@ class GuiMainMenu(QMenuBar):
|
|
379
391
|
self.aInsHorBar.triggered.connect(
|
380
392
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_HBAR)
|
381
393
|
)
|
394
|
+
self.mainGui.addAction(self.aInsHorBar)
|
382
395
|
|
383
396
|
# Insert > Figure Dash
|
384
397
|
self.aInsFigDash = self.mInsDashes.addAction(self.tr("Figure Dash"))
|
@@ -386,6 +399,7 @@ class GuiMainMenu(QMenuBar):
|
|
386
399
|
self.aInsFigDash.triggered.connect(
|
387
400
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_FGDASH)
|
388
401
|
)
|
402
|
+
self.mainGui.addAction(self.aInsFigDash)
|
389
403
|
|
390
404
|
# Insert > Quote Marks
|
391
405
|
self.mInsQuotes = self.insMenu.addMenu(self.tr("Quote Marks"))
|
@@ -396,6 +410,7 @@ class GuiMainMenu(QMenuBar):
|
|
396
410
|
self.aInsQuoteLS.triggered.connect(
|
397
411
|
lambda: self.requestDocInsert.emit(nwDocInsert.QUOTE_LS)
|
398
412
|
)
|
413
|
+
self.mainGui.addAction(self.aInsQuoteLS)
|
399
414
|
|
400
415
|
# Insert > Right Single Quote
|
401
416
|
self.aInsQuoteRS = self.mInsQuotes.addAction(self.tr("Right Single Quote"))
|
@@ -403,6 +418,7 @@ class GuiMainMenu(QMenuBar):
|
|
403
418
|
self.aInsQuoteRS.triggered.connect(
|
404
419
|
lambda: self.requestDocInsert.emit(nwDocInsert.QUOTE_RS)
|
405
420
|
)
|
421
|
+
self.mainGui.addAction(self.aInsQuoteRS)
|
406
422
|
|
407
423
|
# Insert > Left Double Quote
|
408
424
|
self.aInsQuoteLD = self.mInsQuotes.addAction(self.tr("Left Double Quote"))
|
@@ -410,6 +426,7 @@ class GuiMainMenu(QMenuBar):
|
|
410
426
|
self.aInsQuoteLD.triggered.connect(
|
411
427
|
lambda: self.requestDocInsert.emit(nwDocInsert.QUOTE_LD)
|
412
428
|
)
|
429
|
+
self.mainGui.addAction(self.aInsQuoteLD)
|
413
430
|
|
414
431
|
# Insert > Right Double Quote
|
415
432
|
self.aInsQuoteRD = self.mInsQuotes.addAction(self.tr("Right Double Quote"))
|
@@ -417,6 +434,7 @@ class GuiMainMenu(QMenuBar):
|
|
417
434
|
self.aInsQuoteRD.triggered.connect(
|
418
435
|
lambda: self.requestDocInsert.emit(nwDocInsert.QUOTE_RD)
|
419
436
|
)
|
437
|
+
self.mainGui.addAction(self.aInsQuoteRD)
|
420
438
|
|
421
439
|
# Insert > Alternative Apostrophe
|
422
440
|
self.aInsMSApos = self.mInsQuotes.addAction(self.tr("Alternative Apostrophe"))
|
@@ -424,6 +442,7 @@ class GuiMainMenu(QMenuBar):
|
|
424
442
|
self.aInsMSApos.triggered.connect(
|
425
443
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_MAPOS)
|
426
444
|
)
|
445
|
+
self.mainGui.addAction(self.aInsMSApos)
|
427
446
|
|
428
447
|
# Insert > Symbols
|
429
448
|
self.mInsPunct = self.insMenu.addMenu(self.tr("General Punctuation"))
|
@@ -434,6 +453,7 @@ class GuiMainMenu(QMenuBar):
|
|
434
453
|
self.aInsEllipsis.triggered.connect(
|
435
454
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_HELLIP)
|
436
455
|
)
|
456
|
+
self.mainGui.addAction(self.aInsEllipsis)
|
437
457
|
|
438
458
|
# Insert > Prime
|
439
459
|
self.aInsPrime = self.mInsPunct.addAction(self.tr("Prime"))
|
@@ -441,6 +461,7 @@ class GuiMainMenu(QMenuBar):
|
|
441
461
|
self.aInsPrime.triggered.connect(
|
442
462
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_PRIME)
|
443
463
|
)
|
464
|
+
self.mainGui.addAction(self.aInsPrime)
|
444
465
|
|
445
466
|
# Insert > Double Prime
|
446
467
|
self.aInsDPrime = self.mInsPunct.addAction(self.tr("Double Prime"))
|
@@ -448,6 +469,7 @@ class GuiMainMenu(QMenuBar):
|
|
448
469
|
self.aInsDPrime.triggered.connect(
|
449
470
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_DPRIME)
|
450
471
|
)
|
472
|
+
self.mainGui.addAction(self.aInsDPrime)
|
451
473
|
|
452
474
|
# Insert > White Spaces
|
453
475
|
self.mInsSpace = self.insMenu.addMenu(self.tr("White Spaces"))
|
@@ -458,6 +480,7 @@ class GuiMainMenu(QMenuBar):
|
|
458
480
|
self.aInsNBSpace.triggered.connect(
|
459
481
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_NBSP)
|
460
482
|
)
|
483
|
+
self.mainGui.addAction(self.aInsNBSpace)
|
461
484
|
|
462
485
|
# Insert > Thin Space
|
463
486
|
self.aInsThinSpace = self.mInsSpace.addAction(self.tr("Thin Space"))
|
@@ -465,6 +488,7 @@ class GuiMainMenu(QMenuBar):
|
|
465
488
|
self.aInsThinSpace.triggered.connect(
|
466
489
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_THSP)
|
467
490
|
)
|
491
|
+
self.mainGui.addAction(self.aInsThinSpace)
|
468
492
|
|
469
493
|
# Insert > Thin Non-Breaking Space
|
470
494
|
self.aInsThinNBSpace = self.mInsSpace.addAction(self.tr("Thin Non-Breaking Space"))
|
@@ -472,6 +496,7 @@ class GuiMainMenu(QMenuBar):
|
|
472
496
|
self.aInsThinNBSpace.triggered.connect(
|
473
497
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_THNBSP)
|
474
498
|
)
|
499
|
+
self.mainGui.addAction(self.aInsThinNBSpace)
|
475
500
|
|
476
501
|
# Insert > Symbols
|
477
502
|
self.mInsSymbol = self.insMenu.addMenu(self.tr("Other Symbols"))
|
@@ -482,6 +507,7 @@ class GuiMainMenu(QMenuBar):
|
|
482
507
|
self.aInsBullet.triggered.connect(
|
483
508
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_BULL)
|
484
509
|
)
|
510
|
+
self.mainGui.addAction(self.aInsBullet)
|
485
511
|
|
486
512
|
# Insert > Hyphen Bullet
|
487
513
|
self.aInsHyBull = self.mInsSymbol.addAction(self.tr("Hyphen Bullet"))
|
@@ -489,6 +515,7 @@ class GuiMainMenu(QMenuBar):
|
|
489
515
|
self.aInsHyBull.triggered.connect(
|
490
516
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_HYBULL)
|
491
517
|
)
|
518
|
+
self.mainGui.addAction(self.aInsHyBull)
|
492
519
|
|
493
520
|
# Insert > Flower Mark
|
494
521
|
self.aInsFlower = self.mInsSymbol.addAction(self.tr("Flower Mark"))
|
@@ -496,6 +523,7 @@ class GuiMainMenu(QMenuBar):
|
|
496
523
|
self.aInsFlower.triggered.connect(
|
497
524
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_FLOWER)
|
498
525
|
)
|
526
|
+
self.mainGui.addAction(self.aInsFlower)
|
499
527
|
|
500
528
|
# Insert > Per Mille
|
501
529
|
self.aInsPerMille = self.mInsSymbol.addAction(self.tr("Per Mille"))
|
@@ -503,6 +531,7 @@ class GuiMainMenu(QMenuBar):
|
|
503
531
|
self.aInsPerMille.triggered.connect(
|
504
532
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_PERMIL)
|
505
533
|
)
|
534
|
+
self.mainGui.addAction(self.aInsPerMille)
|
506
535
|
|
507
536
|
# Insert > Degree Symbol
|
508
537
|
self.aInsDegree = self.mInsSymbol.addAction(self.tr("Degree Symbol"))
|
@@ -510,6 +539,7 @@ class GuiMainMenu(QMenuBar):
|
|
510
539
|
self.aInsDegree.triggered.connect(
|
511
540
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_DEGREE)
|
512
541
|
)
|
542
|
+
self.mainGui.addAction(self.aInsDegree)
|
513
543
|
|
514
544
|
# Insert > Minus Sign
|
515
545
|
self.aInsMinus = self.mInsSymbol.addAction(self.tr("Minus Sign"))
|
@@ -517,6 +547,7 @@ class GuiMainMenu(QMenuBar):
|
|
517
547
|
self.aInsMinus.triggered.connect(
|
518
548
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_MINUS)
|
519
549
|
)
|
550
|
+
self.mainGui.addAction(self.aInsMinus)
|
520
551
|
|
521
552
|
# Insert > Times Sign
|
522
553
|
self.aInsTimes = self.mInsSymbol.addAction(self.tr("Times Sign"))
|
@@ -524,6 +555,7 @@ class GuiMainMenu(QMenuBar):
|
|
524
555
|
self.aInsTimes.triggered.connect(
|
525
556
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_TIMES)
|
526
557
|
)
|
558
|
+
self.mainGui.addAction(self.aInsTimes)
|
527
559
|
|
528
560
|
# Insert > Division
|
529
561
|
self.aInsDivide = self.mInsSymbol.addAction(self.tr("Division Sign"))
|
@@ -531,27 +563,15 @@ class GuiMainMenu(QMenuBar):
|
|
531
563
|
self.aInsDivide.triggered.connect(
|
532
564
|
lambda: self.requestDocInsertText.emit(nwUnicode.U_DIVIDE)
|
533
565
|
)
|
566
|
+
self.mainGui.addAction(self.aInsDivide)
|
534
567
|
|
535
568
|
# Insert > Tags and References
|
536
569
|
self.mInsKeywords = self.insMenu.addMenu(self.tr("Tags and References"))
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
self.mInsKWItems[nwKeyWords.PLOT_KEY] = (QAction(self.mInsKeywords), "Ctrl+K, P")
|
543
|
-
self.mInsKWItems[nwKeyWords.TIME_KEY] = (QAction(self.mInsKeywords), "Ctrl+K, T")
|
544
|
-
self.mInsKWItems[nwKeyWords.WORLD_KEY] = (QAction(self.mInsKeywords), "Ctrl+K, L")
|
545
|
-
self.mInsKWItems[nwKeyWords.OBJECT_KEY] = (QAction(self.mInsKeywords), "Ctrl+K, O")
|
546
|
-
self.mInsKWItems[nwKeyWords.ENTITY_KEY] = (QAction(self.mInsKeywords), "Ctrl+K, E")
|
547
|
-
self.mInsKWItems[nwKeyWords.CUSTOM_KEY] = (QAction(self.mInsKeywords), "Ctrl+K, X")
|
548
|
-
for n, keyWord in enumerate(self.mInsKWItems):
|
549
|
-
self.mInsKWItems[keyWord][0].setText(trConst(nwLabels.KEY_NAME[keyWord]))
|
550
|
-
self.mInsKWItems[keyWord][0].setShortcut(self.mInsKWItems[keyWord][1])
|
551
|
-
self.mInsKWItems[keyWord][0].triggered.connect(
|
552
|
-
lambda n, keyWord=keyWord: self.requestDocKeyWordInsert.emit(keyWord)
|
553
|
-
)
|
554
|
-
self.mInsKeywords.addAction(self.mInsKWItems[keyWord][0])
|
570
|
+
for key in nwKeyWords.ALL_KEYS:
|
571
|
+
action = self.mInsKeywords.addAction(trConst(nwLabels.KEY_NAME[key]))
|
572
|
+
action.setShortcut(nwLabels.KEY_SHORTCUT[key])
|
573
|
+
action.triggered.connect(qtLambda(self.requestDocKeyWordInsert.emit, key))
|
574
|
+
self.mainGui.addAction(action)
|
555
575
|
|
556
576
|
# Insert > Special Comments
|
557
577
|
self.mInsComments = self.insMenu.addMenu(self.tr("Special Comments"))
|
@@ -562,6 +582,7 @@ class GuiMainMenu(QMenuBar):
|
|
562
582
|
self.aInsSynopsis.triggered.connect(
|
563
583
|
lambda: self.requestDocInsert.emit(nwDocInsert.SYNOPSIS)
|
564
584
|
)
|
585
|
+
self.mainGui.addAction(self.aInsSynopsis)
|
565
586
|
|
566
587
|
# Insert > Short Description Comment
|
567
588
|
self.aInsShort = self.mInsComments.addAction(self.tr("Short Description Comment"))
|
@@ -569,9 +590,17 @@ class GuiMainMenu(QMenuBar):
|
|
569
590
|
self.aInsShort.triggered.connect(
|
570
591
|
lambda: self.requestDocInsert.emit(nwDocInsert.SHORT)
|
571
592
|
)
|
593
|
+
self.mainGui.addAction(self.aInsShort)
|
572
594
|
|
573
|
-
# Insert >
|
574
|
-
self.
|
595
|
+
# Insert > Word/Character Count
|
596
|
+
self.mInsField = self.insMenu.addMenu(self.tr("Word/Character Count"))
|
597
|
+
for field in nwStats.ALL_FIELDS:
|
598
|
+
value = nwShortcode.FIELD_VALUE.format(field)
|
599
|
+
action = self.mInsField.addAction(trConst(nwLabels.STATS_NAME[field]))
|
600
|
+
action.triggered.connect(qtLambda(self.requestDocInsertText.emit, value))
|
601
|
+
|
602
|
+
# Insert > Breaks and Vertical Space
|
603
|
+
self.mInsBreaks = self.insMenu.addMenu(self.tr("Breaks and Vertical Space"))
|
575
604
|
|
576
605
|
# Insert > New Page
|
577
606
|
self.aInsNewPage = self.mInsBreaks.addAction(self.tr("Page Break"))
|
@@ -579,6 +608,12 @@ class GuiMainMenu(QMenuBar):
|
|
579
608
|
lambda: self.requestDocInsert.emit(nwDocInsert.NEW_PAGE)
|
580
609
|
)
|
581
610
|
|
611
|
+
# Insert > Forced Line Break
|
612
|
+
self.aInsLineBreak = self.mInsBreaks.addAction(self.tr("Forced Line Break"))
|
613
|
+
self.aInsLineBreak.triggered.connect(
|
614
|
+
lambda: self.requestDocInsert.emit(nwDocInsert.LINE_BRK)
|
615
|
+
)
|
616
|
+
|
582
617
|
# Insert > Vertical Space (Single)
|
583
618
|
self.aInsVSpaceS = self.mInsBreaks.addAction(self.tr("Vertical Space (Single)"))
|
584
619
|
self.aInsVSpaceS.triggered.connect(
|
@@ -616,6 +651,7 @@ class GuiMainMenu(QMenuBar):
|
|
616
651
|
self.aFmtBold.triggered.connect(
|
617
652
|
lambda: self.requestDocAction.emit(nwDocAction.MD_BOLD)
|
618
653
|
)
|
654
|
+
self.mainGui.addAction(self.aFmtBold)
|
619
655
|
|
620
656
|
# Format > Italic
|
621
657
|
self.aFmtItalic = self.fmtMenu.addAction(self.tr("Italic"))
|
@@ -623,6 +659,7 @@ class GuiMainMenu(QMenuBar):
|
|
623
659
|
self.aFmtItalic.triggered.connect(
|
624
660
|
lambda: self.requestDocAction.emit(nwDocAction.MD_ITALIC)
|
625
661
|
)
|
662
|
+
self.mainGui.addAction(self.aFmtItalic)
|
626
663
|
|
627
664
|
# Format > Strikethrough
|
628
665
|
self.aFmtStrike = self.fmtMenu.addAction(self.tr("Strikethrough"))
|
@@ -630,6 +667,7 @@ class GuiMainMenu(QMenuBar):
|
|
630
667
|
self.aFmtStrike.triggered.connect(
|
631
668
|
lambda: self.requestDocAction.emit(nwDocAction.MD_STRIKE)
|
632
669
|
)
|
670
|
+
self.mainGui.addAction(self.aFmtStrike)
|
633
671
|
|
634
672
|
# Edit > Separator
|
635
673
|
self.fmtMenu.addSeparator()
|
@@ -640,6 +678,7 @@ class GuiMainMenu(QMenuBar):
|
|
640
678
|
self.aFmtDQuote.triggered.connect(
|
641
679
|
lambda: self.requestDocAction.emit(nwDocAction.D_QUOTE)
|
642
680
|
)
|
681
|
+
self.mainGui.addAction(self.aFmtDQuote)
|
643
682
|
|
644
683
|
# Format > Single Quotes
|
645
684
|
self.aFmtSQuote = self.fmtMenu.addAction(self.tr("Wrap Single Quotes"))
|
@@ -647,6 +686,7 @@ class GuiMainMenu(QMenuBar):
|
|
647
686
|
self.aFmtSQuote.triggered.connect(
|
648
687
|
lambda: self.requestDocAction.emit(nwDocAction.S_QUOTE)
|
649
688
|
)
|
689
|
+
self.mainGui.addAction(self.aFmtSQuote)
|
650
690
|
|
651
691
|
# Format > Separator
|
652
692
|
self.fmtMenu.addSeparator()
|
@@ -700,32 +740,36 @@ class GuiMainMenu(QMenuBar):
|
|
700
740
|
self.fmtMenu.addSeparator()
|
701
741
|
|
702
742
|
# Format > Heading 1 (Partition)
|
703
|
-
self.aFmtHead1 = self.fmtMenu.addAction(
|
743
|
+
self.aFmtHead1 = self.fmtMenu.addAction(trConst(nwStyles.T_LABEL["H1"]))
|
704
744
|
self.aFmtHead1.setShortcut("Ctrl+1")
|
705
745
|
self.aFmtHead1.triggered.connect(
|
706
746
|
lambda: self.requestDocAction.emit(nwDocAction.BLOCK_H1)
|
707
747
|
)
|
748
|
+
self.mainGui.addAction(self.aFmtHead1)
|
708
749
|
|
709
750
|
# Format > Heading 2 (Chapter)
|
710
|
-
self.aFmtHead2 = self.fmtMenu.addAction(
|
751
|
+
self.aFmtHead2 = self.fmtMenu.addAction(trConst(nwStyles.T_LABEL["H2"]))
|
711
752
|
self.aFmtHead2.setShortcut("Ctrl+2")
|
712
753
|
self.aFmtHead2.triggered.connect(
|
713
754
|
lambda: self.requestDocAction.emit(nwDocAction.BLOCK_H2)
|
714
755
|
)
|
756
|
+
self.mainGui.addAction(self.aFmtHead2)
|
715
757
|
|
716
758
|
# Format > Heading 3 (Scene)
|
717
|
-
self.aFmtHead3 = self.fmtMenu.addAction(
|
759
|
+
self.aFmtHead3 = self.fmtMenu.addAction(trConst(nwStyles.T_LABEL["H3"]))
|
718
760
|
self.aFmtHead3.setShortcut("Ctrl+3")
|
719
761
|
self.aFmtHead3.triggered.connect(
|
720
762
|
lambda: self.requestDocAction.emit(nwDocAction.BLOCK_H3)
|
721
763
|
)
|
764
|
+
self.mainGui.addAction(self.aFmtHead3)
|
722
765
|
|
723
766
|
# Format > Heading 4 (Section)
|
724
|
-
self.aFmtHead4 = self.fmtMenu.addAction(
|
767
|
+
self.aFmtHead4 = self.fmtMenu.addAction(trConst(nwStyles.T_LABEL["H4"]))
|
725
768
|
self.aFmtHead4.setShortcut("Ctrl+4")
|
726
769
|
self.aFmtHead4.triggered.connect(
|
727
770
|
lambda: self.requestDocAction.emit(nwDocAction.BLOCK_H4)
|
728
771
|
)
|
772
|
+
self.mainGui.addAction(self.aFmtHead4)
|
729
773
|
|
730
774
|
# Format > Separator
|
731
775
|
self.fmtMenu.addSeparator()
|
@@ -757,6 +801,7 @@ class GuiMainMenu(QMenuBar):
|
|
757
801
|
self.aFmtAlignLeft.triggered.connect(
|
758
802
|
lambda: self.requestDocAction.emit(nwDocAction.ALIGN_L)
|
759
803
|
)
|
804
|
+
self.mainGui.addAction(self.aFmtAlignLeft)
|
760
805
|
|
761
806
|
# Format > Align Centre
|
762
807
|
self.aFmtAlignCentre = self.fmtMenu.addAction(self.tr("Align Centre"))
|
@@ -764,6 +809,7 @@ class GuiMainMenu(QMenuBar):
|
|
764
809
|
self.aFmtAlignCentre.triggered.connect(
|
765
810
|
lambda: self.requestDocAction.emit(nwDocAction.ALIGN_C)
|
766
811
|
)
|
812
|
+
self.mainGui.addAction(self.aFmtAlignCentre)
|
767
813
|
|
768
814
|
# Format > Align Right
|
769
815
|
self.aFmtAlignRight = self.fmtMenu.addAction(self.tr("Align Right"))
|
@@ -771,6 +817,7 @@ class GuiMainMenu(QMenuBar):
|
|
771
817
|
self.aFmtAlignRight.triggered.connect(
|
772
818
|
lambda: self.requestDocAction.emit(nwDocAction.ALIGN_R)
|
773
819
|
)
|
820
|
+
self.mainGui.addAction(self.aFmtAlignRight)
|
774
821
|
|
775
822
|
# Format > Separator
|
776
823
|
self.fmtMenu.addSeparator()
|
@@ -781,6 +828,7 @@ class GuiMainMenu(QMenuBar):
|
|
781
828
|
self.aFmtIndentLeft.triggered.connect(
|
782
829
|
lambda: self.requestDocAction.emit(nwDocAction.INDENT_L)
|
783
830
|
)
|
831
|
+
self.mainGui.addAction(self.aFmtIndentLeft)
|
784
832
|
|
785
833
|
# Format > Indent Right
|
786
834
|
self.aFmtIndentRight = self.fmtMenu.addAction(self.tr("Indent Right"))
|
@@ -788,6 +836,7 @@ class GuiMainMenu(QMenuBar):
|
|
788
836
|
self.aFmtIndentRight.triggered.connect(
|
789
837
|
lambda: self.requestDocAction.emit(nwDocAction.INDENT_R)
|
790
838
|
)
|
839
|
+
self.mainGui.addAction(self.aFmtIndentRight)
|
791
840
|
|
792
841
|
# Format > Separator
|
793
842
|
self.fmtMenu.addSeparator()
|
@@ -798,6 +847,7 @@ class GuiMainMenu(QMenuBar):
|
|
798
847
|
self.aFmtComment.triggered.connect(
|
799
848
|
lambda: self.requestDocAction.emit(nwDocAction.BLOCK_COM)
|
800
849
|
)
|
850
|
+
self.mainGui.addAction(self.aFmtComment)
|
801
851
|
|
802
852
|
# Format > Ignore Text
|
803
853
|
self.aFmtIgnore = self.fmtMenu.addAction(self.tr("Toggle Ignore Text"))
|
@@ -812,6 +862,7 @@ class GuiMainMenu(QMenuBar):
|
|
812
862
|
self.aFmtNoFormat.triggered.connect(
|
813
863
|
lambda: self.requestDocAction.emit(nwDocAction.BLOCK_TXT)
|
814
864
|
)
|
865
|
+
self.mainGui.addAction(self.aFmtNoFormat)
|
815
866
|
|
816
867
|
# Format > Separator
|
817
868
|
self.fmtMenu.addSeparator()
|
@@ -844,29 +895,34 @@ class GuiMainMenu(QMenuBar):
|
|
844
895
|
# Search > Find
|
845
896
|
self.aFind = self.srcMenu.addAction(self.tr("Find"))
|
846
897
|
self.aFind.setShortcut("Ctrl+F")
|
847
|
-
self.aFind.triggered.connect(
|
898
|
+
self.aFind.triggered.connect(qtLambda(self.mainGui.docEditor.beginSearch))
|
899
|
+
self.mainGui.addAction(self.aFind)
|
848
900
|
|
849
901
|
# Search > Replace
|
850
902
|
self.aReplace = self.srcMenu.addAction(self.tr("Replace"))
|
851
903
|
self.aReplace.setShortcut("Ctrl+=" if CONFIG.osDarwin else "Ctrl+H")
|
852
|
-
self.aReplace.triggered.connect(
|
904
|
+
self.aReplace.triggered.connect(qtLambda(self.mainGui.docEditor.beginReplace))
|
905
|
+
self.mainGui.addAction(self.aReplace)
|
853
906
|
|
854
907
|
# Search > Find Next
|
855
908
|
self.aFindNext = self.srcMenu.addAction(self.tr("Find Next"))
|
856
909
|
self.aFindNext.setShortcuts(["Ctrl+G", "F3"] if CONFIG.osDarwin else ["F3", "Ctrl+G"])
|
857
|
-
self.aFindNext.triggered.connect(
|
910
|
+
self.aFindNext.triggered.connect(qtLambda(self.mainGui.docEditor.findNext))
|
911
|
+
self.mainGui.addAction(self.aFindNext)
|
858
912
|
|
859
913
|
# Search > Find Prev
|
860
914
|
self.aFindPrev = self.srcMenu.addAction(self.tr("Find Previous"))
|
861
915
|
self.aFindPrev.setShortcuts(
|
862
916
|
["Ctrl+Shift+G", "Shift+F3"] if CONFIG.osDarwin else ["Shift+F3", "Ctrl+Shift+G"]
|
863
917
|
)
|
864
|
-
self.aFindPrev.triggered.connect(
|
918
|
+
self.aFindPrev.triggered.connect(qtLambda(self.mainGui.docEditor.findNext, goBack=True))
|
919
|
+
self.mainGui.addAction(self.aFindPrev)
|
865
920
|
|
866
921
|
# Search > Replace Next
|
867
922
|
self.aReplaceNext = self.srcMenu.addAction(self.tr("Replace Next"))
|
868
923
|
self.aReplaceNext.setShortcut("Ctrl+Shift+1")
|
869
|
-
self.aReplaceNext.triggered.connect(
|
924
|
+
self.aReplaceNext.triggered.connect(qtLambda(self.mainGui.docEditor.replaceNext))
|
925
|
+
self.mainGui.addAction(self.aReplaceNext)
|
870
926
|
|
871
927
|
# Search > Separator
|
872
928
|
self.srcMenu.addSeparator()
|
@@ -889,6 +945,7 @@ class GuiMainMenu(QMenuBar):
|
|
889
945
|
self.aSpellCheck.setChecked(SHARED.project.data.spellCheck)
|
890
946
|
self.aSpellCheck.triggered.connect(self._toggleSpellCheck) # triggered, not toggled!
|
891
947
|
self.aSpellCheck.setShortcut("Ctrl+F7")
|
948
|
+
self.mainGui.addAction(self.aSpellCheck)
|
892
949
|
|
893
950
|
self.mSelectLanguage = self.toolsMenu.addMenu(self.tr("Spell Check Language"))
|
894
951
|
languages = SHARED.spelling.listDictionaries()
|
@@ -902,7 +959,8 @@ class GuiMainMenu(QMenuBar):
|
|
902
959
|
# Tools > Re-Run Spell Check
|
903
960
|
self.aReRunSpell = self.toolsMenu.addAction(self.tr("Re-Run Spell Check"))
|
904
961
|
self.aReRunSpell.setShortcut("F7")
|
905
|
-
self.aReRunSpell.triggered.connect(
|
962
|
+
self.aReRunSpell.triggered.connect(qtLambda(self.mainGui.docEditor.spellCheckDocument))
|
963
|
+
self.mainGui.addAction(self.aReRunSpell)
|
906
964
|
|
907
965
|
# Tools > Project Word List
|
908
966
|
self.aEditWordList = self.toolsMenu.addAction(self.tr("Project Word List"))
|
@@ -919,14 +977,14 @@ class GuiMainMenu(QMenuBar):
|
|
919
977
|
# Tools > Rebuild Index
|
920
978
|
self.aRebuildIndex = self.toolsMenu.addAction(self.tr("Rebuild Index"))
|
921
979
|
self.aRebuildIndex.setShortcut("F9")
|
922
|
-
self.aRebuildIndex.triggered.connect(
|
980
|
+
self.aRebuildIndex.triggered.connect(qtLambda(self.mainGui.rebuildIndex))
|
923
981
|
|
924
982
|
# Tools > Separator
|
925
983
|
self.toolsMenu.addSeparator()
|
926
984
|
|
927
985
|
# Tools > Backup Project
|
928
986
|
self.aBackupProject = self.toolsMenu.addAction(self.tr("Backup Project"))
|
929
|
-
self.aBackupProject.triggered.connect(
|
987
|
+
self.aBackupProject.triggered.connect(qtLambda(SHARED.project.backupProject, True))
|
930
988
|
|
931
989
|
# Tools > Build Manuscript
|
932
990
|
self.aBuildManuscript = self.toolsMenu.addAction(self.tr("Build Manuscript"))
|
@@ -941,8 +999,9 @@ class GuiMainMenu(QMenuBar):
|
|
941
999
|
# Tools > Preferences
|
942
1000
|
self.aPreferences = self.toolsMenu.addAction(self.tr("Preferences"))
|
943
1001
|
self.aPreferences.setShortcut("Ctrl+,")
|
944
|
-
self.aPreferences.setMenuRole(QAction.PreferencesRole)
|
1002
|
+
self.aPreferences.setMenuRole(QAction.MenuRole.PreferencesRole)
|
945
1003
|
self.aPreferences.triggered.connect(self.mainGui.showPreferencesDialog)
|
1004
|
+
self.mainGui.addAction(self.aPreferences)
|
946
1005
|
|
947
1006
|
return
|
948
1007
|
|
@@ -953,12 +1012,12 @@ class GuiMainMenu(QMenuBar):
|
|
953
1012
|
|
954
1013
|
# Help > About
|
955
1014
|
self.aAboutNW = self.helpMenu.addAction(self.tr("About novelWriter"))
|
956
|
-
self.aAboutNW.setMenuRole(QAction.AboutRole)
|
1015
|
+
self.aAboutNW.setMenuRole(QAction.MenuRole.AboutRole)
|
957
1016
|
self.aAboutNW.triggered.connect(self.mainGui.showAboutNWDialog)
|
958
1017
|
|
959
1018
|
# Help > About Qt5
|
960
1019
|
self.aAboutQt = self.helpMenu.addAction(self.tr("About Qt5"))
|
961
|
-
self.aAboutQt.setMenuRole(QAction.AboutQtRole)
|
1020
|
+
self.aAboutQt.setMenuRole(QAction.MenuRole.AboutQtRole)
|
962
1021
|
self.aAboutQt.triggered.connect(self.mainGui.showAboutQtDialog)
|
963
1022
|
|
964
1023
|
# Help > Separator
|
@@ -967,27 +1026,29 @@ class GuiMainMenu(QMenuBar):
|
|
967
1026
|
# Help > User Manual (Online)
|
968
1027
|
self.aHelpDocs = self.helpMenu.addAction(self.tr("User Manual (Online)"))
|
969
1028
|
self.aHelpDocs.setShortcut("F1")
|
970
|
-
self.aHelpDocs.triggered.connect(
|
1029
|
+
self.aHelpDocs.triggered.connect(qtLambda(SHARED.openWebsite, nwConst.URL_DOCS))
|
1030
|
+
self.mainGui.addAction(self.aHelpDocs)
|
971
1031
|
|
972
1032
|
# Help > User Manual (PDF)
|
973
1033
|
if isinstance(CONFIG.pdfDocs, Path):
|
974
1034
|
self.aPdfDocs = self.helpMenu.addAction(self.tr("User Manual (PDF)"))
|
975
1035
|
self.aPdfDocs.setShortcut("Shift+F1")
|
976
1036
|
self.aPdfDocs.triggered.connect(self._openUserManualFile)
|
1037
|
+
self.mainGui.addAction(self.aPdfDocs)
|
977
1038
|
|
978
1039
|
# Help > Separator
|
979
1040
|
self.helpMenu.addSeparator()
|
980
1041
|
|
981
1042
|
# Document > Report an Issue
|
982
1043
|
self.aIssue = self.helpMenu.addAction(self.tr("Report an Issue (GitHub)"))
|
983
|
-
self.aIssue.triggered.connect(
|
1044
|
+
self.aIssue.triggered.connect(qtLambda(SHARED.openWebsite, nwConst.URL_REPORT))
|
984
1045
|
|
985
1046
|
# Document > Ask a Question
|
986
1047
|
self.aQuestion = self.helpMenu.addAction(self.tr("Ask a Question (GitHub)"))
|
987
|
-
self.aQuestion.triggered.connect(
|
1048
|
+
self.aQuestion.triggered.connect(qtLambda(SHARED.openWebsite, nwConst.URL_HELP))
|
988
1049
|
|
989
1050
|
# Document > Main Website
|
990
1051
|
self.aWebsite = self.helpMenu.addAction(self.tr("The novelWriter Website"))
|
991
|
-
self.aWebsite.triggered.connect(
|
1052
|
+
self.aWebsite.triggered.connect(qtLambda(SHARED.openWebsite, nwConst.URL_WEB))
|
992
1053
|
|
993
1054
|
return
|