View Issue Details

IDProjectCategoryView StatusLast Update
0017956ScribusUser Interfacepublic2026-08-30 09:39
Reporterqirat Assigned To 
PrioritynormalSeverityminorReproducibilityN/A
Status newResolutionopen 
PlatformLinuxOSFedora WorkstationOS Version44
Product Version1.7.4.svn 
Summary0017956: [patch] External Tools Preferences UI Polish
Description- Reworks `prefs_externaltoolsbase.ui` from a scroll-area layout to a compact single-column layout.
- Groups controls into PostScript Interpreter, External Applications, and Render Frames.
- Consolidates external application paths into one aligned grid and replaces repeated text browse buttons with icon-only `QToolButton`s using `IconManager`.
- Reorganizes Render Frame configuration actions as Up / Down / Edit / Add / Delete beside the list, with tooltips and accessible names.
- Removes the unused `latexEmbeddedEditorCheckBox` / Use Embedded Editor UI.
- Places Render Frame DPI directly after Force DPI: and connects `latexForceDPICheckBox::toggled(bool)` to `latexResolutionSpinBox::setEnabled(bool)`.
- Sets both DPI spinboxes to a consistent 90 px width.
- Renames the pane-wide action to Rescan Tools and keeps the existing reload icon.
- Reorders TAB navigation to match the new visual layout.
- No preference schema/storage changes; external-tool behavior is otherwise unchanged.
- Files touched: `prefs_externaltoolsbase.ui`, `prefs_externaltools.cpp`.
Additional Information+Screenshots for current and proposed UI
Tags#please_test
Attached Files
external-tools-preferences-layout-r27797-v1.8.patch (48,216 bytes)   
Index: scribus/ui/preferences/prefs_externaltoolsbase.ui
===================================================================
--- scribus/ui/preferences/prefs_externaltoolsbase.ui	(revision 27797)
+++ scribus/ui/preferences/prefs_externaltoolsbase.ui	(working copy)
@@ -48,715 +48,557 @@
     </widget>
    </item>
    <item>
-    <widget class="QScrollArea" name="scrollArea">
-     <property name="widgetResizable">
-      <bool>true</bool>
+    <widget class="QGroupBox" name="postScriptGroupBox">
+     <property name="title">
+      <string>&amp;PostScript Interpreter (Ghostscript)</string>
      </property>
-     <widget class="QWidget" name="scrollAreaWidgetContents">
-      <property name="geometry">
-       <rect>
-        <x>0</x>
-        <y>0</y>
-        <width>732</width>
-        <height>969</height>
-       </rect>
+     <layout class="QGridLayout" name="postScriptLayout">
+      <property name="horizontalSpacing">
+       <number>6</number>
       </property>
