34 #include "../canvas/MultiThreadMapDisplay.h"
40 #include <QApplication>
41 #include <QMessageBox>
42 #include <QInputDialog>
49 m_paperSize(QSize(210, 297)),
50 m_horizontalRulerWidth(30),
51 m_verticalRulerWidth(38),
52 m_layoutObjectSelected(0),
54 m_showRulerGrid(true),
56 m_undoBufferSize(100),
61 setMouseTracking(
true);
62 setWindowTitle(
"Layout Editor");
82 int frameX = qRound((
double)a/8);
84 int frameWidth = qRound((
double)a * .75);
85 int frameHeight = frameWidth;
86 QRectF frameRect(frameX, frameY, frameWidth, frameHeight);
109 m_paperSize(paperSize),
110 m_horizontalRulerWidth(30),
111 m_verticalRulerWidth(38),
112 m_layoutObjectSelected(0),
114 m_showRulerGrid(true),
116 m_undoBufferSize(100),
121 setMouseTracking(
true);
122 setWindowTitle(
"Layout Editor");
143 delete m_draftLayoutEditor;
144 delete m_editorState;
146 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
147 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
149 m_layoutObjects.clear();
151 for(it = m_undoLayoutObjects.begin(); it != m_undoLayoutObjects.end(); ++it)
153 m_undoLayoutObjects.clear();
155 delete m_zoomInPixmap;
156 delete m_zoomOutPixmap;
162 int delta = qRound((
double)m_paperSize.width() / 100);
163 m_paperViewRect.setWidth(m_paperSize.width() + delta + delta);
164 m_paperViewRect.setHeight(m_paperSize.height() + delta + delta);
165 m_paperViewRect.moveCenter(QPointF(((
double)m_paperSize.width()/2.), (double)m_paperSize.height()/2.));
167 m_paperViewReseted =
true;
174 m_editorState->m_paperViewRect = m_paperViewRect;
175 m_editorState->m_paperSize = m_paperSize;
176 m_editorState->m_rulerGridLines = m_rulerGridLines;
177 m_editorState->m_showRulerGrid = m_showRulerGrid;
178 m_editorState->m_rect = m_rect;
179 m_editorState->m_resize = m_resize;
180 m_editorState->m_move = m_move;
186 if(m_paperViewRect.isValid() ==
false)
190 int tw = size().width();
191 int w = tw - 2 * m_verticalRulerWidth;
192 int th = size().height();
193 int h = th - 2 * m_horizontalRulerWidth;
195 if(m_paperViewReseted)
197 double relw = (double)w / (
double)m_paperViewRect.width();
198 double relh = (double)h / (
double)m_paperViewRect.height();
200 int nw, nh, ntw, nth;
204 nh = qRound((
double)(w) * m_paperViewRect.height() / m_paperViewRect.width());
205 nth = h + 2 * m_horizontalRulerWidth;
207 QPointF c = m_paperViewRect.center();
208 double v = (double)h / (
double)nh;
209 double d = (double)m_paperViewRect.height() * v;
210 m_paperViewRect = QRect(0., 0., m_paperViewRect.width(), d);
211 m_paperViewRect.moveCenter(c);
215 nw = qRound((
double)(h) * m_paperViewRect.width() / m_paperViewRect.height());
216 ntw = w + 2 * m_verticalRulerWidth;
218 QPointF c = m_paperViewRect.center();
219 double v = (double)w / (
double)nw;
220 double d = (double)m_paperViewRect.width() * v;
221 m_paperViewRect = QRect(0., 0., d, m_paperViewRect.height());
222 m_paperViewRect.moveCenter(c);
226 m_totalPixmap = QPixmap(tw, th);
227 m_totalPixmap.fill(Qt::gray);
230 m_viewPixmap = QPixmap(w, h);
236 if(m_difTopLeft != QPointF(0., 0.))
238 QRectF r(m_difTopLeft, QSize(w, h));
239 m_paperViewRect = m_matrixPaperViewToVp.inverted().mapRect(r);
241 else if(m_difBottomRight != QPointF(0., 0.))
243 QRectF r(QPoint(0., 0.), QSize(w, h));
244 m_paperViewRect = m_matrixPaperViewToVp.inverted().mapRect(r);
249 double scalePaperViewToVp = (double)m_viewPixmap.width() / m_paperViewRect.width();
252 QMatrix matrixOld = m_matrixPaperViewToVp;
253 m_matrixPaperViewToVp.reset();
254 m_matrixPaperViewToVp.scale(scalePaperViewToVp, -scalePaperViewToVp);
255 m_matrixPaperViewToVp.translate(-m_paperViewRect.left(), -m_paperViewRect.bottom());
258 m_matrix.scale(scalePaperViewToVp, -scalePaperViewToVp);
259 double tx = m_paperViewRect.left() + (double)m_verticalRulerWidth / scalePaperViewToVp;
260 double ty = m_paperViewRect.bottom() - (double)m_horizontalRulerWidth / scalePaperViewToVp;
261 m_matrix.translate(-tx, -ty);
266 QPainter painter(&m_viewPixmap);
267 painter.setMatrix(m_matrixPaperViewToVp);
270 painter.setBrush(Qt::NoBrush);
271 QPen pen(QColor(0, 0, 255, 255));
274 painter.drawRect(QRect(0, 0, m_paperSize.width(), m_paperSize.height()));
284 m_paperViewReseted =
false;
286 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
287 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
300 if(m_editorState == 0)
308 while(m_undoLayoutObjects.size() >= (
unsigned int)m_undoBufferSize)
310 std::vector<te::qt::widgets::LayoutObject*>::iterator it = m_undoLayoutObjects.begin();
312 m_undoLayoutObjects.erase(it);
317 if(m_resize || m_move)
320 std::vector<te::qt::widgets::LayoutObject*>::reverse_iterator it = m_undoLayoutObjects.rbegin();
321 if(it != m_undoLayoutObjects.rend())
325 if(it != m_undoLayoutObjects.rend())
331 if(fu->
getId() == 0 && fap->getId() == 0)
338 m_undoLayoutObjects.pop_back();
340 if(m_undoLayoutObjects.size() > 1)
342 m_undoLayoutObjects.pop_back();
352 m_undoLayoutObjects.push_back(ei);
361 return m_horizontalRulerWidth;
366 return m_verticalRulerWidth;
371 int s = m_undoBufferSize - size;
375 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
376 for(
int i = 0; i != s; ++i)
378 it = m_undoLayoutObjects.begin();
380 m_undoLayoutObjects.erase(it);
388 return m_undoBufferSize;
394 int horizontalRulerWidth = qRound((
double)(m_totalPixmap.height() - m_viewPixmap.height()) / 2);
397 int verticalRulerWidth = qRound((
double)(m_totalPixmap.width() - m_viewPixmap.width()) / 2);
400 double xmin = m_paperViewRect.left();
401 double xmax = m_paperViewRect.right();
402 double ymin = m_paperViewRect.top();
403 double ymax = m_paperViewRect.bottom();
406 double scale = m_matrixPaperViewToVp.m11();
437 else if(scale > .125)
451 QPixmap rulerBottom(m_viewPixmap.width(), horizontalRulerWidth);
452 rulerBottom.fill(Qt::gray);
453 QPixmap rulerTop(rulerBottom);
456 QPainter painter1(&rulerBottom);
458 painter1.setPen(pen);
461 font.setPixelSize(fontSize);
462 painter1.setFont(font);
464 QPainter painter2(&rulerTop);
465 painter2.setPen(pen);
466 painter2.setFont(font);
474 QPoint pb3(0, medio);
475 QPoint pb4(0, grande);
476 QPoint pb5(0, fontSize + grande);
477 QPoint pt1(0, horizontalRulerWidth - ini);
478 QPoint pt2(0, horizontalRulerWidth - peq);
479 QPoint pt3(0, horizontalRulerWidth - medio);
480 QPoint pt4(0, horizontalRulerWidth - grande);
481 QPoint pt5(0, horizontalRulerWidth - fontSize - grande);
485 int xp = m_matrixPaperViewToVp.map(QPoint(a, m_paperViewRect.top())).x();
496 if((a % m_rulerLarge) == 0)
498 painter1.drawLine(pb1, pb4);
500 QRectF br = painter1.boundingRect(QRectF(0, 0, rulerBottom.width(), rulerBottom.height()), Qt::AlignHCenter, num);
502 painter1.drawText(br, num);
504 painter2.drawLine(pt1, pt4);
506 painter2.drawText(br, num);
508 else if((a % m_rulerMedium) == 0)
510 painter1.drawLine(pb1, pb3);
511 painter2.drawLine(pt1, pt3);
513 else if((a % m_rulerSmall) == 0)
515 painter1.drawLine(pb1, pb2);
516 painter2.drawLine(pt1, pt2);
525 QPixmap rulerRight(verticalRulerWidth, m_viewPixmap.height());
526 rulerRight.fill(Qt::gray);
527 QPixmap rulerLeft(rulerRight);
529 painter1.begin(&rulerRight);
530 painter1.setPen(pen);
531 painter1.setFont(font);
533 painter2.begin(&rulerLeft);
534 painter2.setPen(pen);
535 painter2.setFont(font);
539 QPoint pr3(medio, 0);
540 QPoint pr4(grande, 0);
541 QPoint pr5(fontSize + grande, 0);
542 QPoint pl1(verticalRulerWidth - ini, 0);
543 QPoint pl2(verticalRulerWidth - peq, 0);
544 QPoint pl3(verticalRulerWidth - medio, 0);
545 QPoint pl4(verticalRulerWidth - grande, 0);
546 QPoint pl5(verticalRulerWidth - fontSize - grande, 0);
550 int yp = m_matrixPaperViewToVp.map(QPoint(0, a)).y();
561 if((a % m_rulerLarge) == 0)
563 painter1.drawLine(pr1, pr4);
565 QRectF br = painter1.boundingRect(QRectF(0, 0, rulerRight.width(), rulerRight.height()), Qt::AlignHCenter, num);
567 painter1.drawText(br, num);
569 painter2.drawLine(pl1, pl4);
571 painter2.drawText(br, num);
573 else if((a % m_rulerMedium) == 0)
575 painter1.drawLine(pr1, pr3);
576 painter2.drawLine(pl1, pl3);
578 else if((a % m_rulerSmall) == 0)
580 painter1.drawLine(pr1, pr2);
581 painter2.drawLine(pl1, pl2);
587 painter1.begin(&m_totalPixmap);
589 painter1.drawPixmap(verticalRulerWidth, m_totalPixmap.height() - horizontalRulerWidth, rulerBottom);
590 painter1.drawPixmap(verticalRulerWidth, 0, rulerTop);
591 painter1.drawPixmap(m_totalPixmap.width() - verticalRulerWidth, horizontalRulerWidth, rulerRight);
592 painter1.drawPixmap(0, horizontalRulerWidth, rulerLeft);
600 if(m_showRulerGrid ==
true)
602 m_showRulerGrid =
true;
608 if(m_showRulerGrid ==
false)
610 m_showRulerGrid =
false;
616 m_rulerGridPixmap = QPixmap(m_viewPixmap.width(), m_viewPixmap.height());
617 m_rulerGridPixmap.fill(Qt::white);
620 int xmin = qRound(m_paperViewRect.left()) - m_rulerLarge;
621 int xmax = qRound(m_paperViewRect.right()) + m_rulerLarge;
622 int ymin = qRound(m_paperViewRect.top()) - m_rulerLarge;
623 int ymax = qRound(m_paperViewRect.bottom()) + m_rulerLarge;
627 if((xmin % m_rulerSmall) == 0)
634 if((ymin % m_rulerSmall) == 0)
639 QPainter painter(&m_rulerGridPixmap);
640 painter.setMatrix(m_matrixPaperViewToVp);
645 QPoint p1(xmin, ymin);
646 QPoint p2(xmin, ymax);
647 while(p1.x() <= xmax)
649 painter.setPen(QPen(Qt::blue));
651 if((p1.x() % m_rulerLarge) == 0)
654 painter.setPen(QPen(Qt::red));
656 else if((p1.x() % m_rulerMedium) == 0)
659 painter.setPen(QPen(Qt::green));
662 if(line >= m_rulerGridLines)
663 painter.drawLine(p1, p2);
665 p1.setX(p1.x() + m_rulerSmall);
666 p2.setX(p2.x() + m_rulerSmall);
670 p1 = QPoint(xmin, ymin);
671 p2 = QPoint(xmax, ymin);
672 while(p1.y() <= ymax)
674 painter.setPen(QPen(Qt::blue));
676 if((p1.y() % m_rulerLarge) == 0)
679 painter.setPen(QPen(Qt::red));
681 else if((p1.y() % m_rulerMedium) == 0)
684 painter.setPen(QPen(Qt::green));
687 if(line >= m_rulerGridLines)
688 painter.drawLine(p1, p2);
690 p1.setY(p1.y() + m_rulerSmall);
691 p2.setY(p2.y() + m_rulerSmall);
697 QPainter painter(
this);
702 if(size().width() > m_totalPixmap.width())
703 x = qRound((
double)(size().width() - m_totalPixmap.width()) / 2);
704 if(size().height() > m_totalPixmap.height())
705 y = qRound((
double)(size().height() - m_totalPixmap.height()) / 2);
707 painter.drawPixmap(x, y, m_totalPixmap);
708 m_draftLayoutEditor->update();
715 int w = width() - m_verticalRulerWidth - m_verticalRulerWidth;
716 int h = height() - m_horizontalRulerWidth - m_horizontalRulerWidth;
717 m_auxWidget->resize(w, h);
718 m_auxWidget->move(m_verticalRulerWidth, m_horizontalRulerWidth);
721 m_draftLayoutEditor->resize(w, h);
722 m_draftLayoutEditor->getDraftPixmap()->fill(Qt::transparent);
724 m_difTopLeft = QPointF(0., 0.);
725 m_difBottomRight = QPointF(0., 0.);
727 QRect rec(pos().x(), pos().y(), size().width(), size().height());
730 if(rec.topLeft() != m_rect.topLeft())
731 m_difTopLeft = rec.topLeft() - m_rect.topLeft();
733 m_difBottomRight = rec.bottomRight() - m_rect.bottomRight();
737 createWorkingArea(m_putUndo);
740 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
741 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
759 m_difTopLeft = pos() - m_rect.topLeft();
761 m_rect.moveTopLeft(pos());
762 createWorkingArea(m_putUndo);
765 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
766 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
786 return m_paperViewRect;
791 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
792 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
794 if((*it)->getId() == id)
804 f->
setId(m_idCount++);
805 m_layoutObjects.push_back(f);
810 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
811 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
815 m_layoutObjects.erase(it);
824 if(f->windowTitle() ==
"TextFrame")
826 else if(f->windowTitle() ==
"DataFrame")
831 while(m_undoLayoutObjects.size() >= (
unsigned int)m_undoBufferSize)
833 std::vector<te::qt::widgets::LayoutObject*>::iterator it = m_undoLayoutObjects.begin();
835 m_undoLayoutObjects.erase(it);
845 m_undoLayoutObjects.push_back(cf);
853 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
854 for(it = m_undoLayoutObjects.begin(); it != m_undoLayoutObjects.end(); ++it)
858 m_undoLayoutObjects.erase(it);
866 QPointF pp = m_matrixPaperViewToVp.inverted().map(p);
867 QPointF ps = m_matrixPaperViewToVp.inverted().map(m_startPan);
870 QPointF dif = pp - ps;
871 QPointF c = m_paperViewRect.center();
873 m_paperViewRect.moveCenter(c);
881 m_viewPixmap.fill(Qt::white);
883 QPainter painter(&m_viewPixmap);
885 painter.drawPixmap(0, 0, m_rulerGridPixmap);
887 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
888 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
890 if((*it)->windowTitle() ==
"DataFrame")
898 QRect pr = m_matrixPaperViewToVp.mapRect(QRect(0, 0, m_paperSize.width(), m_paperSize.height()));
901 painter.setBrush(Qt::NoBrush);
902 QPen pen(QColor(0, 0, 255, 255));
906 painter.drawRect(pr);
910 painter.begin(&m_totalPixmap);
911 painter.drawPixmap(m_verticalRulerWidth, m_horizontalRulerWidth, m_viewPixmap);
920 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
921 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
923 if((*it)->windowTitle() ==
"DataFrame")
933 if(e->button() == Qt::MidButton)
935 int i = m_zmouseMode + 1;
942 m_difTopLeft = QPointF(0., 0.);
943 m_difBottomRight = QPointF(0., 0.);
946 m_zpressPoint = e->pos();
947 if(m_zmouseMode == 3)
953 m_zpixmap = QPixmap(m_totalPixmap);
956 QPoint p(m_verticalRulerWidth, m_horizontalRulerWidth);
957 QPainter painter(&m_zpixmap);
959 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
960 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
962 QRectF r = (*it)->getFrameRect();
965 QPixmap* pixmap = (*it)->getPixmap();
966 if(pixmap && pixmap->isNull() ==
false)
968 r = m_matrixPaperViewToVp.mapRect(r);
969 r.moveCenter(r.center() + p);
970 painter.drawPixmap(r, *pixmap, pixmap->rect());
972 if((*it)->windowTitle() ==
"DataFrame")
979 if(pixmap && pixmap->isNull() ==
false)
981 r = m_matrixPaperViewToVp.mapRect(r);
982 r.moveCenter(r.center() + p);
983 painter.drawPixmap(r, *pixmap, pixmap->rect());
990 if(pixmap && pixmap->isNull() ==
false)
992 r = m_matrixPaperViewToVp.mapRect(r);
993 r.moveCenter(r.center() + p);
994 painter.drawPixmap(r, *pixmap, pixmap->rect());
1001 if(pixmap && pixmap->isNull() ==
false)
1003 r = m_matrixPaperViewToVp.mapRect(r);
1004 r.moveCenter(r.center() + p);
1005 painter.drawPixmap(r, *pixmap, pixmap->rect());
1013 if(e->modifiers() == Qt::ControlModifier)
1017 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
1018 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
1020 if((*it)->windowTitle() ==
"DataFrame")
1024 QPointF p = QPoint(e->pos().x(), e->pos().y());
1025 p = m_matrixPaperViewToVp.inverted().map(p);
1044 if(e->modifiers() == Qt::ControlModifier && m_zdataFrame == 0)
1047 m_zpoint = e->pos();
1049 if(e->buttons() == Qt::LeftButton)
1051 if(m_zmouseMode == 3)
1053 if(cursor().shape() != Qt::ClosedHandCursor)
1056 QCursor cursor(Qt::ClosedHandCursor);
1060 if(e->modifiers() == Qt::NoModifier)
1064 QPoint pfrom(m_zpressPoint.x(), m_zpressPoint.y());
1065 QPoint pto(e->pos().x(), e->pos().y());
1066 QPoint dif = pto - pfrom;
1068 m_totalPixmap.fill(Qt::white);
1069 QPainter painter(&m_totalPixmap);
1070 QRect r = m_totalPixmap.rect();
1071 QPoint c(r.center() + dif);
1073 painter.drawPixmap(r, m_zpixmap, m_zpixmap.rect());
1077 else if(e->modifiers() == Qt::ControlModifier && m_zdataFrame)
1080 QPoint pfrom(m_zpressPoint.x(), m_zpressPoint.y());
1081 QPoint pto(e->pos().x(), e->pos().y());
1082 QPoint dif = pto - pfrom;
1084 QPixmap* pix = m_zdataFrame->getMapDisplay()->getDisplayPixmap();
1085 pix->fill(Qt::white);
1086 QPainter painter(pix);
1087 QRect r = m_zpixmap.rect();
1088 QPoint c(r.center() + dif);
1090 painter.drawPixmap(r, m_zpixmap, m_zpixmap.rect());
1092 m_zdataFrame->getMapDisplay()->update();
1095 else if(m_zmouseMode == 2)
1099 else if(m_zmouseMode == 1)
1101 int w = abs(m_zpoint.x() - m_zpressPoint.x()) + 1;
1102 int h = abs(m_zpoint.y() - m_zpressPoint.y()) + 1;
1103 if(m_zpoint.x() > m_zpressPoint.x() && m_zpoint.y() > m_zpressPoint.y())
1104 m_zrect.setRect(m_zpressPoint.x(), m_zpressPoint.y(), w, h);
1105 else if(m_zpoint.x() > m_zpressPoint.x() && m_zpoint.y() < m_zpressPoint.y())
1106 m_zrect.setRect(m_zpressPoint.x(), m_zpoint.y(), w, h);
1107 else if(m_zpoint.x() < m_zpressPoint.x() && m_zpoint.y() < m_zpressPoint.y())
1108 m_zrect.setRect(m_zpoint.x(), m_zpoint.y(), w, h);
1110 m_zrect.setRect(m_zpoint.x(), m_zpressPoint.y(), w, h);
1118 double zoomFat = 1.5;
1120 if(m_zmouseMode == 3)
1123 QCursor cursor(Qt::OpenHandCursor);
1128 if(e->modifiers() == Qt::NoModifier)
1130 if(e->button() == Qt::LeftButton)
1132 if(m_zmouseMode == 1)
1134 if(m_zrect.isValid() && m_zrect.width() > 2 && m_zrect.height() > 2)
1136 QRectF r(m_zrect.left(), m_zrect.top(), m_zrect.width(), m_zrect.height());
1137 r = m_matrixPaperViewToVp.inverted().mapRect(r);
1138 adjustAspectRatio(r, m_paperViewRect);
1139 m_paperViewRect = r;
1140 createWorkingArea();
1145 QPointF c(m_zpressPoint.x(), m_zpressPoint.y());
1146 QPointF cf = m_matrixPaperViewToVp.inverted().map(c);
1147 double w = m_paperViewRect.width() / zoomFat;
1148 double h = m_paperViewRect.height() / zoomFat;
1149 m_paperViewRect = QRectF(0, 0, w, h);
1150 m_paperViewRect.moveCenter(cf);
1151 createWorkingArea();
1157 else if(m_zmouseMode == 2)
1159 QPointF c(m_zpressPoint.x(), m_zpressPoint.y());
1160 QPointF cf = m_matrixPaperViewToVp.inverted().map(c);
1161 double w = m_paperViewRect.width() * zoomFat;
1162 double h = m_paperViewRect.height() * zoomFat;
1163 m_paperViewRect = QRectF(0, 0, w, h);
1164 m_paperViewRect.moveCenter(cf);
1165 createWorkingArea();
1168 else if(m_zmouseMode == 3)
1171 QPointF pfrom(m_zpressPoint.x(), m_zpressPoint.y());
1172 pfrom = m_matrixPaperViewToVp.inverted().map(pfrom);
1174 QPointF pto(e->pos().x(), e->pos().y());
1175 pto = m_matrixPaperViewToVp.inverted().map(pto);
1177 QPointF dif = pto - pfrom;
1178 QPointF c = m_paperViewRect.center();
1180 m_paperViewRect.moveCenter(c);
1181 createWorkingArea();
1189 else if(e->modifiers() == Qt::ControlModifier && m_zdataFrame)
1192 QRectF fr = m_zdataFrame->getFrameRect();
1194 QRectF frp = m_matrixPaperViewToVp.mapRect(fr);
1196 double magDecl = m_zdataFrame->getMagneticDeclination();
1198 auxMatrix.translate(frp.width()/2., frp.height()/2.);
1199 auxMatrix.rotate(magDecl);
1200 auxMatrix.translate(-frp.width()/2., -frp.height()/2.);
1202 if(e->button() == Qt::LeftButton)
1204 if(m_zmouseMode == 1)
1206 if(m_zrect.isValid() && m_zrect.width() > 2 && m_zrect.height() > 2)
1208 insertCopy2Undo(m_zdataFrame);
1212 QPoint cc = m_zrect.center();
1213 cc -= m_zdataFrame->pos();
1214 m_zrect.moveCenter(cc);
1217 cc = auxMatrix.inverted().map(cc);
1220 cc += m_zdataFrame->pos();
1221 m_zrect.moveCenter(cc);
1223 QRectF zr(m_zrect.left(), m_zrect.top(), m_zrect.width(), m_zrect.height());
1226 zr = m_matrixPaperViewToVp.inverted().mapRect(zr);
1228 adjustAspectRatio(zr, fr);
1231 QRectF r = m_zdataFrame->getDataRect();
1234 double x1 = r.left() + ((zr.left() - fr.left()) / fr.width()) * r.width();
1235 double y1 = r.top() + ((zr.top() - fr.top()) / fr.height()) * r.height();
1236 double w = r.width() * (zr.width() / fr.width());
1237 double h = r.height() * (zr.height() / fr.height());
1238 QRectF nr(x1, y1, w, h);
1239 m_zdataFrame->setDataRect(nr);
1240 if(m_zdataFrame->getGraphicScaleFrame())
1242 double step = m_zdataFrame->getGraphicScaleFrame()->getStep();
1243 step *= zr.width() / fr.width();
1244 m_zdataFrame->getGraphicScaleFrame()->findNiceStep(step);
1246 createWorkingArea(
false);
1251 insertCopy2Undo(m_zdataFrame);
1254 QPointF c(m_zpressPoint.x(), m_zpressPoint.y());
1257 c -= m_zdataFrame->pos();
1260 c = auxMatrix.inverted().map(c);
1263 c += m_zdataFrame->pos();
1266 QPointF cf = m_matrixPaperViewToVp.inverted().map(c);
1269 QRectF r = m_zdataFrame->getDataRect();
1272 double x1 = r.left() + ((cf.x() - fr.left()) / fr.width()) * r.width();
1273 double y1 = r.top() + ((cf.y() - fr.top()) / fr.height()) * r.height();
1276 double w = r.width() / zoomFat;
1277 double h = r.height() / zoomFat;
1278 QRectF nr(0, 0, w, h);
1279 nr.moveCenter(QPointF(x1, y1));
1281 m_zdataFrame->setDataRect(nr);
1282 if(m_zdataFrame->getGraphicScaleFrame())
1284 double step = m_zdataFrame->getGraphicScaleFrame()->getStep();
1286 m_zdataFrame->getGraphicScaleFrame()->findNiceStep(step);
1288 createWorkingArea(
false);
1294 else if(m_zmouseMode == 2)
1296 insertCopy2Undo(m_zdataFrame);
1299 QPointF c(m_zpressPoint.x(), m_zpressPoint.y());
1302 c -= m_zdataFrame->pos();
1305 c = auxMatrix.inverted().map(c);
1308 c += m_zdataFrame->pos();
1311 QPointF cf = m_matrixPaperViewToVp.inverted().map(c);
1314 QRectF r = m_zdataFrame->getDataRect();
1317 double x1 = r.left() + ((cf.x() - fr.left()) / fr.width()) * r.width();
1318 double y1 = r.top() + ((cf.y() - fr.top()) / fr.height()) * r.height();
1321 double w = r.width() * zoomFat;
1322 double h = r.height() * zoomFat;
1323 QRectF nr(0, 0, w, h);
1324 nr.moveCenter(QPointF(x1, y1));
1326 m_zdataFrame->setDataRect(nr);
1327 if(m_zdataFrame->getGraphicScaleFrame())
1329 double step = m_zdataFrame->getGraphicScaleFrame()->getStep();
1331 m_zdataFrame->getGraphicScaleFrame()->findNiceStep(step);
1333 createWorkingArea(
false);
1336 else if(m_zmouseMode == 3)
1338 insertCopy2Undo(m_zdataFrame);
1341 QPointF pfrom(m_zpressPoint.x(), m_zpressPoint.y());
1342 QPointF pto(e->pos().x(), e->pos().y());
1345 pfrom = auxMatrix.inverted().map(pfrom);
1346 pto = auxMatrix.inverted().map(pto);
1349 pfrom = m_matrixPaperViewToVp.inverted().map(pfrom);
1350 pto = m_matrixPaperViewToVp.inverted().map(pto);
1353 QPointF dif = pto - pfrom;
1355 QPointF fc = fr.center();
1362 QRectF r = m_zdataFrame->getDataRect();
1363 double x1 = r.left() + ((fc.x() - fr.left()) / fr.width()) * r.width();
1364 double y1 = r.top() + ((fc.y() - fr.top()) / fr.height()) * r.height();
1367 r.moveCenter(QPointF(x1, y1));
1369 m_zdataFrame->setDataRect(r);
1379 QPixmap* pixmap = getDraftPixmap();
1380 pixmap->fill(QColor(0, 0, 0, 0));
1382 if(m_zrect.isValid())
1384 QPainter painter(pixmap);
1387 painter.setPen(Qt::red);
1388 painter.setBrush(QColor(255, 0, 0, 80));
1392 painter.setPen(Qt::blue);
1393 painter.setBrush(QColor(0, 0, 255, 80));
1395 painter.drawRect(m_zrect);
1404 if(m_zmouseMode == 0)
1405 sendEventToChildren(
true);
1407 sendEventToChildren(
false);
1410 if(dir.exists(
"../../../terralib5/resources/themes/terralib/32x32/zoomInCursor.png"))
1411 if(m_zoomInPixmap == 0)
1412 m_zoomInPixmap =
new QPixmap(
"../../../terralib5/resources/themes/terralib/32x32/zoomInCursor.png");
1414 if(dir.exists(
"../../../terralib5/resources/themes/terralib/32x32/zoomOutCursor.png"))
1415 if(m_zoomOutPixmap == 0)
1416 m_zoomOutPixmap =
new QPixmap(
"../../../terralib5/resources/themes/terralib/32x32/zoomOutCursor.png");
1423 QCursor* cursor = 0;
1425 if(m_zmouseMode == 0)
1426 cursor =
new QCursor(Qt::ArrowCursor);
1427 else if(m_zmouseMode == 1)
1430 cursor =
new QCursor(*m_zoomInPixmap, 9, 9);
1432 cursor =
new QCursor(Qt::PointingHandCursor);
1434 else if(m_zmouseMode == 2)
1437 cursor =
new QCursor(*m_zoomOutPixmap, 9, 9);
1439 cursor =
new QCursor(Qt::SizeAllCursor);
1441 else if(m_zmouseMode == 3)
1447 cursor =
new QCursor(Qt::OpenHandCursor);
1457 double llx = r.left();
1458 double lly = r.top();
1459 double urx = r.right();
1460 double ury = r.bottom();
1461 double ww = r.width();
1462 double wh = r.height();
1464 double widthByHeight = ref.width() / ref.height();
1466 if(widthByHeight > ww / wh)
1470 ww = wh * widthByHeight;
1471 llx = llx - (ww - v) / 2.0;
1478 wh = ww / widthByHeight;
1479 lly = lly - (wh - v) / 2.0;
1483 r = QRectF(llx, lly, urx-llx, ury-lly);
1488 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
1489 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
1495 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
1496 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
1502 int i = m_zmouseMode;
1518 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
1519 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
1520 (*it)->sendEventToChildren(b);
1522 for(it = m_undoLayoutObjects.begin(); it != m_undoLayoutObjects.end(); ++it)
1523 (*it)->sendEventToChildren(b);
1527 setFrameSelected(0);
1528 while(QApplication::overrideCursor())
1529 QApplication::restoreOverrideCursor();
1531 raiseDraftLayoutEditor();
1532 m_draftLayoutEditor->installEventFilter(
this);
1536 lowerDraftLayoutEditor();
1537 m_draftLayoutEditor->removeEventFilter(
this);
1543 if(e->type() == QEvent::Paint)
1547 if(obj == m_draftLayoutEditor)
1549 if(e->type() == QEvent::DragEnter)
1551 QDragEnterEvent* dragEnterEvent = (QDragEnterEvent*)e;
1552 const QMimeData* mime = dragEnterEvent->mimeData();
1553 QString s = mime->data(
"application/x-terralib;value=\"DraggedItems\"").constData();
1554 if(s.isEmpty() ==
false)
1556 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
1557 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
1559 if((*it)->windowTitle() ==
"DataFrame")
1561 (*it)->sendEventToChildren(
true);
1568 else if(e->type() == QEvent::DragMove)
1570 else if(e->type() == QEvent::Drop)
1572 else if(e->type() == QEvent::Resize)
1575 m_draftLayoutEditor->raise();
1577 if(e->type() == QEvent::MouseButtonPress)
1578 mousePressEvent((QMouseEvent*)e);
1579 else if(e->type() == QEvent::MouseMove)
1580 mouseMoveEvent((QMouseEvent*)e);
1581 else if(e->type() == QEvent::MouseButtonRelease)
1582 mouseReleaseEvent((QMouseEvent*)e);
1583 else if(e->type() == QEvent::Wheel)
1584 wheelEvent((QWheelEvent*)e);
1592 m_difTopLeft = QPointF(0., 0.);
1593 m_difBottomRight = QPointF(0., 0.);
1596 int modifier = e->modifiers();
1597 QString text = e->text();
1603 if(m_layoutObjectSelected)
1605 double scale = m_layoutObjectSelected->getScale() * 1.2;
1606 m_layoutObjectSelected->setScale(scale);
1611 double w = m_paperViewRect.width() * 1.2;
1612 double h = m_paperViewRect.height() * 1.2;
1613 QPointF c = m_paperViewRect.center();
1614 m_paperViewRect.setWidth(w);
1615 m_paperViewRect.setHeight(h);
1616 m_paperViewRect.moveCenter(c);
1617 createWorkingArea();
1624 if(m_layoutObjectSelected)
1626 double scale = m_layoutObjectSelected->getScale() / 1.2;
1627 m_layoutObjectSelected->setScale(scale);
1632 double w = m_paperViewRect.width() / 1.2;
1633 double h = m_paperViewRect.height() / 1.2;
1634 QPointF c = m_paperViewRect.center();
1635 m_paperViewRect.setWidth(w);
1636 m_paperViewRect.setHeight(h);
1637 m_paperViewRect.moveCenter(c);
1638 createWorkingArea();
1645 if(m_layoutObjectSelected)
1647 double scale = m_layoutObjectSelected->getScale() * 2;
1648 m_layoutObjectSelected->setScale(scale);
1653 double w = m_paperViewRect.width() * 2;
1654 double h = m_paperViewRect.height() * 2;
1655 QPointF c = m_paperViewRect.center();
1656 m_paperViewRect.setWidth(w);
1657 m_paperViewRect.setHeight(h);
1658 m_paperViewRect.moveCenter(c);
1659 createWorkingArea();
1664 case Qt::Key_Asterisk:
1666 if(m_layoutObjectSelected)
1668 double scale = m_layoutObjectSelected->getScale() / 2;
1669 m_layoutObjectSelected->setScale(scale);
1674 double w = m_paperViewRect.width() / 2;
1675 double h = m_paperViewRect.height() / 2;
1676 QPointF c = m_paperViewRect.center();
1677 m_paperViewRect.setWidth(w);
1678 m_paperViewRect.setHeight(h);
1679 m_paperViewRect.moveCenter(c);
1680 createWorkingArea();
1687 if(m_rulerGridLines != 1 || m_showRulerGrid ==
false)
1690 m_undoLayoutObjects.push_back(f);
1692 m_rulerGridLines = 1;
1694 m_showRulerGrid =
false;
1702 if(m_rulerGridLines != 2 || m_showRulerGrid ==
false)
1705 m_undoLayoutObjects.push_back(f);
1707 m_rulerGridLines = 2;
1709 m_showRulerGrid =
false;
1717 if(m_rulerGridLines != 3 || m_showRulerGrid ==
false)
1720 m_undoLayoutObjects.push_back(f);
1722 m_rulerGridLines = 3;
1724 m_showRulerGrid =
false;
1732 if(m_showRulerGrid ==
true)
1735 m_undoLayoutObjects.push_back(f);
1744 if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"TextFrame")
1757 else if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"DataFrame")
1761 double w = r.width();
1762 r = QRectF(r.left() - w / 5, r.top(), w, r.height());
1768 double w = m_paperViewRect.width();
1769 m_paperViewRect = QRectF(m_paperViewRect.left() - w / 5, m_paperViewRect.top(), w, m_paperViewRect.height());
1770 createWorkingArea();
1777 if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"TextFrame")
1780 if(f->
getAlign() != Qt::AlignRight)
1790 else if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"DataFrame")
1794 double w = r.width();
1795 r = QRectF(r.left() + w / 5, r.top(), w, r.height());
1801 double w = m_paperViewRect.width();
1802 m_paperViewRect = QRectF(m_paperViewRect.left() + w / 5, m_paperViewRect.top(), w, m_paperViewRect.height());
1803 createWorkingArea();
1810 if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"TextFrame")
1813 if(f->
getAlign() != Qt::AlignHCenter)
1823 else if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"DataFrame")
1827 double h = r.height();
1828 r = QRectF(r.left(), r.top() + h / 5, r.width(), h);
1834 double h = m_paperViewRect.height();
1835 m_paperViewRect = QRectF(m_paperViewRect.left(), m_paperViewRect.top() + h/5, m_paperViewRect.width(), h);
1836 createWorkingArea();
1843 if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"TextFrame")
1846 if(f->
getAlign() != Qt::AlignHCenter)
1856 else if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"DataFrame")
1860 double h = r.height();
1861 r = QRectF(r.left(), r.top() - h / 5, r.width(), h);
1867 double h = m_paperViewRect.height();
1868 m_paperViewRect = QRectF(m_paperViewRect.left(), m_paperViewRect.top() - h/5, m_paperViewRect.width(), h);
1869 createWorkingArea();
1876 if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"TextFrame")
1880 if(modifier == Qt::NoModifier)
1883 weight = QFont::Normal;
1884 else if(weight == QFont::Normal)
1902 weight = QFont::Normal;
1917 if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"TextFrame")
1921 if(cap == QFont::MixedCase)
1922 cap = QFont::AllUppercase;
1923 else if(cap == QFont::AllUppercase)
1924 cap = QFont::AllLowercase;
1925 else if(cap == QFont::AllLowercase)
1926 cap = QFont::SmallCaps;
1927 else if(cap == QFont::SmallCaps)
1928 cap = QFont::Capitalize;
1930 cap = QFont::MixedCase;
1942 if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"TextFrame")
1959 if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"TextFrame")
1976 if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"TextFrame")
1993 if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"TextFrame")
1996 QFont::Style style = f->
getStyle();
1997 if(style == QFont::StyleNormal)
1998 style = QFont::StyleItalic;
1999 else if(style == QFont::StyleItalic)
2000 style = QFont::StyleOblique;
2002 style = QFont::StyleNormal;
2014 if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"TextFrame")
2018 if(modifier == Qt::NoModifier)
2019 letterSpacing = letterSpacing * 1.1;
2021 letterSpacing = letterSpacing / 1.1;
2033 if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"TextFrame")
2037 if(modifier == Qt::NoModifier)
2052 if(modifier == Qt::AltModifier)
2054 if(m_layoutObjectSelected)
2056 if(m_layoutObjectSelected->windowTitle() ==
"TextFrame")
2061 QString text = QInputDialog::getText(
this, tr(
"QInputDialog::getText()"),
2062 tr(
"Change Text:"), QLineEdit::Normal,
2064 if(ok && !text.isEmpty())
2074 if(m_layoutObjectSelected->windowTitle() ==
"DataFrame")
2076 QMessageBox::information(
this,
"Change Geographical Data",
"Use drag drop...");
2082 QPointF c = m_paperViewRect.center();
2084 nf->
setId(m_idCount++);
2086 insertCopy2Undo(nf);
2090 m_layoutObjectSelected = nf;
2096 case Qt::Key_Delete:
2098 if(m_layoutObjectSelected)
2100 m_layoutObjectSelected->hideSelectionPoints();
2101 remove(m_layoutObjectSelected);
2102 insertCopy2Undo(m_layoutObjectSelected);
2103 m_layoutObjectSelected->hide();
2104 delete m_layoutObjectSelected;
2105 m_layoutObjectSelected = 0;
2109 setFrameSelected(0);
2116 if(modifier == Qt::ControlModifier)
2118 m_layoutObjectSelected = 0;
2119 while(QApplication::overrideCursor())
2120 QApplication::restoreOverrideCursor();
2123 std::vector<te::qt::widgets::LayoutObject*>::reverse_iterator it = m_undoLayoutObjects.rbegin();
2124 if(it == m_undoLayoutObjects.rend())
2126 QMessageBox::information(
this,
"Undo",
"Undo Buffer is Empty");
2129 getDraftPixmap()->fill(Qt::transparent);
2132 if(undof->
getId() != 0)
2163 if(undof->windowTitle() ==
"DataFrame")
2187 if(r.topLeft() != pos())
2189 if(r.size() != rect().size())
2190 resize(r.width(), r.height());
2192 createWorkingArea(
false);
2197 m_showRulerGrid =
false;
2211 if(modifier == Qt::ControlModifier)
2213 if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"TextFrame")
2217 nf->
setId(m_idCount++);
2219 insertCopy2Undo(nf);
2223 m_layoutObjectSelected = nf;
2226 else if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"DataFrame")
2230 nf->
setId(m_idCount++);
2232 insertCopy2Undo(nf);
2236 m_layoutObjectSelected = nf;
2244 sendEventToChildren(
false);
2247 sendEventToChildren(
true);
2251 if(m_layoutObjectSelected && m_layoutObjectSelected->windowTitle() ==
"DataFrame")
2266 setPaperSize(QSize(m_paperSize.height(), m_paperSize.width()));
2274 setPaperSize(m_paperSize);
2280 if(m_paperSize.width() > m_paperSize.height())
2281 m_paperSize = QSize(1189, 841);
2283 m_paperSize = QSize(841, 1189);
2284 setPaperSize(m_paperSize);
2291 if(m_paperSize.width() > m_paperSize.height())
2292 m_paperSize = QSize(841, 594);
2294 m_paperSize = QSize(594, 841);
2295 setPaperSize(m_paperSize);
2302 if(m_paperSize.width() > m_paperSize.height())
2303 m_paperSize = QSize(594, 420);
2305 m_paperSize = QSize(420, 594);
2306 setPaperSize(m_paperSize);
2313 if(m_paperSize.width() > m_paperSize.height())
2314 m_paperSize = QSize(420, 297);
2316 m_paperSize = QSize(297, 420);
2317 setPaperSize(m_paperSize);
2324 if(m_paperSize.width() > m_paperSize.height())
2325 m_paperSize = QSize(297, 210);
2327 m_paperSize = QSize(210, 297);
2328 setPaperSize(m_paperSize);
2340 return m_matrixPaperViewToVp;
2350 if(m_layoutObjectSelected)
2351 m_layoutObjectSelected->hideSelectionPoints();
2353 m_layoutObjectSelected = f;
2354 if(m_layoutObjectSelected)
2360 return m_layoutObjectSelected;
2400 return m_draftLayoutEditor->getDraftPixmap();
2405 m_draftLayoutEditor->raise();
2406 m_draftLayoutEditor->getDraftPixmap()->fill(Qt::transparent);
2411 m_draftLayoutEditor->lower();
2416 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
2417 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
2419 if((*it)->windowTitle() ==
"DataFrame")
2424 content->fill(Qt::transparent);
2426 QPainter painter(content);
2427 painter.drawPixmap(0, 0, *pixmap);
2438 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
2439 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
2441 if((*it)->windowTitle() ==
"DataFrame")
2451 std::vector<te::qt::widgets::LayoutObject*>::iterator it;
2452 for(it = m_layoutObjects.begin(); it != m_layoutObjects.end(); ++it)
2454 if((*it)->windowTitle() ==
"DataFrame")
void setStyle(QFont::Style)
QPoint getGlobalPositionCenter()
void toolTip(const QPoint &, const QString &)
QFont::Weight getWeight()
double getLetterSpacing()
void showSelectionPoints()
void setCapitalization(QFont::Capitalization)
virtual int getSRID() const
It return the Spatial Reference System used by the Map Display.
mydialect insert("+", new te::da::BinaryOpEncoder("+"))
void setWordSpacing(double)
void setWeight(QFont::Weight)
void setText(const QString &t)
void setLetterSpacing(double)
virtual int getSRID() const
It returns the Spatial Reference System ID associated to the Layer.
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
QFont::Capitalization getCapitalization()