insilmaril@0: #ifndef MAPEDITOR_H insilmaril@0: #define MAPEDITOR_H insilmaril@0: insilmaril@408: #include insilmaril@726: #include insilmaril@0: insilmaril@837: #include insilmaril@767: insilmaril@616: #include "attribute.h" insilmaril@473: #include "ornamentedobj.h" insilmaril@366: #include "settings.h" insilmaril@645: #include "vymmodel.h" insilmaril@0: insilmaril@119: insilmaril@790: class XLinkItem; insilmaril@790: insilmaril@486: /*! \brief Main widget in vym to display and edit a map */ insilmaril@473: insilmaril@767: insilmaril@767: class MapEditor : public QGraphicsView { insilmaril@0: Q_OBJECT insilmaril@767: Q_PROPERTY(qreal zoomFactor READ getZoomFactor WRITE setZoomFactor) insilmaril@767: Q_PROPERTY(QPointF scrollBarPos READ getScrollBarPos WRITE setScrollBarPos) insilmaril@0: insilmaril@0: public: insilmaril@720: MapEditor(VymModel *vm); insilmaril@0: ~MapEditor(); insilmaril@645: VymModel* getModel(); insilmaril@408: QGraphicsScene * getScene(); insilmaril@119: insilmaril@767: protected: insilmaril@767: QPointF scrollBarPos; insilmaril@767: QPointF scrollBarPosTarget; insilmaril@837: QPropertyAnimation scrollBarPosAnimation; insilmaril@767: public: insilmaril@772: void scrollTo (const QModelIndex &index); insilmaril@767: void setScrollBarPosTarget (const QRectF &rect); //! ensureVisible of rect insilmaril@767: QPointF getScrollBarPosTarget (); insilmaril@767: void setScrollBarPos (const QPointF &p); insilmaril@767: QPointF getScrollBarPos(); insilmaril@767: insilmaril@767: protected: insilmaril@767: qreal zoomFactor; insilmaril@767: qreal zoomFactorTarget; insilmaril@837: QPropertyAnimation zoomAnimation; insilmaril@767: public: insilmaril@767: void setZoomFactorTarget (const qreal &zf); insilmaril@767: qreal getZoomFactorTarget(); insilmaril@767: void setZoomFactor (const qreal &zf); insilmaril@767: qreal getZoomFactor(); insilmaril@767: insilmaril@0: public: insilmaril@491: void print(); //!< Print the map insilmaril@784: QRectF getTotalBBox(); //!< Bounding box of all items in map insilmaril@819: QImage getImage (); //!< Get a pixmap of the map insilmaril@491: void setAntiAlias (bool); //!< Set or unset antialiasing insilmaril@491: void setSmoothPixmap(bool); //!< Set or unset smoothing of pixmaps insilmaril@837: public slots: insilmaril@834: void autoLayout(); //!< Auto layout of map by using collision detection insilmaril@0: public: insilmaril@754: TreeItem *findMapItem (QPointF p,TreeItem *exclude); //! find item in map at position p. Ignore item exclude insilmaril@514: insilmaril@784: AttributeTable* attributeTable(); // FIXME-3 insilmaril@723: void testFunction1(); // just testing new stuff insilmaril@723: void testFunction2(); // just testing new stuff insilmaril@0: insilmaril@787: protected: insilmaril@787: BranchItem* getBranchDirectAbove(BranchItem *bi); //! get branch direct above bi (in TreeView) insilmaril@787: BranchItem* getBranchAbove(BranchItem *bi); //! get branch above bi (in TreeView) insilmaril@787: BranchItem* getBranchDirectBelow(BranchItem *bi); //! bet branch direct below bi (in TreeView) insilmaril@787: BranchItem* getBranchBelow(BranchItem *bi); //! bet branch below bi (in TreeView) insilmaril@787: BranchItem* getLeftBranch(BranchItem *bi); //! bet branch left of bi (in TreeView) insilmaril@787: BranchItem* getRightBranch(BranchItem *bi); //! bet branch right of bi (in TreeView) insilmaril@787: insilmaril@720: public slots: insilmaril@769: void cursorUp(); insilmaril@769: void cursorDown(); insilmaril@769: void cursorLeft(); insilmaril@769: void cursorRight(); insilmaril@769: void cursorFirst(); insilmaril@769: void cursorLast(); insilmaril@720: void editHeading(); insilmaril@720: void editHeadingFinished(); insilmaril@720: private: insilmaril@720: bool editingHeading; insilmaril@720: QLineEdit *lineEdit; insilmaril@720: insilmaril@0: protected: insilmaril@408: virtual void contextMenuEvent ( QContextMenuEvent *e ); insilmaril@398: virtual void keyPressEvent(QKeyEvent*); insilmaril@398: virtual void keyReleaseEvent(QKeyEvent*); insilmaril@408: virtual void mousePressEvent(QMouseEvent*); insilmaril@473: virtual void mouseMoveEvent(QMouseEvent*); insilmaril@408: virtual void mouseReleaseEvent(QMouseEvent*); insilmaril@408: virtual void mouseDoubleClickEvent(QMouseEvent*); insilmaril@473: virtual void resizeEvent( QResizeEvent * ); insilmaril@0: insilmaril@417: void dragEnterEvent (QDragEnterEvent *); insilmaril@417: void dragMoveEvent (QDragMoveEvent *); insilmaril@417: void dragLeaveEvent (QDragLeaveEvent *); insilmaril@417: void dropEvent (QDropEvent *); insilmaril@412: insilmaril@473: insilmaril@0: private: insilmaril@408: QGraphicsScene *mapScene; insilmaril@723: VymModel *model; //!< Vym Map, includding several mapCenters insilmaril@0: insilmaril@0: bool adjustCanvasRequested; // collect requests until end of user event insilmaril@0: BranchObj *editingBO; // entering Text into BO insilmaril@0: insilmaril@398: QCursor HandOpenCursor; // cursor while moving canvas view insilmaril@398: QCursor PickColorCursor; // cursor while picking color insilmaril@398: QCursor CopyCursor; // cursor while picking color insilmaril@398: QCursor XLinkCursor; // cursor while picking color insilmaril@83: bool pickingColor; insilmaril@83: bool drawingLink; // true while creating a link insilmaril@798: bool copyingObj; // true while modModeCopy insilmaril@798: bool objectMoved; // true if object was not clicked, but moved with mouse insilmaril@790: XLinkItem* tmpXLink; insilmaril@366: insilmaril@720: MapObj* movingObj; // moving a MapObj insilmaril@408: QPointF movingObj_orgPos; // org. pos of mouse before move insilmaril@408: QPointF movingObj_orgRelPos; // org. relative pos of mouse before move insilmaril@408: QPointF movingObj_start; // rel. pos of mouse to absPos insilmaril@408: QPointF movingCont_start; // inital pos of moving Content or insilmaril@408: QPointF movingVec; // how far has Content moved insilmaril@684: insilmaril@720: QPointF contextMenuPos; // position where context event was triggered insilmaril@684: insilmaril@0: QPrinter* printer; // Printing insilmaril@0: insilmaril@628: AttributeTable *attrTable; insilmaril@628: insilmaril@0: bool printFrame; // Print frame around map insilmaril@0: bool printFooter; // Print footer below map insilmaril@0: insilmaril@720: QPoint exportOffset; // set before export, used in save insilmaril@0: insilmaril@728: //////////// Selection related insilmaril@728: signals: insilmaril@729: void selectionChanged(const QItemSelection &, const QItemSelection &); insilmaril@728: insilmaril@726: private: insilmaril@728: QList selboxList; insilmaril@728: QColor selectionColor; insilmaril@728: insilmaril@728: public slots: insilmaril@776: void updateSelection(QItemSelection ,QItemSelection); // update selection insilmaril@753: void updateData (const QModelIndex&); // update data insilmaril@728: public: insilmaril@728: void setSelectionColor (QColor c); insilmaril@728: QColor getSelectionColor (); insilmaril@0: }; insilmaril@0: #endif insilmaril@0: