Esempio n. 1
0
 def on_saveButton_clicked(self):
     """
     Private slot to save the snapshot.
     """
     if not self.__snapshot.isNull():
         while os.path.exists(self.__filename):
             self.__autoIncFilename()
         
         fileName, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
             self,
             self.tr("Save Snapshot"),
             self.__filename,
             self.__outputFilter,
             self.__defaultFilter,
             E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
         if not fileName:
             return
         
         ext = QFileInfo(fileName).suffix()
         if not ext:
             ex = selectedFilter.split("(*")[1].split(")")[0]
             if ex:
                 fileName += ex
         
         if self.__saveImage(fileName):
             self.__modified = False
             self.__filename = fileName
             self.__autoIncFilename()
             self.__updateCaption()
Esempio n. 2
0
    def on_saveButton_clicked(self):
        """
        Private slot to save the snapshot.
        """
        if not self.__snapshot.isNull():
            while os.path.exists(self.__filename):
                self.__autoIncFilename()

            fileName, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
                self, self.tr("Save Snapshot"), self.__filename,
                self.__outputFilter, self.__defaultFilter,
                E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
            if not fileName:
                return

            ext = QFileInfo(fileName).suffix()
            if not ext:
                ex = selectedFilter.split("(*")[1].split(")")[0]
                if ex:
                    fileName += ex

            if self.__saveImage(fileName):
                self.__modified = False
                self.__filename = fileName
                self.__autoIncFilename()
                self.__updateCaption()
Esempio n. 3
0
    def __exportStyles(self, lexers):
        """
        Private method to export the styles of the given lexers.
        
        @param lexers list of lexer objects for which to export the styles
        """
        fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
            self, self.tr("Export Highlighting Styles"), "",
            self.tr("Highlighting styles file (*.e4h)"), "",
            E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))

        if not fn:
            return

        ext = QFileInfo(fn).suffix()
        if not ext:
            ex = selectedFilter.split("(*")[1].split(")")[0]
            if ex:
                fn += ex

        f = QFile(fn)
        if f.open(QIODevice.WriteOnly):
            from E5XML.HighlightingStylesWriter import HighlightingStylesWriter
            HighlightingStylesWriter(f, lexers).writeXML()
            f.close()
        else:
            E5MessageBox.critical(
                self, self.tr("Export Highlighting Styles"),
                self.tr(
                    """<p>The highlighting styles could not be exported"""
                    """ to file <b>{0}</b>.</p><p>Reason: {1}</p>""").format(
                        fn, f.errorString()))
Esempio n. 4
0
 def exportBookmarks(self):
     """
     Public method to export the bookmarks.
     """
     fileName, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
         None,
         self.tr("Export Bookmarks"),
         "eric6_bookmarks.xbel",
         self.tr("XBEL bookmarks (*.xbel);;"
                 "XBEL bookmarks (*.xml);;"
                 "HTML Bookmarks (*.html)"))
     if not fileName:
         return
     
     ext = QFileInfo(fileName).suffix()
     if not ext:
         ex = selectedFilter.split("(*")[1].split(")")[0]
         if ex:
             fileName += ex
     
     ext = QFileInfo(fileName).suffix()
     if ext == "html":
         from .NsHtmlWriter import NsHtmlWriter
         writer = NsHtmlWriter()
     else:
         from .XbelWriter import XbelWriter
         writer = XbelWriter()
     if not writer.write(fileName, self.__bookmarkRootNode):
         E5MessageBox.critical(
             None,
             self.tr("Exporting Bookmarks"),
             self.tr("""Error exporting bookmarks to <b>{0}</b>.""")
             .format(fileName))
Esempio n. 5
0
    def _getFileName(self, filter):
        """
        Protected method to get the file name of the export file from the user.
        
        @param filter the filter string to be used (string). The filter for
            "All Files (*)" is appended by this method.
        @return file name entered by the user (string)
        """
        filter_ = filter
        filter_ += ";;"
        filter_ += QCoreApplication.translate('Exporter', "All Files (*)")
        fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
            self.editor, self.tr("Export source"), "", filter_, "",
            E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))

        if fn:
            ext = QFileInfo(fn).suffix()
            if not ext:
                ex = selectedFilter.split("(*")[1].split(")")[0]
                if ex:
                    fn += ex
            if QFileInfo(fn).exists():
                res = E5MessageBox.yesNo(
                    self.editor,
                    self.tr("Export source"),
                    self.tr("<p>The file <b>{0}</b> already exists."
                            " Overwrite it?</p>").format(fn),
                    icon=E5MessageBox.Warning)
                if not res:
                    return ""

            fn = Utilities.toNativeSeparators(fn)

        return fn
Esempio n. 6
0
    def on_saveButton_clicked(self):
        """
        Private slot to handle the Save button press.
        
        It saves the diff shown in the dialog to a file in the local
        filesystem.
        """
        if isinstance(self.filename, list):
            if len(self.filename) > 1:
                fname = self.vcs.splitPathList(self.filename)[0]
            else:
                dname, fname = self.vcs.splitPath(self.filename[0])
                if fname != ".":
                    fname = "{0}.diff".format(self.filename[0])
                else:
                    fname = dname
        else:
            fname = self.vcs.splitPath(self.filename)[0]

        fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
            self,
            self.tr("Save Diff"),
            fname,
            self.tr("Patch Files (*.diff)"),
            None,
            E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite),
        )

        if not fname:
            return  # user aborted

        ext = QFileInfo(fname).suffix()
        if not ext:
            ex = selectedFilter.split("(*")[1].split(")")[0]
            if ex:
                fname += ex
        if QFileInfo(fname).exists():
            res = E5MessageBox.yesNo(
                self,
                self.tr("Save Diff"),
                self.tr("<p>The patch file <b>{0}</b> already exists." " Overwrite it?</p>").format(fname),
                icon=E5MessageBox.Warning,
            )
            if not res:
                return
        fname = Utilities.toNativeSeparators(fname)

        eol = e5App().getObject("Project").getEolString()
        try:
            f = open(fname, "w", encoding="utf-8", newline="")
            f.write(eol.join(self.contents.toPlainText().splitlines()))
            f.close()
        except IOError as why:
            E5MessageBox.critical(
                self,
                self.tr("Save Diff"),
                self.tr("<p>The patch file <b>{0}</b> could not be saved." "<br>Reason: {1}</p>").format(
                    fname, str(why)
                ),
            )
Esempio n. 7
0
    def __saveData(self):
        """
        Private slot to save the output to a file.
        """
        fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
            self, self.tr("Select data file"), self.workingDir,
            self.fileFilters, None)

        if fname:
            ext = QFileInfo(fname).suffix()
            if not ext:
                ex = selectedFilter.split("(*")[1].split(")")[0]
                if ex:
                    fname += ex

            txt = self.resultbox.toPlainText()

            try:
                f = open(fname, "w", encoding="utf-8")
                f.write(txt)
                f.close()
            except IOError as err:
                E5MessageBox.critical(
                    self, self.tr("Error saving data"),
                    self.tr("""<p>The data could not be written"""
                            """ to <b>{0}</b></p><p>Reason: {1}</p>""").format(
                                fname, str(err)))
Esempio n. 8
0
    def on_archiveButton_clicked(self):
        """
        Private slot to select the archive name via a file selection dialog.
        """
        type_ = self.typeComboBox.itemData(self.typeComboBox.currentIndex())

        archive = Utilities.fromNativeSeparators(self.archiveEdit.text())
        if not archive:
            archive = self.__projectPath

        if type_ == "files":
            archive = E5FileDialog.getExistingDirectory(
                self, self.tr("Select Archive Directory"), archive,
                E5FileDialog.Options(E5FileDialog.ShowDirsOnly))
        else:
            archive, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
                self, self.tr("Select Archive File"), archive,
                self.__fileFilters, None,
                E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
            if archive:
                ext = QFileInfo(archive).suffix()
                if not ext:
                    ex = selectedFilter.split("(*")[1].split(")")[0]
                    if ex:
                        archive += ex

        if archive:
            self.archiveEdit.setText(Utilities.toNativeSeparators(archive))
Esempio n. 9
0
 def on_archiveButton_clicked(self):
     """
     Private slot to select the archive name via a file selection dialog.
     """
     type_ = self.typeComboBox.itemData(self.typeComboBox.currentIndex())
     
     archive = Utilities.fromNativeSeparators(self.archiveEdit.text())
     if not archive:
         archive = self.__projectPath
     
     if type_ == "files":
         archive = E5FileDialog.getExistingDirectory(
             self,
             self.tr("Select Archive Directory"),
             archive,
             E5FileDialog.Options(E5FileDialog.ShowDirsOnly))
     else:
         archive, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
             self,
             self.tr("Select Archive File"),
             archive,
             self.__fileFilters,
             None,
             E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
         if archive:
             ext = QFileInfo(archive).suffix()
             if not ext:
                 ex = selectedFilter.split("(*")[1].split(")")[0]
                 if ex:
                     archive += ex
     
     if archive:
         self.archiveEdit.setText(Utilities.toNativeSeparators(archive))
Esempio n. 10
0
    def saveImage(self):
        """
        Public method to handle the save context menu entry.
        """
        fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
            self, self.tr("Save Diagram"), "",
            self.tr("Portable Network Graphics (*.png);;"
                    "Scalable Vector Graphics (*.svg)"), "",
            E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
        if fname:
            ext = QFileInfo(fname).suffix()
            if not ext:
                ex = selectedFilter.split("(*")[1].split(")")[0]
                if ex:
                    fname += ex
            if QFileInfo(fname).exists():
                res = E5MessageBox.yesNo(
                    self,
                    self.tr("Save Diagram"),
                    self.tr("<p>The file <b>{0}</b> already exists."
                            " Overwrite it?</p>").format(fname),
                    icon=E5MessageBox.Warning)
                if not res:
                    return

            success = super(UMLGraphicsView,
                            self).saveImage(fname,
                                            QFileInfo(fname).suffix().upper())
            if not success:
                E5MessageBox.critical(
                    self, self.tr("Save Diagram"),
                    self.tr(
                        """<p>The file <b>{0}</b> could not be saved.</p>""").
                    format(fname))
Esempio n. 11
0
 def exportBookmarks(self):
     """
     Public method to export the bookmarks.
     """
     fileName, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
         None,
         self.tr("Export Bookmarks"),
         "eric6_bookmarks.xbel",
         self.tr("XBEL bookmarks (*.xbel);;"
                 "XBEL bookmarks (*.xml);;"
                 "HTML Bookmarks (*.html)"))
     if not fileName:
         return
     
     ext = QFileInfo(fileName).suffix()
     if not ext:
         ex = selectedFilter.split("(*")[1].split(")")[0]
         if ex:
             fileName += ex
     
     ext = QFileInfo(fileName).suffix()
     if ext == "html":
         from .NsHtmlWriter import NsHtmlWriter
         writer = NsHtmlWriter()
     else:
         from .XbelWriter import XbelWriter
         writer = XbelWriter()
     if not writer.write(fileName, self.__bookmarkRootNode):
         E5MessageBox.critical(
             None,
             self.tr("Exporting Bookmarks"),
             self.tr("""Error exporting bookmarks to <b>{0}</b>.""")
             .format(fileName))
