Fix minor GUI issues (#1253)
This commit is contained in:
+74
-71
@@ -2063,38 +2063,38 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GuiMainStatus</name>
|
<name>GuiMainStatus</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/statusbar.py" line="221" />
|
<location filename="../novelwriter/gui/statusbar.py" line="222" />
|
||||||
<location filename="../novelwriter/gui/statusbar.py" line="67" />
|
<location filename="../novelwriter/gui/statusbar.py" line="68" />
|
||||||
<source>None</source>
|
<source>None</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/statusbar.py" line="75" />
|
<location filename="../novelwriter/gui/statusbar.py" line="76" />
|
||||||
<source>Editor</source>
|
<source>Editor</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/statusbar.py" line="83" />
|
<location filename="../novelwriter/gui/statusbar.py" line="84" />
|
||||||
<source>Project</source>
|
<source>Project</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/statusbar.py" line="101" />
|
<location filename="../novelwriter/gui/statusbar.py" line="102" />
|
||||||
<source>Session Time</source>
|
<source>Session Time</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/statusbar.py" line="192" />
|
<location filename="../novelwriter/gui/statusbar.py" line="193" />
|
||||||
<source>Words: {0} ({1})</source>
|
<source>Words: {0} ({1})</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/statusbar.py" line="194" />
|
<location filename="../novelwriter/gui/statusbar.py" line="195" />
|
||||||
<source>Project word count (session change)</source>
|
<source>Project word count (session change)</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/statusbar.py" line="196" />
|
<location filename="../novelwriter/gui/statusbar.py" line="197" />
|
||||||
<source>Novel word count (session change)</source>
|
<source>Novel word count (session change)</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
@@ -2102,47 +2102,47 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GuiNovelToolBar</name>
|
<name>GuiNovelToolBar</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/noveltree.py" line="203" />
|
<location filename="../novelwriter/gui/noveltree.py" line="207" />
|
||||||
<source>Novel Outline</source>
|
<source>Outline of {0}</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/noveltree.py" line="209" />
|
<location filename="../novelwriter/gui/noveltree.py" line="215" />
|
||||||
<source>Refresh</source>
|
|
||||||
<translation type="unfinished" />
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../novelwriter/gui/noveltree.py" line="219" />
|
|
||||||
<source>Novel Root</source>
|
<source>Novel Root</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/noveltree.py" line="227" />
|
<location filename="../novelwriter/gui/noveltree.py" line="221" />
|
||||||
|
<source>Refresh</source>
|
||||||
|
<translation type="unfinished" />
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../novelwriter/gui/noveltree.py" line="228" />
|
||||||
<source>Last Column</source>
|
<source>Last Column</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/noveltree.py" line="230" />
|
<location filename="../novelwriter/gui/noveltree.py" line="231" />
|
||||||
<source>Hidden</source>
|
<source>Hidden</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/noveltree.py" line="231" />
|
<location filename="../novelwriter/gui/noveltree.py" line="232" />
|
||||||
<source>Point of View Character</source>
|
<source>Point of View Character</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/noveltree.py" line="232" />
|
<location filename="../novelwriter/gui/noveltree.py" line="233" />
|
||||||
<source>Focus Character</source>
|
<source>Focus Character</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/noveltree.py" line="233" />
|
<location filename="../novelwriter/gui/noveltree.py" line="234" />
|
||||||
<source>Novel Plot</source>
|
<source>Novel Plot</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/noveltree.py" line="236" />
|
<location filename="../novelwriter/gui/noveltree.py" line="237" />
|
||||||
<source>More Options</source>
|
<source>More Options</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
@@ -2150,7 +2150,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GuiNovelTree</name>
|
<name>GuiNovelTree</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/noveltree.py" line="771" />
|
<location filename="../novelwriter/gui/noveltree.py" line="778" />
|
||||||
<source>No meta data</source>
|
<source>No meta data</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
@@ -2158,65 +2158,65 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GuiOutlineDetails</name>
|
<name>GuiOutlineDetails</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="1061" />
|
<location filename="../novelwriter/gui/outline.py" line="1053" />
|
||||||
<location filename="../novelwriter/gui/outline.py" line="1022" />
|
<location filename="../novelwriter/gui/outline.py" line="1014" />
|
||||||
<location filename="../novelwriter/gui/outline.py" line="826" />
|
<location filename="../novelwriter/gui/outline.py" line="818" />
|
||||||
<location filename="../novelwriter/gui/outline.py" line="799" />
|
<location filename="../novelwriter/gui/outline.py" line="791" />
|
||||||
<source>Title</source>
|
<source>Title</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="800" />
|
<location filename="../novelwriter/gui/outline.py" line="792" />
|
||||||
<source>Chapter</source>
|
<source>Chapter</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="801" />
|
<location filename="../novelwriter/gui/outline.py" line="793" />
|
||||||
<source>Scene</source>
|
<source>Scene</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="802" />
|
<location filename="../novelwriter/gui/outline.py" line="794" />
|
||||||
<source>Section</source>
|
<source>Section</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="827" />
|
<location filename="../novelwriter/gui/outline.py" line="819" />
|
||||||
<source>Document</source>
|
<source>Document</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="828" />
|
<location filename="../novelwriter/gui/outline.py" line="820" />
|
||||||
<source>Status</source>
|
<source>Status</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="841" />
|
<location filename="../novelwriter/gui/outline.py" line="833" />
|
||||||
<source>Characters</source>
|
<source>Characters</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="842" />
|
<location filename="../novelwriter/gui/outline.py" line="834" />
|
||||||
<source>Words</source>
|
<source>Words</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="843" />
|
<location filename="../novelwriter/gui/outline.py" line="835" />
|
||||||
<source>Paragraphs</source>
|
<source>Paragraphs</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="856" />
|
<location filename="../novelwriter/gui/outline.py" line="848" />
|
||||||
<source>Synopsis</source>
|
<source>Synopsis</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="928" />
|
<location filename="../novelwriter/gui/outline.py" line="920" />
|
||||||
<source>Title Details</source>
|
<source>Title Details</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="953" />
|
<location filename="../novelwriter/gui/outline.py" line="945" />
|
||||||
<source>Reference Tags</source>
|
<source>Reference Tags</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
@@ -2224,7 +2224,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GuiOutlineHeaderMenu</name>
|
<name>GuiOutlineHeaderMenu</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="761" />
|
<location filename="../novelwriter/gui/outline.py" line="753" />
|
||||||
<source>Select Columns</source>
|
<source>Select Columns</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
@@ -2232,20 +2232,15 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GuiOutlineToolBar</name>
|
<name>GuiOutlineToolBar</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="233" />
|
<location filename="../novelwriter/gui/outline.py" line="234" />
|
||||||
<source>Outline of</source>
|
<source>Outline of</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/gui/outline.py" line="241" />
|
<location filename="../novelwriter/gui/outline.py" line="242" />
|
||||||
<source>Refresh</source>
|
<source>Refresh</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../novelwriter/gui/outline.py" line="290" />
|
|
||||||
<source>All Novel Folders</source>
|
|
||||||
<translation type="unfinished" />
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>GuiPreferences</name>
|
<name>GuiPreferences</name>
|
||||||
@@ -2923,17 +2918,17 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GuiProjectDetails</name>
|
<name>GuiProjectDetails</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="58" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="57" />
|
||||||
<source>Project Details</source>
|
<source>Project Details</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="74" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="73" />
|
||||||
<source>Overview</source>
|
<source>Overview</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="75" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="74" />
|
||||||
<source>Contents</source>
|
<source>Contents</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
@@ -2941,72 +2936,72 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GuiProjectDetailsContents</name>
|
<name>GuiProjectDetailsContents</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="298" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="297" />
|
||||||
<source>Table of Contents</source>
|
<source>Table of Contents</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="317" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="316" />
|
||||||
<source>Title</source>
|
<source>Title</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="318" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="317" />
|
||||||
<source>Words</source>
|
<source>Words</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="319" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="318" />
|
||||||
<source>Pages</source>
|
<source>Pages</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="320" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="319" />
|
||||||
<source>Page</source>
|
<source>Page</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="321" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="320" />
|
||||||
<source>Progress</source>
|
<source>Progress</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="356" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="355" />
|
||||||
<source>Typical word count for a 5 by 8 inch book page with 11 pt font is 350.</source>
|
<source>Typical word count for a 5 by 8 inch book page with 11 pt font is 350.</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="359" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="358" />
|
||||||
<source>Start counting page numbers from this page.</source>
|
<source>Start counting page numbers from this page.</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="362" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="361" />
|
||||||
<source>Assume a new chapter or partition always start on an odd numbered page.</source>
|
<source>Assume a new chapter or partition always start on an odd numbered page.</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="365" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="364" />
|
||||||
<source>Words per page</source>
|
<source>Words per page</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="376" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="375" />
|
||||||
<source>Count pages from</source>
|
<source>Count pages from</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="387" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="386" />
|
||||||
<source>Clear double pages</source>
|
<source>Clear double pages</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="462" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="449" />
|
||||||
<source>END</source>
|
<source>END</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="517" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="503" />
|
||||||
<source>Untitled</source>
|
<source>Untitled</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
@@ -3014,42 +3009,42 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GuiProjectDetailsMain</name>
|
<name>GuiProjectDetailsMain</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="169" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="168" />
|
||||||
<source>Working Title: {0}</source>
|
<source>Working Title: {0}</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="178" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="177" />
|
||||||
<source>By {0}</source>
|
<source>By {0}</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="190" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="189" />
|
||||||
<source>Words</source>
|
<source>Words</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="193" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="192" />
|
||||||
<source>Chapters</source>
|
<source>Chapters</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="196" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="195" />
|
||||||
<source>Scenes</source>
|
<source>Scenes</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="199" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="198" />
|
||||||
<source>Revisions</source>
|
<source>Revisions</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="202" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="201" />
|
||||||
<source>Editing Time</source>
|
<source>Editing Time</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../novelwriter/dialogs/projdetails.py" line="222" />
|
<location filename="../novelwriter/dialogs/projdetails.py" line="221" />
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
@@ -4004,6 +3999,14 @@
|
|||||||
<translation type="unfinished" />
|
<translation type="unfinished" />
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>NovelSelector</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../novelwriter/gui/components.py" line="106" />
|
||||||
|
<source>All Novel Folders</source>
|
||||||
|
<translation type="unfinished" />
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ProjWizardCustomPage</name>
|
<name>ProjWizardCustomPage</name>
|
||||||
<message>
|
<message>
|
||||||
|
|||||||
@@ -30,15 +30,14 @@ import novelwriter
|
|||||||
from PyQt5.QtCore import Qt, QSize, pyqtSlot
|
from PyQt5.QtCore import Qt, QSize, pyqtSlot
|
||||||
from PyQt5.QtGui import QFont
|
from PyQt5.QtGui import QFont
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
QAbstractItemView, QComboBox, QDialogButtonBox, QGridLayout, QHBoxLayout,
|
QAbstractItemView, QDialogButtonBox, QGridLayout, QHBoxLayout, QLabel,
|
||||||
QLabel, QLineEdit, QSpinBox, QTreeWidget, QTreeWidgetItem, QVBoxLayout,
|
QLineEdit, QSpinBox, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
|
||||||
QWidget
|
|
||||||
)
|
)
|
||||||
|
|
||||||
from novelwriter.enum import nwItemClass
|
|
||||||
from novelwriter.common import numberToRoman
|
from novelwriter.common import numberToRoman
|
||||||
from novelwriter.custom import PagedDialog, QSwitch
|
from novelwriter.custom import PagedDialog, QSwitch
|
||||||
from novelwriter.constants import nwLabels, nwUnicode
|
from novelwriter.constants import nwUnicode
|
||||||
|
from novelwriter.gui.components import NovelSelector
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -297,9 +296,9 @@ class GuiProjectDetailsContents(QWidget):
|
|||||||
|
|
||||||
self.tocLabel = QLabel("<b>%s</b>" % self.tr("Table of Contents"))
|
self.tocLabel = QLabel("<b>%s</b>" % self.tr("Table of Contents"))
|
||||||
|
|
||||||
self.novelValue = QComboBox(self)
|
self.novelValue = NovelSelector(self, self.theProject, self.mainGui)
|
||||||
self.novelValue.setMinimumWidth(self.mainConf.pxInt(200))
|
self.novelValue.setMinimumWidth(self.mainConf.pxInt(200))
|
||||||
self.novelValue.currentIndexChanged.connect(self._novelValueChanged)
|
self.novelValue.novelSelectionChanged.connect(self._novelValueChanged)
|
||||||
|
|
||||||
self.headBox = QHBoxLayout()
|
self.headBox = QHBoxLayout()
|
||||||
self.headBox.addWidget(self.tocLabel)
|
self.headBox.addWidget(self.tocLabel)
|
||||||
@@ -431,10 +430,9 @@ class GuiProjectDetailsContents(QWidget):
|
|||||||
"""Populate the tree.
|
"""Populate the tree.
|
||||||
"""
|
"""
|
||||||
self._currentRoot = None
|
self._currentRoot = None
|
||||||
self._populateNovelList()
|
self.novelValue.updateList()
|
||||||
|
self.novelValue.setHandle(self.novelValue.firstHandle)
|
||||||
rootHandle = self.novelValue.currentData()
|
self._prepareData(self.novelValue.firstHandle)
|
||||||
self._prepareData(rootHandle)
|
|
||||||
self._populateTree()
|
self._populateTree()
|
||||||
|
|
||||||
return
|
return
|
||||||
@@ -443,17 +441,6 @@ class GuiProjectDetailsContents(QWidget):
|
|||||||
# Internal Functions
|
# Internal Functions
|
||||||
##
|
##
|
||||||
|
|
||||||
def _populateNovelList(self):
|
|
||||||
"""Fill the novel combo box with a list of all novel folders.
|
|
||||||
"""
|
|
||||||
self.novelValue.clear()
|
|
||||||
|
|
||||||
tIcon = self.mainTheme.getIcon(nwLabels.CLASS_ICON[nwItemClass.NOVEL])
|
|
||||||
for tHandle, nwItem in self.theProject.tree.iterRoots(nwItemClass.NOVEL):
|
|
||||||
self.novelValue.addItem(tIcon, nwItem.itemName, tHandle)
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
def _prepareData(self, rootHandle):
|
def _prepareData(self, rootHandle):
|
||||||
"""Extract the information from the project index.
|
"""Extract the information from the project index.
|
||||||
"""
|
"""
|
||||||
@@ -466,15 +453,14 @@ class GuiProjectDetailsContents(QWidget):
|
|||||||
# Slots
|
# Slots
|
||||||
##
|
##
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot(str)
|
||||||
def _novelValueChanged(self):
|
def _novelValueChanged(self, tHandle):
|
||||||
"""Refresh the tree with another root item.
|
"""Refresh the tree with another root item.
|
||||||
"""
|
"""
|
||||||
rootHandle = self.novelValue.currentData()
|
if tHandle != self._currentRoot:
|
||||||
if rootHandle != self._currentRoot:
|
self._prepareData(tHandle)
|
||||||
self._prepareData(rootHandle)
|
|
||||||
self._populateTree()
|
self._populateTree()
|
||||||
self._currentRoot = rootHandle
|
self._currentRoot = self.novelValue.handle
|
||||||
return
|
return
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
|
|||||||
@@ -40,20 +40,35 @@ class NovelSelector(QComboBox):
|
|||||||
|
|
||||||
novelSelectionChanged = pyqtSignal(str)
|
novelSelectionChanged = pyqtSignal(str)
|
||||||
|
|
||||||
def __init__(self, parent, project, theme):
|
def __init__(self, parent, project, mainGui):
|
||||||
super().__init__(parent=parent)
|
super().__init__(parent=parent)
|
||||||
|
|
||||||
|
self._mainGui = mainGui
|
||||||
self._project = project
|
self._project = project
|
||||||
self._theme = theme
|
self._theme = mainGui.mainTheme
|
||||||
self._blockSignal = False
|
self._blockSignal = False
|
||||||
|
self._firstHandle = None
|
||||||
|
|
||||||
self.currentIndexChanged.connect(self._indexChanged)
|
self.currentIndexChanged.connect(self._indexChanged)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
##
|
||||||
|
# Properties
|
||||||
|
##
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def handle(self):
|
def handle(self):
|
||||||
return self.currentData()
|
return self.currentData()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def firstHandle(self):
|
||||||
|
return self._firstHandle
|
||||||
|
|
||||||
|
##
|
||||||
|
# Methods
|
||||||
|
##
|
||||||
|
|
||||||
def setHandle(self, tHandle, blockSignal=True):
|
def setHandle(self, tHandle, blockSignal=True):
|
||||||
"""Set the currently selected handle.
|
"""Set the currently selected handle.
|
||||||
"""
|
"""
|
||||||
@@ -71,6 +86,7 @@ class NovelSelector(QComboBox):
|
|||||||
"""Rebuild the list of novel items.
|
"""Rebuild the list of novel items.
|
||||||
"""
|
"""
|
||||||
self._blockSignal = True
|
self._blockSignal = True
|
||||||
|
self._firstHandle = None
|
||||||
self.clear()
|
self.clear()
|
||||||
|
|
||||||
icon = self._theme.getIcon(nwLabels.CLASS_ICON[nwItemClass.NOVEL])
|
icon = self._theme.getIcon(nwLabels.CLASS_ICON[nwItemClass.NOVEL])
|
||||||
@@ -82,13 +98,12 @@ class NovelSelector(QComboBox):
|
|||||||
else:
|
else:
|
||||||
name = nwItem.itemName
|
name = nwItem.itemName
|
||||||
self.addItem(icon, nwItem.itemName, tHandle)
|
self.addItem(icon, nwItem.itemName, tHandle)
|
||||||
|
if self._firstHandle is None:
|
||||||
|
self._firstHandle = tHandle
|
||||||
|
|
||||||
if includeAll:
|
if includeAll:
|
||||||
self.insertSeparator(self.count())
|
self.insertSeparator(self.count())
|
||||||
if prefix:
|
self.addItem(icon, self.tr("All Novel Folders"), "")
|
||||||
self.addItem(prefix.format(self.tr("All Novel Folders")), "")
|
|
||||||
else:
|
|
||||||
self.addItem(icon, self.tr("All Novel Folders"), "")
|
|
||||||
|
|
||||||
self.setHandle(handle)
|
self.setHandle(handle)
|
||||||
self.setEnabled(self.count() > 1)
|
self.setEnabled(self.count() > 1)
|
||||||
@@ -102,6 +117,8 @@ class NovelSelector(QComboBox):
|
|||||||
|
|
||||||
@pyqtSlot(int)
|
@pyqtSlot(int)
|
||||||
def _indexChanged(self, index):
|
def _indexChanged(self, index):
|
||||||
|
"""Re-emit the change of selected novel signal, unless blocked.
|
||||||
|
"""
|
||||||
if not self._blockSignal:
|
if not self._blockSignal:
|
||||||
self.novelSelectionChanged.emit(self.currentData())
|
self.novelSelectionChanged.emit(self.currentData())
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -191,6 +191,7 @@ class GuiNovelToolBar(QWidget):
|
|||||||
|
|
||||||
self.mainConf = novelwriter.CONFIG
|
self.mainConf = novelwriter.CONFIG
|
||||||
self.novelView = novelView
|
self.novelView = novelView
|
||||||
|
self.mainGui = novelView.mainGui
|
||||||
self.theProject = novelView.mainGui.theProject
|
self.theProject = novelView.mainGui.theProject
|
||||||
self.mainTheme = novelView.mainGui.mainTheme
|
self.mainTheme = novelView.mainGui.mainTheme
|
||||||
|
|
||||||
@@ -204,12 +205,17 @@ class GuiNovelToolBar(QWidget):
|
|||||||
selFont = self.font()
|
selFont = self.font()
|
||||||
selFont.setWeight(QFont.Bold)
|
selFont.setWeight(QFont.Bold)
|
||||||
self.novelPrefix = self.tr("Outline of {0}")
|
self.novelPrefix = self.tr("Outline of {0}")
|
||||||
self.novelValue = NovelSelector(self, self.theProject, self.mainTheme)
|
self.novelValue = NovelSelector(self, self.theProject, self.mainGui)
|
||||||
self.novelValue.setFont(selFont)
|
self.novelValue.setFont(selFont)
|
||||||
self.novelValue.setMinimumWidth(self.mainConf.pxInt(150))
|
self.novelValue.setMinimumWidth(self.mainConf.pxInt(150))
|
||||||
self.novelValue.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
self.novelValue.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
||||||
self.novelValue.novelSelectionChanged.connect(self.setCurrentRoot)
|
self.novelValue.novelSelectionChanged.connect(self.setCurrentRoot)
|
||||||
|
|
||||||
|
self.tbNovel = QToolButton(self)
|
||||||
|
self.tbNovel.setToolTip(self.tr("Novel Root"))
|
||||||
|
self.tbNovel.setIconSize(QSize(iPx, iPx))
|
||||||
|
self.tbNovel.clicked.connect(self._openNovelSelector)
|
||||||
|
|
||||||
# Refresh Button
|
# Refresh Button
|
||||||
self.tbRefresh = QToolButton(self)
|
self.tbRefresh = QToolButton(self)
|
||||||
self.tbRefresh.setToolTip(self.tr("Refresh"))
|
self.tbRefresh.setToolTip(self.tr("Refresh"))
|
||||||
@@ -236,6 +242,7 @@ class GuiNovelToolBar(QWidget):
|
|||||||
# Assemble
|
# Assemble
|
||||||
self.outerBox = QHBoxLayout()
|
self.outerBox = QHBoxLayout()
|
||||||
self.outerBox.addWidget(self.novelValue)
|
self.outerBox.addWidget(self.novelValue)
|
||||||
|
self.outerBox.addWidget(self.tbNovel)
|
||||||
self.outerBox.addWidget(self.tbRefresh)
|
self.outerBox.addWidget(self.tbRefresh)
|
||||||
self.outerBox.addWidget(self.tbMore)
|
self.outerBox.addWidget(self.tbMore)
|
||||||
self.outerBox.setContentsMargins(mPx, mPx, 0, mPx)
|
self.outerBox.setContentsMargins(mPx, mPx, 0, mPx)
|
||||||
@@ -257,6 +264,7 @@ class GuiNovelToolBar(QWidget):
|
|||||||
"""Update theme elements.
|
"""Update theme elements.
|
||||||
"""
|
"""
|
||||||
# Icons
|
# Icons
|
||||||
|
self.tbNovel.setIcon(self.mainTheme.getIcon("cls_novel"))
|
||||||
self.tbRefresh.setIcon(self.mainTheme.getIcon("refresh"))
|
self.tbRefresh.setIcon(self.mainTheme.getIcon("refresh"))
|
||||||
self.tbMore.setIcon(self.mainTheme.getIcon("menu"))
|
self.tbMore.setIcon(self.mainTheme.getIcon("menu"))
|
||||||
|
|
||||||
@@ -271,6 +279,7 @@ class GuiNovelToolBar(QWidget):
|
|||||||
"QToolButton:hover {{border: none; background: rgba({1},{2},{3},0.2);}}"
|
"QToolButton:hover {{border: none; background: rgba({1},{2},{3},0.2);}}"
|
||||||
).format(self.mainConf.pxInt(2), fadeCol.red(), fadeCol.green(), fadeCol.blue())
|
).format(self.mainConf.pxInt(2), fadeCol.red(), fadeCol.green(), fadeCol.blue())
|
||||||
|
|
||||||
|
self.tbNovel.setStyleSheet(buttonStyle)
|
||||||
self.tbRefresh.setStyleSheet(buttonStyle)
|
self.tbRefresh.setStyleSheet(buttonStyle)
|
||||||
self.tbMore.setStyleSheet(buttonStyle)
|
self.tbMore.setStyleSheet(buttonStyle)
|
||||||
|
|
||||||
@@ -279,10 +288,7 @@ class GuiNovelToolBar(QWidget):
|
|||||||
"QComboBox::drop-down {border-style: none}"
|
"QComboBox::drop-down {border-style: none}"
|
||||||
)
|
)
|
||||||
self.novelValue.updateList(prefix=self.novelPrefix)
|
self.novelValue.updateList(prefix=self.novelPrefix)
|
||||||
if self.novelValue.count() > 1:
|
self.tbNovel.setVisible(self.novelValue.count() > 1)
|
||||||
self.novelValue.setToolTip(self.tr("Click to change root folder"))
|
|
||||||
else:
|
|
||||||
self.novelValue.setToolTip("")
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -297,10 +303,7 @@ class GuiNovelToolBar(QWidget):
|
|||||||
"""Build the novel root menu.
|
"""Build the novel root menu.
|
||||||
"""
|
"""
|
||||||
self.novelValue.updateList(prefix=self.novelPrefix)
|
self.novelValue.updateList(prefix=self.novelPrefix)
|
||||||
if self.novelValue.count() > 1:
|
self.tbNovel.setVisible(self.novelValue.count() > 1)
|
||||||
self.novelValue.setToolTip(self.tr("Click to change root folder"))
|
|
||||||
else:
|
|
||||||
self.novelValue.setToolTip("")
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def setCurrentRoot(self, rootHandle):
|
def setCurrentRoot(self, rootHandle):
|
||||||
@@ -321,6 +324,13 @@ class GuiNovelToolBar(QWidget):
|
|||||||
# Private Slots
|
# Private Slots
|
||||||
##
|
##
|
||||||
|
|
||||||
|
@pyqtSlot()
|
||||||
|
def _openNovelSelector(self):
|
||||||
|
"""Trigger the dropdown list of the novel selector.
|
||||||
|
"""
|
||||||
|
self.novelValue.showPopup()
|
||||||
|
return
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def _refreshNovelTree(self):
|
def _refreshNovelTree(self):
|
||||||
"""Rebuild the current tree.
|
"""Rebuild the current tree.
|
||||||
@@ -519,13 +529,14 @@ class GuiNovelTree(QTreeWidget):
|
|||||||
return
|
return
|
||||||
|
|
||||||
def getSelectedHandle(self):
|
def getSelectedHandle(self):
|
||||||
"""Get the currently selected handle. If multiple items are
|
"""Get the currently selected or active handle. If multiple
|
||||||
selected, return the first.
|
items are selected, return the first.
|
||||||
"""
|
"""
|
||||||
selItem = self.selectedItems()
|
selList = self.selectedItems()
|
||||||
if selItem:
|
trItem = selList[0] if selList else self.currentItem()
|
||||||
tHandle = selItem[0].data(self.C_TITLE, self.D_HANDLE)
|
if isinstance(trItem, QTreeWidgetItem):
|
||||||
sTitle = selItem[0].data(self.C_TITLE, self.D_TITLE)
|
tHandle = trItem.data(self.C_TITLE, self.D_HANDLE)
|
||||||
|
sTitle = trItem.data(self.C_TITLE, self.D_TITLE)
|
||||||
return tHandle, sTitle
|
return tHandle, sTitle
|
||||||
return None, None
|
return None, None
|
||||||
|
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ class GuiOutlineToolBar(QToolBar):
|
|||||||
self.novelLabel = QLabel(self.tr("Outline of"))
|
self.novelLabel = QLabel(self.tr("Outline of"))
|
||||||
self.novelLabel.setContentsMargins(0, 0, mPx, 0)
|
self.novelLabel.setContentsMargins(0, 0, mPx, 0)
|
||||||
|
|
||||||
self.novelValue = NovelSelector(self, self.theProject, self.mainTheme)
|
self.novelValue = NovelSelector(self, self.theProject, self.mainGui)
|
||||||
self.novelValue.setMinimumWidth(self.mainConf.pxInt(200))
|
self.novelValue.setMinimumWidth(self.mainConf.pxInt(200))
|
||||||
self.novelValue.novelSelectionChanged.connect(self._novelValueChanged)
|
self.novelValue.novelSelectionChanged.connect(self._novelValueChanged)
|
||||||
|
|
||||||
|
|||||||
@@ -93,6 +93,11 @@ def testDlgProjDetails_Dialog(qtbot, nwGUI, nwLipsum):
|
|||||||
assert tocTree.topLevelItem(i).text(tocTab.C_PAGES) == thePages[i]
|
assert tocTree.topLevelItem(i).text(tocTab.C_PAGES) == thePages[i]
|
||||||
assert tocTree.topLevelItem(i).text(tocTab.C_PAGE) == thePage[i]
|
assert tocTree.topLevelItem(i).text(tocTab.C_PAGE) == thePage[i]
|
||||||
|
|
||||||
|
# Re-populate
|
||||||
|
assert tocTab._currentRoot is None
|
||||||
|
tocTab._novelValueChanged("7a992350f3eb6") # Not a root
|
||||||
|
assert tocTab._currentRoot == "b3643d0f92e32" # The actual novel root
|
||||||
|
|
||||||
# qtbot.stop()
|
# qtbot.stop()
|
||||||
|
|
||||||
# Clean Up
|
# Clean Up
|
||||||
|
|||||||
Reference in New Issue
Block a user