Commit ab3d9be

mo khan <mo@mokhan.ca>
2013-12-11 06:01:42
wire up events from the view. (more like supervising controller than passive view.)
1 parent 766dcfd
Changed files (4)
lib/presentation/commands/publish.rb
@@ -0,0 +1,17 @@
+class Publish
+  include Nasty::Command
+
+  def initialize(event, *message)
+    @event = event
+    @message = *message
+  end
+
+  def run(event_aggregator)
+    event_aggregator.publish(@event, @message)
+  end
+
+  def self.event(event, *message)
+    event_aggregator = Spank::IOC.resolve(:event_aggregator)
+    Publish.new(event, *message).run(event_aggregator)
+  end
+end
lib/presentation/presenters/application_shell_presenter.rb
@@ -6,10 +6,12 @@ class ApplicationShellPresenter
 
   def present
     @view.set_title("Hello World")
-    @view.signal_connect "destroy" do
-      @event_aggregator.publish(:halt)
-    end
+    @view.bind_to(self)
     Build.menu_bar.with(File.menu(@event_aggregator)).add_to(@view)
     @view.show_all
   end
+
+  def shutdown
+    Publish.event(:halt)
+  end
 end
lib/presentation/windows/application_shell.rb
@@ -6,4 +6,10 @@ class ApplicationShell < Window
     modify_bg(Gtk::STATE_NORMAL, Gdk::Color.new(6400, 6400, 6440))
     self.maximize
   end
+
+  def bind_to(presenter)
+    self.on(:destroy) do
+      presenter.shutdown
+    end
+  end
 end
lib/presentation/windows/window.rb
@@ -1,7 +1,11 @@
-require 'gtk2'
-
 class Window < Gtk::Window
   def initialize
     super
   end
+
+  def on(event, &command)
+    self.signal_connect(event.to_s) do
+      command.call(self)
+    end
+  end
 end