def edit_control_sequences(self): if self.window.switch_to_tab_by_key("sequences"): return widget = controlseq.SequenceListWidget(self.project) self.window.add_tab(Tab( "Sequences", widget, "sequences", mainmenu_groups=("project",), call_close=True))
def load_report(self, filename=None): if filename is None: filename = self.run_file_dialog("Open report", "open", "Report", "*.kreport") if filename is None: return r = self._catch_io_error(lambda: report.Report(filename)) self.window.add_tab(Tab("Report", report.ReportWidget(self, r)))
def project_config(self): if self.window.switch_to_tab_by_key("project-config"): return widget = ProjectConfig(self) self.window.add_tab(Tab("Project", widget, "project-config", mainmenu_groups=("project",)))
def edit_simrun(self, lineno=None): position = ("", lineno) if lineno is not None else None if self.window.switch_to_tab_by_key("simrun"): return widget = simrun.SimRunConfig(self, self.project) self.window.add_tab( Tab("SimRun", widget, "simrun", mainmenu_groups=("project", ))) widget.editor.jump_to_position(position)
def init_tabs(self): self.window.close_all_tabs(("project", "welcome")) self.neteditor = neteditor.NetEditor(self, self.project) self.neteditor.transition_edit_callback = self.transition_edit self.neteditor.place_edit_callback = self.place_edit self.window.add_tab(Tab("Nets", self.neteditor, "nets", mainmenu_groups=("project", "undo", "screenshot"), has_close_button=False))
def _open_welcome_tab(self): label = gtk.Label() line = "<span size='xx-large'>Kaira</span>\nv{0}\n\n" \ "<a href='http://verif.cs.vsb.cz/kaira'>http://verif.cs.vsb.cz/kaira</a>" \ .format(ptp.get_config("Main", "VERSION")) label.set_markup(line) label.set_justify(gtk.JUSTIFY_CENTER) self.window.add_tab(Tab("Welcome", label, has_close_button=False, mainmenu_groups=("welcome",)))
def _cb_show(self): if self.tabview is None: type = self.source.type view = type.get_view(self.source.data, self.app) if view is None: return tabname = "{0} ({1})".format(self.source.type.short_name, os.path.basename(self.source.name)) self.tabview = Tab(tabname, view) # modify close method origin_close = self.tabview.close def new_close(): origin_close() self.tabview = None self.tabview.close = new_close self.app.window.add_tab(self.tabview) else: self.app.window.switch_to_tab(self.tabview)
def place_edit(self, place, lineno=None): position = ("", lineno) if lineno is not None else None if self.window.switch_to_tab_by_key( place, lambda tab: tab.widget.jump_to_position(position)): return generator = self.get_safe_generator() if generator is None: return header = generator.get_place_user_fn_header(place.id) name = "P: {0}".format(place.get_name_or_id()) editor = codeedit.PlaceCodeEditor(self.project, place, header) self.window.add_tab(Tab(name, editor, place, mainmenu_groups=("project",))) editor.jump_to_position(position)
def _cb_show(self): if self.tabview is None: type = self.source.type view = type.get_view(self.source.data, self.app) if view is None: return tabname = "{0} ({1})".format( self.source.type.short_name, os.path.basename(self.source.name)) self.tabview = Tab(tabname, view) # modify close method origin_close = self.tabview.close def new_close(): origin_close() self.tabview = None self.tabview.close = new_close self.app.window.add_tab(self.tabview) else: self.app.window.switch_to_tab(self.tabview)
def transition_edit(self, transition, lineno=None): if transition.collective: self.console_write("A collective transition cannot contain an inner code.\n", "warn") return position = ("", lineno) if lineno is not None else None if self.window.switch_to_tab_by_key( transition, lambda tab: tab.widget.jump_to_position(position)): return name = "T: {0}".format(transition.get_name_or_id()) generator = self.get_safe_generator() if generator is None: return header = generator.get_transition_user_fn_header(transition.id) editor = codeedit.TransitionCodeEditor(self.project, transition, header) self.window.add_tab(Tab(name, editor, transition, mainmenu_groups=("project",))) editor.jump_to_position(position)
class SourceView(gtk.Alignment, EventSource): def __init__(self, source, app): gtk.Alignment.__init__(self, 0, 0, 1, 1) EventSource.__init__(self) self.source = source self.source.set_callback("source-name-changed", lambda old, new: self.entry_name.set_text(new)) self.app = app # reference to the main application self.tabview = None self.set_padding(5, 0, 10, 10) table = gtk.Table(2, 3, False) table.set_border_width(2) table.set_col_spacing(0, 10) table.set_col_spacing(1, 2) # name of source self.entry_name = gtk.Entry() self.entry_name.set_size_request(40, -1) self.entry_name.set_editable(False) self.entry_name.set_text(self.source.name) table.attach(self.entry_name, 0, 1, 0, 1) # name of data type label = gtk.Label() label.set_alignment(0, 0) label.set_markup("<i>{0}</i>".format(self.source.type.name)) table.attach(label, 0, 1, 1, 2) self.btns_group1 = [] self.btns_group2 = [] # attach button button = gtk.Button("Attach") button.connect( "clicked", lambda w: self.emit_event("attach-source", self.source)) table.attach(button, 1, 2, 0, 2, xoptions=gtk.FILL) self.btns_group1.append(button) button = gtk.Button("Show") button.connect( "clicked", lambda w: self._cb_show()) table.attach(button, 2, 3, 0, 2, xoptions=gtk.FILL) self.btns_group1.append(button) # source menu menu = gtk.Menu() item = gtk.MenuItem("Store") item.connect("activate", lambda w: self._cb_store()) self.btns_group1.append(item) menu.append(item) self.item_reload = gtk.MenuItem("Reload") self.item_reload.connect("activate", lambda w: self._cb_load()) self.item_reload.set_sensitive(self.source.stored) menu.append(self.item_reload) menu.append(gtk.SeparatorMenuItem()) self.item_dispose = gtk.MenuItem("Dispose") self.item_dispose.connect("activate", lambda w: self._cb_dispose()) self.item_dispose.set_sensitive(self.source.stored) self.btns_group1.append(self.item_dispose) menu.append(self.item_dispose) item = gtk.MenuItem("Delete") item.connect("activate", lambda w: self._cb_delete()) menu.append(item) menu.show_all() menu_btn = gtk.Button(">"); menu_btn.connect_object("event-after", self._menu_handler, menu) table.attach(menu_btn, 3, 4, 0, 2, xoptions=0) # source component frame = gtk.Frame() frame.set_shadow_type(gtk.SHADOW_OUT) frame.add(table) self.add(frame) def _menu_handler(self, widget, event): if event.type == gtk.gdk.BUTTON_PRESS: widget.popup(None, None, None, event.button, event.time) return True return False def _cb_show(self): if self.tabview is None: type = self.source.type view = type.get_view(self.source.data, self.app) if view is None: return tabname = "{0} ({1})".format( self.source.type.short_name, os.path.basename(self.source.name)) self.tabview = Tab(tabname, view) # modify close method origin_close = self.tabview.close def new_close(): origin_close() self.tabview = None self.tabview.close = new_close self.app.window.add_tab(self.tabview) else: self.app.window.switch_to_tab(self.tabview) def _lock_buttons(self): for btn in self.btns_group1: btn.set_sensitive(self.source.data is not None) for btn in self.btns_group2: btn.set_sensitive(self.source.data is None) def _cb_store(self): if len(self.source.type.savers) == 0: self.app.show_message_dialog( "The type '{0}' cannot be saved.".format( self.source.type.name), gtk.MESSAGE_WARNING) return dialog = gtk.FileChooserDialog("Source store", self.app.window, gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK)) dialog.set_default_response(gtk.RESPONSE_OK) dialog.add_filter(datatypes.get_save_file_filter(self.source.type)) try: response = dialog.run() filename = dialog.get_filename() finally: dialog.destroy() if response == gtk.RESPONSE_OK: self.source.store(filename, self.app) self.item_reload.set_sensitive(True) self.item_dispose.set_sensitive(True) def _cb_load(self): self.source.data = load_source( self.source.name, self.app, self.source.settings).data self._lock_buttons() self.emit_event("source-data-changed", self.source) def _cb_dispose(self): self.source.data = None self._lock_buttons() if self.tabview is not None: self.tabview.close() self.emit_event("source-data-changed", self.source) def _cb_delete(self): if self.tabview is not None: self.tabview.close() self.emit_event("delete-source", self.source)
class SourceView(gtk.Alignment, EventSource): def __init__(self, source, app): gtk.Alignment.__init__(self, 0, 0, 1, 1) EventSource.__init__(self) self.source = source self.source.set_callback( "source-name-changed", lambda old, new: self.entry_name.set_text(new)) self.app = app # reference to the main application self.tabview = None self.set_padding(5, 0, 10, 10) table = gtk.Table(2, 3, False) table.set_border_width(2) table.set_col_spacing(0, 10) table.set_col_spacing(1, 2) # name of source self.entry_name = gtk.Entry() self.entry_name.set_size_request(40, -1) self.entry_name.set_editable(False) self.entry_name.set_text(self.source.name) table.attach(self.entry_name, 0, 1, 0, 1) # name of data type label = gtk.Label() label.set_alignment(0, 0) label.set_markup("<i>{0}</i>".format(self.source.type.name)) table.attach(label, 0, 1, 1, 2) self.btns_group1 = [] self.btns_group2 = [] # attach button button = gtk.Button("Attach") button.connect("clicked", lambda w: self.emit_event("attach-source", self.source)) table.attach(button, 1, 2, 0, 2, xoptions=gtk.FILL) self.btns_group1.append(button) button = gtk.Button("Show") button.connect("clicked", lambda w: self._cb_show()) table.attach(button, 2, 3, 0, 2, xoptions=gtk.FILL) self.btns_group1.append(button) # source menu menu = gtk.Menu() item = gtk.MenuItem("Store") item.connect("activate", lambda w: self._cb_store()) self.btns_group1.append(item) menu.append(item) self.item_reload = gtk.MenuItem("Reload") self.item_reload.connect("activate", lambda w: self._cb_load()) self.item_reload.set_sensitive(self.source.stored) menu.append(self.item_reload) menu.append(gtk.SeparatorMenuItem()) self.item_dispose = gtk.MenuItem("Dispose") self.item_dispose.connect("activate", lambda w: self._cb_dispose()) self.item_dispose.set_sensitive(self.source.stored) self.btns_group1.append(self.item_dispose) menu.append(self.item_dispose) item = gtk.MenuItem("Delete") item.connect("activate", lambda w: self._cb_delete()) menu.append(item) menu.show_all() menu_btn = gtk.Button(">") menu_btn.connect_object("event-after", self._menu_handler, menu) table.attach(menu_btn, 3, 4, 0, 2, xoptions=0) # source component frame = gtk.Frame() frame.set_shadow_type(gtk.SHADOW_OUT) frame.add(table) self.add(frame) def _menu_handler(self, widget, event): if event.type == gtk.gdk.BUTTON_PRESS: widget.popup(None, None, None, event.button, event.time) return True return False def _cb_show(self): if self.tabview is None: type = self.source.type view = type.get_view(self.source.data, self.app) if view is None: return tabname = "{0} ({1})".format(self.source.type.short_name, os.path.basename(self.source.name)) self.tabview = Tab(tabname, view) # modify close method origin_close = self.tabview.close def new_close(): origin_close() self.tabview = None self.tabview.close = new_close self.app.window.add_tab(self.tabview) else: self.app.window.switch_to_tab(self.tabview) def _lock_buttons(self): for btn in self.btns_group1: btn.set_sensitive(self.source.data is not None) for btn in self.btns_group2: btn.set_sensitive(self.source.data is None) def _cb_store(self): if len(self.source.type.savers) == 0: self.app.show_message_dialog( "The type '{0}' cannot be saved.".format( self.source.type.name), gtk.MESSAGE_WARNING) return dialog = gtk.FileChooserDialog("Source store", self.app.window, gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK)) dialog.set_default_response(gtk.RESPONSE_OK) dialog.add_filter(datatypes.get_save_file_filter(self.source.type)) try: response = dialog.run() filename = dialog.get_filename() finally: dialog.destroy() if response == gtk.RESPONSE_OK: self.source.store(filename, self.app) self.item_reload.set_sensitive(True) self.item_dispose.set_sensitive(True) def _cb_load(self): self.source.data = load_source(self.source.name, self.app, self.source.settings).data self._lock_buttons() self.emit_event("source-data-changed", self.source) def _cb_dispose(self): self.source.data = None self._lock_buttons() if self.tabview is not None: self.tabview.close() self.emit_event("source-data-changed", self.source) def _cb_delete(self): if self.tabview is not None: self.tabview.close() self.emit_event("delete-source", self.source)
def edit_settings(self): if self.window.switch_to_tab_by_key("settings"): return widget = settings.SettingsWidget(self) self.window.add_tab(Tab("Settings", widget, "settings"))
def run_statespace_analysis(self): self.window.add_tab(Tab("Statespace", statespace.StatespaceConfig(self), mainmenu_groups=("project",)))
def run_tool_window(self): tab = Tab("Tools", extensions.OperationManager(self), call_close=True) self.window.add_tab(tab)