def __init__(self, window, disc_bn=DiscreteBayesianNetworkExt()): self.window = window # Create graphic widgets self.box_disc_bn, self.drawing_box, self.toolbar_edit, self.toolbar_evidence, self.bedit, self.brun, self.bvertex, \ self.bclear_evidence = ugraphic.create_widget( res.TAB_DISC_BAYES_NET_GLADE, [BOX_DISC_BN, DRAWING_BOX, TB_EDIT_BN, TB_EVIDENCE, RB_EDIT, RB_RUN, RB_VERTEX, RB_CLEAR_EVIDENCE], self) super(BoxDiscreteBN, self).__init__(spacing=1) self.pack_start(self.box_disc_bn, True, True, 0) self.set_visible(True) self.drawer = GraphDrawer() self.drawing_box.pack_start(self.drawer.get_drawing_area(), True, True, 0) self.mode = Mode.edit_vertex # Temporal vertex for edge self.vertex_1 = None self.selected_vertex = None self.selected_edge = None self.marginals = None self.evidences = {} # Temporal arrow for mouse motion self.tmp_arrow = None # Graph self.disc_bn = disc_bn # Vertex locations to draw self.vertex_locations = {} self.clicked_point = None self.button_pressed = False # connect listeners self.drawer.clicked_element_listener = self.clicked_element self.drawer.clicked_clear_space_listener = self.clicked_clear_space self.drawer.right_click_elem_listener = self.right_clicked_elem self.drawer.double_clicked_element_listener = self.double_click_on_elem # Graphical objects in the background self.background_gobjs = []
def show_cpt_dialog(self, window, disc_bn, selected_vetex): # Get widgets from dialog. cpt_dialog, treeview_cpt, text_var_name, button_cancel, \ button_ok, button_rand, treeview_states, badd_state, bremove_state = \ ugraphic.create_widget(res.DISC_VAR_DIALOG_GLADE, ["dialog_cpt", "treeview_cpt", "text_var_name", "button_cancel", "button_ok", "button_rand", "treeview_states", "badd_state", "bremove_state"]) # cpt_dialog.set_parent(window) cpt_dialog.set_modal(True) text_var_name.set_text(selected_vetex) #TODO clone disc_bn and assign only if accept # load info for CPT gcpt_table = GraphicCptTable(disc_bn, selected_vetex, treeview_cpt) def state_changed_func(): gcpt_table.modify_treeview_for_cpt() gstates_table = StatesTable(disc_bn, selected_vetex, state_changed_func, treeview_states, badd_state, bremove_state) # Quit def quit(*args): cpt_dialog.destroy() cpt_dialog.connect("delete-event", quit) # Cancel def cancel_ev(widget): cpt_dialog.destroy() button_cancel.connect("clicked", cancel_ev) # Fill rand def fill_rand(widget): gcpt_table.fill_random() button_rand.connect("clicked", fill_rand) # OK def ok_ev(widget): # validate CPT if not gcpt_table.validate_cpt(): dialog = Gtk.MessageDialog(cpt_dialog, 0, Gtk.MessageType.WARNING, Gtk.ButtonsType.OK, "Invalid CPT") dialog.format_secondary_text("Every row must sum 100 %") dialog.set_modal(True) dialog.run() dialog.destroy() return else: self.var_name = text_var_name.get_text() # Save cpt in current name cprob = gcpt_table.get_cprob_from_table() disc_bn.set_cprob(selected_vetex, cprob) cpt_dialog.destroy() button_ok.connect("clicked", ok_ev) cpt_dialog.run()
def on_about(self, widget): [aboutdialog] = ugraphic.create_widget(res.DIALOG_ABOUT, ["aboutdialog"]) aboutdialog.set_modal(True) aboutdialog.run() aboutdialog.destroy()