World: r3wp
[View] discuss view related issues
older newer | first last |
Anton 26-Sep-2009 [9180x2] | Aha, I know what's probably happening. The scroll-panel contains a number of subfaces in a face hierarchy. You are probably not clicking on the scroll-panel face, but on one of its subfaces (which are laid on top of it, event-wise). If you look at scroll-panel.r, near the bottom of the rebol header, you will see the face hierarchy, with the two scrollers, the CROP-BOX and the SUBFACE inside the crop-box. The SUBFACE covers most of the area of the scroll-panel, and the two scrollers take some from the sides. You can test this idea by giving the scroll-panel an edge, then alt-clicking on the edge. You should get a positive identification then. But of course, this is probably not very useful to you. What (I assume) you will need to do is, given a face, find out if it is inside a scroll-panel (or inside a particular scroll-panel of yours). This is a little bit complicated, but I have done most of that coding already for mouse roll-wheel scrolling. (See scroll-wheel-handler.r, and demo-scroll-wheel-handler.r for how to use it.) |
Basically, you will want to make your own "right-click-handler.r", just copying scroll-wheel-handler.r's code and modifying the event type that is checked for to 'alt-down. Scroll-wheel-handler checks for an Anton-extended VID flag, SCROLL-WHEEL, to determine which face should handle the event. So I might also advise you define your own VID flag to indicate that a face handles alt-click, maybe call it simply ALT-DOWN like the event that triggers it, or CONTEXT-MENU-ACTIVE, or whatever you're doing. Then make sure that the faces you want to respond to your "right-click-handler.r" are flagged with this new flag. That's all, simple! | |
amacleod 26-Sep-2009 [9182] | I think I see what you are saying, but... Sounds like more than I want to tackle right now... I think I'm going to stick with hacking up scroll-panel.r (since it seems to work)...the whole app feels like a hacked mess anyway so when R3 is ready I'll rewrite it for R3...Where I hope alot of these problems will not exist.. Thank you for the help |
Graham 26-Sep-2009 [9183] | why not just follow the face up to its parent until you hit the scroll panel and then compare then? |
amacleod 26-Sep-2009 [9184] | not sure how to go about that.. |
Graham 26-Sep-2009 [9185] | doesn't each face have a value for parent-face ? |
Anton 27-Sep-2009 [9186x3] | That's exactly what I'm doing in scroll-wheel-handler. Starting with the face clicked on, I climb up to the parent-face iteratively until I find an ancestor of the face which is a scroll-panel. |
(or until there is no parent-face, which means we are at a top-level window face.) | |
amacleod, I thought all that complication would make you pause. And fair enough. I should say though that I've done the scroll-wheel-handler in the most proper way I can. It seems a pity not to take advantage of its structure. Anyway, it would be nice if you could say what you want to handle alt-click for. I'm still not sure why you want it. If that's clear to me, then I could probably make the new handler for you pretty quickly, as I'm more familiar with my code, obviously. | |
Henrik 27-Sep-2009 [9189x2] | Incidentally, the VID Extension Kit has a lot of functions to help in these situations for finding a specific face. To for example find the window a face sits in: root-face face |
if you look at the source, the file vid-funcs.r contains most of these functions. | |
BenBran 29-Sep-2009 [9191] | Hello All, I'm working with events but I'm stuck. Any help is appreciated. here is the code: rebol [ title: event testing] lo: [ text 100x100 "Hello" edge [size: 25x25 color: 255.0.0 effect: 'bevel] ;; <--edge set here works feel [ engage: func [face action event] [ if event/type = 'down [ face/color: 0.200.0 show face ] if event/type = 'up [ face/color: 0.0.200 show face ] ] over: func [face into pos] [ if equal? into True [ ;; face/edge: [size: 25x25 color: 0.255.0 effect: 'bevel] ;; <-- edge changed here probe face/edge ;; print into ;; show face ;; <-- doesn't render ] ;; if equal? into False [ ;; face/edge: [size: 25x25 color: 0.0.255 effect: 'bevel] ;; <-- edge changed here probe face/edge ;; print into ;; show face ;; <-- doesn't render ] ;; ] detect: func [face event] [] redraw: func [face action offset] [] ] ] view layout lo |
Steeve 29-Sep-2009 [9192x2] | replace the lines where: >>face/edge: [...] by >> face/edge: make face/edge [...] |
face/edge is an object, not a block | |
BenBran 29-Sep-2009 [9194x2] | Thanks Steeve. That did the trick. |
question: Why did I not have to 'make the edge initally? | |
Steeve 29-Sep-2009 [9196x2] | ahah, i was waiting for that question |
because the lo block you constructed contains a dialect, not rebol code. When you call the layout function, the dialect is processed and the values [edge [...]] are translated to code [face/edge: make face/edge [...]] | |
BenBran 29-Sep-2009 [9198] | Thanks. I'll let the brain gears process this for a while. |
Steeve 29-Sep-2009 [9199] | you can see the source of the layout function to have an idea of how the dialect is processed. But layout is an obfuscated function with too much dependencies with other hidden functions. It's rather difficult to have a whole understanding of how it works. It reclaims several years of training. |
BenBran 29-Sep-2009 [9200] | Then is something like this possible? or does the layout function always take input either at that location or the 'edge word as dialect? I guess the question could be... how do we know if we are creating code or dialect and does it matter? view layout [text 100x100 "Hello" edge: make/edge [size: 25x25 color: 0.0.255 effect: 'bevel]] |
Steeve 29-Sep-2009 [9201] | To see if you can, just try it (in your case it fails). |
Henrik 29-Sep-2009 [9202] | it won't work, because the edge is not a dialect keyword outside of 'with. |
BenBran 29-Sep-2009 [9203x2] | Sorry.... should have put the ';; <---- fails' comment next to the line. Hence the rambling questions.... |
Henrik, that makes sense. I'll look for docs on the 'with word. Thanks. | |
Henrik 29-Sep-2009 [9205] | Ben, see private message. |
james_nak 29-Sep-2009 [9206] | Thanks. That opens my eyes to what I refer to as Rebol Voodoo. One can easily forget the relationship between a dialect and Rebol. Good stuff. |
Steeve 29-Sep-2009 [9207] | It's the central point with Rebol, when a function is accepting a block as input, you can't guess if it will be processed as pure rebol code, list of data, or as a dialect (mixed data and commands). Data is code, Code is data. Never forget. |
james_nak 29-Sep-2009 [9208] | Are you kidding? It took me a long time before I stopped turning everything into a string with my own functions! :-) |
Steeve 29-Sep-2009 [9209x2] | i meant you can't guess until you read the documentation of a specific function. 'help and 'source are they magic keys. |
*the magical key | |
james_nak 29-Sep-2009 [9211] | Oh, I like the feeling when I can say "Oh, that's how it works." And then there's anamonitor. I can't tell you how many times I've gone back and forth with that tool. :-) |
BenBran 29-Sep-2009 [9212] | source.... I keep forgetting about that command. thanks for the reminder. |
amacleod 4-Oct-2009 [9213] | Having trouble changing the data in a drop-down list... mylist/list-data: new_stuff show mylist works the first time but not there after |
Maxim 4-Oct-2009 [9214] | you must clear /append in the same original block :-) |
amacleod 4-Oct-2009 [9215] | Sorry, not sure what you mean |
Maxim 4-Oct-2009 [9216] | you should clear the original block you supplied to the drop down list, and then append new items to it. that should work. |
amacleod 4-Oct-2009 [9217] | new_stuff: copy [] foreach book books [append new_stuff book] If this is what you mean, I'm doing it... |
Maxim 4-Oct-2009 [9218] | I'll write you up an example... its easy you'll see. |
Graham 4-Oct-2009 [9219] | insert clear head mylist/list-data new-data |
Maxim 4-Oct-2009 [9220x4] | it uses texts... |
rebol [] items: [] dark-colors: ["Blach" "Navy Blue" "Blood red"] light-colors: ["Gray" "Cyan" "Pink"] append items dark-colors view layout [ drpdn: choice with [texts: items] do [ probe drpdn/init probe drpdn/words probe drpdn/multi probe drpdn/feel ] toggle "hi" "low" [ clear items append items either face/data [light-colors][dark-colors] ] ] | |
you can also replace face/texts directly I think... | |
I left the old "do" trick which allows one to easily scan a face to look up how it works... not sure many realize they can do this. | |
amacleod 4-Oct-2009 [9224] | I was hoping to use the 'drop-down' style (not choice)...is there a difference with the function? |
Maxim 4-Oct-2009 [9225] | same thing... just replace choice by drop down |
amacleod 4-Oct-2009 [9226x3] | bingo! Thanks... why does newstuff: copy [] not work here? |
never mind | |
I got it | |
Janeks 22-Oct-2009 [9229] | Hi! I am trying to get running SoftInnov's captcha on my Linux. Documentation tels that it is : DRAW based : doesn't require View engine, just DRAW (can run with /Command on UNIX without Xlibs installed). But it seem is not right commandline switch - I am getting any way library errors. Is it the right commandline switch? Or do I need any way those linux libraries? P.S. I also tried -v |
older newer | first last |