View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0017951 | Scribus | User Interface | public | 2026-08-28 11:46 | 2026-08-28 11:46 |
| Reporter | qirat | Assigned To | |||
| Priority | normal | Severity | minor | Reproducibility | N/A |
| Status | new | Resolution | open | ||
| Platform | Linux | OS | Fedora Workstation | OS Version | 44 |
| Product Version | 1.7.4.svn | ||||
| Summary | 0017951: [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-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>&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>&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>&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)
| ||||
| Patch | Yes | ||||
| 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 |