|
@@ -227,96 +227,107 @@ namespace BansheeEngine
|
|
|
|
|
|
|
|
if (!onFoldout && !onEditElement)
|
|
if (!onFoldout && !onEditElement)
|
|
|
{
|
|
{
|
|
|
- if (event.isCtrlDown())
|
|
|
|
|
|
|
+ if (event.getButton() == GUIMouseButton::Left)
|
|
|
{
|
|
{
|
|
|
- selectElement(treeElement);
|
|
|
|
|
- }
|
|
|
|
|
- else if (event.isShiftDown())
|
|
|
|
|
- {
|
|
|
|
|
- if (isSelectionActive())
|
|
|
|
|
|
|
+ if (event.isCtrlDown())
|
|
|
{
|
|
{
|
|
|
- TreeElement* selectionRoot = mSelectedElements[0].element;
|
|
|
|
|
- unselectAll();
|
|
|
|
|
-
|
|
|
|
|
- auto iterStartFind = std::find_if(mVisibleElements.begin(), mVisibleElements.end(),
|
|
|
|
|
- [&](const InteractableElement& x) { return x.parent == selectionRoot->mParent; });
|
|
|
|
|
-
|
|
|
|
|
- bool foundStart = false;
|
|
|
|
|
- bool foundEnd = false;
|
|
|
|
|
- for (; iterStartFind != mVisibleElements.end(); ++iterStartFind)
|
|
|
|
|
|
|
+ selectElement(treeElement);
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (event.isShiftDown())
|
|
|
|
|
+ {
|
|
|
|
|
+ if (isSelectionActive())
|
|
|
{
|
|
{
|
|
|
- if (!iterStartFind->isTreeElement())
|
|
|
|
|
- continue;
|
|
|
|
|
|
|
+ TreeElement* selectionRoot = mSelectedElements[0].element;
|
|
|
|
|
+ unselectAll();
|
|
|
|
|
+
|
|
|
|
|
+ auto iterStartFind = std::find_if(mVisibleElements.begin(), mVisibleElements.end(),
|
|
|
|
|
+ [&](const InteractableElement& x) { return x.parent == selectionRoot->mParent; });
|
|
|
|
|
|
|
|
- TreeElement* curElem = iterStartFind->getTreeElement();
|
|
|
|
|
- if (curElem == selectionRoot)
|
|
|
|
|
|
|
+ bool foundStart = false;
|
|
|
|
|
+ bool foundEnd = false;
|
|
|
|
|
+ for (; iterStartFind != mVisibleElements.end(); ++iterStartFind)
|
|
|
{
|
|
{
|
|
|
- foundStart = true;
|
|
|
|
|
- break;
|
|
|
|
|
|
|
+ if (!iterStartFind->isTreeElement())
|
|
|
|
|
+ continue;
|
|
|
|
|
+
|
|
|
|
|
+ TreeElement* curElem = iterStartFind->getTreeElement();
|
|
|
|
|
+ if (curElem == selectionRoot)
|
|
|
|
|
+ {
|
|
|
|
|
+ foundStart = true;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- auto iterEndFind = std::find_if(mVisibleElements.begin(), mVisibleElements.end(),
|
|
|
|
|
- [&](const InteractableElement& x) { return &x == element; });
|
|
|
|
|
|
|
+ auto iterEndFind = std::find_if(mVisibleElements.begin(), mVisibleElements.end(),
|
|
|
|
|
+ [&](const InteractableElement& x) { return &x == element; });
|
|
|
|
|
|
|
|
- if (iterEndFind != mVisibleElements.end())
|
|
|
|
|
- foundEnd = true;
|
|
|
|
|
|
|
+ if (iterEndFind != mVisibleElements.end())
|
|
|
|
|
+ foundEnd = true;
|
|
|
|
|
|
|
|
- if (foundStart && foundEnd)
|
|
|
|
|
- {
|
|
|
|
|
- if (iterStartFind < iterEndFind)
|
|
|
|
|
|
|
+ if (foundStart && foundEnd)
|
|
|
{
|
|
{
|
|
|
- for (; iterStartFind != (iterEndFind + 1); ++iterStartFind)
|
|
|
|
|
|
|
+ if (iterStartFind < iterEndFind)
|
|
|
{
|
|
{
|
|
|
- if (iterStartFind->isTreeElement())
|
|
|
|
|
- selectElement(iterStartFind->getTreeElement());
|
|
|
|
|
|
|
+ for (; iterStartFind != (iterEndFind + 1); ++iterStartFind)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (iterStartFind->isTreeElement())
|
|
|
|
|
+ selectElement(iterStartFind->getTreeElement());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- else if (iterEndFind < iterStartFind)
|
|
|
|
|
- {
|
|
|
|
|
- for (; iterEndFind != (iterStartFind + 1); ++iterEndFind)
|
|
|
|
|
|
|
+ else if (iterEndFind < iterStartFind)
|
|
|
{
|
|
{
|
|
|
- if (iterEndFind->isTreeElement())
|
|
|
|
|
- selectElement(iterEndFind->getTreeElement());
|
|
|
|
|
|
|
+ for (; iterEndFind != (iterStartFind + 1); ++iterEndFind)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (iterEndFind->isTreeElement())
|
|
|
|
|
+ selectElement(iterEndFind->getTreeElement());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
+ else
|
|
|
|
|
+ selectElement(treeElement);
|
|
|
}
|
|
}
|
|
|
- else
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if (!foundStart || !foundEnd)
|
|
|
selectElement(treeElement);
|
|
selectElement(treeElement);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- if (!foundStart || !foundEnd)
|
|
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
selectElement(treeElement);
|
|
selectElement(treeElement);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- selectElement(treeElement);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- bool doRename = false;
|
|
|
|
|
- if (isSelectionActive())
|
|
|
|
|
- {
|
|
|
|
|
- for (auto& selectedElem : mSelectedElements)
|
|
|
|
|
|
|
+ bool doRename = false;
|
|
|
|
|
+ if (isSelectionActive())
|
|
|
{
|
|
{
|
|
|
- if (selectedElem.element == treeElement)
|
|
|
|
|
|
|
+ for (auto& selectedElem : mSelectedElements)
|
|
|
{
|
|
{
|
|
|
- doRename = true;
|
|
|
|
|
- break;
|
|
|
|
|
|
|
+ if (selectedElem.element == treeElement)
|
|
|
|
|
+ {
|
|
|
|
|
+ doRename = true;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ unselectAll();
|
|
|
|
|
+ selectElement(treeElement);
|
|
|
|
|
+
|
|
|
|
|
+ if (doRename)
|
|
|
|
|
+ renameSelected();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ _markLayoutAsDirty();
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (event.getButton() == GUIMouseButton::Right)
|
|
|
|
|
+ {
|
|
|
unselectAll();
|
|
unselectAll();
|
|
|
selectElement(treeElement);
|
|
selectElement(treeElement);
|
|
|
|
|
+ _markLayoutAsDirty();
|
|
|
|
|
|
|
|
- if (doRename)
|
|
|
|
|
- renameSelected();
|
|
|
|
|
|
|
+ return true;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- _markLayoutAsDirty();
|
|
|
|
|
-
|
|
|
|
|
- return true;
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
@@ -675,11 +686,14 @@ namespace BansheeEngine
|
|
|
Stack<TreeElement*> todo;
|
|
Stack<TreeElement*> todo;
|
|
|
|
|
|
|
|
TreeElement* parent = element->mParent;
|
|
TreeElement* parent = element->mParent;
|
|
|
- while (parent != nullptr && !parent->mIsVisible)
|
|
|
|
|
|
|
+ while (parent != nullptr)
|
|
|
{
|
|
{
|
|
|
if (!parent->mIsExpanded)
|
|
if (!parent->mIsExpanded)
|
|
|
todo.push(parent);
|
|
todo.push(parent);
|
|
|
|
|
|
|
|
|
|
+ if (parent->mIsVisible)
|
|
|
|
|
+ break;
|
|
|
|
|
+
|
|
|
parent = parent->mParent;
|
|
parent = parent->mParent;
|
|
|
}
|
|
}
|
|
|
|
|
|