-      <layout class="QVBoxLayout" name="verticalLayout_3">
-       <item>
-        <widget class="QLabel" name="label_2">
-         <property name="font">
-          <font>
-           <weight>75</weight>
-           <bold>true</bold>
-          </font>
-         </property>
-         <property name="text">
-          <string>PostScript Interpreter</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="Line" name="line">
-         <property name="orientation">
-          <enum>Qt::Horizontal</enum>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <layout class="QHBoxLayout">
-         <item>
-          <widget class="QLabel" name="psToolLabel">
-           <property name="text">
-            <string>&amp;Name of Executable:</string>
-           </property>
-           <property name="wordWrap">
-            <bool>false</bool>
-           </property>
-           <property name="buddy">
-            <cstring>psToolLineEdit</cstring>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QLineEdit" name="psToolLineEdit">
-           <property name="toolTip">
-            <string>&lt;qt&gt;Add the path for the Ghostscript interpreter. On Windows, please note it is important to note you need to use the program named gswin32c.exe - NOT gswin32.exe. Otherwise, this maybe cause a hang when starting Scribus.&lt;/qt&gt;</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="psToolChangeButton">
-           <property name="text">
-            <string>&amp;Change...</string>
-           </property>
-           <property name="shortcut">
-            <string>Alt+C</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <layout class="QHBoxLayout">
-         <item>
-          <widget class="QCheckBox" name="psAntialiasTextCheckBox">
-           <property name="toolTip">
-            <string>Antialias text for EPS and PDF onscreen rendering</string>
-           </property>
-           <property name="text">
-            <string>Antialias &amp;Text</string>
-           </property>
-           <property name="shortcut">
-            <string>Alt+T</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <spacer>
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeType">
-            <enum>QSizePolicy::Minimum</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>20</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-         <item>
-          <widget class="QCheckBox" name="psAntialiasGraphicsCheckBox">
-           <property name="toolTip">
-            <string>Antialias graphics for EPS and PDF onscreen rendering</string>
-           </property>
-           <property name="text">
-            <string>Antialias &amp;Graphics</string>
-           </property>
-           <property name="shortcut">
-            <string>Alt+G</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <spacer>
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeType">
-            <enum>QSizePolicy::Minimum</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>20</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-         <item>
-          <widget class="QLabel" name="psResolutionLabel">
-           <property name="text">
-            <string>Resolution:</string>
-           </property>
-           <property name="wordWrap">
-            <bool>false</bool>
-           </property>
-           <property name="buddy">
-            <cstring>psResolutionSpinBox</cstring>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QSpinBox" name="psResolutionSpinBox">
-           <property name="suffix">
-            <string> dpi</string>
-           </property>
-           <property name="minimum">
-            <number>10</number>
-           </property>
-           <property name="maximum">
-            <number>2400</number>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <spacer name="horizontalSpacer">
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>40</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <spacer name="verticalSpacer">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeType">
-          <enum>QSizePolicy::Fixed</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>20</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item>
-        <widget class="QLabel" name="label_3">
-         <property name="font">
-          <font>
-           <weight>75</weight>
-           <bold>true</bold>
-          </font>
-         </property>
-         <property name="text">
-          <string>Image Processing Tool</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="Line" name="line_3">
-         <property name="orientation">
-          <enum>Qt::Horizontal</enum>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <layout class="QHBoxLayout" name="horizontalLayout_3">
-         <item>
-          <widget class="QLabel" name="imageToolLabel">
-           <property name="text">
-            <string>Name of &amp;Executable:</string>
-           </property>
-           <property name="wordWrap">
-            <bool>false</bool>
-           </property>
-           <property name="buddy">
-            <cstring>imageToolLineEdit</cstring>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QLineEdit" name="imageToolLineEdit">
-           <property name="toolTip">
-            <string>&lt;qt&gt;File system location for graphics editor&lt;/qt&gt;</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="imageToolChangeButton">
-           <property name="text">
-            <string>&amp;Change...</string>
-           </property>
-           <property name="shortcut">
-            <string>Alt+C</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <spacer name="verticalSpacer_2">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeType">
-          <enum>QSizePolicy::Fixed</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>20</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item>
-        <widget class="QLabel" name="label_4">
-         <property name="font">
-          <font>
-           <weight>75</weight>
-           <bold>true</bold>
-          </font>
-         </property>
-         <property name="text">
-          <string>Web Browser</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="Line" name="line_4">
-         <property name="orientation">
-          <enum>Qt::Horizontal</enum>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <layout class="QHBoxLayout" name="horizontalLayout_4">
-         <item>
-          <widget class="QLabel" name="webBrowserLabel">
-           <property name="text">
-            <string>Name of &amp;Executable:</string>
-           </property>
-           <property name="wordWrap">
-            <bool>false</bool>
-           </property>
-           <property name="buddy">
-            <cstring>imageToolLineEdit</cstring>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QLineEdit" name="webBrowserLineEdit">
-           <property name="toolTip">
-            <string>&lt;qt&gt;File system location for web browser&lt;/qt&gt;</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="webBrowserChangeButton">
-           <property name="text">
-            <string>&amp;Change...</string>
-           </property>
-           <property name="shortcut">
-            <string>Alt+C</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <spacer name="verticalSpacer_3">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeType">
-          <enum>QSizePolicy::Fixed</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>20</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item>
-        <widget class="QLabel" name="label_8">
-         <property name="font">
-          <font>
-           <weight>75</weight>
-           <bold>true</bold>
-          </font>
-         </property>
-         <property name="text">
-          <string>PDF Viewer</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="Line" name="line_6">
-         <property name="orientation">
-          <enum>Qt::Horizontal</enum>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <layout class="QHBoxLayout" name="horizontalLayout_2">
-         <item>
-          <widget class="QLabel" name="pdfViewerLabel">
-           <property name="text">
-            <string>Name of &amp;Executable:</string>
-           </property>
-           <property name="buddy">
-            <cstring>pdfViewerLineEdit</cstring>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QLineEdit" name="pdfViewerLineEdit">
-           <property name="toolTip">
-            <string>&lt;qt&gt;File system location for PDF viewer&lt;/qt&gt;</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="pdfViewerChangeButton">
-           <property name="text">
-            <string>&amp;Change...</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <spacer name="verticalSpacer_6">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeType">
-          <enum>QSizePolicy::Fixed</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>20</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item>
-        <widget class="QLabel" name="label_7">
-         <property name="font">
-          <font>
-           <weight>75</weight>
-           <bold>true</bold>
-          </font>
-         </property>
-         <property name="text">
-          <string>Uniconvertor</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="Line" name="line_7">
-         <property name="orientation">
-          <enum>Qt::Horizontal</enum>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <layout class="QHBoxLayout" name="horizontalLayout_5">
-         <item>
-          <widget class="QLabel" name="uniconverterLabel">
-           <property name="text">
-            <string>Name of &amp;Executable:</string>
-           </property>
-           <property name="wordWrap">
-            <bool>false</bool>
-           </property>
-           <property name="buddy">
-            <cstring>imageToolLineEdit</cstring>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QLineEdit" name="uniconvertorLineEdit">
-           <property name="toolTip">
-            <string>&lt;qt&gt;File system location for Uniconvertor&lt;/qt&gt;</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="uniconvertorChangeButton">
-           <property name="text">
-            <string>&amp;Change...</string>
-           </property>
-           <property name="shortcut">
-            <string>Alt+C</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <spacer name="verticalSpacer_5">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeType">
-          <enum>QSizePolicy::Fixed</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>20</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item>
-        <widget class="QLabel" name="label_5">
-         <property name="font">
-          <font>
-           <weight>75</weight>
-           <bold>true</bold>
-          </font>
-         </property>
-         <property name="text">
-          <string>Render Frames</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="Line" name="line_2">
-         <property name="orientation">
-          <enum>Qt::Horizontal</enum>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLabel" name="label">
-         <property name="text">
-          <string>Configurations:</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <layout class="QHBoxLayout" name="horizontalLayout">
-         <item>
-          <widget class="QListWidget" name="latexConfigsListWidget"/>
-         </item>
-         <item>
-          <layout class="QVBoxLayout" name="verticalLayout_2">
-           <item>
-            <widget class="QPushButton" name="latexConfigUpButton">
-             <property name="text">
-              <string>Up</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QPushButton" name="latexConfigDownButton">
-             <property name="text">
-              <string>Down</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QPushButton" name="latexConfigAddButton">
-             <property name="text">
-              <string>Add</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QPushButton" name="latexConfigDeleteButton">
-             <property name="text">
-              <string>Delete</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QPushButton" name="latexConfigChangeCommandButton">
-             <property name="text">
-              <string>Change...</string>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <layout class="QHBoxLayout">
-         <item>
-          <widget class="QLabel" name="latexEditorLabel">
-           <property name="text">
-            <string>External Editor:</string>
-           </property>
-           <property name="wordWrap">
-            <bool>false</bool>
-           </property>
-           <property name="buddy">
-            <cstring>latexEditorLineEdit</cstring>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QLineEdit" name="latexEditorLineEdit">
-           <property name="toolTip">
-            <string>&lt;qt&gt;Path to the editor executable&lt;/qt&gt;</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="latexEditorChangeButton">
-           <property name="text">
-            <string>&amp;Change...</string>
-           </property>
-           <property name="shortcut">
-            <string>Alt+C</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <layout class="QHBoxLayout">
-         <item>
-          <widget class="QCheckBox" name="latexEmptyFrameCheckBox">
-           <property name="text">
-            <string>Start with empty frame</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <spacer>
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeType">
-            <enum>QSizePolicy::Minimum</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>20</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-         <item>
-          <widget class="QCheckBox" name="latexEmbeddedEditorCheckBox">
-           <property name="enabled">
-            <bool>true</bool>
-           </property>
-           <property name="text">
-            <string>Use Embedded Editor</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <spacer name="horizontalSpacer_2">
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>40</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <layout class="QHBoxLayout">
-         <item>
-          <widget class="QCheckBox" name="latexForceDPICheckBox">
-           <property name="toolTip">
-            <string>Always use the configured DPI setting for calculating the size, even if the image file reports something different</string>
-           </property>
-           <property name="text">
-            <string>Force DPI</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <spacer>
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeType">
-            <enum>QSizePolicy::Fixed</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>20</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-         <item>
-          <widget class="QLabel" name="latexResolutionLabel">
-           <property name="text">
-            <string>Resolution:</string>
-           </property>
-           <property name="wordWrap">
-            <bool>false</bool>
-           </property>
-           <property name="buddy">
-            <cstring>latexResolutionSpinBox</cstring>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QSpinBox" name="latexResolutionSpinBox">
-           <property name="suffix">
-            <string> dpi</string>
-           </property>
-           <property name="minimum">
-            <number>10</number>
-           </property>
-           <property name="maximum">
-            <number>2400</number>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <spacer name="horizontalSpacer_3">
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>40</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <spacer name="verticalSpacer_4">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeType">
-          <enum>QSizePolicy::MinimumExpanding</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>0</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
+      <property name="verticalSpacing">
+       <number>4</number>
+      </property>
+      <item row="0" column="0">
+       <widget class="QLabel" name="psToolLabel">
+        <property name="text">
+         <string>Executable:</string>
+        </property>
+        <property name="buddy">
+         <cstring>psToolLineEdit</cstring>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="psToolLineEdit">
+        <property name="toolTip">
+         <string>&lt;qt&gt;Path to the Ghostscript interpreter. On Windows, use the console executable (gswin32c.exe) rather than gswin32.exe to avoid startup hangs.&lt;/qt&gt;</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QToolButton" name="psToolChangeButton">
+        <property name="toolTip">
+         <string>Choose the Ghostscript executable.</string>
+        </property>
+        <property name="accessibleName">
+         <string>Choose Ghostscript executable</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+        <property name="toolButtonStyle">
+         <enum>Qt::ToolButtonIconOnly</enum>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" colspan="3">
+       <layout class="QHBoxLayout" name="postScriptOptionsLayout">
+        <property name="spacing">
+         <number>12</number>
+        </property>
+        <item>
+         <widget class="QCheckBox" name="psAntialiasTextCheckBox">
+          <property name="toolTip">
+           <string>Antialias text for EPS and PDF onscreen rendering</string>
+          </property>
+          <property name="text">
+           <string>Antialias Text</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QCheckBox" name="psAntialiasGraphicsCheckBox">
+          <property name="toolTip">
+           <string>Antialias graphics for EPS and PDF onscreen rendering</string>
+          </property>
+          <property name="text">
+           <string>Antialias Graphics</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="postScriptOptionsSpacer">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeType">
+           <enum>QSizePolicy::Expanding</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>20</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QLabel" name="psResolutionLabel">
+          <property name="text">
+           <string>Resolution:</string>
+          </property>
+          <property name="buddy">
+           <cstring>psResolutionSpinBox</cstring>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QSpinBox" name="psResolutionSpinBox">
+          <property name="minimumSize">
+           <size>
+            <width>90</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="maximumSize">
+           <size>
+            <width>90</width>
+            <height>16777215</height>
+           </size>
+          </property>
+          <property name="toolTip">
+           <string>Set the resolution used by the PostScript interpreter for rendering.</string>
+          </property>
+          <property name="suffix">
+           <string> DPI</string>
+          </property>
+          <property name="minimum">
+           <number>10</number>
+          </property>
+          <property name="maximum">
+           <number>2400</number>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="externalApplicationsGroupBox">
+     <property name="title">
+      <string>External &amp;Applications</string>
+     </property>
+     <layout class="QGridLayout" name="externalApplicationsLayout">
+      <property name="horizontalSpacing">
+       <number>6</number>
+      </property>
+      <property name="verticalSpacing">
+       <number>4</number>
+      </property>
+      <item row="0" column="0">
+       <widget class="QLabel" name="imageToolLabel">
+        <property name="text">
+         <string>Image Editor:</string>
+        </property>
+        <property name="buddy">
+         <cstring>imageToolLineEdit</cstring>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="imageToolLineEdit">
+        <property name="toolTip">
+         <string>Executable used for external image editing.</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QToolButton" name="imageToolChangeButton">
+        <property name="toolTip">
+         <string>Choose the image editor executable.</string>
+        </property>
+        <property name="accessibleName">
+         <string>Choose image editor executable</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+        <property name="toolButtonStyle">
+         <enum>Qt::ToolButtonIconOnly</enum>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="pdfViewerLabel">
+        <property name="text">
+         <string>PDF Viewer:</string>
+        </property>
+        <property name="buddy">
+         <cstring>pdfViewerLineEdit</cstring>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QLineEdit" name="pdfViewerLineEdit">
+        <property name="toolTip">
+         <string>Executable used to open PDF files.</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2">
+       <widget class="QToolButton" name="pdfViewerChangeButton">
+        <property name="toolTip">
+         <string>Choose the PDF viewer executable.</string>
+        </property>
+        <property name="accessibleName">
+         <string>Choose PDF viewer executable</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+        <property name="toolButtonStyle">
+         <enum>Qt::ToolButtonIconOnly</enum>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="webBrowserLabel">
+        <property name="text">
+         <string>Web Browser:</string>
+        </property>
+        <property name="buddy">
+         <cstring>webBrowserLineEdit</cstring>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QLineEdit" name="webBrowserLineEdit">
+        <property name="toolTip">
+         <string>Executable used to open web links.</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="2">
+       <widget class="QToolButton" name="webBrowserChangeButton">
+        <property name="toolTip">
+         <string>Choose the web browser executable.</string>
+        </property>
+        <property name="accessibleName">
+         <string>Choose web browser executable</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+        <property name="toolButtonStyle">
+         <enum>Qt::ToolButtonIconOnly</enum>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="uniconverterLabel">
+        <property name="text">
+         <string>UniConvertor:</string>
+        </property>
+        <property name="buddy">
+         <cstring>uniconvertorLineEdit</cstring>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1">
+       <widget class="QLineEdit" name="uniconvertorLineEdit">
+        <property name="toolTip">
+         <string>UniConvertor executable used for vector-file conversion.</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="2">
+       <widget class="QToolButton" name="uniconvertorChangeButton">
+        <property name="toolTip">
+         <string>Choose the UniConvertor executable.</string>
+        </property>
+        <property name="accessibleName">
+         <string>Choose UniConvertor executable</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+        <property name="toolButtonStyle">
+         <enum>Qt::ToolButtonIconOnly</enum>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="renderFramesGroupBox">
+     <property name="title">
+      <string>&amp;Render Frames</string>
+     </property>
+     <layout class="QVBoxLayout" name="renderFramesLayout">
+      <property name="spacing">
+       <number>4</number>
+      </property>
+      <item>
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Configurations:</string>
+        </property>
+        <property name="buddy">
+         <cstring>latexConfigsListWidget</cstring>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="latexConfigsLayout">
+        <property name="spacing">
+         <number>4</number>
+        </property>
+        <item>
+         <widget class="QListWidget" name="latexConfigsListWidget">
+          <property name="toolTip">
+           <string>Select a render-frame configuration to reorder, remove, or edit its command.</string>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>104</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <layout class="QVBoxLayout" name="latexConfigActionsLayout">
+          <property name="spacing">
+           <number>6</number>
+          </property>
+          <item>
+           <widget class="QToolButton" name="latexConfigUpButton">
+            <property name="toolTip">
+             <string>Move the selected configuration up in the list.</string>
+            </property>
+            <property name="accessibleName">
+             <string>Move configuration up</string>
+            </property>
+            <property name="text">
+             <string/>
+            </property>
+            <property name="toolButtonStyle">
+             <enum>Qt::ToolButtonIconOnly</enum>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QToolButton" name="latexConfigDownButton">
+            <property name="toolTip">
+             <string>Move the selected configuration down in the list.</string>
+            </property>
+            <property name="accessibleName">
+             <string>Move configuration down</string>
+            </property>
+            <property name="text">
+             <string/>
+            </property>
+            <property name="toolButtonStyle">
+             <enum>Qt::ToolButtonIconOnly</enum>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QToolButton" name="latexConfigChangeCommandButton">
+            <property name="toolTip">
+             <string>Edit the selected configuration command.</string>
+            </property>
+            <property name="accessibleName">
+             <string>Edit render-frame command</string>
+            </property>
+            <property name="text">
+             <string/>
+            </property>
+            <property name="toolButtonStyle">
+             <enum>Qt::ToolButtonIconOnly</enum>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QToolButton" name="latexConfigAddButton">
+            <property name="toolTip">
+             <string>Add a render-frame configuration.</string>
+            </property>
+            <property name="accessibleName">
+             <string>Add render-frame configuration</string>
+            </property>
+            <property name="text">
+             <string/>
+            </property>
+            <property name="toolButtonStyle">
+             <enum>Qt::ToolButtonIconOnly</enum>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QToolButton" name="latexConfigDeleteButton">
+            <property name="toolTip">
+             <string>Remove the selected configuration.</string>
+            </property>
+            <property name="accessibleName">
+             <string>Remove render-frame configuration</string>
+            </property>
+            <property name="text">
+             <string/>
+            </property>
+            <property name="toolButtonStyle">
+             <enum>Qt::ToolButtonIconOnly</enum>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <spacer name="latexConfigActionsSpacer">
+            <property name="orientation">
+             <enum>Qt::Vertical</enum>
+            </property>
+            <property name="sizeType">
+             <enum>QSizePolicy::Expanding</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>20</width>
+              <height>20</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <layout class="QGridLayout" name="latexEditorLayout">
+        <property name="horizontalSpacing">
+         <number>6</number>
+        </property>
+        <property name="verticalSpacing">
+         <number>4</number>
+        </property>
+        <item row="0" column="0">
+         <widget class="QLabel" name="latexEditorLabel">
+          <property name="text">
+           <string>External Editor:</string>
+          </property>
+          <property name="buddy">
+           <cstring>latexEditorLineEdit</cstring>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <widget class="QLineEdit" name="latexEditorLineEdit">
+          <property name="toolTip">
+           <string>Executable used to edit Render Frame source files externally.</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="2">
+         <widget class="QToolButton" name="latexEditorChangeButton">
+          <property name="toolTip">
+           <string>Choose the external editor executable.</string>
+          </property>
+          <property name="accessibleName">
+           <string>Choose external editor executable</string>
+          </property>
+          <property name="text">
+           <string/>
+          </property>
+          <property name="toolButtonStyle">
+           <enum>Qt::ToolButtonIconOnly</enum>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="latexOptionsLayout">
+        <property name="spacing">
+         <number>8</number>
+        </property>
+        <item>
+         <widget class="QCheckBox" name="latexEmptyFrameCheckBox">
+          <property name="text">
+           <string>Start with an empty frame</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="latexOptionsSpacer">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeType">
+           <enum>QSizePolicy::Expanding</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>20</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QCheckBox" name="latexForceDPICheckBox">
+          <property name="toolTip">
+           <string>Always use the configured resolution when calculating the rendered size, even if the image reports a different value.</string>
+          </property>
+          <property name="text">
+           <string>Force DPI:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QSpinBox" name="latexResolutionSpinBox">
+          <property name="minimumSize">
+           <size>
+            <width>90</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="maximumSize">
+           <size>
+            <width>90</width>
+            <height>16777215</height>
+           </size>
+          </property>
+          <property name="toolTip">
+           <string>Set the rendering resolution used when Force DPI is enabled.</string>
+          </property>
+          <property name="suffix">
+           <string> DPI</string>
+          </property>
+          <property name="minimum">
+           <number>10</number>
+          </property>
+          <property name="maximum">
+           <number>2400</number>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
     </widget>
    </item>
    <item>
