22 #include <QImageReader>
23 #include <QGraphicsItem>
24 #include <QGraphicsRectItem>
30 namespace Widget_Utils
47 if (static_cast<ObjectWidget *>(obj)->localID() == id)
49 }
else if (obj->
id() == id) {
71 const qreal SIZE = 4.0;
72 const qreal SIZE_HALF = SIZE / 2.0;
73 QGraphicsRectItem *rect =
new QGraphicsRectItem(p.x() - SIZE_HALF,
77 rect->setBrush(QBrush(Qt::blue));
78 rect->setPen(QPen(Qt::blue));
90 ellipse.moveCenter(QPointF(0, 0));
91 qreal a = ellipse.width() * 0.5;
92 qreal b = ellipse.height() * .5;
93 qreal xc = ellipse.center().x();
94 qreal yc = ellipse.center().y();
97 qreal x1 = ellipse.center().x() + .7 * .5 * ellipse.width();
99 qreal y1_sqr = b*b*(1 - (x1 * x1) / (a*a));
100 qreal y1 = std::sqrt(y1_sqr);
103 QPointF p1(xc + x1, yc + y1);
104 QPointF p2(xc - x1, yc + y1);
105 QPointF p3(xc + x1, yc - y1);
106 QPointF p4(xc - x1, yc - y1);
109 p->translate(r.center().x(), r.center().y());
112 p->drawLine(QLineF(p1, p4));
113 p->drawLine(QLineF(p2, p3));
116 p->translate(-r.center().x(), -r.center().y());
129 const QRectF &rect,
const QSizeF &triSize)
133 poly[0] = rect.topLeft();
134 poly[1] = rect.topRight() - QPointF(triSize.width(), 0);
135 poly[2] = rect.topRight() + QPointF(0, triSize.height());
136 poly[3] = rect.bottomRight();
137 poly[4] = rect.bottomLeft();
138 painter->drawPolygon(poly);
141 QLineF heightEdge(poly[1], poly[1] + QPointF(0, triSize.height()));
142 painter->drawLine(heightEdge);
143 QLineF baseEdge(heightEdge.p2(), poly[2]);
144 painter->drawLine(baseEdge);
244 return QString(
"%1,%2").arg(point.x()).arg(point.y());
253 QStringList list = str.split(
',');
255 if(list.size() == 2) {
256 retVal.setX(list.first().toDouble());
257 retVal.setY(list.last().toDouble());
274 if (pixEle.isNull()) {
277 QDomElement xpmElement = pixEle.firstChildElement(
"xpm");
279 QByteArray xpmData = xpmElement.text().toLatin1();
280 QBuffer buffer(&xpmData);
281 buffer.open(QIODevice::ReadOnly);
283 QImageReader reader(&buffer,
"xpm");
285 if (!reader.read(&image)) {
289 pixmap = QPixmap::fromImage(image);
303 void savePixmapToXMI(QDomDocument &qDoc, QDomElement &qElement,
const QPixmap& pixmap)
305 QDomElement pixmapElement = qDoc.createElement(
"pixmap");
307 QDomElement xpmElement = qDoc.createElement(
"xpm");
308 pixmapElement.appendChild(xpmElement);
311 buffer.open(QIODevice::WriteOnly);
312 pixmap.save(&buffer,
"xpm");
315 xpmElement.appendChild(qDoc.createTextNode(QString(buffer.data())));
317 qElement.appendChild(pixmapElement);
336 if(gradientElement.isNull()) {
342 QGradientStops stops;
343 QGradient::CoordinateMode cmode = QGradient::LogicalMode;
344 QGradient::Spread spread = QGradient::PadSpread;
346 type_as_int = gradientElement.attribute(
"type").toInt();
348 type_as_int = gradientElement.attribute(
"spread").toInt();
349 spread = QGradient::Spread(type_as_int);
350 type_as_int = gradientElement.attribute(
"coordinatemode").toInt();
351 cmode = QGradient::CoordinateMode(type_as_int);
353 QDomElement stopElement = gradientElement.firstChildElement(
"stops");
354 if(stopElement.isNull()) {
357 for(QDomNode node = stopElement.firstChild(); !node.isNull(); node = node.nextSibling()) {
358 QDomElement ele = node.toElement();
359 if(ele.tagName() != QLatin1String(
"stop")) {
363 qreal posn = ele.attribute(
"position").toDouble();
364 QColor color = QColor(ele.attribute(
"color"));
365 stops << QGradientStop(posn, color);
368 if (type == QGradient::LinearGradient) {
369 QPointF p1 =
stringToPoint(gradientElement.attribute(
"start"));
370 QPointF p2 =
stringToPoint(gradientElement.attribute(
"finalstop"));
371 gradient =
new QLinearGradient(p1, p2);
373 else if (type == QGradient::RadialGradient) {
374 QPointF center =
stringToPoint(gradientElement.attribute(
"center"));
375 QPointF focal =
stringToPoint(gradientElement.attribute(
"focalpoint"));
376 double radius = gradientElement.attribute(
"radius").toDouble();
377 gradient =
new QRadialGradient(center, radius, focal);
380 QPointF center =
stringToPoint(gradientElement.attribute(
"center"));
381 double angle = gradientElement.attribute(
"angle").toDouble();
382 gradient =
new QConicalGradient(center, angle);
386 gradient->setStops(stops);
387 gradient->setSpread(spread);
388 gradient->setCoordinateMode(cmode);
407 QDomElement gradientElement = qDoc.createElement(
"gradient");
409 gradientElement.setAttribute(
"type",
int(gradient->type()));
410 gradientElement.setAttribute(
"spread",
int(gradient->spread()));
411 gradientElement.setAttribute(
"coordinatemode",
int(gradient->coordinateMode()));
413 QDomElement stopsElement = qDoc.createElement(
"stops");
414 gradientElement.appendChild(stopsElement);
416 foreach(
const QGradientStop& stop, gradient->stops()) {
417 QDomElement ele = qDoc.createElement(
"stop");
418 ele.setAttribute(
"position", stop.first);
419 ele.setAttribute(
"color", stop.second.name());
420 stopsElement.appendChild(ele);
425 if(type == QGradient::LinearGradient) {
426 const QLinearGradient *lg =
static_cast<const QLinearGradient*
>(gradient);
427 gradientElement.setAttribute(
"start",
pointToString(lg->start()));
428 gradientElement.setAttribute(
"finalstop",
pointToString(lg->finalStop()));
430 else if(type == QGradient::RadialGradient) {
431 const QRadialGradient *rg =
static_cast<const QRadialGradient*
>(gradient);
432 gradientElement.setAttribute(
"center",
pointToString(rg->center()));
433 gradientElement.setAttribute(
"focalpoint",
pointToString(rg->focalPoint()));
434 gradientElement.setAttribute(
"radius", rg->radius());
437 const QConicalGradient *cg =
static_cast<const QConicalGradient*
>(gradient);
438 gradientElement.setAttribute(
"center",
pointToString(cg->center()));
439 gradientElement.setAttribute(
"angle", cg->angle());
442 qElement.appendChild(gradientElement);
457 if(qElement.isNull()) {
461 quint8 style = qElement.attribute(
"style").toShort();
462 const QString colorString = qElement.attribute(
"color");
464 color.setNamedColor(colorString);
466 if(style == Qt::TexturePattern) {
468 QDomElement pixElement = qElement.firstChildElement(
"pixmap");
472 brush = QBrush(color, pixmap);
475 else if(style == Qt::LinearGradientPattern
476 || style == Qt::RadialGradientPattern
477 || style == Qt::ConicalGradientPattern) {
478 QGradient *gradient = 0;
479 QDomElement gradElement = qElement.firstChildElement(
"gradient");
486 brush = QBrush(*gradient);
491 brush = QBrush(color, (Qt::BrushStyle)style);
512 QDomElement brushElement = qDoc.createElement(
"brush");
514 brushElement.setAttribute(
"style", (quint8)brush.style());
515 brushElement.setAttribute(
"color", brush.color().name());
517 if(brush.style() == Qt::TexturePattern) {
520 else if(brush.style() == Qt::LinearGradientPattern
521 || brush.style() == Qt::RadialGradientPattern
522 || brush.style() == Qt::ConicalGradientPattern) {
527 qElement.appendChild(brushElement);
538 return widget1->x() < widget2->x();
549 return widget1->y() < widget2->y();