r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[!REBOL3 GUI]

GrahamC
4-Nov-2010
[4160]
Doesn't the tab colours help orient you?
Henrik
4-Nov-2010
[4161]
actually not, since some tabs contain nearly identical UIs. people 
are not used to looking at the tabs at any other time than when selecting 
them.
GrahamC
4-Nov-2010
[4162x2]
Well, I have several hundred screens in my app ... not sure what 
else I can do to organize them
Also the nested tabs allows me to refer to a particular screen by 
a path notation
Henrik
4-Nov-2010
[4164]
I was surprised at how "narrow-scoped" some users are, when working 
in a program, almost down to a single face, not noticing the larger 
context or organization of the program, particularly if the program 
has many modes (tabs). I think that its important to design UIs around 
clearly marked mode of operation, or even better: Have mode-less 
operation.
GrahamC
4-Nov-2010
[4165x2]
Are nested trees any better?
MS approaches this by using a "control panel" of icons
Henrik
4-Nov-2010
[4167]
I prefer flat list that can be searched, when there are no other 
options. Old MUI preferences windows on the Amiga and the KDE configuration 
or MacOSX settings program comes to mind.
GrahamC
4-Nov-2010
[4168x2]
Each icon then deals with a particular subsystem
Not sure abou that approach as then the user ends up with lots of 
open windows
Henrik
4-Nov-2010
[4170]
Right. The problem is usually that an item you are looking for, doesn't 
reside in the subsystem that you think it does, so when there is 
no other way, at least provide a flat structure search.
GrahamC
4-Nov-2010
[4171x2]
So, what are the exemplar GUIs in dealing with lots of information?
What does the mac do forinstance?
Henrik
4-Nov-2010
[4173]
there is usually a method for searching for what you want. a typical 
mac app even allows searching all menus in the menu bar.
BrianH
5-Nov-2010
[4174]
The modern version of the system dialog does a list on the left instead 
of tabs. It might look like a column of links in a left-side navbar, 
but it is basically the replacement for the tabs.
Carl
7-Nov-2010
[4175]
I do not like multiline tabs either, and they violate some of the 
rules of good GUI design.


Sure Graham, good and bad design are matters of opinion; however, 
they are based on what "most users" can understand and efficiently 
operate.  If a GUI causes a user become "lost" or do the wrong thing, 
then it's not a good design.
GrahamC
7-Nov-2010
[4176]
I don't like multiline tabs either but they're not the same as nested 
tabs :)
Pekr
9-Nov-2010
[4177x2]
There is now Carl's blog upon how to easily list styles in R2. I 
posted corresponding R3 code, although it might be preliminary:

foreach [name obj] guie/styles [print [name "-" obj/about]]

But - I would like the GUI team to think about following aspects:


Imo the guie/styles list is highly insufficient. Imagine you want 
to auto-inspect (load) list of styles into your GUI designer. What 
you get now is a flat list of styles, where apart from 'table, you 
have its sub-styles like 'table-cell, 'table-row, 'table-header, 
etc. I am not sure that in the case of an IDE, you want to see those 
styles listed. OTOH those are legitimate styles, from which you might 
want to derive something, or just being able to change their aspects. 


So, I propose to resolve this situation somehow. The implementation 
is up to gurus, just few wild ideas:


- use tagging - tag style as 'main/root/parent, whatever - but - 
that introduces another field to the styles? Maybe not, because I 
expect some tagging system being available anyway?


- create guie/widgets, e.g.: guie/widgets: [table [table-cell table-header 
table-row] - that way we will be able to list just/only widgets as 
table, not having the list poluted with widget internals


- the above aproach might not work well in the case, when you aproach 
styles more as a CSS, not as widgets. Because - even e.g. 'table-cell 
might be derived from a totally different style, e.g. a box, or field, 
so I have no idea of how to keep track of those dependencies, but 
this is the area I leave for gurus to think about. E.g. someone changes 
box style and your table is influenced and user might be confused, 
why it happened. But I expect style/parent or something like that 
being available?
Maybe we need two separate things - style grouping (use gui/widgets 
for that), and style hierarchy - tree or other map of styles, their 
inheritance and dependencies (maybe this is what Rebolek now referst 
to as an object browser?)
Rebolek
9-Nov-2010
[4179]
Tags can be used, they are implemented.But, IMO, if you need a list 
of styles for a GUI builder, you better make a list manually.
Henrik
9-Nov-2010
[4180]
> Imo the guie/styles list is highly insufficient. Imagine you want 
to auto-inspect (load) list of styles into your GUI designer. What 
you get now is a flat list of styles, where apart from 'table, you 
have its sub-styles like 'table-cell, 'table-row, 'table-header, 
etc. I am not sure that in the case of an IDE, you want to see those 
styles listed.


We already have and use tagging. The styles you mention should be 
tagged INTERNAL, if they are not already, as they are part of compound 
styles. So it's up to an IDE to discern that properly 


It might be possible to make a helper function that filters in only 
end-user styles, but we'll see how important that becomes.
Pekr
9-Nov-2010
[4181]
dunno if having guie/widgets grouping would allow us to e.g. extract 
some style and its related code into separate file? I expect it not 
being so easy to isolate style/widget completly, as other stuff as 
event handling etc. might be involved.
Henrik
9-Nov-2010
[4182]
But it's important to note that all styles are equal citizens in 
the R3 GUI. Tags are used for conceptual separation.
Pekr
9-Nov-2010
[4183x2]
Rebolek - making list of styles manually is not imo acceptable. It 
should be auto-inspectable.
I propose to use guie/widgets then, to group related styles. By related 
I don't mean derived, but more of a compound styles - table is good 
example ...
Rebolek
9-Nov-2010
[4185x2]
As Henrik said, INTERNAL tag can be added to styles like table-row 
etc.
Actually, I will do it right now...
Pekr
9-Nov-2010
[4187]
OK, I've provided you with some idea, now it is your team's take 
to discuss. Maybe such proposal could go into the long R3 GUI doc, 
before dismissed right away :-)
Henrik
9-Nov-2010
[4188]
I need to finish the compound style document, so you can see how 
they are done.
Pekr
9-Nov-2010
[4189]
OK, INTERNAL tag - at least something ... although it means two things:


1) adding INTERNAL tag to the style does not provide you with info, 
which widget it is related to

2) for listing only non-internal tags, you have to write special 
code to filter all internal styles away :-)
Henrik
9-Nov-2010
[4190x2]
1) because one style can be related to several styles and new user-designed 
styles and also can be used dynamically by a style, depending on 
the situation.
2) a few lines of code.
Current list of tags (subject to change):

; set at stylize time
style-tags: [
	internal		; the style is intended for internal use
	panel			; the style is panel of other faces
	compound		; the style is a compound of part styles
	field			; the style is a field with editable text
	state			; the style is a user interactive state changing item
	action			; the style is a user interactive action item
	info			; the style is an indicator
	tab			; the style is part of tab navigtion

 auto-tab		; the style automatically tabs away on a specific event
	select			; the style contains user selectable text

 keep			; the style retains highlighting and caret after unfocusing
]

; set at layout and any other time
face-tags: [
	default			; the face is the window default
	focus			; the face is in focus
	disabled		; the face is disabled
	frozen			; the face is frozen
	dirty			; the face is dirty
]

; set at window creation time
window-tags: [

 form			; windows containing a validatable form or other field or 
 state faces

 inform			; windows containing only text or images and no validatable 
 faces

 popup			; windows containing a menu or selection, which when interacted 
 with, results in immediate return of a value
]
Pekr
9-Nov-2010
[4192]
ad 1) I can understand that, and that was also one of my worries 
in my initial post. However, as a designer/programmer, wouldn't you 
find usefull to have:


- something like tree-view (or node based visual display) of styles 
and their dependencies?


- wouldn't it help your orientation to have some list like guie/widgets, 
grouping particular styles, just for your info? So that you know 
that e.g. table is being built using xyz styles?

I am just asking - so no offense please :-)
Rebolek
9-Nov-2010
[4193x2]
1) One internal style may be related to more styles.

2) Is this really a problem? I see no benefit of having such a simple 
function as part of R3GUI - because R3GUI doesn't need it.
I see no use forguie/widgets, style dependencies can be covered in 
documentation.
Pekr
9-Nov-2010
[4195]
Henrik - tags - very nice!
Henrik
9-Nov-2010
[4196]
1) It's possible to make the style tree, when the styles are being 
initialized. In fact I already have this as a separate script, but 
it has not been used lately.
Pekr
9-Nov-2010
[4197]
btw - when I derive style by 'stylize, is there the 'parent field 
being set, so that the hierarchy can be created?
Henrik
9-Nov-2010
[4198x3]
Tags are really trivial. They are just a list of words and we have 
a few TAG functions to set/unset/inspect them during runtime. It's 
entirely up to styles or the higher level code to use tags correctly 
and this is for example done with face navigation.
'stylize hierarchy, not at this time, I think. it would be easy to 
implement if we need it.
The hard part about tags is to name the right ones, so they won't 
overlap too much.
ssolie
15-Nov-2010
[4201]
Was just trying out the r3-gui.r3 script and found out the fonts 
are hard-coded for Windows. I changed them to some Amiga fonts and 
the hello world GUI popped up. We'll need to find some way of handling 
fonts on non-Windows platforms via freetype to keep that script generic...
Henrik
15-Nov-2010
[4202]
Thanks for info. Passed on to Carl.
Pekr
15-Nov-2010
[4203]
ssolie - IIRC Cyphre reported here, that he has FreeType support 
done for A110, he just has to release it. That should help platforms 
like OS-X, Linux, Amiga IIRC .
ssolie
15-Nov-2010
[4204]
Pekr: I'm using Cyphre's patch along with my own changes which enables 
the FreeType support on Amiga to function.
Rebolek
15-Nov-2010
[4205]
I've got one question. There's face/faces for all faces that are 
part of a face. There also needs to be some container for faces that 
are part of face but are not visible (hidden) right now. Currently 
it's called face/cache, but I think the name should be different. 
Any ideas?
GrahamC
15-Nov-2010
[4206]
face/hidden ?
Rebolek
15-Nov-2010
[4207]
Thanks! Native speaker is always appreciated when chosing right names 
for words :)
Henrik
16-Nov-2010
[4208]
I'm considering a rewrite of the validation prototype as there are 
some parts missing with regards to initial state.


Have there been any considerations on how to use the DIRTY tag? I 
have some ideas on when DIRTY is set:


- The user creates an edit in a field, changes setting in a radio 
group, etc. It would not be enough to focus the face, but a specific 
action would have to be taken.

- When the user deliberately moves the edit back to the original 
state, the field is still dirty, so we can observe which fields were 
manipulated.

- Using a function DIRTY?, we can observe whether a field or a panel 
is dirty.

- It's not possible or logical to set the DIRTY tag programmatically 
(other by forcing it in with TAG-FACE face 'dirty)

It would be cleared when:


- Using a function CLEAN, we can unset the DIRTY tag in a face or 
panel of faces. This would be the only way to unset the tag.
Robert
16-Nov-2010
[4209]
- When the user deliberately moves the edit back to the original 
state, the field is still dirty, so we can observe which fields were 
manipulated.

 - I don't like this one. Than we should have a manipulated flag. 
 As dirty means: changed.