[macruby-changes] [625] MacRuby/trunk/sample-macruby/GrowlNotifier

source_changes at macosforge.org source_changes at macosforge.org
Fri Sep 26 17:25:29 PDT 2008


Revision: 625
          http://trac.macosforge.org/projects/ruby/changeset/625
Author:   psychs at limechat.net
Date:     2008-09-26 17:25:29 -0700 (Fri, 26 Sep 2008)
Log Message:
-----------
added growl sample using hotcocoa

Added Paths:
-----------
    MacRuby/trunk/sample-macruby/GrowlNotifier/hotcocoa_growl.rb
    MacRuby/trunk/sample-macruby/GrowlNotifier/hotcocoa_sample.rb

Added: MacRuby/trunk/sample-macruby/GrowlNotifier/hotcocoa_growl.rb
===================================================================
--- MacRuby/trunk/sample-macruby/GrowlNotifier/hotcocoa_growl.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/GrowlNotifier/hotcocoa_growl.rb	2008-09-27 00:25:29 UTC (rev 625)
@@ -0,0 +1,73 @@
+require 'hotcocoa'
+
+class Growl < NSObject
+  include HotCocoa
+  
+  GROWL_IS_READY = "Lend Me Some Sugar; I Am Your Neighbor!"
+  GROWL_NOTIFICATION_CLICKED = "GrowlClicked!"
+  GROWL_NOTIFICATION_TIMED_OUT = "GrowlTimedOut!"
+  GROWL_KEY_CLICKED_CONTEXT = "ClickedContext"
+  
+  PRIORITIES = {
+    :emergency =>  2,
+    :high      =>  1,
+    :normal    =>  0,
+    :moderate  => -1,
+    :very_low  => -2,
+  }
+  
+  def register(app_name, notifications, default_notifications=nil, icon=nil)
+    @app_name = app_name
+    @app_icon = icon || NSApplication.sharedApplication.applicationIconImage
+    @notifications = notifications
+    @default_notifications = default_notifications || notifications
+    register_to_growl!
+  end
+  
+  def notify(name, title, desc, options={})
+    dic = {
+      :NotificationName => name,
+      :NotificationTitle => title,
+      :NotificationDescription => desc,
+      :NotificationPriority => PRIORITIES[options[:priority]] || options[:priority] || 0,
+      :ApplicationName => @app_name,
+      :ApplicationPID => self.class.pid,
+    }
+    dic[:NotificationIcon] = options[:icon].TIFFRepresentation if options[:icon]
+    dic[:NotificationSticky] = 1 if options[:sticky]
+    
+    context = {}
+    context[:user_click_context] = options[:click_context] if options[:click_context]
+    dic[:NotificationClickContext] = context unless context.empty?
+    
+    notification :distributed => true, :name => :GrowlNotification, :info => dic
+  end
+  
+  private
+  
+  def self.pid
+    NSProcessInfo.processInfo.processIdentifier.to_i
+  end
+  
+  def register_to_growl!
+    on_notification(:distributed => true, :named => GROWL_IS_READY) do |n|
+      register_to_growl!
+    end
+
+    on_notification(:distributed => true, :named => "#{@app_name}-#{pid}-#{GROWL_NOTIFICATION_CLICKED}") do |n|
+      puts '@@@ on clicked'
+    end
+
+    on_notification(:distributed => true, :named => "#{@app_name}-#{pid}-#{GROWL_NOTIFICATION_TIMED_OUT}") do |n|
+      puts '@@@ on timed out'
+    end
+  
+    dic = {
+      :ApplicationName => @app_name,
+      :ApplicationIcon => @app_icon.TIFFRepresentation,
+      :AllNotifications => @notifications,
+      :DefaultNotifications => @default_notifications
+    }
+    notification :distributed => true, :name => :GrowlApplicationRegistrationNotification, :info => dic
+  end
+end


Property changes on: MacRuby/trunk/sample-macruby/GrowlNotifier/hotcocoa_growl.rb
___________________________________________________________________
Added: svn:eol-style
   + native

Added: MacRuby/trunk/sample-macruby/GrowlNotifier/hotcocoa_sample.rb
===================================================================
--- MacRuby/trunk/sample-macruby/GrowlNotifier/hotcocoa_sample.rb	                        (rev 0)
+++ MacRuby/trunk/sample-macruby/GrowlNotifier/hotcocoa_sample.rb	2008-09-27 00:25:29 UTC (rev 625)
@@ -0,0 +1,34 @@
+require 'hotcocoa_growl'
+
+class GrowlController < NSObject
+  HELLO_TYPE = 'Hello message received'
+  
+  def init
+    if super
+      @g = Growl.alloc.init
+      @g.register('GrowlSample', [HELLO_TYPE])
+      @g.notify(HELLO_TYPE, 'Sticky', 'Hello world', :sticky => true, :click_context => Time.now.to_s)
+      @g.notify(HELLO_TYPE, 'Timed out', 'Hello world', :click_context => Time.now.to_s)
+      @count = 2
+      self
+    end
+  end
+
+  def growlNotifierClicked_context(sender, context)
+    puts "Clicked: #{context}"
+    checkCount
+  end
+
+  def growlNotifierTimedOut_context(sender, context)
+    puts "Timed out: #{context}"
+    checkCount
+  end
+  
+  def checkCount
+    @count -= 1
+    NSApp.terminate(nil) if @count == 0
+  end
+end
+
+g = GrowlController.alloc.init
+NSApp.run


Property changes on: MacRuby/trunk/sample-macruby/GrowlNotifier/hotcocoa_sample.rb
___________________________________________________________________
Added: svn:eol-style
   + native
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080926/dda7ef53/attachment.html 


More information about the macruby-changes mailing list