***************************************************************************/
-#include <QMouseEvent>
-#include <QStylePainter>
+#include "smallruler.h"
#include <KDebug>
-#include "smallruler.h"
-
+#include <QMouseEvent>
+#include <QStylePainter>
SmallRuler::SmallRuler(QWidget *parent)
: QWidget(parent), m_scale(1), m_maxval(25) {
}
void SmallRuler::setZone(int start, int end) {
- m_zoneStart = start;
- m_zoneEnd = end;
+ if (start != -1) {
+ if (end != -1 && start >= end) {
+ m_zoneEnd = qMin(m_maxval, end + (start - m_zoneStart));
+ m_zoneStart = start;
+ } else if (end == -1 && start >= m_zoneEnd) {
+ m_zoneEnd = qMin(m_maxval, m_zoneEnd + (start - m_zoneStart));
+ m_zoneStart = start;
+ } else m_zoneStart = start;
+ }
+ if (end != -1) {
+ if (start != -1 && end <= start) {
+ m_zoneStart = qMax(0, start - (m_zoneEnd - end));
+ m_zoneEnd = end;
+ } else if (start == -1 && end <= m_zoneStart) {
+ m_zoneStart = qMax(0, m_zoneStart - (m_zoneEnd - end));
+ m_zoneEnd = end;
+ } else m_zoneEnd = end;
+ }
update();
}
+QPoint SmallRuler::zone() {
+ return QPoint(m_zoneStart, m_zoneEnd);
+}
+
// virtual
void SmallRuler::mousePressEvent(QMouseEvent * event) {
const int pos = event->x() / m_scale;
- emit seekRenderer((int) pos);
+ if (event->button() == Qt::RightButton) {
+ // Right button clicked, move selection zone
+ if (qAbs(pos - m_zoneStart) < qAbs(pos - m_zoneEnd)) m_zoneStart = pos;
+ else m_zoneEnd = pos;
+ emit zoneChanged(QPoint(m_zoneStart, m_zoneEnd));
+ update();
+
+ } else emit seekRenderer((int) pos);
}
// virtual
void SmallRuler::mouseMoveEvent(QMouseEvent * event) {
const int pos = event->x() / m_scale;
- emit seekRenderer((int) pos);
+ if (event->buttons() & Qt::LeftButton) emit seekRenderer((int) pos);
}
void SmallRuler::slotNewValue(int value) {