Boîtes dans un layout. | |
Philippe | 18-Jan-2007/14:56:53+1:00 |
Salut, Ci-dessous un bout de code (issu d'un script de carl). Tel quel, il permet d'avoir une sorte de menu avec des boîtes déroulantes. Le code marche bien quand on l'utilise sur le layout de plus niveau (menu-window). Mais je voudrais que les boîtes déroulantes soient imbriquées dans la boite "Target" p1 ou un panel. Si on change le code au niveau de make-menus (fin du code) avec la box p1 comme conteneur cible, rien ne va plus. J'ai résolu une partie du pb, mais j'ai quand même un décalage d'offset et de size à chaque ouverture d'une box-menu. Cà doit être un truc tout bête à changer au niveau de size-menu, mais je séche. A vot'bon coeur ! menu-bar-color: coal menu-arrow-color: coal menu-window-size: 270x600 p1-box-size: 250x100 main-styles: stylize/master [ cat: txt 200x20 bold white menu-bar-color font [name: "Courrier" size: 10 ] ; btn: btn 50 font [name: "Courrier" size: 10 colors: [255.255.255 80.80.200] ] with [color: coal]; initial : button, after : btn ] size-menu: function [target][y face pane][ ; Resizes the menu according to current panels open. pane: target/pane until [ face: first pane y: second face/offset + face/size pane: next pane pane/1/style = 'cat ] y: y + 2 foreach f pane [ f/offset/y: y y: y + f/size/y + 1 ] target/size/y: y show target ] make-menus: function [target][a b][ ; For each menu above, create the necessary faces. forskip menus 2 [ set [a b] menus insert b [styles main-styles origin 0x0 space 0 across] b: layout/offset b 0x0 b/data: b/size b/size/y: 0 b/color: coal a: make-facet-bar a target a/data: b change skip menus 1 a repend target/pane [a b] ] menus: head menus size-menu target ] make-facet-bar: func [name target /local out bx tx] [ ; Creates a facet banner bar with arrow that opens and closes ; the facet detail panel. Layout just makes the basic faces. out: layout [ styles main-styles origin 0 at 3x4 bx: box menu-arrow-color 10x10 at 0x0 tx: cat para [origin: 18x2] [] ] bx/effect: copy [arrow 255.255.255 rotate 90] tx/pane: bx tx/size: 200x20 tx/action: bx/action: bind/copy [ op-menu self 4 >= length? self/pane/effect size-menu target ] in tx 'self tx/text: name tx ] op-menu: func [face state][ either state [ ; quand on ouvre la box if 4 >= length? face/pane/effect [ append face/pane/effect [rotate 90] face/data/size: face/data/data ] ][ ; quand on referme la box if 4 < length? face/pane/effect [ remove/part tail face/pane/effect -2 face/data/size/y: 0 ] ] ] open-menu: func [name state target] [ if name: select menus name [ op-menu name state size-menu target ] ] menus: [ test [ at 5x5 btn "OK" btn "Clic-me" [quit] ] test2 [btn "OK2" [quit]] ] menu-window: layout [ size menu-window-size origin 0 space 0x0 styles main-styles p1: box p1-box-size "Target" yellow frame black ] p1/pane: copy [] make-menus menu-window ;make-menus menu-window/pane/1 ; = p1 view menu-window | |
coccinelle | 18-Jan-2007/16:01:31+1:00 |
Ca vient de la fonction size-menu qu'il faut écrire plus ou moins comme çà : size-menu: function [target][y face pane][ ; Resizes the menu according to current panels open. pane: target/pane y: 0 while [pane/1/style <> 'cat] [ face: first pane y: second face/offset + face/size pane: next pane ] y: y + 2 foreach f pane [ f/offset/y: y y: y + f/size/y + 1 ] target/size/y: y show target ] | |
Philippe | 18-Jan-2007/17:02:50+1:00 |
Merci marco ! Cela marche. Je vais remettre cela dans le code complet à présent. ===Philippe | |
shadwolf | 18-Jan-2007/18:55:04+1:00 |
tiens ca me rappel que j'ai fait une widget menu pour rebgui et je ne sais pour quelle obcure raison AShley a finalement decidé de ne pas la mettre dans la "release officielle" | |
shadwolf | 18-Jan-2007/18:57:46+1:00 |
on peut la trouvée sur le wiki rebolfrance.info dans l'article "widgets on cooking" | |
Login required to Post. |