-    <layout class="QHBoxLayout">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Expanding</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>0</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="bottomActionsLayout">
      <item>
-      <spacer>
+      <spacer name="bottomActionsSpacer">
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
@@ -765,8 +607,8 @@
        </property>
        <property name="sizeHint" stdset="0">
         <size>
-         <width>161</width>
-         <height>21</height>
+         <width>20</width>
+         <height>20</height>
         </size>
        </property>
       </spacer>
@@ -774,13 +616,10 @@
      <item>
       <widget class="QPushButton" name="rescanButton">
        <property name="toolTip">
-        <string>Rescan for the external tools if they do not exist in the already specified location</string>
+        <string>Rescan configured external tools and replace missing or invalid executable paths.</string>
        </property>
        <property name="text">
-        <string>&amp;Rescan</string>
-       </property>
-       <property name="shortcut">
-        <string>Alt+R</string>
+        <string>Rescan Tools</string>
        </property>
       </widget>
      </item>
@@ -789,7 +628,6 @@
   </layout>
  </widget>
  <tabstops>
-  <tabstop>scrollArea</tabstop>
   <tabstop>psToolLineEdit</tabstop>
   <tabstop>psToolChangeButton</tabstop>
   <tabstop>psAntialiasTextCheckBox</tabstop>
@@ -797,24 +635,23 @@
   <tabstop>psResolutionSpinBox</tabstop>
   <tabstop>imageToolLineEdit</tabstop>
   <tabstop>imageToolChangeButton</tabstop>
