コード例 #1
0
 def _load_editor(self, filename):
     if filename.endswith(".rws") or filename.endswith(".RWS"):
         editor = WorksheetEditor(self.notebook)
     elif filename.endswith(".py") or filename.endswith(".PY"):
         editor = LibraryEditor(self.notebook)
     else:
         gfile = gio.File(filename)
         context = gtk.gdk.AppLaunchContext()
         context.set_screen(self.window.get_screen())
         context.set_timestamp(gtk.get_current_event_time())
         try:
             handler = gfile.query_default_handler()
         except gio.Error, e:
             dialog = gtk.MessageDialog(buttons=gtk.BUTTONS_OK,
                                        type=gtk.MESSAGE_ERROR)
             dialog.set_markup(format_escaped("<big><b>Don't know how to open '%s'</b></big>", os.path.basename(filename)))
             dialog.format_secondary_text(str(e))
             dialog.run()
             dialog.destroy()
             return None
         try:
             handler.launch([gfile], context)
         except glib.GError, e:
             dialog = gtk.MessageDialog(buttons=gtk.BUTTONS_OK,
                                        type=gtk.MESSAGE_ERROR)
             dialog.set_markup(format_escaped("<big><b>Failed to open '%s'</b></big>", os.path.basename(filename)))
             dialog.format_secondary_text(str(e))
             dialog.run()
             dialog.destroy()
コード例 #2
0
ファイル: base_window.py プロジェクト: johnrizzo1/reinteract
    def _load_editor(self, filename):
        if filename.endswith(".rws") or filename.endswith(".RWS"):
            editor = WorksheetEditor(self.notebook)
        elif filename.endswith(".py") or filename.endswith(".PY"):
            editor = LibraryEditor(self.notebook)
        else:
            dialog = gtk.MessageDialog(buttons=gtk.BUTTONS_OK,
                                       type=gtk.MESSAGE_ERROR)
            dialog.set_markup(format_escaped("<big><b>Don't know how to open '%s'</b></big>", os.path.basename(filename)))
            dialog.format_secondary_text("'%s' does not have a recognized file extension" % filename)
            dialog.run()
            dialog.destroy()
            return None

        try:
            try:
                editor.load(filename, escape=False)
            except reunicode.ConversionError, e:
                dialog = gtk.MessageDialog(buttons=gtk.BUTTONS_NONE,
                                           type=gtk.MESSAGE_QUESTION)
                dialog.set_markup(format_escaped("<big><b>Convert conversion errors to escapes?</b></big>"))
                dialog.format_secondary_text(
"Conversion error opening '%s': %s. Do you want to convert to escapes? The file on disk will not be changed until you save."
                                              % (os.path.basename(filename), e.message))

                dialog.add_buttons("gtk-cancel", gtk.RESPONSE_CANCEL,
                                   "Convert", gtk.RESPONSE_OK)
                response = dialog.run()
                dialog.destroy()
                if response != gtk.RESPONSE_OK:
                    return None
                editor.load(filename, escape=True)
        except IOError, e:
            dialog = gtk.MessageDialog(buttons=gtk.BUTTONS_OK,
                                       type=gtk.MESSAGE_ERROR)
            dialog.set_markup(format_escaped("<big><b>Cannot open '%s'</b></big>", os.path.basename(filename)))
            dialog.format_secondary_text("Error opening '%s': %s" %(filename, e.strerror))
            dialog.run()
            dialog.destroy()
            return None
コード例 #3
0
ファイル: mini_window.py プロジェクト: jonkuhn/reinteract-jk
    def __create_editor_item(self, editor):
        def on_activate(item):
            self._make_editor_current(editor)

        item = gtk.ImageMenuItem("")
        editor._menu_item_label = item.get_child()
        editor._menu_item_label.set_markup(format_escaped("<b>%s</b>", editor.title))
        item.connect("activate", on_activate)

        editor._menu_item_status = gtk.Image()
        editor._menu_item_status.props.icon_size = gtk.ICON_SIZE_MENU
        editor._menu_item_status.props.stock = NotebookFile.stock_id_for_state(editor.state)
        item.set_image(editor._menu_item_status)

        return item
