;;search for tab-panel entry in the file named rebgui-widgets.r ;; and replace with the cureent content and then start tour.r script ;; to see the brand new widgets working ;) ; by shadwolf tab-panel: make face [ color: none pane: [] l-arw: none r-arw: none data: none dir-buttons: false feel: make default-feel [ redraw: function [face act pos] [test-size test-wid] [ if act = 'show [face/pane/1/size: face/size - 0x20 test-wid: last face/pane/2/pane test-size: test-wid/size/x + test-wid/offset/x either lesser? face/size/x test-size [ probe test-size print "la liste des bouttn est plus grande que ce que l'on voit!!!" either not face/dir-buttons [ face/dir-buttons: true either face/r-arw = none [ insert tail face/pane face/l-arw: make arrow [ size: 20x20 offset: as-pair (face/size/x - 40) 0 data: 'left action: does [print "you clicked left" if greater? parent-face/pane/2/offset/x (parent-face/size/x - parent-face/pane/2/size/x) [parent-face/pane/2/offset/x: parent-face/pane/2/offset/x - 200 show parent-face]] ] do face/l-arw/init insert tail face/pane face/r-arw: make arrow [ size: 20x20 offset: as-pair (face/size/x - 20) 0 action: does [print "you clicked right" if lesser? parent-face/pane/2/offset/x 0 [parent-face/pane/2/offset/x: parent-face/pane/2/offset/x + 200 show parent-face]] data: 'right ] do face/r-arw/init ][ face/r-arw/offset: as-pair (face/size/x - 20) 0 face/l-arw/offset: as-pair (face/size/x - 40) 0 ] show face/pane ][ face/r-arw/offset: as-pair (face/size/x - 20) 0 face/l-arw/offset: as-pair (face/size/x - 40) 0 show face/pane ] ][ if face/dir-buttons [ hide face/r-arw hide face/l-arw face/dir-buttons: false ] ] ] ] ] init: has [tab-offset last-tab container widg] [ ; create main display area insert pane make face [ offset: 0x20 edge: default-edge] ; add tabs tab-offset: 0x0 insert tail pane make face [ size: 1000x20 offset: 0x0 pane: [] color: none ] container: pane/2 foreach [title spec] data [ insert tail container/pane make face [ offset: tab-offset size: 1x20 pane: [] text: title effect: reduce ['round edge-color 5 'draw copy []] resize: none font: make default-font [align: 'center valign: 'bottom] para: default-para feel: make default-feel [ over: func [face act pos] [ either act [ insert face/effect/draw compose [ ; compose required for AGG betas pen over-color line 3x1 (as-pair face/size/x - 4 1) line 2x2 (as-pair face/size/x - 3 2) line 1x3 (as-pair face/size/x - 2 3) ] show face ][ if face/parent-face/parent-face/pane/1/pane <> face/data [ ; clear unless selected clear face/effect/draw show face ] ] ] engage: function [face act event] [pf old-face] [ if event/type = 'down [ probe face/effect/draw pf: face/parent-face pf3: pf/parent-face if pf3/pane/1/pane = face/data [return] ; has a new tab been selected? clear face/effect/draw old-face: pick pf/pane pf3/data ; find previous tab old-face/resize: pf3/size ; remember last size old-face/size: old-face/size - 0x1 ; deflag old clear old-face/effect/draw face/size: face/size + 0x1 ; flag new face/feel/over face true 0x0 pf3/data: index? find pf/pane face ; set new pane# pf3/pane/1/pane: face/data ; init tab panel if pf3/size <> face/resize [ ; recursive resize span-resize pf3/pane/1 pf3/size - face/resize face/resize: pf3/size ] show pf3 ] ] ] ] last-tab: last container/pane last-tab/size/x: 10 + first size-text last-tab ; set tab title width display/layout "" spec last-tab ; generate tab spec into tab pane last-tab/data: last-tab/pane ; swap pane into data last-tab/pane: none ; clear pane last-tab/resize: size probe size ; original panel size tab-offset/x: tab-offset/x + last-tab/size/x ; set offset for next tab title ] widg: last container/pane container/size: as-pair (widg/offset/x + widg/size/x ) 20 container/pane/1/size: container/pane/1/size + 0x1 ; flag 1st tab data: 1 ; set pane# pane/1/pane: container/pane/1/data ; init tab panel container/pane/1/feel/over container/pane/1 true 0x0 ; flag first as active ] ]