Idea:
So my idea is to add an optional parameter "ObjectRef" to both GObject methods "Replace" and "Replace No Attributes":
My request is mostly for replacing a control or a constant, but the proposed formalism could also work to replace any Node (SubVI, Structure, ...), a Diagram, a Panel, a Pane... by copying the properties and content of an existing one in memory.
Reasons:
Often in my scripting, I need to replace a control or a constant by copying an existing one. Most of the time, this is to change its data type, but also sometimes its style.
The current GObject methods "Replace" and "Replace No Attributes" are very handy to replace a control or a constant while maintaining their links to the other objects on the diagram, provided that you have the path to an existing (saved) .ctl file to give as a parameter to the method.
If the data type is not a type definition or is an unsaved type definition, things get complicated. This can happen and I don't have control over the data types passed to my tool.
To achieve this, I found 2 techniques:
1. Replace by a temporary Control file:
- Create a new VI of type "Control VI";
- Drop a new control using VI methods "Create from Data Type" or "Create from Reference";
- Save the .ctl file to a temporary path;
- Use method GObject.Replace with parameter "Path" on the old control / constant .
This works in most cases except when the data type contains out-of-scope typedefs. I can then work around this by disconnecting the typedefs and replacing sub-elements by path as a post-process, unless some typedefs are not saved by the user...
2. Recode the Replace method from scratch:
- Drop a new control / constant using VI methods "Create from Data Type" or "Create from Reference";
- Copy all relevant properties from the old control / constant to the new one;
- Reconnected its terminal to the wire on the block diagram if needed;
- For a control, relink locals, linked properties nodes, linked method nodes, references;
- For a control, reassign it to the connector pane if needed...
- ...
- Delete the old control / constant.
This is a lot of work, seems quite inefficient and also is not future proof in case new properties are added to controls.
Regards,
Raphaël.