Some external links may be obsolete -- if you have updates, please send.
Last updated: 25-Jun-2005
WabaVM refers to the application (symbol: |vm:waba|);
WabaApp refers to any saved Waba application or WabaTester (symbol: |WabaTester:waba|).
Context: called by WabaApp.viewSetupFormScript(Extras 'open'), or WabaTester.appLaunch"(Launch VM" button) Action: launches WabaVM with specified Waba app, and returns vm value; this should be saved for later use in shutDownWabaVM and VMExited. Example: vm := GetRoot().|vm:waba|:?launchWabaVM("HelloWorld", {}, self); API: /*vmBinary*/ WabaVM:launchWabaVM(/*string*/ appMainName, /*frame*/ appArgs, /*wabaApp*/ wabaApp) Parameters: appMainName: class name of the main class (with possible package info, but no .class extension) this is usually the same as original container filename, but not necessarily appArgs: frame with optional initialization parameters in addition to description and default, this shows mapping from likely initialization files { width: /*int*/, // requested width of the Java drawing area Default: 160 /w (.lnk,.prc?), width=(.htm) height: /*int*/, // requested height of the Java drawing area Default: 160 /h (.lnk,.prc?), height=(.htm) vmStackSize: /*int*/, // default: 1500 /s (.lnk,.prc?), vmstacksize=(.htm) nmStackSize: /*int*/, // default: 300 /t (.lnk,.prc?), nmstacksize=(.htm) classHeapSize: /*int*/, // default: 14000 /l (.lnk,.prc?), classheapsize=(.htm) objectHeapSize: /*int*/, // default: 8000 /m (.lnk,.prc?), objectheapsize=(.htm) archive: /*string[]*/, // used by app (but not VM). classpath of required libraries (with no extensions). default: waba /w (.lnk,.prc?), archive=(.htm) uniqueSymbol: /*symbol*/ // the symbol that preferences for the app will be based on. // default: |wabaApp-CLASSNAMEHERE:waba| wantsGray: /*int: 1 or 0*/, // Default: 0 useCPlusPlusHeap: *int: 1 or 0*/, // allocate Java classes on the C++ heap? Default: 0 doubleBuffer: *int: 1 or 0*/, // double-buffer? (grab bitmaps from windows) Default: 0 } wabaApp: an application frame e.g., GetRoot().|WabaTester:waba| or GetRoot().|HelloWorld:waba| that can respond to the messages: getWabaClass, getResource, and VMExited.
Context: called by WabaApp.viewQuitScript(Extras 'toggle' i.e., close), or WabaTester.appShutdown("Close VM" button). Action: shuts down WabaVM. If app received earlier VMExited, then this does nothing (i.e., VM already shut down). Example: GetRoot().|vm:waba|:?shutdownWabaVM(vm); API: /*void*/ WabaVM:shutdownWabaVM(/*vmBinary*/ vm) Parameter: vm: saved value returned by launchWabaVM.
Context: called by a WabaApp, typically in DeletionScript Action: vm removes any preferences related to the app Example: GetRoot().|vm:waba|:?RemovePreferences(kAppMainName, kAppSymbol); API: /*void*/ WabaVM:RemovePreferences(/*string*/ mainAppName, /*symbol*/ appSymbol) Parameters: mainAppName: name of main class; same as passed to launchWabaVM appSymbol: a unique symbol, usually the package symbol Note: since WabaVM may not be installed, it's now recommended that an app remove the preference frame directly: DeletionScript := func() //GetRoot().(kWabaVMSymbol):?RemovePreferences(kAppMainName, kAppSymbol); EntryRemoveFromSoupXmit (GetAppPrefs(kAppSymbol, {}), nil);
Context: called by a WabaVM Action: if the vm matches the one saved from launchWabaVM by WabaApp, then WabaApp should close; it should also reset vm so that close skips shutdownWabaVM. Example: WabaApp:VMexited(vm); API: /*void*/ WabaApp:VMExited(/*vmBinary*/ vm) Parameter: vm: the instance of vm that has just exited (shut down)
Context: called by a WabaVM Action: if class found in WabaApp (or library), returns: { class: /*binary*/, offset: /*int*/, length: /*int*/, } otherwise: nil Examples: classEntry := GetRoot().|WabaTester:waba|:getWabaClass("HelloWorld"); classEntry := WabaApp:getWabaClass("waba/ui/Edit"); API: /*classEntryFrame*/ WabaApp:getWabaClass(/*string*/ className) Parameter: className: name of class, with possible package info, but without .class extension
Examples:
Context: called by a WabaVM Action: if bitmap found in WabaApp, returns 2.x compatible bitmap frame { class: 'bitmap, ..., } otherwise: nil Examples: bitmap := GetRoot().|WabaTester:waba|:getResource("test.bmp"); bitmap := WabaApp:getResource("myPkg/images/one.bmp"); API: /*bitmapFrame*/ WabaApp:getResource(/*string*/ imageName) Parameter: imageName: a BMP file, with .bmp extension, possible package/path.
Note: Currently, getWabaClass and getResource use the same method, i.e., name (unchecked) returns a frame -- class or bitmap -- or nil.
A library is an Extension that installs itself in a global variable. When a WabaApp opens, it establishes a "classpath" that includes itself and installed libraries -- either all, or only those specified in the ARCHIVE attribute parameter. This is used during lookup by getWabaClass.
Internally, the global variable looks like:
/*frame*/ GetGlobalVar('|vm:waba|).lib { waba: {... appContext: {}...}, wextra: {... appContext: {}...}, }