Ejemplo n.º 1
0
 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))
Ejemplo n.º 2
0
 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)))
Ejemplo n.º 3
0
 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",)))
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
 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))
Ejemplo n.º 6
0
 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",)))
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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)
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
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)
Ejemplo n.º 13
0
 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"))
Ejemplo n.º 14
0
 def run_statespace_analysis(self):
     self.window.add_tab(Tab("Statespace",
                             statespace.StatespaceConfig(self),
                             mainmenu_groups=("project",)))
Ejemplo n.º 15
0
 def run_tool_window(self):
     tab = Tab("Tools",
               extensions.OperationManager(self),
               call_close=True)
     self.window.add_tab(tab)