bool TransformTool::onMouseMove(int x, int y)
{
   if (!mActive)
      return false;

   mMousePosition.set(x, y);
   if (!mGizmo.onMouseMove(x, y))
   {
      if (mMouseDown)
      {
         Point2I delta = mMousePosition - mMouseDownPosition;
         F32 dist = delta.len();
         if (dist > 5.0f)
            mBoxSelection = true;
      }
   }
   return false;
}
bool TransformTool::onMouseLeftUp(int x, int y)
{
   if (!mActive)
      return false;

   if (!mGizmo.onMouseLeftUp(x, y))
   {
      Point2I delta = mMousePosition - mMouseDownPosition;
      F32 dist = delta.len();

      if (mBoxSelection && mMousePosition.x != mMouseDownPosition.x && mMousePosition.y != mMouseDownPosition.y)
      {
         //mDebugBoxSelection = true;

         Torque::Rendering.screenToWorld(Point2I(mMouseDownPosition.x, mMouseDownPosition.y), mBoxNearPoint, mBoxFarPoint[0]);
         Torque::Rendering.screenToWorld(Point2I(mMousePosition.x, mMouseDownPosition.y), mBoxNearPoint, mBoxFarPoint[1]);
         Torque::Rendering.screenToWorld(Point2I(mMouseDownPosition.x, mMousePosition.y), mBoxNearPoint, mBoxFarPoint[2]);
         Torque::Rendering.screenToWorld(Point2I(mMousePosition.x, mMousePosition.y), mBoxNearPoint, mBoxFarPoint[3]);

         PlaneF planes[4];
         planes[0].set(mBoxNearPoint, mBoxFarPoint[2], mBoxFarPoint[0]);
         planes[1].set(mBoxNearPoint, mBoxFarPoint[1], mBoxFarPoint[3]);
         planes[2].set(mBoxNearPoint, mBoxFarPoint[0], mBoxFarPoint[1]);
         planes[3].set(mBoxNearPoint, mBoxFarPoint[3], mBoxFarPoint[2]);
         PlaneSetF planeSet(planes, 4);

         Vector<Scene::SceneObject*> objects = Torque::Scene.boxSearch(planeSet);
         if (objects.size() > 0)
         {
            wxTorqueObjectEvent evt(0, wxTORQUE_SELECT_OBJECT);

            for (S32 n = 0; n < objects.size(); ++n)
               evt.AddObject(objects[n]);

            if (mShiftDown)
            {
               if (mSelectedObject != NULL)
                  evt.AddObject(mSelectedObject);

               for (S32 n = 0; n < mSelectedObjects.size(); ++n)
                  evt.AddObject(mSelectedObjects[n]);

               if (mSelectedComponent != NULL)
                  evt.AddObject(mSelectedComponent);
            }

            // Broadcast the selections.
            mEditorManager->postEvent(evt);
         }
      }
      else 
      {
         Torque::Rendering.screenToWorld(Point2I(x, y), mLastRayStart, mLastRayEnd);
         Point3F editorPos = mEditorManager->mEditorCamera.getWorldPosition();

         //mDebugWorldRay = true;

         Scene::SceneObject* hit = Torque::Scene.raycast(mLastRayStart, mLastRayEnd);
         if (mSelectedObject != hit)
         {
            if (hit)
            {
               wxTorqueObjectEvent evt(0, wxTORQUE_SELECT_OBJECT);
               evt.AddObject(hit);

               if (mShiftDown)
               {
                  if ( mSelectedObject != NULL )
                     evt.AddObject(mSelectedObject);

                  for (S32 n = 0; n < mSelectedObjects.size(); ++n)
                     evt.AddObject(mSelectedObjects[n]);

                  if (mSelectedComponent != NULL)
                     evt.AddObject(mSelectedComponent);
               }

               // Broadcast the hit.
               mEditorManager->postEvent(evt);
            }
         }
      }
   }

   mMouseDown     = false;
   mBoxSelection  = false;

   return false;
}