forked from Mirrors/openclonk
Qt Editor: Add option to auto-select objects created by an EditorAction
To be used by the dialogue so you can press a button on the clonk to add and immediately configure a dialogue.qteditor
parent
d717e41902
commit
85c5deb099
|
@ -256,11 +256,18 @@ void C4ControlScript::Execute() const
|
|||
// print script
|
||||
LogF("-> %s::%s", pPropList->GetName(), szScript);
|
||||
// print result
|
||||
bool is_local_script = true;
|
||||
if (!LocalControl())
|
||||
{
|
||||
C4Network2Client *pClient = NULL;
|
||||
if (::Network.isEnabled())
|
||||
{
|
||||
pClient = ::Network.Clients.GetClientByID(iByClient);
|
||||
if (pClient != ::Network.Clients.GetLocal())
|
||||
{
|
||||
is_local_script = false;
|
||||
}
|
||||
}
|
||||
if (pClient)
|
||||
LogF(" = %s (by %s)", rVal.GetDataString().getData(), pClient->getName());
|
||||
else
|
||||
|
@ -268,7 +275,19 @@ void C4ControlScript::Execute() const
|
|||
}
|
||||
else
|
||||
LogF(" = %s", rVal.GetDataString().getData());
|
||||
::Console.EditCursor.InvalidateSelection(); // refresh property view
|
||||
// Editor update
|
||||
if (::Console.Active)
|
||||
{
|
||||
C4Object *returned_object = rVal.getObj();
|
||||
if (editor_select_result && is_local_script && returned_object)
|
||||
{
|
||||
::Console.EditCursor.ClearSelection(returned_object);
|
||||
::Console.EditCursor.AddToSelection(returned_object);
|
||||
::Console.EditCursor.OnSelectionChanged();
|
||||
}
|
||||
// Always: refresh property view after script command
|
||||
::Console.EditCursor.InvalidateSelection();
|
||||
}
|
||||
}
|
||||
|
||||
void C4ControlScript::CompileFunc(StdCompiler *pComp)
|
||||
|
|
|
@ -134,12 +134,13 @@ public:
|
|||
C4ControlScript()
|
||||
: iTargetObj(-1), fUseVarsFromCallerContext(false)
|
||||
{ }
|
||||
C4ControlScript(const char *szScript, int32_t iTargetObj, bool fUseVarsFromCallerContext = false)
|
||||
: iTargetObj(iTargetObj), fUseVarsFromCallerContext(fUseVarsFromCallerContext), Script(szScript, true)
|
||||
C4ControlScript(const char *szScript, int32_t iTargetObj, bool fUseVarsFromCallerContext = false, bool editor_select_result = false)
|
||||
: iTargetObj(iTargetObj), fUseVarsFromCallerContext(fUseVarsFromCallerContext), Script(szScript, true), editor_select_result(editor_select_result)
|
||||
{ }
|
||||
protected:
|
||||
int32_t iTargetObj;
|
||||
bool fUseVarsFromCallerContext;
|
||||
bool editor_select_result; // if true and executed script from local client in editor mode, select the object returned by this script
|
||||
StdStrBuf Script;
|
||||
public:
|
||||
void SetTargetObj(int32_t iObj) { iTargetObj = iObj; }
|
||||
|
|
|
@ -976,9 +976,10 @@ void C4ConsoleGUIState::UpdateActionObject(C4Object *new_action_object)
|
|||
QPushButton *btn = new QPushButton(action_name->GetCStr(), window.get());
|
||||
if (script_command)
|
||||
{
|
||||
btn->connect(btn, &QPushButton::pressed, btn, [script_command, object_number]()
|
||||
bool select_returned_object = action_def->GetPropertyBool(P_Select);
|
||||
btn->connect(btn, &QPushButton::pressed, btn, [script_command, object_number, select_returned_object]()
|
||||
{
|
||||
::Console.EditCursor.EMControl(CID_Script, new C4ControlScript(script_command->GetCStr(), object_number, false));
|
||||
::Console.EditCursor.EMControl(CID_Script, new C4ControlScript(script_command->GetCStr(), object_number, false, select_returned_object));
|
||||
});
|
||||
}
|
||||
ui.objectActionPanel->addWidget(btn, row, column);
|
||||
|
|
|
@ -278,6 +278,7 @@ C4StringTable::C4StringTable()
|
|||
P[P_DefinitionPriority] = "DefinitionPriority";
|
||||
P[P_Group] = "Group";
|
||||
P[P_Command] = "Command";
|
||||
P[P_Select] = "Select";
|
||||
P[P_DescendPath] = "DescendPath";
|
||||
P[DFA_WALK] = "WALK";
|
||||
P[DFA_FLIGHT] = "FLIGHT";
|
||||
|
|
|
@ -502,6 +502,7 @@ enum C4PropertyName
|
|||
P_DefinitionPriority,
|
||||
P_Group,
|
||||
P_Command,
|
||||
P_Select,
|
||||
P_DescendPath,
|
||||
// Default Action Procedures
|
||||
DFA_WALK,
|
||||
|
|
Loading…
Reference in New Issue