diff --git a/src/materiallistwidget.cpp b/src/materiallistwidget.cpp index bb6ef69f..316bf3d9 100644 --- a/src/materiallistwidget.cpp +++ b/src/materiallistwidget.cpp @@ -261,7 +261,6 @@ void MaterialListWidget::reload() MaterialWidget *widget = new MaterialWidget(m_document, materialId); connect(widget, &MaterialWidget::modifyMaterial, this, &MaterialListWidget::modifyMaterial); connect(widget, &MaterialWidget::cornerButtonClicked, this, &MaterialListWidget::cornerButtonClicked); - widget->previewWidget()->setGraphicsFunctions(this); setItemWidget(item, col, widget); widget->reload(); widget->updateCheckedState(isMaterialSelected(materialId)); @@ -287,40 +286,6 @@ void MaterialListWidget::removeAllContent() clear(); } -bool MaterialListWidget::mouseMove(QMouseEvent *event) -{ - return false; -} - -bool MaterialListWidget::wheel(QWheelEvent *event) -{ - return false; -} - -bool MaterialListWidget::mouseRelease(QMouseEvent *event) -{ - return false; -} - -bool MaterialListWidget::mousePress(QMouseEvent *event) -{ - if (event->button() == Qt::RightButton) { - showContextMenu(mapFromGlobal(event->globalPos())); - return false; - } - return false; -} - -bool MaterialListWidget::mouseDoubleClick(QMouseEvent *event) -{ - return false; -} - -bool MaterialListWidget::keyPress(QKeyEvent *event) -{ - return false; -} - void MaterialListWidget::copy() { if (m_selectedMaterialIds.empty() && m_currentSelectedMaterialId.isNull()) diff --git a/src/materiallistwidget.h b/src/materiallistwidget.h index b4961b24..ed997f34 100644 --- a/src/materiallistwidget.h +++ b/src/materiallistwidget.h @@ -2,11 +2,11 @@ #define MATERIAL_LIST_WIDGET_H #include #include +#include #include "skeletondocument.h" #include "materialwidget.h" -#include "skeletongraphicswidget.h" -class MaterialListWidget : public QTreeWidget, public SkeletonGraphicsFunctions +class MaterialListWidget : public QTreeWidget { Q_OBJECT signals: @@ -30,12 +30,6 @@ public slots: protected: void resizeEvent(QResizeEvent *event) override; void mousePressEvent(QMouseEvent *event) override; - bool mouseMove(QMouseEvent *event) override; - bool wheel(QWheelEvent *event) override; - bool mouseRelease(QMouseEvent *event) override; - bool mousePress(QMouseEvent *event) override; - bool mouseDoubleClick(QMouseEvent *event) override; - bool keyPress(QKeyEvent *event) override; private: int calculateColumnCount(); void updateMaterialSelectState(QUuid materialId, bool selected); diff --git a/src/modelwidget.cpp b/src/modelwidget.cpp index 0110a559..569a6157 100644 --- a/src/modelwidget.cpp +++ b/src/modelwidget.cpp @@ -4,9 +4,7 @@ #include #include #include "modelwidget.h" -#include "ds3file.h" -#include "skeletongraphicswidget.h" -#include "modelwidget.h" +#include "dust3dutil.h" // Modifed from http://doc.qt.io/qt-5/qtopengl-hellogl2-glwidget-cpp.html @@ -19,10 +17,11 @@ ModelWidget::ModelWidget(QWidget *parent) : m_zRot(0), m_program(nullptr), m_moveStarted(false), - m_graphicsFunctions(NULL), m_moveEnabled(true), m_zoomEnabled(true) { + setAttribute(Qt::WA_TransparentForMouseEvents); + // --transparent causes the clear color to be transparent. Therefore, on systems that // support it, the widget will become transparent apart from the logo. if (m_transparent) { @@ -37,7 +36,6 @@ ModelWidget::ModelWidget(QWidget *parent) : fmt.setSamples(4); setFormat(fmt); } - setMouseTracking(true); setContextMenuPolicy(Qt::CustomContextMenu); } @@ -56,11 +54,6 @@ int ModelWidget::zRot() return m_zRot; } -void ModelWidget::setGraphicsFunctions(SkeletonGraphicsFunctions *graphicsFunctions) -{ - m_graphicsFunctions = graphicsFunctions; -} - ModelWidget::~ModelWidget() { cleanup(); @@ -187,71 +180,56 @@ void ModelWidget::toggleWireframe() update(); } -void ModelWidget::mousePressEvent(QMouseEvent *event) +bool ModelWidget::inputMousePressEventFromOtherWidget(QMouseEvent *event) { bool shouldStartMove = false; - QOpenGLWidget::mousePressEvent(event); if (event->button() == Qt::LeftButton) { if (QGuiApplication::queryKeyboardModifiers().testFlag(Qt::AltModifier) && !QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ControlModifier)) { - shouldStartMove = true; + shouldStartMove = m_moveEnabled; } } else if (event->button() == Qt::MidButton) { shouldStartMove = m_moveEnabled; } if (shouldStartMove) { - m_lastPos = event->pos(); + m_lastPos = convertInputPosFromOtherWidget(event); if (!m_moveStarted) { - m_moveStartPos = mapToParent(event->pos()); + m_moveStartPos = mapToParent(convertInputPosFromOtherWidget(event)); m_moveStartGeometry = geometry(); m_moveStarted = true; } - return; + return true; } - if (!m_moveStarted && m_graphicsFunctions && m_graphicsFunctions->mousePress(event)) - return; + return false; } -void ModelWidget::mouseReleaseEvent(QMouseEvent *event) +bool ModelWidget::inputMouseReleaseEventFromOtherWidget(QMouseEvent *event) { - QOpenGLWidget::mouseReleaseEvent(event); - if (m_graphicsFunctions) - m_graphicsFunctions->mouseRelease(event); + Q_UNUSED(event); if (m_moveStarted) { m_moveStarted = false; + return true; } + return false; } -void ModelWidget::mouseDoubleClickEvent(QMouseEvent *event) +bool ModelWidget::inputMouseMoveEventFromOtherWidget(QMouseEvent *event) { - QOpenGLWidget::mouseDoubleClickEvent(event); - if (m_graphicsFunctions) - m_graphicsFunctions->mouseDoubleClick(event); -} - -void ModelWidget::keyPressEvent(QKeyEvent *event) -{ - QOpenGLWidget::keyPressEvent(event); - if (m_graphicsFunctions) - m_graphicsFunctions->keyPress(event); -} - -void ModelWidget::mouseMoveEvent(QMouseEvent *event) -{ - QOpenGLWidget::mouseMoveEvent(event); - if (!m_moveStarted && m_graphicsFunctions && m_graphicsFunctions->mouseMove(event)) - return; + if (!m_moveStarted) { + return false; + } - int dx = event->x() - m_lastPos.x(); - int dy = event->y() - m_lastPos.y(); + QPoint pos = convertInputPosFromOtherWidget(event); + int dx = pos.x() - m_lastPos.x(); + int dy = pos.y() - m_lastPos.y(); if ((event->buttons() & Qt::MidButton) || (m_moveStarted && (event->buttons() & Qt::LeftButton))) { if (QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier)) { if (m_moveStarted) { QRect rect = m_moveStartGeometry; - QPoint pos = mapToParent(event->pos()); - rect.translate(pos.x() - m_moveStartPos.x(), pos.y() - m_moveStartPos.y()); + QPoint posInParent = mapToParent(pos); + rect.translate(posInParent.x() - m_moveStartPos.x(), posInParent.y() - m_moveStartPos.y()); setGeometry(rect); } } else { @@ -259,24 +237,29 @@ void ModelWidget::mouseMoveEvent(QMouseEvent *event) setYRotation(m_yRot + 8 * dx); } } - m_lastPos = event->pos(); + m_lastPos = pos; + + return true; } -void ModelWidget::zoom(float delta) +QPoint ModelWidget::convertInputPosFromOtherWidget(QMouseEvent *event) { - QMargins margins(delta, delta, delta, delta); - setGeometry(geometry().marginsAdded(margins)); + return mapFromGlobal(event->globalPos()); } -void ModelWidget::wheelEvent(QWheelEvent *event) +bool ModelWidget::inputWheelEventFromOtherWidget(QWheelEvent *event) { - QOpenGLWidget::wheelEvent(event); - if (!m_moveStarted && m_graphicsFunctions && m_graphicsFunctions->wheel(event)) - return; + //QPoint globalPos = event->globalPos(); + //QPoint zero; + //QPoint leftTop = mapToGlobal(zero); + //QRect globalRect(leftTop.x(), leftTop.y(), width(), height()); + //if (!globalRect.contains(globalPos)) + // return false; + if (m_moveStarted) - return; + return true; if (!m_zoomEnabled) - return; + return false; qreal delta = event->delta() / 10; if (QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier)) { if (delta > 0) @@ -288,6 +271,13 @@ void ModelWidget::wheelEvent(QWheelEvent *event) delta = delta < 0 ? -1.0 : 1.0; } zoom(delta); + return true; +} + +void ModelWidget::zoom(float delta) +{ + QMargins margins(delta, delta, delta, delta); + setGeometry(geometry().marginsAdded(margins)); } void ModelWidget::updateMesh(MeshLoader *mesh) diff --git a/src/modelwidget.h b/src/modelwidget.h index 9b92cd22..8dafd221 100644 --- a/src/modelwidget.h +++ b/src/modelwidget.h @@ -32,6 +32,11 @@ public: void toggleWireframe(); void enableMove(bool enabled); void enableZoom(bool enabled); + bool inputMousePressEventFromOtherWidget(QMouseEvent *event); + bool inputMouseMoveEventFromOtherWidget(QMouseEvent *event); + bool inputWheelEventFromOtherWidget(QWheelEvent *event); + bool inputMouseReleaseEventFromOtherWidget(QMouseEvent *event); + QPoint convertInputPosFromOtherWidget(QMouseEvent *event); public slots: void setXRotation(int angle); void setYRotation(int angle); @@ -46,12 +51,6 @@ protected: void initializeGL() override; void paintGL() override; void resizeGL(int width, int height) override; - void mousePressEvent(QMouseEvent *event) override; - void mouseMoveEvent(QMouseEvent *event) override; - void wheelEvent(QWheelEvent *event) override; - void mouseReleaseEvent(QMouseEvent *event) override; - void mouseDoubleClickEvent(QMouseEvent *event) override; - void keyPressEvent(QKeyEvent *event) override; public: int xRot(); int yRot(); @@ -62,7 +61,6 @@ private: int m_zRot; ModelShaderProgram *m_program; bool m_moveStarted; - SkeletonGraphicsFunctions *m_graphicsFunctions; bool m_moveEnabled; bool m_zoomEnabled; private: diff --git a/src/motionlistwidget.cpp b/src/motionlistwidget.cpp index 31541c4a..97eef432 100644 --- a/src/motionlistwidget.cpp +++ b/src/motionlistwidget.cpp @@ -251,7 +251,6 @@ void MotionListWidget::reload() MotionWidget *widget = new MotionWidget(m_document, motionId); connect(widget, &MotionWidget::modifyMotion, this, &MotionListWidget::modifyMotion); connect(widget, &MotionWidget::cornerButtonClicked, this, &MotionListWidget::cornerButtonClicked); - widget->previewWidget()->setGraphicsFunctions(this); setItemWidget(item, col, widget); widget->reload(); widget->updateCheckedState(isMotionSelected(motionId)); @@ -277,40 +276,6 @@ void MotionListWidget::removeAllContent() clear(); } -bool MotionListWidget::mouseMove(QMouseEvent *event) -{ - return false; -} - -bool MotionListWidget::wheel(QWheelEvent *event) -{ - return false; -} - -bool MotionListWidget::mouseRelease(QMouseEvent *event) -{ - return false; -} - -bool MotionListWidget::mousePress(QMouseEvent *event) -{ - if (event->button() == Qt::RightButton) { - showContextMenu(mapFromGlobal(event->globalPos())); - return false; - } - return false; -} - -bool MotionListWidget::mouseDoubleClick(QMouseEvent *event) -{ - return false; -} - -bool MotionListWidget::keyPress(QKeyEvent *event) -{ - return false; -} - void MotionListWidget::copy() { if (m_selectedMotionIds.empty() && m_currentSelectedMotionId.isNull()) diff --git a/src/motionlistwidget.h b/src/motionlistwidget.h index 45272eb1..6954064d 100644 --- a/src/motionlistwidget.h +++ b/src/motionlistwidget.h @@ -2,11 +2,11 @@ #define MOTION_LIST_WIDGET_H #include #include +#include #include "skeletondocument.h" #include "motionwidget.h" -#include "skeletongraphicswidget.h" -class MotionListWidget : public QTreeWidget, public SkeletonGraphicsFunctions +class MotionListWidget : public QTreeWidget { Q_OBJECT signals: @@ -28,12 +28,6 @@ public slots: protected: void resizeEvent(QResizeEvent *event) override; void mousePressEvent(QMouseEvent *event) override; - bool mouseMove(QMouseEvent *event) override; - bool wheel(QWheelEvent *event) override; - bool mouseRelease(QMouseEvent *event) override; - bool mousePress(QMouseEvent *event) override; - bool mouseDoubleClick(QMouseEvent *event) override; - bool keyPress(QKeyEvent *event) override; private: int calculateColumnCount(); void updateMotionSelectState(QUuid motionId, bool selected); diff --git a/src/poselistwidget.cpp b/src/poselistwidget.cpp index 2d47bf01..32d65697 100644 --- a/src/poselistwidget.cpp +++ b/src/poselistwidget.cpp @@ -251,7 +251,6 @@ void PoseListWidget::reload() PoseWidget *widget = new PoseWidget(m_document, poseId); connect(widget, &PoseWidget::modifyPose, this, &PoseListWidget::modifyPose); connect(widget, &PoseWidget::cornerButtonClicked, this, &PoseListWidget::cornerButtonClicked); - widget->previewWidget()->setGraphicsFunctions(this); setItemWidget(item, col, widget); widget->reload(); widget->updateCheckedState(isPoseSelected(poseId)); @@ -277,40 +276,6 @@ void PoseListWidget::removeAllContent() clear(); } -bool PoseListWidget::mouseMove(QMouseEvent *event) -{ - return false; -} - -bool PoseListWidget::wheel(QWheelEvent *event) -{ - return false; -} - -bool PoseListWidget::mouseRelease(QMouseEvent *event) -{ - return false; -} - -bool PoseListWidget::mousePress(QMouseEvent *event) -{ - if (event->button() == Qt::RightButton) { - showContextMenu(mapFromGlobal(event->globalPos())); - return false; - } - return false; -} - -bool PoseListWidget::mouseDoubleClick(QMouseEvent *event) -{ - return false; -} - -bool PoseListWidget::keyPress(QKeyEvent *event) -{ - return false; -} - void PoseListWidget::copy() { if (m_selectedPoseIds.empty() && m_currentSelectedPoseId.isNull()) diff --git a/src/poselistwidget.h b/src/poselistwidget.h index 7042091b..1e5750d3 100644 --- a/src/poselistwidget.h +++ b/src/poselistwidget.h @@ -2,11 +2,11 @@ #define POSE_LIST_WIDGET_H #include #include +#include #include "skeletondocument.h" #include "posewidget.h" -#include "skeletongraphicswidget.h" -class PoseListWidget : public QTreeWidget, public SkeletonGraphicsFunctions +class PoseListWidget : public QTreeWidget { Q_OBJECT signals: @@ -28,12 +28,6 @@ public slots: protected: void resizeEvent(QResizeEvent *event) override; void mousePressEvent(QMouseEvent *event) override; - bool mouseMove(QMouseEvent *event) override; - bool wheel(QWheelEvent *event) override; - bool mouseRelease(QMouseEvent *event) override; - bool mousePress(QMouseEvent *event) override; - bool mouseDoubleClick(QMouseEvent *event) override; - bool keyPress(QKeyEvent *event) override; private: int calculateColumnCount(); void updatePoseSelectState(QUuid poseId, bool selected); diff --git a/src/skeletondocumentwindow.cpp b/src/skeletondocumentwindow.cpp index afb4cd2f..079a2823 100644 --- a/src/skeletondocumentwindow.cpp +++ b/src/skeletondocumentwindow.cpp @@ -221,7 +221,8 @@ SkeletonDocumentWindow::SkeletonDocumentWindow() : m_modelRenderWidget->setMinimumSize(SkeletonDocumentWindow::m_modelRenderWidgetInitialSize, SkeletonDocumentWindow::m_modelRenderWidgetInitialSize); m_modelRenderWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); m_modelRenderWidget->move(SkeletonDocumentWindow::m_modelRenderWidgetInitialX, SkeletonDocumentWindow::m_modelRenderWidgetInitialY); - m_modelRenderWidget->setGraphicsFunctions(graphicsWidget); + + m_graphicsWidget->setModelWidget(m_modelRenderWidget); m_document->setSharedContextWidget(m_modelRenderWidget); @@ -230,7 +231,6 @@ SkeletonDocumentWindow::SkeletonDocumentWindow() : QDockWidget *partTreeDocker = new QDockWidget(tr("Parts"), this); partTreeDocker->setAllowedAreas(Qt::RightDockWidgetArea); SkeletonPartTreeWidget *partTreeWidget = new SkeletonPartTreeWidget(m_document, partTreeDocker); - partTreeWidget->setGraphicsFunctions(graphicsWidget); partTreeDocker->setWidget(partTreeWidget); addDockWidget(Qt::RightDockWidgetArea, partTreeDocker); connect(partTreeDocker, &QDockWidget::topLevelChanged, [=](bool topLevel) { diff --git a/src/skeletongraphicswidget.cpp b/src/skeletongraphicswidget.cpp index 7ded0a0e..158d4133 100644 --- a/src/skeletongraphicswidget.cpp +++ b/src/skeletongraphicswidget.cpp @@ -41,7 +41,9 @@ SkeletonGraphicsWidget::SkeletonGraphicsWidget(const SkeletonDocument *document) m_checkedOriginItem(nullptr), m_ikMoveUpdateVersion(0), m_ikMover(nullptr), - m_deferredRemoveTimer(nullptr) + m_deferredRemoveTimer(nullptr), + m_eventForwardingToModelWidget(false), + m_modelWidget(nullptr) { setRenderHint(QPainter::Antialiasing, false); setBackgroundBrush(QBrush(QWidget::palette().color(QWidget::backgroundRole()), Qt::SolidPattern)); @@ -86,6 +88,11 @@ SkeletonGraphicsWidget::SkeletonGraphicsWidget(const SkeletonDocument *document) connect(this, &SkeletonGraphicsWidget::customContextMenuRequested, this, &SkeletonGraphicsWidget::showContextMenu); } +void SkeletonGraphicsWidget::setModelWidget(ModelWidget *modelWidget) +{ + m_modelWidget = modelWidget; +} + void SkeletonGraphicsWidget::enableBackgroundBlur() { m_backgroundItem->setOpacity(0.25); @@ -564,27 +571,40 @@ void SkeletonGraphicsWidget::editModeChanged() void SkeletonGraphicsWidget::mouseMoveEvent(QMouseEvent *event) { + if (m_modelWidget && m_modelWidget->inputMouseMoveEventFromOtherWidget(event)) + return; + QGraphicsView::mouseMoveEvent(event); mouseMove(event); } void SkeletonGraphicsWidget::wheelEvent(QWheelEvent *event) { - if (SkeletonDocumentEditMode::ZoomIn == m_document->editMode || - SkeletonDocumentEditMode::ZoomOut == m_document->editMode || - SkeletonDocumentEditMode::Drag == m_document->editMode) - QGraphicsView::wheelEvent(event); - wheel(event); + if (!wheel(event)) { + if (m_modelWidget && m_modelWidget->inputWheelEventFromOtherWidget(event)) + return; + } + + //if (SkeletonDocumentEditMode::ZoomIn == m_document->editMode || + // SkeletonDocumentEditMode::ZoomOut == m_document->editMode || + // SkeletonDocumentEditMode::Drag == m_document->editMode) + // QGraphicsView::wheelEvent(event); } void SkeletonGraphicsWidget::mouseReleaseEvent(QMouseEvent *event) { + if (m_modelWidget && m_modelWidget->inputMouseReleaseEventFromOtherWidget(event)) + return; + QGraphicsView::mouseReleaseEvent(event); mouseRelease(event); } void SkeletonGraphicsWidget::mousePressEvent(QMouseEvent *event) { + if (m_modelWidget && m_modelWidget->inputMousePressEventFromOtherWidget(event)) + return; + QGraphicsView::mousePressEvent(event); m_mouseEventFromSelf = true; if (mousePress(event)) { diff --git a/src/skeletongraphicswidget.h b/src/skeletongraphicswidget.h index 541cefd4..da8f4ecc 100644 --- a/src/skeletongraphicswidget.h +++ b/src/skeletongraphicswidget.h @@ -17,6 +17,7 @@ #include "theme.h" #include "dust3dutil.h" #include "skeletonikmover.h" +#include "modelwidget.h" class SkeletonGraphicsOriginItem : public QGraphicsPolygonItem { @@ -336,18 +337,7 @@ private: SkeletonProfile m_profile; }; -class SkeletonGraphicsFunctions -{ -public: - virtual bool mouseMove(QMouseEvent *event) = 0; - virtual bool wheel(QWheelEvent *event) = 0; - virtual bool mouseRelease(QMouseEvent *event) = 0; - virtual bool mousePress(QMouseEvent *event) = 0; - virtual bool mouseDoubleClick(QMouseEvent *event) = 0; - virtual bool keyPress(QKeyEvent *event) = 0; -}; - -class SkeletonGraphicsWidget : public QGraphicsView, public SkeletonGraphicsFunctions +class SkeletonGraphicsWidget : public QGraphicsView { Q_OBJECT signals: @@ -411,6 +401,7 @@ public: bool hasEdgeSelection(); bool hasNodeSelection(); bool hasTwoDisconnectedNodesSelection(); + void setModelWidget(ModelWidget *modelWidget); protected: void mouseMoveEvent(QMouseEvent *event); void wheelEvent(QWheelEvent *event); @@ -522,6 +513,8 @@ private: //need initalize unsigned long long m_ikMoveUpdateVersion; SkeletonIkMover *m_ikMover; QTimer *m_deferredRemoveTimer; + bool m_eventForwardingToModelWidget; + ModelWidget *m_modelWidget; private: QVector3D m_ikMoveTarget; QUuid m_ikMoveEndEffectorId; diff --git a/src/skeletonparttreewidget.cpp b/src/skeletonparttreewidget.cpp index df759402..79fba8d1 100644 --- a/src/skeletonparttreewidget.cpp +++ b/src/skeletonparttreewidget.cpp @@ -62,42 +62,6 @@ SkeletonPartTreeWidget::SkeletonPartTreeWidget(const SkeletonDocument *document, connect(this, &QTreeWidget::itemCollapsed, this, &SkeletonPartTreeWidget::groupCollapsed); } -bool SkeletonPartTreeWidget::mouseMove(QMouseEvent *event) -{ - return false; -} - -bool SkeletonPartTreeWidget::wheel(QWheelEvent *event) -{ - return false; -} - -bool SkeletonPartTreeWidget::mouseRelease(QMouseEvent *event) -{ - return false; -} - -bool SkeletonPartTreeWidget::mousePress(QMouseEvent *event) -{ - if (event->button() == Qt::RightButton) { - showContextMenu(mapFromGlobal(event->globalPos())); - return true; - } - return false; -} - -bool SkeletonPartTreeWidget::mouseDoubleClick(QMouseEvent *event) -{ - return false; -} - -bool SkeletonPartTreeWidget::keyPress(QKeyEvent *event) -{ - if (m_graphicsFunctions) - return m_graphicsFunctions->keyPress(event); - return false; -} - void SkeletonPartTreeWidget::selectComponent(QUuid componentId, bool multiple) { if (multiple) { @@ -703,7 +667,6 @@ void SkeletonPartTreeWidget::addComponentChildrenToItem(QUuid componentId, QTree item->setFlags(item->flags() & ~(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable)); QUuid partId = component->linkToPartId; SkeletonPartWidget *widget = new SkeletonPartWidget(m_document, partId); - widget->previewWidget()->setGraphicsFunctions(this); item->setSizeHint(0, SkeletonPartWidget::preferredSize()); setItemWidget(item, 0, widget); widget->reload(); @@ -969,18 +932,6 @@ QSize SkeletonPartTreeWidget::sizeHint() const return QSize(size.width() * 1.35, size.height() * 5.5); } -void SkeletonPartTreeWidget::setGraphicsFunctions(SkeletonGraphicsFunctions *graphicsFunctions) -{ - m_graphicsFunctions = graphicsFunctions; -} - -void SkeletonPartTreeWidget::keyPressEvent(QKeyEvent *event) -{ - QTreeWidget::keyPressEvent(event); - if (m_graphicsFunctions) - m_graphicsFunctions->keyPress(event); -} - bool SkeletonPartTreeWidget::isComponentSelected(QUuid componentId) { return (m_currentSelectedComponentId == componentId || diff --git a/src/skeletonparttreewidget.h b/src/skeletonparttreewidget.h index c1396865..56b40179 100644 --- a/src/skeletonparttreewidget.h +++ b/src/skeletonparttreewidget.h @@ -4,9 +4,8 @@ #include #include #include "skeletondocument.h" -#include "skeletongraphicswidget.h" -class SkeletonPartTreeWidget : public QTreeWidget, public SkeletonGraphicsFunctions +class SkeletonPartTreeWidget : public QTreeWidget { Q_OBJECT signals: @@ -44,7 +43,6 @@ signals: public: SkeletonPartTreeWidget(const SkeletonDocument *document, QWidget *parent); QTreeWidgetItem *findComponentItem(QUuid componentId); - void setGraphicsFunctions(SkeletonGraphicsFunctions *graphicsFunctions); public slots: void componentNameChanged(QUuid componentId); void componentChildrenChanged(QUuid componentId); @@ -71,15 +69,8 @@ public slots: void removeAllContent(); void showContextMenu(const QPoint &pos); protected: - virtual QSize sizeHint() const; - virtual void mousePressEvent(QMouseEvent *event); - virtual void keyPressEvent(QKeyEvent *event); - bool mouseMove(QMouseEvent *event); - bool wheel(QWheelEvent *event); - bool mouseRelease(QMouseEvent *event); - bool mousePress(QMouseEvent *event); - bool mouseDoubleClick(QMouseEvent *event); - bool keyPress(QKeyEvent *event); + QSize sizeHint() const override; + void mousePressEvent(QMouseEvent *event) override; private: void addComponentChildrenToItem(QUuid componentId, QTreeWidgetItem *parentItem); void deleteItemChildren(QTreeWidgetItem *item); @@ -91,7 +82,6 @@ private: const SkeletonDocument *m_document = nullptr; std::map m_partItemMap; std::map m_componentItemMap; - SkeletonGraphicsFunctions *m_graphicsFunctions = nullptr; QFont m_normalFont; QFont m_selectedFont; QUuid m_currentSelectedComponentId;