[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    koffice/krita/plugins/tools/defaulttools
From:       Sven Langkamp <sven.langkamp () gmail ! com>
Date:       2007-08-27 18:53:34
Message-ID: 1188240814.829357.20324.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 705330 by langkamp:

improved measure tool option widget

 M  +67 -30    kis_tool_measure.cc  
 M  +27 -3     kis_tool_measure.h  


--- trunk/koffice/krita/plugins/tools/defaulttools/kis_tool_measure.cc #705329:705330
@@ -23,6 +23,7 @@
 #include <QLayout>
 #include <QWidget>
 #include <QLabel>
+#include <QComboBox>
 
 #include <kdebug.h>
 #include <klocale.h>
@@ -34,6 +35,61 @@
 
 #define INNER_RADIUS 50
 
+KisToolMeasureOptionsWidget::KisToolMeasureOptionsWidget(QWidget* parent, double \
resolution) +    : QWidget(parent),
+      m_resolution(resolution)
+{
+    m_distance = 0.0;
+
+    QGridLayout* optionLayout = new QGridLayout(this);
+    Q_CHECK_PTR(optionLayout);
+    optionLayout->setMargin(0);
+    optionLayout->setSpacing(6);
+
+    optionLayout->addWidget(new QLabel(i18n("Distance: "), this), 0, 0);
+    optionLayout->addWidget(new QLabel(i18n("Angle: "), this), 1, 0);
+
+    m_distanceLabel = new QLabel(this);
+    m_distanceLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
+    optionLayout->addWidget(m_distanceLabel, 0, 1);
+
+    m_angleLabel = new QLabel( this);
+    m_angleLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
+    optionLayout->addWidget(m_angleLabel, 1, 1);
+
+    QComboBox* unitBox = new QComboBox(this);
+    unitBox->addItems( KoUnit::listOfUnitName(false) );
+    connect(unitBox, SIGNAL(currentIndexChanged(int)), this, \
SLOT(slotUnitChanged(int))); +    unitBox->setCurrentIndex(KoUnit::Pixel);
+
+    optionLayout->addWidget(unitBox, 0, 2);
+    optionLayout->addWidget(new QLabel("deg", this), 1, 2);
+    optionLayout->addItem(new QSpacerItem(1, 1, QSizePolicy::Fixed, \
QSizePolicy::Expanding), 2, 0, 1, 2); +}
+
+void KisToolMeasureOptionsWidget::slotSetDistance(double distance)
+{
+    m_distance = distance / m_resolution;
+    updateDistance();
+}
+
+void KisToolMeasureOptionsWidget::slotSetAngle(double angle)
+{
+    m_angleLabel->setText(QString("%1").arg(angle, 5, 'f', 1));
+}
+
+void KisToolMeasureOptionsWidget::slotUnitChanged(int index)
+{
+    m_unit = KoUnit((KoUnit::Unit)index, m_resolution);
+    updateDistance();
+}
+
+void KisToolMeasureOptionsWidget::updateDistance()
+{
+    m_distanceLabel->setText(QString("%1").arg(m_unit.toUserValue(m_distance), 5, \
'f', 1)); +}
+
+
 KisToolMeasure::KisToolMeasure(KoCanvasBase * canvas)
     : KisTool(canvas, QCursor(Qt::CrossCursor)),
       m_dragging( false )
@@ -67,9 +123,9 @@
     gc.drawLine(start, end);
 
     if(deltaX() >= 0)
-        gc.drawLine(start.x(), start.y(), start.x()+INNER_RADIUS, start.y());
+        gc.drawLine(QPointF(start.x(), start.y()), QPointF(start.x()+INNER_RADIUS, \
start.y()));  else
-        gc.drawLine(start.x(), start.y(), start.x()-INNER_RADIUS, start.y());
+        gc.drawLine(QPointF(start.x(), start.y()), QPointF(start.x()-INNER_RADIUS, \
start.y()));  
     if(distance() >= INNER_RADIUS){
         QRectF rectangle(start.x()-INNER_RADIUS, start.y()-INNER_RADIUS, \
2*INNER_RADIUS, 2*INNER_RADIUS); @@ -77,9 +133,9 @@
 
         int spanAngle;
         if((deltaY() >= 0 && deltaX() >= 0) || (deltaY() < 0 && deltaX() < 0))
-            spanAngle = angle() * 16;
+            spanAngle = static_cast<int>(angle() * 16);
         else
-            spanAngle = -angle() * 16;
+            spanAngle = static_cast<int>(-angle() * 16);
         gc.drawArc(rectangle, startAngle, spanAngle);
     }
 
@@ -100,8 +156,8 @@
         m_startPos = pos;
         m_endPos = pos;
     }
