Re: Modifying properties of several objects at the same time



On 24 Oct 2003, Ben Hetland wrote:

Lars Clausen wrote:
On 22 Oct 2003, Ben Hetland wrote:
If the property in question does NOT have the same value in all
selected objects, however, then the field should still be enabled
(i.e. modifiable), but doesn't show any real value. It could also be
"dimmed down" or something to visually aid in the concept that there
are really multiple values around. If the user does not touch this
setting at all, then the properties should remain unchanged in all
objects. But if the user sets a different value, then that will be set
in all objects of that type.
This is the hard part.  Suggestions or even patches for this would
be most
welcome.

Maintaining a state with each widget I think is the clue to the
solution here, a flag indicating "common value" or not. (Or did you
mean that it's really hard to "dim down" a widget in GTK+?)

GTK+ has some widgets with a 'multiple' state, but there are some that are
homegrown and will have to be fixed, and some (most notably I think string
entry) that have none.

For more complicated things like texts and numbers, this isn't as
simple. But I suggest the following:
- initially the item is grayed and shows no value at all
(empty field)
- if the user types anything in there, then this will be
the new value for _all_ selected objects of that kind
(we don't care about the old values being different).
The item's background turns white to reflect the change.
- There could be an additional button or check box next
to the field, allowing the user to revert his/her new
value, upon clicking this would set the field back to
its initial state.

The two first absolutely.  However, I've been pondering if widgets with
e.g. text, numbers or colors shouldn't have a drop-down menu showing all
the different settings any of the objects have, so you can pick one.

We could also drop the last feature mentioned here, by asserting that
if the user really did override some "multi-value", but
changed his or her mind afterwards, then one could simply
[Cancel] the whole properties box and bring it up again.

[Cancel] or [Revert] will do it for that.

I also assert that the imaginable possibility of being able to set
multiple values for the same field at the same time (when multiple
objects are selected), is not really a feature that is
needed. Because, if one really wants different values for some
specific property, then one can simply bring up the properties dialog
individually for each object in turn.

Indeed.  That'd be way too confusing a feature... 
<daydream>Would be nice though to be able to, say, add 1 to all
linewidths...</daydream> but it's so rarely useful that the interface would
be clutter.

There's also a problem of figuring out which ones have the same
setting,
but that's mostly a problem of understanding properties.

In pseudo code (inspired by C++ STL):

it = select.begin();
common_value = true;
value = it->val;
for_each( ++it, select.end(),
{ if (value != it->val) common_value = false; } );
if (common_value)
Display as normal: value
else
Display blank with empty field

Yeah, that's the idea of it, but properties aren't (unfortunately) all that
simple.  But if you can go in and just make a function that figures it out
(I have already reserved a flag for it), then somebody else can look at the
interface stuff.  Or vice-versa.

OK, just thinking "aloud" here, sharing some ideas. Anyone willing to
elaborate are welcome to do so; otherwise I might try one day myself
if I get the time (which I unfortunately get far to rarely...).

That'd be great of you could.

-Lars

-- 
Lars Clausen (http://shasta.cs.uiuc.edu/~lrclause)| HÃrdgrim of Numenor
"I do not agree with a word that you say, but I   |----------------------------
will defend to the death your right to say it."   | Where are we going, and
    --Evelyn Beatrice Hall paraphrasing Voltaire  | what's with the handbasket?



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]