Esempio n. 12
0
 def on_saveButton_clicked(self):
     """
     Private slot to handle the Save button press.
     
     It saves the diff shown in the dialog to a file in the local
     filesystem.
     """
     if isinstance(self.__filename, list):
         if len(self.__filename) > 1:
             fname = self.vcs.splitPathList(self.__filename)[0]
         else:
             dname, fname = self.vcs.splitPath(self.__filename[0])
             if fname != '.':
                 fname = "{0}.diff".format(self.__filename[0])
             else:
                 fname = dname
     else:
         fname = self.vcs.splitPath(self.__filename)[0]
     
     fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
         self,
         self.tr("Save Diff"),
         fname,
         self.tr("Patch Files (*.diff)"),
         None,
         E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     
     if not fname:
         return  # user aborted
     
     ext = QFileInfo(fname).suffix()
     if not ext:
         ex = selectedFilter.split("(*")[1].split(")")[0]
         if ex:
             fname += ex
     if QFileInfo(fname).exists():
         res = E5MessageBox.yesNo(
             self,
             self.tr("Save Diff"),
             self.tr("<p>The patch file <b>{0}</b> already exists."
                     " Overwrite it?</p>").format(fname),
             icon=E5MessageBox.Warning)
         if not res:
             return
     fname = Utilities.toNativeSeparators(fname)
     
     eol = e5App().getObject("Project").getEolString()
     try:
         f = open(fname, "w", encoding="utf-8", newline="")
         f.write(eol.join(self.contents2.toPlainText().splitlines()))
         f.write(eol)
         f.close()
     except IOError as why:
         E5MessageBox.critical(
             self, self.tr('Save Diff'),
             self.tr(
                 '<p>The patch file <b>{0}</b> could not be saved.'
                 '<br>Reason: {1}</p>')
             .format(fname, str(why)))
Esempio n. 13
0
 def __saveAs(self, filename=""):
     """
     Private slot to save the diagram.
     
     @param filename name of the file to write to (string)
     """
     if not filename:
         fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
             self,
             self.tr("Save Diagram"),
             "",
             self.tr("Eric Graphics File (*.e5g);;All Files (*)"),
             "",
             E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
         if not fname:
             return
         ext = QFileInfo(fname).suffix()
         if not ext:
             ex = selectedFilter.split("(*")[1].split(")")[0]
             if ex:
                 fname += ex
         if QFileInfo(fname).exists():
             res = E5MessageBox.yesNo(
                 self,
                 self.tr("Save Diagram"),
                 self.tr("<p>The file <b>{0}</b> already exists."
                         " Overwrite it?</p>").format(fname),
                 icon=E5MessageBox.Warning)
             if not res:
                 return
         filename = fname
     
     lines = [
         "version: 1.0",
         "diagram_type: {0} ({1})".format(
             self.__diagramType, self.__diagramTypeString()),
         "scene_size: {0};{1}".format(self.scene.width(),
                                      self.scene.height()),
     ]
     persistenceData = self.builder.getPersistenceData()
     if persistenceData:
         lines.append("builder_data: {0}".format(persistenceData))
     lines.extend(self.umlView.getPersistenceData())
     
     try:
         f = open(filename, "w", encoding="utf-8")
         f.write("\n".join(lines))
         f.close()
     except (IOError, OSError) as err:
         E5MessageBox.critical(
             self,
             self.tr("Save Diagram"),
             self.tr(
                 """<p>The file <b>{0}</b> could not be saved.</p>"""
                 """<p>Reason: {1}</p>""").format(filename, str(err)))
         return
     
     self.__fileName = filename
    def __newUiForm(self, path):
        """
        Private slot to handle the New Form menu action for Qt-related
        projects.
        
        @param path full directory path for the new form file (string)
        """
        selectedForm, ok = QInputDialog.getItem(None, self.tr("New Form"),
                                                self.tr("Select a form type:"),
                                                self.templateTypes4, 0, False)
        if not ok or not selectedForm:
            # user pressed cancel
            return

        templateIndex = self.templateTypes4.index(selectedForm)
        templateFile = os.path.join(getConfig('ericTemplatesDir'),
                                    self.templates4[templateIndex])

        fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
            self, self.tr("New Form"), path,
            self.tr("Qt User-Interface Files (*.ui);;All Files (*)"), "",
            E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))

        if not fname:
            # user aborted or didn't enter a filename
            return

        ext = QFileInfo(fname).suffix()
        if not ext:
            ex = selectedFilter.split("(*")[1].split(")")[0]
            if ex:
                fname += ex

        if os.path.exists(fname):
            res = E5MessageBox.yesNo(
                self,
                self.tr("New Form"),
                self.tr("The file already exists! Overwrite it?"),
                icon=E5MessageBox.Warning)
            if not res:
                # user selected to not overwrite
                return

        try:
            shutil.copy(templateFile, fname)
        except IOError as e:
            E5MessageBox.critical(
                self, self.tr("New Form"),
                self.tr(
                    "<p>The new form file <b>{0}</b> could not be created.<br>"
                    "Problem: {1}</p>").format(fname, str(e)))
            return

        self.project.appendFile(fname)
        self.designerFile.emit(fname)
Esempio n. 15
0
 def on_saveButton_clicked(self):
     """
     Private slot to handle the Save button press.
     
     It saves the diff shown in the dialog to a file in the local
     filesystem.
     """
     dname, fname = Utilities.splitPath(self.filename2)
     if fname != '.':
         fname = "{0}.diff".format(self.filename2)
     else:
         fname = dname
         
     fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
         self,
         self.tr("Save Diff"),
         fname,
         self.tr("Patch Files (*.diff)"),
         None,
         E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     
     if not fname:
         return
     
     ext = QFileInfo(fname).suffix()
     if not ext:
         ex = selectedFilter.split("(*")[1].split(")")[0]
         if ex:
             fname += ex
     if QFileInfo(fname).exists():
         res = E5MessageBox.yesNo(
             self,
             self.tr("Save Diff"),
             self.tr("<p>The patch file <b>{0}</b> already exists."
                     " Overwrite it?</p>").format(fname),
             icon=E5MessageBox.Warning)
         if not res:
             return
     fname = Utilities.toNativeSeparators(fname)
     
     try:
         f = open(fname, "w", encoding="utf-8")
         txt = self.contents.toPlainText()
         try:
             f.write(txt)
         except UnicodeError:
             pass
         f.close()
     except IOError as why:
         E5MessageBox.critical(
             self, self.tr('Save Diff'),
             self.tr(
                 '<p>The patch file <b>{0}</b> could not be saved.<br />'
                 'Reason: {1}</p>').format(fname, str(why)))