-    emit sigDistanceChanged(0);
-    emit sigAngleChanged(0);
+    emit sigDistanceChanged(0.0);
+    emit sigAngleChanged(0.0);
 }
 
 void KisToolMeasure::mouseMoveEvent(KoPointerEvent *e)
@@ -121,9 +177,9 @@
             m_endPos = pos;
 
         m_canvas->updateCanvas(convertToPt(boundingRect()));
+        emit sigDistanceChanged(distance());
+        emit sigAngleChanged(angle());
     }
-    emit sigDistanceChanged(distance());
-    emit sigAngleChanged(angle());
 }
 
 void KisToolMeasure::mouseReleaseEvent(KoPointerEvent *e)
@@ -135,28 +191,10 @@
 
 QWidget* KisToolMeasure::createOptionWidget()
 {
-    m_optWidget = new QWidget();
-    Q_CHECK_PTR(m_optWidget);
+    m_optWidget = new KisToolMeasureOptionsWidget(0, currentImage()->xRes());
+    connect(this, SIGNAL(sigDistanceChanged(double)), m_optWidget, \
SLOT(slotSetDistance(double))); +    connect(this, SIGNAL(sigAngleChanged(double)), \
m_optWidget, SLOT(slotSetAngle(double)));  
-    QLabel* distanceLabel = new QLabel(i18n("Distance: "), m_optWidget);
-    QLabel* angleLabel = new QLabel(i18n("Angle: "), m_optWidget);
-
-    QLabel* distance = new QLabel(i18n("1234 "), m_optWidget);
-    QLabel* angle = new QLabel(i18n("5678"), m_optWidget);
-    connect(this, SIGNAL(sigDistanceChanged(double)), distance, \
                SLOT(setNum(double)));
-    connect(this, SIGNAL(sigAngleChanged(double)), angle, SLOT(setNum(double)));
-
-    QGridLayout* optionLayout = new QGridLayout(m_optWidget);
-    Q_CHECK_PTR(optionLayout);
-
-    optionLayout->setMargin(0);
-    optionLayout->setSpacing(6);
-
-    optionLayout->addWidget(distanceLabel, 0, 0);
-    optionLayout->addWidget(angleLabel, 1, 0);
-    optionLayout->addWidget(distance, 0, 1);
-    optionLayout->addWidget(angle, 1, 1);
-
     return m_optWidget;
 }
 
@@ -180,4 +218,3 @@
 }
 
 #include "kis_tool_measure.moc"
-
--- trunk/koffice/krita/plugins/tools/defaulttools/kis_tool_measure.h #705329:705330
@@ -20,8 +20,9 @@
 #ifndef KIS_TOOL_MEASURE_H_
 #define KIS_TOOL_MEASURE_H_
 
+#include <KoUnit.h>
+
 #include "kis_tool.h"
-
 #include "kis_global.h"
 #include "kis_types.h"
 #include "KoToolFactory.h"
@@ -32,12 +33,35 @@
 
 class KoCanvasBase;
 
+
+class KisToolMeasureOptionsWidget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    KisToolMeasureOptionsWidget(QWidget* parent, double resolution);
+
+public slots:
+    void slotSetDistance(double distance);
+    void slotSetAngle(double angle);
+    void slotUnitChanged(int index);
+
+private:
+    void updateDistance();
+
+    double m_resolution;
+    QLabel* m_distanceLabel;
+    QLabel* m_angleLabel;
+    double m_distance;
+    KoUnit m_unit;
+};
+
 class KisToolMeasure : public KisTool {
 
     Q_OBJECT
     typedef KisTool super;
 
- public:
+public:
     KisToolMeasure(KoCanvasBase * canvas);
     virtual ~KisToolMeasure();
 
@@ -63,7 +87,7 @@
 
 private:
     bool m_dragging;
-    QWidget *m_optWidget;
+    KisToolMeasureOptionsWidget *m_optWidget;
 
     QPointF m_startPos;
     QPointF m_endPos;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic