<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>icon-failed.png</filename>
    </added>
    <added>
      <filename>model/growl_support.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -673,6 +673,7 @@
 							&lt;int key=&quot;NSvFlags&quot;&gt;274&lt;/int&gt;
 							&lt;string key=&quot;NSFrame&quot;&gt;{{20, 44}, {531, 263}}&lt;/string&gt;
 							&lt;reference key=&quot;NSSuperview&quot; ref=&quot;84330098&quot;/&gt;
+							&lt;double key=&quot;NSViewAlphaValue&quot;&gt;0.000000e+00&lt;/double&gt;
 							&lt;bool key=&quot;NSEnabled&quot;&gt;YES&lt;/bool&gt;
 							&lt;object class=&quot;NSTextFieldCell&quot; key=&quot;NSCell&quot; id=&quot;2967395&quot;&gt;
 								&lt;int key=&quot;NSCellFlags&quot;&gt;-2079195584&lt;/int&gt;
@@ -689,7 +690,7 @@
 									&lt;int key=&quot;NSColorSpace&quot;&gt;1&lt;/int&gt;
 									&lt;bytes key=&quot;NSRGB&quot;&gt;MCAwIDAgMC43NQA&lt;/bytes&gt;
 								&lt;/object&gt;
-								&lt;object class=&quot;NSColor&quot; key=&quot;NSTextColor&quot;&gt;
+								&lt;object class=&quot;NSColor&quot; key=&quot;NSTextColor&quot; id=&quot;949216260&quot;&gt;
 									&lt;int key=&quot;NSColorSpace&quot;&gt;1&lt;/int&gt;
 									&lt;bytes key=&quot;NSRGB&quot;&gt;MSAxIDEAA&lt;/bytes&gt;
 								&lt;/object&gt;
@@ -699,7 +700,7 @@
 							&lt;reference key=&quot;NSNextResponder&quot; ref=&quot;84330098&quot;/&gt;
 							&lt;int key=&quot;NSvFlags&quot;&gt;1292&lt;/int&gt;
 							&lt;object class=&quot;NSPSMatrix&quot; key=&quot;NSDrawMatrix&quot;/&gt;
-							&lt;string key=&quot;NSFrame&quot;&gt;{{20, 20}, {99, 12}}&lt;/string&gt;
+							&lt;string key=&quot;NSFrame&quot;&gt;{{20, 20}, {74, 12}}&lt;/string&gt;
 							&lt;reference key=&quot;NSSuperview&quot; ref=&quot;84330098&quot;/&gt;
 							&lt;int key=&quot;NSpiFlags&quot;&gt;24842&lt;/int&gt;
 							&lt;double key=&quot;NSMinValue&quot;&gt;1.600000e+01&lt;/double&gt;
@@ -1480,6 +1481,10 @@
 					&lt;string&gt;515.IBPluginDependency&lt;/string&gt;
 					&lt;string&gt;516.IBPluginDependency&lt;/string&gt;
 					&lt;string&gt;518.IBPluginDependency&lt;/string&gt;
+					&lt;string&gt;518.IBViewIntegration.shadowBlurRadius&lt;/string&gt;
+					&lt;string&gt;518.IBViewIntegration.shadowColor&lt;/string&gt;
+					&lt;string&gt;518.IBViewIntegration.shadowOffsetHeight&lt;/string&gt;
+					&lt;string&gt;518.IBViewIntegration.shadowOffsetWidth&lt;/string&gt;
 				&lt;/object&gt;
 				&lt;object class=&quot;NSMutableArray&quot; key=&quot;dict.values&quot;&gt;
 					&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
@@ -1487,9 +1492,9 @@
 					&lt;string&gt;com.apple.InterfaceBuilderKit&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilderKit&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
-					&lt;string&gt;{{604, 354}, {285, 294}}&lt;/string&gt;
+					&lt;string&gt;{{470, -846}, {285, 294}}&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
-					&lt;string&gt;{{604, 354}, {285, 294}}&lt;/string&gt;
+					&lt;string&gt;{{470, -846}, {285, 294}}&lt;/string&gt;
 					&lt;integer value=&quot;0&quot; id=&quot;6&quot;/&gt;
 					&lt;string&gt;{{499, 593}, {285, 266}}&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
@@ -1505,9 +1510,9 @@
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
-					&lt;string&gt;{{476, 235}, {332, 396}}&lt;/string&gt;
+					&lt;string&gt;{{342, -965}, {332, 396}}&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
-					&lt;string&gt;{{476, 235}, {332, 396}}&lt;/string&gt;
+					&lt;string&gt;{{342, -965}, {332, 396}}&lt;/string&gt;
 					&lt;integer value=&quot;1&quot; id=&quot;5&quot;/&gt;
 					&lt;string&gt;{{497, 550}, {332, 396}}&lt;/string&gt;
 					&lt;reference ref=&quot;6&quot;/&gt;
@@ -1531,9 +1536,9 @@
 					&lt;reference ref=&quot;5&quot;/&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
 					&lt;reference ref=&quot;5&quot;/&gt;
-					&lt;string&gt;{{647, 562}, {371, 206}}&lt;/string&gt;
+					&lt;string&gt;{{513, -638}, {371, 206}}&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
-					&lt;string&gt;{{647, 562}, {371, 206}}&lt;/string&gt;
+					&lt;string&gt;{{513, -638}, {371, 206}}&lt;/string&gt;
 					&lt;reference ref=&quot;5&quot;/&gt;
 					&lt;string&gt;{{120, 647}, {371, 206}}&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
@@ -1559,9 +1564,9 @@
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
 					&lt;reference ref=&quot;5&quot;/&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
-					&lt;string&gt;{{418, 604}, {571, 327}}&lt;/string&gt;
+					&lt;string&gt;{{255, -596}, {571, 327}}&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
-					&lt;string&gt;{{418, 604}, {571, 327}}&lt;/string&gt;
+					&lt;string&gt;{{255, -596}, {571, 327}}&lt;/string&gt;
 					&lt;reference ref=&quot;6&quot;/&gt;
 					&lt;reference ref=&quot;5&quot;/&gt;
 					&lt;string&gt;{571, 303}&lt;/string&gt;
@@ -1575,6 +1580,10 @@
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.CocoaPlugin&lt;/string&gt;
+					&lt;real value=&quot;4.000000e+00&quot;/&gt;
+					&lt;reference ref=&quot;949216260&quot;/&gt;
+					&lt;real value=&quot;0.000000e+00&quot;/&gt;
+					&lt;real value=&quot;1.000000e+01&quot;/&gt;
 				&lt;/object&gt;
 			&lt;/object&gt;
 			&lt;object class=&quot;NSMutableDictionary&quot; key=&quot;unlocalizedProperties&quot;&gt;</diff>
      <filename>English.lproj/MainMenu.nib/designable.nib</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>English.lproj/MainMenu.nib/keyedobjects.nib</filename>
    </modified>
    <modified>
      <diff>@@ -8,18 +8,12 @@
 
 require 'osx/cocoa'
 require 'rubygems'
-require 'growl_notifier'
 require 'notification_hub'
+require 'growl_support'
 
 class ProjectController &lt; OSX::NSWindowController
-  include OSX
-  include NotificationHub
-  
-  GROWL_MESSAGE_TYPES = {:deployment_complete =&gt; &quot;Deployment completed&quot;,
-                         :deployment_started =&gt; &quot;Deployment started&quot;,
-                         :deployment_failed =&gt; &quot;Deployment failed&quot;,
-                         :deployment_canceled =&gt; &quot;Deployment cancelled&quot;}
-  
+  include OSX, NotificationHub, GrowlSupport
+    
   notify :add_host, :when =&gt; :host_fully_loaded
   notify :remove_host, :when =&gt; :host_removed
   notify :remove_loading, :when =&gt; :all_hosts_loaded
@@ -57,11 +51,6 @@ class ProjectController &lt; OSX::NSWindowController
     @status_hud_window.setFloatingPanel true
   end
   
-  def init_growl
-    @growl_notifier = Growl::Notifier.alloc.init
-    @growl_notifier.start('Macistrano', GROWL_MESSAGE_TYPES.collect {|key, value| value})
-  end
-  
   def remove_loading(notification)
     item = @statusItem.menu.itemWithTitle(&quot;Loading...&quot;)
     @statusItem.menu.removeItem(item) unless item.nil?
@@ -112,27 +101,13 @@ class ProjectController &lt; OSX::NSWindowController
   end
   
   def build_completed(notification)
-    icon = case notification.object.status
-    when &quot;success&quot;:
-      notify_growl GROWL_MESSAGE_TYPES[:deployment_complete], notification.object
-      &quot;success&quot;
-    when &quot;canceled&quot;:
-      notify_growl GROWL_MESSAGE_TYPES[:deployment_canceled], notification.object
-      &quot;canceled&quot;
-    when &quot;failed&quot;:
-      notify_growl GROWL_MESSAGE_TYPES[:deployment_failed], notification.object
-      &quot;failure&quot;
-    end
-    set_stage_submenu_enabled(notification.object, true, icon)
-    set_status_icon icon
+    set_stage_submenu_enabled(notification.object, true, notification.object.status)
+    set_status_icon(notification.object.status)
+    notify_growl(notification)
     @webistrano_controller.remove_deployment_timer(notification)
     @deployment_status_spinner.stopAnimation(self)
   end
 
