%%%%%%%%%%%%%%% High Priority %%%%%%%%%%%%%%% %%%%%%%%%%%%% New Buglist %%%%%%%%%%%%% - If I delete a node from a layout, it should disappear from the execution trace. Its transitions should normally also disappear. But for a multi-headed transition, if there is still at least one source and at least one target, then only this node's piece of the transition should disappear. The present code does not delete the node or the incoming transition from the trace, only the outgoing transition. - Another tiny issue: if I fire up a fresh storyboard and load the tse file, all it displays is the thumbnail. This makes sense but it's a bit disconcerting. Perhaps the tse file can include the path of the tsl that was in use when the trace was generated. (And that name will have already been generated from the behavior name, even if the user hasn't saved the layout yet.) When the user loads a tse, if the current layout's name doesn't match the name specified in the tse file, we should try to load the tsl, and if we can't find it on the original path, then look for in the same directory for as the tse file. if we still can't find it, then we should pop up an alert message: "Can't find layout file requested by ." The reason I want to avoid reloading the layout if the current one has the same name is that the user may have made some changes, and wants to use that modified layout to look at some other tse files. We don't want to lose their changes, and we don't want to force them to save them. - I had some cases tonight where a node or transition had a really long ID or a long entry in the In/Out list, too wide for the properties pane. There was a horizontal scroll bar present, but it only provided room to scroll by a few characters, and so a good chunk of the info was still cut off and could not be read. ------------------- Eclipse RCP Stuff ------------------- - After deleting a node, I can right click and select Undo Delete. But if I instead go to the Edit pulldown menu, Undo is grayed out. - Can you change the File pulldown menu to allow saving of traces? So the new options would be: Save Layout Save Layout As Save Trace Save Trace As %%%%%%%%%%%%%%%%%%%%%% Future Improvements %%%%%%%%%%%%%%%%%%%%%% - I'd like to propose a heuristic to better populate the timeline: 1. Lay down an integer tick every second, and number every 5th tick. 2. Scanning left to right, if there is a large gap (50 pixels? tweak this) between two numbers on the timeline, find a tick that is roughly in the middle of that gap and apply a number to it, but don't apply the number if it would be too close to one of the existing numbers. Repeat this process until there are no more whole-second ticks eligible to receive numbers. 3. Scanning left to right again, if there is a large gap (200 pixels? tweak this) between two numbers, but there is an event of some kind (state stop or start, or an event icon) between them, then insert a tick at that spot and assign a fractional number it, provided that the number won't be too close to an existing number. Repeat until there are no more opportunities to insert ticks. - Also it would be nice to have a "Clear" button to clear the network log. - The "message" function in the old Storyboard drew a little "book" icon attached to the node that generated the message. See attached screen capture. The new version isn't doing this, but it should. The new version just puts a generic flag icon up on the icon bar; this is not as useful as the book icon attached to the state node. - Move Network Log to detachable view - I'm not sure why I was having trouble with image events before, but they're working now; the Storyboard is getting images and displaying thumbnails. But when I send webcam events, the Storyboard is not grabbing an image from /dev/video and adding it to the execution trace as it should. The .tse file is attached so you can see that the webcam event is being sent. I did have a webcam plugged in and verified that it was working. - I ran into another glitch with the Storyboard. I downloaded a model and generated an execution trace. Then I edited my code, changing the names of some of the node classes. I recompiled, ran the new code on the Chiara, and hit "Download Model" in the Storyboard. It downloaded the model but didn't change the node class names displayed in the Properties window. If I leave the behavior running, kill the Storyboard, and run a fresh Storyboard, then Download Model shows the correct names. I think what's happening is that since it's not recreating the layout, it's not changing any of the existing node descriptions. Proposed solution: Download Model should update the descriptions of existing nodes and transitions automatically. This would leave the "Display" properties unchanged, only the "Info" properties would be modified. But if the user has deleted nodes or transitions in his model, we need to notice that and remove them from the layout. If he has added new nodes or new transitions, we should pop up a message saying "New nodes or transitions detected; would you like them added to the layout?" If he says yes, then I guess we can just call the existing "generate layout" code to put them in. But we should only call it on newly-added nodes and transitions, not old ones that the user previously had the option of putting in the layout and apparently chose not to. - I would say if the user moves the cursor leftward from the advancing edge of the trace, then all scrolling stops, and nothing moves unless the user either drags the cursor or moves the scroll bar. Updates to the trace should continue but they'll be off-screen. If the user drags the scrollbar to the advancing edge of the trace, that means he has relinquished control and we should go back to automatically advancing the cursor and scrolling the window as before. If part of the trace is off-screen and the user drags the cursor to that edge of the window, then we want to scroll the window in that direction. - There is one more change I'd like to discuss with you. In seeing how students use the tool, I think it would be very helpful to have a second, "compact" display mode for the storyboard pane, and allow users to switch modes. In this second mode, every state would be represented by a square that was perhaps 10 pixels on a side. This is too small to write the state name, so we'll dispense with that. People can use color and vertical positioning to distinguish one state from another. The advantage of this compact mode is that when the robot is engaged in a lengthy or repetitive behavior, we can use compact moded to get more of it onto the screen at one time. ================== Multiple Layouts ================== Here is how I think the multiple layouts thing should work. Basically I expect people will be using multiple layouts to look at different views of essentially the same model, but there could be minor differences between models which can be glossed over. (If a model contains nodes or links that aren't in the layout, or the layout contains nodes or links that aren't in the model, they simply aren't displayed.) 1. At any moment there is at most one active layout. This is normally the one displayed on the screen. The other layouts are accessible as tabs at the top of the pane, but they are not usually displayed simultaneously. If the user clicks and drags a tab, then there could be multiple layouts on the screen, but only one will be the active layout; the rest should be grayed. In fact, Eclipse does that now. The active layout has a blue tab, while the second layout I created and dragged into the pane has a gray tab. When the user switches to the Storyboard pane, the active layout's tab switches to white and the other one remains gray. So it's always clear which is active. 2. Each layout has its own model. 3. Only the active layout can have any interaction with the outside world. Thus, "Download Model" replaces only the active layout's model, and "Record New Trace" un-dims nodes only on the active layout. 4. The Storyboard trace is always displayed using the currently active layout. If we switch layouts (by clicking on one of the tabs at the top of the layout pane), the trace is redrawn using that layout. 5. When we save a trace file, it should store a reference to the currently active layout. 6. When the user does "New Layout", the model of the currently active layout is copied to the new layout, and the user is asked if he wants to start with a) a copy of the currently active layout, b) an automatically generated layout, or c) a blank layout. I'd use radio buttons for this, and the default should be a). > If there is no active layout when the user does "New Layout", should I > just make (a) unselectable and (b) the default? We should probably make (c) the default. If they decide they want an automatically generated layout they can right-click in the empty window and select that option. > Should this also happen when the Storyboard tool opens? When the tool opens, if the user passed in a layout as a command line argument, we should just load that layout and make it active. If the user hasn't specified any layout on the command line, we should make a blank layout with a dummy name, and wait for the user's next action. - They might choose to download a model. This is probably the most common next action. In that case we change the dummy's file name to the behavior name, and now it's no longer a dummy. But we should treat the first "save" as a "Save As", in case the user wants to choose a different name for the layout file. - They might instead choose as their first action to load an existing layout. In that case the dummy layout should be replaced by the new one. (Load Layout should only replace a dummy, and otherwise spawn a new tab and load into that.) - They might choose as their first action to load a saved trace. The trace will indicate a layout to use, so if that layout is not already loaded, we try to load it, first from the specified path, and if that doesn't work, then from whatever directory we got the trace file from. If we can't find the layout, pop up a warning about not being able to find the layout, and just use the active layout, or if none is active, grab the first layout and make it active so we can display the trace. If there are no other layouts loaded, then we can't display the trace, so instead, pop up a window saying "You must load a layout to display this trace". I just realized that it is possible for there to be layouts loaded but no active layout. This can happen if we close the active layout. In that situation, a Download Model action should create a dummy layout, make it active, and proceed as describd above. Record New Trace should pop up a warning saying "No layout is active; plese click on one of the layout tabs."