View Issue Details

IDProjectCategoryView StatusLast Update
0017428ScribusUser Interfacepublic2025-02-22 08:52
Reporternitramr Assigned To 
PrioritynormalSeverityfeatureReproducibilityN/A
Status newResolutionopen 
PlatformDesktop PCOSUbuntuOS Version24.10 64-bit
Product Version1.7.1.svn 
Summary0017428: Make the Align and distribute tool more comfortable to use (v2)
DescriptionJust a small UI improvement in addition to the recent change.

Whats new?
- "spacing" buttons are grouped
- object spacing buttons have a second mode if the distance is enabled
TagsNo tags attached.
PatchYes

Relationships

related to 0017393 resolvedale Make the Align and distribute tool more comfortable to use 

Activities

nitramr

2025-02-21 18:50

developer   ~0052085

distribute.png (12,128 bytes)   
distribute.png (12,128 bytes)   
distribute_2025-02-21_01.patch (20,828 bytes)   
Index: scribus/ui/aligndistribute.cpp
===================================================================
--- scribus/ui/aligndistribute.cpp	(Revision 26720)
+++ scribus/ui/aligndistribute.cpp	(Arbeitskopie)
@@ -90,6 +90,8 @@
 	groupMode->addButton(ad->buttonModeResize, 1);
 	ad->buttonModeMove->setChecked(true);
 
+	ad->enableDistanceCheckbox->setChecked(false);
+
 	resize( QSize(100, 100).expandedTo(minimumSizeHint()) );
 	languageChange();
 	init();
@@ -137,14 +139,10 @@
 	ad->alignTopOutToolButton->setToolTip( tr( "Align bottoms of items to top of anchor" ) );
 	ad->alignTopInToolButton->setToolTip( tr( "Align tops" ) );
 
-	ad->distributeDistHToolButton->setToolTip( tr( "Make horizontal gaps between items equal" ) );
-	ad->distributeDistValueHToolButton->setToolTip( tr( "Make horizontal gaps between items equal to the value specified" ) );
-
 	ad->distributeRightToolButton->setToolTip( tr( "Distribute right sides equidistantly" ) );
 	ad->distributeBottomToolButton->setToolTip( tr( "Distribute bottoms equidistantly" ) );
 	ad->distributeCenterHToolButton->setToolTip( tr( "Distribute centers equidistantly horizontally" ) );
-	ad->distributeDistVToolButton->setToolTip( tr( "Make vertical gaps between items equal" ) );
-	ad->distributeDistValueVToolButton->setToolTip( tr( "Make vertical gaps between items equal to the value specified" ) );
+
 	ad->distributeLeftToolButton->setToolTip( tr( "Distribute left sides equidistantly" ) );
 	ad->distributeCenterVToolButton->setToolTip( tr( "Distribute centers equidistantly vertically" ) );
 	ad->distributeTopToolButton->setToolTip( tr( "Distribute tops equidistantly" ) );
@@ -158,6 +156,8 @@
 
 	ad->swapLeftToolButton->setToolTip( tr( "Swap items to the left" ) );
 	ad->swapRightToolButton->setToolTip( tr( "Swap items to the right" ) );
+
+	enableDistance();
 }
 
 void AlignDistributePalette::toggleLabelVisibility(bool v)
@@ -192,12 +192,10 @@
 	connect(ad->alignTopOutToolButton, SIGNAL(clicked()), this, SLOT(alignTopOut()));
 	connect(ad->alignTopInToolButton, SIGNAL(clicked()), this, SLOT(alignTopIn()));
 	connect(ad->distributeDistHToolButton, SIGNAL(clicked()), this, SLOT(distributeDistH()));
-	connect(ad->distributeDistValueHToolButton, SIGNAL(clicked()), this, SLOT(distributeDistValH()));
 	connect(ad->distributeRightToolButton, SIGNAL(clicked()), this, SLOT(distributeRight()));
 	connect(ad->distributeBottomToolButton, SIGNAL(clicked()), this, SLOT(distributeBottom()));
 	connect(ad->distributeCenterHToolButton, SIGNAL(clicked()), this, SLOT(distributeCenterH()));
 	connect(ad->distributeDistVToolButton, SIGNAL(clicked()), this, SLOT(distributeDistV()));
-	connect(ad->distributeDistValueVToolButton, SIGNAL(clicked()), this, SLOT(distributeDistValV()));
 	connect(ad->distributeLeftToolButton, SIGNAL(clicked()), this, SLOT(distributeLeft()));
 	connect(ad->distributeCenterVToolButton, SIGNAL(clicked()), this, SLOT(distributeCenterV()));
 	connect(ad->distributeTopToolButton, SIGNAL(clicked()), this, SLOT(distributeTop()));
