View Issue Details

IDProjectCategoryView StatusLast Update
0017951ScribusUser Interfacepublic2026-08-28 11:46
Reporterqirat Assigned To 
PrioritynormalSeverityminorReproducibilityN/A
Status newResolutionopen 
PlatformLinuxOSFedora WorkstationOS Version44
Product Version1.7.4.svn 
Summary0017951: [patch] Operator Tools Preferences UI Polish
Description* Replaces the Zoom / Miscellaneous tabs with a compact single-page layout.
* Groups settings into Zoom, Duplication Offset, and Angle Constraint.
* Uses compact tiny labels and consistently aligned numeric controls.
* Adds group-level keyboard mnemonics and logical Tab navigation.
* Clarifies labels and tooltips, including the purpose of duplication offsets and angle constraint.
* Removes unnecessary whitespace and improves visual consistency.
* No preference storage, defaults, ranges, or underlying tool behaviour changed.
Steps To Reproduce+Screenshots showing the current and proposed layouts.
Tags#please_test
Attached Files
operator-tools-current.png (263,354 bytes)   
operator-tools-current.png (263,354 bytes)   
operator-tools-preferences-layout-v1.6.patch (20,197 bytes)   
Index: scribus/ui/preferences/prefs_operatortoolsbase.ui
===================================================================
--- scribus/ui/preferences/prefs_operatortoolsbase.ui	(revision 27785)
+++ scribus/ui/preferences/prefs_operatortoolsbase.ui	(working copy)
@@ -45,233 +45,342 @@
     </widget>
    </item>
    <item>
-    <widget class="QTabWidget" name="tabWidget">
-     <property name="tabPosition">
-      <enum>QTabWidget::North</enum>
+    <layout class="QHBoxLayout" name="operatorToolsLayout">
+     <property name="spacing">
+      <number>12</number>
      </property>
