OSDN Git Service

[denncoCreator] alpha 2.0 - wrap up
[dennco/denncoCreator.git] / Source / visualizer / eventhandler / dcvterminalfromaxonmodehandler.cpp
index f084e56..c5f5614 100644 (file)
@@ -19,7 +19,6 @@
 #include "dcvterminalfromaxonmodehandler.h"
 
 #include "dcglvisualizerwidget.h"
-#include "dcvcomponent.h"
 #include "dcvcpage.h"
 #include "dcscene.h"
 #include "dccreator.h"
@@ -31,7 +30,7 @@
 
 
 DCVTerminalFromAxonModeHandler::DCVTerminalFromAxonModeHandler(DCUIGraphicsScene *widget, DCCreator *creator, DCScene *scene, DCAxon *editAxon, DCVCEditModeCursor *cursor) :
-    DCVEventHandler(widget, creator, scene), d_draggedObject(NULL), d_inResigingDrag(false), d_editAxon(editAxon), d_cursor(cursor)
+    DCVEventHandler(widget, creator, scene), d_inResigingDrag(false), d_editAxon(editAxon), d_cursor(cursor)
 {
     switch(getScene()->getEditMode())
     {
@@ -69,6 +68,8 @@ void DCVTerminalFromAxonModeHandler::mousePressEvent(QGraphicsSceneMouseEvent *e
 
     QPointF mousePos = event->scenePos();
 
+    d_draggedObject.assign(NULL);
+
     DCVComponent *obj = getView()->getObjectAt(mousePos.x(), mousePos.y(), d_cursor);
     if (!obj)
         return;
@@ -78,7 +79,7 @@ void DCVTerminalFromAxonModeHandler::mousePressEvent(QGraphicsSceneMouseEvent *e
         return;
 
     if (obj !=  getScene()->getTerminalEditCursor() && obj != page)
-            return;
+        return;
 
     switch(getScene()->getPersMode())
     {
@@ -95,14 +96,14 @@ void DCVTerminalFromAxonModeHandler::mousePressEvent(QGraphicsSceneMouseEvent *e
                     {
                         getScene()->updateVisiblity();
                         getView()->requestRedraw(true);
-                        d_draggedObject = obj;
+                        d_draggedObject.assign(obj);
                         d_inResigingDrag = false;
                     }
                 }
             }
             else
             {
-                d_draggedObject = obj;
+                d_draggedObject.assign(obj);
                 d_inResigingDrag = false;
             }
         }
@@ -117,7 +118,7 @@ void DCVTerminalFromAxonModeHandler::mousePressEvent(QGraphicsSceneMouseEvent *e
                 getScene()->updateVisiblity();
                 getView()->requestRedraw(true);
             }
-            d_draggedObject = obj;
+            d_draggedObject.assign(obj);
             d_inResigingDrag = false;
         }
         break;
@@ -128,7 +129,7 @@ void DCVTerminalFromAxonModeHandler::mousePressEvent(QGraphicsSceneMouseEvent *e
 
 void DCVTerminalFromAxonModeHandler::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
 {
-    DCVComponent *obj = d_draggedObject;
+    DCVComponent *obj = d_draggedObject.ref();
 
     if (!obj)
         return;
@@ -142,7 +143,7 @@ void DCVTerminalFromAxonModeHandler::mouseDoubleClickEvent(QGraphicsSceneMouseEv
     case DCScene::DCV_PERSMODE_NAVIGATION:
         {
             getController()->changePersMode(this, DCCreator::DC_PERSMODE_PAGEEDIT);
-            d_draggedObject = NULL;
+            d_draggedObject.assign(NULL);
         }
 
         break;
@@ -152,7 +153,7 @@ void DCVTerminalFromAxonModeHandler::mouseDoubleClickEvent(QGraphicsSceneMouseEv
             if (obj == page)
             {
                 getController()->changePersMode(this, DCCreator::DC_PERSMODE_NAVIGATION);
-                d_draggedObject = NULL;
+                d_draggedObject.assign(NULL);
             }
             else if (obj == d_cursor)
             {
@@ -189,18 +190,18 @@ void DCVTerminalFromAxonModeHandler::mouseMoveEvent(QGraphicsSceneMouseEvent *ev
         float dy = mousePos.y() - mousePrevPos.y();
 
 
-        if (canProcessHeavyTask && d_draggedObject && d_draggedObject != d_draggedObject->getPageBelonging())
+        if (canProcessHeavyTask && d_draggedObject.ref() && d_draggedObject.ref() != d_draggedObject.ref()->getPageBelonging())
         {
-            d_draggedObject->setSelectable(false);
+            d_draggedObject.ref()->setSelectable(false);
             DCVComponent *obj = getView()->getObjectAt(mousePos.x(), mousePos.y());
-            d_draggedObject->setSelectable(true);
+            d_draggedObject.ref()->setSelectable(true);
 
             if (d_cursor->getDropTarget() && d_cursor->getDropTarget() != obj)
             {
                 getController()->unselectCellObject(this, d_cursor->getDropTarget());
                 getController()->selectCellObject(this, d_editAxon->getOwnerCell()->getVComponent());
             }
-            if (obj && obj != obj->getPageBelonging() && obj->getPageBelonging() == d_draggedObject->getPageBelonging())
+            if (obj && obj != obj->getPageBelonging() && obj->getPageBelonging() == d_draggedObject.ref()->getPageBelonging())
             {
                 getController()->selectCellObject(this, obj, true);
                 d_cursor->setDropTarget(obj);
@@ -214,12 +215,12 @@ void DCVTerminalFromAxonModeHandler::mouseMoveEvent(QGraphicsSceneMouseEvent *ev
         switch(getScene()->getPersMode())
         {
         case DCScene::DCV_PERSMODE_NAVIGATION:
-            if (d_draggedObject && d_draggedObject->getPageBelonging() && d_draggedObject != d_draggedObject->getPageBelonging())
+            if (d_draggedObject.ref() && d_draggedObject.ref()->getPageBelonging() && d_draggedObject.ref() != d_draggedObject.ref()->getPageBelonging())
             {
                 float pageX, pageZ;
-                getView()->toObjectCoordinateXZ(mousePos.x(), mousePos.y(), d_draggedObject->getPageBelonging(), &pageX, &pageZ);
+                getView()->toObjectCoordinateXZ(mousePos.x(), mousePos.y(), d_draggedObject.ref()->getPageBelonging(), &pageX, &pageZ);
 
-                if (d_draggedObject->dragging(pageX, 0, pageZ, false))
+                if (d_draggedObject.ref()->dragging(pageX, 0, pageZ, false))
                 {
                     DCGLWidget::singleton()->setCursor(Qt::OpenHandCursor);
                     getView()->requestRedraw(false);
@@ -236,17 +237,17 @@ void DCVTerminalFromAxonModeHandler::mouseMoveEvent(QGraphicsSceneMouseEvent *ev
             break;
 
         case DCScene::DCV_PERSMODE_PAGEEDIT:
-            if (d_draggedObject && d_draggedObject->getPageBelonging())
+            if (d_draggedObject.ref() && d_draggedObject.ref()->getPageBelonging())
             {
-                if (d_draggedObject == d_draggedObject->getPageBelonging())
+                if (d_draggedObject.ref() == d_draggedObject.ref()->getPageBelonging())
                 {
                     getController()->translateEditModeScene(this, dx, dy);
                 }
                 else
                 {
                     float pageX, pageZ;
-                    getView()->toObjectCoordinateXZ(mousePos.x(), mousePos.y(), d_draggedObject->getPageBelonging(), &pageX, &pageZ);
-                    if (d_draggedObject->dragging(pageX, 0, pageZ, false))
+                    getView()->toObjectCoordinateXZ(mousePos.x(), mousePos.y(), d_draggedObject.ref()->getPageBelonging(), &pageX, &pageZ);
+                    if (d_draggedObject.ref()->dragging(pageX, 0, pageZ, false))
                     {
                         DCGLWidget::singleton()->setCursor(Qt::OpenHandCursor);
                         getView()->requestRedraw(false);
@@ -265,11 +266,11 @@ void DCVTerminalFromAxonModeHandler::mouseReleaseEvent(QGraphicsSceneMouseEvent
     bool shift = event->modifiers() & Qt::ShiftModifier;
     QPointF mousePos = event->scenePos();
 
-    if (d_draggedObject && d_draggedObject->getPageBelonging())
+    if (d_draggedObject.ref() && d_draggedObject.ref()->getPageBelonging())
     {
         float pageX, pageZ;
-        getView()->toObjectCoordinateXZ(mousePos.x(), mousePos.y(), d_draggedObject->getPageBelonging(), &pageX, &pageZ);
-        d_draggedObject->endDrag(pageX, 0, pageZ, d_inResigingDrag);
+        getView()->toObjectCoordinateXZ(mousePos.x(), mousePos.y(), d_draggedObject.ref()->getPageBelonging(), &pageX, &pageZ);
+        d_draggedObject.ref()->endDrag(pageX, 0, pageZ, d_inResigingDrag);
     }
 
     switch(getScene()->getPersMode())
@@ -277,9 +278,9 @@ void DCVTerminalFromAxonModeHandler::mouseReleaseEvent(QGraphicsSceneMouseEvent
     case DCScene::DCV_PERSMODE_NAVIGATION:
     {
         DCVCPage *page = NULL;
-        if (d_draggedObject)
+        if (d_draggedObject.ref())
         {
-            page = d_draggedObject->getPageBelonging();
+            page = d_draggedObject.ref()->getPageBelonging();
         }
 
         if (wasDrag)
@@ -332,11 +333,32 @@ void DCVTerminalFromAxonModeHandler::wheelEvent(QGraphicsSceneWheelEvent  *event
 
 void DCVTerminalFromAxonModeHandler::keyPressEvent(QKeyEvent *event)
 {
+    (void)event;
 
 }
 
 void DCVTerminalFromAxonModeHandler::keyReleaseEvent(QKeyEvent *event)
 {
+    (void)event;
 
 }
 
+void DCVTerminalFromAxonModeHandler::showContextMenu(const QPoint &pos)
+{
+    (void)pos;
+
+}
+
+void DCVTerminalFromAxonModeHandler::selectedPageChanged(const void *requester)
+{
+    if (requester == this)
+        return;
+
+    QList<DCVCPage*> pages = getScene()->getSelectedPages();
+    if (pages.length() == 0)
+        return;
+
+    if (d_cursor->getPageBelonging() != pages.at(0))
+        d_cursor->changePageBelonging(pages.at(0));
+
+}