[mcclim-devel] questions about CLIM interface paradigm
Robert P. Goldman
rpgoldman at real-time.com
Mon Jul 25 23:09:14 UTC 2005
Paolo Amoroso wrote:
> rpgoldman at real-time.com writes:
>
>
[...snip...]
>>2. Is it good style to use the Enabled method? Is there a standard
>
>
> I think this is a general UI issue, not necessarily a CLIM one.
I actually think that this /is/ a specifically CLIM issue --- if CLIM
simply removes disabled interactions from the UI, instead of leaving
them there in a visibly-disabled form, then one may feel compelled to
modify the way disablement is handled, or reimplement a custom
disablement behavior.
Down below, I will mention another reason why this might be a CLIM issue.
>
>
>
>>Previously I had a lot of code that would handle inappropriate methods
>>and produce a helpful string or two, but this is repetitive, a blemish
>>on the design, and can be very large if there is a relatively complex
>>condition for enablement....
>
>
> You may keep a table associating commands with lists of commands to
> enable/disable. Each entry could also include tests for checking
> whether to actually disable/enable commands. The commands that need
> to do that could access the appropriate entry, run the tests, and
> enable/disable the relevant commands. It should be possible to hide
> much of this complexity to a CLIM application.
I see I wasn't clear enough in my first email. Actually, writing
methods for "enabled" is really easy, and substantially cleans up my
code for the commands themselves.
On the other hand, I really don't want my user interface to be playing
"hide-and-seek" with command names. Instead, if there's something about
the current situation that makes a command be disabled, I'd like it to
be displayed in some form that's effectively a "gray-out."
This leads to my second point about why this might be a CLIM issue. It
seems to me at least possible that there are TWO different kinds of
enablement and disablement, which I will call (relatively) static and
dynamic. The static case would correspond to application contexts where
the command is inappropriate. E.g., if you have a browser for two
different kinds of objects (say a schedule and a map), that application
might have two different layouts, and some commands would be appropriate
when in one layout and other commands would be appropriate in the other.
That seems like a static case, and one where you might well NOT want
the "gray out". Instead there would be two different contexts, with two
different interfaces, and different sets of active commands. This seems
like the case that the existing enablement protocol handles well.
BUT, there is also another case, the "dynamic" case, where there may be
short-lived situations that make a particular command inappropriate.
For lack of a better example, consider some form of interface where one
is editing a document. This document can be saved to a file. One might
have the conventional "save" and "save as" commands. The former would
be dynamically/temporarily disabled until a file name is associated with
the current document, so that if you create an initial document,
initially only the "Save as" is fully usable, and "Save" should be
grayed out (if you open an existing document, the "Save" should be
available immediately). Then, when a file name is associated with the
document, the "Save" command would no longer be grayed out.
IIUC, it is this latter case that is not supported by the existing CLIM
protocols. Am I correct in this assumption? If so, how hard would it
be to fix that problem? Presumably the command menu and menu bar
objects could be subclassed to support this kind of dynamic disabling, yes?
Cheers,
R
More information about the mcclim-devel
mailing list