-  <tabstop>webBrowserLineEdit</tabstop>
-  <tabstop>webBrowserChangeButton</tabstop>
   <tabstop>pdfViewerLineEdit</tabstop>
   <tabstop>pdfViewerChangeButton</tabstop>
+  <tabstop>webBrowserLineEdit</tabstop>
+  <tabstop>webBrowserChangeButton</tabstop>
   <tabstop>uniconvertorLineEdit</tabstop>
   <tabstop>uniconvertorChangeButton</tabstop>
   <tabstop>latexConfigsListWidget</tabstop>
-  <tabstop>latexEditorLineEdit</tabstop>
-  <tabstop>latexEmptyFrameCheckBox</tabstop>
-  <tabstop>latexEmbeddedEditorCheckBox</tabstop>
-  <tabstop>latexForceDPICheckBox</tabstop>
-  <tabstop>latexResolutionSpinBox</tabstop>
   <tabstop>latexConfigUpButton</tabstop>
   <tabstop>latexConfigDownButton</tabstop>
+  <tabstop>latexConfigChangeCommandButton</tabstop>
   <tabstop>latexConfigAddButton</tabstop>
   <tabstop>latexConfigDeleteButton</tabstop>
-  <tabstop>latexConfigChangeCommandButton</tabstop>
+  <tabstop>latexEditorLineEdit</tabstop>
   <tabstop>latexEditorChangeButton</tabstop>