コード例 #4
0
ファイル: base_window.py プロジェクト: jonkuhn/reinteract-jk
    def _load_editor(self, filename):
        if filename.endswith(".rws") or filename.endswith(".RWS"):
            editor = WorksheetEditor(self.notebook)
        elif filename.endswith(".py") or filename.endswith(".PY"):
            editor = LibraryEditor(self.notebook)
        else:
            dialog = gtk.MessageDialog(buttons=gtk.BUTTONS_OK,
                                       type=gtk.MESSAGE_ERROR)
            dialog.set_markup(format_escaped("<big><b>Don't know how to open '%s'</b></big>", os.path.basename(filename)))
            dialog.format_secondary_text("'%s' does not have a recognized file extension" % filename)
            dialog.run()
            dialog.destroy()
            return None

        try:
            editor.load(filename)
        except IOError, e:
            dialog = gtk.MessageDialog(buttons=gtk.BUTTONS_OK,
                                       type=gtk.MESSAGE_ERROR)
            dialog.set_markup(format_escaped("<big><b>Cannot open '%s'</b></big>", os.path.basename(filename)))
            dialog.format_secondary_text("Error opening '%s': %s" %(filename, e.strerror))
            dialog.run()
            dialog.destroy()
            return None
コード例 #5
0
    def __create_editor_item(self, editor):
        def on_activate(item):
            self._make_editor_current(editor)

        item = gtk.ImageMenuItem("")
        editor._menu_item_label = item.get_child()
        editor._menu_item_label.set_markup(
            format_escaped("<b>%s</b>", editor.title))
        item.connect('activate', on_activate)

        editor._menu_item_status = gtk.Image()
        editor._menu_item_status.props.icon_size = gtk.ICON_SIZE_MENU
        editor._menu_item_status.props.stock = NotebookFile.stock_id_for_state(
            editor.state)
        item.set_image(editor._menu_item_status)

        return item
コード例 #6
0
    def confirm_discard(self, before_quit=False):
        if not self.modified:
            return True

        if before_quit:
            message_format = self.DISCARD_FORMAT_BEFORE_QUIT
            continue_button_text = '_Quit without saving'
        else:
            message_format = self.DISCARD_FORMAT
            continue_button_text = '_Discard'

        if self._get_filename() is None:
            save_button_text = gtk.STOCK_SAVE_AS
        else:
            save_button_text = gtk.STOCK_SAVE

        message = format_escaped("<big><b>" + message_format + "</b></big>",
                                 self._get_display_name())

        dialog = gtk.MessageDialog(parent=self.widget.get_toplevel(),
                                   buttons=gtk.BUTTONS_NONE,
                                   type=gtk.MESSAGE_WARNING)
        dialog.set_markup(message)

        dialog.add_buttons(continue_button_text, gtk.RESPONSE_OK,
                           gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
                           save_button_text, 1)
        dialog.set_default_response(1)
        response = dialog.run()
        dialog.destroy()

        if response == gtk.RESPONSE_OK:
            return True
        elif response == 1:
            self.save()

            if self.modified:
                return False
            else:
                return True
        else:
            return False
コード例 #7
0
    def wait_for_execution(self):
        if self.state != NotebookFile.EXECUTING:
            return True

        message = format_escaped(
            '<b>Waiting for "%s" to finish executing...</b>"',
            self._get_display_name())

        dialog = gtk.MessageDialog(parent=self.widget.get_toplevel(),
                                   buttons=gtk.BUTTONS_NONE,
                                   type=gtk.MESSAGE_INFO)
        dialog.set_markup(message)

        dialog.add_buttons("_Interrupt", 1, gtk.STOCK_CANCEL,
                           gtk.RESPONSE_CANCEL)
        dialog.set_default_response(gtk.RESPONSE_CANCEL)

        loop = glib.MainLoop()

        def on_response(dialog, response):
            if response == 1:
                self.interrupt()
            else:
                loop.quit()

        dialog.connect("response", on_response)

        def on_state_changed(self, paramspec):
            if self.state != NotebookFile.EXECUTING:
                loop.quit()

        state_changed_id = self.connect("notify::state", on_state_changed)

        dialog.set_modal(True)
        dialog.show()
        loop.run()
        dialog.destroy()

        self.disconnect(state_changed_id)

        return self.state != NotebookFile.EXECUTING
