Stripped down the RangedSlider. It is more compact and still does everything. Base colors (red and green) are fixed inside, also automatisc setting of outer limits. The tooltip shows the current ranges. Still some finetuning to be done.

Thu, 31 Mar 2022 23:10:57 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Thu, 31 Mar 2022 23:10:57 +0200
changeset 97
8283bbf95806
parent 96
c36fef8bb088
child 98
1425bf3e18ed

Stripped down the RangedSlider. It is more compact and still does everything. Base colors (red and green) are fixed inside, also automatisc setting of outer limits. The tooltip shows the current ranges. Still some finetuning to be done.

src/EditRecipe.cpp file | annotate | diff | comparison | revisions
src/RangedSlider.cpp file | annotate | diff | comparison | revisions
src/RangedSlider.h file | annotate | diff | comparison | revisions
ui/EditRecipe.ui file | annotate | diff | comparison | revisions
--- a/src/EditRecipe.cpp	Thu Mar 31 17:16:44 2022 +0200
+++ b/src/EditRecipe.cpp	Thu Mar 31 23:10:57 2022 +0200
@@ -70,39 +70,27 @@
 	ui->est_ogEdit->setValue(query.value(28).toDouble());
 	ui->est_ogShow->setRange(query.value(9).toDouble(), query.value(10).toDouble());
 	ui->est_ogShow->setPrecision(3);
-	ui->est_ogShow->setTickMarks(0.010, 2);
-	ui->est_ogShow->setBackgroundBrush(QColor(121,201,121));
-	ui->est_ogShow->setPreferredRangeBrush(QColor(0,127,0));
 	ui->est_ogShow->setMarkerTextIsValue(true);
 	ui->est_ogShow->setValue(query.value(28).toDouble());
 
 	ui->est_fgEdit->setValue(query.value(29).toDouble());
         ui->est_fgShow->setRange(query.value(11).toDouble(), query.value(12).toDouble());
         ui->est_fgShow->setPrecision(3);
-        ui->est_fgShow->setTickMarks(0.010, 2);
-        ui->est_fgShow->setBackgroundBrush(QColor(121,201,121));
-        ui->est_fgShow->setPreferredRangeBrush(QColor(0,127,0));
         ui->est_fgShow->setMarkerTextIsValue(true);
         ui->est_fgShow->setValue(query.value(29).toDouble());
 
 	ui->est_abvEdit->setValue(query.value(30).toDouble());
         ui->est_abvShow->setRange(query.value(19).toDouble(), query.value(20).toDouble());
         ui->est_abvShow->setPrecision(1);
-        ui->est_abvShow->setTickMarks(1.0, 2);
-        ui->est_abvShow->setBackgroundBrush(QColor(121,201,121));
-        ui->est_abvShow->setPreferredRangeBrush(QColor(0,127,0));
         ui->est_abvShow->setMarkerTextIsValue(true);
         ui->est_abvShow->setValue(query.value(30).toDouble());
 
 	ui->est_colorEdit->setValue(query.value(31).toDouble());
 	QColor color = Utils::ebc_to_color(query.value(31).toInt());
 	ui->est_colorGlass->setColor(color);
+        ui->est_colorShow->setPrecision(0);
+        ui->est_colorShow->setMarkerTextIsValue(true);
 	ui->est_colorShow->setRange(query.value(15).toDouble(), query.value(16).toDouble());
-        ui->est_colorShow->setPrecision(0);
-        ui->est_colorShow->setTickMarks(1.0, 2);
-        ui->est_colorShow->setBackgroundBrush(QColor(121,201,121));
-        ui->est_colorShow->setPreferredRangeBrush(QColor(0,127,0));
-        ui->est_colorShow->setMarkerTextIsValue(true);
         ui->est_colorShow->setValue(query.value(31).toDouble());
 
 	ui->color_methodEdit->addItem("Morey");
--- a/src/RangedSlider.cpp	Thu Mar 31 17:16:44 2022 +0200
+++ b/src/RangedSlider.cpp	Thu Mar 31 23:10:57 2022 +0200
@@ -40,21 +40,19 @@
 
 RangedSlider::RangedSlider(QWidget* parent)
    : QWidget(parent),
