MacRuby 0.3發布,支持Interface Builder,和創建GUI用的HotCocoa
作者 Werner Schuster ,譯者 賈曉楠 發布於 2008年9月24日 |
現在,MacRuby 0.3已經可以用了。
rb_nibtool是用Ruby寫的,還使用了 Ruby 1.9的Ripper庫。Ripper使用Ruby源,讓它能被Ruby代碼訪問——要麼作為Lexer標記流,要麼作為s表達式(相當於ParseTree,不過Ruby 1.9裏還沒有)。rb_nibtool根據Ruby源文件為.nib文件提供類名;
順便提一句:使用MacRuby和Interface Builder創建GUI是在OS X上的Ruby的一個選擇——而在Windows上,Ruby In Steel IDE能幫助Visual Studio創建GUI,要通過Ruby Connector使用IronRuby或MRI。
另一種創建GUI的方法是HotCocoa,它隨MacRuby一起提供,可以使用創建器的理念來創建GUI,類似於一些其它的Ruby工具,比如Ruby Shoes,以及其它Ruby GUI庫。大致了解一下HotCocoa的實現,看看創建方法名是如何映射到Cocoa GUI控件上的。到現在為止,關於HotCocoa的文檔幾乎沒有,因此唯一能參考的就是隨MacRuby一起提供的HotCocoa源碼和例程。
和其它Ruby工具包一樣,HotCocoa附帶了一個用來建立程序框架的工具:
HotCocoa程序是什麼樣子的呢?這裏有一個簡短的示例,用來列出所有加載的類及其父類的表格。這段代碼建立了一個GUI——請把代碼複製到HotCocoa創建的程序框架中的
查看原文:MacRuby 0.3 Release Brings Interface Builder Support, HotCocoa for GUI Building
一個較大的變化是方法調度器,它現在完全基於Objective-C運行時。MacRuby現在使用 Objective-C運行時來實現Ruby的類語義,並調度純Ruby方法。這是個非常重要的變化,因為這不僅簡化了大量的內核實現,還讓兩個世界之間的界限更加清晰。MacRuby現在支持用Cocoa來創建GUI—— 實際上創建GUI有兩種方法。一種是使用和Apple's XCode相配套的Interface Builder(IB)。用IB創建的GUI可以通過action和outlet(GUI元件收發消息用的)來連接到Ruby類。MacRuby提供了一 個用Ruby寫的工具來創建必要的元數據,用來映射到Ruby代碼構造器,例如從accessor和method映射到action和outlet。
[..]
在純Ruby的方麵,修複了很多bug,我們現在可以運行一些RubyGems命令,還可以安裝簡單的gem。但不要指望MacRuby能運行Rails!
rb_nibtool是用Ruby寫的,還使用了 Ruby 1.9的Ripper庫。Ripper使用Ruby源,讓它能被Ruby代碼訪問——要麼作為Lexer標記流,要麼作為s表達式(相當於ParseTree,不過Ruby 1.9裏還沒有)。rb_nibtool根據Ruby源文件為.nib文件提供類名;
attr_accessor
、attr_writer
和其它一些調用被解釋為outlet,一個標識符跟一個ib_action定義為一個action。最終,這些收集到的信息匯入一個.nib 文件,把GUI定義和Ruby代碼連接起來。順便提一句:使用MacRuby和Interface Builder創建GUI是在OS X上的Ruby的一個選擇——而在Windows上,Ruby In Steel IDE能幫助Visual Studio創建GUI,要通過Ruby Connector使用IronRuby或MRI。
另一種創建GUI的方法是HotCocoa,它隨MacRuby一起提供,可以使用創建器的理念來創建GUI,類似於一些其它的Ruby工具,比如Ruby Shoes,以及其它Ruby GUI庫。大致了解一下HotCocoa的實現,看看創建方法名是如何映射到Cocoa GUI控件上的。到現在為止,關於HotCocoa的文檔幾乎沒有,因此唯一能參考的就是隨MacRuby一起提供的HotCocoa源碼和例程。
和其它Ruby工具包一樣,HotCocoa附帶了一個用來建立程序框架的工具:
hotcocoa classlist該命令用來創建一個新程序,連同必須的庫和設置。
HotCocoa程序是什麼樣子的呢?這裏有一個簡短的示例,用來列出所有加載的類及其父類的表格。這段代碼建立了一個GUI——請把代碼複製到HotCocoa創建的程序框架中的
lib/application.rb
文件中:def startRake文件負責程序運行的所有細節——要運行它,執行:
application :name => "Classlist" do |app|
app.delegate = self
window :frame => [100, 100, 500, 500], :title => "Classlist" do |win|
# Add a button to - clicking shows the data in the table
win << button(:title => "Show classes", :bezel => :regular_square).on_action {
klasses = []
ObjectSpace::each_object(Class){|x|
klasses << {:klass => x.to_s, :ancestors => x.ancestors.join(',')}
}
@table.data = klasses
}
# create the table
@table = table_view(
:columns => [
column(:id => :klass, :text => "Class"),
column(:id => :ancestors, :text => "Ancestors")
] )
# put the table inside a scroll view
win << scroll_view(:layout => {:expand => [:width, :height]}) do |scroll|
scroll << @table
end
win.will_close { exit }
end
end
end
macrake要了解關於MacRuby的更多信息,請關注InfoQ對Laurent Sansonetti的訪談。
查看原文:MacRuby 0.3 Release Brings Interface Builder Support, HotCocoa for GUI Building
最後更新:2017-04-03 05:38:56