Esempio n. 1
0
    def __saveImage(self):
        """
        Private slot to handle the Save Image menu action.
        """
        if self.mainWidget is None:
            E5MessageBox.critical(self, self.tr("Save Image"),
                                  self.tr("""There is no UI file loaded."""))
            return

        defaultExt = "PNG"
        filters = ""
        formats = QImageWriter.supportedImageFormats()
        for imageFormat in formats:
            filters = "{0}*.{1} ".format(filters,
                                         bytes(imageFormat).decode().lower())
        fileFilter = self.tr("Images ({0})").format(filters[:-1])

        fname = E5FileDialog.getSaveFileName(self, self.tr("Save Image"), "",
                                             fileFilter)
        if not fname:
            return

        ext = QFileInfo(fname).suffix().upper()
        if not ext:
            ext = defaultExt
            fname.append(".{0}".format(defaultExt.lower()))

        pix = self.mainWidget.grab()
        self.__updateChildren(self.lastStyle)
        if not pix.save(fname, str(ext)):
            E5MessageBox.critical(
                self, self.tr("Save Image"),
                self.tr("""<p>The file <b>{0}</b> could not be saved.</p>""").
                format(fname))
Esempio n. 2
0
 def __saveImage(self):
     """
     Private slot to save the selected image to disk.
     """
     act = self.sender()
     index = act.data()
     itm = self.imagesTree.topLevelItem(index)
     if itm is None:
         return
     
     imageUrl = QUrl(itm.text(1))
     if not imageUrl.host():
         imageUrl.setHost(QUrl(self.siteAddressLabel.text()).host())
         imageUrl.setScheme(QUrl(self.siteAddressLabel.text()).scheme())
     
     import Helpviewer.HelpWindow
     cache = Helpviewer.HelpWindow.HelpWindow.networkAccessManager().cache()
     if cache:
         cacheData = cache.data(imageUrl)
     else:
         cacheData = None
     if not cacheData:
         E5MessageBox.critical(
             self,
             self.tr("Save Image"),
             self.tr("""This image is not available."""))
         return
     
     downloadDirectory = Helpviewer.HelpWindow.HelpWindow\
         .downloadManager().downloadDirectory()
     fn = os.path.join(downloadDirectory, os.path.basename(itm.text(1)))
     filename = E5FileDialog.getSaveFileName(
         self,
         self.tr("Save Image"),
         fn,
         self.tr("All Files (*)"),
         E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     
     if not filename:
         return
     
     f = QFile(filename)
     if not f.open(QFile.WriteOnly):
         E5MessageBox.critical(
             self,
             self.tr("Save Image"),
             self.tr(
                 """<p>Cannot write to file <b>{0}</b>.</p>""")
             .format(filename))
         return
     f.write(cacheData.readAll())
     f.close()
Esempio n. 3
0
 def __saveImage(self):
     """
     Private slot to save the selected image to disk.
     """
     act = self.sender()
     index = act.data()
     itm = self.imagesTree.topLevelItem(index)
     if itm is None:
         return
     
     imageUrl = QUrl(itm.text(1))
     if not imageUrl.host():
         imageUrl.setHost(QUrl(self.siteAddressLabel.text()).host())
         imageUrl.setScheme(QUrl(self.siteAddressLabel.text()).scheme())
     
     import Helpviewer.HelpWindow
     cache = Helpviewer.HelpWindow.HelpWindow.networkAccessManager().cache()
     if cache:
         cacheData = cache.data(imageUrl)
     else:
         cacheData = None
     if not cacheData:
         E5MessageBox.critical(
             self,
             self.tr("Save Image"),
             self.tr("""This image is not available."""))
         return
     
     downloadDirectory = Helpviewer.HelpWindow.HelpWindow\
         .downloadManager().downloadDirectory()
     fn = os.path.join(downloadDirectory, os.path.basename(itm.text(1)))
     filename = E5FileDialog.getSaveFileName(
         self,
         self.tr("Save Image"),
         fn,
         self.tr("All Files (*)"),
         E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     
     if not filename:
         return
     
     f = QFile(filename)
     if not f.open(QFile.WriteOnly):
         E5MessageBox.critical(
             self,
             self.tr("Save Image"),
             self.tr(
                 """<p>Cannot write to file <b>{0}</b>.</p>""")
             .format(filename))
         return
     f.write(cacheData.readAll())
     f.close()
    def on_fileButton_clicked(self):
        """
        Private slot to select a file via a file selection dialog.
        """
        fileName = E5FileDialog.getSaveFileName(
            self, self.tr("Select Archive File"),
            Utilities.fromNativeSeparators(self.fileEdit.text()), "")

        if fileName:
            root, ext = os.path.splitext(fileName)
            if not ext:
                ext = "." + self.formatComboBox.currentText()
            fileName = root + ext
            self.fileEdit.setText(Utilities.toNativeSeparators(fileName))
Esempio n. 5
0
    def on_dirButton_clicked(self):
        """
        Private slot to handle the button press for selecting the target via a
        selection dialog.
        """
        if os.path.isdir(self.source):
            target = E5FileDialog.getExistingDirectory(
                self, self.tr("Select target"), self.targetEdit.text(),
                E5FileDialog.Options(E5FileDialog.ShowDirsOnly))
        else:
            target = E5FileDialog.getSaveFileName(
                self, self.tr("Select target"), self.targetEdit.text(), "",
                E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))

        if target:
            self.targetEdit.setText(Utilities.toNativeSeparators(target))
Esempio n. 6
0
 def __savePageScreen(self):
     """
     Private slot to save the page screen.
     
     @return flag indicating success (boolean)
     """
     fileName = E5FileDialog.getSaveFileName(
         self,
         self.tr("Save Page Screen"),
         self.tr("screen.png"),
         self.tr("Portable Network Graphics File (*.png)"),
         E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     if not fileName:
         return False
     
     if QFileInfo(fileName).exists():
         res = E5MessageBox.yesNo(
             self,
             self.tr("Save Page Screen"),
             self.tr("<p>The file <b>{0}</b> already exists."
                     " Overwrite it?</p>").format(fileName),
             icon=E5MessageBox.Warning)
         if not res:
             return False
     
     file = QFile(fileName)
     if not file.open(QFile.WriteOnly):
         E5MessageBox.warning(
             self,
             self.tr("Save Page Screen"),
             self.tr("Cannot write file '{0}:\n{1}.")
             .format(fileName, file.errorString()))
         return False
     
     res = self.__pagePixmap.save(file)
     file.close()
     
     if not res:
         E5MessageBox.warning(
             self,
             self.tr("Save Page Screen"),
             self.tr("Cannot write file '{0}:\n{1}.")
             .format(fileName, file.errorString()))
         return False
     
     return True
Esempio n. 7
0
 def __savePageScreen(self):
     """
     Private slot to save the page screen.
     
     @return flag indicating success (boolean)
     """
     fileName = E5FileDialog.getSaveFileName(
         self,
         self.tr("Save Page Screen"),
         self.tr("screen.png"),
         self.tr("Portable Network Graphics File (*.png)"),
         E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     if not fileName:
         return False
     
     if QFileInfo(fileName).exists():
         res = E5MessageBox.yesNo(
             self,
             self.tr("Save Page Screen"),
             self.tr("<p>The file <b>{0}</b> already exists."
                     " Overwrite it?</p>").format(fileName),
             icon=E5MessageBox.Warning)
         if not res:
             return False
     
     file = QFile(fileName)
     if not file.open(QFile.WriteOnly):
         E5MessageBox.warning(
             self,
             self.tr("Save Page Screen"),
             self.tr("Cannot write file '{0}:\n{1}.")
             .format(fileName, file.errorString()))
         return False
     
     res = self.__pagePixmap.save(file)
     file.close()
     
     if not res:
         E5MessageBox.warning(
             self,
             self.tr("Save Page Screen"),
             self.tr("Cannot write file '{0}:\n{1}.")
             .format(fileName, file.errorString()))
         return False
     
     return True
Esempio n. 8
0
    def __saveImage(self, act):
        """
        Private slot to save the selected image to disk.
        
        @param act reference to the action that triggered
        @type QAction
        """
        index = act.data()
        itm = self.imagesTree.topLevelItem(index)
        if itm is None:
            return

        if (not self.imagePreview.scene()
                or len(self.imagePreview.scene().items()) == 0):
            return

        pixmapItem = self.imagePreview.scene().items()[0]
        if not isinstance(pixmapItem, QGraphicsPixmapItem):
            return

        if pixmapItem.pixmap().isNull():
            E5MessageBox.warning(
                self, self.tr("Save Image"),
                self.tr("""<p>This preview is not available.</p>"""))
            return

        imageFileName = WebBrowserTools.getFileNameFromUrl(QUrl(itm.text(1)))
        index = imageFileName.rfind(".")
        if index != -1:
            imageFileName = imageFileName[:index] + ".png"

        filename = E5FileDialog.getSaveFileName(
            self, self.tr("Save Image"), imageFileName,
            self.tr("All Files (*)"),
            E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))

        if not filename:
            return

        if not pixmapItem.pixmap().save(filename, "PNG"):
            E5MessageBox.critical(
                self, self.tr("Save Image"),
                self.tr("""<p>Cannot write to file <b>{0}</b>.</p>""").format(
                    filename))
            return
Esempio n. 9
0
 def __saveImage(self):
     """
     Private slot to handle the Save Image menu action.
     """
     if self.mainWidget is None:
         E5MessageBox.critical(
             self,
             self.tr("Save Image"),
             self.tr("""There is no UI file loaded."""))
         return
     
     defaultExt = "PNG"
     filters = ""
     formats = QImageWriter.supportedImageFormats()
     for format in formats:
         filters = "{0}*.{1} ".format(
             filters, bytes(format).decode().lower())
     filter = self.tr("Images ({0})").format(filters[:-1])
     
     fname = E5FileDialog.getSaveFileName(
         self,
         self.tr("Save Image"),
         "",
         filter)
     if not fname:
         return
         
     ext = QFileInfo(fname).suffix().upper()
     if not ext:
         ext = defaultExt
         fname.append(".{0}".format(defaultExt.lower()))
     
     if qVersion() >= "5.0.0":
         pix = self.mainWidget.grab()
     else:
         pix = QPixmap.grabWidget(self.mainWidget)
     self.__updateChildren(self.lastStyle)
     if not pix.save(fname, str(ext)):
         E5MessageBox.critical(
             self,
             self.tr("Save Image"),
             self.tr(
                 """<p>The file <b>{0}</b> could not be saved.</p>""")
             .format(fname))
Esempio n. 10
0
 def on_dirButton_clicked(self):
     """
     Private slot to handle the button press for selecting the target via a
     selection dialog.
     """
     if os.path.isdir(self.source):
         target = E5FileDialog.getExistingDirectory(
             self,
             self.tr("Select target"),
             self.targetEdit.text(),
             E5FileDialog.Options(E5FileDialog.ShowDirsOnly))
     else:
         target = E5FileDialog.getSaveFileName(
             self,
             self.tr("Select target"),
             self.targetEdit.text(),
             "",
             E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
     
     if target:
         self.targetEdit.setText(Utilities.toNativeSeparators(target))
Esempio n. 11
0
 def on_outputFileButton_clicked(self):
     """
     Private slot to select the output file.
     
     It displays a file selection dialog to
     select the file the api is written to.
     """
     startFile = Utilities.fromNativeSeparators(self.outputFileEdit.text())
     if not startFile:
         startFile = self.project.getProjectName() + ".api"
     filename = E5FileDialog.getSaveFileName(
         self,
         self.tr("Select output file"),
         startFile,
         self.tr("API files (*.api);;All files (*)"))
         
     if filename:
         # make it relative, if it is in a subdirectory of the project path
         fn = Utilities.toNativeSeparators(filename)
         fn = self.project.getRelativePath(fn)
         self.outputFileEdit.setText(fn)
Esempio n. 12
0
 def __getFileName(self):
     """
     Private method to get the file name to save to from the user.
     """
     if self.__gettingFileName:
         return
     
     import Helpviewer.HelpWindow
     downloadDirectory = Helpviewer.HelpWindow.HelpWindow\
         .downloadManager().downloadDirectory()
     
     if self.__fileName:
         fileName = self.__fileName
         originalFileName = self.__originalFileName
         self.__toDownload = True
         ask = False
     else:
         defaultFileName, originalFileName = \
             self.__saveFileName(downloadDirectory)
         fileName = defaultFileName
         self.__originalFileName = originalFileName
         ask = True
     self.__autoOpen = False
     if not self.__toDownload:
         from .DownloadAskActionDialog import DownloadAskActionDialog
         url = self.__reply.url()
         dlg = DownloadAskActionDialog(
             QFileInfo(originalFileName).fileName(),
             self.__reply.header(QNetworkRequest.ContentTypeHeader),
             "{0}://{1}".format(url.scheme(), url.authority()),
             self)
         if dlg.exec_() == QDialog.Rejected or dlg.getAction() == "cancel":
             self.progressBar.setVisible(False)
             self.__reply.close()
             self.on_stopButton_clicked()
             self.filenameLabel.setText(
                 self.tr("Download canceled: {0}").format(
                     QFileInfo(defaultFileName).fileName()))
             self.__canceledFileSelect = True
             return
         
         if dlg.getAction() == "scan":
             self.__mainWindow.requestVirusTotalScan(url)
             
             self.progressBar.setVisible(False)
             self.__reply.close()
             self.on_stopButton_clicked()
             self.filenameLabel.setText(
                 self.tr("VirusTotal scan scheduled: {0}").format(
                     QFileInfo(defaultFileName).fileName()))
             self.__canceledFileSelect = True
             return
         
         self.__autoOpen = dlg.getAction() == "open"
         if PYQT_VERSION_STR >= "5.0.0":
             from PyQt5.QtCore import QStandardPaths
             tempLocation = QStandardPaths.standardLocations(
                 QStandardPaths.TempLocation)[0]
         else:
             from PyQt5.QtGui import QDesktopServices
             tempLocation = QDesktopServices.storageLocation(
                 QDesktopServices.TempLocation)
         fileName = tempLocation + '/' + \
             QFileInfo(fileName).completeBaseName()
     
     if ask and not self.__autoOpen and self.__requestFilename:
         self.__gettingFileName = True
         fileName = E5FileDialog.getSaveFileName(
             None,
             self.tr("Save File"),
             defaultFileName,
             "")
         self.__gettingFileName = False
         if not fileName:
             self.progressBar.setVisible(False)
             self.__reply.close()
             self.on_stopButton_clicked()
             self.filenameLabel.setText(
                 self.tr("Download canceled: {0}")
                     .format(QFileInfo(defaultFileName).fileName()))
             self.__canceledFileSelect = True
             return
     
     fileInfo = QFileInfo(fileName)
     Helpviewer.HelpWindow.HelpWindow.downloadManager()\
         .setDownloadDirectory(fileInfo.absoluteDir().absolutePath())
     self.filenameLabel.setText(fileInfo.fileName())
     
     self.__output.setFileName(fileName + ".part")
     self.__fileName = fileName
     
     # check file path for saving
     saveDirPath = QFileInfo(self.__fileName).dir()
     if not saveDirPath.exists():
         if not saveDirPath.mkpath(saveDirPath.absolutePath()):
             self.progressBar.setVisible(False)
             self.on_stopButton_clicked()
             self.infoLabel.setText(self.tr(
                 "Download directory ({0}) couldn't be created.")
                 .format(saveDirPath.absolutePath()))
             return
     
     self.filenameLabel.setText(QFileInfo(self.__fileName).fileName())
     if self.__requestFilename:
         self.__readyRead()
Esempio n. 13
0
    def __getFileName(self):
        """
        Private method to get the file name to save to from the user.
        """
        if self.__gettingFileName:
            return

        import Helpviewer.HelpWindow
        downloadDirectory = Helpviewer.HelpWindow.HelpWindow\
            .downloadManager().downloadDirectory()

        if self.__fileName:
            fileName = self.__fileName
            originalFileName = self.__originalFileName
            self.__toDownload = True
            ask = False
        else:
            defaultFileName, originalFileName = \
                self.__saveFileName(downloadDirectory)
            fileName = defaultFileName
            self.__originalFileName = originalFileName
            ask = True
        self.__autoOpen = False
        if not self.__toDownload:
            from .DownloadAskActionDialog import DownloadAskActionDialog
            url = self.__reply.url()
            dlg = DownloadAskActionDialog(
                QFileInfo(originalFileName).fileName(),
                self.__reply.header(QNetworkRequest.ContentTypeHeader),
                "{0}://{1}".format(url.scheme(), url.authority()), self)
            if dlg.exec_() == QDialog.Rejected or dlg.getAction() == "cancel":
                self.progressBar.setVisible(False)
                self.__reply.close()
                self.on_stopButton_clicked()
                self.filenameLabel.setText(
                    self.tr("Download canceled: {0}").format(
                        QFileInfo(defaultFileName).fileName()))
                self.__canceledFileSelect = True
                return

##            if dlg.getAction() == "scan":
##                self.__mainWindow.requestVirusTotalScan(url)
##
##                self.progressBar.setVisible(False)
##                self.__reply.close()
##                self.on_stopButton_clicked()
##                self.filenameLabel.setText(
##                    self.tr("VirusTotal scan scheduled: {0}").format(
##                        QFileInfo(defaultFileName).fileName()))
##                self.__canceledFileSelect = True
##                return
##
            self.__autoOpen = dlg.getAction() == "open"
            if PYQT_VERSION_STR >= "5.0.0":
                from PyQt5.QtCore import QStandardPaths
                tempLocation = QStandardPaths.storageLocation(
                    QStandardPaths.TempLocation)
            else:
                from PyQt5.QtGui import QDesktopServices
                tempLocation = QDesktopServices.storageLocation(
                    QDesktopServices.TempLocation)
            fileName = tempLocation + '/' + \
                QFileInfo(fileName).completeBaseName()

        if ask and not self.__autoOpen and self.__requestFilename:
            self.__gettingFileName = True
            fileName = E5FileDialog.getSaveFileName(None, self.tr("Save File"),
                                                    defaultFileName, "")
            self.__gettingFileName = False
            if not fileName:
                self.progressBar.setVisible(False)
                self.__reply.close()
                self.on_stopButton_clicked()
                self.filenameLabel.setText(
                    self.tr("Download canceled: {0}").format(
                        QFileInfo(defaultFileName).fileName()))
                self.__canceledFileSelect = True
                return

        fileInfo = QFileInfo(fileName)
        Helpviewer.HelpWindow.HelpWindow.downloadManager()\
            .setDownloadDirectory(fileInfo.absoluteDir().absolutePath())
        self.filenameLabel.setText(fileInfo.fileName())

        self.__output.setFileName(fileName + ".part")
        self.__fileName = fileName

        # check file path for saving
        saveDirPath = QFileInfo(self.__fileName).dir()
        if not saveDirPath.exists():
            if not saveDirPath.mkpath(saveDirPath.absolutePath()):
                self.progressBar.setVisible(False)
                self.on_stopButton_clicked()
                self.infoLabel.setText(
                    self.tr("Download directory ({0}) couldn't be created.").
                    format(saveDirPath.absolutePath()))
                return

        self.filenameLabel.setText(QFileInfo(self.__fileName).fileName())
        if self.__requestFilename:
            self.__readyRead()
Esempio n. 14
0
    def __getFileName(self):
        """
        Private method to get the file name to save to from the user.
        """
        if self.__gettingFileName:
            return

        savePage = self.__downloadItem.type() == (
            QWebEngineDownloadItem.SavePage)

        documentLocation = QStandardPaths.writableLocation(
            QStandardPaths.DocumentsLocation)
        downloadDirectory = (
            WebBrowserWindow.downloadManager().downloadDirectory())

        if self.__fileName:
            fileName = self.__fileName
            originalFileName = self.__originalFileName
            self.__toDownload = True
            ask = False
        else:
            defaultFileName, originalFileName = self.__saveFileName(
                documentLocation if savePage else downloadDirectory)
            fileName = defaultFileName
            self.__originalFileName = originalFileName
            ask = True
        self.__autoOpen = False

        if not savePage:
            from .DownloadAskActionDialog import DownloadAskActionDialog
            url = self.__downloadItem.url()
            mimetype = Utilities.MimeTypes.mimeType(originalFileName)
            dlg = DownloadAskActionDialog(
                QFileInfo(originalFileName).fileName(), mimetype,
                "{0}://{1}".format(url.scheme(), url.authority()), self)

            if dlg.exec_() == QDialog.Rejected or dlg.getAction() == "cancel":
                self.progressBar.setVisible(False)
                self.on_stopButton_clicked()
                self.filenameLabel.setText(
                    self.tr("Download canceled: {0}").format(
                        QFileInfo(defaultFileName).fileName()))
                self.__canceledFileSelect = True
                self.__setDateTime()
                return

            if dlg.getAction() == "scan":
                self.__mainWindow.requestVirusTotalScan(url)

                self.progressBar.setVisible(False)
                self.on_stopButton_clicked()
                self.filenameLabel.setText(
                    self.tr("VirusTotal scan scheduled: {0}").format(
                        QFileInfo(defaultFileName).fileName()))
                self.__canceledFileSelect = True
                return

            self.__autoOpen = dlg.getAction() == "open"

            tempLocation = QStandardPaths.writableLocation(
                QStandardPaths.TempLocation)
            fileName = (tempLocation + '/' +
                        QFileInfo(fileName).completeBaseName())

            if ask and not self.__autoOpen:
                self.__gettingFileName = True
                fileName = E5FileDialog.getSaveFileName(
                    None, self.tr("Save File"), defaultFileName, "")
                self.__gettingFileName = False

        if not fileName:
            self.progressBar.setVisible(False)
            self.on_stopButton_clicked()
            self.filenameLabel.setText(
                self.tr("Download canceled: {0}").format(
                    QFileInfo(defaultFileName).fileName()))
            self.__canceledFileSelect = True
            self.__setDateTime()
            return

        self.__setFileName(fileName)