forked from teamnwah/openmw-tes3coop
added framework for drag operations
This commit is contained in:
parent
8e87b48866
commit
0a5bfb2107
4 changed files with 116 additions and 11 deletions
|
@ -38,3 +38,24 @@ void CSVRender::EditMode::primaryEditPressed (osg::ref_ptr<TagBase> tag) {}
|
||||||
void CSVRender::EditMode::secondaryEditPressed (osg::ref_ptr<TagBase> tag) {}
|
void CSVRender::EditMode::secondaryEditPressed (osg::ref_ptr<TagBase> tag) {}
|
||||||
|
|
||||||
void CSVRender::EditMode::selectPressed (osg::ref_ptr<TagBase> tag) {}
|
void CSVRender::EditMode::selectPressed (osg::ref_ptr<TagBase> tag) {}
|
||||||
|
|
||||||
|
bool CSVRender::EditMode::primaryEditStartDrag (osg::ref_ptr<TagBase> tag)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CSVRender::EditMode::secondaryEditStartDrag (osg::ref_ptr<TagBase> tag)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CSVRender::EditMode::selectStartDrag (osg::ref_ptr<TagBase> tag)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSVRender::EditMode::drag (int diffX, int diffY) {}
|
||||||
|
|
||||||
|
void CSVRender::EditMode::dragCompleted() {}
|
||||||
|
|
||||||
|
void CSVRender::EditMode::dragAborted() {}
|
||||||
|
|
|
@ -44,6 +44,33 @@ namespace CSVRender
|
||||||
|
|
||||||
/// Default-implementation: Ignored.
|
/// Default-implementation: Ignored.
|
||||||
virtual void selectPressed (osg::ref_ptr<TagBase> tag);
|
virtual void selectPressed (osg::ref_ptr<TagBase> tag);
|
||||||
|
|
||||||
|
/// Default-implementation: ignore and return false
|
||||||
|
///
|
||||||
|
/// \return Drag accepted?
|
||||||
|
virtual bool primaryEditStartDrag (osg::ref_ptr<TagBase> tag);
|
||||||
|
|
||||||
|
/// Default-implementation: ignore and return false
|
||||||
|
///
|
||||||
|
/// \return Drag accepted?
|
||||||
|
virtual bool secondaryEditStartDrag (osg::ref_ptr<TagBase> tag);
|
||||||
|
|
||||||
|
/// Default-implementation: ignore and return false
|
||||||
|
///
|
||||||
|
/// \return Drag accepted?
|
||||||
|
virtual bool selectStartDrag (osg::ref_ptr<TagBase> tag);
|
||||||
|
|
||||||
|
/// Default-implementation: ignored
|
||||||
|
virtual void drag (int diffX, int diffY);
|
||||||
|
|
||||||
|
/// Default-implementation: ignored
|
||||||
|
virtual void dragCompleted();
|
||||||
|
|
||||||
|
/// Default-implementation: ignored
|
||||||
|
///
|
||||||
|
/// \note dragAborted will not be called, if the drag is aborted via changing
|
||||||
|
/// editing mode
|
||||||
|
virtual void dragAborted();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ namespace
|
||||||
|
|
||||||
CSVRender::WorldspaceWidget::WorldspaceWidget (CSMDoc::Document& document, QWidget* parent)
|
CSVRender::WorldspaceWidget::WorldspaceWidget (CSMDoc::Document& document, QWidget* parent)
|
||||||
: SceneWidget (document.getData().getResourceSystem(), parent), mSceneElements(0), mRun(0), mDocument(document),
|
: SceneWidget (document.getData().getResourceSystem(), parent), mSceneElements(0), mRun(0), mDocument(document),
|
||||||
mInteractionMask (0), mEditMode (0), mLocked (false)
|
mInteractionMask (0), mEditMode (0), mLocked (false), mDragging (false)
|
||||||
{
|
{
|
||||||
setAcceptDrops(true);
|
setAcceptDrops(true);
|
||||||
|
|
||||||
|
@ -480,6 +480,7 @@ void CSVRender::WorldspaceWidget::debugProfileAboutToBeRemoved (const QModelInde
|
||||||
void CSVRender::WorldspaceWidget::editModeChanged (const std::string& id)
|
void CSVRender::WorldspaceWidget::editModeChanged (const std::string& id)
|
||||||
{
|
{
|
||||||
dynamic_cast<CSVRender::EditMode&> (*mEditMode->getCurrent()).setEditLock (mLocked);
|
dynamic_cast<CSVRender::EditMode&> (*mEditMode->getCurrent()).setEditLock (mLocked);
|
||||||
|
mDragging = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVRender::WorldspaceWidget::elementSelectionChanged()
|
void CSVRender::WorldspaceWidget::elementSelectionChanged()
|
||||||
|
@ -495,10 +496,45 @@ void CSVRender::WorldspaceWidget::updateOverlay()
|
||||||
|
|
||||||
void CSVRender::WorldspaceWidget::mouseMoveEvent (QMouseEvent *event)
|
void CSVRender::WorldspaceWidget::mouseMoveEvent (QMouseEvent *event)
|
||||||
{
|
{
|
||||||
if(event->buttons() & Qt::RightButton)
|
if (!mDragging)
|
||||||
{
|
{
|
||||||
//mMouse->mouseMoveEvent(event);
|
if (mDragMode=="p-navi" || mDragMode=="s-navi")
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (mDragMode=="p-edit" || mDragMode=="s-edit" || mDragMode=="select")
|
||||||
|
{
|
||||||
|
osg::ref_ptr<TagBase> tag = mousePick (event);
|
||||||
|
|
||||||
|
EditMode& editMode = dynamic_cast<CSVRender::EditMode&> (*mEditMode->getCurrent());
|
||||||
|
|
||||||
|
if (mDragMode=="p-edit")
|
||||||
|
mDragging = editMode.primaryEditStartDrag (tag);
|
||||||
|
else if (mDragMode=="s-edit")
|
||||||
|
mDragging = editMode.secondaryEditStartDrag (tag);
|
||||||
|
else if (mDragMode=="select")
|
||||||
|
mDragging = editMode.selectStartDrag (tag);
|
||||||
|
|
||||||
|
if (mDragging)
|
||||||
|
{
|
||||||
|
mDragX = event->posF().x();
|
||||||
|
mDragY = height() - event->posF().y();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int diffX = event->x() - mDragX;
|
||||||
|
int diffY = (height() - event->y()) - mDragY;
|
||||||
|
|
||||||
|
mDragX = event->x();
|
||||||
|
mDragY = height() - event->y();
|
||||||
|
|
||||||
|
EditMode& editMode = dynamic_cast<CSVRender::EditMode&> (*mEditMode->getCurrent());
|
||||||
|
|
||||||
|
editMode.drag (diffX, diffY);
|
||||||
|
}
|
||||||
|
|
||||||
RenderWidget::mouseMoveEvent(event);
|
RenderWidget::mouseMoveEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -506,6 +542,9 @@ void CSVRender::WorldspaceWidget::mousePressEvent (QMouseEvent *event)
|
||||||
{
|
{
|
||||||
std::string button = mapButton (event);
|
std::string button = mapButton (event);
|
||||||
|
|
||||||
|
if (!mDragging)
|
||||||
|
mDragMode = button;
|
||||||
|
|
||||||
if (button=="p-navi" || button=="s-navi")
|
if (button=="p-navi" || button=="s-navi")
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -527,17 +566,25 @@ void CSVRender::WorldspaceWidget::mousePressEvent (QMouseEvent *event)
|
||||||
|
|
||||||
void CSVRender::WorldspaceWidget::mouseReleaseEvent (QMouseEvent *event)
|
void CSVRender::WorldspaceWidget::mouseReleaseEvent (QMouseEvent *event)
|
||||||
{
|
{
|
||||||
if(event->button() == Qt::RightButton)
|
if (mDragging)
|
||||||
{
|
{
|
||||||
/*
|
std::string button = mapButton (event);
|
||||||
if(!getViewport())
|
|
||||||
|
if (mDragMode=="p-navi" || mDragMode=="s-navi")
|
||||||
{
|
{
|
||||||
SceneWidget::mouseReleaseEvent(event);
|
|
||||||
return;
|
}
|
||||||
|
else if (mDragMode=="p-edit" || mDragMode=="s-edit" || mDragMode=="select")
|
||||||
|
{
|
||||||
|
EditMode& editMode = dynamic_cast<CSVRender::EditMode&> (*mEditMode->getCurrent());
|
||||||
|
|
||||||
|
editMode.dragCompleted();
|
||||||
|
mDragging = false;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
//mMouse->mouseReleaseEvent(event);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mDragMode.clear();
|
||||||
|
|
||||||
RenderWidget::mouseReleaseEvent(event);
|
RenderWidget::mouseReleaseEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -560,7 +607,13 @@ void CSVRender::WorldspaceWidget::keyPressEvent (QKeyEvent *event)
|
||||||
{
|
{
|
||||||
if(event->key() == Qt::Key_Escape)
|
if(event->key() == Qt::Key_Escape)
|
||||||
{
|
{
|
||||||
//mMouse->cancelDrag();
|
if (mDragging)
|
||||||
|
{
|
||||||
|
EditMode& editMode = dynamic_cast<CSVRender::EditMode&> (*mEditMode->getCurrent());
|
||||||
|
|
||||||
|
editMode.dragAborted();
|
||||||
|
mDragging = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
RenderWidget::keyPressEvent(event);
|
RenderWidget::keyPressEvent(event);
|
||||||
|
|
|
@ -39,6 +39,10 @@ namespace CSVRender
|
||||||
std::map<std::pair<Qt::MouseButton, bool>, std::string> mButtonMapping;
|
std::map<std::pair<Qt::MouseButton, bool>, std::string> mButtonMapping;
|
||||||
CSVWidget::SceneToolMode *mEditMode;
|
CSVWidget::SceneToolMode *mEditMode;
|
||||||
bool mLocked;
|
bool mLocked;
|
||||||
|
std::string mDragMode;
|
||||||
|
bool mDragging;
|
||||||
|
int mDragX;
|
||||||
|
int mDragY;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue