Ben j'avais vaguement joué avec ruby il y a quelques mois, histoire de voire comment ça marchait, et j'avais plutôt bien aimé. Mais bon j'avais pas trop regardé son utilisation dans le cadre de GNUstep; du coup la news m'a donné envie de me pencher un peu dessus, et j'aime assez. C'est plutôt simple et tout. Par contre j'ai pas vu rapidement comment utiliser les fichiers Gorm, ce qui est un peu dommage :-/ mais bon je suis en train de me renseigner (à priori le binding ruby pour MacOS X n'a pas ce problème, mais peut être fonctionne-t-il sur un principe différent).
Sinon ça ressemble à ça :
require 'rigs'
Rigs.import("NSApplication")
Rigs.import("NSGraphicsContext")
Rigs.import("NSWindow")
Rigs.import("NSButton")
Rigs.import("NSProcessInfo")
Rigs.import("NSSelector")
Rigs.import("NSString")
class NSButtonTest
def initialize
@window = NSWindow.alloc
end
def applicationWillFinishLaunching (notification)
button = NSButton.new
button.setTarget(self)
button.setAction( selector("buttonPress:"))
button.setTitle("Print Quote")
button.sizeToFit()
rect = button.frame()
styleMask = NSTitledWindowMask | NSClosableWindowMask |
NSMiniaturizableWindowMask | NSResizableWindowMask
@window.initWithContentRect_styleMask_backing_defer \
(rect, styleMask, NSBackingStoreRetained, false)
@window.setTitle("GNUstep")
@window.setContentView (button)
end
def buttonPress (sender)
puts "Ca vous chatouille ou ca vous gratouille ?"
end
def applicationDidFinishLaunching (notification)
@window.center()
@window.makeKeyAndOrderFront(self)
end
def applicationShouldTerminateAfterLastWindowClosed (application)
true
end
end
# main
NSProcessInfo.processInfo.setProcessName("NSButtonTest")
application = NSApplication.sharedApplication
buttonTest = NSButtonTest.new
application.setDelegate(buttonTest)
application.run
Donc c'est très simple à mettre en oeuvre. On récupère l'objet application :
application = NSApplication.sharedApplication
on crée un bouton à partir d'une classe que l'on a écrite plus haut :
buttonTest = NSButtonTest.new
et on délègue à ce bouton les messages envoyés à NSApplication comme
applicationWillFinishLaunching (envoyé quand avant que l'application soit effectivement considéré comme lancée), applicationDidFinishLaunching (envoyé après que l'application soit considérée comme démarrée) et applicationShouldTerminateAfterLastWindowClosed (on indique qu'on veut que l'application se termine quand on ferme la fenêtre)
Ensuite, dans applicationWillFinishLaunching on crée un bouton (NSButton), on lui dit d'envoyer le message "buttonPress:" quand on clique dessus, on crée une fenêtre et on mets le bouton en tant que vue principale dans la fenêtre. Enfin dans la méthode "buttonPress:" on affiche un texte (qui sera donc affiché quand l'utilisateur cliquera sur le bouton). Enfin, dans applicationDidFinishLaunching on en profite pour centrer la fenêtre à l'écran et lui donner le focus.
Bref, pas bien compliqué, on fait exactement la même chose qu'en Objective-C quoi, sauf que c'est en ruby ... ;-)
[^] # Re: Ruby 1.8.0 est sorti
Posté par Nicolas Roard . En réponse à la dépêche Ruby 1.8.0 est sorti. Évalué à 3.
Sinon ça ressemble à ça : require 'rigs' Rigs.import("NSApplication") Rigs.import("NSGraphicsContext") Rigs.import("NSWindow") Rigs.import("NSButton") Rigs.import("NSProcessInfo") Rigs.import("NSSelector") Rigs.import("NSString") class NSButtonTest def initialize @window = NSWindow.alloc end def applicationWillFinishLaunching (notification) button = NSButton.new button.setTarget(self) button.setAction( selector("buttonPress:")) button.setTitle("Print Quote") button.sizeToFit() rect = button.frame() styleMask = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask @window.initWithContentRect_styleMask_backing_defer \ (rect, styleMask, NSBackingStoreRetained, false) @window.setTitle("GNUstep") @window.setContentView (button) end def buttonPress (sender) puts "Ca vous chatouille ou ca vous gratouille ?" end def applicationDidFinishLaunching (notification) @window.center() @window.makeKeyAndOrderFront(self) end def applicationShouldTerminateAfterLastWindowClosed (application) true end end # main NSProcessInfo.processInfo.setProcessName("NSButtonTest") application = NSApplication.sharedApplication buttonTest = NSButtonTest.new application.setDelegate(buttonTest) application.run Donc c'est très simple à mettre en oeuvre. On récupère l'objet application : application = NSApplication.sharedApplication on crée un bouton à partir d'une classe que l'on a écrite plus haut : buttonTest = NSButtonTest.newet on délègue à ce bouton les messages envoyés à NSApplication comme applicationWillFinishLaunching (envoyé quand avant que l'application soit effectivement considéré comme lancée), applicationDidFinishLaunching (envoyé après que l'application soit considérée comme démarrée) et applicationShouldTerminateAfterLastWindowClosed (on indique qu'on veut que l'application se termine quand on ferme la fenêtre) Ensuite, dans applicationWillFinishLaunching on crée un bouton (NSButton), on lui dit d'envoyer le message "buttonPress:" quand on clique dessus, on crée une fenêtre et on mets le bouton en tant que vue principale dans la fenêtre. Enfin dans la méthode "buttonPress:" on affiche un texte (qui sera donc affiché quand l'utilisateur cliquera sur le bouton). Enfin, dans applicationDidFinishLaunching on en profite pour centrer la fenêtre à l'écran et lui donner le focus. Bref, pas bien compliqué, on fait exactement la même chose qu'en Objective-C quoi, sauf que c'est en ruby ... ;-)