-     <property name="tabShape">
-      <enum>QTabWidget::Rounded</enum>
-     </property>
-     <property name="currentIndex">
-      <number>0</number>
-     </property>
-     <property name="elideMode">
-      <enum>Qt::ElideRight</enum>
-     </property>
-     <property name="usesScrollButtons">
-      <bool>false</bool>
-     </property>
-     <widget class="QWidget" name="tab_4">
-      <attribute name="title">
-       <string>Zoom</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_2">
-       <item>
-        <layout class="QFormLayout" name="formLayout">
-         <property name="formAlignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-         </property>
-         <item row="0" column="0">
-          <widget class="QLabel" name="label_2">
-           <property name="text">
-            <string>Minimum:</string>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="0">
-          <widget class="QLabel" name="label_3">
-           <property name="text">
-            <string>Maximum:</string>
-           </property>
-          </widget>
-         </item>
-         <item row="2" column="0">
-          <widget class="QLabel" name="label_4">
-           <property name="text">
-            <string>Stepping:</string>
-           </property>
-          </widget>
-         </item>
-         <item row="0" column="1">
-          <widget class="ScrSpinBox" name="zoomMinimumSpinBox">
-           <property name="suffix">
-            <string> %</string>
-           </property>
-           <property name="minimum">
-            <number>1</number>
-           </property>
-           <property name="maximum">
-            <number>3200</number>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="1">
-          <widget class="QSpinBox" name="zoomMaximumSpinBox">
-           <property name="suffix">
-            <string> %</string>
-           </property>
-           <property name="minimum">
-            <number>10</number>
-           </property>
-           <property name="maximum">
-            <number>32000</number>
-           </property>
-          </widget>
-         </item>
-         <item row="2" column="1">
-          <widget class="QSpinBox" name="zoomSteppingSpinBox">
-           <property name="suffix">
-            <string> %</string>
-           </property>
-           <property name="minimum">
-            <number>1</number>
-           </property>
-           <property name="maximum">
-            <number>500</number>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <spacer name="verticalSpacer">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>231</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="tab_5">
-      <attribute name="title">
-       <string>Miscellaneous</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_3">
-       <item>
-        <widget class="QLabel" name="label_5">
-         <property name="font">
-          <font>
-           <weight>75</weight>
-           <bold>true</bold>
-          </font>
-         </property>
-         <property name="text">
-          <string>Item Duplicate</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="Line" name="line_2">
-         <property name="orientation">
-          <enum>Qt::Horizontal</enum>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <layout class="QFormLayout" name="formLayout_2">
-         <property name="formAlignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-         </property>
-         <item row="0" column="0">
-          <widget class="QLabel" name="label_6">
-           <property name="text">
-            <string>X Displacement:</string>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="0">
-          <widget class="QLabel" name="label_7">
-           <property name="text">
-            <string>Y Displacement:</string>
-           </property>
-          </widget>
-         </item>
-         <item row="0" column="1">
-          <widget class="ScrSpinBox" name="itemDuplicateXDispSpinBox"/>
-         </item>
-         <item row="1" column="1">
-          <widget class="ScrSpinBox" name="itemDuplicateYDispSpinBox"/>
-         </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_8">
-         <property name="font">
-          <font>
-           <weight>75</weight>
-           <bold>true</bold>
-          </font>
-         </property>
-         <property name="text">
-          <string>Rotation 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="QFormLayout" name="formLayout_3">
-         <property name="formAlignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-         </property>
-         <item row="0" column="0">
-          <widget class="QLabel" name="label_9">
-           <property name="text">
-            <string>Constrain To:</string>
-           </property>
-          </widget>
-         </item>
-         <item row="0" column="1">
-          <widget class="ScrSpinBox" name="rotationConstraintSpinBox"/>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <spacer name="verticalSpacer_3">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>112</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
-    </widget>
+     <item>
+      <widget class="QWidget" name="leftColumnWidget" native="true">
+       <layout class="QVBoxLayout" name="leftColumnLayout">
+        <property name="leftMargin">
+         <number>0</number>
+        </property>
+        <property name="topMargin">
+         <number>0</number>
+        </property>
+        <property name="rightMargin">
+         <number>0</number>
+        </property>
+        <property name="bottomMargin">
+         <number>0</number>
+        </property>
+        <property name="spacing">
+         <number>8</number>
+        </property>
+        <item>
+         <widget class="QGroupBox" name="zoomGroupBox">
+          <property name="title">
+           <string>&amp;Zoom</string>
+          </property>
+          <layout class="QGridLayout" name="zoomLayout">
+           <property name="horizontalSpacing">
+            <number>8</number>
+           </property>
+           <property name="verticalSpacing">
+            <number>2</number>
+           </property>
+           <item row="0" column="0" alignment="Qt::AlignHCenter">
+            <widget class="ScrSpinBox" name="zoomMinimumSpinBox">
+             <property name="minimumSize">
+              <size>
+               <width>110</width>
+               <height>0</height>
+              </size>
+             </property>
+             <property name="suffix">
+              <string> %</string>
+             </property>
+             <property name="decimals">
+              <number>0</number>
+             </property>
+             <property name="minimum">
+              <number>1</number>
+             </property>
+             <property name="maximum">
+              <number>3200</number>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1" alignment="Qt::AlignHCenter">
+            <widget class="QSpinBox" name="zoomMaximumSpinBox">
+             <property name="minimumSize">
+              <size>
+               <width>110</width>
+               <height>0</height>
+              </size>
+             </property>
+             <property name="suffix">
+              <string> %</string>
+             </property>
+             <property name="minimum">
+              <number>10</number>
+             </property>
+             <property name="maximum">
+              <number>32000</number>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="2" alignment="Qt::AlignHCenter">
+            <widget class="QSpinBox" name="zoomSteppingSpinBox">
+             <property name="minimumSize">
+              <size>
+               <width>110</width>
+               <height>0</height>
+              </size>
+             </property>
+             <property name="suffix">
+              <string> %</string>
+             </property>
+             <property name="minimum">
+              <number>1</number>
+             </property>
+             <property name="maximum">
+              <number>500</number>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="0">
+            <widget class="QLabel" name="zoomMinimumLabel">
+             <property name="font">
+              <font>
+               <pointsize>8</pointsize>
+              </font>
+             </property>
+             <property name="text">
+              <string>Minimum</string>
+             </property>
+             <property name="alignment">
+              <set>Qt::AlignHCenter|Qt::AlignTop</set>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="1">
+            <widget class="QLabel" name="zoomMaximumLabel">
+             <property name="font">
+              <font>
+               <pointsize>8</pointsize>
+              </font>
+             </property>
+             <property name="text">
+              <string>Maximum</string>
+             </property>
+             <property name="alignment">
+              <set>Qt::AlignHCenter|Qt::AlignTop</set>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="2">
+            <widget class="QLabel" name="zoomStepLabel">
+             <property name="font">
+              <font>
+               <pointsize>8</pointsize>
+              </font>
+             </property>
+             <property name="text">
+              <string>Step</string>
+             </property>
+             <property name="alignment">
+              <set>Qt::AlignHCenter|Qt::AlignTop</set>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </widget>
+        </item>
+        <item>
+         <widget class="QGroupBox" name="duplicationOffsetGroupBox">
+          <property name="title">
+           <string>&amp;Duplication Offset</string>
+          </property>
+          <layout class="QGridLayout" name="duplicationOffsetLayout">
+           <property name="horizontalSpacing">
+            <number>8</number>
+           </property>
+           <property name="verticalSpacing">
+            <number>2</number>
+           </property>
+           <item row="0" column="0" alignment="Qt::AlignHCenter">
+            <widget class="ScrSpinBox" name="itemDuplicateXDispSpinBox">
+             <property name="minimumSize">
+              <size>
+               <width>110</width>
+               <height>0</height>
+              </size>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1" alignment="Qt::AlignHCenter">
+            <widget class="ScrSpinBox" name="itemDuplicateYDispSpinBox">
+             <property name="minimumSize">
+              <size>
+               <width>110</width>
+               <height>0</height>
+              </size>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="2" rowspan="2">
+            <spacer name="duplicationOffsetSpacer">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeType">
+              <enum>QSizePolicy::Expanding</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>110</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item row="1" column="0">
+            <widget class="QLabel" name="duplicateHorizontalLabel">
+             <property name="font">
+              <font>
+               <pointsize>8</pointsize>
+              </font>
+             </property>
+             <property name="text">
+              <string>Horizontal</string>
+             </property>
+             <property name="alignment">
+              <set>Qt::AlignHCenter|Qt::AlignTop</set>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="1">
+            <widget class="QLabel" name="duplicateVerticalLabel">
+             <property name="font">
+              <font>
+               <pointsize>8</pointsize>
+              </font>
+             </property>
+             <property name="text">
+              <string>Vertical</string>
+             </property>
+             <property name="alignment">
+              <set>Qt::AlignHCenter|Qt::AlignTop</set>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </widget>
+        </item>
+        <item>
+         <widget class="QGroupBox" name="angleConstraintGroupBox">
+          <property name="title">
+           <string>&amp;Angle Constraint</string>
+          </property>
+          <layout class="QGridLayout" name="angleConstraintLayout">
+           <property name="horizontalSpacing">
+            <number>8</number>
+           </property>
+           <property name="verticalSpacing">
+            <number>2</number>
+           </property>
+           <item row="0" column="0" alignment="Qt::AlignHCenter">
+            <widget class="ScrSpinBox" name="rotationConstraintSpinBox">
+             <property name="minimumSize">
+              <size>
+               <width>110</width>
+               <height>0</height>
+              </size>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1" rowspan="2">
+            <spacer name="angleConstraintSpacer1">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeType">
+              <enum>QSizePolicy::Expanding</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>110</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item row="0" column="2" rowspan="2">
+            <spacer name="angleConstraintSpacer2">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeType">
+              <enum>QSizePolicy::Expanding</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>110</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item row="1" column="0">
+            <widget class="QLabel" name="angleStepLabel">
+             <property name="font">
+              <font>
+               <pointsize>8</pointsize>
+              </font>
+             </property>
+             <property name="text">
+              <string>Step</string>
+             </property>
+             <property name="alignment">
+              <set>Qt::AlignHCenter|Qt::AlignTop</set>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </widget>
+        </item>
+        <item>
+         <spacer name="leftColumnSpacer">
+          <property name="orientation">
+           <enum>Qt::Vertical</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>20</width>
+            <height>40</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <spacer name="rightColumnSpacer">
+       <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>
   </layout>
  </widget>
