Next week I’ve got my ToolDev exam at school, so guess a documentary on the tool I’m making is a bit overdue. Let’s dive in!
Our ToolDev classes thought us the basics of WPF, Databinding (yay) and MVVM and our exam assignment is to create a tool.
I’m making a node-based programming tool for WPF applications, those things interest me and I’ve been drooling over node-based tools such as shader editors, Unreal’s Blueprints system and the like for as far as I can remember. I wanted to try how far I could go in creating a similar tool in a short period of time (+- one month).
The ultimate goal of this tool is that people can design their XAML UI in Visual Studio, load it up in the tool and wire up basic coding functionality.
This is how it looks like today.
Right now, the amount of nodes is fairly limited to methods, properties that I reflect from C# types. I’ve also added an if/else node and I hope to still get operators (+/-/>/<) inplace. Furthermore you can wire up events and create new variables too.
I realize I’ve underestimated the scope of this project and the end result will be more of a proof-of-concept playbox instead of an actual coding environment. There are so many kinds of nodes, programming structures and formatting styles to keep into account.
Nevertheless I’m proud of what I’ve coded so far, everything nicely adheres to MVVM and WPF standards, the reflection parts work, it’s easy to add new nodes without breaking stuff etcetera. So far, aside from my canned Windows 8 Twitter app this is the largest app I’ve worked on so far, and I’ve become to really appreciate the MVVM pattern and MVVMLight.
What’s up next
The exam is next Friday, and there’s another big exam before that, so I won’t have that much time to work on the project.
The 2 main exam requirements I still need to get in are “Serialization” and “Implement undo/redo”. I got basic serialization working on the nodes, but I still need to save the connections between them. Serialization was a bit of pain considering I had to make special classes for my node to handle serialization, and I’m dealing with a lot of fields. I think I’ll drop undo/redo because to me it’s not /that/ important and I prefer to add some more functionality.
I’d like to get some operator nodes in like addition, comparison, etc. Also quick command nodes like show a MessageBox, or toggle visibility of a UI element. Furthermore I’d like to add a node that executes nodes in a sequence (like the Sequence node in UE4 Blueprints) to make it easier for the user to see what’s happening in what order. Now it’s also easy to mess up the nodegraph as there isn’t a check if 2 nodes work together (i.e: you can call a ItemCollection’s Add method on a Button if you connect them manually. All of these are still core functionality that would make the experience much more richer and tool-like.
Aside from that there are many accessibility features still missing, I can’t delete nodes, edit existing variables, and move multiple nodes around or zoom-in/out.
I’m not sure how far along I’ll get, but for now my tool works in a very basic manner, with decent MVVM driven code and I’m happy with what I’ve achieved in such a short while.