5 #include <unordered_map>
23 using std::unique_ptr;
24 using std::unordered_map;
48 ,
public ContextMenuScreenController::MiniScriptMethodSelectionListener
137 default:
return "Invalid";
156 vector<string> flowNodeIds;
157 for (
const auto& [nodeId, node]:
nodes) {
159 flowNodeIds.push_back(node.id);
165 for (
const auto& nodeId: flowNodeIds) {
166 auto flowNodeId = nodeId +
"_fi";
167 auto foundFlowInput =
false;
170 if (connection.dstNodeId == flowNodeId) {
171 foundFlowInput =
true;
174 if (foundFlowInput ==
false)
return nodeId;
185 auto flowNodeId = nodeId +
"_fo";
188 if (connection.srcNodeId == flowNodeId) {
190 auto separatorIdx = connection.dstNodeId.find(
'_');
191 return StringTools::substring(connection.dstNodeId, 0, separatorIdx == string::npos?connection.dstNodeId.size():separatorIdx);
204 return nodeId +
"_a" + to_string(argumentIdx);
217 if (connection.srcNodeId == argumentNodeId) {
219 auto separatorIdx = connection.dstNodeId.find(
'_');
220 return StringTools::substring(connection.dstNodeId, 0, separatorIdx == string::npos?connection.dstNodeId.size():separatorIdx);
233 return nodeId +
"_c" + to_string(conditionIdx);
246 if (connection.srcNodeId == conditionNodeId) {
248 auto separatorIdx = connection.dstNodeId.find(
'_');
249 return StringTools::substring(connection.dstNodeId, 0, separatorIdx == string::npos?connection.dstNodeId.size():separatorIdx);
262 return nodeId +
"_b" + to_string(branchIdx);
275 if (connection.srcNodeId == branchNodeId) {
277 auto separatorIdx = connection.dstNodeId.find(
'_');
278 return StringTools::substring(connection.dstNodeId, 0, separatorIdx == string::npos?connection.dstNodeId.size():separatorIdx);
290 auto nodeIt =
nodes.find(nodeId);
291 if (nodeIt !=
nodes.end())
return &nodeIt->second;
302 case EngineMiniScript::ScriptVariableType::TYPE_BOOLEAN:
303 return string(
"color.pintype_boolean");
304 case EngineMiniScript::ScriptVariableType::TYPE_INTEGER:
305 return string(
"color.pintype_integer");
306 case EngineMiniScript::ScriptVariableType::TYPE_FLOAT:
307 return string(
"color.pintype_float");
308 case EngineMiniScript::ScriptVariableType::TYPE_STRING:
309 return string(
"color.pintype_string");
310 case EngineMiniScript::TYPE_VECTOR2:
311 case EngineMiniScript::TYPE_VECTOR3:
312 case EngineMiniScript::TYPE_VECTOR4:
313 return string(
"color.pintype_vector");
314 case EngineMiniScript::TYPE_QUATERNION:
315 case EngineMiniScript::TYPE_MATRIX3x3:
316 case EngineMiniScript::TYPE_MATRIX4x4:
317 case EngineMiniScript::TYPE_TRANSFORM:
318 return string(
"color.pintype_transform");
319 case EngineMiniScript::ScriptVariableType::TYPE_ARRAY:
320 case EngineMiniScript::ScriptVariableType::TYPE_MAP:
321 case EngineMiniScript::ScriptVariableType::TYPE_SET:
322 case EngineMiniScript::ScriptVariableType::TYPE_PSEUDO_MIXED:
323 case EngineMiniScript::ScriptVariableType::TYPE_NULL:
324 return string(
"color.pintype_undefined");
325 case EngineMiniScript::ScriptVariableType::TYPE_PSEUDO_NUMBER:
326 return string(
"color.pintype_float");
328 return string(
"color.pintype_undefined");
462 auto idMappingIt = idMapping.find(hierarchicalId);
463 if (idMappingIt != idMapping.end()) {
464 return idMappingIt->second;
466 auto flattenedId = to_string(idMapping.size());
467 idMapping[hierarchicalId] = flattenedId;
478 void addMiniScriptNodeDeltaX(unordered_map<string, string>& idMapping,
const string&
id,
const EngineMiniScript::ScriptSyntaxTreeNode& syntaxTreeNode,
int deltaX);
494 void createMiniScriptScriptNode(unordered_map<string, string>& idMapping,
const string&
id, EngineMiniScript::Script::ScriptType scriptType,
const string& condition,
const string& readableName,
const EngineMiniScript::ScriptSyntaxTreeNode* conditionSyntaxTreeNode,
int x,
int y,
int& width,
int& height);
511 void createMiniScriptNodes(unordered_map<string, string>& idMapping,
const string&
id,
int syntaxTreeNodeIdx,
int syntaxTreeNodeCount,
const EngineMiniScript::ScriptSyntaxTreeNode* syntaxTreeNode,
Node::NodeType nodeType,
int x,
int y,
int& width,
int& height, vector<string>& createdNodeIds,
int depth = 0);
529 void createMiniScriptBranchNodes(unordered_map<string, string>& idMapping,
const string&
id,
int syntaxTreeNodeIdx,
int syntaxTreeNodeCount,
const EngineMiniScript::ScriptSyntaxTreeNode* syntaxTreeNode,
Node::NodeType nodeType,
const vector<MiniScriptBranch>& branches,
int x,
int y,
int& width,
int& height, vector<string>& createdNodeIds,
int depth = 0);
558 bool handleMiniScriptBranch(unordered_map<string, string>& idMapping,
const string& idPrefix,
const vector<EngineMiniScript::ScriptSyntaxTreeNode*>& syntaxTree,
int& i,
int x,
int y,
int& width,
int& height, vector<string>& createdNodeIds);
602 bool find(
const string& findString,
bool matchCase,
bool wholeWord,
bool selection,
bool firstSearch,
int& index);
611 int count(
const string& findString,
bool matchCase,
bool wholeWord,
bool selection);
623 bool replace(
const string& findString,
const string& replaceString,
bool matchCase,
bool wholeWord,
bool selection,
int& index);
634 bool replaceAll(
const string& findString,
const string& replaceString,
bool matchCase,
bool wholeWord,
bool selection);
GUI parent node base class thats supporting child nodes.
GUI screen node that represents a screen that can be rendered via GUI system.
GUI styled text node controller.
Text editor tab controller.
const array< string, 12 > mathNodes
void saveFile(const string &pathName, const string &fileName)
Save file.
void setupContextMenu()
Set up context menu.
static constexpr int MINISCRIPT_SCRIPTIDX_STRUCTURE
void setVisualEditor()
Set visual editor.
const string getConnectedBranchNodeId(const string &nodeId, int branchIdx)
Find branch node id.
void dispose() override
Disposes the view.
CreateConnectionMode createConnectionMode
const string getScriptVariableTypePinColor(EngineMiniScript::ScriptVariableType type)
Get script variable type pin color.
void finishCreateConnection(int mouseX, int mouseY)
Finish creating connection.
bool hasFixedSize() override
If this viewport framebuffer has a fixed size.
void display() override
Renders the view.
void reloadOutliner() override
Reload outliner.
unique_ptr< GUIStyledTextNodeController::CodeCompletionListener > textNodeCodeCompletionListener
@ CREATECONNECTIONMODE_NONE
@ CREATECONNECTIONMODE_FLOW_OUT
@ CREATECONNECTIONMODE_ARGUMENT_OUT
@ CREATECONNECTIONMODE_ARGUMENT_IN
@ CREATECONNECTIONMODE_FLOW_IN
const string getNextNodeId(const string &nodeId)
Find next node.
void createSourceCodeFromNodes(string &sourceCode, const Node *node, int depth=0)
Create source code from nodes.
TextEditorTabView(EditorView *editorView, const string &tabId, GUIScreenNode *screenNode, const string &fileName)
Public constructor.
bool replace(const string &findString, const string &replaceString, bool matchCase, bool wholeWord, bool selection, int &index)
Replace string.
const string & getFileName()
void setCodeEditor()
Set code editor.
const string getStartNodeId()
unique_ptr< Engine > engine
void setMiniScriptMethodOperatorMap(const unordered_map< string, string > &methodOperatorMap)
Set method -> operator map.
void initialize() override
Initiates the view.
void deactivate() override
Deactivate.
static const string getCreateConnectionModeName(CreateConnectionMode createConnectionMode)
GUIParentNode * visualisationNode
Engine * getEngine() override
const string & getTabId() override
unique_ptr< GUIMoveListener > guiMoveListener
TabController * getTabController() override
Node * getNodeById(const string &nodeId)
Get node by id.
void handleInputEvents() override
Handle input events that have not yet been processed.
void createSourceCodeFromNode(string &sourceCode, const Node *node, int depth=0)
Create source code from node.
void cancelFind()
Cancel find.
void onMethodSelection(const string &methodName)
void deleteConnection(const string &nodeId)
Delete connection.
bool handleMiniScriptBranch(unordered_map< string, string > &idMapping, const string &idPrefix, const vector< EngineMiniScript::ScriptSyntaxTreeNode * > &syntaxTree, int &i, int x, int y, int &width, int &height, vector< string > &createdNodeIds)
Handle EngineMiniScript branch.
const array< string, 6 > flowControlNodes
TabView::OutlinerState outlinerState
const string getBranchNodeId(const string &nodeId, int branchIdx)
Create branch node id.
unique_ptr< const TextFormatter::CodeCompletion > codeCompletion
bool isCreatingConnection()
Returns if creating a connection currently.
unique_ptr< TextEditorTabController > textEditorTabController
const TextFormatter::CodeCompletion * getCodeCompletion()
GUIStyledTextNode * textNode
void createMiniScriptNode(const string &methodName, int x, int y)
Create EngineMiniScript node.
const string getMiniScriptNodeFlattenedId(unordered_map< string, string > &idMapping, const string &hierarchicalId)
Get EngineMiniScript node flattened id from hierarchical id.
void activate() override
Activate.
unordered_map< string, string > methodOperatorMap
int createConnectionsPasses
GUIScreenNode * screenNode
~TextEditorTabView()
Destructor.
void addMiniScriptNodeDeltaX(unordered_map< string, string > &idMapping, const string &id, const EngineMiniScript::ScriptSyntaxTreeNode &syntaxTreeNode, int deltaX)
Adds a delta X value to UI node with given id and all nodes down the statement syntax tree.
void createMiniScriptBranchNodes(unordered_map< string, string > &idMapping, const string &id, int syntaxTreeNodeIdx, int syntaxTreeNodeCount, const EngineMiniScript::ScriptSyntaxTreeNode *syntaxTreeNode, Node::NodeType nodeType, const vector< MiniScriptBranch > &branches, int x, int y, int &width, int &height, vector< string > &createdNodeIds, int depth=0)
Create UI nodes for branch nodes like if, elseif, else, end; forTime, end; forCondition,...
void createConnection(const string &guiNodeId)
Create connection with given start or end node id.
const string getConnectedConditionNodeId(const string &nodeId, int conditionIdx)
Find condition node id.
void deleteNode(const string &nodeId)
Delete node.
int count(const string &findString, bool matchCase, bool wholeWord, bool selection)
Count string.
unique_ptr< GUIStyledTextNodeController::ChangeListener > textNodeChangeListener
bool find(const string &findString, bool matchCase, bool wholeWord, bool selection, bool firstSearch, int &index)
Find string.
unordered_map< string, Node > nodes
void createMiniScriptConnections()
Create miniscript connections.
const string & getExtension()
EditorView * getEditorView()
void selectAll()
Select all.
vector< Connection > connections
void updateMiniScriptSyntaxTree(int miniScriptScriptIdx)
Update miniscript syntax tree.
GUIScreenNode * getTabScreenNode()
void updateRendering() override
Update rendering.
void createMiniScriptScriptNode(unordered_map< string, string > &idMapping, const string &id, EngineMiniScript::Script::ScriptType scriptType, const string &condition, const string &readableName, const EngineMiniScript::ScriptSyntaxTreeNode *conditionSyntaxTreeNode, int x, int y, int &width, int &height)
Create UI nodes for EngineMiniScript script node syntax tree, which matches a event or function in En...
const string getArgumentNodeId(const string &nodeId, int argumentIdx)
Create argument node id.
unique_ptr< DynamicColorTexture > linesTexture
void createMiniScriptNodes(unordered_map< string, string > &idMapping, const string &id, int syntaxTreeNodeIdx, int syntaxTreeNodeCount, const EngineMiniScript::ScriptSyntaxTreeNode *syntaxTreeNode, Node::NodeType nodeType, int x, int y, int &width, int &height, vector< string > &createdNodeIds, int depth=0)
Create UI nodes for given statement syntax tree, which matches a statement in miniscript.
const string getConditionNodeId(const string &nodeId, int conditionIdx)
Create condition node id.
int getMiniScriptScriptIdx()
bool replaceAll(const string &findString, const string &replaceString, bool matchCase, bool wholeWord, bool selection)
Replace all string.
const string getConnectedArgumentNodeId(const string &nodeId, int argumentIdx)
Find argument node id.
GUI move listener interface.
vector< string > parameters
@ CONNECTIONTYPE_ARGUMENT
vector< EngineMiniScript::ScriptSyntaxTreeNode * > syntaxTreeNodes
EngineMiniScript::ScriptSyntaxTreeNode * conditionSyntaxTree
EngineMiniScript::ScriptVariableType returnValueType
#define FORBID_CLASS_COPY(CLASS)