This post originated from an RSS feed registered with Agile Buzz
by James Robertson.
Original Post: VW Tools
Feed Title: Cincom Smalltalk Blog - Smalltalk with Rants
Feed URL: http://www.cincomsmalltalk.com/rssBlog/rssBlogView.xml
Feed Description: James Robertson comments on Cincom Smalltalk, the Smalltalk development community, and IT trends and issues in general.
Vassili Bykov discusses the VW tools. Vassili: "My hair isn't blond, it's gray. It was black when I started working on VW Tools". Vassili points to the badges, where the names are like this:
James
Robertson
Cincom
Given the font usage, it looks like I work for "Robertson Cincom". Point is, presentation matters. So if the presentation is confusing, the user won't be able to figure out how to use it.
Trippy
A demo - a couple of inspectors. Showing multiple select, and that you can do "accept" of values across all selections. Yes, there's an undo. You can drag/drop between inspectors, and within an inspector (re-ordering an array, for instance). The evaluation pane adds a workspace in the tool. There's also navigation (dive down, etc). Here's a screen shot:
Next - pragmas
Started to appear for dynamic menu additions in VW3. Why was this required? Well, say we add in a tool (3rd party) that needs to add a menu item. Now posit a second tool that wants to add another new menu item? The last one to modify the menu wins. Pragmas solve this by allowing the menu to be defined in chunks. More uses of pragmas:
methodWithPragmas
^3 4.
Look at the byte code: No byte code for the pragma? Look in attributes under attributes - annotated Method. Here's a screenshot:
Add a class method like this to get rid of the warning:
pragmaDeclaration
^#(example:difficulty:)
You can write "script" to collect up methods with pragmas and figure out where they are. Then you can script this in the inspector - as Vassili just said: "Try that in Eclipse". So back to menus - the system just collects up pragmas of a given sort (i.e., referring to a selector) and builds the menu. It turns out that Vassili has been using pragmas to extend various tools - like the new "dock" at the bottom of the VisualLauncher - see class VisualLauncherToolDock.
What about the matcher in the Store tools and the class finder tools? Have a look at class CompletionDriver. It's easy enough to "plugin" to a UI:
Then you have to set up the #computeCompletions method - basically a matter of telling it what you are matching against and how.
Tool Modules
Things like the IncrementalSearchDialog are built up from component modules. The main one is IncrementalSearchModule (a class in VW). The basic comment: "IncrementalSearchModule is a combination of an entry module and a list module. As the user types in an entry field, the module searches for objects matching the input typed by the user and displays the result in the list module. ". As it turns out, you can use this module in applications - it's pluggable. There are a number of utility methods (like #forClassSelector) that make some uses easy, and point out how to build others. The only other thing to do is to create a method for noticing changes in the input field, which in turn queries the module.
Interesting - he's showing a pragma that lists a set of relays - more or less a smart delegation target list. You can use this instead of a hairy #doesNotUnderstand: implementation.
Ahh, the Settings Framework. Made my life easier in [BottomFeeder>http://www.cincomsmalltalk.com/BottomFeeder]. Adding your own settings is pretty easy, and customizing the way it does storage of settings is very easy - it defaults to an XML file, and I have Bf dropping an ini file instead. Cool - if you blow settings code, you get a "Debug" button right in the settings tool.