Recommend Me


Mercredi 13 juin 2007

Utiliser la télécommande Apple avec RubyCocoa…

Classé dans : Cocoa, MacOSX, Ruby — greg @ 12:58

Le site RubyCocoa.com propose plusieurs articles très intéressants, dont un particulièrement sympathique, concernant l’utilisation de la télécommande Apple.

Voici un petit résumé…

Commencez par télécharger les sources du projet “Apple Remote Controller Wrapper Class” de Martin Kahr. Ouvrez le projet avec Xcode et supprimez la cible AppleRemote. Pour cela, dans le panneau Groups & Files, dépliez l’entrée Target, sélectionnez AppleRemote et supprimez-la.

Supprimer La Target AppleRemote

Dans le menu Project de Xcode, choisissez l’entrée New Target et sélectionnez Framework de l’entrée Cocoa dans l’assistant. Nommez la cible AppleRemote et terminez (bouton Finish). Vous pouvez fermer la fenêtre d’information qui s’est ouverte. Déployez la cible AppleRemote dans le panneau Groups & Files et glissez les fichiers AppleRemote.h dans Copy Headers, AppleRemote.m dans Compile Sources et IOKit.framework dans Link Binary With Libraries. Voici ce que vous devez avoir :

Nouvel Target

Vous pouvez maintenant compiler.

Nous avons maintenant un Framework permettant d’utiliser la télécommande. Pour l’utiliser avec RubyCocoa, il suffit de le charger de la façon suivante :

require ‘osx/cocoa’
OSX::NSBundle.bundleWithPath("/home/greg/Library/Frameworks/AppleRemote.framework").load
OSX.ns_import :AppleRemote

Dans l’appel à bundleWithPath, modifier éventuellement le chemin vers le framework AppleRemote.framework. Dans mon cas je l’ai placé dans le sous-répertoire Library/Frameworks/ de mon home.

Il faut ensuite créer un delegate qui se chargera de traiter les actions :

class AppleRemoteDelegate < OSX::NSObject

  addRubyMethod_withType(‘appleRemoteButton:pressedDown:’, ‘v@:ii’)  

  def appleRemoteButton_pressedDown(buttonIdentifier, pressedDown)
    puts "bouton #{buttonIdentifier}, pressé #{pressedDown}"
  end

end

Notre delegate à une simple méthode appleRemoteButton_pressedDown chargé d’imprimer le numéro et l’état lorsqu’un bouton est pressé sur la télécommande. L’appel à addRubyMethod_withType permet de passer au runtime Objective-C la signature correcte à utiliser pour la méthode de notre delegate. Le premier paramètre donne le nom de la méthode et le second précise sa signature. le v permet de préciser que la valeur de retour de la méthode est de type void. Le @ indique que le message doit être envoyé à un objet Objectif-C du type id. le : indique que le message est décrit par un type Objectif-C spécial appelé sélecteur. Les deux ii donnent le type des arguments de la méthode, dans notre cas, des entiers.

Enregistrez le code précédent dans un fichier remote.rb. Nous pouvons maintenant faire un test avec irb :

>> require ‘remote’
=> true
>> a = OSX::AppleRemote.alloc.init
=> #<OSX::AppleRemote:0xa6d984 class=’AppleRemote’ id=0×12f64b0>
>> d = AppleRemoteDelegate.alloc.init
=> #<AppleRemoteDelegate:0xa6c0e8 class=’AppleRemoteDelegate’ id=0×12f9d00>
>> a.setDelegate d
=> nil
>> a.startListening 0
=> nil
>> OSX::NSApplication.sharedApplication.run
button 2, pressed 1
button 3, pressed 1
button 4, pressed 1
button 0, pressed 1
button 0, pressed 0
button 5, pressed 1
button 1, pressed 1
button 1, pressed 0

Whaou©®™ !

• • •

Pas de commentaire »

Pas encore de commentaire.

RSS des commentairesTrackBack URI

Laisser un commentaire

You must be logged in to post a comment.

Powered by: WordPress • Template adapted from the Simple Green' Wench theme - RSS