Re: GUIKit: user defined properties?

*To*: mathgroup at smc.vnet.net*Subject*: [mg50156] Re: [mg50139] GUIKit: user defined properties?*From*: Jeff Adams <jeffa at wolfram.com>*Date*: Wed, 18 Aug 2004 01:20:04 -0400 (EDT)*Sender*: owner-wri-mathgroup at wolfram.com

Andrew Dabrowski wrote: > Hi, > > I've just downloaded the new GUIKit and I'm trying to convert some palettes in > my old programs into the new GUIKit windows. > > Palette buttons have a data field which is useful when the buttons represent > different numerical values. Is there a way to capture this feature with GUIKit? > Is there a way to define a custom property for a widget? > > I've tried using Script to define a constant function, i.e. > > Widget["Button",{"text"->Script[buttonData[] ],Script[buttonData[]:="A"] } ], > > but this prints "GUIKit`Private`Script31buttonData" in the button instead of "A". Hello Andrew, This widget definition is almost working, but the issue here is that within each Widget definition the elements of the widget are visited and evaluated in order, from left to right, so the buttonData[] function is being evaluated in Mathematica to set the "text" property of the button before your definition is defined within the Mathematica kernel. If you simply reverse the order of these elements the value will be assigned at the time the button's text property is needed: GUIRun[ Widget["Button", {Script[buttonData[] := "A"], "text" -> Script[buttonData[]]}] ] We are looking into allowing custom properties of a widget defined with top-level Mathematica code for a future version of GUIKit, but Script[] blocks of Mathematica functions should be able to provide a similar functionality for the time being. Although many times some of these properties are typically defined using the static strings themselves, you can build a set of Mathematica functions to 'centralize' your widget properties if you desire to store that information this way. For example, the following example uses a top-level Script[] block to define functions that return various button properties for multiple widgets in a window which is just one of many alternative techniques to simply defining each button's properties with static strings: GUIRun[ Widget["Frame", { Script[ labels[i_] := {"One", "Two", "Three"}[[i]]; tooltips[i_] := {"First", "Second", "Third"}[[i]]; ], Widget["Button", {"text" -> Script[labels[1]], "tooltipText" -> Script[tooltips[1]]}], Widget["Button", {"text" -> Script[labels[2]], "tooltipText" -> Script[tooltips[2]]}], Widget["Button", {"text" -> Script[labels[3]], "tooltipText" -> Script[tooltips[3]]}] }] ] Jeff Adams Wolfram Research