コード例 #8
0
ファイル: editor.py プロジェクト: johnrizzo1/reinteract
    def confirm_discard(self, before_quit=False):
        if not self.modified:
            return True

        if before_quit:
            message_format = self.DISCARD_FORMAT_BEFORE_QUIT
            continue_button_text = '_Quit without saving'
        else:
            message_format = self.DISCARD_FORMAT
            continue_button_text = '_Discard'

        if self._get_filename() is None:
            save_button_text = gtk.STOCK_SAVE_AS
        else:
            save_button_text = gtk.STOCK_SAVE

        message = format_escaped("<big><b>" + message_format + "</b></big>", self._get_display_name())

        dialog = gtk.MessageDialog(parent=self.widget.get_toplevel(), buttons=gtk.BUTTONS_NONE,
                                   type=gtk.MESSAGE_WARNING)
        dialog.set_markup(message)

        dialog.add_buttons(continue_button_text, gtk.RESPONSE_OK,
                           gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
                           save_button_text, 1)
        dialog.set_default_response(1)
        response = dialog.run()
        dialog.destroy()

        if response == gtk.RESPONSE_OK:
            return True
        elif response == 1:
            self.save()

            if self.modified:
                return False
            else:
                return True
        else:
            return False
コード例 #9
0
    def on_file_list_delete_file(self, file_list, file):
        dialog = gtk.MessageDialog(parent=self.window, buttons=gtk.BUTTONS_NONE,
                                   type=gtk.MESSAGE_WARNING)
        message = format_escaped("<big><b>Really delete '%s'?</b></big>", file.path)
        dialog.set_markup(message)

        dialog.add_buttons(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
                           gtk.STOCK_DELETE, gtk.RESPONSE_OK)
        dialog.set_default_response(gtk.RESPONSE_CANCEL)
        response = dialog.run()
        dialog.destroy()

        if response != gtk.RESPONSE_OK:
            return

        for editor in self.editors:
            if editor.file == file:
                self._close_editor(editor)

        abspath = os.path.join(self.notebook.folder, file.path)
        os.remove(abspath)
        self.notebook.refresh()