Esempio n. 16
0
 def on_saveButton_clicked(self):
     """
     Private slot to handle the Save button press.
     
     It saves the diff shown in the dialog to a file in the local
     filesystem.
     """
     dname, fname = Utilities.splitPath(self.filename2)
     if fname != '.':
         fname = "{0}.diff".format(self.filename2)
     else:
         fname = dname
         
     fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
         self,
         self.tr("Save Diff"),
         fname,
         self.tr("Patch Files (*.diff)"),
         None,
         E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     
     if not fname:
         return
     
     ext = QFileInfo(fname).suffix()
     if not ext:
         ex = selectedFilter.split("(*")[1].split(")")[0]
         if ex:
             fname += ex
     if QFileInfo(fname).exists():
         res = E5MessageBox.yesNo(
             self,
             self.tr("Save Diff"),
             self.tr("<p>The patch file <b>{0}</b> already exists."
                     " Overwrite it?</p>").format(fname),
             icon=E5MessageBox.Warning)
         if not res:
             return
     fname = Utilities.toNativeSeparators(fname)
     
     try:
         f = open(fname, "w", encoding="utf-8")
         txt = self.contents.toPlainText()
         try:
             f.write(txt)
         except UnicodeError:
             pass
         f.close()
     except IOError as why:
         E5MessageBox.critical(
             self, self.tr('Save Diff'),
             self.tr(
                 '<p>The patch file <b>{0}</b> could not be saved.<br />'
                 'Reason: {1}</p>').format(fname, str(why)))
Esempio n. 17
0
 def __saveMessages(self):
     """
     Private slot to save the contents of the messages display.
     """
     hasText = not self.messages.document().isEmpty()
     if hasText:
         if Utilities.isWindowsPlatform():
             htmlExtension = "htm"
         else:
             htmlExtension = "html"
         fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
             self,
             self.tr("Save Messages"),
             "",
             self.tr(
                 "HTML Files (*.{0});;Text Files (*.txt);;All Files (*)")
             .format(htmlExtension),
             None,
             E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
         if fname:
             ext = QFileInfo(fname).suffix()
             if not ext:
                 ex = selectedFilter.split("(*")[1].split(")")[0]
                 if ex:
                     fname += ex
                 ext = QFileInfo(fname).suffix()
             if QFileInfo(fname).exists():
                 res = E5MessageBox.yesNo(
                     self,
                     self.tr("Save Messages"),
                     self.tr("<p>The file <b>{0}</b> already exists."
                             " Overwrite it?</p>").format(fname),
                     icon=E5MessageBox.Warning)
                 if not res:
                     return
                 fname = Utilities.toNativeSeparators(fname)
             
             try:
                 if ext.lower() in ["htm", "html"]:
                     txt = self.messages.toHtml()
                 else:
                     txt = self.messages.toPlainText()
                 f = open(fname, "w", encoding="utf-8")
                 f.write(txt)
                 f.close()
             except IOError as err:
                 E5MessageBox.critical(
                     self,
                     self.tr("Error saving Messages"),
                     self.tr(
                         """<p>The messages contents could not be written"""
                         """ to <b>{0}</b></p><p>Reason: {1}</p>""")
                     .format(fname, str(err)))
Esempio n. 18
0
 def __saveMessages(self):
     """
     Private slot to save the contents of the messages display.
     """
     hasText = not self.messages.document().isEmpty()
     if hasText:
         if Utilities.isWindowsPlatform():
             htmlExtension = "htm"
         else:
             htmlExtension = "html"
         fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
             self,
             self.tr("Save Messages"),
             "",
             self.tr(
                 "HTML Files (*.{0});;Text Files (*.txt);;All Files (*)")
             .format(htmlExtension),
             None,
             E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
         if fname:
             ext = QFileInfo(fname).suffix()
             if not ext:
                 ex = selectedFilter.split("(*")[1].split(")")[0]
                 if ex:
                     fname += ex
                 ext = QFileInfo(fname).suffix()
             if QFileInfo(fname).exists():
                 res = E5MessageBox.yesNo(
                     self,
                     self.tr("Save Messages"),
                     self.tr("<p>The file <b>{0}</b> already exists."
                             " Overwrite it?</p>").format(fname),
                     icon=E5MessageBox.Warning)
                 if not res:
                     return
                 fname = Utilities.toNativeSeparators(fname)
             
             try:
                 if ext.lower() in ["htm", "html"]:
                     txt = self.messages.toHtml()
                 else:
                     txt = self.messages.toPlainText()
                 f = open(fname, "w", encoding="utf-8")
                 f.write(txt)
                 f.close()
             except IOError as err:
                 E5MessageBox.critical(
                     self,
                     self.tr("Error saving Messages"),
                     self.tr(
                         """<p>The messages contents could not be written"""
                         """ to <b>{0}</b></p><p>Reason: {1}</p>""")
                     .format(fname, str(err)))
