Commit ab3d9be
Changed files (4)
lib
presentation
commands
presenters
windows
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