Add function to cancel drag by pressing ESC. Remove debug code.

loadfix
cc9cii 10 years ago
parent 092080c69c
commit bd6e54dde3

@ -161,30 +161,6 @@ void CSMSettings::UserSettings::buildSettingModelDefaults()
ritd->setDeclaredValues (values); ritd->setDeclaredValues (values);
} }
declareSection ("debug", "Debug Options");
{
Setting *mousePicking = createSetting (Type_CheckBox, "mouse-picking", "Debug Render Mouse-Picking");
mousePicking->setDefaultValue ("false");
mousePicking->setToolTip ("Enable redering debug information for mouse picking. "
"This option may be removed in future once the mouse picking feature is completed.");
QString defaultValue = "Closer/Further";
QStringList values = QStringList() << defaultValue << "Up/Down" << "Left/Right";
Setting *mouseWheel = createSetting (Type_RadioButton, "mouse-wheel",
"For testing mouse movement directions.");
mouseWheel->setDefaultValue (defaultValue);
mouseWheel->setDeclaredValues (values);
defaultValue = "screen";
values = QStringList() << defaultValue << "world";
Setting *mouseCoord = createSetting (Type_RadioButton, "mouse-reference",
"For testing mouse movement frame of reference.");
mouseCoord->setDefaultValue (defaultValue);
mouseCoord->setDeclaredValues (values);
}
declareSection ("table-input", "Table Input"); declareSection ("table-input", "Table Input");
{ {
QString inPlaceEdit ("Edit in Place"); QString inPlaceEdit ("Edit in Place");

@ -61,7 +61,6 @@ namespace CSVRender
, mGrabbedSceneNode(""), mOrigObjPos(Ogre::Vector3()), mOrigMousePos(Ogre::Vector3()) , mGrabbedSceneNode(""), mOrigObjPos(Ogre::Vector3()), mOrigMousePos(Ogre::Vector3())
, mCurrentMousePos(Ogre::Vector3()), mOffset(0.0f) , mCurrentMousePos(Ogre::Vector3()), mOffset(0.0f)
, mColIndexPosX(0), mColIndexPosY(0), mColIndexPosZ(0), mIdTableModel(0) , mColIndexPosX(0), mColIndexPosY(0), mColIndexPosZ(0), mIdTableModel(0)
//, mModel(0)
{ {
const CSMWorld::RefCollection& references = mParent->mDocument.getData().getReferences(); const CSMWorld::RefCollection& references = mParent->mDocument.getData().getReferences();
@ -207,15 +206,6 @@ namespace CSVRender
mCurrentObj = result.first; mCurrentObj = result.first;
} }
// print some debug info
if(isDebug())
{
std::string referenceId = mPhysics->sceneNodeToRefId(result.first);
std::cout << "ReferenceId: " << referenceId << std::endl;
std::cout << " hit pos "+ QString::number(result.second.x).toStdString()
+ ", " + QString::number(result.second.y).toStdString()
+ ", " + QString::number(result.second.z).toStdString() << std::endl;
}
} }
break; break;
} }
@ -265,13 +255,7 @@ namespace CSVRender
std::pair<std::string, Ogre::Vector3> result = terrainUnderCursor(event->x(), event->y()); std::pair<std::string, Ogre::Vector3> result = terrainUnderCursor(event->x(), event->y());
if(result.first != "") if(result.first != "")
{ {
if(isDebug()) // FIXME: terrain editing
{
std::cout << "terrain: " << result.first << std::endl;
std::cout << " hit pos "+ QString::number(result.second.x).toStdString()
+ ", " + QString::number(result.second.y).toStdString()
+ ", " + QString::number(result.second.z).toStdString() << std::endl;
}
} }
break; break;
} }
@ -282,16 +266,7 @@ namespace CSVRender
void MouseState::mouseDoubleClickEvent (QMouseEvent *event) void MouseState::mouseDoubleClickEvent (QMouseEvent *event)
{ {
if(0 && isDebug()) // disable event->ignore();
{
// FIXME: OEngine::PhysicEngine creates only one child scene node for the
// debug drawer. Hence only the first subview that creates the debug drawer
// can view the debug lines. Will need to keep a map in OEngine if multiple
// subviews are to be supported.
mPhysics->addSceneManager(mSceneManager, mParent);
mPhysics->toggleDebugRendering(mSceneManager);
mParent->flagAsModified();
}
} }
bool MouseState::wheelEvent (QWheelEvent *event) bool MouseState::wheelEvent (QWheelEvent *event)
@ -329,37 +304,70 @@ namespace CSVRender
return true; return true;
} }
void MouseState::cancelDrag()
{
switch(mMouseState)
{
case Mouse_Grab:
case Mouse_Drag:
{
// cancel operation & return the object to the original position
mSceneManager->getSceneNode(mGrabbedSceneNode)->setPosition(mOrigObjPos);
// update all SceneWidgets and their SceneManagers
mPhysics->moveSceneNodes(mGrabbedSceneNode, mOrigObjPos);
updateSceneWidgets();
// reset states
mMouseState = Mouse_Default;
mCurrentMousePos = Ogre::Vector3();
mOrigMousePos = Ogre::Vector3();
mOrigObjPos = Ogre::Vector3();
mGrabbedSceneNode = "";
mCurrentObj = "";
mOldPos = QPoint(0, 0);
mMouseEventTimer->invalidate();
mOffset = 0.0f;
break;
}
case Mouse_Edit:
case Mouse_Default:
{
break;
}
/* NO_DEFAULT_CASE */
}
}
//plane Z, upvector Y, mOffset z : x-y plane, wheel up/down //plane Z, upvector Y, mOffset z : x-y plane, wheel up/down
//plane Y, upvector X, mOffset y : y-z plane, wheel left/right //plane Y, upvector X, mOffset y : y-z plane, wheel left/right
//plane X, upvector Y, mOffset x : x-z plane, wheel closer/further //plane X, upvector Y, mOffset x : x-z plane, wheel closer/further
std::pair<Ogre::Vector3, Ogre::Vector3> MouseState::planeAxis() std::pair<Ogre::Vector3, Ogre::Vector3> MouseState::planeAxis()
{ {
// FIXME: explore using signals instread of retrieving each time bool screenCoord = true;
CSMSettings::UserSettings &userSettings = CSMSettings::UserSettings::instance();
QString coord = userSettings.setting("debug/mouse-reference", QString("screen"));
Ogre::Vector3 dir = getCamera()->getDerivedDirection(); Ogre::Vector3 dir = getCamera()->getDerivedDirection();
QString wheelDir = userSettings.setting("debug/mouse-wheel", QString("Closer/Further")); QString wheelDir = "Closer/Further";
if(wheelDir == "Left/Right") if(wheelDir == "Left/Right")
{ {
if(coord == "world") if(screenCoord)
return std::make_pair(Ogre::Vector3::UNIT_Y, Ogre::Vector3::UNIT_Z);
else
return std::make_pair(getCamera()->getDerivedRight(), getCamera()->getDerivedUp()); return std::make_pair(getCamera()->getDerivedRight(), getCamera()->getDerivedUp());
else
return std::make_pair(Ogre::Vector3::UNIT_Y, Ogre::Vector3::UNIT_Z);
} }
else if(wheelDir == "Up/Down") else if(wheelDir == "Up/Down")
{ {
if(coord == "world") if(screenCoord)
return std::make_pair(Ogre::Vector3::UNIT_Z, Ogre::Vector3::UNIT_X);
else
return std::make_pair(getCamera()->getDerivedUp(), Ogre::Vector3(-dir.x, -dir.y, -dir.z)); return std::make_pair(getCamera()->getDerivedUp(), Ogre::Vector3(-dir.x, -dir.y, -dir.z));
else
return std::make_pair(Ogre::Vector3::UNIT_Z, Ogre::Vector3::UNIT_X);
} }
else else
{ {
if(coord == "world") if(screenCoord)
return std::make_pair(Ogre::Vector3::UNIT_X, Ogre::Vector3::UNIT_Y);
else
return std::make_pair(Ogre::Vector3(-dir.x, -dir.y, -dir.z), getCamera()->getDerivedRight()); return std::make_pair(Ogre::Vector3(-dir.x, -dir.y, -dir.z), getCamera()->getDerivedRight());
else
return std::make_pair(Ogre::Vector3::UNIT_X, Ogre::Vector3::UNIT_Y);
} }
} }
@ -450,11 +458,4 @@ namespace CSVRender
{ {
return mParent->getCamera()->getViewport(); return mParent->getCamera()->getViewport();
} }
bool MouseState::isDebug()
{
CSMSettings::UserSettings &userSettings = CSMSettings::UserSettings::instance();
return userSettings.setting("debug/mouse-picking", QString("false")) == "true" ? true : false;
}
} }