-     _min(0.0),
-     _max(1.0),
-     _prefMin(0.25),
-     _prefMax(0.75),
-     _val(0.5),
-     _prec(3),
-     _tickInterval(0),
-     _secondaryTicks(1),
-     _tooltipText(""),
-     _bgBrush(QColor(255,255,255)),
-     _prefRangeBrush(QColor(0,0,0)),
-     _prefRangePen(Qt::NoPen),
-     _markerBrush(QColor(255,255,255)),
-     _markerTextIsValue(false),
-     indicatorTextFont("Arial",
+    _min(0.0),
+    _max(1.0),
+    _prefMin(0.25),
+    _prefMax(0.75),
+    _val(0.5),
+    _prec(3),
+    _tooltipText(""),
+    _bgBrush(QColor(255,0,0)),
+    _prefRangeBrush(QColor(0,127,0)),
+    _prefRangePen(Qt::NoPen),
+    _markerBrush(QColor(255,255,255)),
+    _markerTextIsValue(false),
+    indicatorTextFont("Arial",
                        10,
                        QFont::Normal) // Previously we just did the indicator text in 'default' font
 {
@@ -74,96 +72,86 @@
    this->repaint();
 }
 
-void RangedSlider::setPreferredRange( double min, double max )
+/**
+ * @brief Set the normal limits in the _prexXxx values and calculate
+ *        the real drawing limits so that we can see if a value is slightly
+ *        out of range.
+ */
+void RangedSlider::setRange( double min, double max )
 {
-   _prefMin = min;
-   _prefMax = max;
+    _prefMin = min;
+    _prefMax = max;
+    // Calculate the outer limits
+    _min = _prefMin - ((_prefMax - _prefMin) * 0.2);
+    _max = _prefMax + ((_prefMax - _prefMin) * 0.2);
 
-   // Only show tooltips if the range has nonzero size.
-   setMouseTracking(min < max);
+    // Set the tooltip with the ranges.
+    _tooltipText = QString("%1 - %2").arg(min, 0, 'f', _prec).arg(max, 0, 'f', _prec);
 
-   _tooltipText = QString("%1 - %2").arg(min, 0, 'f', _prec).arg(max, 0, 'f', _prec);
-
-   update();
+    update();
 }
 
-void RangedSlider::setPreferredRange(QPair<double,double> minmax)
-{
-   setPreferredRange( minmax.first, minmax.second );
-}
-
-void RangedSlider::setRange( double min, double max )
-{
-   _min = min;
-   _max = max;
-   update();
-}
 
 void RangedSlider::setRange(QPair<double,double> minmax)
 {
    setRange( minmax.first, minmax.second );
 }
 
+
 void RangedSlider::setValue(double value)
 {
-   _val = value;
-//   _valText = QString("%1").arg(_val, 0, 'f', _prec);
-   update();
+    _val = value;
+
+    if (_val < _min)
+	_val = _min;
+    if (_val > _max)
+	_val = _max;
 
-   // See comment in constructor for why we call this here
-   this->setSizes();
-   return;
+    if (_markerTextIsValue) {
+	_markerText = QString("%1").arg(value, 0, 'f', _prec);
+	qDebug() << _markerText;
+    }
+
+    update();
+
+    // See comment in constructor for why we call this here
+    //this->setSizes();
+    return;
 }
 
+
 void RangedSlider::setPrecision(int precision)
 {
-   _prec = precision;
-   update();
+    _prec = precision;
+    update();
 }
 
+
 void RangedSlider::setBackgroundBrush( QBrush const& brush )
 {
-   _bgBrush = brush;
-   update();
+    _bgBrush = brush;
+    update();
 }
 
-void RangedSlider::setPreferredRangeBrush( QBrush const& brush )
-{
-   _prefRangeBrush = brush;
-   update();
-}
-
-void RangedSlider::setPreferredRangePen( QPen const& pen )
-{
-   _prefRangePen = pen;
-   update();
-}
 
 void RangedSlider::setMarkerBrush( QBrush const& brush )
 {
-   _markerBrush = brush;
-   update();
+    _markerBrush = brush;
+    update();
 }
 
 void RangedSlider::setMarkerText( QString const& text )
 {
-   _markerText = text;
-   update();
+    _markerText = text;
+    update();
 }
 
 void RangedSlider::setMarkerTextIsValue(bool val)
 {
-   _markerTextIsValue = val;
-   update();
+    _markerTextIsValue = val;
+    update();
 }
 
-void RangedSlider::setTickMarks( double primaryInterval, int secondaryTicks )
-{
-   _secondaryTicks = (secondaryTicks<1)? 1 : secondaryTicks;
-   _tickInterval = primaryInterval/_secondaryTicks;
-
-   update();
-}
 
 void RangedSlider::recalculateHeightInPixels() const {
    //
@@ -209,16 +197,16 @@
    // assumptions about space below the baseline are locale-specific, so, say, using ascent() instead of lineSpacing()
    // could end up painting us into a corner.
    //
-   QFontMetrics indicatorTextFontMetrics(this->indicatorTextFont);
-//   QFontMetrics valueTextFontMetrics(this->valueTextFont);
-   this->heightInPixels = indicatorTextFontMetrics.lineSpacing()/* + valueTextFontMetrics.lineSpacing()*/;
+   //QFontMetrics indicatorTextFontMetrics(this->indicatorTextFont);
+   this->heightInPixels = this->height(); //indicatorTextFontMetrics.lineSpacing();
    return;
 }
 
 void RangedSlider::setSizes() {
    // Caller's responsibility to have recently called this->recalculateHeightInPixels().  (See comment in that function
    // for how we choose minimum width.)
-   this->setMinimumSize(2 * this->heightInPixels, this->heightInPixels);
+//   this->setMinimumSize(2 * this->heightInPixels, this->heightInPixels);
+   this->setMinimumSize(60, 20);
 
    this->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Fixed );
 
@@ -237,41 +225,32 @@
 
 void RangedSlider::mouseMoveEvent(QMouseEvent* event)
 {
-   event->accept();
+    event->accept();
 
-   QPoint tipPoint( mapToGlobal(QPoint(0,0)) );
-   QToolTip::showText( tipPoint, _tooltipText, this );
+    QPoint tipPoint( mapToGlobal(QPoint(0,0)) );
+    QToolTip::showText( tipPoint, _tooltipText, this );
 }
 
+
 void RangedSlider::paintEvent(QPaintEvent* event)
 {
    //
    // Simplistically, the high-level layout of the slider is:
    //
-   //    |-------------------------------------------------------------|
-   //    |                   Indicator text               | B L A N K  |
-   //    |------------------------------------------------+------------|
+   //    |------------------------------------------------|
    //    | <--------------- Graphical Area -------------> |
    //    |------------------------------------------------|
    //
    // The graphical area has:
    //  - a background rectangle of the full width of the area, representing the range from this->_min to this->_max
    //  - a foreground rectangle showing the sub-range of this background from this->_prefMin to this->_prefMax
-   //  - a line ("the indicator") showing where this->_val lies in the (this->_min to this->_max) range
+   //  - a vertical line ("the indicator") showing where this->_val lies in the (this->_min to this->_max) range
    //
-   // The indicator text sits above the indicator line and shows either its value (this->_valText) or some textual
+   // The indicator text sits on the center of the area and shows either its value (this->_valText) or some textual
    // description (eg "Slightly Malty" on the IBU/GU scale) which comes from this->_markerText.
    //
-   // In principle, we could have the value text a slightly different height than the graphical area - eg to help
-   // squeeze into smaller available vertical space on small screens (as we know there is blank space of
-   // indicatorTextHeight pixels above the space for the value text).
-   //
-   // The value text also shows this->_valText.
-   //
 
-   QFontMetrics indicatorTextFontMetrics(this->indicatorTextFont);
-   int indicatorTextHeight = indicatorTextFontMetrics.lineSpacing();
-   int graphicalAreaHeight = this->height() - indicatorTextHeight;
+   int graphicalAreaHeight = this->height();
 
    // Although the Qt calls take an x- and a y- radius, we want the radius on the rectangle corners to be the same
    // vertically and horizontally, so only define one measure here.
@@ -295,7 +274,7 @@
    QPainter painter(this);
 
    // Work out the left-to-right (ie x-coordinate) positions of things in the graphical area
-   double graphicalAreaWidth  = this->width()/* - valueTextWidth*/;
+   double graphicalAreaWidth  = this->width();
    double range               = this->_max - this->_min;
    double fgRectLeft          = graphicalAreaWidth * ((this->_prefMin - this->_min    )/range);
    double fgRectWidth         = graphicalAreaWidth * ((this->_prefMax - this->_prefMin)/range);
@@ -308,88 +287,53 @@
    indicatorLineMiddle = qBound(0.0, indicatorLineMiddle, graphicalAreaWidth - (indicatorLineWidth / 2));
    indicatorLineLeft   = qBound(0.0, indicatorLineLeft,   graphicalAreaWidth - indicatorLineWidth);
 
-   // The left-to-right position of the indicator text (also known as marker text) depends on where the slider is.
-   // First we ask the painter what size rectangle it will need to display this text
-   painter.setPen(indicatorTextColor);
-   painter.setFont(this->indicatorTextFont);
-   QRectF indicatorTextRect = painter.boundingRect(QRectF(), Qt::AlignCenter | Qt::AlignBottom, this->_markerText);
-
-   // Then we use the size of this rectangle to try to make the middle of the text sit over the indicator marker on
-   // the slider - but bounding things so that the text doesn't go off the edge of the slider.
-   double indicatorTextLeft = qBound(0.0,
-                                    indicatorLineMiddle - (indicatorTextRect.width() / 2),
-                                    graphicalAreaWidth - indicatorTextRect.width());
-
-   // Now we can draw the indicator text
-   painter.drawText(
-      indicatorTextLeft, 0,
-      indicatorTextRect.width(), indicatorTextRect.height(),
-      Qt::AlignCenter | Qt::AlignBottom, this->_markerText
-   );
-
    // All the rest of what we need to do is inside the graphical area, so move the origin to the top-left corner of it
-   painter.translate(0, indicatorTextRect.height());
+   painter.translate(0, 0);
    painter.setPen(Qt::NoPen);
 
    // Make sure anything we draw "inside" the "glass rectangle" stays inside.
    QPainterPath clipRect;
-   clipRect.addRoundedRect( QRectF(0, 0, graphicalAreaWidth, graphicalAreaHeight),
-                            rectangleCornerRadius,
-                            rectangleCornerRadius );
+   clipRect.addRoundedRect( QRectF(0, 0, graphicalAreaWidth, graphicalAreaHeight), rectangleCornerRadius, rectangleCornerRadius );
    painter.setClipPath(clipRect);
 
    // Draw the background rectangle.
    painter.setBrush(_bgBrush);
    painter.setRenderHint(QPainter::Antialiasing);
-   painter.drawRoundedRect( QRectF(0, 0, graphicalAreaWidth, graphicalAreaHeight),
-                            rectangleCornerRadius,
-                            rectangleCornerRadius );
+   painter.drawRoundedRect( QRectF(0, 0, graphicalAreaWidth, graphicalAreaHeight), rectangleCornerRadius, rectangleCornerRadius );
    painter.setRenderHint(QPainter::Antialiasing, false);
 
    // Draw the style "foreground" rectangle.
    painter.save();
-      painter.setBrush(_prefRangeBrush);
-      painter.setPen(_prefRangePen);
-      painter.setRenderHint(QPainter::Antialiasing);
-      painter.drawRoundedRect( QRectF(fgRectLeft, 0, fgRectWidth, graphicalAreaHeight),
-                               rectangleCornerRadius,
-                               rectangleCornerRadius );
+   painter.setBrush(_prefRangeBrush);
+   painter.setPen(_prefRangePen);
+   painter.setRenderHint(QPainter::Antialiasing);
+   painter.drawRoundedRect( QRectF(fgRectLeft, 0, fgRectWidth, graphicalAreaHeight), rectangleCornerRadius, rectangleCornerRadius );
    painter.restore();
 
    // Draw the indicator.
    painter.setBrush(_markerBrush);
    painter.drawRect( QRectF(indicatorLineLeft, 0, indicatorLineWidth, graphicalAreaHeight) );
 
-   // Draw a white-to-clear gradient to suggest "glassy."
-   painter.setBrush(glassBrush);
-   painter.setRenderHint(QPainter::Antialiasing);
-   painter.drawRoundedRect( QRectF(0, 0, graphicalAreaWidth, graphicalAreaHeight),
-                            rectangleCornerRadius,
-                            rectangleCornerRadius );
-   painter.setRenderHint(QPainter::Antialiasing, false);
+    // Draw a white-to-clear gradient to suggest "glassy."
+    painter.setBrush(glassBrush);
+    painter.setRenderHint(QPainter::Antialiasing);
+    painter.drawRoundedRect( QRectF(0, 0, graphicalAreaWidth, graphicalAreaHeight), rectangleCornerRadius, rectangleCornerRadius );
+    painter.setRenderHint(QPainter::Antialiasing, false);
 
-   // Draw the ticks.
-   painter.setPen(Qt::black);
-   if( _tickInterval > 0.0 )
-   {
-      int secTick = 1;
-      for( double currentTick = _min+_tickInterval; _max - currentTick > _tickInterval-1e-6; currentTick += _tickInterval )
-      {
-         painter.translate( graphicalAreaWidth/(_max-_min) * _tickInterval, 0);
-         if( secTick == _secondaryTicks )
-         {
-            painter.drawLine( QPointF(0,0.25*graphicalAreaHeight), QPointF(0,0.75*graphicalAreaHeight) );
-            secTick = 1;
-         }
-         else
-         {
-            painter.drawLine( QPointF(0,0.333*graphicalAreaHeight), QPointF(0,0.666*graphicalAreaHeight) );
-            ++secTick;
-         }
-      }
-   }
+    // Draw the _markerText in the center of the widget.
+    // First we ask the painter what size rectangle it will need to display this text
+    painter.setPen(indicatorTextColor);
+    painter.setFont(this->indicatorTextFont);
+    QRectF indicatorTextRect = painter.boundingRect(QRectF(), Qt::AlignCenter | Qt::AlignBottom, this->_markerText);
 
-   return;
+    // Then we use the size of this rectangle to try to calculate the X and Y position for the markerText.
+    double indicatorTextX = (graphicalAreaWidth - indicatorTextRect.width()) / 2;
+    double indicatorTextY = (graphicalAreaHeight - indicatorTextRect.height()) / 2;
+
+    // Now we can draw the indicator text
+    painter.drawText( indicatorTextX, indicatorTextY, indicatorTextRect.width(), indicatorTextRect.height(), Qt::AlignCenter | Qt::AlignBottom, this->_markerText);
+
+    return;
 }
 
 
--- a/src/RangedSlider.h	Thu Mar 31 17:16:44 2022 +0200
+++ b/src/RangedSlider.h	Thu Mar 31 23:10:57 2022 +0200
@@ -48,10 +48,6 @@
 
    //! \brief Set the background brush for the widget.
    void setBackgroundBrush( QBrush const& brush );
-   //! \brief Set the brush for the preffered range.
-   void setPreferredRangeBrush( QBrush const& brush );
-   //! \brief Set the pen for the preferred range
-   void setPreferredRangePen( QPen const& pen );
    //! \brief Set the brush for the marker.
    void setMarkerBrush( QBrush const& brush );
    //! \brief Set the text displayed above the marker.
@@ -59,16 +55,6 @@
    //! \brief If true, the marker text will always be updated to the value given by \c setValue().
    void setMarkerTextIsValue(bool val);
 
-   /*!
-    * \brief Set the tick mark intervals.
-    *
-    * If either parameter is <= 0, then the tick marks are not drawn.
-    *
-    * \param primaryInterval How often to draw big tick marks.
-    * \param secondaryTicks Number of secondary ticks per primary tick.
-    */
-   void setTickMarks( double primaryInterval, int secondaryTicks = 1 );
-
    //! \brief Set the \c precision for displaying values.
    void setPrecision(int precision);
 
@@ -76,33 +62,25 @@
    virtual QSize sizeHint() const;
 
 public slots:
-
-   //! \brief Set the \c value for the indicator.
+   /**
+    * @brief Set the value for the indicator.
+    */
    void setValue(double value);
 
-   /*!
-    * \brief Set the range of values considered to be *best*
+   /**
+    * @brief Set the range of values considered to be *best* and calculate
+    *        the real widget display.
     *
-    * \param range \c range.first and \c range.second are the min and max
-    *        values for the preferred range resp.
-    */
-   void setPreferredRange(QPair<double,double> range);
-
-   /*!
-    * \brief Set the range of values that the widget displays
-    *
-    * \param range \c range.first and \c range.second are the min and max
+    * @param range range.first and range.second are the min and max
     *        values for the preferred range resp.
     */
    void setRange(QPair<double,double> range);
 
-   //! \brief Convenience method for setting the widget range
+   /**
+    * @brief Convenience method for setting the widget range
+    */
    void setRange( double min, double max );
 
-   //! \brief Convenience method for setting the preferred range
-   //         Note that this is completely unrelated to "preferred size".
-   void setPreferredRange( double min, double max );
-
 protected:
    //! \brief Reimplemented from QWidget.
    virtual void paintEvent(QPaintEvent* event);
@@ -138,8 +116,6 @@
    double _val;
    QString _markerText;
    int _prec;
-   double _tickInterval;
-   int _secondaryTicks;
    QString _tooltipText;
    QBrush _bgBrush;
    QBrush _prefRangeBrush;
--- a/ui/EditRecipe.ui	Thu Mar 31 17:16:44 2022 +0200
+++ b/ui/EditRecipe.ui	Thu Mar 31 23:10:57 2022 +0200
@@ -397,7 +397,7 @@
           <x>220</x>
           <y>200</y>
           <width>148</width>
-          <height>41</height>
+          <height>24</height>
          </rect>
         </property>
        </widget>
@@ -449,7 +449,7 @@
         <property name="geometry">
          <rect>
           <x>0</x>
-          <y>260</y>
+          <y>230</y>
           <width>131</width>
           <height>20</height>
          </rect>
@@ -465,7 +465,7 @@
         <property name="geometry">
          <rect>
           <x>0</x>
-          <y>320</y>
+          <y>260</y>
           <width>131</width>
           <height>20</height>
          </rect>
@@ -481,7 +481,7 @@
         <property name="geometry">
          <rect>
           <x>0</x>
-          <y>380</y>
+          <y>290</y>
           <width>131</width>
           <height>20</height>
          </rect>
@@ -497,7 +497,7 @@
         <property name="geometry">
          <rect>
           <x>140</x>
-          <y>260</y>
+          <y>230</y>
           <width>71</width>
           <height>24</height>
          </rect>
@@ -525,9 +525,9 @@
         <property name="geometry">
          <rect>
           <x>220</x>
-          <y>260</y>
+          <y>230</y>
           <width>148</width>
-          <height>37</height>
+          <height>24</height>
          </rect>
         </property>
        </widget>
@@ -535,16 +535,22 @@
         <property name="geometry">
          <rect>
           <x>140</x>
-          <y>320</y>
-          <width>71</width>
+          <y>260</y>
+          <width>57</width>
           <height>24</height>
          </rect>
         </property>
         <property name="alignment">
          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
         </property>
+        <property name="readOnly">
+         <bool>true</bool>
+        </property>
+        <property name="buttonSymbols">
+         <enum>QAbstractSpinBox::NoButtons</enum>
+        </property>
         <property name="accelerated">
-         <bool>true</bool>
+         <bool>false</bool>
         </property>
         <property name="suffix">
          <string> %</string>
@@ -566,16 +572,22 @@
         <property name="geometry">
          <rect>
           <x>140</x>
-          <y>380</y>
-          <width>71</width>
+          <y>290</y>
+          <width>57</width>
           <height>24</height>
          </rect>
         </property>
         <property name="alignment">
          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
         </property>
+        <property name="readOnly">
+         <bool>true</bool>
+        </property>
+        <property name="buttonSymbols">
+         <enum>QAbstractSpinBox::NoButtons</enum>
+        </property>
         <property name="accelerated">
-         <bool>true</bool>
+         <bool>false</bool>
         </property>
         <property name="decimals">
          <number>0</number>
@@ -594,9 +606,9 @@
         <property name="geometry">
          <rect>
           <x>220</x>
-          <y>320</y>
+          <y>260</y>
           <width>148</width>
-          <height>37</height>
+          <height>24</height>
          </rect>
         </property>
        </widget>
@@ -614,7 +626,7 @@
         <property name="geometry">
          <rect>
           <x>140</x>
-          <y>420</y>
+          <y>320</y>
           <width>201</width>
           <height>23</height>
          </rect>
@@ -624,9 +636,9 @@
         <property name="geometry">
          <rect>
           <x>220</x>
-          <y>380</y>
+          <y>290</y>
           <width>151</width>
-          <height>31</height>
+          <height>24</height>
          </rect>
         </property>
        </widget>

mercurial