Esempio n. 19
0
 def on_saveButton_clicked(self):
     """
     Private slot to save the call trace info to a file.
     """
     if self.callTrace.topLevelItemCount() > 0:
         fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
             self,
             self.tr("Save Call Trace Info"),
             "",
             self.tr("Text Files (*.txt);;All Files (*)"),
             None,
             E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
         if fname:
             ext = QFileInfo(fname).suffix()
             if not ext:
                 ex = selectedFilter.split("(*")[1].split(")")[0]
                 if ex:
                     fname += ex
             if QFileInfo(fname).exists():
                 res = E5MessageBox.yesNo(
                     self,
                     self.tr("Save Call Trace Info"),
                     self.tr("<p>The file <b>{0}</b> already exists."
                             " Overwrite it?</p>").format(fname),
                     icon=E5MessageBox.Warning)
                 if not res:
                     return
                 fname = Utilities.toNativeSeparators(fname)
             
             try:
                 f = open(fname, "w", encoding="utf-8")
                 itm = self.callTrace.topLevelItem(0)
                 while itm is not None:
                     isCall = itm.data(0, Qt.UserRole)
                     if isCall:
                         call = "->"
                     else:
                         call = "<-"
                     f.write("{0} {1} || {2}\n".format(
                         call,
                         itm.text(1), itm.text(2)))
                     itm = self.callTrace.itemBelow(itm)
                 f.close()
             except IOError as err:
                 E5MessageBox.critical(
                     self,
                     self.tr("Error saving Call Trace Info"),
                     self.tr("""<p>The call trace info could not"""
                             """ be written to <b>{0}</b></p>"""
                             """<p>Reason: {1}</p>""")
                     .format(fname, str(err)))
 def __exportCertificate(self, name, cert):
     """
     Private slot to export a certificate.
     
     @param name default file name without extension (string)
     @param cert certificate to be exported (QSslCertificate)
     """
     if cert is not None:
         fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
             self,
             self.tr("Export Certificate"),
             name,
             self.tr("Certificate File (PEM) (*.pem);;"
                     "Certificate File (DER) (*.der)"),
             None,
             E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
         
         if fname:
             ext = QFileInfo(fname).suffix()
             if not ext or ext not in ["pem", "der"]:
                 ex = selectedFilter.split("(*")[1].split(")")[0]
                 if ex:
                     fname += ex
             if QFileInfo(fname).exists():
                 res = E5MessageBox.yesNo(
                     self,
                     self.tr("Export Certificate"),
                     self.tr("<p>The file <b>{0}</b> already exists."
                             " Overwrite it?</p>").format(fname),
                     icon=E5MessageBox.Warning)
                 if not res:
                     return
             
             f = QFile(fname)
             if not f.open(QIODevice.WriteOnly):
                 E5MessageBox.critical(
                     self,
                     self.tr("Export Certificate"),
                     self.tr(
                         """<p>The certificate could not be written"""
                         """ to file <b>{0}</b></p><p>Error: {1}</p>""")
                     .format(fname, f.errorString()))
                 return
             
             if fname.endswith(".pem"):
                 crt = cert.toPem()
             else:
                 crt = cert.toDer()
             f.write(crt)
             f.close()
Esempio n. 21
0
    def __exportCertificate(self, name, cert):
        """
        Private slot to export a certificate.
        
        @param name default file name without extension (string)
        @param cert certificate to be exported (QSslCertificate)
        """
        if cert is not None:
            fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
                self,
                self.tr("Export Certificate"),
                name,
                self.tr("Certificate File (PEM) (*.pem);;" "Certificate File (DER) (*.der)"),
                None,
                E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite),
            )

            if fname:
                ext = QFileInfo(fname).suffix()
                if not ext or ext not in ["pem", "der"]:
                    ex = selectedFilter.split("(*")[1].split(")")[0]
                    if ex:
                        fname += ex
                if QFileInfo(fname).exists():
                    res = E5MessageBox.yesNo(
                        self,
                        self.tr("Export Certificate"),
                        self.tr("<p>The file <b>{0}</b> already exists." " Overwrite it?</p>").format(fname),
                        icon=E5MessageBox.Warning,
                    )
                    if not res:
                        return

                f = QFile(fname)
                if not f.open(QIODevice.WriteOnly):
                    E5MessageBox.critical(
                        self,
                        self.tr("Export Certificate"),
                        self.tr(
                            """<p>The certificate could not be written""" """ to file <b>{0}</b></p><p>Error: {1}</p>"""
                        ).format(fname, f.errorString()),
                    )
                    return

                if fname.endswith(".pem"):
                    crt = cert.toPem()
                else:
                    crt = cert.toDer()
                f.write(crt)
                f.close()
Esempio n. 22
0
 def on_saveToButton_clicked(self):
     """
     Private slot to write the requirements text to a new file.
     """
     fileName, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
         self, self.tr("Generate Requirements"), os.path.expanduser("~"),
         self.tr("Text Files (*.txt);;All Files (*)"), None,
         E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     if fileName:
         ext = os.path.splitext(fileName)[1]
         if not ext:
             ex = selectedFilter.split("(*")[1].split(")")[0]
             if ex:
                 fileName += ex
         self.__writeToFile(fileName)
Esempio n. 23
0
    def __export(self):
        """
        Private slot to handle the Export context menu action.
        """
        fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
            self, self.tr("Export Templates"), "",
            self.tr("Templates Files (*.e4c);; All Files (*)"), "",
            E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))

        if fn:
            ext = QFileInfo(fn).suffix()
            if not ext:
                ex = selectedFilter.split("(*")[1].split(")")[0]
                if ex:
                    fn += ex
            self.writeTemplates(fn)