+  <tabstop>latexEmptyFrameCheckBox</tabstop>
+  <tabstop>latexForceDPICheckBox</tabstop>
+  <tabstop>latexResolutionSpinBox</tabstop>
   <tabstop>rescanButton</tabstop>
  </tabstops>
  <resources/>
Index: scribus/ui/preferences/prefs_externaltools.cpp
===================================================================
--- scribus/ui/preferences/prefs_externaltools.cpp	(revision 27797)
+++ scribus/ui/preferences/prefs_externaltools.cpp	(working copy)
@@ -13,6 +13,7 @@
 #include "prefsstructs.h"
 #include "latexhelpers.h"
 #include "commonstrings.h"
+#include "iconmanager.h"
 #include "ui/scmessagebox.h"
 #include "util.h"
 #include "util_file.h"
@@ -30,6 +31,21 @@
 	m_caption = tr("External Tools");
 	m_icon = "pref-external-tools";
 
+	IconManager& iconManager = IconManager::instance();
+	const auto browseIcon = iconManager.loadIcon("document-open");
+	psToolChangeButton->setIcon(browseIcon);
+	imageToolChangeButton->setIcon(browseIcon);
+	webBrowserChangeButton->setIcon(browseIcon);
+	pdfViewerChangeButton->setIcon(browseIcon);
+	uniconvertorChangeButton->setIcon(browseIcon);
+	latexEditorChangeButton->setIcon(browseIcon);
+	latexConfigUpButton->setIcon(iconManager.loadIcon("go-up"));
+	latexConfigDownButton->setIcon(iconManager.loadIcon("go-down"));
+	latexConfigAddButton->setIcon(iconManager.loadIcon("list-add"));
+	latexConfigDeleteButton->setIcon(iconManager.loadIcon("delete"));
+	latexConfigChangeCommandButton->setIcon(iconManager.loadIcon("stroke-style-edit"));
+	rescanButton->setIcon(iconManager.loadIcon("reload"));
+
 	connect(psToolChangeButton, SIGNAL(clicked()), this, SLOT(changePostScriptTool()));
 	connect(imageToolChangeButton, SIGNAL(clicked()), this, SLOT(changeImageTool()));
 	connect(webBrowserChangeButton, SIGNAL(clicked()), this, SLOT(changeWebBrowser()));
