Exemple #1
0
class ReportExportInformations(QMessageBox):
    def __init__(self, reportExportDialog, status):
        self.__reportExportDialog = reportExportDialog
        self.__status = status
        self.__reportManager = ReportManager()
        QMessageBox.__init__(self, QMessageBox.Information, "", "",
                             QMessageBox.Close)
        self.setWindowTitle(self.tr("Finished"))
        self.setText(self.__message())
        self.setDetailedText(self.__detailedMessage())

    def __detailedMessage(self):
        msg = self.tr("Extraction path ")
        msg += self.__reportManager.exportPath() + "\n"
        if self.__status == True:
            msg += str(self.__reportManager.exportSize()) + self.tr(
                " bytes extracted") + '\n'
        msg += str(self.__reportExportDialog.items.count) + self.tr(
            " items extracted") + '\n'
        return msg

    def __message(self):
        if self.__status == True:
            msg = self.tr("Extraction finished successfully") + '\n'
        else:
            msg = self.tr("Extraction failed") + '\n'
        return msg
Exemple #2
0
class ReportExportDialog(QDialog, EventHandler):
    def __init__(self):
        QDialog.__init__(self, None)
        EventHandler.__init__(self)
        self.reportManager = ReportManager()
        self.reportManager.connection(self)
        self.setModal(True)
        self.detail = False
        self.items = ReportExportProgressItems()
        self.__optionsDialog = None

        self.elements = ReportExportProgress(
            self.tr("of elements"), ReportPageFragment.EventWriteElements,
            ReportPageFragment.EventWriteElementStart,
            ReportPageFragment.EventWriteElementFinish)
        self.fragments = ReportExportProgress(
            self.tr("of fragments"), ReportPage.EventExportFragments,
            ReportPageFragment.EventWriteStart,
            ReportPageFragment.EventWriteFinish, self.elements)
        self.pages = ReportExportProgress(self.tr("of pages"),
                                          ReportManager.EventExportPages,
                                          ReportPage.EventExportStart,
                                          ReportPage.EventExportFinish,
                                          self.fragments)
        self.category = ReportExportProgress(
            self.tr("of category"), ReportManager.EventExportCategories,
            ReportManager.EventExportCategoryStart,
            ReportManager.EventExportCategoryFinish, self.pages)

        self.progresses = [
            self.category, self.pages, self.fragments, self.elements
        ]
        self.detailButton = QPushButton("<<< " + self.tr("Show details"))
        self.connect(self.detailButton, SIGNAL("clicked()"), self.showDetail)
        self.cancelButton = QPushButton("&" + self.tr("Cancel"))
        self.connect(self.cancelButton, SIGNAL("clicked()"), self.cancel)

        self.hboxLayout = QVBoxLayout(self)
        self.hboxLayout.addWidget(self.items.label)
        self.hboxLayout.addWidget(self.items.bar)
        for progress in self.progresses:
            self.hboxLayout.addWidget(progress.label)
            progress.label.hide()
            self.hboxLayout.addWidget(progress.bar)
            progress.bar.hide()
        self.hboxLayout.addWidget(self.detailButton)
        self.hboxLayout.addWidget(self.cancelButton)
        self.setLayout(self.hboxLayout)

    def showDetail(self):
        self.detail = not self.detail
        if self.detail:
            self.detailButton.setText(">>> " + self.tr("Hide details"))
            for progress in self.progresses:
                progress.bar.show()
                progress.label.show()
        else:
            self.detailButton.setText("<<< " + self.tr("Show details"))
            for progress in self.progresses:
                progress.bar.hide()
                progress.label.hide()
        if self.sizeHint().width() > self.size().width():
            self.resize(self.sizeHint().width(), self.sizeHint().height())
        else:
            self.resize(self.size().width(), self.sizeHint().height())

    def Event(self, event):
        self.items.event(event)
        for progress in self.progresses:
            progress.event(event)

    def checkExportFreeSpace(self, exportContent):
        exportPath = self.reportManager.exportPath()
        if os.name == "nt":
            exportPath = exportPath[:exportPath.rfind("\\")]
        else:
            exportPath = exportPath[:exportPath.rfind("/")]
        freeSpace = Extract.freeSpace(exportPath)
        exportSize = self.reportManager.exportSize(exportContent)
        if freeSpace < exportSize:
            msg = self.tr("Not enough free space to extract files.") + '\n'
            msg += str(freeSpace) + self.tr(" bytes of free space for ") + str(
                exportSize) + self.tr(" bytes of data to extract.") + '\n'
            msg += self.tr("Choose an other directory ?")
            return QMessageBox.warning(
                self, self.tr("Export"), msg,
                QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)
        return QMessageBox.No

    def optionsDialog(self, exportContent=False):
        if self.__optionsDialog:
            return self.__optionsDialog
        else:
            self.__optionsDialog = ReportExportOptionsDialog(exportContent)
            return self.__optionsDialog

    def export(self,
               exportContent=True,
               askOptions=False,
               checkExportSize=True,
               displayInformations=True):
        if askOptions:
            self.optionsDialog(exportContent).exec_()
            exportContent = self.optionsDialog().exportContent()
        if checkExportSize:
            choice = self.checkExportFreeSpace(exportContent)
            if choice == QMessageBox.No:
                return self.__export(exportContent, displayInformations)
            elif choice == QMessageBox.Yes:
                self.export(exportContent,
                            askOptions=True,
                            checkExportSize=True,
                            displayInformations=True)
        else:
            return self.__export(exportContent, displayInformations)

    def __export(self, exportContent, displayInformations=True):
        self.show()
        try:
            self.reportManager.export(exportContent)
            status = True
            self.accept()
        except Exception as e:
            print 'Error : Export failed ', e
            self.reject()
            status = False
            self.reject()
        if displayInformations:
            ReportExportInformations(self, status).exec_()
        return status

    def cancel(self):
        self.reportManager.exportCancel()
        QDialog.reject(self)

    def __del__(self):
        self.reportManager.deconnection(self)