class Requeriment(Expander):
    def __init__(self, objectives, new):
        Expander.__init__(self)

        self.connect("enter-notify-event", self.onEnterNotifyEvent)
        self.connect("leave-notify-event", self.onLeaveNotifyEvent)

        vBox = VBox()
        self.add(vBox)

        # Data model
        self.model = ListStore(str, float)

        # Title bar
        hBox = HBox()
        self.set_property("label-widget", hBox)

        self.title = Label()
        hBox.pack_start(self.title)

        # Alternatives
        treeView = TreeView(self.model)
        #		treeView.set_headers_visible(False)
        vBox.pack_start(treeView)

        listStore_objectives = ListStore(str)
        for name in objectives:
            listStore_objectives.append((name, ))

        def combo_changed(_, path, text, model):
            model[path][0] = text

        cellRenderer = CellRendererCombo()
        cellRenderer.connect("edited", combo_changed, self.model)
        cellRenderer.set_property("text-column", 0)
        cellRenderer.set_property("editable", True)
        cellRenderer.set_property("has-entry", True)
        cellRenderer.set_property("model", listStore_objectives)

        treeViewColumn = TreeViewColumn("Alternative", cellRenderer, text=0)
        #		treeViewColumn = TreeViewColumn(None,cellRenderer,text=0)
        treeView.append_column(treeViewColumn)

        def spin_changed(_, path, value, model):
            model[path][1] = float(value.replace(",", "."))

        cellRenderer = CellRendererSpin()
        cellRenderer.connect("edited", spin_changed, self.model)
        cellRenderer.set_property("adjustment",
                                  Adjustment(1, 0, 100, 1, 10, 0))
        cellRenderer.set_property("editable", True)
        cellRenderer.set_property("digits", 2)

        treeViewColumn = TreeViewColumn(None, cellRenderer, text=1)
        treeView.append_column(treeViewColumn)

        # Add/remove alternative button box
        #		hButtonBox = HButtonBox()
        #		vBox.pack_start(hButtonBox, False)

        # Add alternative
        button = Button("gtk-add")
        button.connect("clicked", self.on_btnAdd_Alternative_clicked)
        button.set_use_stock(True)
        #		hButtonBox.pack_start(button)
        vBox.pack_start(button, False)

        #		# Remove alternative
        #		button = Button("gtk-remove")
        #		button.connect("clicked",self.on_btnDel_Alternative_clicked)
        #		button.set_use_stock(True)
        #		hButtonBox.pack_start(button)

        # Expand the requeriment and add an alternative if it's new
        if new:
            self.set_expanded(True)
            self.model.append((None, 1.0))

        # Show requeriment
        self.show_all()

        # Delete requeriment button (default is hidden)
        self.imgRemove = Image()
        self.imgRemove.connect("button-press-event", self.onDelRequeriment)
        self.imgRemove.set_from_stock("gtk-cancel", ICON_SIZE_MENU)
        hBox.pack_start(self.imgRemove)

    def Add(self, alternative):
        self.model.append(alternative)

        names = []
        iter = self.model.get_iter_first()
        while iter:
            alt = self.model.get_value(iter, 0)
            if alt:
                names.append(alt)

            iter = self.model.iter_next(iter)

        self.title.set_text(','.join(names))

    def GetData(self):
        result = OrderedDict()

        iter = self.model.get_iter_first()
        while iter:
            alt = self.model.get_value(iter, 0)
            if alt:
                result[alt] = self.model.get_value(iter, 1)

            iter = self.model.iter_next(iter)

        return result

    def onDelRequeriment(self, widget):
        self.get_parent().remove(self)

    def onEnterNotifyEvent(self, widget, event):
        self.imgRemove.show()

    def onLeaveNotifyEvent(self, widget, event):
        self.imgRemove.hide()

    def __btnDel_Alternative_Sensitivity(self):
        pass
#		self.__btnDel.set_sensitive(len(self.__model.))

    def on_btnAdd_Alternative_clicked(self, widget):
        self.model.append((None, 1.0))

        self.__btnDel_Alternative_Sensitivity()

    def on_btnDel_Alternative_clicked(self, widget):

        self.__btnDel_Alternative_Sensitivity()