mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-06-21 05:53:35 +00:00
Added more actions to CSceneViewport context menu
This commit is contained in:
parent
6aa5150787
commit
444382c1a9
@ -151,23 +151,42 @@ void CSceneViewport::CreateContextMenu()
|
|||||||
{
|
{
|
||||||
mpContextMenu = new QMenu(this);
|
mpContextMenu = new QMenu(this);
|
||||||
|
|
||||||
mpHideNodeAction = new QAction("HideNode", this);
|
mpToggleSelectAction = new QAction("ToggleSelect", this);
|
||||||
connect(mpHideNodeAction, SIGNAL(triggered()), this, SLOT(OnHideNode()));
|
connect(mpToggleSelectAction, SIGNAL(triggered()), this, SLOT(OnToggleSelect()));
|
||||||
|
|
||||||
mpHideTypeAction = new QAction("HideType", this);
|
mpHideSelectionSeparator = new QAction(this);
|
||||||
connect(mpHideTypeAction, SIGNAL(triggered()), this, SLOT(OnHideType()));
|
mpHideSelectionSeparator->setSeparator(true);
|
||||||
|
|
||||||
mpHideLayerAction = new QAction("HideLayer", this);
|
mpHideSelectionAction = new QAction("Hide selection", this);
|
||||||
connect(mpHideLayerAction, SIGNAL(triggered()), this, SLOT(OnHideLayer()));
|
connect(mpHideSelectionAction, SIGNAL(triggered()), this, SLOT(OnHideSelection()));
|
||||||
|
|
||||||
mpHideUnhideSeparator = new QAction(this);
|
mpHideUnselectedAction = new QAction("Hide unselected", this);
|
||||||
mpHideUnhideSeparator->setSeparator(true);
|
connect(mpHideUnselectedAction, SIGNAL(triggered()), this, SLOT(OnHideUnselected()));
|
||||||
|
|
||||||
|
mpHideHoverSeparator = new QAction(this);
|
||||||
|
mpHideHoverSeparator->setSeparator(this);
|
||||||
|
|
||||||
|
mpHideHoverNodeAction = new QAction("HideNode", this);
|
||||||
|
connect(mpHideHoverNodeAction, SIGNAL(triggered()), this, SLOT(OnHideNode()));
|
||||||
|
|
||||||
|
mpHideHoverTypeAction = new QAction("HideType", this);
|
||||||
|
connect(mpHideHoverTypeAction, SIGNAL(triggered()), this, SLOT(OnHideType()));
|
||||||
|
|
||||||
|
mpHideHoverLayerAction = new QAction("HideLayer", this);
|
||||||
|
connect(mpHideHoverLayerAction, SIGNAL(triggered()), this, SLOT(OnHideLayer()));
|
||||||
|
|
||||||
|
mpUnhideSeparator = new QAction(this);
|
||||||
|
mpUnhideSeparator->setSeparator(true);
|
||||||
|
|
||||||
mpUnhideAllAction = new QAction("Unhide all", this);
|
mpUnhideAllAction = new QAction("Unhide all", this);
|
||||||
connect(mpUnhideAllAction, SIGNAL(triggered()), this, SLOT(OnUnhideAll()));
|
connect(mpUnhideAllAction, SIGNAL(triggered()), this, SLOT(OnUnhideAll()));
|
||||||
|
|
||||||
QList<QAction*> Actions;
|
QList<QAction*> Actions;
|
||||||
Actions << mpHideNodeAction << mpHideTypeAction << mpHideLayerAction << mpHideUnhideSeparator << mpUnhideAllAction;
|
Actions << mpToggleSelectAction
|
||||||
|
<< mpHideSelectionSeparator << mpHideSelectionAction << mpHideUnselectedAction
|
||||||
|
<< mpHideHoverSeparator << mpHideHoverNodeAction << mpHideHoverTypeAction << mpHideHoverLayerAction
|
||||||
|
<< mpUnhideSeparator << mpUnhideAllAction;
|
||||||
|
|
||||||
mpContextMenu->addActions(Actions);
|
mpContextMenu->addActions(Actions);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,24 +252,41 @@ void CSceneViewport::ContextMenu(QContextMenuEvent* pEvent)
|
|||||||
// Set up actions
|
// Set up actions
|
||||||
TString NodeName;
|
TString NodeName;
|
||||||
bool HasHoverNode = (mpHoverNode && mpHoverNode->NodeType() != eStaticNode);
|
bool HasHoverNode = (mpHoverNode && mpHoverNode->NodeType() != eStaticNode);
|
||||||
|
bool HasSelection = mpEditor->HasSelection();
|
||||||
bool IsScriptNode = (mpHoverNode && mpHoverNode->NodeType() == eScriptNode);
|
bool IsScriptNode = (mpHoverNode && mpHoverNode->NodeType() == eScriptNode);
|
||||||
|
|
||||||
mpHideNodeAction->setVisible(HasHoverNode);
|
mpToggleSelectAction->setVisible(HasHoverNode);
|
||||||
mpHideTypeAction->setVisible(IsScriptNode);
|
mpHideSelectionSeparator->setVisible(HasHoverNode);
|
||||||
mpHideLayerAction->setVisible(IsScriptNode);
|
mpHideSelectionAction->setVisible(HasSelection);
|
||||||
mpHideUnhideSeparator->setVisible(HasHoverNode);
|
mpHideUnselectedAction->setVisible(HasSelection);
|
||||||
|
mpHideHoverSeparator->setVisible(HasSelection);
|
||||||
|
mpHideHoverNodeAction->setVisible(HasHoverNode);
|
||||||
|
mpHideHoverTypeAction->setVisible(IsScriptNode);
|
||||||
|
mpHideHoverLayerAction->setVisible(IsScriptNode);
|
||||||
|
mpUnhideSeparator->setVisible(HasHoverNode);
|
||||||
|
|
||||||
|
if (HasHoverNode)
|
||||||
|
{
|
||||||
|
TString Name = IsScriptNode ? static_cast<CScriptNode*>(mpHoverNode)->Object()->InstanceName() : mpHoverNode->Name();
|
||||||
|
|
||||||
|
if (mpHoverNode->IsSelected())
|
||||||
|
mpToggleSelectAction->setText(QString("Deselect %1").arg(TO_QSTRING(Name)));
|
||||||
|
else
|
||||||
|
mpToggleSelectAction->setText(QString("Select %1").arg(TO_QSTRING(Name)));
|
||||||
|
}
|
||||||
|
|
||||||
if (IsScriptNode)
|
if (IsScriptNode)
|
||||||
{
|
{
|
||||||
CScriptNode *pScript = static_cast<CScriptNode*>(mpHoverNode);
|
CScriptNode *pScript = static_cast<CScriptNode*>(mpHoverNode);
|
||||||
NodeName = pScript->Object()->InstanceName();
|
NodeName = pScript->Object()->InstanceName();
|
||||||
mpHideTypeAction->setText( QString("Hide all %1 objects").arg(TO_QSTRING(pScript->Template()->TemplateName())) );
|
mpHideHoverTypeAction->setText( QString("Hide all %1 objects").arg(TO_QSTRING(pScript->Template()->TemplateName())) );
|
||||||
mpHideLayerAction->setText( QString("Hide layer %1").arg(TO_QSTRING(pScript->Object()->Layer()->Name())) );
|
mpHideHoverLayerAction->setText( QString("Hide layer %1").arg(TO_QSTRING(pScript->Object()->Layer()->Name())) );
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (HasHoverNode)
|
else if (HasHoverNode)
|
||||||
NodeName = mpHoverNode->Name();
|
NodeName = mpHoverNode->Name();
|
||||||
|
|
||||||
mpHideNodeAction->setText(QString("Hide %1").arg(TO_QSTRING(NodeName)));
|
mpHideHoverNodeAction->setText(QString("Hide %1").arg(TO_QSTRING(NodeName)));
|
||||||
|
|
||||||
// Show menu
|
// Show menu
|
||||||
mpMenuNode = mpHoverNode;
|
mpMenuNode = mpHoverNode;
|
||||||
@ -328,6 +364,30 @@ void CSceneViewport::OnMouseRelease(QMouseEvent *pEvent)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ************ MENU ACTIONS ************
|
||||||
|
void CSceneViewport::OnToggleSelect()
|
||||||
|
{
|
||||||
|
if (mpMenuNode->IsSelected())
|
||||||
|
mpEditor->DeselectNode(mpMenuNode);
|
||||||
|
else
|
||||||
|
mpEditor->SelectNode(mpMenuNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSceneViewport::OnHideSelection()
|
||||||
|
{
|
||||||
|
const QList<CSceneNode*>& rkSelection = mpEditor->GetSelection();
|
||||||
|
|
||||||
|
foreach (CSceneNode *pNode, rkSelection)
|
||||||
|
pNode->SetVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSceneViewport::OnHideUnselected()
|
||||||
|
{
|
||||||
|
for (CSceneIterator It(mpScene, eScriptNode | eLightNode); !It.DoneIterating(); ++It)
|
||||||
|
if (!It->IsSelected())
|
||||||
|
It->SetVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
void CSceneViewport::OnHideNode()
|
void CSceneViewport::OnHideNode()
|
||||||
{
|
{
|
||||||
mpMenuNode->SetVisible(false);
|
mpMenuNode->SetVisible(false);
|
||||||
|
@ -20,10 +20,15 @@ class CSceneViewport : public CBasicViewport
|
|||||||
|
|
||||||
// Context Menu
|
// Context Menu
|
||||||
QMenu *mpContextMenu;
|
QMenu *mpContextMenu;
|
||||||
QAction *mpHideNodeAction;
|
QAction *mpToggleSelectAction;
|
||||||
QAction *mpHideTypeAction;
|
QAction *mpHideSelectionSeparator;
|
||||||
QAction *mpHideLayerAction;
|
QAction *mpHideSelectionAction;
|
||||||
QAction *mpHideUnhideSeparator;
|
QAction *mpHideUnselectedAction;
|
||||||
|
QAction *mpHideHoverSeparator;
|
||||||
|
QAction *mpHideHoverNodeAction;
|
||||||
|
QAction *mpHideHoverTypeAction;
|
||||||
|
QAction *mpHideHoverLayerAction;
|
||||||
|
QAction *mpUnhideSeparator;
|
||||||
QAction *mpUnhideAllAction;
|
QAction *mpUnhideAllAction;
|
||||||
CSceneNode *mpMenuNode;
|
CSceneNode *mpMenuNode;
|
||||||
|
|
||||||
@ -59,6 +64,10 @@ protected slots:
|
|||||||
void OnMouseClick(QMouseEvent *pEvent);
|
void OnMouseClick(QMouseEvent *pEvent);
|
||||||
void OnMouseRelease(QMouseEvent *pEvent);
|
void OnMouseRelease(QMouseEvent *pEvent);
|
||||||
|
|
||||||
|
// Menu Actions
|
||||||
|
void OnToggleSelect();
|
||||||
|
void OnHideSelection();
|
||||||
|
void OnHideUnselected();
|
||||||
void OnHideNode();
|
void OnHideNode();
|
||||||
void OnHideType();
|
void OnHideType();
|
||||||
void OnHideLayer();
|
void OnHideLayer();
|
||||||
|
@ -196,6 +196,16 @@ void INodeEditor::SetSelectionLocked(bool Locked)
|
|||||||
mSelectionLocked = Locked;
|
mSelectionLocked = Locked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool INodeEditor::HasSelection() const
|
||||||
|
{
|
||||||
|
return (!mSelection.isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
const QList<CSceneNode*>& INodeEditor::GetSelection() const
|
||||||
|
{
|
||||||
|
return mSelection;
|
||||||
|
}
|
||||||
|
|
||||||
// ************ PUBLIC SLOTS ************
|
// ************ PUBLIC SLOTS ************
|
||||||
void INodeEditor::OnGizmoMoved()
|
void INodeEditor::OnGizmoMoved()
|
||||||
{
|
{
|
||||||
|
@ -49,8 +49,8 @@ public:
|
|||||||
bool IsGizmoVisible();
|
bool IsGizmoVisible();
|
||||||
void BeginGizmoTransform();
|
void BeginGizmoTransform();
|
||||||
void EndGizmoTransform();
|
void EndGizmoTransform();
|
||||||
|
|
||||||
ETransformSpace CurrentTransformSpace();
|
ETransformSpace CurrentTransformSpace();
|
||||||
|
|
||||||
void RecalculateSelectionBounds();
|
void RecalculateSelectionBounds();
|
||||||
void ExpandSelectionBounds(CSceneNode *pNode);
|
void ExpandSelectionBounds(CSceneNode *pNode);
|
||||||
void SelectNode(CSceneNode *pNode);
|
void SelectNode(CSceneNode *pNode);
|
||||||
@ -60,6 +60,8 @@ public:
|
|||||||
void SelectAll(FNodeFlags NodeFlags);
|
void SelectAll(FNodeFlags NodeFlags);
|
||||||
void InvertSelection(FNodeFlags NodeFlags);
|
void InvertSelection(FNodeFlags NodeFlags);
|
||||||
void SetSelectionLocked(bool Locked);
|
void SetSelectionLocked(bool Locked);
|
||||||
|
bool HasSelection() const;
|
||||||
|
const QList<CSceneNode*>& GetSelection() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void SelectionModified();
|
void SelectionModified();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user