@@ -207,6 +205,7 @@
 	connect(ad->distributeDownMarginsToolButton, SIGNAL(clicked()), this, SLOT(distributeDistDownMargins()));
 	connect(ad->swapLeftToolButton, SIGNAL(clicked()), this, SLOT(swapLeft()));
 	connect(ad->swapRightToolButton, SIGNAL(clicked()), this, SLOT(swapRight()));
+	connect(ad->enableDistanceCheckbox, SIGNAL(clicked()), this, SLOT(enableDistance()));
 
 	alignToChanged(0);
 	alignMethodChanged(0);
@@ -248,22 +247,22 @@
 	ad->distributeLeftToolButton->setIcon(im.loadIcon("distribute-horizontal-left"));
 	ad->distributeCenterHToolButton->setIcon(im.loadIcon("distribute-horizontal-center"));
 	ad->distributeRightToolButton->setIcon(im.loadIcon("distribute-horizontal-right"));
-	ad->distributeDistHToolButton->setIcon(im.loadIcon("distribute-horizontal-equal"));
 
 	ad->distributeBottomToolButton->setIcon(im.loadIcon("distribute-vertical-bottom"));
 	ad->distributeCenterVToolButton->setIcon(im.loadIcon("distribute-vertical-center"));
 	ad->distributeTopToolButton->setIcon(im.loadIcon("distribute-vertical-top"));
-	ad->distributeDistVToolButton->setIcon(im.loadIcon("distribute-vertical-equal"));
 
-	ad->distributeAcrossPageToolButton->setIcon(im.loadIcon("distribute-horizontal-page"));
+	// ad->distributeDistHToolButton->setIcon(im.loadIcon("distribute-horizontal-equal"));
+	// ad->distributeDistVToolButton->setIcon(im.loadIcon("distribute-vertical-equal"));
+	ad->distributeDownMarginsToolButton->setIcon(im.loadIcon("distribute-vertical-margin"));
 	ad->distributeDownPageToolButton->setIcon(im.loadIcon("distribute-vertical-page"));
 	ad->distributeAcrossMarginsToolButton->setIcon(im.loadIcon("distribute-horizontal-margin"));
-	ad->distributeDownMarginsToolButton->setIcon(im.loadIcon("distribute-vertical-margin"));
-	ad->distributeDistValueHToolButton->setIcon(im.loadIcon("distribute-horizontal-x"));
-	ad->distributeDistValueVToolButton->setIcon(im.loadIcon("distribute-vertical-y"));
+	ad->distributeAcrossPageToolButton->setIcon(im.loadIcon("distribute-horizontal-page"));
  
 	ad->swapLeftToolButton->setIcon(im.loadIcon("swap-left"));
 	ad->swapRightToolButton->setIcon(im.loadIcon("swap-right"));
+
+	enableDistance();
 }
 
 void AlignDistributePalette::unitChange()
@@ -365,17 +364,11 @@
 		currDoc->itemSelection_DistributeRight();
 }
 
-void AlignDistributePalette::distributeDistH(bool usingDistance)
+void AlignDistributePalette::distributeDistH()
 {
-	if (currDoc != nullptr)
-		currDoc->itemSelection_DistributeDistH(usingDistance, ad->distributeDistSpinBox->value(), ad->reverseDistributionButton->isChecked());
-}
-
-void AlignDistributePalette::distributeDistValH()
-{
 	ad->distributeDistSpinBox->interpretText();
 	if (currDoc != nullptr)
-		distributeDistH(true);
+		currDoc->itemSelection_DistributeDistH(ad->enableDistanceCheckbox->isChecked(), ad->distributeDistSpinBox->value(), ad->reverseDistributionButton->isChecked());
 }
 
 void AlignDistributePalette::distributeDistAcrossPage()
@@ -420,17 +413,11 @@
 		currDoc->itemSelection_DistributeTop();
 }
 
-void AlignDistributePalette::distributeDistV(bool usingDistance)
+void AlignDistributePalette::distributeDistV()
 {
-	if (currDoc != nullptr)
-		currDoc->itemSelection_DistributeDistV(usingDistance, ad->distributeDistSpinBox->value(), ad->reverseDistributionButton->isChecked());
-}
-
-void AlignDistributePalette::distributeDistValV()
-{
 	ad->distributeDistSpinBox->interpretText();
 	if (currDoc != nullptr)
-		distributeDistV(true);
+		currDoc->itemSelection_DistributeDistV(ad->enableDistanceCheckbox->isChecked(), ad->distributeDistSpinBox->value(), ad->reverseDistributionButton->isChecked());
 }
 
 void AlignDistributePalette::swapLeft()
