Hi all,
I posted here before quite some time ago but had to interrupt my work. Now I reserved time to be able to concentrate on the implementation in mcclim.
I'm trying to program a frontend for the definition of specialized scores of a self-designed system for live-electronics in contemporary music (the backend is done in pure data, but most of the hard work is already getting done in lisp).
One part of the frontend is supposed to be similar to a vector graphics program, enabling the creation of straight horizontal colored lines and the nested grouping of those lines. The user should be able to move those lines/groups around, stretch them, clip them and do some other basic editing operations such as copying, insertion and deletion (for an idea, how those graphics look like, you can have a look at: http://icem-www.folkwang-hochschule.de/~finnendahl/download/sandgetriebe-aus... ).
I used the clim-fig demo application as a point of departure and try to build around this to get a better grasp of the concepts before restarting from scratch.
Here are my questions:
1. highlighting: I successfully hooked into the highlighting function. All lines are a presentation using output-recording and highlight on mouse over. I would like to be able to change the highlighting context (with some keystroke) so that e.g. not a single line is highlighted, but all lines of the group, it is contained in. I could do that manually within the highlighting routine by traversing the parent tree of the highlighted object, but I wonder whether it could be possible to hierarchically nest the presentation type classes (and their objects) in a way that the presentations are sensitive to the current context and highlight accordingly without having to replay them on change of context.
2. selection: clicking on a presentation (or a group of presentations) should select that group by displaying a dashed line around the smallest enclosing region of the selected objects and attaching a small square or icon to that square for resizing. If I got the concept correctly, the dashed line plus small square should be displayed as one or more presentations (e.g. of type "region"), which are sensitive to mouse gestures for moving or resizing.
Should these presentations get appended to the output record? It seems a little awkward to always replay the whole output record if presentations are deselected. So I wonder how would be the canonical way to do it (I know about incremental redisply, but would it fit here)?
3. I didn't succeed in changing the command invoked on a left mouse-click on a canvas. It is initially defined with "define-presentation-to-command-translator" but I couldn't change the definition to invoke different comands depending on the state of the program. (Like in a drawing programm: when you change the tool in the toolbar, the mouse-click invokes a different command).
As far as I understood, the command table is resposible for the bindings, but I didn't find the mechanism for changing the current commmand table.
Any help or correction of my assumptions is greatly appreciated!
Yours, Orm