summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMateusz Piekos <mateuszpiekos@gmail.com>2012-06-26 12:23:47 (GMT)
committerMateusz Piekos <mateuszpiekos@gmail.com>2012-06-26 12:23:47 (GMT)
commit60076b8e5dc557716e82d7588ff9a99247e485bf (patch)
tree9d8cc54bed7036f93098cf60b76288217c1f06e3
parent99bc38e1d21b0081618485e49b0ab1bcd5bef22f (diff)
downloadswift-contrib-60076b8e5dc557716e82d7588ff9a99247e485bf.zip
swift-contrib-60076b8e5dc557716e82d7588ff9a99247e485bf.tar.bz2
Added handling of text elements
-rw-r--r--Swift/QtUI/Whiteboard/GView.cpp17
-rw-r--r--Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp2
-rw-r--r--Swift/QtUI/Whiteboard/TextDialog.cpp5
-rw-r--r--Swift/QtUI/Whiteboard/TextDialog.h4
-rw-r--r--Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h9
-rw-r--r--Swiften/Parser/PayloadParsers/WhiteboardParser.cpp34
-rw-r--r--Swiften/Parser/PayloadParsers/WhiteboardParser.h1
7 files changed, 59 insertions, 13 deletions
diff --git a/Swift/QtUI/Whiteboard/GView.cpp b/Swift/QtUI/Whiteboard/GView.cpp
index badbb8e..a450808 100644
--- a/Swift/QtUI/Whiteboard/GView.cpp
+++ b/Swift/QtUI/Whiteboard/GView.cpp
@@ -5,6 +5,7 @@
*/
#include "GView.h"
+#include <QtSwiftUtil.h>
namespace Swift {
GView::GView(QGraphicsScene* scene, QWidget* parent) : QGraphicsView(scene, parent), brush(QColor(Qt::white))
@@ -162,7 +163,7 @@ namespace Swift {
if (mode == Line) {
QPointF point = this->mapToScene(event->pos());
QGraphicsItem* item = scene()->addLine(point.x(), point.y(), point.x(), point.y(), pen);
- QString id = QString::fromStdString(idGenerator.generateID());
+ QString id = P2QSTRING(idGenerator.generateID());
items_.insert(id, item);
item->setZValue(zValue++);
item->setData(0, id);
@@ -171,7 +172,7 @@ namespace Swift {
else if (mode == Rect) {
QPointF point = this->mapToScene(event->pos());
QGraphicsRectItem* item = scene()->addRect(point.x(), point.y(), 0, 0, pen, brush);
- QString id = QString::fromStdString(idGenerator.generateID());
+ QString id = P2QSTRING(idGenerator.generateID());
items_.insert(id, item);
item->setZValue(zValue++);
item->setData(0, point);
@@ -193,7 +194,7 @@ namespace Swift {
else if (mode == Circle) {
QPointF point = this->mapToScene(event->pos());
QGraphicsEllipseItem* item = scene()->addEllipse(point.x(), point.y(), 0, 0, pen, brush);
- QString id = QString::fromStdString(idGenerator.generateID());
+ QString id = P2QSTRING(idGenerator.generateID());
items_.insert(id, item);
item->setZValue(zValue++);
item->setData(0, point);
@@ -203,7 +204,7 @@ namespace Swift {
else if (mode == HandLine) {
QPointF point = this->mapToScene(event->pos());
FreehandLineItem* item = new FreehandLineItem;
- QString id = QString::fromStdString(idGenerator.generateID());
+ QString id = P2QSTRING(idGenerator.generateID());
items_.insert(id, item);
item->setPen(pen);
item->setStartPoint(point);
@@ -216,7 +217,7 @@ namespace Swift {
QPointF point = this->mapToScene(event->pos());
QPainterPath path;
QGraphicsPathItem* item = scene()->addPath(path, pen, brush);
- QString id = QString::fromStdString(idGenerator.generateID());
+ QString id = P2QSTRING(idGenerator.generateID());
items_.insert(id, item);
item->setZValue(zValue++);
item->setData(0, point);
@@ -226,13 +227,13 @@ namespace Swift {
else if (mode == Text) {
QPointF point = this->mapToScene(event->pos());
QGraphicsTextItem* item = scene()->addText("");
- QString id = QString::fromStdString(idGenerator.generateID());
+ QString id = P2QSTRING(idGenerator.generateID());
items_.insert(id, item);
item->setZValue(zValue++);
item->setData(0, id);
item->setDefaultTextColor(pen.color());
textDialog = new TextDialog(item, this);
- connect(textDialog, SIGNAL(accepted()), this, SIGNAL(lastItemChanged(textDialog)));
+ connect(textDialog, SIGNAL(accepted(QGraphicsItem*)), this, SIGNAL(lastItemChanged(QGraphicsItem*)));
textDialog->setAttribute(Qt::WA_DeleteOnClose);
textDialog->show();
item->setPos(point);
@@ -246,7 +247,7 @@ namespace Swift {
polygon.append(point);
polygon.append(point);
item = scene()->addPolygon(polygon, pen, brush);
- QString id = QString::fromStdString(idGenerator.generateID());
+ QString id = P2QSTRING(idGenerator.generateID());
items_.insert(id, item);
item->setZValue(zValue++);
item->setData(0, id);
diff --git a/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp b/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp
index 55d3479..6e259a2 100644
--- a/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp
+++ b/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp
@@ -266,7 +266,7 @@ namespace Swift {
QPointF point = textItem->pos();
WhiteboardTextElement::ref element = boost::make_shared<WhiteboardTextElement>(point.x(), point.y());
element->setText(textItem->toPlainText().toStdString());
-
+ element->setSize(textItem->font().pointSize());
QColor color = textItem->defaultTextColor();
element->setColor(Color(color.red(), color.green(), color.blue(), color.alpha()));
diff --git a/Swift/QtUI/Whiteboard/TextDialog.cpp b/Swift/QtUI/Whiteboard/TextDialog.cpp
index caa78ce..021895a 100644
--- a/Swift/QtUI/Whiteboard/TextDialog.cpp
+++ b/Swift/QtUI/Whiteboard/TextDialog.cpp
@@ -44,4 +44,9 @@ namespace Swift {
font.setPointSize(i);
item->setFont(font);
}
+
+ void TextDialog::accept() {
+ emit accepted(item);
+ done(QDialog::Accepted);
+ }
}
diff --git a/Swift/QtUI/Whiteboard/TextDialog.h b/Swift/QtUI/Whiteboard/TextDialog.h
index 8b31d5b..7f0e56a 100644
--- a/Swift/QtUI/Whiteboard/TextDialog.h
+++ b/Swift/QtUI/Whiteboard/TextDialog.h
@@ -33,7 +33,11 @@ namespace Swift {
QHBoxLayout* hLayout;
QSpinBox* fontSizeBox;
+ signals:
+ void accepted(QGraphicsItem* item);
+
private slots:
+ void accept();
void changeItemText(const QString &text);
void changeItemFontSize(int i);
};
diff --git a/Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h b/Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h
index 4b2f7ed..214ea10 100644
--- a/Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h
+++ b/Swift/QtUI/Whiteboard/WhiteboardElementDrawingVisitor.h
@@ -85,7 +85,14 @@ namespace Swift {
}
void visit(WhiteboardTextElement& element) {
-
+ QGraphicsTextItem* item = new QGraphicsTextItem(P2QSTRING(element.getText()));
+ item->setPos(QPointF(element.getX(), element.getY()));
+ QFont font = item->font();
+ font.setPointSize(element.getSize());
+ item->setFont(font);
+ Color color = element.getColor();
+ item->setDefaultTextColor(QColor(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()));
+ graphicsView_->scene()->addItem(item);
}
void visit(WhiteboardEllipseElement& element) {
diff --git a/Swiften/Parser/PayloadParsers/WhiteboardParser.cpp b/Swiften/Parser/PayloadParsers/WhiteboardParser.cpp
index b5cfa7b..aca3103 100644
--- a/Swiften/Parser/PayloadParsers/WhiteboardParser.cpp
+++ b/Swiften/Parser/PayloadParsers/WhiteboardParser.cpp
@@ -17,7 +17,7 @@
#include <boost/lexical_cast.hpp>
namespace Swift {
- WhiteboardParser::WhiteboardParser() : level_(0) {
+ WhiteboardParser::WhiteboardParser() : actualIsText(false), level_(0) {
}
void WhiteboardParser::handleStartElement(const std::string& element, const std::string&, const AttributeMap& attributes) {
@@ -167,7 +167,28 @@ namespace Swift {
getPayloadInternal()->setElement(whiteboardElement);
} else if (element == "text") {
- WhiteboardTextElement::ref whiteboardElement = boost::make_shared<WhiteboardTextElement>(0,0);
+ int x = 0;
+ int y = 0;
+ try {
+ x = boost::lexical_cast<int>(attributes.getAttributeValue("x").get_value_or("0"));
+ y = boost::lexical_cast<int>(attributes.getAttributeValue("y").get_value_or("0"));
+ } catch (boost::bad_lexical_cast&) {
+ }
+
+ WhiteboardTextElement::ref whiteboardElement = boost::make_shared<WhiteboardTextElement>(x, y);
+
+ actualIsText = true;
+ Color color(attributes.getAttributeValue("fill").get_value_or("#000000"));
+ color.setAlpha(opacityToAlpha(attributes.getAttributeValue("opacity").get_value_or("1")));
+ whiteboardElement->setColor(color);
+
+ int fontSize = 1;
+ try {
+ fontSize = boost::lexical_cast<int>(attributes.getAttributeValue("font-size").get_value_or("12"));
+ } catch (boost::bad_lexical_cast&) {
+ }
+ whiteboardElement->setSize(fontSize);
+
getPayloadInternal()->setElement(whiteboardElement);
} else if (element == "ellipse") {
int cx = 0;
@@ -208,11 +229,18 @@ namespace Swift {
--level_;
if (level_ == 0) {
getPayloadInternal()->setData(data_);
+ } else if (level_ == 1) {
+ if (element == "text") {
+ actualIsText = false;
+ }
}
}
void WhiteboardParser::handleCharacterData(const std::string& data) {
- data_ += data;
+ if (level_ == 2 && actualIsText) {
+ WhiteboardTextElement::ref element = boost::dynamic_pointer_cast<WhiteboardTextElement>(getPayloadInternal()->getElement());
+ element->setText(data);
+ }
}
WhiteboardPayload::Type WhiteboardParser::stringToType(const std::string& type) const {
diff --git a/Swiften/Parser/PayloadParsers/WhiteboardParser.h b/Swiften/Parser/PayloadParsers/WhiteboardParser.h
index dfb2236..7c93de3 100644
--- a/Swiften/Parser/PayloadParsers/WhiteboardParser.h
+++ b/Swiften/Parser/PayloadParsers/WhiteboardParser.h
@@ -24,6 +24,7 @@ namespace Swift {
int opacityToAlpha(std::string opacity) const;
private:
+ bool actualIsText;
int level_;
std::string data_;
};