-  def notify_growl(message, deployment)
-    @growl_notifier.notify(message, message, &quot;Stage #{deployment.stage.name} of project #{deployment.stage.project.name} (Host: #{deployment.stage.project.host.url})&quot;)
-  end
-  
   def set_status_icon(icon)
     @statusItem.setImage get_icon(icon)
   end</diff>
      <filename>controller/project_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -19,7 +19,7 @@
 		FE3CB0830E902DF8009138A1 /* macistrano.icns in Resources */ = {isa = PBXBuildFile; fileRef = FE3CB0820E902DF8009138A1 /* macistrano.icns */; };
 		FE517D860DDF2B5B00CA0249 /* load_operation_queue.rb in Resources */ = {isa = PBXBuildFile; fileRef = FE517D850DDF2B5B00CA0249 /* load_operation_queue.rb */; };
 		FE5F03D90DC11830009DA75F /* webistrano_controller.rb in Resources */ = {isa = PBXBuildFile; fileRef = FE5F03D80DC11830009DA75F /* webistrano_controller.rb */; };
-		FE5F041F0DC11D5B009DA75F /* icon-failure.png in Resources */ = {isa = PBXBuildFile; fileRef = FE5F041E0DC11D5B009DA75F /* icon-failure.png */; };
+		FE5F041F0DC11D5B009DA75F /* icon-failed.png in Resources */ = {isa = PBXBuildFile; fileRef = FE5F041E0DC11D5B009DA75F /* icon-failed.png */; };
 		FE5F04210DC11D6A009DA75F /* icon-inactive.png in Resources */ = {isa = PBXBuildFile; fileRef = FE5F04200DC11D6A009DA75F /* icon-inactive.png */; };
 		FE5F04240DC11D75009DA75F /* icon-success-building.png in Resources */ = {isa = PBXBuildFile; fileRef = FE5F04220DC11D75009DA75F /* icon-success-building.png */; };
 		FE5F04250DC11D75009DA75F /* icon-success.png in Resources */ = {isa = PBXBuildFile; fileRef = FE5F04230DC11D75009DA75F /* icon-success.png */; };
@@ -43,6 +43,7 @@
 		FEC9EB780DE099B900ABA9C8 /* project.rb in Resources */ = {isa = PBXBuildFile; fileRef = FEC9EB700DE099B900ABA9C8 /* project.rb */; };
 		FEC9EB790DE099B900ABA9C8 /* stage.rb in Resources */ = {isa = PBXBuildFile; fileRef = FEC9EB710DE099B900ABA9C8 /* stage.rb */; };
 		FEC9EB7A0DE099B900ABA9C8 /* task.rb in Resources */ = {isa = PBXBuildFile; fileRef = FEC9EB720DE099B900ABA9C8 /* task.rb */; };
+		FEE6BA300F2879F700402101 /* growl_support.rb in Resources */ = {isa = PBXBuildFile; fileRef = FEE6BA2F0F2879F700402101 /* growl_support.rb */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXCopyFilesBuildPhase section */
@@ -76,7 +77,7 @@
 		FE3CB0820E902DF8009138A1 /* macistrano.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = macistrano.icns; sourceTree = &quot;&lt;group&gt;&quot;; };
 		FE517D850DDF2B5B00CA0249 /* load_operation_queue.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; name = load_operation_queue.rb; path = model/load_operation_queue.rb; sourceTree = &quot;&lt;group&gt;&quot;; };
 		FE5F03D80DC11830009DA75F /* webistrano_controller.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; name = webistrano_controller.rb; path = controller/webistrano_controller.rb; sourceTree = &quot;&lt;group&gt;&quot;; };
-		FE5F041E0DC11D5B009DA75F /* icon-failure.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = &quot;icon-failure.png&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
+		FE5F041E0DC11D5B009DA75F /* icon-failed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = &quot;icon-failed.png&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
 		FE5F04200DC11D6A009DA75F /* icon-inactive.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = &quot;icon-inactive.png&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
 		FE5F04220DC11D75009DA75F /* icon-success-building.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = &quot;icon-success-building.png&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
 		FE5F04230DC11D75009DA75F /* icon-success.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = &quot;icon-success.png&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
@@ -103,6 +104,7 @@
 		FEC9EB700DE099B900ABA9C8 /* project.rb */ = {isa = PBXFileReference; fileEncoding = 7; lastKnownFileType = text.script.ruby; path = project.rb; sourceTree = &quot;&lt;group&gt;&quot;; };
 		FEC9EB710DE099B900ABA9C8 /* stage.rb */ = {isa = PBXFileReference; fileEncoding = 7; lastKnownFileType = text.script.ruby; path = stage.rb; sourceTree = &quot;&lt;group&gt;&quot;; };
 		FEC9EB720DE099B900ABA9C8 /* task.rb */ = {isa = PBXFileReference; fileEncoding = 7; lastKnownFileType = text.script.ruby; path = task.rb; sourceTree = &quot;&lt;group&gt;&quot;; };
+		FEE6BA2F0F2879F700402101 /* growl_support.rb */ = {isa = PBXFileReference; fileEncoding = 7; lastKnownFileType = text.script.ruby; name = growl_support.rb; path = model/growl_support.rb; sourceTree = &quot;&lt;group&gt;&quot;; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -121,6 +123,7 @@
 		080E96DDFE201D6D7F000001 /* Classes */ = {
 			isa = PBXGroup;
 			children = (
+				FEE6BA2F0F2879F700402101 /* growl_support.rb */,
 				FE33BD970DDDFB3D003ACBAA /* load_operation.rb */,
 				FEA7AD5C0DDCB2E00032FE31 /* notification_hub.rb */,
 				FE1191EB0DD89E120073164F /* task.rb */,
@@ -195,7 +198,7 @@
 				FE5F04220DC11D75009DA75F /* icon-success-building.png */,
 				FE5F04230DC11D75009DA75F /* icon-success.png */,
 				FE5F04200DC11D6A009DA75F /* icon-inactive.png */,
-				FE5F041E0DC11D5B009DA75F /* icon-failure.png */,
+				FE5F041E0DC11D5B009DA75F /* icon-failed.png */,
 				29B97318FDCFA39411CA2CEA /* MainMenu.nib */,
 				089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
 			);
@@ -300,7 +303,7 @@
 				4DDCA7080ACC9A6100E082CE /* rb_main.rb in Resources */,
 				FEA7D49A0DC0F900001EFBE9 /* project_controller.rb in Resources */,
 				FE5F03D90DC11830009DA75F /* webistrano_controller.rb in Resources */,
-				FE5F041F0DC11D5B009DA75F /* icon-failure.png in Resources */,
+				FE5F041F0DC11D5B009DA75F /* icon-failed.png in Resources */,
 				FE5F04210DC11D6A009DA75F /* icon-inactive.png in Resources */,
 				FE5F04240DC11D75009DA75F /* icon-success-building.png in Resources */,
 				FE5F04250DC11D75009DA75F /* icon-success.png in Resources */,
@@ -327,6 +330,7 @@
 				FE17B5B60E0D7E0600682156 /* growl_notifier.rb in Resources */,
 				FE3CB0830E902DF8009138A1 /* macistrano.icns in Resources */,
 				FE874BA70F27330600AE5935 /* icon-webistrano-small.png in Resources */,
+				FEE6BA300F2879F700402101 /* growl_support.rb in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};</diff>
      <filename>macistrano.xcodeproj/project.pbxproj</filename>
    </modified>
    <modified>
      <diff>@@ -138,8 +138,12 @@ describe ProjectController, &quot;when notified of a completed build&quot; do
     @controller.stub!(:set_stage_submenu_enabled)
     @controller.stub!(:set_status_icon)
     @deployment = Deployment.alloc.init
+    @deployment.stage = Stage.new
+    @deployment.stage.project = Project.new
+    @deployment.stage.project.host = Host.new
     @webistrano_controller = WebistranoController.alloc.init
     @controller.instance_variable_set(:@webistrano_controller, @webistrano_controller)
+    @controller.init_growl
   end
   
   it &quot;should stop the spinner animation&quot; do</diff>
      <filename>spec/project_controller_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>icon-failure.png</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>d6b283bba7873fd41f1eaa4145d9150d5ae41449</id>
    </parent>
  </parents>
  <author>
    <name>Mathias Meyer</name>
    <email>meyer@paperplanes.de</email>
  </author>
  <url>http://github.com/mattmatt/macistrano/commit/d55cb1c1f271a9cc2fc9df4d33274ee8eb9413a3</url>
  <id>d55cb1c1f271a9cc2fc9df4d33274ee8eb9413a3</id>
  <committed-date>2009-01-22T02:25:15-08:00</committed-date>
  <authored-date>2009-01-22T02:25:15-08:00</authored-date>
  <message>Changed icon for failed deployments. Moved out growl code into separate module.</message>
  <tree>c0de48fa79767502033b8b510ed757b517c58e2b</tree>
  <committer>
    <name>Mathias Meyer</name>
    <email>meyer@paperplanes.de</email>
  </committer>
</commit>