Esempio n. 24
0
    def on_saveButton_clicked(self):
        """
        Private slot to save the call trace info to a file.
        """
        if self.callTrace.topLevelItemCount() > 0:
            fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
                self, self.tr("Save Call Trace Info"), "",
                self.tr("Text Files (*.txt);;All Files (*)"), None,
                E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
            if fname:
                ext = QFileInfo(fname).suffix()
                if not ext:
                    ex = selectedFilter.split("(*")[1].split(")")[0]
                    if ex:
                        fname += ex
                if QFileInfo(fname).exists():
                    res = E5MessageBox.yesNo(
                        self,
                        self.tr("Save Call Trace Info"),
                        self.tr("<p>The file <b>{0}</b> already exists."
                                " Overwrite it?</p>").format(fname),
                        icon=E5MessageBox.Warning)
                    if not res:
                        return
                    fname = Utilities.toNativeSeparators(fname)

                try:
                    f = open(fname, "w", encoding="utf-8")
                    itm = self.callTrace.topLevelItem(0)
                    while itm is not None:
                        isCall = itm.data(0, Qt.UserRole)
                        if isCall:
                            call = "->"
                        else:
                            call = "<-"
                        f.write("{0} {1} || {2}\n".format(
                            call, itm.text(1), itm.text(2)))
                        itm = self.callTrace.itemBelow(itm)
                    f.close()
                except IOError as err:
                    E5MessageBox.critical(
                        self, self.tr("Error saving Call Trace Info"),
                        self.tr("""<p>The call trace info could not"""
                                """ be written to <b>{0}</b></p>"""
                                """<p>Reason: {1}</p>""").format(
                                    fname, str(err)))
Esempio n. 25
0
    def __saveChat(self):
        """
        Private slot to save the contents of the chat display.
        """
        txt = self.chatEdit.toPlainText()
        if txt:
            fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
                self,
                self.tr("Save Chat"),
                "",
                self.tr("Text Files (*.txt);;All Files (*)"),
                None,
                E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite),
            )
            if fname:
                ext = QFileInfo(fname).suffix()
                if not ext:
                    ex = selectedFilter.split("(*")[1].split(")")[0]
                    if ex:
                        fname += ex
                if QFileInfo(fname).exists():
                    res = E5MessageBox.yesNo(
                        self,
                        self.tr("Save Chat"),
                        self.tr("<p>The file <b>{0}</b> already exists." " Overwrite it?</p>").format(fname),
                        icon=E5MessageBox.Warning,
                    )
                    if not res:
                        return
                    fname = Utilities.toNativeSeparators(fname)

                try:
                    f = open(fname, "w", encoding="utf-8")
                    f.write(txt)
                    f.close()
                except IOError as err:
                    E5MessageBox.critical(
                        self,
                        self.tr("Error saving Chat"),
                        self.tr(
                            """<p>The chat contents could not be"""
                            """ written to <b>{0}</b></p>"""
                            """<p>Reason: {1}</p>"""
                        ).format(fname, str(err)),
                    )
Esempio n. 26
0
 def __saveStackTrace(self):
     """
     Private slot to save the stack trace info to a file.
     """
     if self.topLevelItemCount() > 0:
         fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
             self,
             self.tr("Save Call Stack Info"),
             "",
             self.tr("Text Files (*.txt);;All Files (*)"),
             None,
             E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
         if fname:
             ext = QFileInfo(fname).suffix()
             if not ext:
                 ex = selectedFilter.split("(*")[1].split(")")[0]
                 if ex:
                     fname += ex
             if QFileInfo(fname).exists():
                 res = E5MessageBox.yesNo(
                     self,
                     self.tr("Save Call Stack Info"),
                     self.tr("<p>The file <b>{0}</b> already exists."
                             " Overwrite it?</p>").format(fname),
                     icon=E5MessageBox.Warning)
                 if not res:
                     return
                 fname = Utilities.toNativeSeparators(fname)
             
             try:
                 f = open(fname, "w", encoding="utf-8")
                 itm = self.topLevelItem(0)
                 while itm is not None:
                     f.write("{0}\n".format(itm.text(0)))
                     f.write(78 * "=" + "\n")
                     itm = self.itemBelow(itm)
                 f.close()
             except IOError as err:
                 E5MessageBox.critical(
                     self,
                     self.tr("Error saving Call Stack Info"),
                     self.tr("""<p>The call stack info could not be"""
                             """ written to <b>{0}</b></p>"""
                             """<p>Reason: {1}</p>""")
                     .format(fname, str(err)))
Esempio n. 27
0
 def saveMultiProjectAs(self):
     """
     Public slot to save the current multi project to a different file.
     
     @return flag indicating success (boolean)
     """
     defaultFilter = self.tr("Multiproject Files (*.e5m)")
     if self.ppath:
         defaultPath = self.ppath
     else:
         defaultPath = Preferences.getMultiProject("Workspace") or \
             Utilities.getHomeDir()
     fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
         self.parent(),
         self.tr("Save multiproject as"),
         defaultPath,
         self.tr("Multiproject Files (*.e5m)"),
         defaultFilter,
         E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     
     if fn:
         ext = QFileInfo(fn).suffix()
         if not ext:
             ex = selectedFilter.split("(*")[1].split(")")[0]
             if ex:
                 fn += ex
         if QFileInfo(fn).exists():
             res = E5MessageBox.yesNo(
                 self.parent(),
                 self.tr("Save File"),
                 self.tr("<p>The file <b>{0}</b> already exists."
                         " Overwrite it?</p>").format(fn),
                 icon=E5MessageBox.Warning)
             if not res:
                 return False
             
         self.name = QFileInfo(fn).baseName()
         self.__writeMultiProject(fn)
         
         self.multiProjectClosed.emit()
         self.multiProjectOpened.emit()
         return True
     else:
         return False
Esempio n. 28
0
 def __export(self):
     """
     Private slot to handle the Export context menu action.
     """
     fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
         self,
         self.tr("Export Templates"),
         "",
         self.tr("Templates Files (*.e4c);; All Files (*)"),
         "",
         E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     
     if fn:
         ext = QFileInfo(fn).suffix()
         if not ext:
             ex = selectedFilter.split("(*")[1].split(")")[0]
             if ex:
                 fn += ex
         self.writeTemplates(fn)
