World: r3wp
[!RebGUI] A lightweight alternative to VID
older newer | first last |
GrahamC 17-Jan-2011 [8908] | Agreed. |
Awi 6-Feb-2011 [8909x3] | Found another bug in b218: when using rate and feel, Ok button in alerts no longer working, the same with Yes/No buttons in confirm. Here is a code sample: do %rebgui.r display "rate feel test" [ lbl: label "label with rate feel" rate 1 feel [ engage: func [f a e] [if a = 'time [print "awi"]] ] btn "test alert" [alert "can you close me?"] btn "?" [? lbl] btn "unset lbl/rate" [lbl/rate: none show lbl] btn "set lbl/rate" [lbl/rate: 1 show lbl] ] do-events |
Nice thing is, when I turn off "rate", it works again, so currently I have a workaround, thanks God, I'm very close to shipping as I found this bug :-) | |
Basically what I'm doing is reading/monitoring a serial port using rate/feel. Since Rebol does not have a timer, the only thing I can think of is using rate/feel, which works very nicely as long as you don't "wait". "wait'" will kill your "thread" as the next timer event kicks again. | |
Awi 17-Feb-2011 [8912x4] | I just want to share my modifications of the chat widget in b177, I needed a slimmer chat. It should also fix the resize issue: REBOL [] slim-chat: make baseface [ options: { USAGE: chat2 120 data ["Bob" blue "My comment." yello 14-Apr-2007/10:58] DESCRIPTION: Three column chat display as found in IM apps such as AltME. Messages are appended, with those exceeding 'limit not shown. OPTIONS: [limit n] where n specifies number of messages to show (default 100) [id n] where n specifies id column width (default 10) [user n] where n specifies user column width (default 15) [date n] where n specifies date column width (default 25) } size: 200x100 pane: [] data: [] edge: default-edge action: make default-action [ on-resize: make function! [face] [ poke face/pane/2/para/tabs 2 face/pane/1/size/x - sizes/slider - (sizes/cell * any [select face/options 'date 25]) face/redraw/no-show ] ] height: 0 ; actual pixel height of all messages (-1 ensures first message is offset to hide it's edge rows: 0 ; number of messages limit: none ; last n messages to display append-message: make function! [ user [string!] user-color [tuple! word! none!] msg [string!] msg-color [tuple! word! none!] date [date!] /no-show row /local p y t1 t2 t3 ] [ ; cache current tab stops p: self t1: pick pane/2/para/tabs 1 t2: pane/1/size/x - sizes/slider - (sizes/cell * any [select p/options 'date 25]) p: self ; get height of message y: max sizes/line 4 + second size-text make baseface [ size: as-pair p/size/x - sizes/slider + 1 10000 text: msg font: default-font para: para-wrap ] insert tail pane/1/pane reduce [ make baseface [ offset: as-pair -1 height - 1 size: as-pair t2 21 span: all [p/span find p/span #W #W] text: user edge: make default-edge [size: 0x1] font: make font-top [color: either word? user-color [get user-color] [user-color] style: 'bold] color: either word? msg-color [get msg-color] [msg-color] ] make baseface [ offset: as-pair -1 height - 1 + 20 size: as-pair p/size/x - sizes/slider + 1 y text: form msg color: either word? msg-color [get msg-color] [msg-color] edge: make default-edge [size: 0x1] font: default-font para: para-wrap ] make baseface [ offset: as-pair t2 - 1 height - 1 size: as-pair (sizes/cell * any [select p/options 'date 25]) + sizes/slider + 1 21 span: all [p/span find p/span #W #X] text: form either now/date = date/date [date/time] [date/date] edge: make default-edge [size: 0x1] font: make font-top [style: 'bold align: 'right] color: either word? msg-color [get msg-color] [msg-color] ] ] height: height + y - 1 + 20 if ((length? pane/1/pane) / 3) > limit [ y: pane/1/pane/2/size/y + pane/1/pane/1/size/y - 2 remove/part pane/1/pane 3 foreach [u m d] pane/1/pane [ u/offset/y: u/offset/y - y m/offset/y: m/offset/y - y d/offset/y: d/offset/y - y ] height: height - y ] unless no-show [ insert tail data reduce [user user-color msg msg-color date] pane/1/size/y: height pane/3/ratio: pane/3/size/y / height show p ] show pane/1 ; !!! this cleans up artifacts but "eats" other widgets redraw events !!! ] set-user-color: make function! [id [integer!] color [tuple! word! none!] /local idx] [ if any [zero? id id > rows] [exit] poke data id * 5 - 3 color if limit > (rows - id) [ idx: either rows > limit [(id + limit - rows) * 3 - 2] [id * 3 - 2] pane/1/pane/:idx/font/color: either word? color [get color] [color] show pane/1/pane/:idx ] ] set-message-text: make function! [id [integer!] string [string!] /local idx] [ if any [zero? id id > rows] [exit] poke data id * 5 - 2 string if limit > (rows - id) [ idx: either rows > limit [(id + limit - rows) * 3 - 1] [id * 3 - 1] insert clear pane/1/pane/:idx/text string redraw ] ] set-message-color: make function! [id [integer!] color [tuple! word! none!] /local idx] [ if any [zero? id id > rows] [exit] poke data id * 5 - 1 color if limit > (rows - id) [ idx: either rows > limit [(id + limit - rows) * 3 - 1] [id * 3 - 1] pane/1/pane/:idx/color: either word? color [get color] [color] show pane/1/pane/:idx ] ] redraw: make function! [/no-show /local row] [ clear pane/1/pane height: 0 rows: (length? data) / 5 row: max 0 rows - limit: any [select options 'limit 100] foreach [user user-color msg msg-color date] skip data row * 5 [ append-message/no-show user user-color msg msg-color date row: row + 1 ] pane/1/size/y: height pane/3/ratio: either zero? height [1] [pane/3/size/y / height] unless no-show [show self] ] init: make function! [/local p] [ unless options [options: copy []] p: self limit: any [select options 'limit 100] ; chat pane (1) insert pane make baseface [ offset: as-pair 0 sizes/line size: p/size - as-pair sizes/slider sizes/line span: all [p/span find p/span #W #W] pane: [] ] ; heading (2) insert tail pane make gradface [ offset: -1x-1 size: as-pair p/size/x sizes/line text: "Chat" span: all [p/span find p/span #W #W] font: make font-button [align: 'left] para: make default-para [tabs: [0 0]] ] ; set header tabs poke pane/2/para/tabs 1 sizes/cell * (any [select options 'user 15]) poke pane/2/para/tabs 2 size/x - sizes/slider - (sizes/cell * any [select options 'date 25]) ; vertical scroller insert tail pane make slider [ offset: as-pair p/size/x - sizes/slider sizes/line - 2 size: as-pair sizes/slider p/size/y - sizes/line + 2 span: case [ none? p/span [none] all [find p/span #H find p/span #W] [#XH] find p/span #H [#H] find p/span #W [#X] ] action: make default-action [ on-click: make function! [face] [ if height > face/size/y [ face/parent-face/pane/1/offset/y: (height - face/size/y * negate face/data) + sizes/line show face/parent-face ] ] ] ] pane/3/init action/on-resize self ] ] |
And here is a screenshot: http://uploadpad.com/files/Chat.png | |
To use this, just save it as slim-chat in rebgui/widgets, and then do create-distribution.r. It's fully syntax-compatible with the existing chat widget. | |
I forgot, you will need to add #include %widgets/slim-chat.r in rebgui-widgets.r | |
GrahamC 17-Feb-2011 [8916] | indonesian? |
Awi 17-Feb-2011 [8917] | yes :-) |
Awi 25-Feb-2011 [8918x3] | another minor bug in rebgui, I just mentioned it here so it's not lost: REBOL [] do %rebgui.r counter: 0 muline: copy "" display "button color not reset" [ btn "start timer" [ if tgl/text = "wait" [wait 0] print "hi" ] tgl: toggle data ["wait" "no-wait"] ] do-events |
when a button does some activities, in this case 'wait', the button's color changed to the pushed state, but never gets back to it's original color. | |
it's b218 | |
Gabriele 21-Mar-2011 [8921] | calling WAIT inside a vid face action is not really supported by REBOL. In practice, there are cases where you may need to do this, but it is always a bit tricky. |
Awi 21-Mar-2011 [8922x2] | Thanks for the information Gabriele, I've been using this inside vid face action to wait for a data from serial port. Until now I have not encountered any issue. But maybe I'm just lucky. |
What I needed is actually only the timer action of a face to process an internal command queue, and while doing this I read some data from serial port. If rebol had a timer object, I don't need the face anymore. But afaik there is no timer in rebol, since it does not support multithreading yet, with exception of the face timer. | |
Gabriele 24-Mar-2011 [8924] | Timers are not really related to multithreading. If you only need a timer, you can just use WAIT with a time! or integer! value. Also, one way to work around problems that may happen when using WAIT inside a face action is to disable the event port, then WAIT, then enable it again. Eg, in your above code, replace the WAIT 0 with: saved: system/ports/wait-list system/ports/wait-list: [] wait 0 system/ports/wait-list: saved It may be better though to add the serial port to the wait list and handle things differently - I can't say without knowing more about your program. |
Awi 24-Mar-2011 [8925x2] | That solved this issue, thanks for the hint. |
On the timer topic, I needed a recurring event that fires every second, where I can do some processing, without blocking the main thread while waiting until the next event. In .Net I can achieve that using a timer object. | |
GrahamC 16-Apr-2011 [8927x2] | Ashley, any suggestions on how to detect inactivity so that I can log a user out of the application? |
Do I have to track every event? | |
Ashley 17-Apr-2011 [8929] | How about checking stats/evals periodically (accounting for the calls that this in itself generates)? |
GrahamC 17-Apr-2011 [8930] | I'll give that a go ... |
Henrik 3-May-2011 [8931] | is there a simple/proper way to resize a rebgui window? |
Ashley 4-May-2011 [8932] | build#218: display "test" [ box red #HW return button #Y "resize" [ var: face/parent-face var/size: 300x300 show var ] ] |
Henrik 4-May-2011 [8933] | thanks |
Henrik 13-Jul-2011 [8934] | I need to copy the entire state of a rebgui table for an undo system. Any idea how to do that? Deep copying the face object is far too slow, so I guess I need to access particuar values in the table that will then update the table properly when calling REDRAW. |
Ashley 13-Jul-2011 [8935] | table/data table/widths table/aligns |
Henrik 14-Jul-2011 [8936] | Thanks |
Awi 22-Aug-2011 [8937x2] | build#218: do %rebgui.r display "test scroll panel" [ mytable: table options ["id" left .2 "name" right .8 ] data [1 "A" 2 "B" 3 "C"] [alert "see me?"] ] do-events |
I tried to fix the bug that selecting the third row brings up an empty alert window (no text). I've played with face-iterator and table widget source code, but don't know where to look further. If anyone can give a hint I would really appreciate it. | |
Awi 23-Aug-2011 [8939x2] | I found the bug, it's in the rebgui-widgets.r -> face-iterator font: either 'left = aligns/:i [default-font] [make default-font [align: aligns/:i]] should be replaced with font: either 'left = aligns/:i [make default-font []] [make default-font [align: aligns/:i]] otherwise, selecting a line will change default-font/color to white, thus any widgets using default-font shown thereafter will appear blank |
Ashley, if you give me access, I would be more than glad to submit the changes back to the repository (including some other widgets that I might have fixed along the way) | |
GrahamC 23-Aug-2011 [8941] | Awi ... I started that repository. Join up and I'll see if I can grant you write access. |
Awi 23-Aug-2011 [8942] | Ok, I already following the project in codeplex |
GrahamC 23-Aug-2011 [8943] | Ok, made you a developer .. hope that works |
GrahamC 26-Aug-2011 [8944] | Awi ... do you now have write access to the repo? |
Awi 6-Sep-2011 [8945] | Sorry Graham, I was in vacation recently. Yes, now I have write access to the repo. I will need to clean up a bit before posting my changes though. |
Robert 26-Sep-2011 [8946] | GrahamC "Are the RebGUI widgets being released?" - No, as our internal RebGUI is a fork long time ago and I think it developed quite far away from the official version of RebGUI. So, not sure if it's useful for others. |
Endo 1-Nov-2011 [8947x2] | When I add rows to a TABLE using the following code works well: append my-table/data a-block my-table/redraw But when I make a block of data then set my-table/data to it, it doesn't work (nothing appears in my-table) b: [] append b a-block my-table/data: b my-table/redraw and the using my-table/add-row is also doesn't work. Am I doing something wrong? |
This shows the problem more clear: gui-table/add-row ["a" "b" "c"] gui-table/redraw ;works ok b: copy gui-table/data clear gui-table/data gui-table/redraw ;clears the table gui-table/data: copy b gui-table/redraw ;shows nothing There is something related directly to the DATA block inside TABLE functions I think. | |
GrahamC 1-Nov-2011 [8949] | you have to do this: insert clear head gui-table/data a-block gui-table/redraw as there is a reference to the data block elsewhere |
Endo 10-Nov-2011 [8950] | Where to download the latest RebGUI source codes? Sorry I found it a few days ago but cannot find now. |
GrahamC 10-Nov-2011 [8951] | codeplex |
Endo 10-Nov-2011 [8952] | Got it, thanks. |
Endo 11-Nov-2011 [8953] | I downloaded the source codes for RebGUI but it looks it is not the latest version. Many of the functions & styles are totally different in rebgui-92396.zip (source from codeplex) and in B117 (from dobeash website). Is there any more recent version somewhere? |
Ashley 11-Nov-2011 [8954] | b117 is the latest stable release. The b2xx series is a rewrite that is 95% complete. |
Endo 11-Nov-2011 [8955] | Thank you. New UI looks very nice. It would be nice if table widget supports mouse wheel scrolling. |
Endo 15-Nov-2011 [8956] | This line give error when you select an item in drop-list, I tested on latest svn version (218): Is it a known bug? (same error for edit-list) do %rebgui.r display "Test" [drop-list "Black" data ["Red" "Green" "Blue"]] do-events |
GrahamC 15-Nov-2011 [8957] | I normally specify a size for the drop-list |
older newer | first last |