35 #include "../../../color/RGBAColor.h"
36 #include "../../../../qt/widgets/Utils.h"
37 #include "../../../../geometry/Envelope.h"
38 #include "../../../../common/STLUtils.h"
39 #include "../../../../qt/widgets/canvas/Canvas.h"
40 #include "../../../../dataaccess/utils/Utils.h"
41 #include "../../../../dataaccess/dataset/ObjectIdSet.h"
42 #include "../../../../qt/widgets/canvas/MultiThreadMapDisplay.h"
43 #include "../../../../common/TreeItem.h"
44 #include "../../../../srs/Converter.h"
45 #include "../../../../qt/widgets/tools/ZoomWheel.h"
46 #include "../../../../maptools/Utils.h"
48 #include "../../../../qt/widgets/tools/Pan.h"
49 #include "../../../../qt/widgets/tools/ZoomArea.h"
50 #include "../../../../qt/widgets/tools/ZoomClick.h"
51 #include "LayoutConfig.h"
61 #include <QMessageBox>
66 #include <QVBoxLayout>
70 #include <QApplication>
71 #include <QGraphicsSceneMouseEvent>
72 #include <QStyleOptionGraphicsItem>
76 QGraphicsProxyWidget(0),
79 m_grabbedByWidget(false),
83 this->setFlags(QGraphicsItem::ItemIsMovable
84 | QGraphicsItem::ItemIsSelectable
85 | QGraphicsItem::ItemSendsGeometryChanges
86 | QGraphicsItem::ItemIgnoresTransformations);
99 connect(
m_mapDisplay,SIGNAL(drawLayersFinished(
const QMap<QString, QString>&)),
107 QGraphicsItem* item =
this;
155 pixmap = QPixmap::fromImage(*img);
168 QGraphicsProxyWidget::paint(painter, option, widget);
170 if(!m_pixmap.isNull())
173 boundRect = boundingRect();
176 painter->translate( -boundRect.bottomLeft().x(), -boundRect.topRight().y() );
177 painter->drawPixmap(boundRect, m_pixmap, QRectF( 0, 0, m_pixmap.width(), m_pixmap.height() ));
182 if (option->state & QStyle::State_Selected)
184 drawSelection(painter);
195 qreal penWidth = painter->pen().widthF();
197 const qreal adj = penWidth / 2;
198 const QColor fgcolor(255,255,255);
199 const QColor backgroundColor(0,0,0);
202 painter->setBrush(Qt::NoBrush);
203 painter->drawRect(boundingRect().adjusted(adj, adj, -adj, -adj));
206 painter->setBrush(Qt::NoBrush);
207 painter->drawRect(boundingRect().adjusted(adj, adj, -adj, -adj));
213 Qt::DropActions actions =
event->dropAction();
214 if(actions != Qt::CopyAction)
217 getMimeData(event->mimeData());
219 QDropEvent dropEvent(QPoint(event->pos().x(),
event->pos().y()), event->possibleActions(),
event->mimeData(),
event->buttons(),
event->modifiers());
220 QApplication::sendEvent(m_mapDisplay, &dropEvent);
221 event->setAccepted(dropEvent.isAccepted());
227 Qt::DropActions actions =
event->dropAction();
228 if(actions != Qt::CopyAction)
231 event->acceptProposedAction();
247 if(m_pixmap.isNull())
251 QPointF point = pos();
257 QGraphicsObject::prepareGeometryChange();
264 if (rect.isEmpty() && !rect.isNull())
273 QPointF posF = scenePos();
274 qreal valuex = posF.x();
275 qreal valuey = posF.y();
278 coordinate.
x = valuex;
279 coordinate.
y = valuey;
286 QGraphicsItem::setPos(pos);
296 QGraphicsItem::mouseMoveEvent(event);
300 QMouseEvent mouseEvent(QEvent::MouseMove,QPoint(event->pos().x(),
event->pos().y()),
301 event->button(),
event->buttons(),
event->modifiers());
302 QApplication::sendEvent(m_mapDisplay, &mouseEvent);
303 event->setAccepted(mouseEvent.isAccepted());
312 QGraphicsItem::mousePressEvent(event);
316 QMouseEvent mouseEvent(QEvent::MouseButtonPress,QPoint(event->pos().x(),
event->pos().y()),
317 event->button(),
event->buttons(),
event->modifiers());
318 QApplication::sendEvent(m_mapDisplay, &mouseEvent);
319 event->setAccepted(mouseEvent.isAccepted());
328 QGraphicsItem::mouseReleaseEvent(event);
332 QMouseEvent mouseEvent(QEvent::MouseButtonRelease,QPoint(event->pos().x(),
event->pos().y()),
333 event->button(),
event->buttons(),
event->modifiers());
334 QApplication::sendEvent(m_mapDisplay, &mouseEvent);
335 event->setAccepted(mouseEvent.isAccepted());
343 QGraphicsProxyWidget::resizeEvent(event);
348 QString s = mime->data(
"application/x-terralib;value=\"DraggedItems\"").constData();
349 unsigned long v = s.toULongLong();
350 std::vector<te::qt::widgets::AbstractTreeItem*>* draggedItems =
reinterpret_cast<std::vector<te::qt::widgets::AbstractTreeItem*>*
>(v);
352 if(draggedItems->empty())
355 m_treeItem = draggedItems->operator[](0);
360 std::list<te::map::AbstractLayerPtr> visibleLayers;
363 return visibleLayers;
368 return visibleLayers;
370 std::list<te::map::AbstractLayerPtr> vis;
373 std::list<te::map::AbstractLayerPtr>::iterator vit;
374 for(vit = vis.begin(); vit != vis.end(); ++vit)
376 if((*vit)->getType() ==
"DATASETLAYER" ||
377 (*vit)->getType() ==
"QUERYLAYER" ||
378 (*vit)->getType() ==
"RASTERLAYER")
380 visibleLayers.push_front(*vit);
384 return visibleLayers;
394 layer = m_treeItem->getLayer();
422 QGraphicsItem::setZValue(z);
429 return QGraphicsItem::zValue();
436 m_mapDisplay->removeEventFilter(m_tool);
443 m_mapDisplay->installEventFilter(m_tool);
450 m_mapDisplay->removeEventFilter(m_tool);
456 setCursor(Qt::ArrowCursor);
469 std::string icon_path_zoom_area = LAYOUT_IMAGES_PNG
"/layout-map-zoom-in";
470 QCursor zoomAreaCursor(QIcon::fromTheme(icon_path_zoom_area.c_str()).pixmap(QSize(10,10)));
472 setCurrentTool(zoomArea);
477 std::string icon_path_zoom_out = LAYOUT_IMAGES_PNG
"/layout-map-zoom-out";
478 QCursor zoomOutCursor(QIcon::fromTheme(icon_path_zoom_out.c_str()).pixmap(QSize(10,10)));
480 setCurrentTool(zoomOut);
virtual void updateObserver(ContextItem context)
virtual void getMimeData(const QMimeData *mime)
void onDrawLayersFinished(const QMap< QString, QString > &errors)
te::layout::Observable * m_model
virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event)
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
virtual void changeCurrentTool(LayoutMode mode)
virtual te::gm::Envelope getBox()=0
virtual void drawSelection(QPainter *painter)
virtual void setRect(QRectF rect)
double getWidth() const
It returns the envelope width.
virtual void setPos(const QPointF &pos)
An utility struct for representing 2D coordinates.
void setPixmap(const QPixmap &pixmap)
LayoutMode
Enum LayoutMode. This is the enumeration of the components types.
virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
te::color::RGBAColor ** getPixmap()
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=0)
void Free(std::vector< T * > *v)
This function can be applied to a pointer to a vector of pointers.
An Envelope defines a 2D rectangular region.
virtual void insertItem(ItemObserver *item)=0
void setCurrentTool(te::qt::widgets::AbstractTool *tool)
virtual void dropEvent(QGraphicsSceneDragDropEvent *event)
virtual te::gm::Envelope viewportBox(te::gm::Envelope box)
std::list< te::map::AbstractLayerPtr > getVisibleLayers()
virtual te::gm::Coord2D getPosition()
virtual void resizeEvent(QGraphicsSceneResizeEvent *event)
A helper class for 32-bit RGBA (Red-Green-Blue-Alpha channel) color.
TELAYOUTEXPORT bool isCurrentMapTools()
AbstractScene * getScene()
virtual te::gm::Envelope getBox()
virtual int getZValueItem()
te::map::AbstractLayerPtr getLayer()
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
static Context * getInstance()
This function is called to create an instance of the class.
virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event)
virtual bool refreshLayer(te::map::AbstractLayerPtr layer)
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
double getHeight() const
It returns the envelope height.
bool isValid() const
It tells if the rectangle is valid or not.
MapItem(ItemController *controller, Observable *o)
TEMAPEXPORT void GetVisibleLayers(const std::list< te::map::AbstractLayerPtr > &layers, std::list< te::map::AbstractLayerPtr > &visibleLayers)
It gets the visible layers of the given layer list.
te::qt::widgets::MultiThreadMapDisplay * m_mapDisplay
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event)