diff --git a/docs/source/project_overview.rst b/docs/source/project_overview.rst index 95562407..3dfa3737 100644 --- a/docs/source/project_overview.rst +++ b/docs/source/project_overview.rst @@ -104,11 +104,11 @@ supported. A document or a folder can be deleted from the :guilabel:`Project` me .. _a_proj_roots_out: -Archived Documents (Outtakes) ------------------------------ +Archived Documents +------------------ If you don't want to delete a document, or put it in the :guilabel:`Trash` folder where it may be -deleted, but still want it out of your main project tree, you can create an :guilabel:`Outtakes` +deleted, but still want it out of your main project tree, you can create an :guilabel:`Archive` root folder from the :guilabel:`Project` menu. You are not allowed to move entire folders to this root folder, only documents. If you need folders in it to organise your documents, you can of course create new ones there. diff --git a/docs/source/project_structure.rst b/docs/source/project_structure.rst index 9e1f30e9..78e04b63 100644 --- a/docs/source/project_structure.rst +++ b/docs/source/project_structure.rst @@ -182,7 +182,7 @@ available to change how the documents where formatted on export. These have now just two layouts: :guilabel:`Novel Document` and :guilabel:`Project Note`. Novel documents can only live in the :guilabel:`Novel` root folder. You can also move them to -:guilabel:`Outtakes` and :guilabel:`Trash` of course. Project notes can be added anywhere in the +:guilabel:`Archive` and :guilabel:`Trash` of course. Project notes can be added anywhere in the project. Depending on which icon theme you're using, the project tree can distinguish between the different diff --git a/docs/source/usage_interface.rst b/docs/source/usage_interface.rst index 38dd1628..560d5077 100644 --- a/docs/source/usage_interface.rst +++ b/docs/source/usage_interface.rst @@ -78,7 +78,7 @@ major or minor character. Whether a document uses a "Status" or "Importance" flag depends on which root folder it lives in. If it's in the :guilabel:`Novel` folder, it uses the "Status" flag, otherwise it uses an -"Importance" flag. Some folders, like :guilabel:`Trash` and :guilabel:`Outtakes` allow both. +"Importance" flag. Some folders, like :guilabel:`Trash` and :guilabel:`Archive` allow both. .. _a_ui_tree_dnd: @@ -96,7 +96,7 @@ the last move action can be undone by pressing :kbd:`Ctrl`:kbd:`Shift`:kbd:`Z`. Documents and their folders can be rearranged freely within their root folders. Novel documents cannot be moved out of the :guilabel:`Novel` folder, except to :guilabel:`Trash` and the -:guilabel:`Outtakes` folders. Notes can be moved freely between all root folders, but keep in mind +:guilabel:`Archive` folders. Notes can be moved freely between all root folders, but keep in mind that if you move a note into a :guilabel:`Novel`, its "Importance" setting will be reset to the default "Status" setting. See :ref:`a_ui_tree_status`. diff --git a/i18n/nw_base.ts b/i18n/nw_base.ts index ee868921..9981c8b4 100644 --- a/i18n/nw_base.ts +++ b/i18n/nw_base.ts @@ -77,45 +77,46 @@ Constant - - + + + None + Novel - + + Plot - - Characters + Character - - Locations + Location - + + Timeline - - Objects + Object @@ -124,216 +125,238 @@ - + + Custom + - Outtakes + Archive + Trash - - - - Novel Document - - - - - - Project Note - - - - - Root Folder - - - - - Folder - - - - - Novel Title Page - - - - - Novel Chapter - - - - - Novel Scene - - - - - Tag - - - - - Point of View - - - - - - Focus - - - - - Entities - - - - - Title - - - - - Level - - - - - Document - - - - - Line - - - Chars - - - - - Words - - - - - Pars + + Characters - POV + + Locations + + + + + + Objects + + + + + + Entities + + + + + + Novel Document + + + + + + Project Note + + + + + Root Folder + + + + + Folder + + + + + Novel Title Page + + + + + Novel Chapter + + + + + Novel Scene + + + + + Tag + + + + + Point of View + + + + + + Focus + + + + + Title + + + + + Level + + + + + Document + Line + + + + + Chars + + + + + Words + + + + + Pars + + + + + POV + + + + Synopsis - + Straight single quotation mark - + Straight double quotation mark - + Left single quotation mark - + Right single quotation mark - + Single low-9 quotation mark - + Single high-reversed-9 quotation mark - + Left double quotation mark - + Right double quotation mark - + Double low-9 quotation mark - + Double high-reversed-9 quotation mark - + Double low-reversed-9 quotation mark - + Single left-pointing angle quotation mark - + Single right-pointing angle quotation mark - + Double left-pointing angle quotation mark - + Double right-pointing angle quotation mark - + Left corner bracket - + Right corner bracket - + Left white corner bracket - + Right white corner bracket @@ -602,187 +625,172 @@ - - Include files with layouts other than 'Note'. - - - - - Include files with layout 'Note'. - - - - - Ignore the 'Include when building project' setting and include all files in the output. - - - - + Include novel files - + Include note files - + Ignore export flag - + Export Options - + Replace tabs with spaces - + Replace Unicode in HTML - + Build Preview - + Print - + Print Preview - + Print to PDF - + Save As - + Open Document (.odt) - + Flat Open Document (.fodt) - + novelWriter HTML (.htm) - + novelWriter Markdown (.nwd) - + Standard Markdown (.md) - + GitHub Markdown (.md) - + JSON + novelWriter HTML (.json) - + JSON + novelWriter Markdown (.json) - + Close - + Failed to generate preview. The result is too big. - + There were problems when building the project: - + Open Document - + Flat Open Document - + Plain HTML - + novelWriter Markdown - + Standard Markdown - + GitHub Markdown - + JSON + novelWriter HTML - + JSON + novelWriter Markdown - + PDF - + Save Document As - + {0} file successfully written to: - + Failed to write {0} file. {1} @@ -790,17 +798,17 @@ GuiBuildNovelDocView - + This area will show the content of the document to be exported or printed. Press the "Build Preview" button to generate content. - + Unknown - + Build Time: @@ -808,32 +816,32 @@ GuiDocEditFooter - + Status - + Line: {0} ({1}) - + Words: {0} ({1}) - + Document size is {0} bytes - + Words: {0} selected - + Character count: {0} @@ -841,22 +849,22 @@ GuiDocEditHeader - + Edit document meta - + Search document - + Toggle Focus Mode - + Close the document @@ -880,82 +888,42 @@ - - Match case - - - - + Whole Words Only - - Match whole words - - - - + RegEx Mode - - Search using regular expressions - - - - + Loop Search - - Loop the search when reaching the end - - - - + Search Next File - - Continue searching in the next file - - - - + Preserve Case - - Preserve case on replace - - - - + Close Search - - Close the search box [{0}] - - - - - Show/hide the replace text box - - - - + Find in current document - + Find and replace in current document @@ -1424,7 +1392,7 @@ - Cannot create new project when another project is open. + Cannot create a new project when another project is open. @@ -1603,1203 +1571,670 @@ - - Create new project - - - - + Open Project - - Open project - - - - + Save Project - - Save project - - - - + Close Project - - Close project - - - - + Project Settings - - Project settings - - - - + Project Details - - Project details - - - - + Create Root Folder - + Novel Root - + Plot Root - + Character Root - + Location Root - + Timeline Root - + Object Root - + Entity Root - + Custom Root - - Outtakes Root + + Archive Root - + Create Folder - - Create folder - - - - + Edit Item - - Change project item settings - - - - + Delete Item - - Delete selected project item - - - - + Move Item Up - - Move project item up - - - - + Move Item Down - - Move project item down - - - - + Undo Last Move - - Undo last item move - - - - + Empty Trash - - Permanently delete all files in the Trash folder - - - - + Exit - - Exit novelWriter - - - - + &Document - + New Document - - Create new document - - - - + Open Document - - Open selected document - - - - + Save Document - - Save current document - - - - + Close Document - - Close current document - - - - + View Document - - View document as HTML - - - - + Close Document View - - Close document view pane - - - - + Show File Details - - Shows a message box with the document location in the project folder + + Import Text from File - - Import from File - - - - - Import document from a text or markdown file - - - - + Merge Folder to Document - - Merge a folder of documents to a single document - - - - + Split Document to Folder - - Split a document into a folder of multiple documents - - - - + &Edit - + Undo - - Undo last change - - - - + Redo - - Redo last change - - - - + Cut - - Cut selected text - - - - + Copy - - Copy selected text - - - - + Paste - - Paste text from clipboard - - - - + Select All - - Select all text in document - - - - + Select Paragraph - - Select all text in paragraph - - - - + &View - - Focus Project Tree + + Go to Project Tree - - Move focus to project tree + + Go to Document Editor + + + + + Go to Document Viewer + + + + + Go to Outline + + + + + Navigate Backward - Focus Document Editor + Navigate Forward - - Move focus to left document pane - - - - - Focus Document Viewer - - - - - Move focus to right document pane - - - - - Focus Outline - - - - - Move focus to outline - - - - - Go Backward - - - - - Move backward in the view history of the right pane - - - - - Go Forward - - - - - Move forward in the view history of the right pane - - - - + Focus Mode - - Toggles a distraction free mode, only showing text editor - - - - + Full Screen Mode - - Maximises the main window - - - - + &Insert - + Dashes - + Short Dash - - Insert short dash (en dash) - - - - + Long Dash - - Insert long dash (em dash) - - - - + Horizontal Bar - - Insert a horizontal bar (quotation dash) - - - - + Figure Dash - - Insert figure dash (same width as a number character) - - - - + Quote Marks - + Left Single Quote - - Insert left single quote - - - - + Right Single Quote - - Insert right single quote - - - - + Left Double Quote - - Insert left double quote - - - - + Right Double Quote - - Insert right double quote - - - - + Alternative Apostrophe - - Insert modifier letter single apostrophe - - - - + General Punctuation - + Ellipsis - - Insert ellipsis - - - - + Prime - - Insert a prime symbol - - - - + Double Prime - - Insert a double prime symbol - - - - + White Spaces - + Non-Breaking Space - - Insert a non-breaking space - - - - + Thin Space - - Insert a thin space - - - - + Thin Non-Breaking Space - - Insert a thin non-breaking space - - - - + Other Symbols - + List Bullet - - Insert a list bullet - - - - + Hyphen Bullet - - Insert a hyphen bullet (alternative bullet) - - - - + Flower Mark - - Insert a flower mark (alternative bullet) - - - - + Per Mille - - Insert a per mille symbol - - - - + Degree Symbol - - Insert a degree symbol - - - - + Minus Sign - - Insert a minus sign (not a hypen or dash) - - - - + Times Sign - - Insert a times sign (multiplication cross) - - - - + Division Sign - - Insert a division sign - - - - + Tags and References - + Page Break and Space - + Page Break - - Insert a page break command - - - - + Vertical Space (Single) - - Insert a vertical space equal to one paragraph - - - - + Vertical Space (Multi) - - Insert a vertical space equal to n paragraphs - - - - + &Format - + Emphasis - - Add emphasis to selected text (italic) - - - - + Strong Emphasis - - Add strong emphasis to selected text (bold) - - - - + Strikethrough - - Add strikethrough to selected text - - - - + Wrap Double Quotes - - Wrap selected text in double quotes - - - - + Wrap Single Quotes - - Wrap selected text in single quotes - - - - + Header 1 (Partition) - - Set the text block format to Header 1 (Partition) - - - - + Header 2 (Chapter) - - Set the text block format to Header 2 (Chapter) - - - - + Header 3 (Scene) - - Set the text block format to Header 3 (Scene) - - - - + Header 4 (Section) - - Set the text block format to Header 4 (Section) - - - - + Novel Title - - Set the text block format to Novel Title - - - - + Unnumbered Chapter - - Set the text block format to Unnumbered Chapter - - - - + Align Left - - Left-align the text block - - - - + Align Centre - - Centre the text block - - - - + Align Right - - Right-align the text block - - - - + Indent Left - - Increase the text block's left margin - - - - + Indent Right - - Increase the text block's right margin + + Toggle Comment - - Comment - - - - - Change the text block format to comment - - - - + Remove Block Format - - Strip text block format + + Convert Single Quotes - - Replace Single Quotes + + Convert Double Quotes - - Replace all straight single quotes in the selected text - - - - - Replace Double Quotes - - - - - Replace all straight double quotes in the selected text - - - - + Remove In-Paragraph Breaks - - Remove all line breaks within paragraphs in the selected text - - - - + &Search - + Find - - Find text in document - - - - + Replace - - Replace text in document - - - - + Find Next - - Find next occurrence of text in document - - - - + Find Previous - - Find previous occurrence of text in document - - - - + Replace Next - - Find and replace next occurrence of text in document - - - - + &Tools - + Check Spelling - - Toggle check spelling - - - - + Re-Run Spell Check - - Run the spell checker on current document - - - - + Project Word List - - Edit the project's word list - - - - + Rebuild Index - - Rebuild the tag indices and word counts - - - - + Rebuild Outline - - Rebuild the novel outline tree - - - - + Auto-Update Outline - - Update project outline when a novel file is changed - - - - - Backup Project Folder - - - - + Backup Project - + Build Novel Project - - Launch the Build novel project tool - - - - + Writing Statistics - - Show the writing statistics dialogue - - - - - + Preferences - + &Help - - + About novelWriter - - + About Qt5 - + User Manual (Online) - - Open documentation in browser - - - - + User Manual (PDF) - - Open PDF documentation - - - - + Report an Issue (GitHub) - - Report a bug or issue on GitHub at {0} - - - - + Ask a Question (GitHub) - - Ask a question on GitHub at {0} - - - - + The novelWriter Website - - Open the novelWriter website at {0} - - - - + Check for New Release - - - Check for latest release of novelWriter - - GuiMainStatus @@ -2998,107 +2433,103 @@ GuiPreferencesAutomation - + Automatic Features - + Auto-select word under cursor - + Apply formatting to word under cursor if no selection is made. - + Auto-replace text as you type - + Allow the editor to replace symbols as you type. - + Replace as You Type - + Auto-replace single quotes - - Try to guess which is an opening or a closing single quote. + + + Try to guess which is an opening or a closing quote. - + Auto-replace double quotes - - Try to guess which is an opening or a closing double quote. - - - - + Auto-replace dashes - + Double and triple hyphens become short and long dashes. - + Auto-replace dots - + Three consecutive dots become ellipsis. - + Automatic Padding - + Insert non-breaking space before - + Automatically add space before any of these symbols. - + Insert non-breaking space after - + Automatically add space after any of these symbols. - + Use thin space instead - + Inserts a thin space instead of a regular space. @@ -3116,8 +2547,11 @@ + + + - Font for the document editor and viewer. + Applies to both document editor and viewer. @@ -3125,11 +2559,6 @@ Font size - - - Font size for the document editor and viewer. - - pt @@ -3175,27 +2604,17 @@ - Hide the information bar at the bottom of the document. + Hide the information bar in the document editor. - Justify the text margins in editor and viewer - - - - - Lay out text with straight edges in the editor and viewer. + Justify the text margins - Text margin - - - - - The minimum margin around the text in the editor and viewer. + Minimum text margin @@ -3228,7 +2647,7 @@ - Spell check language ({0}) + Spell check language @@ -3263,86 +2682,66 @@ - How often the word count is updated. - - - - seconds - - Include project notes in total word count + + Include project notes in status bar word count - - Affects the word count shown on the status bar. - - - - + Writing Guides - + Show tabs and spaces - - Add symbols to indicate tabs and spaces in the editor. - - - - + Show line endings - - Add a symbol to indicate line endings in the editor. - - - - + Scroll Behaviour - + Scroll past end of the document - + Set to 0 to disable this feature. - + lines - + Typewriter style scrolling when you type - - Try to keep the cursor at a fixed vertical position. + + Keeps the cursor at a fixed vertical position. - + Minimum position for Typewriter scrolling - + Percentage of the editor height from the top. @@ -3365,7 +2764,7 @@ - Changing this requires restarting novelWriter. + Requires restart. @@ -3405,7 +2804,7 @@ - The novel document labels will be bold and underlined. + Makes them stand out in the project tree. @@ -3449,7 +2848,7 @@ - How often the open document is automatically saved. + How often the document is automatically saved. @@ -3465,7 +2864,7 @@ - How often the open project is automatically saved. + How often the project is automatically saved. @@ -3548,47 +2947,47 @@ GuiPreferencesQuotes - + Quotation Style - + Single quote open style - + The symbol to use for a leading single quote. - + Single quote close style - + The symbol to use for a trailing single quote. - + Double quote open style - + The symbol to use for a leading double quote. - + Double quote close style - + The symbol to use for a trailing double quote. @@ -3596,83 +2995,75 @@ GuiPreferencesSyntax - + Highlighting Theme - + Highlighting theme - - Colour theme to apply to the editor and viewer. + + Colour theme for the editor and viewer. - + Quotes & Dialogue - + Highlight text wrapped in quotes - - Applies to single, double and straight quotes. + + + + Applies to the document editor only. - + Allow open-ended single quotes - + Highlight single-quoted line with no closing quote. - + Allow open-ended double quotes - + Highlight double-quoted line with no closing quote. - + Text Emphasis - + Add highlight colour to emphasised text - - Applies to emphasis (italic) and strong (bold). - - - - + Text Errors - - Mark redundant spaces - - - - - Trailing spaces or multiple spaces between words. + + Highlight multiple spaces @@ -3693,11 +3084,6 @@ Contents - - - Close - - GuiProjectDetailsContents @@ -3877,45 +3263,30 @@ GuiProjectEditReplace - + Text Replace List for Preview and Export - + Keyword - + Replace With - - Add new entry - - - - - Delete selected entry - - - - + Select item to edit - + Save - - - Save entry - - GuiProjectEditStatus @@ -3940,57 +3311,47 @@ - - Add new entry - - - - - Delete selected entry - - - - + Select item to edit - + Colour - + Save - + Select Colour - + New Item - + Cannot delete a status item that is in use. - + Not in use - + Used once - + Used by {0} items @@ -4130,90 +3491,90 @@ - - + + Did not find anywhere to add the file or folder! - + Cannot add new files or folders to the Trash folder. - + New File - + Cannot add new folder to this item. Maximum folder depth has been reached. - + New Folder - + There is currently no Trash folder in this project. - + The Trash folder is already empty. - + Empty Trash - + Permanently delete {0} file(s) from Trash? - - + + Delete File - + Permanently delete file '{0}'? - + Could not delete document file. - + Move file '{0}' to Trash? - + Cannot delete folder. It is not empty. Recursive deletion is not supported. Please delete the content first. - + Cannot delete root folder. It is not empty. Recursive deletion is not supported. Please delete the content first. - - + + The item cannot be moved to that location. - + There is nowhere to add item with name '{0}'. @@ -4221,52 +3582,52 @@ GuiProjectTreeMenu - + Edit Project Item - + Open Document - + View Document - + Toggle Included Flag - + New File - + New Folder - + Delete Item - + Empty Trash - + Move Item Up - + Move Item Down @@ -4314,22 +3675,12 @@ - - Add new entry - - - - - Delete selected entry - - - - + Cannot add a blank word. - + The word '{0}' is already in the word list. @@ -4494,11 +3845,6 @@ Duplicate root item detected. - - - Trash - - @@ -4639,180 +3985,170 @@ - - The format of your project will now be updated. You may also have to make a few minor changes to your title page and unnumbered chapters. Please check the 'Project Format Changes > File Format 1.3' section of the documentation for more information. It is available from the Help menu. - - - - + Version Conflict - + This project was saved by a newer version of novelWriter, version {0}. This is version {1}. If you continue to open the project, some attributes and settings may not be preserved, but the overall project should be fine. Continue opening the project? - + Opened Project: {0} - + Project path not set, cannot save project. - - + + Failed to save project. - + Saved Project: {0} - + Backing up project ... - - Cannot backup project because no backup path is set. Please set a valid backup location in Preferences. + + Cannot backup project because no valid backup path is set. Please set a valid backup location in Preferences. - + Cannot backup project because no project name is set. Please set a Working Title in Project Settings. - - Cannot backup project because the backup path does not exist. Please set a valid backup location in Preferences. - - - - + Could not create backup folder. - + Cannot backup project because the backup path is within the project folder to be backed up. Please choose a different backup path in Preferences. - + Backup from {0} - + Backup archive file written to: {0} - + Could not write backup archive. - + Project backed up to '{0}' - - + + Failed to create a new example project. - + Failed to create a new example project. Could not find the necessary files. They seem to be missing from this installation. - + Could not create new project folder. - + New project folder is not empty. Each project requires a dedicated project folder. - + You must set a valid backup path in Preferences to use the automatic project backup feature. - + You must set a valid project name in Project Settings to use the automatic project backup feature. - + and - + Could not create folder. - + Found {0} orphaned file(s) in project folder. - + Recovered - + [{0}] {1} - + Recovered File {0} - + One or more orphaned files could not be added back into the project. Make sure at least a Novel root folder exists. - + Not a folder: {0} - + Could not move: {0} - - + + Could not delete: {0} - + Could not make folder: {0} - + Could not move item {0} to {1}. diff --git a/novelwriter/constants.py b/novelwriter/constants.py index 8a2fb48a..50cfc5e4 100644 --- a/novelwriter/constants.py +++ b/novelwriter/constants.py @@ -129,6 +129,19 @@ class nwKeyWords: class nwLabels(): CLASS_NAME = { + nwItemClass.NO_CLASS: QT_TRANSLATE_NOOP("Constant", "None"), + nwItemClass.NOVEL: QT_TRANSLATE_NOOP("Constant", "Novel"), + nwItemClass.PLOT: QT_TRANSLATE_NOOP("Constant", "Plot"), + nwItemClass.CHARACTER: QT_TRANSLATE_NOOP("Constant", "Character"), + nwItemClass.WORLD: QT_TRANSLATE_NOOP("Constant", "Location"), + nwItemClass.TIMELINE: QT_TRANSLATE_NOOP("Constant", "Timeline"), + nwItemClass.OBJECT: QT_TRANSLATE_NOOP("Constant", "Object"), + nwItemClass.ENTITY: QT_TRANSLATE_NOOP("Constant", "Entity"), + nwItemClass.CUSTOM: QT_TRANSLATE_NOOP("Constant", "Custom"), + nwItemClass.ARCHIVE: QT_TRANSLATE_NOOP("Constant", "Archive"), + nwItemClass.TRASH: QT_TRANSLATE_NOOP("Constant", "Trash"), + } + CLASS_NAME_LBL = { nwItemClass.NO_CLASS: QT_TRANSLATE_NOOP("Constant", "None"), nwItemClass.NOVEL: QT_TRANSLATE_NOOP("Constant", "Novel"), nwItemClass.PLOT: QT_TRANSLATE_NOOP("Constant", "Plot"), @@ -136,9 +149,9 @@ class nwLabels(): nwItemClass.WORLD: QT_TRANSLATE_NOOP("Constant", "Locations"), nwItemClass.TIMELINE: QT_TRANSLATE_NOOP("Constant", "Timeline"), nwItemClass.OBJECT: QT_TRANSLATE_NOOP("Constant", "Objects"), - nwItemClass.ENTITY: QT_TRANSLATE_NOOP("Constant", "Entity"), + nwItemClass.ENTITY: QT_TRANSLATE_NOOP("Constant", "Entities"), nwItemClass.CUSTOM: QT_TRANSLATE_NOOP("Constant", "Custom"), - nwItemClass.ARCHIVE: QT_TRANSLATE_NOOP("Constant", "Outtakes"), + nwItemClass.ARCHIVE: QT_TRANSLATE_NOOP("Constant", "Archive"), nwItemClass.TRASH: QT_TRANSLATE_NOOP("Constant", "Trash"), } CLASS_ICON = { diff --git a/novelwriter/core/project.py b/novelwriter/core/project.py index 6dc5bc79..152cba18 100644 --- a/novelwriter/core/project.py +++ b/novelwriter/core/project.py @@ -168,7 +168,7 @@ class NWProject(): trashHandle = self.projTree.trashRoot() if trashHandle is None: newItem = NWItem(self) - newItem.setName(self.tr("Trash")) + newItem.setName(trConst(nwLabels.CLASS_NAME[nwItemClass.TRASH])) newItem.setType(nwItemType.TRASH) newItem.setClass(nwItemClass.TRASH) self.projTree.append(None, None, newItem) @@ -307,7 +307,7 @@ class NWProject(): nHandle = self.newRoot(self.tr("Novel"), nwItemClass.NOVEL) for newRoot in projData.get("addRoots", []): if newRoot in nwItemClass: - self.newRoot(trConst(nwLabels.CLASS_NAME[newRoot]), newRoot) + self.newRoot(trConst(nwLabels.CLASS_NAME_LBL[newRoot]), newRoot) # Create a title page tHandle = self.newFile(self.tr("Title Page"), nwItemClass.NOVEL, nHandle) @@ -500,16 +500,6 @@ class NWProject(): self.clearProject() return False - if fileVersion in ("1.0", "1.1", "1.2"): - self.theParent.makeAlert(self.tr( - "The format of your project will now be updated. You may " - "also have to make a few minor changes to your title page " - "and unnumbered chapters. Please check the 'Project " - "Format Changes > File Format 1.3' section of the " - "documentation for more information. It is available from " - "the Help menu." - ), nwAlert.INFO) - # Check novelWriter Version # ========================= @@ -794,27 +784,20 @@ class NWProject(): logger.info("Backing up project") self.theParent.setStatus(self.tr("Backing up project ...")) - if self.mainConf.backupPath is None or self.mainConf.backupPath == "": + if not (self.mainConf.backupPath and os.path.isdir(self.mainConf.backupPath)): self.theParent.makeAlert(self.tr( - "Cannot backup project because no backup path is set. " + "Cannot backup project because no valid backup path is set. " "Please set a valid backup location in Preferences." ), nwAlert.ERROR) return False - if self.projName is None or self.projName == "": + if not self.projName: self.theParent.makeAlert(self.tr( "Cannot backup project because no project name is set. " "Please set a Working Title in Project Settings." ), nwAlert.ERROR) return False - if not os.path.isdir(self.mainConf.backupPath): - self.theParent.makeAlert(self.tr( - "Cannot backup project because the backup path does not exist. " - "Please set a valid backup location in Preferences." - ), nwAlert.ERROR) - return False - cleanName = makeFileNameSafe(self.projName) baseDir = os.path.abspath(os.path.join(self.mainConf.backupPath, cleanName)) if not os.path.isdir(baseDir): diff --git a/novelwriter/dialogs/preferences.py b/novelwriter/dialogs/preferences.py index 763b0b53..81bef52a 100644 --- a/novelwriter/dialogs/preferences.py +++ b/novelwriter/dialogs/preferences.py @@ -168,7 +168,7 @@ class GuiPreferencesGeneral(QWidget): self.mainForm.addRow( self.tr("Main GUI language"), self.guiLang, - self.tr("Changing this requires restarting novelWriter.") + self.tr("Requires restart.") ) # Select Theme @@ -184,7 +184,7 @@ class GuiPreferencesGeneral(QWidget): self.mainForm.addRow( self.tr("Main GUI theme"), self.guiTheme, - self.tr("Changing this requires restarting novelWriter.") + self.tr("Requires restart.") ) # Select Icon Theme @@ -200,7 +200,7 @@ class GuiPreferencesGeneral(QWidget): self.mainForm.addRow( self.tr("Main icon theme"), self.guiIcons, - self.tr("Changing this requires restarting novelWriter.") + self.tr("Requires restart.") ) # Font Family @@ -214,7 +214,7 @@ class GuiPreferencesGeneral(QWidget): self.mainForm.addRow( self.tr("Font family"), self.guiFont, - self.tr("Changing this requires restarting novelWriter."), + self.tr("Requires restart."), theButton=self.fontButton ) @@ -227,7 +227,7 @@ class GuiPreferencesGeneral(QWidget): self.mainForm.addRow( self.tr("Font size"), self.guiFontSize, - self.tr("Changing this requires restarting novelWriter."), + self.tr("Requires restart."), theUnit=self.tr("pt") ) @@ -240,7 +240,7 @@ class GuiPreferencesGeneral(QWidget): self.mainForm.addRow( self.tr("Emphasise partition and chapter labels"), self.emphLabels, - self.tr("The novel document labels will be bold and underlined."), + self.tr("Makes them stand out in the project tree."), ) self.showFullPath = QSwitch() @@ -351,7 +351,7 @@ class GuiPreferencesProjects(QWidget): self.mainForm.addRow( self.tr("Save document interval"), self.autoSaveDoc, - self.tr("How often the open document is automatically saved."), + self.tr("How often the document is automatically saved."), theUnit=self.tr("seconds") ) @@ -364,7 +364,7 @@ class GuiPreferencesProjects(QWidget): self.mainForm.addRow( self.tr("Save project interval"), self.autoSaveProj, - self.tr("How often the open project is automatically saved."), + self.tr("How often the project is automatically saved."), theUnit=self.tr("seconds") ) @@ -514,7 +514,7 @@ class GuiPreferencesDocuments(QWidget): self.mainForm.addRow( self.tr("Font family"), self.textFont, - self.tr("Font for the document editor and viewer."), + self.tr("Applies to both document editor and viewer."), theButton=self.fontButton ) @@ -527,7 +527,7 @@ class GuiPreferencesDocuments(QWidget): self.mainForm.addRow( self.tr("Font size"), self.textSize, - self.tr("Font size for the document editor and viewer."), + self.tr("Applies to both document editor and viewer."), theUnit=self.tr("pt") ) @@ -567,16 +567,16 @@ class GuiPreferencesDocuments(QWidget): self.mainForm.addRow( self.tr("Hide document footer in \"Focus Mode\""), self.hideFocusFooter, - self.tr("Hide the information bar at the bottom of the document.") + self.tr("Hide the information bar in the document editor.") ) # Justify Text self.doJustify = QSwitch() self.doJustify.setChecked(self.mainConf.doJustify) self.mainForm.addRow( - self.tr("Justify the text margins in editor and viewer"), + self.tr("Justify the text margins"), self.doJustify, - self.tr("Lay out text with straight edges in the editor and viewer.") + self.tr("Applies to both document editor and viewer."), ) # Document Margins @@ -586,9 +586,9 @@ class GuiPreferencesDocuments(QWidget): self.textMargin.setSingleStep(1) self.textMargin.setValue(self.mainConf.textMargin) self.mainForm.addRow( - self.tr("Text margin"), + self.tr("Minimum text margin"), self.textMargin, - self.tr("The minimum margin around the text in the editor and viewer."), + self.tr("Applies to both document editor and viewer."), theUnit=self.tr("px") ) @@ -689,7 +689,7 @@ class GuiPreferencesEditor(QWidget): self.spellLanguage.setCurrentIndex(spellIdx) self.mainForm.addRow( - self.tr("Spell check language ({0})").format("PyEnchant"), + self.tr("Spell check language"), self.spellLanguage, self.tr("Available languages are determined by your system.") ) @@ -721,7 +721,6 @@ class GuiPreferencesEditor(QWidget): self.mainForm.addRow( self.tr("Word count interval"), self.wordCountTimer, - self.tr("How often the word count is updated."), theUnit=self.tr("seconds") ) @@ -729,9 +728,8 @@ class GuiPreferencesEditor(QWidget): self.incNotesWCount = QSwitch() self.incNotesWCount.setChecked(self.mainConf.incNotesWCount) self.mainForm.addRow( - self.tr("Include project notes in total word count"), - self.incNotesWCount, - self.tr("Affects the word count shown on the status bar.") + self.tr("Include project notes in status bar word count"), + self.incNotesWCount ) # Writing Guides @@ -743,8 +741,7 @@ class GuiPreferencesEditor(QWidget): self.showTabsNSpaces.setChecked(self.mainConf.showTabsNSpaces) self.mainForm.addRow( self.tr("Show tabs and spaces"), - self.showTabsNSpaces, - self.tr("Add symbols to indicate tabs and spaces in the editor.") + self.showTabsNSpaces ) # Show Line Endings @@ -752,8 +749,7 @@ class GuiPreferencesEditor(QWidget): self.showLineEndings.setChecked(self.mainConf.showLineEndings) self.mainForm.addRow( self.tr("Show line endings"), - self.showLineEndings, - self.tr("Add a symbol to indicate line endings in the editor.") + self.showLineEndings ) # Scroll Behaviour @@ -779,7 +775,7 @@ class GuiPreferencesEditor(QWidget): self.mainForm.addRow( self.tr("Typewriter style scrolling when you type"), self.autoScroll, - self.tr("Try to keep the cursor at a fixed vertical position.") + self.tr("Keeps the cursor at a fixed vertical position.") ) # Typewriter Position @@ -854,7 +850,7 @@ class GuiPreferencesSyntax(QWidget): self.mainForm.addRow( self.tr("Highlighting theme"), self.guiSyntax, - self.tr("Colour theme to apply to the editor and viewer.") + self.tr("Colour theme for the editor and viewer.") ) # Quotes & Dialogue @@ -867,7 +863,7 @@ class GuiPreferencesSyntax(QWidget): self.mainForm.addRow( self.tr("Highlight text wrapped in quotes"), self.highlightQuotes, - self.tr("Applies to single, double and straight quotes.") + self.tr("Applies to the document editor only.") ) self.allowOpenSQuote = QSwitch() @@ -895,7 +891,7 @@ class GuiPreferencesSyntax(QWidget): self.mainForm.addRow( self.tr("Add highlight colour to emphasised text"), self.highlightEmph, - self.tr("Applies to emphasis (italic) and strong (bold).") + self.tr("Applies to the document editor only.") ) # Text Errors @@ -906,9 +902,9 @@ class GuiPreferencesSyntax(QWidget): self.showMultiSpaces = QSwitch() self.showMultiSpaces.setChecked(self.mainConf.showMultiSpaces) self.mainForm.addRow( - self.tr("Mark redundant spaces"), + self.tr("Highlight multiple spaces"), self.showMultiSpaces, - self.tr("Trailing spaces or multiple spaces between words.") + self.tr("Applies to the document editor only.") ) return @@ -997,7 +993,7 @@ class GuiPreferencesAutomation(QWidget): self.mainForm.addRow( self.tr("Auto-replace single quotes"), self.doReplaceSQuote, - self.tr("Try to guess which is an opening or a closing single quote.") + self.tr("Try to guess which is an opening or a closing quote.") ) # Auto-Replace Double Quotes @@ -1007,7 +1003,7 @@ class GuiPreferencesAutomation(QWidget): self.mainForm.addRow( self.tr("Auto-replace double quotes"), self.doReplaceDQuote, - self.tr("Try to guess which is an opening or a closing double quote.") + self.tr("Try to guess which is an opening or a closing quote.") ) # Auto-Replace Hyphens diff --git a/novelwriter/dialogs/projdetails.py b/novelwriter/dialogs/projdetails.py index b51e268d..54b6c995 100644 --- a/novelwriter/dialogs/projdetails.py +++ b/novelwriter/dialogs/projdetails.py @@ -73,7 +73,7 @@ class GuiProjectDetails(PagedDialog): self.addTab(self.tabContents, self.tr("Contents")) self.buttonBox = QDialogButtonBox(QDialogButtonBox.Close) - self.buttonBox.button(QDialogButtonBox.Close).setText(self.tr("Close")) + self.buttonBox.button(QDialogButtonBox.Close) self.buttonBox.rejected.connect(self._doClose) self.addControls(self.buttonBox) diff --git a/novelwriter/dialogs/projsettings.py b/novelwriter/dialogs/projsettings.py index d653f952..3989f7eb 100644 --- a/novelwriter/dialogs/projsettings.py +++ b/novelwriter/dialogs/projsettings.py @@ -292,11 +292,9 @@ class GuiProjectEditStatus(QWidget): # ============= self.addButton = QPushButton(self.theTheme.getIcon("add"), "") - self.addButton.setToolTip(self.tr("Add new entry")) self.addButton.clicked.connect(self._newItem) self.delButton = QPushButton(self.theTheme.getIcon("remove"), "") - self.delButton.setToolTip(self.tr("Delete selected entry")) self.delButton.clicked.connect(self._delItem) # Edit Form @@ -531,11 +529,9 @@ class GuiProjectEditReplace(QWidget): # ============= self.addButton = QPushButton(self.theTheme.getIcon("add"), "") - self.addButton.setToolTip(self.tr("Add new entry")) self.addButton.clicked.connect(self._addEntry) self.delButton = QPushButton(self.theTheme.getIcon("remove"), "") - self.delButton.setToolTip(self.tr("Delete selected entry")) self.delButton.clicked.connect(self._delEntry) # Edit Form @@ -551,7 +547,6 @@ class GuiProjectEditReplace(QWidget): self.editValue.setMaxLength(80) self.saveButton = QPushButton(self.tr("Save")) - self.saveButton.setToolTip(self.tr("Save entry")) self.saveButton.clicked.connect(self._saveEntry) # Assemble diff --git a/novelwriter/dialogs/wordlist.py b/novelwriter/dialogs/wordlist.py index 379b2c80..7dadf258 100644 --- a/novelwriter/dialogs/wordlist.py +++ b/novelwriter/dialogs/wordlist.py @@ -79,11 +79,9 @@ class GuiWordList(QDialog): self.newEntry = QLineEdit() self.addButton = QPushButton(self.theTheme.getIcon("add"), "") - self.addButton.setToolTip(self.tr("Add new entry")) self.addButton.clicked.connect(self._doAdd) self.delButton = QPushButton(self.theTheme.getIcon("remove"), "") - self.delButton.setToolTip(self.tr("Delete selected entry")) self.delButton.clicked.connect(self._doDelete) self.editBox = QHBoxLayout() diff --git a/novelwriter/gui/doceditor.py b/novelwriter/gui/doceditor.py index b2f964f1..abc97a8b 100644 --- a/novelwriter/gui/doceditor.py +++ b/novelwriter/gui/doceditor.py @@ -2215,7 +2215,6 @@ class GuiDocEditSearch(QFrame): self.resultLabel.setMinimumWidth(self.theTheme.getTextWidth("?/?", self.boxFont)) self.toggleCase = QAction(self.tr("Case Sensitive"), self) - self.toggleCase.setToolTip(self.tr("Match case")) self.toggleCase.setIcon(self.theTheme.getIcon("search_case")) self.toggleCase.setCheckable(True) self.toggleCase.setChecked(self.isCaseSense) @@ -2223,7 +2222,6 @@ class GuiDocEditSearch(QFrame): self.searchOpt.addAction(self.toggleCase) self.toggleWord = QAction(self.tr("Whole Words Only"), self) - self.toggleWord.setToolTip(self.tr("Match whole words")) self.toggleWord.setIcon(self.theTheme.getIcon("search_word")) self.toggleWord.setCheckable(True) self.toggleWord.setChecked(self.isWholeWord) @@ -2231,7 +2229,6 @@ class GuiDocEditSearch(QFrame): self.searchOpt.addAction(self.toggleWord) self.toggleRegEx = QAction(self.tr("RegEx Mode"), self) - self.toggleRegEx.setToolTip(self.tr("Search using regular expressions")) self.toggleRegEx.setIcon(self.theTheme.getIcon("search_regex")) self.toggleRegEx.setCheckable(True) self.toggleRegEx.setChecked(self.isRegEx) @@ -2239,7 +2236,6 @@ class GuiDocEditSearch(QFrame): self.searchOpt.addAction(self.toggleRegEx) self.toggleLoop = QAction(self.tr("Loop Search"), self) - self.toggleLoop.setToolTip(self.tr("Loop the search when reaching the end")) self.toggleLoop.setIcon(self.theTheme.getIcon("search_loop")) self.toggleLoop.setCheckable(True) self.toggleLoop.setChecked(self.doLoop) @@ -2247,7 +2243,6 @@ class GuiDocEditSearch(QFrame): self.searchOpt.addAction(self.toggleLoop) self.toggleProject = QAction(self.tr("Search Next File"), self) - self.toggleProject.setToolTip(self.tr("Continue searching in the next file")) self.toggleProject.setIcon(self.theTheme.getIcon("search_project")) self.toggleProject.setCheckable(True) self.toggleProject.setChecked(self.doNextFile) @@ -2257,7 +2252,6 @@ class GuiDocEditSearch(QFrame): self.searchOpt.addSeparator() self.toggleMatchCap = QAction(self.tr("Preserve Case"), self) - self.toggleMatchCap.setToolTip(self.tr("Preserve case on replace")) self.toggleMatchCap.setIcon(self.theTheme.getIcon("search_preserve")) self.toggleMatchCap.setCheckable(True) self.toggleMatchCap.setChecked(self.doMatchCap) @@ -2267,7 +2261,6 @@ class GuiDocEditSearch(QFrame): self.searchOpt.addSeparator() self.cancelSearch = QAction(self.tr("Close Search"), self) - self.cancelSearch.setToolTip(self.tr("Close the search box [{0}]").format("Esc")) self.cancelSearch.setIcon(self.theTheme.getIcon("search_cancel")) self.cancelSearch.triggered.connect(self._doClose) self.searchOpt.addAction(self.cancelSearch) @@ -2280,7 +2273,6 @@ class GuiDocEditSearch(QFrame): self.showReplace = QToolButton(self) self.showReplace.setArrowType(Qt.RightArrow) self.showReplace.setCheckable(True) - self.showReplace.setToolTip(self.tr("Show/hide the replace text box")) self.showReplace.setStyleSheet("QToolButton {border: none; background: transparent;}") self.showReplace.toggled.connect(self._doToggleReplace) diff --git a/novelwriter/gui/mainmenu.py b/novelwriter/gui/mainmenu.py index 0701e432..5f91eccc 100644 --- a/novelwriter/gui/mainmenu.py +++ b/novelwriter/gui/mainmenu.py @@ -155,27 +155,23 @@ class GuiMainMenu(QMenuBar): # Project > New Project self.aNewProject = QAction(self.tr("New Project"), self) - self.aNewProject.setStatusTip(self.tr("Create new project")) self.aNewProject.triggered.connect(lambda: self.theParent.newProject(None)) self.projMenu.addAction(self.aNewProject) # Project > Open Project self.aOpenProject = QAction(self.tr("Open Project"), self) - self.aOpenProject.setStatusTip(self.tr("Open project")) self.aOpenProject.setShortcut("Ctrl+Shift+O") self.aOpenProject.triggered.connect(lambda: self.theParent.showProjectLoadDialog()) self.projMenu.addAction(self.aOpenProject) # Project > Save Project self.aSaveProject = QAction(self.tr("Save Project"), self) - self.aSaveProject.setStatusTip(self.tr("Save project")) self.aSaveProject.setShortcut("Ctrl+Shift+S") self.aSaveProject.triggered.connect(lambda: self.theParent.saveProject()) self.projMenu.addAction(self.aSaveProject) # Project > Close Project self.aCloseProject = QAction(self.tr("Close Project"), self) - self.aCloseProject.setStatusTip(self.tr("Close project")) self.aCloseProject.setShortcut("Ctrl+Shift+W") self.aCloseProject.triggered.connect(lambda: self.theParent.closeProject(False)) self.projMenu.addAction(self.aCloseProject) @@ -185,14 +181,12 @@ class GuiMainMenu(QMenuBar): # Project > Project Settings self.aProjectSettings = QAction(self.tr("Project Settings"), self) - self.aProjectSettings.setStatusTip(self.tr("Project settings")) self.aProjectSettings.setShortcut("Ctrl+Shift+,") self.aProjectSettings.triggered.connect(lambda: self.theParent.showProjectSettingsDialog()) self.projMenu.addAction(self.aProjectSettings) # Project > Project Details self.aProjectDetails = QAction(self.tr("Project Details"), self) - self.aProjectDetails.setStatusTip(self.tr("Project details")) self.aProjectDetails.setShortcut("Shift+F6") self.aProjectDetails.triggered.connect(lambda: self.theParent.showProjectDetailsDialog()) self.projMenu.addAction(self.aProjectDetails) @@ -211,7 +205,7 @@ class GuiMainMenu(QMenuBar): self.rootItems[nwItemClass.OBJECT] = QAction(self.tr("Object Root"), self.rootMenu) self.rootItems[nwItemClass.ENTITY] = QAction(self.tr("Entity Root"), self.rootMenu) self.rootItems[nwItemClass.CUSTOM] = QAction(self.tr("Custom Root"), self.rootMenu) - self.rootItems[nwItemClass.ARCHIVE] = QAction(self.tr("Outtakes Root"), self.rootMenu) + self.rootItems[nwItemClass.ARCHIVE] = QAction(self.tr("Archive Root"), self.rootMenu) for n, itemClass in enumerate(self.rootItems.keys()): self.rootItems[itemClass].triggered.connect( lambda n, itemClass=itemClass: self._newTreeItem(nwItemType.ROOT, itemClass) @@ -220,7 +214,6 @@ class GuiMainMenu(QMenuBar): # Project > New Folder self.aCreateFolder = QAction(self.tr("Create Folder"), self) - self.aCreateFolder.setStatusTip(self.tr("Create folder")) self.aCreateFolder.setShortcut("Ctrl+Shift+N") self.aCreateFolder.triggered.connect(lambda: self._newTreeItem(nwItemType.FOLDER, None)) self.projMenu.addAction(self.aCreateFolder) @@ -230,42 +223,36 @@ class GuiMainMenu(QMenuBar): # Project > Edit self.aEditItem = QAction(self.tr("Edit Item"), self) - self.aEditItem.setStatusTip(self.tr("Change project item settings")) self.aEditItem.setShortcuts(["Ctrl+E", "F2"]) self.aEditItem.triggered.connect(lambda: self.theParent.editItem(None)) self.projMenu.addAction(self.aEditItem) # Project > Delete self.aDeleteItem = QAction(self.tr("Delete Item"), self) - self.aDeleteItem.setStatusTip(self.tr("Delete selected project item")) self.aDeleteItem.setShortcut("Ctrl+Shift+Del") self.aDeleteItem.triggered.connect(lambda: self.theParent.treeView.deleteItem(None)) self.projMenu.addAction(self.aDeleteItem) # Project > Move Up self.aMoveUp = QAction(self.tr("Move Item Up"), self) - self.aMoveUp.setStatusTip(self.tr("Move project item up")) self.aMoveUp.setShortcut("Ctrl+Up") self.aMoveUp.triggered.connect(lambda: self._moveTreeItem(-1)) self.projMenu.addAction(self.aMoveUp) # Project > Move Down self.aMoveDown = QAction(self.tr("Move Item Down"), self) - self.aMoveDown.setStatusTip(self.tr("Move project item down")) self.aMoveDown.setShortcut("Ctrl+Down") self.aMoveDown.triggered.connect(lambda: self._moveTreeItem(1)) self.projMenu.addAction(self.aMoveDown) # Project > Undo Last Action self.aMoveUndo = QAction(self.tr("Undo Last Move"), self) - self.aMoveUndo.setStatusTip(self.tr("Undo last item move")) self.aMoveUndo.setShortcut("Ctrl+Shift+Z") self.aMoveUndo.triggered.connect(lambda: self.theParent.treeView.undoLastMove()) self.projMenu.addAction(self.aMoveUndo) # Project > Empty Trash self.aEmptyTrash = QAction(self.tr("Empty Trash"), self) - self.aEmptyTrash.setStatusTip(self.tr("Permanently delete all files in the Trash folder")) self.aEmptyTrash.triggered.connect(lambda: self.theParent.treeView.emptyTrash()) self.projMenu.addAction(self.aEmptyTrash) @@ -274,7 +261,6 @@ class GuiMainMenu(QMenuBar): # Project > Exit self.aExitNW = QAction(self.tr("Exit"), self) - self.aExitNW.setStatusTip(self.tr("Exit novelWriter")) self.aExitNW.setShortcut("Ctrl+Q") self.aExitNW.setMenuRole(QAction.QuitRole) self.aExitNW.triggered.connect(lambda: self.theParent.closeMain()) @@ -290,28 +276,24 @@ class GuiMainMenu(QMenuBar): # Document > New self.aNewDoc = QAction(self.tr("New Document"), self) - self.aNewDoc.setStatusTip(self.tr("Create new document")) self.aNewDoc.setShortcut("Ctrl+N") self.aNewDoc.triggered.connect(lambda: self._newTreeItem(nwItemType.FILE, None)) self.docuMenu.addAction(self.aNewDoc) # Document > Open self.aOpenDoc = QAction(self.tr("Open Document"), self) - self.aOpenDoc.setStatusTip(self.tr("Open selected document")) self.aOpenDoc.setShortcut("Ctrl+O") self.aOpenDoc.triggered.connect(lambda: self.theParent.openSelectedItem()) self.docuMenu.addAction(self.aOpenDoc) # Document > Save self.aSaveDoc = QAction(self.tr("Save Document"), self) - self.aSaveDoc.setStatusTip(self.tr("Save current document")) self.aSaveDoc.setShortcut("Ctrl+S") self.aSaveDoc.triggered.connect(lambda: self.theParent.saveDocument()) self.docuMenu.addAction(self.aSaveDoc) # Document > Close self.aCloseDoc = QAction(self.tr("Close Document"), self) - self.aCloseDoc.setStatusTip(self.tr("Close current document")) self.aCloseDoc.setShortcut("Ctrl+W") self.aCloseDoc.triggered.connect(lambda: self.theParent.closeDocEditor()) self.docuMenu.addAction(self.aCloseDoc) @@ -321,14 +303,12 @@ class GuiMainMenu(QMenuBar): # Document > Preview self.aViewDoc = QAction(self.tr("View Document"), self) - self.aViewDoc.setStatusTip(self.tr("View document as HTML")) self.aViewDoc.setShortcut("Ctrl+R") self.aViewDoc.triggered.connect(lambda: self.theParent.viewDocument(None)) self.docuMenu.addAction(self.aViewDoc) # Document > Close Preview self.aCloseView = QAction(self.tr("Close Document View"), self) - self.aCloseView.setStatusTip(self.tr("Close document view pane")) self.aCloseView.setShortcut("Ctrl+Shift+R") self.aCloseView.triggered.connect(lambda: self.theParent.closeDocViewer()) self.docuMenu.addAction(self.aCloseView) @@ -338,30 +318,22 @@ class GuiMainMenu(QMenuBar): # Document > Show File Details self.aFileDetails = QAction(self.tr("Show File Details"), self) - self.aFileDetails.setStatusTip( - self.tr("Shows a message box with the document location in the project folder") - ) self.aFileDetails.triggered.connect(lambda: self.theParent.docEditor.revealLocation()) self.docuMenu.addAction(self.aFileDetails) # Document > Import From File - self.aImportFile = QAction(self.tr("Import from File"), self) - self.aImportFile.setStatusTip(self.tr("Import document from a text or markdown file")) + self.aImportFile = QAction(self.tr("Import Text from File"), self) self.aImportFile.setShortcut("Ctrl+Shift+I") self.aImportFile.triggered.connect(lambda: self.theParent.importDocument()) self.docuMenu.addAction(self.aImportFile) # Document > Merge Documents self.aMergeDocs = QAction(self.tr("Merge Folder to Document"), self) - self.aMergeDocs.setStatusTip(self.tr("Merge a folder of documents to a single document")) self.aMergeDocs.triggered.connect(lambda: self.theParent.mergeDocuments()) self.docuMenu.addAction(self.aMergeDocs) # Document > Split Document self.aSplitDoc = QAction(self.tr("Split Document to Folder"), self) - self.aSplitDoc.setStatusTip( - self.tr("Split a document into a folder of multiple documents") - ) self.aSplitDoc.triggered.connect(lambda: self.theParent.splitDocument()) self.docuMenu.addAction(self.aSplitDoc) @@ -375,14 +347,12 @@ class GuiMainMenu(QMenuBar): # Edit > Undo self.aEditUndo = QAction(self.tr("Undo"), self) - self.aEditUndo.setStatusTip(self.tr("Undo last change")) self.aEditUndo.setShortcut("Ctrl+Z") self.aEditUndo.triggered.connect(lambda: self._docAction(nwDocAction.UNDO)) self.editMenu.addAction(self.aEditUndo) # Edit > Redo self.aEditRedo = QAction(self.tr("Redo"), self) - self.aEditRedo.setStatusTip(self.tr("Redo last change")) self.aEditRedo.setShortcut("Ctrl+Y") self.aEditRedo.triggered.connect(lambda: self._docAction(nwDocAction.REDO)) self.editMenu.addAction(self.aEditRedo) @@ -392,21 +362,18 @@ class GuiMainMenu(QMenuBar): # Edit > Cut self.aEditCut = QAction(self.tr("Cut"), self) - self.aEditCut.setStatusTip(self.tr("Cut selected text")) self.aEditCut.setShortcut("Ctrl+X") self.aEditCut.triggered.connect(lambda: self._docAction(nwDocAction.CUT)) self.editMenu.addAction(self.aEditCut) # Edit > Copy self.aEditCopy = QAction(self.tr("Copy"), self) - self.aEditCopy.setStatusTip(self.tr("Copy selected text")) self.aEditCopy.setShortcut("Ctrl+C") self.aEditCopy.triggered.connect(lambda: self._docAction(nwDocAction.COPY)) self.editMenu.addAction(self.aEditCopy) # Edit > Paste self.aEditPaste = QAction(self.tr("Paste"), self) - self.aEditPaste.setStatusTip(self.tr("Paste text from clipboard")) self.aEditPaste.setShortcut("Ctrl+V") self.aEditPaste.triggered.connect(lambda: self._docAction(nwDocAction.PASTE)) self.editMenu.addAction(self.aEditPaste) @@ -416,14 +383,12 @@ class GuiMainMenu(QMenuBar): # Edit > Select All self.aSelectAll = QAction(self.tr("Select All"), self) - self.aSelectAll.setStatusTip(self.tr("Select all text in document")) self.aSelectAll.setShortcut("Ctrl+A") self.aSelectAll.triggered.connect(lambda: self._docAction(nwDocAction.SEL_ALL)) self.editMenu.addAction(self.aSelectAll) # Edit > Select Paragraph self.aSelectPar = QAction(self.tr("Select Paragraph"), self) - self.aSelectPar.setStatusTip(self.tr("Select all text in paragraph")) self.aSelectPar.setShortcut("Ctrl+Shift+A") self.aSelectPar.triggered.connect(lambda: self._docAction(nwDocAction.SEL_PARA)) self.editMenu.addAction(self.aSelectPar) @@ -437,8 +402,7 @@ class GuiMainMenu(QMenuBar): self.viewMenu = self.addMenu(self.tr("&View")) # View > TreeView - self.aFocusTree = QAction(self.tr("Focus Project Tree"), self) - self.aFocusTree.setStatusTip(self.tr("Move focus to project tree")) + self.aFocusTree = QAction(self.tr("Go to Project Tree"), self) if self.mainConf.osWindows: self.aFocusTree.setShortcut("Ctrl+Alt+1") else: @@ -447,8 +411,7 @@ class GuiMainMenu(QMenuBar): self.viewMenu.addAction(self.aFocusTree) # View > Document Pane 1 - self.aFocusEditor = QAction(self.tr("Focus Document Editor"), self) - self.aFocusEditor.setStatusTip(self.tr("Move focus to left document pane")) + self.aFocusEditor = QAction(self.tr("Go to Document Editor"), self) if self.mainConf.osWindows: self.aFocusEditor.setShortcut("Ctrl+Alt+2") else: @@ -457,8 +420,7 @@ class GuiMainMenu(QMenuBar): self.viewMenu.addAction(self.aFocusEditor) # View > Document Pane 2 - self.aFocusView = QAction(self.tr("Focus Document Viewer"), self) - self.aFocusView.setStatusTip(self.tr("Move focus to right document pane")) + self.aFocusView = QAction(self.tr("Go to Document Viewer"), self) if self.mainConf.osWindows: self.aFocusView.setShortcut("Ctrl+Alt+3") else: @@ -467,8 +429,7 @@ class GuiMainMenu(QMenuBar): self.viewMenu.addAction(self.aFocusView) # View > Outline - self.aFocusOutline = QAction(self.tr("Focus Outline"), self) - self.aFocusOutline.setStatusTip(self.tr("Move focus to outline")) + self.aFocusOutline = QAction(self.tr("Go to Outline"), self) if self.mainConf.osWindows: self.aFocusOutline.setShortcut("Ctrl+Alt+4") else: @@ -480,15 +441,13 @@ class GuiMainMenu(QMenuBar): self.viewMenu.addSeparator() # View > Go Backward - self.aViewPrev = QAction(self.tr("Go Backward"), self) - self.aViewPrev.setStatusTip(self.tr("Move backward in the view history of the right pane")) + self.aViewPrev = QAction(self.tr("Navigate Backward"), self) self.aViewPrev.setShortcut("Alt+Left") self.aViewPrev.triggered.connect(lambda: self.theParent.docViewer.navBackward()) self.viewMenu.addAction(self.aViewPrev) # View > Go Forward - self.aViewNext = QAction(self.tr("Go Forward"), self) - self.aViewNext.setStatusTip(self.tr("Move forward in the view history of the right pane")) + self.aViewNext = QAction(self.tr("Navigate Forward"), self) self.aViewNext.setShortcut("Alt+Right") self.aViewNext.triggered.connect(lambda: self.theParent.docViewer.navForward()) self.viewMenu.addAction(self.aViewNext) @@ -498,9 +457,6 @@ class GuiMainMenu(QMenuBar): # View > Focus Mode self.aFocusMode = QAction(self.tr("Focus Mode"), self) - self.aFocusMode.setStatusTip( - self.tr("Toggles a distraction free mode, only showing text editor") - ) self.aFocusMode.setShortcut("F8") self.aFocusMode.setCheckable(True) self.aFocusMode.setChecked(self.theParent.isFocusMode) @@ -509,7 +465,6 @@ class GuiMainMenu(QMenuBar): # View > Toggle Full Screen self.aFullScreen = QAction(self.tr("Full Screen Mode"), self) - self.aFullScreen.setStatusTip(self.tr("Maximises the main window")) self.aFullScreen.setShortcut("F11") self.aFullScreen.triggered.connect(lambda: self.theParent.toggleFullScreenMode()) self.viewMenu.addAction(self.aFullScreen) @@ -527,30 +482,24 @@ class GuiMainMenu(QMenuBar): # Insert > Short Dash self.aInsENDash = QAction(self.tr("Short Dash"), self) - self.aInsENDash.setStatusTip(self.tr("Insert short dash (en dash)")) self.aInsENDash.setShortcut("Ctrl+K, -") self.aInsENDash.triggered.connect(lambda: self._docInsert(nwUnicode.U_ENDASH)) self.mInsDashes.addAction(self.aInsENDash) # Insert > Long Dash self.aInsEMDash = QAction(self.tr("Long Dash"), self) - self.aInsEMDash.setStatusTip(self.tr("Insert long dash (em dash)")) self.aInsEMDash.setShortcut("Ctrl+K, _") self.aInsEMDash.triggered.connect(lambda: self._docInsert(nwUnicode.U_EMDASH)) self.mInsDashes.addAction(self.aInsEMDash) # Insert > Long Dash self.aInsHorBar = QAction(self.tr("Horizontal Bar"), self) - self.aInsHorBar.setStatusTip(self.tr("Insert a horizontal bar (quotation dash)")) self.aInsHorBar.setShortcut("Ctrl+K, Ctrl+_") self.aInsHorBar.triggered.connect(lambda: self._docInsert(nwUnicode.U_HBAR)) self.mInsDashes.addAction(self.aInsHorBar) # Insert > Figure Dash self.aInsFigDash = QAction(self.tr("Figure Dash"), self) - self.aInsFigDash.setStatusTip( - self.tr("Insert figure dash (same width as a number character)") - ) self.aInsFigDash.setShortcut("Ctrl+K, ~") self.aInsFigDash.triggered.connect(lambda: self._docInsert(nwUnicode.U_FGDASH)) self.mInsDashes.addAction(self.aInsFigDash) @@ -560,35 +509,30 @@ class GuiMainMenu(QMenuBar): # Insert > Left Single Quote self.aInsQuoteLS = QAction(self.tr("Left Single Quote"), self) - self.aInsQuoteLS.setStatusTip(self.tr("Insert left single quote")) self.aInsQuoteLS.setShortcut("Ctrl+K, 1") self.aInsQuoteLS.triggered.connect(lambda: self._docInsert(nwDocInsert.QUOTE_LS)) self.mInsQuotes.addAction(self.aInsQuoteLS) # Insert > Right Single Quote self.aInsQuoteRS = QAction(self.tr("Right Single Quote"), self) - self.aInsQuoteRS.setStatusTip(self.tr("Insert right single quote")) self.aInsQuoteRS.setShortcut("Ctrl+K, 2") self.aInsQuoteRS.triggered.connect(lambda: self._docInsert(nwDocInsert.QUOTE_RS)) self.mInsQuotes.addAction(self.aInsQuoteRS) # Insert > Left Double Quote self.aInsQuoteLD = QAction(self.tr("Left Double Quote"), self) - self.aInsQuoteLD.setStatusTip(self.tr("Insert left double quote")) self.aInsQuoteLD.setShortcut("Ctrl+K, 3") self.aInsQuoteLD.triggered.connect(lambda: self._docInsert(nwDocInsert.QUOTE_LD)) self.mInsQuotes.addAction(self.aInsQuoteLD) # Insert > Right Double Quote self.aInsQuoteRD = QAction(self.tr("Right Double Quote"), self) - self.aInsQuoteRD.setStatusTip(self.tr("Insert right double quote")) self.aInsQuoteRD.setShortcut("Ctrl+K, 4") self.aInsQuoteRD.triggered.connect(lambda: self._docInsert(nwDocInsert.QUOTE_RD)) self.mInsQuotes.addAction(self.aInsQuoteRD) # Insert > Alternative Apostrophe self.aInsMSApos = QAction(self.tr("Alternative Apostrophe"), self) - self.aInsMSApos.setStatusTip(self.tr("Insert modifier letter single apostrophe")) self.aInsMSApos.setShortcut("Ctrl+K, '") self.aInsMSApos.triggered.connect(lambda: self._docInsert(nwUnicode.U_MAPOSS)) self.mInsQuotes.addAction(self.aInsMSApos) @@ -598,21 +542,18 @@ class GuiMainMenu(QMenuBar): # Insert > Ellipsis self.aInsEllipsis = QAction(self.tr("Ellipsis"), self) - self.aInsEllipsis.setStatusTip(self.tr("Insert ellipsis")) self.aInsEllipsis.setShortcut("Ctrl+K, .") self.aInsEllipsis.triggered.connect(lambda: self._docInsert(nwUnicode.U_HELLIP)) self.mInsPunct.addAction(self.aInsEllipsis) # Insert > Prime self.aInsPrime = QAction(self.tr("Prime"), self) - self.aInsPrime.setStatusTip(self.tr("Insert a prime symbol")) self.aInsPrime.setShortcut("Ctrl+K, Ctrl+'") self.aInsPrime.triggered.connect(lambda: self._docInsert(nwUnicode.U_PRIME)) self.mInsPunct.addAction(self.aInsPrime) # Insert > Double Prime self.aInsDPrime = QAction(self.tr("Double Prime"), self) - self.aInsDPrime.setStatusTip(self.tr("Insert a double prime symbol")) self.aInsDPrime.setShortcut("Ctrl+K, Ctrl+\"") self.aInsDPrime.triggered.connect(lambda: self._docInsert(nwUnicode.U_DPRIME)) self.mInsPunct.addAction(self.aInsDPrime) @@ -622,21 +563,18 @@ class GuiMainMenu(QMenuBar): # Insert > Non-Breaking Space self.aInsNBSpace = QAction(self.tr("Non-Breaking Space"), self) - self.aInsNBSpace.setStatusTip(self.tr("Insert a non-breaking space")) self.aInsNBSpace.setShortcut("Ctrl+K, Space") self.aInsNBSpace.triggered.connect(lambda: self._docInsert(nwUnicode.U_NBSP)) self.mInsSpace.addAction(self.aInsNBSpace) # Insert > Thin Space self.aInsThinSpace = QAction(self.tr("Thin Space"), self) - self.aInsThinSpace.setStatusTip(self.tr("Insert a thin space")) self.aInsThinSpace.setShortcut("Ctrl+K, Shift+Space") self.aInsThinSpace.triggered.connect(lambda: self._docInsert(nwUnicode.U_THSP)) self.mInsSpace.addAction(self.aInsThinSpace) # Insert > Thin Non-Breaking Space self.aInsThinNBSpace = QAction(self.tr("Thin Non-Breaking Space"), self) - self.aInsThinNBSpace.setStatusTip(self.tr("Insert a thin non-breaking space")) self.aInsThinNBSpace.setShortcut("Ctrl+K, Ctrl+Space") self.aInsThinNBSpace.triggered.connect(lambda: self._docInsert(nwUnicode.U_THNBSP)) self.mInsSpace.addAction(self.aInsThinNBSpace) @@ -646,56 +584,48 @@ class GuiMainMenu(QMenuBar): # Insert > List Bullet self.aInsBullet = QAction(self.tr("List Bullet"), self) - self.aInsBullet.setStatusTip(self.tr("Insert a list bullet")) self.aInsBullet.setShortcut("Ctrl+K, *") self.aInsBullet.triggered.connect(lambda: self._docInsert(nwUnicode.U_BULL)) self.mInsSymbol.addAction(self.aInsBullet) # Insert > Hyphen Bullet self.aInsHyBull = QAction(self.tr("Hyphen Bullet"), self) - self.aInsHyBull.setStatusTip(self.tr("Insert a hyphen bullet (alternative bullet)")) self.aInsHyBull.setShortcut("Ctrl+K, Ctrl+-") self.aInsHyBull.triggered.connect(lambda: self._docInsert(nwUnicode.U_HYBULL)) self.mInsSymbol.addAction(self.aInsHyBull) # Insert > Flower Mark self.aInsFlower = QAction(self.tr("Flower Mark"), self) - self.aInsFlower.setStatusTip(self.tr("Insert a flower mark (alternative bullet)")) self.aInsFlower.setShortcut("Ctrl+K, Ctrl+*") self.aInsFlower.triggered.connect(lambda: self._docInsert(nwUnicode.U_FLOWER)) self.mInsSymbol.addAction(self.aInsFlower) # Insert > Per Mille self.aInsPerMille = QAction(self.tr("Per Mille"), self) - self.aInsPerMille.setStatusTip(self.tr("Insert a per mille symbol")) self.aInsPerMille.setShortcut("Ctrl+K, %") self.aInsPerMille.triggered.connect(lambda: self._docInsert(nwUnicode.U_PERMIL)) self.mInsSymbol.addAction(self.aInsPerMille) # Insert > Degree Symbol self.aInsDegree = QAction(self.tr("Degree Symbol"), self) - self.aInsDegree.setStatusTip(self.tr("Insert a degree symbol")) self.aInsDegree.setShortcut("Ctrl+K, Ctrl+O") self.aInsDegree.triggered.connect(lambda: self._docInsert(nwUnicode.U_DEGREE)) self.mInsSymbol.addAction(self.aInsDegree) # Insert > Minus Sign self.aInsMinus = QAction(self.tr("Minus Sign"), self) - self.aInsMinus.setStatusTip(self.tr("Insert a minus sign (not a hypen or dash)")) self.aInsMinus.setShortcut("Ctrl+K, Ctrl+M") self.aInsMinus.triggered.connect(lambda: self._docInsert(nwUnicode.U_MINUS)) self.mInsSymbol.addAction(self.aInsMinus) # Insert > Times Sign self.aInsTimes = QAction(self.tr("Times Sign"), self) - self.aInsTimes.setStatusTip(self.tr("Insert a times sign (multiplication cross)")) self.aInsTimes.setShortcut("Ctrl+K, Ctrl+X") self.aInsTimes.triggered.connect(lambda: self._docInsert(nwUnicode.U_TIMES)) self.mInsSymbol.addAction(self.aInsTimes) # Insert > Division self.aInsDivide = QAction(self.tr("Division Sign"), self) - self.aInsDivide.setStatusTip(self.tr("Insert a division sign")) self.aInsDivide.setShortcut("Ctrl+K, Ctrl+D") self.aInsDivide.triggered.connect(lambda: self._docInsert(nwUnicode.U_DIVIDE)) self.mInsSymbol.addAction(self.aInsDivide) @@ -726,19 +656,16 @@ class GuiMainMenu(QMenuBar): # Insert > New Page self.aInsNewPage = QAction(self.tr("Page Break"), self) - self.aInsNewPage.setStatusTip(self.tr("Insert a page break command")) self.aInsNewPage.triggered.connect(lambda: self._docInsert(nwDocInsert.NEW_PAGE)) self.mInsBreaks.addAction(self.aInsNewPage) # Insert > Vertical Space (Single) self.aInsVSpaceS = QAction(self.tr("Vertical Space (Single)"), self) - self.aInsVSpaceS.setStatusTip(self.tr("Insert a vertical space equal to one paragraph")) self.aInsVSpaceS.triggered.connect(lambda: self._docInsert(nwDocInsert.VSPACE_S)) self.mInsBreaks.addAction(self.aInsVSpaceS) # Insert > Vertical Space (Multi) self.aInsVSpaceM = QAction(self.tr("Vertical Space (Multi)"), self) - self.aInsVSpaceM.setStatusTip(self.tr("Insert a vertical space equal to n paragraphs")) self.aInsVSpaceM.triggered.connect(lambda: self._docInsert(nwDocInsert.VSPACE_M)) self.mInsBreaks.addAction(self.aInsVSpaceM) @@ -752,21 +679,18 @@ class GuiMainMenu(QMenuBar): # Format > Emphasis self.aFmtEmph = QAction(self.tr("Emphasis"), self) - self.aFmtEmph.setStatusTip(self.tr("Add emphasis to selected text (italic)")) self.aFmtEmph.setShortcut("Ctrl+I") self.aFmtEmph.triggered.connect(lambda: self._docAction(nwDocAction.EMPH)) self.fmtMenu.addAction(self.aFmtEmph) # Format > Strong Emphasis self.aFmtStrong = QAction(self.tr("Strong Emphasis"), self) - self.aFmtStrong.setStatusTip(self.tr("Add strong emphasis to selected text (bold)")) self.aFmtStrong.setShortcut("Ctrl+B") self.aFmtStrong.triggered.connect(lambda: self._docAction(nwDocAction.STRONG)) self.fmtMenu.addAction(self.aFmtStrong) # Format > Strikethrough self.aFmtStrike = QAction(self.tr("Strikethrough"), self) - self.aFmtStrike.setStatusTip(self.tr("Add strikethrough to selected text")) self.aFmtStrike.setShortcut("Ctrl+D") self.aFmtStrike.triggered.connect(lambda: self._docAction(nwDocAction.STRIKE)) self.fmtMenu.addAction(self.aFmtStrike) @@ -776,14 +700,12 @@ class GuiMainMenu(QMenuBar): # Format > Double Quotes self.aFmtDQuote = QAction(self.tr("Wrap Double Quotes"), self) - self.aFmtDQuote.setStatusTip(self.tr("Wrap selected text in double quotes")) self.aFmtDQuote.setShortcut("Ctrl+\"") self.aFmtDQuote.triggered.connect(lambda: self._docAction(nwDocAction.D_QUOTE)) self.fmtMenu.addAction(self.aFmtDQuote) # Format > Single Quotes self.aFmtSQuote = QAction(self.tr("Wrap Single Quotes"), self) - self.aFmtSQuote.setStatusTip(self.tr("Wrap selected text in single quotes")) self.aFmtSQuote.setShortcut("Ctrl+'") self.aFmtSQuote.triggered.connect(lambda: self._docAction(nwDocAction.S_QUOTE)) self.fmtMenu.addAction(self.aFmtSQuote) @@ -793,28 +715,24 @@ class GuiMainMenu(QMenuBar): # Format > Header 1 (Partition) self.aFmtHead1 = QAction(self.tr("Header 1 (Partition)"), self) - self.aFmtHead1.setStatusTip(self.tr("Set the text block format to Header 1 (Partition)")) self.aFmtHead1.setShortcut("Ctrl+1") self.aFmtHead1.triggered.connect(lambda: self._docAction(nwDocAction.BLOCK_H1)) self.fmtMenu.addAction(self.aFmtHead1) # Format > Header 2 (Chapter) self.aFmtHead2 = QAction(self.tr("Header 2 (Chapter)"), self) - self.aFmtHead2.setStatusTip(self.tr("Set the text block format to Header 2 (Chapter)")) self.aFmtHead2.setShortcut("Ctrl+2") self.aFmtHead2.triggered.connect(lambda: self._docAction(nwDocAction.BLOCK_H2)) self.fmtMenu.addAction(self.aFmtHead2) # Format > Header 3 (Scene) self.aFmtHead3 = QAction(self.tr("Header 3 (Scene)"), self) - self.aFmtHead3.setStatusTip(self.tr("Set the text block format to Header 3 (Scene)")) self.aFmtHead3.setShortcut("Ctrl+3") self.aFmtHead3.triggered.connect(lambda: self._docAction(nwDocAction.BLOCK_H3)) self.fmtMenu.addAction(self.aFmtHead3) # Format > Header 4 (Section) self.aFmtHead4 = QAction(self.tr("Header 4 (Section)"), self) - self.aFmtHead4.setStatusTip(self.tr("Set the text block format to Header 4 (Section)")) self.aFmtHead4.setShortcut("Ctrl+4") self.aFmtHead4.triggered.connect(lambda: self._docAction(nwDocAction.BLOCK_H4)) self.fmtMenu.addAction(self.aFmtHead4) @@ -824,13 +742,11 @@ class GuiMainMenu(QMenuBar): # Format > Novel Title self.aFmtTitle = QAction(self.tr("Novel Title"), self) - self.aFmtTitle.setStatusTip(self.tr("Set the text block format to Novel Title")) self.aFmtTitle.triggered.connect(lambda: self._docAction(nwDocAction.BLOCK_TTL)) self.fmtMenu.addAction(self.aFmtTitle) # Format > Unnumbered Chapter self.aFmtUnNum = QAction(self.tr("Unnumbered Chapter"), self) - self.aFmtUnNum.setStatusTip(self.tr("Set the text block format to Unnumbered Chapter")) self.aFmtUnNum.triggered.connect(lambda: self._docAction(nwDocAction.BLOCK_UNN)) self.fmtMenu.addAction(self.aFmtUnNum) @@ -839,21 +755,18 @@ class GuiMainMenu(QMenuBar): # Format > Align Left self.aFmtAlignLeft = QAction(self.tr("Align Left"), self) - self.aFmtAlignLeft.setStatusTip(self.tr("Left-align the text block")) self.aFmtAlignLeft.setShortcut("Ctrl+5") self.aFmtAlignLeft.triggered.connect(lambda: self._docAction(nwDocAction.ALIGN_L)) self.fmtMenu.addAction(self.aFmtAlignLeft) # Format > Align Centre self.aFmtAlignCentre = QAction(self.tr("Align Centre"), self) - self.aFmtAlignCentre.setStatusTip(self.tr("Centre the text block")) self.aFmtAlignCentre.setShortcut("Ctrl+6") self.aFmtAlignCentre.triggered.connect(lambda: self._docAction(nwDocAction.ALIGN_C)) self.fmtMenu.addAction(self.aFmtAlignCentre) # Format > Align Right self.aFmtAlignRight = QAction(self.tr("Align Right"), self) - self.aFmtAlignRight.setStatusTip(self.tr("Right-align the text block")) self.aFmtAlignRight.setShortcut("Ctrl+7") self.aFmtAlignRight.triggered.connect(lambda: self._docAction(nwDocAction.ALIGN_R)) self.fmtMenu.addAction(self.aFmtAlignRight) @@ -863,14 +776,12 @@ class GuiMainMenu(QMenuBar): # Format > Indent Left self.aFmtIndentLeft = QAction(self.tr("Indent Left"), self) - self.aFmtIndentLeft.setStatusTip(self.tr("Increase the text block's left margin")) self.aFmtIndentLeft.setShortcut("Ctrl+8") self.aFmtIndentLeft.triggered.connect(lambda: self._docAction(nwDocAction.INDENT_L)) self.fmtMenu.addAction(self.aFmtIndentLeft) # Format > Indent Right self.aFmtIndentRight = QAction(self.tr("Indent Right"), self) - self.aFmtIndentRight.setStatusTip(self.tr("Increase the text block's right margin")) self.aFmtIndentRight.setShortcut("Ctrl+9") self.aFmtIndentRight.triggered.connect(lambda: self._docAction(nwDocAction.INDENT_R)) self.fmtMenu.addAction(self.aFmtIndentRight) @@ -879,15 +790,13 @@ class GuiMainMenu(QMenuBar): self.fmtMenu.addSeparator() # Format > Comment - self.aFmtComment = QAction(self.tr("Comment"), self) - self.aFmtComment.setStatusTip(self.tr("Change the text block format to comment")) + self.aFmtComment = QAction(self.tr("Toggle Comment"), self) self.aFmtComment.setShortcut("Ctrl+/") self.aFmtComment.triggered.connect(lambda: self._docAction(nwDocAction.BLOCK_COM)) self.fmtMenu.addAction(self.aFmtComment) # Format > Remove Block Format self.aFmtNoFormat = QAction(self.tr("Remove Block Format"), self) - self.aFmtNoFormat.setStatusTip(self.tr("Strip text block format")) self.aFmtNoFormat.setShortcuts(["Ctrl+0", "Ctrl+Shift+/"]) self.aFmtNoFormat.triggered.connect(lambda: self._docAction(nwDocAction.BLOCK_TXT)) self.fmtMenu.addAction(self.aFmtNoFormat) @@ -896,26 +805,17 @@ class GuiMainMenu(QMenuBar): self.fmtMenu.addSeparator() # Format > Replace Single Quotes - self.aFmtReplSng = QAction(self.tr("Replace Single Quotes"), self) - self.aFmtReplSng.setStatusTip( - self.tr("Replace all straight single quotes in the selected text") - ) + self.aFmtReplSng = QAction(self.tr("Convert Single Quotes"), self) self.aFmtReplSng.triggered.connect(lambda: self._docAction(nwDocAction.REPL_SNG)) self.fmtMenu.addAction(self.aFmtReplSng) # Format > Replace Double Quotes - self.aFmtReplDbl = QAction(self.tr("Replace Double Quotes"), self) - self.aFmtReplDbl.setStatusTip( - self.tr("Replace all straight double quotes in the selected text") - ) + self.aFmtReplDbl = QAction(self.tr("Convert Double Quotes"), self) self.aFmtReplDbl.triggered.connect(lambda: self._docAction(nwDocAction.REPL_DBL)) self.fmtMenu.addAction(self.aFmtReplDbl) # Format > Remove In-Paragraph Breaks self.aFmtRmBreaks = QAction(self.tr("Remove In-Paragraph Breaks"), self) - self.aFmtRmBreaks.setStatusTip( - self.tr("Remove all line breaks within paragraphs in the selected text") - ) self.aFmtRmBreaks.triggered.connect(lambda: self._docAction(nwDocAction.RM_BREAKS)) self.fmtMenu.addAction(self.aFmtRmBreaks) @@ -929,14 +829,12 @@ class GuiMainMenu(QMenuBar): # Search > Find self.aFind = QAction(self.tr("Find"), self) - self.aFind.setStatusTip(self.tr("Find text in document")) self.aFind.setShortcut("Ctrl+F") self.aFind.triggered.connect(lambda: self.theParent.docEditor.beginSearch()) self.srcMenu.addAction(self.aFind) # Search > Replace self.aReplace = QAction(self.tr("Replace"), self) - self.aReplace.setStatusTip(self.tr("Replace text in document")) if self.mainConf.osDarwin: self.aReplace.setShortcut("Ctrl+=") else: @@ -946,7 +844,6 @@ class GuiMainMenu(QMenuBar): # Search > Find Next self.aFindNext = QAction(self.tr("Find Next"), self) - self.aFindNext.setStatusTip(self.tr("Find next occurrence of text in document")) if self.mainConf.osDarwin: self.aFindNext.setShortcuts(["Ctrl+G", "F3"]) else: @@ -956,7 +853,6 @@ class GuiMainMenu(QMenuBar): # Search > Find Prev self.aFindPrev = QAction(self.tr("Find Previous"), self) - self.aFindPrev.setStatusTip(self.tr("Find previous occurrence of text in document")) if self.mainConf.osDarwin: self.aFindPrev.setShortcuts(["Ctrl+Shift+G", "Shift+F3"]) else: @@ -966,9 +862,6 @@ class GuiMainMenu(QMenuBar): # Search > Replace Next self.aReplaceNext = QAction(self.tr("Replace Next"), self) - self.aReplaceNext.setStatusTip( - self.tr("Find and replace next occurrence of text in document") - ) self.aReplaceNext.setShortcut("Ctrl+Shift+1") self.aReplaceNext.triggered.connect(lambda: self.theParent.docEditor.replaceNext()) self.srcMenu.addAction(self.aReplaceNext) @@ -983,7 +876,6 @@ class GuiMainMenu(QMenuBar): # Tools > Check Spelling self.aSpellCheck = QAction(self.tr("Check Spelling"), self) - self.aSpellCheck.setStatusTip(self.tr("Toggle check spelling")) self.aSpellCheck.setCheckable(True) self.aSpellCheck.setChecked(self.theProject.spellCheck) self.aSpellCheck.triggered.connect(self._toggleSpellCheck) # triggered, not toggled! @@ -992,14 +884,12 @@ class GuiMainMenu(QMenuBar): # Tools > Re-Run Spell Check self.aReRunSpell = QAction(self.tr("Re-Run Spell Check"), self) - self.aReRunSpell.setStatusTip(self.tr("Run the spell checker on current document")) self.aReRunSpell.setShortcut("F7") self.aReRunSpell.triggered.connect(lambda: self.theParent.docEditor.spellCheckDocument()) self.toolsMenu.addAction(self.aReRunSpell) # Tools > Project Word List self.aEditWordList = QAction(self.tr("Project Word List"), self) - self.aEditWordList.setStatusTip(self.tr("Edit the project's word list")) self.aEditWordList.triggered.connect(lambda: self.theParent.showProjectWordListDialog()) self.toolsMenu.addAction(self.aEditWordList) @@ -1008,23 +898,18 @@ class GuiMainMenu(QMenuBar): # Tools > Rebuild Indices self.aRebuildIndex = QAction(self.tr("Rebuild Index"), self) - self.aRebuildIndex.setStatusTip(self.tr("Rebuild the tag indices and word counts")) self.aRebuildIndex.setShortcut("F9") self.aRebuildIndex.triggered.connect(lambda: self.theParent.rebuildIndex()) self.toolsMenu.addAction(self.aRebuildIndex) # Tools > Rebuild Outline self.aRebuildOutline = QAction(self.tr("Rebuild Outline"), self) - self.aRebuildOutline.setStatusTip(self.tr("Rebuild the novel outline tree")) self.aRebuildOutline.setShortcut("F10") self.aRebuildOutline.triggered.connect(lambda: self.theParent.rebuildOutline()) self.toolsMenu.addAction(self.aRebuildOutline) # Tools > Toggle Auto Build Outline self.aAutoOutline = QAction(self.tr("Auto-Update Outline"), self) - self.aAutoOutline.setStatusTip( - self.tr("Update project outline when a novel file is changed") - ) self.aAutoOutline.setCheckable(True) self.aAutoOutline.toggled.connect(self._toggleAutoOutline) self.aAutoOutline.setShortcut("Ctrl+F10") @@ -1034,28 +919,24 @@ class GuiMainMenu(QMenuBar): self.toolsMenu.addSeparator() # Tools > Backup - self.aBackupProject = QAction(self.tr("Backup Project Folder"), self) - self.aBackupProject.setStatusTip(self.tr("Backup Project")) + self.aBackupProject = QAction(self.tr("Backup Project"), self) self.aBackupProject.triggered.connect(lambda: self.theProject.zipIt(True)) self.toolsMenu.addAction(self.aBackupProject) # Tools > Export Project self.aBuildProject = QAction(self.tr("Build Novel Project"), self) - self.aBuildProject.setStatusTip(self.tr("Launch the Build novel project tool")) self.aBuildProject.setShortcut("F5") self.aBuildProject.triggered.connect(lambda: self.theParent.showBuildProjectDialog()) self.toolsMenu.addAction(self.aBuildProject) # Tools > Writing Stats self.aWritingStats = QAction(self.tr("Writing Statistics"), self) - self.aWritingStats.setStatusTip(self.tr("Show the writing statistics dialogue")) self.aWritingStats.setShortcut("F6") self.aWritingStats.triggered.connect(lambda: self.theParent.showWritingStatsDialog()) self.toolsMenu.addAction(self.aWritingStats) # Tools > Settings self.aPreferences = QAction(self.tr("Preferences"), self) - self.aPreferences.setStatusTip(self.tr("Preferences")) self.aPreferences.setShortcut("Ctrl+,") self.aPreferences.setMenuRole(QAction.PreferencesRole) self.aPreferences.triggered.connect(lambda: self.theParent.showPreferencesDialog()) @@ -1071,14 +952,12 @@ class GuiMainMenu(QMenuBar): # Help > About self.aAboutNW = QAction(self.tr("About novelWriter"), self) - self.aAboutNW.setStatusTip(self.tr("About novelWriter")) self.aAboutNW.setMenuRole(QAction.AboutRole) self.aAboutNW.triggered.connect(lambda: self.theParent.showAboutNWDialog()) self.helpMenu.addAction(self.aAboutNW) # Help > About Qt5 self.aAboutQt = QAction(self.tr("About Qt5"), self) - self.aAboutQt.setStatusTip(self.tr("About Qt5")) self.aAboutQt.setMenuRole(QAction.AboutQtRole) self.aAboutQt.triggered.connect(lambda: self.theParent.showAboutQtDialog()) self.helpMenu.addAction(self.aAboutQt) @@ -1093,7 +972,6 @@ class GuiMainMenu(QMenuBar): docUrl = f"{novelwriter.__docurl__}/en/latest/" self.aHelpDocs = QAction(self.tr("User Manual (Online)"), self) - self.aHelpDocs.setStatusTip(self.tr("Open documentation in browser")) self.aHelpDocs.setShortcut("F1") self.aHelpDocs.triggered.connect(lambda: self._openWebsite(docUrl)) self.helpMenu.addAction(self.aHelpDocs) @@ -1101,7 +979,6 @@ class GuiMainMenu(QMenuBar): # Help > User Manual (PDF) if self.mainConf.pdfDocs is not None: self.aPdfDocs = QAction(self.tr("User Manual (PDF)"), self) - self.aPdfDocs.setStatusTip(self.tr("Open PDF documentation")) self.aPdfDocs.setShortcut("Shift+F1") self.aPdfDocs.triggered.connect(self._openUserManualFile) self.helpMenu.addAction(self.aPdfDocs) @@ -1111,25 +988,16 @@ class GuiMainMenu(QMenuBar): # Document > Report an Issue self.aIssue = QAction(self.tr("Report an Issue (GitHub)"), self) - self.aIssue.setStatusTip( - self.tr("Report a bug or issue on GitHub at {0}").format(novelwriter.__issuesurl__) - ) self.aIssue.triggered.connect(lambda: self._openWebsite(novelwriter.__issuesurl__)) self.helpMenu.addAction(self.aIssue) # Document > Ask a Question self.aQuestion = QAction(self.tr("Ask a Question (GitHub)"), self) - self.aQuestion.setStatusTip( - self.tr("Ask a question on GitHub at {0}").format(novelwriter.__helpurl__) - ) self.aQuestion.triggered.connect(lambda: self._openWebsite(novelwriter.__helpurl__)) self.helpMenu.addAction(self.aQuestion) # Document > Main Website self.aWebsite = QAction(self.tr("The novelWriter Website"), self) - self.aWebsite.setStatusTip( - self.tr("Open the novelWriter website at {0}").format(novelwriter.__url__) - ) self.aWebsite.triggered.connect(lambda: self._openWebsite(novelwriter.__url__)) self.helpMenu.addAction(self.aWebsite) @@ -1138,7 +1006,6 @@ class GuiMainMenu(QMenuBar): # Document > Check for Updates self.aUpdates = QAction(self.tr("Check for New Release"), self) - self.aUpdates.setStatusTip(self.tr("Check for latest release of novelWriter")) self.aUpdates.triggered.connect(lambda: self.theParent.showUpdatesDialog()) self.helpMenu.addAction(self.aUpdates) diff --git a/novelwriter/gui/projtree.py b/novelwriter/gui/projtree.py index 95b2eab2..8105d429 100644 --- a/novelwriter/gui/projtree.py +++ b/novelwriter/gui/projtree.py @@ -206,7 +206,9 @@ class GuiProjectTree(QTreeWidget): ) if itemType == nwItemType.ROOT: - tHandle = self.theProject.newRoot(trConst(nwLabels.CLASS_NAME[itemClass]), itemClass) + tHandle = self.theProject.newRoot( + trConst(nwLabels.CLASS_NAME_LBL[itemClass]), itemClass + ) if tHandle is None: logger.error("No root item added") return False diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index 5e1a3c53..c1f4e9d3 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -359,7 +359,7 @@ class GuiMain(QMainWindow): if self.hasProject: if not self.closeProject(): self.makeAlert(self.tr( - "Cannot create new project when another project is open." + "Cannot create a new project when another project is open." ), nwAlert.ERROR) return False diff --git a/novelwriter/tools/build.py b/novelwriter/tools/build.py index 8c9be673..cf884292 100644 --- a/novelwriter/tools/build.py +++ b/novelwriter/tools/build.py @@ -343,22 +343,16 @@ class GuiBuildNovel(QDialog): self.fileGroup.setLayout(self.fileForm) self.novelFiles = QSwitch(width=wS, height=hS) - self.novelFiles.setToolTip(self.tr("Include files with layouts other than 'Note'.")) self.novelFiles.setChecked( self.optState.getBool("GuiBuildNovel", "addNovel", True) ) self.noteFiles = QSwitch(width=wS, height=hS) - self.noteFiles.setToolTip(self.tr("Include files with layout 'Note'.")) self.noteFiles.setChecked( self.optState.getBool("GuiBuildNovel", "addNotes", False) ) self.ignoreFlag = QSwitch(width=wS, height=hS) - self.ignoreFlag.setToolTip(self.tr( - "Ignore the 'Include when building project' setting and include " - "all files in the output." - )) self.ignoreFlag.setChecked( self.optState.getBool("GuiBuildNovel", "ignoreFlag", False) ) diff --git a/novelwriter/tools/projwizard.py b/novelwriter/tools/projwizard.py index 8f746ca6..4b15eb2c 100644 --- a/novelwriter/tools/projwizard.py +++ b/novelwriter/tools/projwizard.py @@ -310,22 +310,22 @@ class ProjWizardCustomPage(QWizardPage): self.rootGroup.setLayout(self.rootForm) self.lblPlot = QLabel(self.tr("{0} folder").format( - trConst(nwLabels.CLASS_NAME[nwItemClass.PLOT])) + trConst(nwLabels.CLASS_NAME_LBL[nwItemClass.PLOT])) ) self.lblChar = QLabel(self.tr("{0} folder").format( - trConst(nwLabels.CLASS_NAME[nwItemClass.CHARACTER])) + trConst(nwLabels.CLASS_NAME_LBL[nwItemClass.CHARACTER])) ) self.lblWorld = QLabel(self.tr("{0} folder").format( - trConst(nwLabels.CLASS_NAME[nwItemClass.WORLD])) + trConst(nwLabels.CLASS_NAME_LBL[nwItemClass.WORLD])) ) self.lblTime = QLabel(self.tr("{0} folder").format( - trConst(nwLabels.CLASS_NAME[nwItemClass.TIMELINE])) + trConst(nwLabels.CLASS_NAME_LBL[nwItemClass.TIMELINE])) ) self.lblObject = QLabel(self.tr("{0} folder").format( - trConst(nwLabels.CLASS_NAME[nwItemClass.OBJECT])) + trConst(nwLabels.CLASS_NAME_LBL[nwItemClass.OBJECT])) ) self.lblEntity = QLabel(self.tr("{0} folder").format( - trConst(nwLabels.CLASS_NAME[nwItemClass.ENTITY])) + trConst(nwLabels.CLASS_NAME_LBL[nwItemClass.ENTITY])) ) self.addPlot = QSwitch() diff --git a/sample/content/8a5deb88c0e97.nwd b/sample/content/8a5deb88c0e97.nwd index bc94c4c5..c5b61a9f 100644 --- a/sample/content/8a5deb88c0e97.nwd +++ b/sample/content/8a5deb88c0e97.nwd @@ -3,4 +3,4 @@ %%~kind: NOVEL/DOCUMENT ### Discarded Scene -If you have files you no longer want in your main project, you can move them to the “Outtakes” folder. This is equivalent to turning off the “Include when building project” switch, just that you also put the file away, although the switch can be ignored when building the project, this folder cannot. +If you have files you no longer want in your main project, you can move them to the “Archive” folder. This is equivalent to turning off the “Include when building project” switch, just that you also put the file away, although the switch can be ignored when building the project, this folder cannot. diff --git a/sample/nwProject.nwx b/sample/nwProject.nwx index 437cfa56..30bcdd96 100644 --- a/sample/nwProject.nwx +++ b/sample/nwProject.nwx @@ -1,13 +1,13 @@ - + Sample Project Sample Project Jane Smith Jay Doh - 1283 + 1296 199 - 63909 + 64417 False @@ -121,7 +121,7 @@ 2429 432 14 - 2 + 219 Another Scene @@ -265,7 +265,7 @@ 45 - Outtakes + Archive ROOT ARCHIVE New diff --git a/tests/reference/coreProject_NewCustomA_nwProject.nwx b/tests/reference/coreProject_NewCustomA_nwProject.nwx index a7f38108..3ba6a538 100644 --- a/tests/reference/coreProject_NewCustomA_nwProject.nwx +++ b/tests/reference/coreProject_NewCustomA_nwProject.nwx @@ -85,7 +85,7 @@ False - Entity + Entities ROOT ENTITY New diff --git a/tests/reference/coreProject_NewCustomB_nwProject.nwx b/tests/reference/coreProject_NewCustomB_nwProject.nwx index 93cf1dee..2afad85a 100644 --- a/tests/reference/coreProject_NewCustomB_nwProject.nwx +++ b/tests/reference/coreProject_NewCustomB_nwProject.nwx @@ -85,7 +85,7 @@ False - Entity + Entities ROOT ENTITY New diff --git a/tests/test_core/test_core_index.py b/tests/test_core/test_core_index.py index 6d3a32f9..a059b653 100644 --- a/tests/test_core/test_core_index.py +++ b/tests/test_core/test_core_index.py @@ -281,7 +281,7 @@ def testCoreIndex_ScanText(nwMinimal, mockGUI): assert theIndex.scanText(xHandle, "Hello World!") is False # Create the archive root - aHandle = theProject.newRoot("Outtakes", nwItemClass.ARCHIVE) + aHandle = theProject.newRoot("Archive", nwItemClass.ARCHIVE) assert theProject.projTree[aHandle] is not None xItem.setParent(aHandle) assert theIndex.scanText(xHandle, "Hello World!") is False