54 #include <QGraphicsScene.h>
55 #include <QGraphicsPixmapItem>
56 #include <QGraphicsItem>
60 #include <QMessageBox>
63 QGraphicsScene(widget),
67 m_lineIntersectHrz(0),
90 m_screenWidthMM = widthMM;
91 m_screenHeightMM = heightMM;
93 m_boxW = calculateWindow();
94 m_boxPaperW = calculateBoxPaper();
96 calculateMatrixViewScene();
98 createMasterParentItem();
103 QGraphicsItem* qitem = ((QGraphicsItem*)item);
109 if(qitem->scene() !=
this)
113 total = m_masterParent->childItems().count();
114 qitem->setParentItem(m_masterParent);
117 this->addItem(qitem);
119 qitem->setZValue(total);
129 emit addItemFinalized();
134 QWidget* qWidget = ((QWidget*)widget);
135 this->addWidget(qWidget);
140 QWidget* qWidget = ((QWidget*)widget);
141 return this->addWidget(qWidget);
146 QGraphicsScene::mousePressEvent(mouseEvent);
151 QRectF srect = sceneRect();
153 QPointF ll = srect.bottomLeft();
154 QPointF ur = srect.topRight();
164 QList<QGraphicsItem*> graphicsItems = items();
165 foreach( QGraphicsItem *item, graphicsItems)
181 QGraphicsItemGroup* p = QGraphicsScene::createItemGroup(items);
194 QGraphicsItem* parent = group->parentItem();
195 group->setParentItem(p->parentItem());
196 foreach (QGraphicsItem *item, p->childItems())
203 group->setParentItem(parent);
212 group->setHandlesChildEvents(
false);
213 QGraphicsScene::destroyItemGroup(group);
220 double ppSizeWMM = 0;
221 double ppSizeHMM = 0;
235 double middleWW = widthW/2.;
236 double middleHW = heightW/2.;
238 double ppW = ppSizeWMM/2.;
239 double ppH = ppSizeHMM/2.;
241 if(widthW > ppSizeWMM)
252 if(heightW > ppSizeHMM)
271 double ppSizeWMM = 0;
272 double ppSizeHMM = 0;
281 int w = m_screenWidthMM;
282 int h = m_screenHeightMM;
284 double paddingW = w - ppSizeWMM;
285 double margin1 = paddingW / 2.;
290 x2 = (paddingW + ppSizeWMM) - margin1;
298 double paddingH = h - ppSizeHMM;
299 double margin2 = paddingH / 2.;
304 y2 = (paddingW + ppSizeHMM) - margin2;
319 double llx = m_boxW->getLowerLeftX();
320 double lly = m_boxW->getLowerLeftY();
321 double urx = m_boxW->getUpperRightX();
322 double ury = m_boxW->getUpperRightY();
328 m_matrix = QTransform().scale(dpiX / 25.4, -dpiY / 25.4).translate(-llx, -ury);
331 setSceneRect(QRectF(QPointF(llx, lly), QPointF(urx, ury)));
351 double llx = m_boxW->getLowerLeftX();
352 double lly = m_boxW->getLowerLeftY();
355 QRectF sceneRectBack = sceneRect();
356 m_masterParent = addRect(sceneRectBack);
357 ((QGraphicsRectItem*)m_masterParent)->setBrush((QBrush(QColor(109,109,109))));
358 m_masterParent->setPos(0, 0);
363 return m_masterParent;
368 QPrinter* printer = createPrinter();
370 QPrintPreviewDialog preview(printer);
371 connect(&preview, SIGNAL(paintRequested(QPrinter*)), SLOT(printPaper(QPrinter*)));
382 QPainter newPainter(printer);
383 newPainter.setRenderHint(QPainter::Antialiasing);
391 renderScene(&newPainter);
399 QString fileName = QFileDialog::getSaveFileName(QApplication::desktop(), tr(
"Save Image File"), QDir::currentPath(), tr(
"Image Files (*.png *.jpg *.bmp)"));
400 if(!fileName.isEmpty())
402 QImage image(fileName);
403 QPainter newPainter(&image);
404 newPainter.setRenderHint(QPainter::Antialiasing);
406 renderScene(&newPainter);
408 image.save(fileName);
414 QPrinter* printer= createPrinter();
415 QString fileName = QFileDialog::getSaveFileName(QApplication::desktop(), tr(
"Save Image File"), QDir::currentPath(), tr(
"PDF Files (*.pdf)"));
416 if(!fileName.isEmpty())
418 printer->setOutputFormat(QPrinter::PdfFormat);
419 printer->setOutputFileName(fileName);
426 QPrinter* printer=
new QPrinter(QPrinter::HighResolution);
429 printer->pageRect(QPrinter::Millimeter);
436 changePrintVisibility(
false);
445 QRect pxTargetRect(0, 0, newPainter->device()->width(), newPainter->device()->height());
454 this->render(newPainter, pxTargetRect, mmSourceRect);
456 changePrintVisibility(
true);
461 QList<QGraphicsItem*> graphicsItems = items();
462 foreach( QGraphicsItem *item, graphicsItems)
471 item->setVisible(change);
480 bool is_export =
false;
482 QString fileName = QFileDialog::getSaveFileName(QApplication::desktop(), tr(
"Save File"),
483 QDir::currentPath(), tr(
"JSON Files (*.json)"));
485 if(fileName.isEmpty())
490 std::string j_name = fileName.toStdString();
492 std::vector<te::layout::Properties*> props = getItemsProperties();
510 msgBox.setIcon(QMessageBox::Information);
511 msgBox.setText(
"Template exported successfully!");
515 msgBox.setIcon(QMessageBox::Warning);
516 msgBox.setText(
"Error exporting template!");
526 std::vector<te::layout::Properties*> props;
528 QString fileName = QFileDialog::getOpenFileName(QApplication::desktop(), tr(
"Import File"),
529 QDir::currentPath(), tr(
"JSON Files (*.json)"));
531 if(fileName.isEmpty())
536 std::string j_name = fileName.toStdString();
552 std::vector<te::layout::Properties*> props;
554 QList<QGraphicsItem*> graphicsItems = items();
555 foreach( QGraphicsItem *item, graphicsItems)
576 createMasterParentItem();
581 QGraphicsScene::drawForeground(painter, rect);
586 QBrush brush = painter->brush();
588 QBrush brushCopy = brush;
589 brush.setColor(QColor(0,0,0,255));
591 QPen pen = painter->pen();
597 painter->setPen(penCopy);
598 painter->setBrush(brushCopy);
599 painter->drawLines(m_lineIntersectHrz, 1);
600 painter->drawLines(m_lineIntersectVrt, 1);
603 painter->setBrush(brush);
615 std::vector<te::layout::Properties*> props = importJsonAsProps();
622 std::vector<te::layout::Properties*>::iterator it;
628 for(it = props.begin() ; it != props.end() ; ++it)
641 QList<QGraphicsItem*> graphicsItems = selectedItems();
643 foreach( QGraphicsItem *item, graphicsItems)
664 QGraphicsItem* item = 0;
685 QList<QGraphicsItem*> graphicsItems = selectedItems();
687 foreach(QGraphicsItem *item, graphicsItems)
706 m_lineIntersectHrz = line;
711 m_lineIntersectVrt = line;
void setDpiY(double dpiY)
virtual void printPreview(bool isPdf=false)
virtual void drawForeground(QPainter *painter, const QRectF &rect)
virtual void savePaperAsImage()
virtual void buildTemplate(VisualizationArea *vzArea)
virtual void printPaper(QPrinter *printer)
virtual std::vector< te::layout::Properties * > importJsonAsProps()
virtual void changeCurrentTool(LayoutMode mode)
virtual te::gm::Envelope * calculateWindow()
virtual te::gm::Envelope * getWorldBox() const
void setMode(LayoutMode mode)
const double & getLowerLeftY() const
It returns a constant refernce to the y coordinate of the lower left corner.
double getWidth() const
It returns the envelope width.
An utility struct for representing 2D coordinates.
virtual te::gm::Envelope * getPaperBox() const
virtual void deleteItems()
virtual te::layout::AbstractTemplate * getTemplate()
virtual void createItem(const te::gm::Coord2D &coord)
LayoutMode
Enum LayoutMode. This is the enumeration of the components types.
virtual bool isPrintable()
virtual QGraphicsProxyWidget * insertOutsideProxy(OutsideObserver *widget)
void setDpiX(double dpiX)
virtual void insertOutside(OutsideObserver *widget)
virtual void changePrintVisibility(bool change)
virtual void setCurrentToolInSelectedMapItems(LayoutMode mode)
QGraphicsItemGroup * createItemGroup(const QList< QGraphicsItem * > &items)
virtual bool exportTemplate(std::vector< te::layout::Properties * > properties)=0
virtual QGraphicsItem * getMasterParentItem()
virtual void calculateMatrixViewScene()
An Envelope defines a 2D rectangular region.
virtual te::gm::Envelope getSceneBox()
virtual void redrawItems()
QGraphicsItem * rebuildItem(te::layout::Properties *props, bool draw=true)
virtual te::gm::Envelope * calculateBoxPaper()
Scene(QWidget *widget=(QWidget *) 0)
virtual void init(double widthMM, double heightMM)
virtual void addToGroup(QGraphicsItem *item)
virtual void rebuildWithoutPaper()
QGraphicsItem * createItem(te::layout::LayoutMode mode, const te::gm::Coord2D &coordinate, bool draw=true)
void setLineIntersectionHzr(QLineF *line)
virtual void createMasterParentItem()
void setLineIntersectionVrt(QLineF *line)
virtual bool exportPropsAsJSON()
virtual void getPaperSize(double &w, double &h)
const double & getLowerLeftX() const
It returns a constant reference to the x coordinate of the lower left corner.
BuildGraphicsItem * getBuildGraphicsItem()
virtual std::vector< te::layout::Properties * > importTemplate()=0
virtual void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
TELAYOUTEXPORT bool isCurrentMapTools()
virtual void savePaperAsPDF()
virtual void changeBoxArea(te::gm::Envelope *boxArea)
PaperConfig * getPaperConfig() const
virtual void redraw(const double &scaleFactor=1.)
virtual te::layout::Properties * getProperties() const
static Context * getInstance()
This function is called to create an instance of the class.
void renderScene(QPainter *newPainter)
virtual void insertItem(ItemObserver *item)
double getHeight() const
It returns the envelope height.
virtual QTransform getMatrixViewScene()
virtual QPrinter * createPrinter()
void destroyItemGroup(QGraphicsItemGroup *group)
virtual std::vector< te::layout::Properties * > getItemsProperties()