<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/minicomic/ui/menubar.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,11 +1,11 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
 &lt;ui:panel xmlns=&quot;http://www.w3.org/2002/xforms&quot; xmlns:xlink=&quot;http://www.w3.org/199/xlink&quot; xmlns:ui=&quot;http://moonbase.rydia.net/minicomic-ui&quot;&gt;
-  &lt;group appearance=&quot;minimal&quot;&gt;&lt;label&gt;New or Existing Projects&lt;/label&gt;
+  &lt;group ui:hints=&quot;stack&quot; appearance=&quot;minimal&quot;&gt;&lt;label&gt;New or Existing Projects&lt;/label&gt;
     &lt;trigger ui:verb=&quot;new-web-project&quot;&gt;&lt;label&gt;New Web Project...&lt;/label&gt;&lt;/trigger&gt;
     &lt;trigger ui:verb=&quot;new-print-project&quot;&gt;&lt;label&gt;New Print Project...&lt;/label&gt;&lt;/trigger&gt;
     &lt;trigger ui:verb=&quot;open-project&quot;&gt;&lt;label&gt;Open Project...&lt;/label&gt;&lt;/trigger&gt;
   &lt;/group&gt;
-  &lt;group appearance=&quot;compact&quot;&gt;&lt;label&gt;Recent Projects&lt;/label&gt;
+  &lt;group ui:hints=&quot;stack&quot; appearance=&quot;compact&quot;&gt;&lt;label&gt;Recent Projects&lt;/label&gt;
     &lt;select1 id=&quot;recent-projects&quot;&gt;
       &lt;itemset nodeset=&quot;recent-project&quot;&gt;
         &lt;label ref=&quot;filename&quot; /&gt;</diff>
      <filename>forms/greeting.ui</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,7 @@
 require 'rubygems'
 require 'thread'
 require 'minicomic/ui/application'
+require 'minicomic/ui/menubar'
 require 'minicomic/ui/preferences'
 require 'minicomic/ui/session'
 require 'minicomic/ui/shell'</diff>
      <filename>lib/minicomic/ui.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,6 +2,7 @@ require 'java'
 require 'rexml/document'
 require 'rexml/xpath'
 require 'minicomic/ui/event-sequencer'
+require 'minicomic/ui/menubar'
 require 'minicomic/util/observable'
 require 'minicomic/xml/namespaces'
 
@@ -43,78 +44,17 @@ class Shell &lt; Util::Observable
     @frame.set_default_close_operation javax.swing.JFrame::DISPOSE_ON_CLOSE
     @frame.set_minimum_size(java.awt.Dimension.new(300, 300))
 
-    @menubar = javax.swing.JMenuBar.new
-    @frame.set_jmenu_bar @menubar
+    menubar = javax.swing.JMenuBar.new
+    @frame.set_jmenu_bar menubar
+    @menubar = MenuBar.new(menubar)
 
     @frame.set_visible true
 
-    setup_menus
-  end
-  private :setup
-
-  def setup_menus
     @session.request_xml_resource(&quot;forms/menus.ui&quot;).async_result! do |res|
-      later do
-        process_menus_form(res.result)
-        @menubar.revalidate
-      end
-    end
-  end
-  private :setup_menus
-
-  def process_menus_form(doc)
-    root = REXML::XPath.first(doc, '/ui:menubar', XML::DEFAULT_NS_MAPPINGS)
-    REXML::XPath.each(root, './xforms:group', XML::DEFAULT_NS_MAPPINGS) do |child|
-      label = REXML::XPath.first(child, './xforms:label', XML::DEFAULT_NS_MAPPINGS)
-      label_text = label ? label.text : nil
-      submenu = javax.swing.JMenu.new(label_text)
-      @menubar.add submenu
-      build_submenu(submenu, child)
-    end
-  end
-  private :process_menus_form
-
-  def build_submenu(menu, element)
-    finished_compact = false
-    REXML::XPath.each(element, './xforms:group|./xforms:trigger', XML::DEFAULT_NS_MAPPINGS) do |child|
-      menu.add_separator if finished_compact
-      finished_compact = false
-
-      label = REXML::XPath.first(child, './xforms:label', XML::DEFAULT_NS_MAPPINGS)
-      label_text = label ? label.text : nil
-
-      case child.local_name
-      when 'group'
-        case child.attribute('appearance').value
-        when 'minimal'
-          build_submenu(menu, child)
-        when 'compact'
-          build_submenu(menu, child)
-          finished_compact = true
-        else
-          submenu = javax.swing.JMenu.new(label_text)
-          menu.add submenu
-          build_submenu(submenu, child)
-        end
-      when 'trigger'
-        item = javax.swing.JMenuItem.new(label_text)
-        menu.add item
-        verb = child.attribute('verb', XML::MINICOMIC_UI_NS)
-        item.add_action_listener verb_invoke_action(verb) if verb
-      end
+      later { @menubar.load_form(res.result) }
     end
   end
-  private :build_submenu
-
-  def verb_invoke_action(verb)
-    Proc.new { invoke_verb verb }
-  end
-  private :verb_invoke_action
-
-  def invoke_verb(verb)
-    puts &quot;Verb #{verb} invoked&quot;
-  end
-  private :invoke_verb
+  private :setup
 
   def close
     @session.close</diff>
      <filename>lib/minicomic/ui/shell.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>7c4e4c2530af46f7e98f9aea0c837c0c8b021ddd</id>
    </parent>
  </parents>
  <author>
    <name>MenTaLguY</name>
    <email>mental@rydia.net</email>
  </author>
  <url>http://github.com/mental/minicomic/commit/8b3e663b9361f1b051dad25b94450761c3891321</url>
  <id>8b3e663b9361f1b051dad25b94450761c3891321</id>
  <committed-date>2008-06-26T17:22:49-07:00</committed-date>
  <authored-date>2008-06-26T17:22:49-07:00</authored-date>
  <message>split menubar into separate class</message>
  <tree>192f10a266f304ad4c7451f81e53c16c591d34b4</tree>
  <committer>
    <name>MenTaLguY</name>
    <email>mental@rydia.net</email>
  </committer>
</commit>