+ <tabstops>
+  <tabstop>zoomMinimumSpinBox</tabstop>
+  <tabstop>zoomMaximumSpinBox</tabstop>
+  <tabstop>zoomSteppingSpinBox</tabstop>
+  <tabstop>itemDuplicateXDispSpinBox</tabstop>
+  <tabstop>itemDuplicateYDispSpinBox</tabstop>
+  <tabstop>rotationConstraintSpinBox</tabstop>
+ </tabstops>
  <customwidgets>
   <customwidget>
    <class>ScrSpinBox</class>
Index: scribus/ui/preferences/prefs_operatortools.cpp
===================================================================
--- scribus/ui/preferences/prefs_operatortools.cpp	(revision 27785)
+++ scribus/ui/preferences/prefs_operatortools.cpp	(working copy)
@@ -36,12 +36,12 @@
 
 void Prefs_OperatorTools::languageChange()
 {
-	zoomMinimumSpinBox->setToolTip( tr( "Minimum magnification allowed" ) );
-	zoomMaximumSpinBox->setToolTip( tr( "Maximum magnification allowed" ) );
-	zoomSteppingSpinBox->setToolTip( tr( "Change in magnification for each zoom operation" ) );
-	itemDuplicateXDispSpinBox->setToolTip( tr( "Horizontal displacement of page items") );
-	itemDuplicateYDispSpinBox->setToolTip( tr( "Vertical displacement of page items" ) );
-	rotationConstraintSpinBox->setToolTip( tr( "Constrain value for the rotation tool when the Control key is pressed" ) );
+	zoomMinimumSpinBox->setToolTip( tr( "Minimum allowed zoom level" ) );
+	zoomMaximumSpinBox->setToolTip( tr( "Maximum allowed zoom level" ) );
+	zoomSteppingSpinBox->setToolTip( tr( "Percentage change per zoom step" ) );
+	itemDuplicateXDispSpinBox->setToolTip( tr( "Horizontal offset for duplicated or successively placed items" ) );
+	itemDuplicateYDispSpinBox->setToolTip( tr( "Vertical offset for duplicated or successively placed items" ) );
+	rotationConstraintSpinBox->setToolTip( tr( "Angle increment used for constrained operations" ) );
 }
 
 void Prefs_OperatorTools::unitChange(int unitIndex)
operator-tools-proposed.png (281,855 bytes)   
operator-tools-proposed.png (281,855 bytes)   
PatchYes

Activities

Issue History

Date Modified Username Field Change
2026-08-28 11:46 qirat New Issue
2026-08-28 11:46 qirat File Added: operator-tools-current.png
2026-08-28 11:46 qirat File Added: operator-tools-preferences-layout-v1.6.patch
2026-08-28 11:46 qirat File Added: operator-tools-proposed.png
2026-08-28 11:46 qirat Tag Attached: #please_test