@@ -42,6 +58,7 @@
 	connect(latexConfigDeleteButton, SIGNAL(clicked()), this, SLOT(deleteConfig()));
 	connect(latexEditorChangeButton, SIGNAL(clicked()), this, SLOT(changeLatexEditor()));
 	connect(latexConfigChangeCommandButton, SIGNAL(clicked()), this, SLOT(changeLatexPath()));
+	connect(latexForceDPICheckBox, SIGNAL(toggled(bool)), latexResolutionSpinBox, SLOT(setEnabled(bool)));
 }
 
 void Prefs_ExternalTools::languageChange()
@@ -61,6 +78,7 @@
 	latexResolutionSpinBox->setValue(prefsData->extToolPrefs.latexResolution);
 	latexEditorLineEdit->setText(prefsData->extToolPrefs.latexEditorExecutable);
 	latexForceDPICheckBox->setCheckState(prefsData->extToolPrefs.latexForceDpi?Qt::Checked:Qt::Unchecked);
+	latexResolutionSpinBox->setEnabled(latexForceDPICheckBox->isChecked());
 	latexEmptyFrameCheckBox->setCheckState(prefsData->extToolPrefs.latexStartWithEmptyFrames?Qt::Checked:Qt::Unchecked);
 	latexConfigsListWidget->clear();
 	const QStringList configs = prefsData->extToolPrefs.latexConfigs;
