Beispiel #1
0
def exportTable(model, parent=None):
    filters = [
        'CSV file (*.csv)',
        'CSV TAB-delimited file (*.csv)',
        'HTML file (*.html)',
        'All files (*)',
    ]

    try:
        ncols = model.columnCount()
    except TypeError:
        # columnCount is a private method in QAbstractListModel
        ncols = 1

    if ncols == 1:
        filters.insert(0, 'Text file (*.txt)')
        target = os.path.join(utils.default_workdir(), 'data.txt')
    if ncols == 2:
        filters.insert(0, 'INI file format (*.ini)')
        target = os.path.join(utils.default_workdir(), 'data.ini')
    else:
        target = os.path.join(utils.default_workdir(), 'data.csv')

    # @TODO: check
    if parent is None:
        try:
            parent = model.window()
        except AttributeError:
            parent = None

    filename, filter_ = QtWidgets.QFileDialog.getSaveFileName(
        parent, model.tr('Save'), target, ';;'.join(filters))
    if filename:
        ext = os.path.splitext(filename)[-1]
        ext = ext.lower()
        if ext == '.csv' or ext == '.txt':
            if 'TAB' in filter_:
                dialect = 'excel-tab'
            else:
                dialect = 'excel'

            data = modelToCsv(model, dialect)
        elif ext == '.ini':
            cfg = modelToIni(model)
            fp = StringIO()
            cfg.write(fp)
            data = fp.getvalue()
        elif ext == '.html':
            doc = modelToTextDocument(model)
            data = doc.toHtml()
        else:
            # default
            data = modelToCsv(model, 'excel-tab')

        with open(filename, 'w') as fd:
            fd.write(data)
Beispiel #2
0
    def exportKML(self):
        item = self._currentDatasetItem()

        if item is None:
            logging.info('no item to export.')
            QtGui.QMessageBox.information(self.app, self.tr('Information'),
                                          self.tr('No item to export.'))
            return

        src = item.filename
        filters = [
            'KML files (*.kml)',
            'All files (*)',
        ]
        target = os.path.basename(src)
        target = os.path.splitext(target)[0] + '.kml'
        target = os.path.join(utils.default_workdir(), target)

        dst, filter_ = QtGui.QFileDialog.getSaveFileNameAndFilter(
                                        self.app,
                                        self.tr('Save KML'),
                                        target,
                                        ';;'.join(filters))

        dst = str(dst)

        if dst:
            try:
                ras2vec.export_raster(src, dst, boxlayer='box',
                                      gcplayer='GCPs', mark_corners=True)
            except (OSError, RuntimeError):
                # @TODO: QtGui.QMessageBox.error(...)
                logging.error('unable to export "%s" to "%s".' % (src, dst))
Beispiel #3
0
    def exportKML(self):
        item = self._currentDatasetItem()

        if item is None:
            _log.info('no item to export.')
            QtWidgets.QMessageBox.information(
                self.app, self.tr('Information'),
                self.tr('No item to export.'))
            return

        src = item.filename
        filters = [
            'KML files (*.kml)',
            'All files (*)',
        ]
        target = os.path.basename(src)
        target = os.path.splitext(target)[0] + '.kml'
        target = os.path.join(utils.default_workdir(), target)

        dst, filter_ = QtWidgets.QFileDialog.getSaveFileName(
            self.app, self.tr('Save KML'), target, ';;'.join(filters))

        dst = str(dst)

        if dst:
            try:
                ras2vec.export_raster(src, dst, boxlayer='box',
                                      gcplayer='GCPs', mark_corners=True)
            except (OSError, RuntimeError):
                # @TODO: QtWidgets.QMessageBox.error(...)
                _log.error('unable to export "%s" to "%s".', src, dst)
