Hello, I'm just getting started with MacRuby and HotCocoa (was a longtime .NET developer, and wasn't interested in learning Cocoa until MacRuby came along). I have a simple HotCocoa app with just a table view, and I'd like the user to be able to drop a filename from the Finder onto the table view (or anywhere in my app). I can call registerForDraggedTypes() on my table view object successfully. But I'm not sure how to have events delegated to my Application class (or if that's even possible). Looking at the hotcocoa source for wrapping NSView (view.rb), I don't see delegate mappings for the draggingEntered or performDragOperation events. I think I need to do something like the mapping code does and write code like this: delegating "draggingEntered", :to => :dragging_entered but I don't know where I can or should do that, or if I'm even on the right track. Any hint of where I should get started would be appreciated. Thanks! Jeff
Hi Jeff, (Sorry for the late reply.) On Mar 14, 2009, at 9:09 PM, Jeff Cohen wrote:
Hello,
I'm just getting started with MacRuby and HotCocoa (was a longtime .NET developer, and wasn't interested in learning Cocoa until MacRuby came along). I have a simple HotCocoa app with just a table view, and I'd like the user to be able to drop a filename from the Finder onto the table view (or anywhere in my app). I can call registerForDraggedTypes() on my table view object successfully. But I'm not sure how to have events delegated to my Application class (or if that's even possible).
Looking at the hotcocoa source for wrapping NSView (view.rb), I don't see delegate mappings for the draggingEntered or performDragOperation events. I think I need to do something like the mapping code does and write code like this:
delegating "draggingEntered", :to => :dragging_entered
but I don't know where I can or should do that, or if I'm even on the right track.
Any hint of where I should get started would be appreciated.
I don't think HotCocoa exposes drag and drop facilities yet. In general drag and drop in Cocoa is non trivial to do (esp. if you want to integrate it with complex views such as NSTableViews). The following article describes how to implement drag and drop in Cocoa: http://developer.apple.com/documentation/Cocoa/Conceptual/DragandDrop/Dragan... It even has a special section dedicated to NSTableViews. You should be able to do everything described in this article using "pure" MacRuby code but if you want to use some kind of syntax sugar via HotCocoa I'm afraid you will have to wait until someone implements them. HTH, Laurent
Hi Laurant, Thanks a lot for your reply. And perhaps I misspoke somewhat - I'm not trying to implement full drag and drop within my application, but only receive simple filename drop events that originate from outside the application. I think that it's just a matter of adding a few extra delegate mappings, but I don't understand how to "extend" more mappings into the hotcocoa wrapper classes. Perhaps instead I will try to build from source and add the mappings there, and use a local build to test with. If a miracle occurs and I can figure it out, I will submit a patch. :-) Thanks again! Jeff On Mon, Mar 16, 2009 at 1:02 PM, Laurent Sansonetti <lsansonetti@apple.com>wrote:
Hi Jeff,
(Sorry for the late reply.)
On Mar 14, 2009, at 9:09 PM, Jeff Cohen wrote:
Hello,
I'm just getting started with MacRuby and HotCocoa (was a longtime .NET developer, and wasn't interested in learning Cocoa until MacRuby came along). I have a simple HotCocoa app with just a table view, and I'd like the user to be able to drop a filename from the Finder onto the table view (or anywhere in my app). I can call registerForDraggedTypes() on my table view object successfully. But I'm not sure how to have events delegated to my Application class (or if that's even possible).
Looking at the hotcocoa source for wrapping NSView (view.rb), I don't see delegate mappings for the draggingEntered or performDragOperation events. I think I need to do something like the mapping code does and write code like this:
delegating "draggingEntered", :to => :dragging_entered
but I don't know where I can or should do that, or if I'm even on the right track.
Any hint of where I should get started would be appreciated.
I don't think HotCocoa exposes drag and drop facilities yet. In general drag and drop in Cocoa is non trivial to do (esp. if you want to integrate it with complex views such as NSTableViews).
The following article describes how to implement drag and drop in Cocoa:
http://developer.apple.com/documentation/Cocoa/Conceptual/DragandDrop/Dragan...
It even has a special section dedicated to NSTableViews.
You should be able to do everything described in this article using "pure" MacRuby code but if you want to use some kind of syntax sugar via HotCocoa I'm afraid you will have to wait until someone implements them.
HTH, Laurent _______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
You can define your own mapping within your app or extend the existing ones, delegation can also be added on each instance of any object. Here is a sample app I wrote with a custom mapping (which was later on merged in HotCocoa): http://github.com/mattetti/macruby-examples/blob/fe06617645c8809183fb15bca02... You can see that I defined my mapping like any other mappings and just required the file in my application.rb file: http://github.com/mattetti/macruby-examples/blob/fe06617645c8809183fb15bca02... - Matt 2009/3/16 Jeff Cohen <cohen.jeff@gmail.com>
Hi Laurant,
Thanks a lot for your reply. And perhaps I misspoke somewhat - I'm not trying to implement full drag and drop within my application, but only receive simple filename drop events that originate from outside the application. I think that it's just a matter of adding a few extra delegate mappings, but I don't understand how to "extend" more mappings into the hotcocoa wrapper classes.
Perhaps instead I will try to build from source and add the mappings there, and use a local build to test with. If a miracle occurs and I can figure it out, I will submit a patch. :-)
Thanks again! Jeff
On Mon, Mar 16, 2009 at 1:02 PM, Laurent Sansonetti <lsansonetti@apple.com
wrote:
Hi Jeff,
(Sorry for the late reply.)
On Mar 14, 2009, at 9:09 PM, Jeff Cohen wrote:
Hello,
I'm just getting started with MacRuby and HotCocoa (was a longtime .NET developer, and wasn't interested in learning Cocoa until MacRuby came along). I have a simple HotCocoa app with just a table view, and I'd like the user to be able to drop a filename from the Finder onto the table view (or anywhere in my app). I can call registerForDraggedTypes() on my table view object successfully. But I'm not sure how to have events delegated to my Application class (or if that's even possible).
Looking at the hotcocoa source for wrapping NSView (view.rb), I don't see delegate mappings for the draggingEntered or performDragOperation events. I think I need to do something like the mapping code does and write code like this:
delegating "draggingEntered", :to => :dragging_entered
but I don't know where I can or should do that, or if I'm even on the right track.
Any hint of where I should get started would be appreciated.
I don't think HotCocoa exposes drag and drop facilities yet. In general drag and drop in Cocoa is non trivial to do (esp. if you want to integrate it with complex views such as NSTableViews).
The following article describes how to implement drag and drop in Cocoa:
http://developer.apple.com/documentation/Cocoa/Conceptual/DragandDrop/Dragan...
It even has a special section dedicated to NSTableViews.
You should be able to do everything described in this article using "pure" MacRuby code but if you want to use some kind of syntax sugar via HotCocoa I'm afraid you will have to wait until someone implements them.
HTH, Laurent _______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
Hi Matt, I think the problem is that I'm trying to add more event handlers for an already-defined HotCocoa class. Here's a snippet of the top of my application.rb: # application.rb require 'hotcocoa' require 'logger' # Replace the following code with your own hotcocoa code HotCocoa::Mappings.map :view => :NSView do delegating "draggingEntered", :to => :dragging_entered end class Application... [snip] Now, inside my Application#start method, I eventually have code like this: [line 50] def create_table_view [line 51] @grid_view = layout_view :layout => {:expand => [:width, :height]}, :margin => 0, :spacing => 0 do |view| and when I have my custom mappings at the top of the file, I then get this error when I try to run macrake (I don't get this error if I comment out my custom mapping lines at the top): $ railsinfo: macrake (in /Users/jcohen/dev/sandbox/railsinfo) /Library/Frameworks/MacRuby.framework/Versions/0.4/usr/lib/ruby/1.9.1/hotcocoa/mapper.rb:59:in `eval': undefined method `layout=' for #<HotCocoa::LayoutView:0x800598de0> (NoMethodError) from /Library/Frameworks/MacRuby.framework/Versions/0.4/usr/lib/ruby/1.9.1/hotcocoa/mapper.rb:59:in `eval' from /Library/Frameworks/MacRuby.framework/Versions/0.4/usr/lib/ruby/1.9.1/hotcocoa/mapper.rb:59:in `block (2 levels) in map_method' from /Library/Frameworks/MacRuby.framework/Versions/0.4/usr/lib/ruby/1.9.1/hotcocoa/mapper.rb:51:in `each' from /Library/Frameworks/MacRuby.framework/Versions/0.4/usr/lib/ruby/1.9.1/hotcocoa/mapper.rb:51:in `block in map_method' from /Users/jcohen/dev/hotcocoa/railsinfo/Railsinfo.app/Contents/Resources/lib/application.rb:51:in `create_table_view' Unless I'm wrong, with your ProgressIndicator exmaple, you were defining a completely new class mapping. But since I'm trying to "reopen" NSView so to speak, I tihnk the HotCocoa::Mappings.map call might be messing up what was already mapped for NSView. I'll keep investigating... let me know if you think I might be right, or if I'm off my rocker. Thanks again! Jeff 2009/3/17 Matt Aimonetti <mattaimonetti@gmail.com>
You can define your own mapping within your app or extend the existing ones, delegation can also be added on each instance of any object.
Here is a sample app I wrote with a custom mapping (which was later on merged in HotCocoa):
http://github.com/mattetti/macruby-examples/blob/fe06617645c8809183fb15bca02...
You can see that I defined my mapping like any other mappings and just required the file in my application.rb file: http://github.com/mattetti/macruby-examples/blob/fe06617645c8809183fb15bca02...
- Matt
2009/3/16 Jeff Cohen <cohen.jeff@gmail.com>
Hi Laurant,
Thanks a lot for your reply. And perhaps I misspoke somewhat - I'm not trying to implement full drag and drop within my application, but only receive simple filename drop events that originate from outside the application. I think that it's just a matter of adding a few extra delegate mappings, but I don't understand how to "extend" more mappings into the hotcocoa wrapper classes.
Perhaps instead I will try to build from source and add the mappings there, and use a local build to test with. If a miracle occurs and I can figure it out, I will submit a patch. :-)
Thanks again! Jeff
On Mon, Mar 16, 2009 at 1:02 PM, Laurent Sansonetti < lsansonetti@apple.com> wrote:
Hi Jeff,
(Sorry for the late reply.)
On Mar 14, 2009, at 9:09 PM, Jeff Cohen wrote:
Hello,
I'm just getting started with MacRuby and HotCocoa (was a longtime .NET developer, and wasn't interested in learning Cocoa until MacRuby came along). I have a simple HotCocoa app with just a table view, and I'd like the user to be able to drop a filename from the Finder onto the table view (or anywhere in my app). I can call registerForDraggedTypes() on my table view object successfully. But I'm not sure how to have events delegated to my Application class (or if that's even possible).
Looking at the hotcocoa source for wrapping NSView (view.rb), I don't see delegate mappings for the draggingEntered or performDragOperation events. I think I need to do something like the mapping code does and write code like this:
delegating "draggingEntered", :to => :dragging_entered
but I don't know where I can or should do that, or if I'm even on the right track.
Any hint of where I should get started would be appreciated.
I don't think HotCocoa exposes drag and drop facilities yet. In general drag and drop in Cocoa is non trivial to do (esp. if you want to integrate it with complex views such as NSTableViews).
The following article describes how to implement drag and drop in Cocoa:
http://developer.apple.com/documentation/Cocoa/Conceptual/DragandDrop/Dragan...
It even has a special section dedicated to NSTableViews.
You should be able to do everything described in this article using "pure" MacRuby code but if you want to use some kind of syntax sugar via HotCocoa I'm afraid you will have to wait until someone implements them.
HTH, Laurent _______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
participants (3)
-
Jeff Cohen
-
Laurent Sansonetti
-
Matt Aimonetti