@@ -129,7 +147,7 @@
 void Prefs_ExternalTools::changeUniconvertor()
 {
 	QFileInfo fi(uniconvertorLineEdit->text());
-	QString s = QFileDialog::getOpenFileName(this, tr("Locate the uniconvertor executable"), fi.path());
+	QString s = QFileDialog::getOpenFileName(this, tr("Locate the UniConvertor executable"), fi.path());
 	if (!s.isEmpty())
 		uniconvertorLineEdit->setText( QDir::toNativeSeparators(s) );
 }
@@ -166,7 +184,7 @@
 			uniconvertorLineEdit->setText("uniconv");
 		else
 		{
-			ScMessageBox::warning(nullptr, CommonStrings::trWarning, tr("Uniconvertor executable not found!"));
+			ScMessageBox::warning(nullptr, CommonStrings::trWarning, tr("UniConvertor executable not found!"));
 			uniconvertorLineEdit->setText("");
 		}
 	}
external-tools-prefs-CURRENT.png (389,085 bytes)   
external-tools-prefs-CURRENT.png (389,085 bytes)   
external-tools-prefs-PROPOSED.png (454,545 bytes)   
external-tools-prefs-PROPOSED.png (454,545 bytes)   
PatchYes

Activities

Issue History

Date Modified Username Field Change
2026-08-30 09:39 qirat New Issue
2026-08-30 09:39 qirat Tag Attached: #please_test
2026-08-30 09:39 qirat File Added: external-tools-preferences-layout-r27797-v1.8.patch
2026-08-30 09:39 qirat File Added: external-tools-prefs-CURRENT.png
2026-08-30 09:39 qirat File Added: external-tools-prefs-PROPOSED.png