@ -72,6 +72,8 @@ namespace CSVRender
void mouseDoubleClickEvent (QMouseEvent *event); void mouseDoubleClickEvent (QMouseEvent *event);
bool wheelEvent (QWheelEvent *event); bool wheelEvent (QWheelEvent *event);
void cancelDrag();
private: private:
std::pair<bool, Ogre::Vector3> mousePositionOnPlane(const QPoint &pos, const Ogre::Plane &plane); std::pair<bool, Ogre::Vector3> mousePositionOnPlane(const QPoint &pos, const Ogre::Plane &plane);
@ -79,7 +81,6 @@ namespace CSVRender
std::pair<std::string, Ogre::Vector3> objectUnderCursor(const int mouseX, const int mouseY); std::pair<std::string, Ogre::Vector3> objectUnderCursor(const int mouseX, const int mouseY);
std::pair<Ogre::Vector3, Ogre::Vector3> planeAxis(); std::pair<Ogre::Vector3, Ogre::Vector3> planeAxis();
void updateSceneWidgets(); void updateSceneWidgets();
bool isDebug();
Ogre::Camera *getCamera(); // friend access Ogre::Camera *getCamera(); // friend access
Ogre::Viewport *getViewport(); // friend access Ogre::Viewport *getViewport(); // friend access