Esempio n. 29
0
 def on_saveButton_clicked(self):
     """
     Private slot to save the regexp to a file.
     """
     fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
         self,
         self.tr("Save regular expression"),
         "",
         self.tr("RegExp Files (*.rx);;All Files (*)"),
         None,
         E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     if fname:
         ext = QFileInfo(fname).suffix()
         if not ext:
             ex = selectedFilter.split("(*")[1].split(")")[0]
             if ex:
                 fname += ex
         if QFileInfo(fname).exists():
             res = E5MessageBox.yesNo(
                 self,
                 self.tr("Save regular expression"),
                 self.tr("<p>The file <b>{0}</b> already exists."
                         " Overwrite it?</p>").format(fname),
                 icon=E5MessageBox.Warning)
             if not res:
                 return
         
         syntax = self.syntaxCombo.itemData(self.syntaxCombo.currentIndex())
         try:
             f = open(
                 Utilities.toNativeSeparators(fname), "w", encoding="utf-8")
             f.write("syntax={0}\n".format(syntax))
             f.write(self.regexpLineEdit.text())
             f.close()
         except IOError as err:
             E5MessageBox.information(
                 self,
                 self.tr("Save regular expression"),
                 self.tr("""<p>The regular expression could not"""
                         """ be saved.</p><p>Reason: {0}</p>""")
                 .format(str(err)))
Esempio n. 30
0
    def _getFileName(self, filter):
        """
        Protected method to get the file name of the export file from the user.
        
        @param filter the filter string to be used (string). The filter for
            "All Files (*)" is appended by this method.
        @return file name entered by the user (string)
        """
        filter_ = filter
        filter_ += ";;"
        filter_ += QCoreApplication.translate("Exporter", "All Files (*)")
        fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
            self.editor,
            self.tr("Export source"),
            "",
            filter_,
            "",
            E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite),
        )

        if fn:
            ext = QFileInfo(fn).suffix()
            if not ext:
                ex = selectedFilter.split("(*")[1].split(")")[0]
                if ex:
                    fn += ex
            if QFileInfo(fn).exists():
                res = E5MessageBox.yesNo(
                    self.editor,
                    self.tr("Export source"),
                    self.tr("<p>The file <b>{0}</b> already exists." " Overwrite it?</p>").format(fn),
                    icon=E5MessageBox.Warning,
                )
                if not res:
                    return ""

            fn = Utilities.toNativeSeparators(fn)

        return fn
Esempio n. 31
0
    def __saveChat(self):
        """
        Private slot to save the contents of the chat display.
        """
        txt = self.chatEdit.toPlainText()
        if txt:
            fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
                self, self.tr("Save Chat"), "",
                self.tr("Text Files (*.txt);;All Files (*)"), None,
                E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
            if fname:
                ext = QFileInfo(fname).suffix()
                if not ext:
                    ex = selectedFilter.split("(*")[1].split(")")[0]
                    if ex:
                        fname += ex
                if QFileInfo(fname).exists():
                    res = E5MessageBox.yesNo(
                        self,
                        self.tr("Save Chat"),
                        self.tr("<p>The file <b>{0}</b> already exists."
                                " Overwrite it?</p>").format(fname),
                        icon=E5MessageBox.Warning)
                    if not res:
                        return
                    fname = Utilities.toNativeSeparators(fname)

                try:
                    f = open(fname, "w", encoding="utf-8")
                    f.write(txt)
                    f.close()
                except IOError as err:
                    E5MessageBox.critical(
                        self, self.tr("Error saving Chat"),
                        self.tr("""<p>The chat contents could not be"""
                                """ written to <b>{0}</b></p>"""
                                """<p>Reason: {1}</p>""").format(
                                    fname, str(err)))
Esempio n. 32
0
 def saveImage(self):
     """
     Public method to handle the save context menu entry.
     """
     fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
         self,
         self.tr("Save Diagram"),
         "",
         self.tr("Portable Network Graphics (*.png);;"
                 "Scalable Vector Graphics (*.svg)"),
         "",
         E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     if fname:
         ext = QFileInfo(fname).suffix()
         if not ext:
             ex = selectedFilter.split("(*")[1].split(")")[0]
             if ex:
                 fname += ex
         if QFileInfo(fname).exists():
             res = E5MessageBox.yesNo(
                 self,
                 self.tr("Save Diagram"),
                 self.tr("<p>The file <b>{0}</b> already exists."
                         " Overwrite it?</p>").format(fname),
                 icon=E5MessageBox.Warning)
             if not res:
                 return
         
         success = super(UMLGraphicsView, self).saveImage(
             fname, QFileInfo(fname).suffix().upper())
         if not success:
             E5MessageBox.critical(
                 self,
                 self.tr("Save Diagram"),
                 self.tr(
                     """<p>The file <b>{0}</b> could not be saved.</p>""")
                 .format(fname))
 def __exportStyles(self, lexers):
     """
     Private method to export the styles of the given lexers.
     
     @param lexers list of lexer objects for which to export the styles
     """
     fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
         self,
         self.tr("Export Highlighting Styles"),
         "",
         self.tr("Highlighting styles file (*.e4h)"),
         "",
         E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     
     if not fn:
         return
     
     ext = QFileInfo(fn).suffix()
     if not ext:
         ex = selectedFilter.split("(*")[1].split(")")[0]
         if ex:
             fn += ex
     
     f = QFile(fn)
     if f.open(QIODevice.WriteOnly):
         from E5XML.HighlightingStylesWriter import HighlightingStylesWriter
         HighlightingStylesWriter(f, lexers).writeXML()
         f.close()
     else:
         E5MessageBox.critical(
             self,
             self.tr("Export Highlighting Styles"),
             self.tr(
                 """<p>The highlighting styles could not be exported"""
                 """ to file <b>{0}</b>.</p><p>Reason: {1}</p>""")
             .format(fn, f.errorString())
         )
