/** * @RDE_HEADER@ * Interface-Implementation of LocationDisplay * $Id$ * $HeadURL$ * $Author$ */ #pragma once // Own #include #include #include // Qt #include #include #include #include #include #include #include //---------------------------------------------------------------------------- namespace SituationMap { class MapImpl; class TB_Data; //----------------------------------------------------------------------------- // class TB_Data //----------------------------------------------------------------------------- class TB_Data : public QObject { Q_OBJECT public: friend class PixelBasedTextBoxHandlerImpl; TB_Data(); ~TB_Data(); bool hasValidId() const; bool connectGeometryChanges(); public Q_SLOTS: void onGeometryChanged(); Q_SIGNALS: void geometryChanged(SituationMap::PBTB_ID pbtbId); void geometryChangedFinished(SituationMap::PBTB_ID pbtbId); // [GUEZE-2947] Undo,Redo fuer PixelBasedTextBoxen public: PBTB_ID m_pbtbId; PixelTextBoxData m_ptbd; struct TB_GUI_DATA { QPointer m_textEdit; QGraphicsRectItem *m_handle_or_proxyControl{nullptr}; QGraphicsProxyWidget *m_proxy{nullptr}; void resetGui() { // ToDo: check // delete without removing from scene/view? delete m_handle_or_proxyControl; m_handle_or_proxyControl = nullptr; // since m_proxy has m_handle_or_proxyControl as parent... m_proxy = nullptr; delete m_textEdit; // QPointer } }; TB_GUI_DATA m_guiData; private: Q_DISABLE_COPY(TB_Data) }; //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // class QTextEditWithDoubleClick //----------------------------------------------------------------------------- class QTextEditWithDoubleClick : public QTextEdit { Q_OBJECT public: using BaseClass = QTextEdit; QTextEditWithDoubleClick(QWidget *parent = nullptr) :BaseClass(parent) {} virtual ~QTextEditWithDoubleClick() = default; Q_SIGNALS: void doubleClickEvent(PBTB_ID pbtbId); protected: void mouseDoubleClickEvent(QMouseEvent *) override; }; //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // class QGraphicsRectItemWithMoveEvent //----------------------------------------------------------------------------- class QGraphicsRectItemWithEvents : public QObject, public QGraphicsRectItem { Q_OBJECT public: using BaseClass = QGraphicsRectItem; QGraphicsRectItemWithEvents(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent = nullptr) : QObject(), BaseClass(x, y, w, h, parent) {} virtual ~QGraphicsRectItemWithEvents() = default; void activatePositionChangedEvents(); Q_SIGNALS: void positionChangedEvent(PBTB_ID pbtbId); void positionChangedFinishedEvent(PBTB_ID pbtbId); // [GUEZE-2947] Undo,Redo fuer PixelBasedTextBoxen protected Q_SLOTS: void onTimeout(); protected: void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; QTimer *m_qtimer{nullptr}; bool m_isMoving{false}; }; //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // class QSizeGripWithEvent //----------------------------------------------------------------------------- // [GUEZE-2947] Undo,Redo fuer PixelBasedTextBoxen // class QSizeGripWithEvent is introduced: class QSizeGripWithEvent : public QSizeGrip { Q_OBJECT public: using BaseClass = QSizeGrip; QSizeGripWithEvent(const PBTB_ID &pbtbId, QWidget *parent) : BaseClass(parent), m_pbtbId(pbtbId) {} virtual ~QSizeGripWithEvent() = default; Q_SIGNALS: void geometryChangedFinishedEvent(SituationMap::PBTB_ID pbtbId); // [GUEZE-2947] Undo,Redo fuer PixelBasedTextBoxen protected: void mouseMoveEvent(QMouseEvent *) override; void mouseReleaseEvent(QMouseEvent *mouseEvent) override; PBTB_ID m_pbtbId; bool m_isGeometryChanging{false}; }; //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // class PixelBasedTextBoxHandlerImpl //----------------------------------------------------------------------------- class SITUATIONMAP_EXPORT PixelBasedTextBoxHandlerImpl : public SituationMap::PixelBasedTextBoxHandler { Q_OBJECT using BaseClass = SituationMap::PixelBasedTextBoxHandler; public: explicit PixelBasedTextBoxHandlerImpl(SituationMap::MapImpl *mapImpl); virtual ~PixelBasedTextBoxHandlerImpl(); PixelBasedTextBoxHandlerImpl(const PixelBasedTextBoxHandlerImpl &other) = delete; PixelBasedTextBoxHandlerImpl &operator=(PixelBasedTextBoxHandlerImpl &other) = delete; // create/get QTextEdit *createTextBox(PBTB_ID &pbtbIdRef, const PixelTextBoxData &ptbd, bool enableGeometryModifications = true) override; QTextEdit *updateTextBox(const PBTB_ID &pbtbId, const PixelTextBoxData &ptbd) override; QTextEdit *getTextBox(const PBTB_ID &pbtbId) override; void removeSelection() override; bool setSelected(const PBTB_ID &pbtbId) override; // get: QVector getAllIdsOfParent(const PBTB_ID &pbtbId) const override; PixelTextBoxData getPixelTextBoxData(const PBTB_ID &pbtbId) const override; // remove: bool removeTextBox(const PBTB_ID &pbtbId) override; bool removeAllTextBoxesOfParent(int parentId) override; public Q_SLOTS: private: QSharedPointer getCreateTbData(const PBTB_ID &pbtbId) const; QSharedPointer getTbDataIfExists(const PBTB_ID &pbtbId) const; private : LOGGER_T m_logger; ///< Interface of the Logging-Facility class Private; /** * The private d->pointer to not break BC when changing internals of this class */ Private *d{nullptr}; }; } // namespace SituationMap //----------------------------------------------------------------------------