@ -77,13 +77,13 @@ namespace CSVRender
void wheelEvent (QWheelEvent *event); void wheelEvent (QWheelEvent *event);
void keyPressEvent (QKeyEvent *event);
private: private:
void paintEvent(QPaintEvent* e); void paintEvent(QPaintEvent* e);
void resizeEvent(QResizeEvent* e); void resizeEvent(QResizeEvent* e);
bool event(QEvent* e); bool event(QEvent* e);
void keyPressEvent (QKeyEvent *event);
void keyReleaseEvent (QKeyEvent *event); void keyReleaseEvent (QKeyEvent *event);
void focusOutEvent (QFocusEvent *event); void focusOutEvent (QFocusEvent *event);

@ -388,3 +388,13 @@ void CSVRender::WorldspaceWidget::wheelEvent (QWheelEvent *event)
if(!mMouse->wheelEvent(event)) if(!mMouse->wheelEvent(event))
SceneWidget::wheelEvent(event); SceneWidget::wheelEvent(event);
} }
void CSVRender::WorldspaceWidget::keyPressEvent (QKeyEvent *event)
{
if(event->key() == Qt::Key_Escape)
{
mMouse->cancelDrag();
}
else
SceneWidget::keyPressEvent(event);
}

@ -107,6 +107,7 @@ namespace CSVRender
virtual void mouseReleaseEvent (QMouseEvent *event); virtual void mouseReleaseEvent (QMouseEvent *event);
virtual void mouseDoubleClickEvent (QMouseEvent *event); virtual void mouseDoubleClickEvent (QMouseEvent *event);
virtual void wheelEvent (QWheelEvent *event); virtual void wheelEvent (QWheelEvent *event);
virtual void keyPressEvent (QKeyEvent *event);
private: private:

Loading…
Cancel
Save