Esempio n. 34
0
 def __newResource(self):
     """
     Private slot to handle the New Resource menu action.
     """
     itm = self.model().item(self.currentIndex())
     if itm is None:
         path = self.project.ppath
     else:
         try:
             path = os.path.dirname(itm.fileName())
         except AttributeError:
             try:
                 path = itm.dirName()
             except AttributeError:
                 path = os.path.join(self.project.ppath, itm.data(0))
     
     if self.hooks["newResource"] is not None:
         self.hooks["newResource"](path)
     else:
         fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
             self,
             self.tr("New Resource"),
             path,
             self.tr("Qt Resource Files (*.qrc)"),
             "",
             E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
         
         if not fname:
             # user aborted or didn't enter a filename
             return
         
         ext = QFileInfo(fname).suffix()
         if not ext:
             ex = selectedFilter.split("(*")[1].split(")")[0]
             if ex:
                 fname += ex
         
         if os.path.exists(fname):
             res = E5MessageBox.yesNo(
                 self,
                 self.tr("New Resource"),
                 self.tr("The file already exists! Overwrite it?"),
                 icon=E5MessageBox.Warning)
             if not res:
                 # user selected to not overwrite
                 return
         
         try:
             if self.project.useSystemEol():
                 newline = None
             else:
                 newline = self.project.getEolString()
             rcfile = open(fname, 'w', encoding="utf-8", newline=newline)
             rcfile.write('<!DOCTYPE RCC>\n')
             rcfile.write('<RCC version="1.0">\n')
             rcfile.write('<qresource>\n')
             rcfile.write('</qresource>\n')
             rcfile.write('</RCC>\n')
             rcfile.close()
         except IOError as e:
             E5MessageBox.critical(
                 self,
                 self.tr("New Resource"),
                 self.tr(
                     "<p>The new resource file <b>{0}</b> could not"
                     " be created.<br>Problem: {1}</p>")
                 .format(fname, str(e)))
             return
         
         self.project.appendFile(fname)
         self.sourceFile.emit(fname)
Esempio n. 35
0
 def __newUiForm(self, path):
     """
     Private slot to handle the New Form menu action for Qt-related
     projects.
     
     @param path full directory path for the new form file (string)
     """
     selectedForm, ok = QInputDialog.getItem(
         None,
         self.tr("New Form"),
         self.tr("Select a form type:"),
         self.templateTypes4,
         0, False)
     if not ok or not selectedForm:
         # user pressed cancel
         return
     
     templateIndex = self.templateTypes4.index(selectedForm)
     templateFile = os.path.join(
         getConfig('ericTemplatesDir'), self.templates4[templateIndex])
     
     fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
         self,
         self.tr("New Form"),
         path,
         self.tr("Qt User-Interface Files (*.ui);;All Files (*)"),
         "",
         E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     
     if not fname:
         # user aborted or didn't enter a filename
         return
     
     ext = QFileInfo(fname).suffix()
     if not ext:
         ex = selectedFilter.split("(*")[1].split(")")[0]
         if ex:
             fname += ex
     
     if os.path.exists(fname):
         res = E5MessageBox.yesNo(
             self,
             self.tr("New Form"),
             self.tr("The file already exists! Overwrite it?"),
             icon=E5MessageBox.Warning)
         if not res:
             # user selected to not overwrite
             return
     
     try:
         shutil.copy(templateFile, fname)
     except IOError as e:
         E5MessageBox.critical(
             self,
             self.tr("New Form"),
             self.tr(
                 "<p>The new form file <b>{0}</b> could not be created.<br>"
                 "Problem: {1}</p>").format(fname, str(e)))
         return
     
     self.project.appendFile(fname)
     self.designerFile.emit(fname)
 def __newResource(self):
     """
     Private slot to handle the New Resource menu action.
     """
     itm = self.model().item(self.currentIndex())
     if itm is None:
         path = self.project.ppath
     else:
         try:
             path = os.path.dirname(itm.fileName())
         except AttributeError:
             try:
                 path = itm.dirName()
             except AttributeError:
                 path = os.path.join(self.project.ppath, itm.data(0))
     
     if self.hooks["newResource"] is not None:
         self.hooks["newResource"](path)
     else:
         fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
             self,
             self.tr("New Resource"),
             path,
             self.tr("Qt Resource Files (*.qrc)"),
             "",
             E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
         
         if not fname:
             # user aborted or didn't enter a filename
             return
         
         ext = QFileInfo(fname).suffix()
         if not ext:
             ex = selectedFilter.split("(*")[1].split(")")[0]
             if ex:
                 fname += ex
         
         if os.path.exists(fname):
             res = E5MessageBox.yesNo(
                 self,
                 self.tr("New Resource"),
                 self.tr("The file already exists! Overwrite it?"),
                 icon=E5MessageBox.Warning)
             if not res:
                 # user selected to not overwrite
                 return
         
         try:
             if self.project.useSystemEol():
                 newline = None
             else:
                 newline = self.project.getEolString()
             rcfile = open(fname, 'w', encoding="utf-8", newline=newline)
             rcfile.write('<!DOCTYPE RCC>\n')
             rcfile.write('<RCC version="1.0">\n')
             rcfile.write('<qresource>\n')
             rcfile.write('</qresource>\n')
             rcfile.write('</RCC>\n')
             rcfile.close()
         except IOError as e:
             E5MessageBox.critical(
                 self,
                 self.tr("New Resource"),
                 self.tr(
                     "<p>The new resource file <b>{0}</b> could not"
                     " be created.<br>Problem: {1}</p>")
                 .format(fname, str(e)))
             return
         
         self.project.appendFile(fname)
         self.sourceFile.emit(fname)