mental / minicomic

A tool for assembling web and print comics.

This URL has Read+Write access

mental (author)
Thu Jun 26 17:22:49 -0700 2008
commit  8b3e663b9361f1b051dad25b94450761c3891321
tree    192f10a266f304ad4c7451f81e53c16c591d34b4
parent  7c4e4c2530af46f7e98f9aea0c837c0c8b021ddd
minicomic / lib / minicomic / ui / shell.rb
100644 67 lines (55 sloc) 1.329 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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'
 
module Minicomic
module UI
 
class Shell < Util::Observable
  class WindowObserver < java.awt.event.WindowAdapter
    def initialize(shell)
      super()
      @shell = shell
    end
 
    def windowClosed(event)
      @shell.close
    end
  end
 
  def initialize(session)
    super(EventSequencer.new)
    @session = session
    later { setup }
  end
 
  def later(&block)
    super do
      begin
        block.call
      rescue Exception => e
        @session.close if @session
        raise e
      end
    end
  end
 
  def setup
    @frame = javax.swing.JFrame.new "Minicomic"
    @frame.add_window_listener WindowObserver.new(self)
    @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 = MenuBar.new(menubar)
 
    @frame.set_visible true
 
    @session.request_xml_resource("forms/menus.ui").async_result! do |res|
      later { @menubar.load_form(res.result) }
    end
  end
  private :setup
 
  def close
    @session.close
    self
  end
end
 
end
end