@@ -445,6 +432,31 @@
 		currDoc->itemSelection_SwapRight();
 }
 
+void AlignDistributePalette::enableDistance()
+{
+	IconManager& im = IconManager::instance();
+
+	if (ad->enableDistanceCheckbox->isChecked())
+	{
+		ad->distributeDistSpinBox->setEnabled(true);
+		ad->reverseDistributionButton->setEnabled(true);
+		ad->distributeDistHToolButton->setIcon(im.loadIcon("distribute-horizontal-x"));
+		ad->distributeDistVToolButton->setIcon(im.loadIcon("distribute-vertical-y"));
+		ad->distributeDistHToolButton->setToolTip( tr( "Make horizontal gaps between items equal to the value specified" ) );
+		ad->distributeDistVToolButton->setToolTip( tr( "Make vertical gaps between items equal to the value specified" ) );
+	}
+	else
+	{
+		ad->distributeDistSpinBox->setEnabled(false);
+		ad->reverseDistributionButton->setEnabled(false);
+		ad->distributeDistHToolButton->setIcon(im.loadIcon("distribute-horizontal-equal"));
+		ad->distributeDistVToolButton->setIcon(im.loadIcon("distribute-vertical-equal"));
+		ad->distributeDistHToolButton->setToolTip( tr( "Make horizontal gaps between items equal" ) );
+		ad->distributeDistVToolButton->setToolTip( tr( "Make vertical gaps between items equal" ) );
+	}
+
+}
+
 void AlignDistributePalette::alignToChanged(int newAlignTo)
 {
 	currAlignTo = ScribusDoc::AlignTo(newAlignTo);
Index: scribus/ui/aligndistribute.h
===================================================================
--- scribus/ui/aligndistribute.h	(Revision 26720)
+++ scribus/ui/aligndistribute.h	(Arbeitskopie)
@@ -100,15 +100,13 @@
 	void alignCenterVer();
 	void alignTopOut();
 	void alignTopIn();
-	void distributeDistH(bool usingDistance = false);
-	void distributeDistValH();
+	void distributeDistH();
 	void distributeDistAcrossPage();
 	void distributeDistAcrossMargins();
 	void distributeRight();
 	void distributeBottom();
 	void distributeCenterH();
-	void distributeDistV(bool usingDistance = false);
-	void distributeDistValV();
+	void distributeDistV();
 	void distributeDistDownPage();
 	void distributeDistDownMargins();
 	void distributeLeft();
@@ -116,6 +114,7 @@
 	void distributeTop();
 	void swapLeft();
 	void swapRight();
+	void enableDistance();
 	
 	void alignToChanged(int);
 	void alignMethodChanged(int);
Index: scribus/ui/aligndistribute.ui
===================================================================
--- scribus/ui/aligndistribute.ui	(Revision 26720)
+++ scribus/ui/aligndistribute.ui	(Arbeitskopie)
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>322</width>
-    <height>426</height>
+    <width>266</width>
+    <height>390</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -496,7 +496,7 @@
            </property>
            <property name="sizeHint" stdset="0">
             <size>
-             <width>40</width>
+             <width>20</width>
              <height>20</height>
             </size>
            </property>
@@ -622,49 +622,10 @@
               </property>
              </widget>
             </item>
-            <item>
-             <widget class="QToolButton" name="distributeDistHToolButton">
-              <property name="minimumSize">
-               <size>
-                <width>24</width>
-                <height>24</height>
-               </size>
-              </property>
-              <property name="maximumSize">
-               <size>
-                <width>24</width>
-                <height>24</height>
-               </size>
-              </property>
-              <property name="iconSize">
-               <size>
-                <width>22</width>
-                <height>22</height>
-               </size>
-              </property>
-             </widget>
-            </item>
            </layout>
           </widget>
          </item>
          <item>
-          <spacer name="horizontalSpacer_6">
-           <property name="orientation">
-            <enum>Qt::Orientation::Horizontal</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>0</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <layout class="QHBoxLayout" name="horizontalLayout_4">
-         <item>
           <widget class="FormWidget" name="distributeVerticalLabel">
            <property name="label" stdset="0">
             <string>Vertical</string>
@@ -751,39 +712,17 @@
               </property>
              </widget>
             </item>
-            <item>
-             <widget class="QToolButton" name="distributeDistVToolButton">
-              <property name="minimumSize">
-               <size>
-                <width>24</width>
-                <height>24</height>
-               </size>
-              </property>
-              <property name="maximumSize">
-               <size>
-                <width>24</width>
-                <height>24</height>
-               </size>
-              </property>
-              <property name="iconSize">
-               <size>
-                <width>22</width>
-                <height>22</height>
-               </size>
-              </property>
-             </widget>
-            </item>
            </layout>
           </widget>
          </item>
          <item>
-          <spacer name="horizontalSpacer_3">
+          <spacer name="horizontalSpacer_6">
            <property name="orientation">
             <enum>Qt::Orientation::Horizontal</enum>
            </property>
            <property name="sizeHint" stdset="0">
             <size>
-             <width>40</width>
+             <width>0</width>
              <height>20</height>
             </size>
            </property>
@@ -799,7 +738,7 @@
          <item>
           <widget class="FormWidget" name="distributeByGapLabel">
            <property name="label" stdset="0">
-            <string>By gap</string>
+            <string>Spacing</string>
            </property>
            <layout class="QHBoxLayout" name="horizontalLayout_23">
             <property name="spacing">
@@ -818,10 +757,7 @@
              <number>0</number>
             </property>
             <item>
-             <widget class="QToolButton" name="distributeAcrossMarginsToolButton">
-              <property name="enabled">
-               <bool>true</bool>
-              </property>
+             <widget class="QToolButton" name="distributeDistHToolButton">
               <property name="minimumSize">
                <size>
                 <width>24</width>
@@ -843,10 +779,7 @@
              </widget>
             </item>
             <item>
-             <widget class="QToolButton" name="distributeDownPageToolButton">
-              <property name="enabled">
-               <bool>true</bool>
-              </property>
+             <widget class="QToolButton" name="distributeDistVToolButton">
               <property name="minimumSize">
                <size>
                 <width>24</width>
@@ -868,7 +801,7 @@
              </widget>
             </item>
             <item>
-             <widget class="QToolButton" name="distributeAcrossPageToolButton">
+             <widget class="QToolButton" name="distributeAcrossMarginsToolButton">
               <property name="enabled">
                <bool>true</bool>
               </property>
@@ -917,32 +850,11 @@
               </property>
              </widget>
             </item>
-           </layout>
-          </widget>
-         </item>
-         <item>
-          <widget class="FormWidget" name="swapLabel">
-           <property name="label" stdset="0">
-            <string>Swap</string>
-           </property>
-           <layout class="QHBoxLayout" name="horizontalLayout_17">
-            <property name="spacing">
-             <number>4</number>
-            </property>
-            <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>
             <item>
-             <widget class="QToolButton" name="swapLeftToolButton">
+             <widget class="QToolButton" name="distributeAcrossPageToolButton">
+              <property name="enabled">
+               <bool>true</bool>
+              </property>
               <property name="minimumSize">
                <size>
                 <width>24</width>
@@ -964,7 +876,10 @@
              </widget>
             </item>
             <item>
-             <widget class="QToolButton" name="swapRightToolButton">
+             <widget class="QToolButton" name="distributeDownPageToolButton">
+              <property name="enabled">
+               <bool>true</bool>
+              </property>
               <property name="minimumSize">
                <size>
                 <width>24</width>
@@ -1011,7 +926,7 @@
          <item>
           <widget class="FormWidget" name="distributeByDistanceLabel">
            <property name="label" stdset="0">
-            <string>By distance</string>
+            <string>Distance &amp;&amp; Direction</string>
            </property>
            <layout class="QHBoxLayout" name="horizontalLayout_20">
             <property name="spacing">
@@ -1030,7 +945,51 @@
              <number>0</number>
             </property>
             <item>
-             <widget class="QToolButton" name="distributeDistValueVToolButton">
+             <widget class="QCheckBox" name="enableDistanceCheckbox">
+              <property name="text">
+               <string/>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="ScrSpinBox" name="distributeDistSpinBox"/>
+            </item>
+            <item>
+             <widget class="QToolButton" name="reverseDistributionButton">
+              <property name="text">
+               <string/>
+              </property>
+              <property name="checkable">
+               <bool>true</bool>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </widget>
+         </item>
+         <item>
+          <widget class="FormWidget" name="swapLabel">
+           <property name="label" stdset="0">
+            <string>Swap</string>
+           </property>
+           <layout class="QHBoxLayout" name="horizontalLayout_17">
+            <property name="spacing">
+             <number>4</number>
+            </property>
+            <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>
+            <item>
+             <widget class="QToolButton" name="swapLeftToolButton">
               <property name="minimumSize">
                <size>
                 <width>24</width>
@@ -1052,7 +1011,7 @@
              </widget>
             </item>
             <item>
-             <widget class="QToolButton" name="distributeDistValueHToolButton">
+             <widget class="QToolButton" name="swapRightToolButton">
               <property name="minimumSize">
                <size>
                 <width>24</width>
@@ -1073,19 +1032,6 @@
               </property>
              </widget>
             </item>
-            <item>
-             <widget class="ScrSpinBox" name="distributeDistSpinBox"/>
-            </item>
-            <item>
-             <widget class="QToolButton" name="reverseDistributionButton">
-              <property name="text">
-               <string/>
-              </property>
-              <property name="checkable">
-               <bool>true</bool>
-              </property>
-             </widget>
-            </item>
            </layout>
           </widget>
          </item>
@@ -1148,6 +1094,43 @@
    <header>ui/widgets/pulsing_toolbutton.h</header>
   </customwidget>
  </customwidgets>
+ <tabstops>
+  <tabstop>buttonReferenceFirst</tabstop>
+  <tabstop>buttonReferenceSelection</tabstop>
+  <tabstop>buttonReferenceLast</tabstop>
+  <tabstop>buttonReferencePage</tabstop>
+  <tabstop>buttonReferenceMargins</tabstop>
+  <tabstop>buttonReferenceGuide</tabstop>
+  <tabstop>buttonModeMove</tabstop>
+  <tabstop>buttonModeResize</tabstop>
+  <tabstop>alignLeftInToolButton</tabstop>
+  <tabstop>alignCenterHorToolButton</tabstop>
+  <tabstop>alignRightInToolButton</tabstop>
+  <tabstop>alignRightOutToolButton</tabstop>
+  <tabstop>alignLeftOutToolButton</tabstop>
+  <tabstop>alignTopInToolButton</tabstop>
+  <tabstop>alignCenterVerToolButton</tabstop>
+  <tabstop>alignBottomInToolButton</tabstop>
+  <tabstop>alignBottomOutToolButton</tabstop>
+  <tabstop>alignTopOutToolButton</tabstop>
+  <tabstop>distributeLeftToolButton</tabstop>
+  <tabstop>distributeCenterHToolButton</tabstop>
+  <tabstop>distributeRightToolButton</tabstop>
+  <tabstop>distributeTopToolButton</tabstop>
+  <tabstop>distributeCenterVToolButton</tabstop>
+  <tabstop>distributeBottomToolButton</tabstop>
+  <tabstop>distributeDistHToolButton</tabstop>
+  <tabstop>distributeDistVToolButton</tabstop>
+  <tabstop>distributeAcrossMarginsToolButton</tabstop>
+  <tabstop>distributeDownMarginsToolButton</tabstop>
+  <tabstop>distributeAcrossPageToolButton</tabstop>
+  <tabstop>distributeDownPageToolButton</tabstop>
+  <tabstop>enableDistanceCheckbox</tabstop>
+  <tabstop>distributeDistSpinBox</tabstop>
+  <tabstop>reverseDistributionButton</tabstop>
+  <tabstop>swapLeftToolButton</tabstop>
+  <tabstop>swapRightToolButton</tabstop>
+ </tabstops>
  <includes>
   <include location="local">ui/scrspinbox.h</include>
  </includes>
distribute_2025-02-21_01.patch (20,828 bytes)   

ale

2025-02-22 08:52

manager   ~0052092

Craig already wrote in the forums that he does not like this.

Personally, I'm not convinced by the last row either, but I could live with it

As I wrote in the forums, having only three buttons in the Horizontal and Vertical section is a real improvement.

The two "equal distance" buttons are also easier to grasp, when their not mixed with the three other.

Finally, I attach a screenshot of three additional section I was proposing.
Does not need to be implemented.
More as a documentation for further tweaking...
distribute-sel-marg-page.png (16,520 bytes)   
distribute-sel-marg-page.png (16,520 bytes)   

Issue History

Date Modified Username Field Change
2025-02-21 18:50 nitramr New Issue
2025-02-21 18:50 nitramr Note Added: 0052085
2025-02-21 18:50 nitramr File Added: distribute.png
2025-02-21 18:50 nitramr File Added: distribute_2025-02-21_01.patch
2025-02-21 18:51 nitramr Relationship added related to 0017393
2025-02-22 08:52 ale Note Added: 0052092
2025-02-22 08:52 ale File Added: distribute-sel-marg-page.png