simonwhel-/E1597aS9LQAvxtiuMwx3w@public.gmane.org
2008-May-17 20:24 UTC
RoRUIQ … sort of … I think …
Email : simonwhel-/E1597aS9LQAvxtiuMwx3w@public.gmane.org As Dr. Nick of the Simpsons sez : Hi Everybody ! I’m working on my 1st Ruby on Rails (RoR) project. It is a web-based application. Unfortunately, I’ve come up against a problem that I don’t really know how to solve. So, I figured I would ask the folks on this list for some advice and some suggestions on what they would think would be the best way for me to proceed. Actually, the problem I alluded to above isn’t necessarily a Ruby or a Rails problem. In fact, it is a User Interface problem. I fully realize that RoR is primarily a server based software technology. The problem is that I have a RoR based web application that has a fairly complex User Interface that has to be implemented by me. I actually understand not only what has to be done I also understand pretty well how what has to be done should be done (i.e. : by that I mean I understand the actual psuedocode steps that have to be followed to implement the User Interface). What I need to know is what software technology, framework or package (e.g. : Javascript, XHTML, Flash or whatever) is the best thing to use to implement the User Interface I will shortly describe. You should also bear in mind that whatever User Interface solution is implemented it has to easily communicate back and forth with the RoR software that is sitting on the web server. Here’s a description of what I have to do : I have a set of 4 concentric dials. Each dial has 12 separate positions on it. If you like, although they aren’t really clock faces, if it makes it easier for you to think about the problem, you could think of them as “4 concentric 12 hour clock faces”. I need to be able to do the following : 1. Move the mouse over a location on 1 of the 4 clock faces. 2. Click on the mouse while over 1 of the clock faces. 3. Hold the mouse button down. 4. Move the mouse along one of the concentric clock faces to a new position. 5. Release the mouse button while over the same concentric clock face. 6. The dial over which the mouse moved needs to be moved independently of the other 3 concentric dials to the new position that the mouse moved to as described in steps 1 through 5 above. Let me give you an example of what I mean in order to make what I’m trying to do clearer. Let’s assume that all of the 4 concentric dials are lined up the way similar clock dials would be; i.e. : they all have the 12 o’clock dial position lined up at the top of the image. You could think of the initial dial set up as : Going from the Outer most dial (Dial 1) to the innermost dial (Dial 4) moving along each dial in a clockwise direction from the 12 o’clock position at the top : Dial 4 : 12-01-02-03-04-05-06-07-08-09-10-11 (Outermost dial) Dial 3 : 12-01-02-03-04-05-06-07-08-09-10-11 Dial 2 : 12-01-02-03-04-05-06-07-08-09-10-11 Dial 1 : 12-01-02-03-04-05-06-07-08-09-10-11 (Innermost dial) Now, if I want to move the “12” position on the 2nd outermost dial clockwise 3 positions then I would do the following : 1. Move the mouse over the “12” position on the 2nd outermost dial. 2. Click on the mouse. 3. Hold the mouse button down. 4. While still holding the mouse button down, Move the mouse to the “3”position on the 2nd outermost dial. 5. Once the mouse has been moved so that it’s now over the “3” position on the 2nd outermost dial release the mouse button. 6. In response, the RoR application redraws the image of the 4 concentric dials with the 2nd outermost dial moved 3 positions clockwise. You could think of the final dial set up as : Going from the Outer most dial (Dial 1) to the innermost dial (Dial 4) moving along each dial in a clockwise direction : Dial 4 : 12-01-02-03-04-05-06-07-08-09-10-11 (Outermost dial) Dial 3 : 09-10-11-12-01-02-03-04-05-06-07-08 Dial 2 : 12-01-02-03-04-05-06-07-08-09-10-11 Dial 1 : 12-01-02-03-04-05-06-07-08-09-10-11 (Innermost dial) So, it seems to me that my RoR web based application has to be able to do the following : 1. Detect when the mouse enters the image containing the 4 concentric dials. This would be some sort of “Mouse Enter” event. 2. Track the mouse while it is moving over the image of the 4 concentric dials. This would be some kind of “Mouse Track” or “Mouse Move” event that would know the position of the mouse relative to, say, the upper left corner of the image at any given time. 3. Detect when the mouse button is pressed over the image. This would be a “Mouse Down” event that would know the position of the mouse relative to the upper left corner of the image at the time the “Mouse Down” event occurred. 4. Detect when the mouse button is released over an image. This would be a “Mouse Up” event that would know the position of the mouse relative to the upper left corner of the image at then time the mouse button was released. 5. Once this sequence of entering the image, detecting a “Mouse Down” event followed by a “Mouse Move” event followed by a “Mouse Up” event, the RoR web server based application then has to be notified of the following : a) The ‘Hour” position inside the one of the 4 dials that the “MouseDown” event occurred. b) The ‘Hour” position inside the one of the 4 dials that the “MouseUp” event occurred. 6. The RoR application would then calculate how many positions clockwise (or, for that matter, counterclockwise) that the concentric dial where the aforementioned sequence of events occurred has to be moved. 7. The RoR application then redraws the set of 4 concentric dials reflecting the new position of the dial that was just moved. 8. The RoR application then sends the redrawn image up to the web interface. 9. The web interface then redraws the image. So, whatever software I have to use to implement this kind of behavior, that software needs to support the following events : 1. Mouse Enter : The mouse enters the image. 2. Mouse Down : The mouse button is pressed. 3. Mouse Move : The mouse is moved. 4. Mouse Up : The mouse button is released. 5. Mouse Exit : The mouse leaves the image. If there is software that can detect and handle the 5 mouse events I just listed above and knows the position of the mouse relative to say the upper left hand corner of the image in which any of these events occurs, then, because I know the geometry of the image containing the 4 concentric “clock” dials I can then figure out which of the 4 dials has to be moved clockwise or counter clockwise by the correct number of “hour” positions. I can then redraw the image to correctly reflect the changed position of any of 1 of the 4 concentric dials. So, folks (and, of course, folkettes (no sexist me !)) this is what, as far as I understand it, I need to do. So I guess my real questions are : 1. Can I do this inside Ruby on Rails ? And, if that is true, then how would I go about doing it ? 2. If I can’t do this from inside Ruby on Rails then what tools, and software packages, frameworks or languages would be the best way to go about doing this ? 3. Can you refer to me tools, software packages & frameworks that I could use to implement this kind of behavior ? 4. Can you recommend any references (either printed or preferably on the web) that I could read that would help me better understand what I need to do in order to implement this kind of behavior ? I guess I should also point out here that what I’m really trying to do here is essentially 2 things : 1. I don’t want to reinvent the wheel. In other words, if someone else has already worked out a solution to this problem or, at least, has created software that makes this problem easy to handle and implement then I’d much rather build on their work rather than recreate a time consuming, and possibly inferior version of what somebody else has already done. 2. Whatever solution is recommended I very much and most emphatically prefer that it integrate easily and seamlessly with the rest of the application that is being developed using Ruby on Rails. And finally, everybody, I’d like to thank all of you who’ve had either the patience or the unhealthy excessive amount of curiosity to actually read this rather massive missive to it’s very end (which, I can quite confidently assure you) will arrive shortly. So, if any you have any ideas, suggestions, advice or information on what you think would be the best way to go about solving the problem I’ve just laid out in such laborious, painstaking and tedious detail I would be very grateful and very much appreciate hearing from you. So, finally, I’d like to thank all of you for your help. All the best & talk to you soon … Simon. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---