Beispiel #4
0
    def _restoreFileDialogState(self, settings=None):
        if settings is None:
            settings = self.settings

        settings.beginGroup('filedialog')
        try:
            # state
            state = settings.value('state')
            if state is not None:
                try:
                    # QFileDialog.restoreState is new in Qt 4.3
                    self.filedialog.restoreState(state)
                except AttributeError:
                    _log.debug('unable to restore the file dialog state')

            # workdir
            workdir = settings.value('workdir', utils.default_workdir())
            workdir = os.path.expanduser(os.path.expandvars(workdir))
            self.filedialog.setDirectory(workdir)

            # history
            #history = settings.value('history')
            #if history:
            #    self.filedialog.setHistory(history)

            # sidebar urls
            try:
                # QFileDialog.setSidebarUrls is new in Qt 4.3
                sidebarurls = settings.value('sidebarurls')
                if sidebarurls:
                    sidebarurls = [QtCore.QUrl(item) for item in sidebarurls]
                    self.filedialog.setSidebarUrls(sidebarurls)
            except AttributeError:
                _log.debug('unable to restore sidebar URLs of the file dialog')
        finally:
            settings.endGroup()
Beispiel #5
0
def imgexport(obj, parent=None):
    filters = [
        obj.tr('All files (*)'),
        obj.tr('Simple Vector Graphics file (*.svg)'),
        obj.tr('PDF file (*.pdf)'),
        obj.tr('PostScript file (*.ps)'),
    ]
    filters.extend('%s file (*.%s)' % (
        str(fmt).upper(), str(fmt))
        for fmt in QtGui.QImageWriter.supportedImageFormats())

    formats = set(
        str(fmt).lower()
        for fmt in QtGui.QImageWriter.supportedImageFormats())
    formats.update(('svg', 'pdf', 'ps'))

    # @TODO: check
    if parent is None:
        try:
            parent = obj.window()
        except AttributeError:
            parent = None

    target = os.path.join(utils.default_workdir(), 'image.jpeg')

    filename, filter_ = QtWidgets.QFileDialog.getSaveFileName(
        parent, obj.tr('Save picture'), target, ';;'.join(filters))
    ext = 'unknown'
    while filename and (ext not in formats):
        ext = os.path.splitext(filename)[1]
        if ext:
            ext = ext[1:].lower()
            if ext in formats:
                break
            else:
                QtWidgets.QMessageBox.information(
                    parent, obj.tr('Unknown file format'),
                    obj.tr('Unknown file format "%s".\nPlease retry.') % ext)

                filename, filter_ = QtWidgets.QFileDialog.getSaveFileName(
                    parent, obj.tr('Save draw'), filename, ';;'.join(filters),
                    filter_)
        else:
            ext = 'unknown'

    if filename:
        if hasattr(obj, 'viewport'):
            srcsize = obj.viewport().rect().size()
        elif hasattr(obj, 'sceneRect'):
            # QGraphicsViews alsa has a viewport method so they should be
            # trapped by the previous check
            srcsize = obj.sceneRect().toRect().size()
        else:
            srcsize = QtWidgets.QSize(800, 600)

        if ext in ('pdf', 'ps'):
            device = QtPrintSupport.QPrinter(QtPrintSupport.QPrinter.HighResolution)
            device.setOutputFileName(filename)
            if ext == 'pdf':
                device.setOutputFormat(QtPrintSupport.QPrinter.PdfFormat)
            else:
                # ext == 'ps'
                device.setOutputFormat(QtPrintSupport.QPrinter.PostScriptFormat)
        elif ext == 'svg':
            device = QtSvg.QSvgGenerator()
            device.setFileName(filename)
            device.setSize(srcsize)
            #device.setViewBox(obj.sceneRect().toRect())
            #device.setTitle(obj.tr('Graphics Draw'))
            #device.setDescription(obj.tr('Qt SVG drawing.'))
        else:
            device = QtGui.QPixmap(srcsize)
            # @TODO: check
            device.fill(QtCore.Qt.white)

        painter = QtGui.QPainter()
        if painter.begin(device):
            #painter.setRenderHint(QtGui.QPainter.Antialiasing)
            obj.render(painter)
            painter.end()
            if hasattr(device, 'save'):
                device.save(filename)
        else:
            QtWidgets.QMessageBox.warning(
                parent,
                obj.tr('Warning'),
                obj.tr('Unable initialize painting device.'))