def __init__(self):
        gtk.EventBox.__init__(self)
        self.box = FloatBox()
        self.pref_box = gtk.EventBox()
        self.form = Target()
        self.element_factory = ElementFactory()
        self.element_view = ElementView(self.element_factory)
        self.add(self.box)
        self.box.connect('key-press-event', self._on_box_key_press)
        self.box.connect('motion-notify-event', self._on_box_motion_notify)
        self.box.connect('button-press-event', self._on_box_button_press)
        self.box.connect('button-release-event', self._on_box_button_release)
        self.element_view.connect('element-button-press-event',
                                  self._on_element_button_press_event)

        hbox = gtk.HBox()
        vbox = gtk.VBox()
        vbox.pack_start(self.element_view, False)
        hbox.pack_start(vbox, False)
        hbox.pack_start(self.form)
        hbox.pack_start(self.pref_box, False)
        hbox.set_spacing(6)
        self.box.add_bg_widget(hbox)
        self.pref_box.set_size_request(200, -1)
        self.selected = None
        self.mouse_button = None

        # Load built-in widgets.
        for name in sorted(Elements.__all__):
            if name in ('Element', 'Target'):
                continue
            element_class = Elements.__dict__[name]
            if type(element_class) != gobject.GObjectMeta:
                continue
            self.element_factory.register(element_class)