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
Sven Eberhardt 2016-07-07 01:36:58 -04:00
parent d717e41902
commit 85c5deb099
5 changed files with 28 additions and 5 deletions

View File

@ -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)

View File

@ -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; }

View File

@ -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);

View File

@ -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";

View File

@ -502,6 +502,7 @@ enum C4PropertyName
P_DefinitionPriority,
P_Group,
P_Command,
P_Select,
P_DescendPath,
// Default Action Procedures
DFA_WALK,