Commit ddf46a0

mo khan <mo@mokhan.ca>
2013-12-11 04:25:07
split out builders to separate files.
1 parent 5d596af
Changed files (5)
lib/presentation/builders/build.rb
@@ -0,0 +1,5 @@
+class Build
+  def self.menu_bar
+    MenuBarBuilder.new
+  end
+end
lib/presentation/builders/create.rb
@@ -0,0 +1,21 @@
+class Create
+  def self.menu_bar
+    Gtk::MenuBar.new
+  end
+
+  def self.menu_item(name, sub_menu = nil)
+    menu_item = Gtk::MenuItem.new(name)
+    menu_item.set_submenu(sub_menu) if sub_menu
+    menu_item
+  end
+
+  def self.menu
+    Gtk::Menu.new
+  end
+
+  def self.vertical_box(menu_bar)
+    box = Gtk::VBox.new(false, 2)
+    box.pack_start(menu_bar, false, false, 0)
+    box
+  end
+end
lib/presentation/builders/menu_bar_builder.rb
@@ -0,0 +1,18 @@
+class MenuBarBuilder
+  def initialize(menus = [])
+    @menus = menus
+  end
+
+  def with(menu)
+    @menus.push(menu)
+    self
+  end
+
+  def add_to(view)
+    menu_bar = Create.menu_bar
+    @menus.each do |menu|
+      menu_bar.append(menu)
+    end
+    view.add(Create.vertical_box(menu_bar))
+  end
+end
lib/presentation/presenters/menus/file.rb
@@ -0,0 +1,21 @@
+class File
+  def self.menu(event_aggregator)
+    Create.menu_item("_File", Create.menu.append(create_import_menu).append(create_exit_menu(event_aggregator)))
+  end
+
+  def self.create_import_menu
+    Create.menu_item("_Import", Create.menu
+                     .append(Create.menu_item("Import news feed..."))
+                     .append(Create.menu_item("Import bookmarks..."))
+                     .append(Create.menu_item("Import mail..."))
+                    )
+  end
+
+  def self.create_exit_menu(event_aggregator)
+    menu_item = Create.menu_item("E_xit")
+    menu_item.signal_connect "activate" do
+      event_aggregator.publish(:halt)
+    end
+    menu_item
+  end
+end
lib/presentation/presenters/application_shell_presenter.rb
@@ -7,61 +7,9 @@ class ApplicationShellPresenter
   def present
     @view.set_title("Hello World")
     @view.signal_connect "destroy" do
-      puts "publishing halt to event aggregator"
       @event_aggregator.publish(:halt)
     end
-    add_menu_to(@view)
-    @view.set_default_size 250, 200
-    @view.set_window_position Gtk::Window::POS_CENTER
+    Build.menu_bar.with(File.menu(@event_aggregator)).add_to(@view)
     @view.show_all
   end
-
-  private
-
-  def add_menu_to(view)
-    view.add(Create.vertical_box(Create.menu_bar.append(create_file_menu)))
-  end
-
-  def create_file_menu
-    Create.menu_item("_File", Create.menu.append(create_import_menu).append(create_exit_menu))
-  end
-
-  def create_import_menu
-    Create.menu_item("_Import", Create.menu
-                     .append(Create.menu_item("Import news feed..."))
-                     .append(Create.menu_item("Import bookmarks..."))
-                     .append(Create.menu_item("Import mail..."))
-                    )
-  end
-
-  def create_exit_menu
-    menu_item = Create.menu_item("E_xit")
-    menu_item.signal_connect "activate" do
-      @event_aggregator.publish(:halt)
-    end
-    menu_item
-  end
 end
-
-class Create
-  def self.menu_bar
-    Gtk::MenuBar.new
-  end
-
-  def self.menu_item(name, sub_menu = nil)
-    menu_item = Gtk::MenuItem.new(name)
-    menu_item.set_submenu(sub_menu) if sub_menu
-    menu_item
-  end
-
-  def self.menu
-    Gtk::Menu.new
-  end
-
-  def self.vertical_box(menu_bar)
-    box = Gtk::VBox.new(false, 2)
-    box.pack_start(menu_bar, false, false, 0)
-    box
-  end
-end
-