[MacRuby-devel] macruby/hotcocoa questions

Gary Weaver gary.weaver at duke.edu
Thu Feb 18 07:27:01 PST 2010


Hello,

I wrote a small application in HotCocoa/MacRuby just to get familiar 
with it ( http://github.com/garysweaver/hourz ). MacRuby and HotCocoa 
are awesome! I did have a few issues during development that I thought 
I'd share in case anyone can assist.

I'm using MacRuby 0.5 and HotCocoa 0.5.1 on OS X 10.6.2, was using 
TextMate vs. XCode to develop it. I have some experience with Ruby, but 
consider me a newbie to MacRuby, HotCocoa, and Cocoa (and Obj-C for that 
matter).

Here is what I ran into:

* If I take a stringValue from a text field, Marshal.dump it to a file, 
and then Marshal.load it, and put it back into the text field, it puts 
wierd characters in the end of the value like 'Òÿýÿÿÿ'. I think this 
might be a result of the class that I'm Marshalling that contains 
"include HotCocoa::Behaviors"? Not sure. I wasn't able to reproduce the 
issue via macirb using simple array or array of simple custom class 
Marshalling to file and back, but I'm able to reproduce the issue 
everytime in my app, but the class is more complicated.

* I wasn't able to get File.copy to work so I wrote my own method to 
copy a file. Could you provide an example that can copy a file in 
MacRuby using File.copy or using FileUtils?

* I wasn't able to set the (HotCocoa) layout_view frame or hidden 
properties successfully via calls by a button on_action. I could set 
them fine as long as they were called during startup of the application. 
For example, I wanted to do the following to hide a layout_view and 
replace it with another layout_view and vice versa in the same area of 
the window, but these methods only worked if being called during the 
initial load. I'm thinking maybe there is some sort of refresh method I 
need to call?

  def in_add_mode
    @edit_view.frame = [0, 0, 0, 0]
    @edit_view.hidden = true
    @add_view.frame = [0, 0, 0, 40]
    @add_view.hidden = false
  end
 
  def in_edit_mode
    @add_view.frame = [0, 0, 0, 0]
    @add_view.hidden = true
    @edit_view.frame = [0, 0, 0, 40]
    @edit_view.hidden = false
    # ...
  end

* (window).will_miniaturize { exit } works great to keep the app active 
(in the dock) after closing the window, but I don't know what to call 
such that I could close the window and then click on the icon in the 
dock it then show the window. Also when I close it, it doesn't appear to 
be in the hidden state, because the dock menu indicates that I can hide 
the window (but it is hidden).

* I couldn't figure out how to access the dock_menu in HotCocoa/MacRuby 
(I'm not using XCode or 
http://www.echographia.com/blog/2009/02/08/dynamic-dock-menus-in-macruby/ 
would have helped). I'd like to be able to manage it dynamically in 
HotCocoa if possible to be able to choose which Task I'm working on at 
the moment without showing the window. It would also be cool to 
dynamically change the dock icon when this happens to somehow indicate 
which task is being worked on (similar to Thunderbird showing the number 
of new messages, maybe I could show a number or some brief text?).

* I couldn't figure out how to alter the "About" part of the application 
to provide the authorship, license, and link to the project, although I 
know the version number is specified in config/build.yml. It would also 
be cool to have full control over that area and define the window, etc.

* I wasn't sure what the best practice would be to ensure that the 
window could be resized if someone somehow is using larger/smaller 
fonts, but to keep it from being resized so much that it is unusable. 
Maybe the right thing to do is to just specify a defined size/frame for 
the window that cannot be changed?

* Note that I might also look into storing the task data as xml or json. 
I'd rather it be hand-editable if needed. (I assume I could just put the 
array into a hash and use to_xml/from_xml or to_json/from_json.)

Again, thanks so much for all of your work on this. It is really cool to 
develop apps for OS X this quickly! (<16 hours total dev time, not 
including time to post to GitHub, and a lot of that was research, 
documentation, making an icon, etc.)

Thanks in advance for any assistance!

Gary


More information about the MacRuby-devel mailing list