コード例 #10
0
ファイル: editor.py プロジェクト: alexey4petrov/reinteract
    def wait_for_execution(self):
        if self.state != NotebookFile.EXECUTING:
            return True

        message = format_escaped('<b>Waiting for "%s" to finish executing...</b>"', self._get_display_name());

        dialog = gtk.MessageDialog(parent=self.widget.get_toplevel(), buttons=gtk.BUTTONS_NONE,
                                   type=gtk.MESSAGE_INFO)
        dialog.set_markup(message)

        dialog.add_buttons("_Interrupt", 1,
                           gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
        dialog.set_default_response(gtk.RESPONSE_CANCEL)

        loop = glib.MainLoop()

        def on_response(dialog, response):
            if response == 1:
                self.interrupt()
            else:
                loop.quit()
        dialog.connect("response", on_response)

        def on_state_changed(self, paramspec):
            if self.state != NotebookFile.EXECUTING:
                loop.quit()
        state_changed_id = self.connect("notify::state", on_state_changed)

        dialog.set_modal(True)
        dialog.show()
        loop.run()
        dialog.destroy()

        self.disconnect(state_changed_id)

        return self.state != NotebookFile.EXECUTING
コード例 #11
0
 def _update_editor_title(self, editor):
     BaseNotebookWindow._update_editor_title(self, editor)
     if hasattr(editor, '_menu_item_label'):
         editor._menu_item_label.set_markup(
             format_escaped("<b>%s</b>", editor.title))
コード例 #12
0
ファイル: mini_window.py プロジェクト: jonkuhn/reinteract-jk
 def _update_editor_title(self, editor):
     BaseNotebookWindow._update_editor_title(self, editor)
     if hasattr(editor, "_menu_item_label"):
         editor._menu_item_label.set_markup(format_escaped("<b>%s</b>", editor.title))
コード例 #13
0
            except glib.GError, e:
                dialog = gtk.MessageDialog(buttons=gtk.BUTTONS_OK,
                                           type=gtk.MESSAGE_ERROR)
                dialog.set_markup(format_escaped("<big><b>Failed to open '%s'</b></big>", os.path.basename(filename)))
                dialog.format_secondary_text(str(e))
                dialog.run()
                dialog.destroy()
            return None

        try:
            try:
                editor.load(filename, escape=False)
            except reunicode.ConversionError, e:
                dialog = gtk.MessageDialog(buttons=gtk.BUTTONS_NONE,
                                           type=gtk.MESSAGE_QUESTION)
                dialog.set_markup(format_escaped("<big><b>Convert conversion errors to escapes?</b></big>"))
                dialog.format_secondary_text(
"Conversion error opening '%s': %s. Do you want to convert to escapes? The file on disk will not be changed until you save."
                                              % (os.path.basename(filename), e.message))

                dialog.add_buttons("gtk-cancel", gtk.RESPONSE_CANCEL,
                                   "Convert", gtk.RESPONSE_OK)
                response = dialog.run()
                dialog.destroy()
                if response != gtk.RESPONSE_OK:
                    return None
                editor.load(filename, escape=True)
        except IOError, e:
            dialog = gtk.MessageDialog(buttons=gtk.BUTTONS_OK,
                                       type=gtk.MESSAGE_ERROR)
            dialog.set_markup(format_escaped("<big><b>Cannot open '%s'</b></big>", os.path.basename(filename)))
コード例 #14
0
ファイル: editor.py プロジェクト: alexey4petrov/reinteract
    def export_to_pdf(self):
        ### Get the filename to save to ###

        chooser = gtk.FileChooserDialog("Export to PDF...",
                                        self.widget.get_toplevel(),
                                        gtk.FILE_CHOOSER_ACTION_SAVE,
                                        (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
                                         gtk.STOCK_SAVE,   gtk.RESPONSE_OK))
        chooser.set_default_response(gtk.RESPONSE_OK)

        # We reuse the last filename that the use exported to in this
        # run of the application, otherwise we base the exported name
        # on the worksheet name

        if self.__pdf_filename is None:
            basename = os.path.basename(self.filename)
            if basename.endswith(".rws") or basename.endswith(".RWS"):
                basename = basename[:-4]
            elif  basename.endswith(".py") or basename.endswith(".PY"):
                basename = basename[:-3]

            self.__pdf_filename = basename + ".pdf"

        chooser.set_current_name(self.__pdf_filename)

        # The export folder is saved persistantly (relative to the notebook
        # folder if it's inside it)

        notebook_state = application.state.get_notebook_state(self.notebook.folder)
        folder = notebook_state.get_pdf_folder()

        if folder is None:
            folder = self.notebook.folder
        elif not os.path.isabs(folder):
            folder = os.path.join(self.notebook.folder, folder)

        chooser.set_current_folder(folder)

        while True:
            response = chooser.run()
            filename = None
            if response != gtk.RESPONSE_OK:
                chooser.destroy()
                return

            # Overwrite confirmation

            filename = chooser.get_filename()
            if os.path.exists(filename):
                dialog = gtk.MessageDialog(parent=chooser, buttons=gtk.BUTTONS_NONE,
                                           type=gtk.MESSAGE_QUESTION)
                dialog.set_markup(format_escaped("<big><b>Replace '%s'?</b></big>", os.path.basename(filename)))
                dialog.format_secondary_text("The file already exists in \"%s\".  Replacing it will "
                                             "overwrite its contents." % os.path.dirname(filename))

                dialog.add_buttons(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
                                   "_Replace", gtk.RESPONSE_OK)
                dialog.set_default_response(gtk.RESPONSE_OK)

                response = dialog.run()
                dialog.destroy()
                if response == gtk.RESPONSE_OK:
                    break
            else:
                break

        filename = filename.decode('UTF-8')

        ### Save the PDF ###

        self._export_to_pdf(filename, self._get_page_setup())

        ### Now save the selected folder and filename later use ###

        folder = os.path.dirname(filename)

        parent = folder
        while True:
            if parent == self.notebook.folder:
                folder = os.path.relpath(folder, self.notebook.folder)
                break

            tmp = os.path.dirname(parent)
            if tmp == parent:
                break
            parent = tmp

        if not isinstance(folder, unicode):
            folder = folder.decode("UTF-8")

        notebook_state.set_pdf_folder(folder)
        self.__pdf_filename = os.path.basename(filename)

        chooser.destroy()
コード例 #15
0
    def export_to_pdf(self):
        ### Get the filename to save to ###

        chooser = gtk.FileChooserDialog("Export to PDF...",
                                        self.widget.get_toplevel(),
                                        gtk.FILE_CHOOSER_ACTION_SAVE,
                                        (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
                                         gtk.STOCK_SAVE, gtk.RESPONSE_OK))
        chooser.set_default_response(gtk.RESPONSE_OK)

        # We reuse the last filename that the use exported to in this
        # run of the application, otherwise we base the exported name
        # on the worksheet name

        if self.__pdf_filename is None:
            basename = os.path.basename(self.filename)
            if basename.endswith(".rws") or basename.endswith(".RWS"):
                basename = basename[:-4]
            elif basename.endswith(".py") or basename.endswith(".PY"):
                basename = basename[:-3]

            self.__pdf_filename = basename + ".pdf"

        chooser.set_current_name(self.__pdf_filename)

        # The export folder is saved persistantly (relative to the notebook
        # folder if it's inside it)

        notebook_state = application.state.get_notebook_state(
            self.notebook.folder)
        folder = notebook_state.get_pdf_folder()

        if folder is None:
            folder = self.notebook.folder
        elif not os.path.isabs(folder):
            folder = os.path.join(self.notebook.folder, folder)

        chooser.set_current_folder(folder)

        while True:
            response = chooser.run()
            filename = None
            if response != gtk.RESPONSE_OK:
                chooser.destroy()
                return

            # Overwrite confirmation

            filename = chooser.get_filename()
            if os.path.exists(filename):
                dialog = gtk.MessageDialog(parent=chooser,
                                           buttons=gtk.BUTTONS_NONE,
                                           type=gtk.MESSAGE_QUESTION)
                dialog.set_markup(
                    format_escaped("<big><b>Replace '%s'?</b></big>",
                                   os.path.basename(filename)))
                dialog.format_secondary_text(
                    "The file already exists in \"%s\".  Replacing it will "
                    "overwrite its contents." % os.path.dirname(filename))

                dialog.add_buttons(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
                                   "_Replace", gtk.RESPONSE_OK)
                dialog.set_default_response(gtk.RESPONSE_OK)

                response = dialog.run()
                dialog.destroy()
                if response == gtk.RESPONSE_OK:
                    break
            else:
                break

        filename = filename.decode('UTF-8')

        ### Save the PDF ###

        self._export_to_pdf(filename, self._get_page_setup())

        ### Now save the selected folder and filename later use ###

        folder = os.path.dirname(filename)

        parent = folder
        while True:
            if parent == self.notebook.folder:
                folder = os.path.relpath(folder, self.notebook.folder)
                break

            tmp = os.path.dirname(parent)
            if tmp == parent:
                break
            parent = tmp

        if not isinstance(folder, unicode):
            folder = folder.decode("UTF-8")

        notebook_state.set_pdf_folder(folder)
        self.__pdf_filename = os.path.basename(filename)

        chooser.destroy()