|
From: Tapio V. <aa...@us...> - 2011-01-05 09:11:35
|
Module: editor
Branch: master
Commit: a467a3ef75bef556578b0679f05273005c0b4b57
Author: Tapio Vierros <tap...@gm...>
Date: Wed Jan 5 11:01:08 2011 +0200
Labels can be split from the middle with right click.
---
draglabel.cc | 23 +++++++++++++++--------
draglabel.hh | 5 +++--
dragwidget.cc | 50 +++++++++++++++++++++++++++++++++++---------------
3 files changed, 53 insertions(+), 25 deletions(-)
diff --git a/draglabel.cc b/draglabel.cc
index b2f0f7c..ebf78a8 100644
--- a/draglabel.cc
+++ b/draglabel.cc
@@ -47,18 +47,20 @@ namespace {
}
DragLabel::DragLabel(const QString &text, QWidget *parent)
- : QLabel(parent)
+ : QLabel(parent), m_labelText(text)
{
- m_labelText = text;
- QFontMetrics metric(font());
- QSize s = metric.size(Qt::TextSingleLine, text);
- s.rwidth() += text_margin;
- s.rheight() += text_margin;
- createPixmap(s);
+ createPixmap();
}
void DragLabel::createPixmap(QSize size)
{
+ if (!size.isValid()) {
+ QFontMetrics metric(font());
+ size = metric.size(Qt::TextSingleLine, m_labelText);
+ size.rwidth() += text_margin;
+ size.rheight() += text_margin;
+ }
+
QImage image(size.width(), size.height(),
QImage::Format_ARGB32_Premultiplied);
image.fill(qRgba(0, 0, 0, 0));
@@ -87,11 +89,16 @@ void DragLabel::createPixmap(QSize size)
setPixmap(QPixmap::fromImage(image));
}
-QString DragLabel::labelText() const
+QString DragLabel::getText() const
{
return m_labelText;
}
+void DragLabel::setText(const QString &text)
+{
+ m_labelText = text;
+}
+
void DragLabel::resizeEvent(QResizeEvent *event)
{
createPixmap(event->size());
diff --git a/draglabel.hh b/draglabel.hh
index a1b73f0..052f348 100644
--- a/draglabel.hh
+++ b/draglabel.hh
@@ -53,8 +53,9 @@ class DragLabel : public QLabel
{
public:
DragLabel(const QString &text, QWidget *parent);
- void createPixmap(QSize size);
- QString labelText() const;
+ void createPixmap(QSize size = QSize());
+ QString getText() const;
+ void setText(const QString &text);
void resizeEvent(QResizeEvent *event);
diff --git a/dragwidget.cc b/dragwidget.cc
index 889dc3a..aa9be1d 100644
--- a/dragwidget.cc
+++ b/dragwidget.cc
@@ -43,6 +43,7 @@
#include "draglabel.hh"
#include "dragwidget.hh"
#include <iostream>
+#include <cmath>
DragWidget::DragWidget(QWidget *parent)
: QWidget(parent)
@@ -152,27 +153,46 @@ void DragWidget::mousePressEvent(QMouseEvent *event)
if (!child)
return;
- QPoint hotSpot = event->pos() - child->pos();
+ if (event->button() == Qt::LeftButton) {
+ QPoint hotSpot = event->pos() - child->pos();
- QByteArray itemData;
- QDataStream dataStream(&itemData, QIODevice::WriteOnly);
- dataStream << child->labelText() << QPoint(hotSpot);
+ QByteArray itemData;
+ QDataStream dataStream(&itemData, QIODevice::WriteOnly);
+ dataStream << child->getText() << QPoint(hotSpot);
- QMimeData *mimeData = new QMimeData;
- mimeData->setData("application/x-fridgemagnet", itemData);
- mimeData->setText(child->labelText());
+ QMimeData *mimeData = new QMimeData;
+ mimeData->setData("application/x-fridgemagnet", itemData);
+ mimeData->setText(child->getText());
- QDrag *drag = new QDrag(this);
- drag->setMimeData(mimeData);
- drag->setPixmap(*child->pixmap());
- drag->setHotSpot(hotSpot);
+ QDrag *drag = new QDrag(this);
+ drag->setMimeData(mimeData);
+ drag->setPixmap(*child->pixmap());
+ drag->setHotSpot(hotSpot);
- child->hide();
+ child->hide();
+
+ if (drag->exec(Qt::MoveAction | Qt::CopyAction, Qt::CopyAction) == Qt::MoveAction)
+ child->close();
+ else
+ child->show();
+
+ } else if (event->button() == Qt::RightButton) {
+ int cutpos = int(std::ceil(child->getText().length() / 2.0));
+ QString firstst = child->getText().left(cutpos);
+ QString secondst = child->getText().right(child->getText().length() - cutpos);
+
+ DragLabel *newLabel1 = new DragLabel(firstst, this);
+ newLabel1->move(child->pos());
+ newLabel1->show();
+ newLabel1->setAttribute(Qt::WA_DeleteOnClose);
+
+ DragLabel *newLabel2 = new DragLabel(secondst, this);
+ newLabel2->move(newLabel1->pos() + QPoint(newLabel1->width(), 0));
+ newLabel2->show();
+ newLabel2->setAttribute(Qt::WA_DeleteOnClose);
- if (drag->exec(Qt::MoveAction | Qt::CopyAction, Qt::CopyAction) == Qt::MoveAction)
child->close();
- else
- child->show();
+ }
}
void DragWidget::wheelEvent(QWheelEvent *event)
|