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