• [^] # Re: Ruby 1.8.0 est sorti

    Posté par . En réponse à la dépêche Ruby 1.8.0 est sorti. Évalué à 3.

    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 ... ;-)