OSC
We don't need wildcard matching in our OSC addresses, which makes things easier. Thus a message is
struct hh_message {
timestamp when;
string address;
array payload;
}
in languages like Python this is easier. We need only demonstrate it in Python, and we don't need the full expressibility of OSC either.
Routing
A routing object is kind of like an object in MaxPd: a box that has inlets and outlets that you connect to things. Between these objects are messages of the form above. An object can have a reject outlet to which, by default, all unrecognised messages go. For example we could have a switch object which sends all 'unrecognised' messages to one of an array of outlets, and to select the outlet we send it a message.
Graphical patching
Like Max, we want easy keyboard shortcuts.
Qt
Have a fixed 1920x1080 workspace for now. We have rectangles that represent objects. Along the bottom things are subdivided. An object has a class.
Exercises
- Draggable boxes.
- A list of rectangles. For now stacking order is creation order.
- Create a rectangle of a fixed size when we click the mouse.
- When we click, we select that rectangle.
- Creating a text input box at the cursor.
- Type name, object of that class is instantiated.
- For now, classes are just colours.
- Inlets and outlets.
- A class has a number of inlets and outlets.
- Divide the length of the top and bottom according to the number of outlets.
- There is a left and right outlet -- the left is for control messages, and the right is for rejected messages.
- When we drag between inlets and outlets, we create a straight line (like Pd, not max).