예제 #1
0
    def setFootprint(self, polygon):
        self.clear()
        if not polygon:
            return

        lon = np.asarray([p.x() for p in polygon])
        lat = np.asarray([p.y() for p in polygon])

        mlon = lon.mean()
        mlat = lat.mean()

        delta = mlon - utils.geonormalize(mlon)
        if delta:
            lon -= delta
            mlon -= delta
            polygon.translate(-delta, 0)

        self.box = self.plot(polygon)

        points = QtGui.QPolygonF([
            QtCore.QPointF(mlon - self.bigBoxSize / 2.,
                           mlat - self.bigBoxSize / 2.),
            QtCore.QPointF(mlon + self.bigBoxSize / 2.,
                           mlat - self.bigBoxSize / 2.),
            QtCore.QPointF(mlon + self.bigBoxSize / 2.,
                           mlat + self.bigBoxSize / 2.),
            QtCore.QPointF(mlon - self.bigBoxSize / 2.,
                           mlat + self.bigBoxSize / 2.),
        ])
        self.bigbox = self.plot(points)

        self.actionZoomIn.setEnabled(True)
예제 #2
0
파일: core.py 프로젝트: giumas/gsdview
    def openInGoogleMaps(self):
        '''Open google-maps centering the map on scene centre.

        .. seealso:: http://mapki.com/wiki/Google_Map_Parameters

        '''

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

        try:
            cmapper = item.cmapper
        except AttributeError:
            _log.error('item "%s" seems to have no geographic info.',
                       item.filename)
            return

        lon, lat = cmapper.imgToGeoGrid([0.5, item.RasterXSize - 0.5],
                                        [0.5, item.RasterYSize - 0.5])
        deltalon = np.max(lon) - np.min(lon)
        deltalat = np.max(lat) - np.min(lat)
        zoomlon = np.floor(np.log2(360 / deltalon))
        zoomlat = np.floor(np.log2(180 / deltalat))
        zoomlevel = min(zoomlon, zoomlat) + 1

        pixel, line = item.RasterXSize / 2., item.RasterYSize / 2.
        lon, lat = cmapper.imgToGeoPoints(pixel, line)

        url = QtCore.QUrl('http://maps.google.com/maps')

        # @COMPATIBILITY: PyQt4 --> PyQt5
        try:
            query = QtCore.QUrlQuery()
        except AttributeError:
            query = url

        query.addQueryItem('q', '%fN,%fE' % (lat, lon))  # coordinates
        query.addQueryItem('t', 'h')  # map type (hybrid)
        query.addQueryItem('z', str(zoomlevel))  # zoom level (1, 20)

        # @COMPATIBILITY: PyQt4 --> PyQt5
        try:
            url.setQuery(query)
        except AttributeError:
            pass

        success = QtGui.QDesktopServices.openUrl(url)
        if not success:
            _log.warning('unable to open URL: "%s"', url)
            # @TODO: check
            QtWidgets.QMessageBox.warning(
                self.app, self.tr('Warning'),
                self.tr('Unable to open URL: "%s"') % str(url))
예제 #3
0
    def sendBugReport(self):
        if not self._excInfoSet():
            exctype, excvalue, tracebackobj = sys.exc_info()
        else:
            exctype = self.exctype
            excvalue = self.excvalue
            tracebackobj = self.tracebackobj

        error = traceback.format_exception_only(exctype, excvalue)[-1].strip()
        appname = QtWidgets.QApplication.applicationName()
        if appname:
            subject = '[%s] Bug report - %s' % (appname, error)
        else:
            subject = 'Bug report - %s' % error
        body = '[Please insert your comments and additional info here.]'
        body += '\n\n' + '-' * 80 + '\n'
        body += ''.join(
            utils.format_bugreport(exctype,
                                   excvalue,
                                   tracebackobj,
                                   extra_info=qtsupport.format_qt_info()))

        url = QtCore.QUrl('mailto:%s <%s>' % (info.author, info.author_email))
        url.addQueryItem('subject', subject)
        url.addQueryItem('body', body)

        ret = QtGui.QDesktopServices.openUrl(url)
        if not ret:
            msg = self.tr('Unable to send the bug-report.\n'
                          'Please save the bug-report on file and send it '
                          'manually.')
            QtWidgets.QMessageBox.warning(self, self.tr('WARNING'), msg)
예제 #4
0
파일: mdi.py 프로젝트: giumas/gsdview
class MdiMainWindow(QtWidgets.QMainWindow):
    '''Base class for MDI applications.

    :SIGNALS:

        * :attr:`subWindowClosed`

    '''

    # @TODO: should the subWindowClosed signal be emitted by mdiarea?
    #: SIGNAL: it is emitted when an MDI subwindow is closed
    #:
    #: :C++ signature: `void subWindowClosed()`
    subWindowClosed = QtCore.Signal()

    def __init__(self, parent=None, flags=QtCore.Qt.WindowFlags(0), **kwargs):
        super(MdiMainWindow, self).__init__(parent, flags, **kwargs)

        #: MDI area instance (QMdiArea)
        self.mdiarea = QtWidgets.QMdiArea()
        self.setCentralWidget(self.mdiarea)
        self.mdiarea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
        self.mdiarea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)

        #: sub-windows menu
        self.windowmenu = QtWindowListMenu(self.menuBar())
        self.windowmenu.attachToMdiArea(self.mdiarea)
예제 #5
0
    def _selectionmap(selection):
        sortedselection = sorted(selection,
                                 key=QtCore.QItemSelectionRange.parent)

        selectionmap = {}  # collections.OrderedDict()
        for key, group in itertools.groupby(sortedselection,
                                            QtCore.QItemSelectionRange.parent):
            ranges = []
            for item in sorted(group, key=QtCore.QItemSelectionRange.top):
                if len(ranges) == 0:
                    ranges.append(item)
                    continue
                lastitem = ranges[-1]
                assert lastitem.parent() == item.parent()
                if lastitem.bottom() + 1 >= item.top():
                    model = lastitem.model()
                    topleft = model.index(
                        min(lastitem.top(), item.top()),
                        #min(lastitem.left(), item.left()),
                        0,
                        lastitem.parent())
                    bottomright = model.index(
                        max(lastitem.bottom(), item.bottom()),
                        #max(lastitem.right(), item.right()),
                        model.columnCount() - 1,
                        lastitem.parent())
                    ranges[-1] = QtCore.QItemSelectionRange(
                        topleft, bottomright)
                else:
                    ranges.append(item)
            selectionmap[key] = ranges

        return selectionmap
예제 #6
0
파일: gdalqt.py 프로젝트: giumas/gsdview
    def __init__(self, gdalobj, parent=None, **kwargs):
        super(BaseGdalGraphicsItem, self).__init__(parent, **kwargs)

        # @COMPATIBILITY: Qt >= 4.6.0 needs this flag to be set otherwise the
        #                 exact exposedRect is not computed
        # @SEEALSO: ItemUsesExtendedStyleOption item at
        # http://doc.qt.nokia.com/4.6/qgraphicsitem.html#GraphicsItemFlag-enum
        try:
            self.setFlag(QtWidgets.QGraphicsItem.ItemUsesExtendedStyleOptions)
        except AttributeError:
            self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag(0x200))

        self.gdalobj = gdalobj
        try:
            # dataset
            w = gdalobj.RasterXSize
            h = gdalobj.RasterYSize
        except AttributeError:
            # raster band
            w = gdalobj.XSize
            h = gdalobj.YSize

        self._boundingRect = QtCore.QRectF(0, 0, w, h)
        #self.read_threshold = 1600*1200

        self.stretch = imgutils.LinearStretcher()
        # @TODO: use lazy gaphicsitem initialization
        # @TODO: initialize stretching explicitly
        self._stretch_initialized = False
        self._data_preproc = None
        self.colortable = None
예제 #7
0
    def updateMainViewBox(self, srcview=None):
        if not self.graphicsview.scene():
            return

        if not srcview:
            # @TODO: check API
            srcview = self.app.currentGraphicsView()
        elif srcview is not self.app.currentGraphicsView():
            # current view not yet updated: do nothing
            return

        if srcview:
            assert srcview.scene() == self.graphicsview.scene()  # @TODO: check
            hbar = srcview.horizontalScrollBar()
            vbar = srcview.verticalScrollBar()

            # @TODO: bug report: mapping to scene seems to introduce a
            #        spurious offset "x1 = 2*x0" and y1 = 2*y0;
            #        this doesn't happen for "w" and "h"
            #polygon = srcview.mapToScene(hbar.value(), vbar.value(),
            #                             hbar.pageStep(), vbar.pageStep())
            #@TODO: in case of rotations it should be better keep using
            #       a polygon
            #self.graphicsview.viewbox = polygon.boundingRect()

            # @NOTE: this is a workaround; mapToScene should be used instead
            rect = QtCore.QRectF(hbar.value(), vbar.value(), hbar.pageStep(),
                                 vbar.pageStep())
            transform = srcview.transform().inverted()[0]
            self.graphicsview.viewbox = transform.mapRect(rect)
예제 #8
0
파일: gdalqt.py 프로젝트: giumas/gsdview
    def _levelOfDetailFromTransform(worldTransform):
        # @COMPATIBILITY: since Qt v. 4.6.0 the levelOfDetail attribute of
        # QStyleOptionGraphicsItem is deprecated
        # @SEEALSO: ItemUsesExtendedStyleOption item at
        # http://doc.qt.nokia.com/4.6/qgraphicsitem.html#GraphicsItemFlag-enum
        #
        # From qt/src/gui/styles/qstyleoption.cpp:5130
        if worldTransform.type() <= QtGui.QTransform.TxTranslate:
            return 1  # Translation only? The LOD is 1.

        # Two unit vectors.
        v1 = QtCore.QLineF(0, 0, 1, 0)
        v2 = QtCore.QLineF(0, 0, 0, 1)
        # LOD is the transformed area of a 1x1 rectangle.
        return np.sqrt(
            worldTransform.map(v1).length() * worldTransform.map(v2).length())
예제 #9
0
파일: qt.py 프로젝트: giumas/gsdview
    def run_tool(self, tool, *args, **kwargs):
        '''Run an external tool in controlled way.

        The output of the child process is handled by the controller
        and, optionally, notifications can be achieved at sub-process
        termination.

        '''

        assert self.subprocess.state() == self.subprocess.NotRunning
        self.reset()
        self._tool = tool

        if self._tool.stdout_handler:
            self._tool.stdout_handler.reset()
        if self._tool.stderr_handler:
            self._tool.stderr_handler.reset()

        cmd = self._tool.cmdline(*args, **kwargs)
        self.prerun_hook(cmd)
        cmd = ' '.join(cmd)

        if self._tool.env:
            qenv = QtCore.QProcessEnvironment()
            for key, val in self._tool.env.items():
                qenv.insert(key, str(val))
            self.subprocess.setProcessEnvironment(qenv)

        if self._tool.cwd:
            self.subprocess.setWorkingDirectory(self._tool.cwd)

        self.logger.debug('"shell" flag set to %s.' % self._tool.shell)
        self.logger.debug('Starting: %s' % cmd)
        self.subprocess.start(cmd)
        self.subprocess.closeWriteChannel()
예제 #10
0
    def findMdiChild(self, fileName):
        canonicalFilePath = QtCore.QFileInfo(fileName).canonicalFilePath()

        for window in self.mdiarea.subWindowList():
            if window.widget().currentFile() == canonicalFilePath:
                return window
        return None
예제 #11
0
    def loadFile(self, fileName):
        qfile = QtCore.QFile(fileName)
        if not qfile.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text):
            QtWidgets.QMessageBox.warning(
                self, self.tr('MDI'),
                self.tr('Cannot read file %s:\n%s.') %
                (fileName, qfile.errorString()))
            return False

        instr = QtCore.QTextStream(qfile)
        QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
        self.setPlainText(instr.readAll())
        QtWidgets.QApplication.restoreOverrideCursor()

        self.setCurrentFile(fileName)
        return True
예제 #12
0
    def _moveSelectionRange(self, selectionrange, dst):
        if selectionrange.top() == dst:
            return selectionrange

        model = selectionrange.model()
        parentindex = selectionrange.parent()
        parentitem = self._parentitem(selectionrange)
        nrows_selected = selectionrange.bottom() - selectionrange.top() + 1
        ncols = model.columnCount()

        if nrows_selected == parentitem.rowCount():
            return selectionrange

        if dst > parentitem.rowCount() - nrows_selected or dst < 0:
            return selectionrange

        selectedrows = self._takeRowsRange(selectionrange)
        for index, items in enumerate(selectedrows):
            parentitem.insertRow(dst + index, items)

        topleft = model.index(dst, 0, parentindex)
        bottomright = model.index(dst + nrows_selected - 1, ncols - 1,
                                  parentindex)

        return QtCore.QItemSelectionRange(topleft, bottomright)
예제 #13
0
    def attachToMdiArea(self, mdiArea):
        '''Instructs this menu to display navigation actions for the
        QMdiArea *mdiArea*.

        This should be done before this menu is shown.
        Specifying a null *mdiArea* is meaningless and will generate
        a warning.

        For special usecases, see the note about auto-attachment in the
        class description.

        '''

        if mdiArea == self.mdi:
            return

        acts = self._stdGroup.actions()
        acts = dict(
            zip([
                'CloseAction', 'CloseAllAction', '', 'TileAction',
                'CascadeAction', '', 'NextAction', 'PrevAction'
            ], acts))

        if self.mdi:
            # i.e. we have previously been attached
            mdi = self.mdi
            acts['CloseAction'].triggered.disconnect(mdi.closeActiveSubWindow)
            acts['CloseAllAction'].triggered.disconnect(mdi.closeAllSubWindows)
            acts['TileAction'].triggered.disconnect(mdi.tileSubWindows)
            acts['CascadeAction'].triggered.disconnect(mdi.cascadeSubWindows)
            acts['NextAction'].triggered.disconnect(mdi.activateNextSubWindow)
            acts['PrevAction'].triggered.disconnect(
                mdi.activatePreviousSubWindow)

        self.mdi = mdiArea
        if not self.mdi:
            QtCore.qWarning('QtWindowListMenu::attachToMdiArea(): '
                            'mdiArea is 0; menu will be empty.')
            return

        acts['CloseAction'].triggered.connect(self.mdi.closeActiveSubWindow)
        acts['CloseAllAction'].triggered.connect(self.mdi.closeAllSubWindows)
        acts['TileAction'].triggered.connect(self.mdi.tileSubWindows)
        acts['CascadeAction'].triggered.connect(self.mdi.cascadeSubWindows)
        acts['NextAction'].triggered.connect(self.mdi.activateNextSubWindow)
        acts['PrevAction'].triggered.connect(
            self.mdi.activatePreviousSubWindow)
예제 #14
0
    def saveFile(self, fileName):
        qfile = QtCore.QFile(fileName)

        if not qfile.open(QtCore.QFile.WriteOnly | QtCore.QFile.Text):
            QtWidgets.QMessageBox.warning(
                self, self.tr('MDI'),
                self.tr('Cannot write file %s:\n%s.') %
                (fileName, qfile.errorString()))
            return False

        outstr = QtCore.QTextStream(qfile)
        QtCore.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
        outstr << self.toPlainText()
        QtCore.QApplication.restoreOverrideCursor()

        self.setCurrentFile(fileName)
        return True
예제 #15
0
    def showDocumentation(self, page):
        if not self.startAssistant():
            return

        ba = QtCore.QByteArray("SetSource ")
        ba.append(self.APP_DOC_PATH)

        self.proc.write(ba + page + '\0')
예제 #16
0
    def attachToMdiArea(self, mdiArea):
        '''Instructs this menu to display navigation actions for the
        QMdiArea *mdiArea*.

        This should be done before this menu is shown.
        Specifying a null *mdiArea* is meaningless and will generate
        a warning.

        For special usecases, see the note about auto-attachment in the
        class description.

        '''

        if mdiArea == self.mdi:
            return

        acts = self._stdGroup.actions()
        acts = dict(zip(['CloseAction', 'CloseAllAction', '', 'TileAction',
                         'CascadeAction', '', 'NextAction', 'PrevAction'],
                        acts))

        if self.mdi:
            # i.e. we have previously been attached
            mdi = self.mdi
            acts['CloseAction'].triggered.disconnect(mdi.closeActiveSubWindow)
            acts['CloseAllAction'].triggered.disconnect(mdi.closeAllSubWindows)
            acts['TileAction'].triggered.disconnect(mdi.tileSubWindows)
            acts['CascadeAction'].triggered.disconnect(mdi.cascadeSubWindows)
            acts['NextAction'].triggered.disconnect(mdi.activateNextSubWindow)
            acts['PrevAction'].triggered.disconnect(
                mdi.activatePreviousSubWindow)

        self.mdi = mdiArea
        if not self.mdi:
            QtCore.qWarning('QtWindowListMenu::attachToMdiArea(): '
                            'mdiArea is 0; menu will be empty.')
            return

        acts['CloseAction'].triggered.connect(self.mdi.closeActiveSubWindow)
        acts['CloseAllAction'].triggered.connect(self.mdi.closeAllSubWindows)
        acts['TileAction'].triggered.connect(self.mdi.tileSubWindows)
        acts['CascadeAction'].triggered.connect(self.mdi.cascadeSubWindows)
        acts['NextAction'].triggered.connect(self.mdi.activateNextSubWindow)
        acts['PrevAction'].triggered.connect(
            self.mdi.activatePreviousSubWindow)
예제 #17
0
    def __init__(self, *args, **kwargs):
        super(DoubleSpinBox, self).__init__(*args, **kwargs)
        self.lineEdit().setValidator(QtGui.QDoubleValidator(self))
        self.setDecimals(7)
        self.setRange(-1e50, 1e50)

        qlocale = QtCore.QLocale('C')
        qlocale.setNumberOptions(QtCore.QLocale.OmitGroupSeparator)
        self.setLocale(qlocale)
예제 #18
0
파일: qt.py 프로젝트: giumas/gsdview
    def __init__(self, logger=None, parent=None, **kwargs):
        QtCore.QObject.__init__(self, parent, **kwargs)
        BaseToolController.__init__(self, logger)
        self.subprocess = QtCore.QProcess(parent)
        self.subprocess.setProcessChannelMode(QtCore.QProcess.MergedChannels)

        # connect process handlers and I/O handlers
        self.subprocess.readyReadStandardOutput.connect(self.handle_stdout)
        self.subprocess.readyReadStandardError.connect(self.handle_stderr)
        self.subprocess.error.connect(self.handle_error)
        self.subprocess.finished.connect(self.finalize_run)
예제 #19
0
    def sceneEventFilter(self, obj, event):
        if event.type() == QtCore.QEvent.GraphicsSceneMouseRelease:
            p0 = event.buttonDownScenePos(QtCore.Qt.LeftButton)
            p1 = event.scenePos()
            rect = QtCore.QRectF(p0, p1).normalized()
            self.rubberBandSeclection.emit(rect)
            return True

        #return obj.eventFilter(obj, event)   # @TODO: check
        #return QtWidgets.QGraphicsScene.eventFilter(self, obj, event)
        return False
예제 #20
0
 def moveSelectionUp(self, selectionmodel):
     #assert selectionmodel.model() is self.model
     selection = selectionmodel.selection()
     selectionmap = self._selectionmap(selection)
     newselection = QtCore.QItemSelection()
     for parent, ranges in selectionmap.items():
         for selectionrange in ranges:
             dst = selectionrange.top() - 1
             newrange = self._moveSelectionRange(selectionrange, dst)
             newselection.append(newrange)
     selectionmodel.select(newselection, SelectCurrentRows)
예제 #21
0
 def moveSelectionToTop(self, selectionmodel):
     #assert selectionmodel.model() is self.model
     selection = selectionmodel.selection()
     selectionmap = self._selectionmap(selection)
     newselection = QtCore.QItemSelection()
     for parent, ranges in selectionmap.items():
         dst = 0
         for selectionrange in ranges:
             newrange = self._moveSelectionRange(selectionrange, dst)
             newselection.append(newrange)
             dst = newrange.bottom() + 1
     selectionmodel.select(newselection, SelectCurrentRows)
예제 #22
0
    def addSoftwareVersion(self, sw, version, link=''):
        tablewidget = self.versionsTableWidget
        index = tablewidget.rowCount()
        tablewidget.setRowCount(index + 1)

        tablewidget.setItem(index, 0, QtWidgets.QTableWidgetItem(sw))
        tablewidget.setItem(index, 1, QtWidgets.QTableWidgetItem(version))
        #tablewidget.setItem(row, 2, QtWidgets.QTableWidgetItem(link))
        linkLabel = QtWidgets.QLabel('<a href="{0}">{0}</a>'.format(link))
        linkLabel.linkActivated.connect(
            lambda text: QtGui.QDesktopServices.openUrl(QtCore.QUrl(text)))
        tablewidget.setCellWidget(index, 2, linkLabel)
예제 #23
0
    def startAssistant(self):
        if not self.proc:
            self.proc = QtCore.QProcess()

        if self.proc.state() != QtCore.QProcess.Running:
            app = QtCore.QLibraryInfo.location(
                QtCore.QLibraryInfo.BinariesPath)
            app += QtCore.QDir.separator()
            if sys.platform == 'darwin':
                app += QtCore.QLatin1String(
                    'Assistant.app/Contents/MacOS/Assistant')
            else:
                app += QtCore.QLatin1String('assistant')

            args = [
                QtCore.QLatin1String('-collectionFile'),
                QtCore.QLatin1String('path to .qhc'),
                QtCore.QLatin1String('-enableRemoteControl'),
            ]

            self.proc.start(app, args)

            if not self.proc.waitForStarted():
                if QtWidgets.aApp is not None:
                    tr = QtWidgets.qApp.tr
                else:
                    tr = str
                QtWidgets.QMessageBox.critical(
                    0, tr('Simple Text Viewer'),
                    tr('Unable to launch Qt Assistant (%s)') % app)
                return False

        return True
예제 #24
0
파일: gdalqt.py 프로젝트: giumas/gsdview
 def _levelOfDetail(option, painter):
     # @COMPATIBILITY: since Qt v. 4.6.0 the levelOfDetail attribute of
     # QStyleOptionGraphicsItem is deprecated
     # @SEEALSO: ItemUsesExtendedStyleOption item at
     # http://doc.qt.nokia.com/4.6/qgraphicsitem.html#GraphicsItemFlag-enum
     if hasattr(option, 'levelOfDetailFromTransform'):
         levelOfDetail = option.levelOfDetailFromTransform(
             painter.transform())
     elif QtCore.qVersion() >= '4.6.0':
         levelOfDetail = BaseGdalGraphicsItem._levelOfDetailFromTransform(
             painter.transform())
     else:
         levelOfDetail = option.levelOfDetail
     return levelOfDetail
예제 #25
0
 def moveSelectionToBottom(self, selectionmodel):
     #assert selectionmodel.model() is self.model
     selection = selectionmodel.selection()
     selectionmap = self._selectionmap(selection)
     newselection = QtCore.QItemSelection()
     nrows = selectionmodel.model().rowCount()
     for parent, ranges in selectionmap.items():
         ranges.reverse()
         dst = nrows
         for selectionrange in ranges:
             dst -= selectionrange.height()
             newrange = self._moveSelectionRange(selectionrange, dst)
             newselection.append(newrange)
     selectionmodel.select(newselection, SelectCurrentRows)
예제 #26
0
 def _levelOfDetail(option, painter):
     # @COMPATIBILITY: since Qt v. 4.6.0 the levelOfDetail attribute of
     # QStyleOptionGraphicsItem is deprecated
     # @SEEALSO: ItemUsesExtendedStyleOption item at
     # http://doc.qt.nokia.com/4.6/qgraphicsitem.html#GraphicsItemFlag-enum
     if hasattr(option, 'levelOfDetailFromTransform'):
         levelOfDetail = option.levelOfDetailFromTransform(
             painter.transform())
     elif QtCore.qVersion() >= '4.6.0':
         levelOfDetail = BaseGdalGraphicsItem._levelOfDetailFromTransform(
             painter.transform())
     else:
         levelOfDetail = option.levelOfDetail
     return levelOfDetail
예제 #27
0
def selectAllItems(itemview):
    '''Select all items in an QAbstractItemView.'''

    model = itemview.model()
    topleft = model.index(0, 0)

    try:
        bottomright = model.index(model.rowCount() - 1,
                                  model.columnCount() - 1)
    except (TypeError, AttributeError):
        # columnCount is a private method in QAbstractListModel
        # assume it is a list
        bottomright = model.index(model.rowCount() - 1)

    selection = QtCore.QItemSelection(topleft, bottomright)
    itemview.selectionModel().select(selection,
                                     QtCore.QItemSelectionModel.Select)
예제 #28
0
def format_qt_info():
    qlocale = QtCore.QLocale()
    supported_image_formats = [
        bytes(fmt).decode('utf-8')
        for fmt in QtGui.QImageReader.supportedImageFormats()
    ]
    qt_info = [
        'Qt system locale: %s\n' % qlocale.system().name(),
        'Qt locale name: %s\n' % qlocale.name(),
        'Qt locale country: %s\n' % qlocale.countryToString(qlocale.country()),
        'Qt locale language: %s\n' % qlocale.languageToString(
            qlocale.language()),
        'Qt locale decimal point: "%s"\n' % qlocale.decimalPoint(),
        'Qt UI languages: %s\n' % qlocale.uiLanguages(),
        'Qt supported image formats: %s\n' % ', '.join(supported_image_formats),
    ]

    return qt_info
예제 #29
0
class RubberBandMode(MouseMode):
    '''Mouse mode for rubber band selection.

    :SIGNALS:

        * :attr:`rubberBandSeclection`

    '''

    dragmode = QtWidgets.QGraphicsView.RubberBandDrag
    cursor = QtCore.Qt.CrossCursor
    icon = qtsupport.geticon('area.svg', __name__)
    label = 'Rubber band'
    name = 'rubberband'

    #: SIGNAL: it is emitted when a rectangular area is selected
    #:
    #: :C++ signature: `void rubberBandSeclection(const QRectF&)`
    rubberBandSeclection = QtCore.Signal(QtCore.QRectF)

    def sceneEventFilter(self, obj, event):
        if event.type() == QtCore.QEvent.GraphicsSceneMouseRelease:
            p0 = event.buttonDownScenePos(QtCore.Qt.LeftButton)
            p1 = event.scenePos()
            rect = QtCore.QRectF(p0, p1).normalized()
            self.rubberBandSeclection.emit(rect)
            return True

        #return obj.eventFilter(obj, event)   # @TODO: check
        #return QtWidgets.QGraphicsScene.eventFilter(self, obj, event)
        return False

    def scrollbarEventFilter(self, obj, event):
        # ignore wheel events if some button is pressed
        if ((event.type() == QtCore.QEvent.Wheel) and
                (event.buttons() != QtCore.Qt.NoButton)):
            return True
        else:
            return False
예제 #30
0
파일: app.py 프로젝트: giumas/gsdview
    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()
예제 #31
0
파일: info.py 프로젝트: avalentino/gsdview
'''

author = 'Antonio Valentino'
author_email = '*****@*****.**'
copyright = 'Copyright (C) 2008-2015 %s <%s>' % (author, author_email)
#license = _get_license()
license_type = 'GNU GPL'
website = 'http://gsdview.sourceforge.net'
website_label = website
download_url = 'http://sourceforge.net/projects/gsdview/files'


all_versions = [
    ('GSDView', version, website),
    ('Python', '.'.join(map(str, sys.version_info[:3])), 'https://www.python.org'),
    ('Qt', QtCore.qVersion(), 'http://www.qt.io/'),
    ('numpy', np.version.version, 'http://www.numpy.org'),
]

if qtsix.qt_api.startswith('pyqt'):
    import sip
    all_versions.append(('sip', sip.SIP_VERSION_STR,
                         'http://www.riverbankcomputing.co.uk/software/sip'))
    all_versions.append(('PyQt', QtCore.PYQT_VERSION_STR,
                         'http://www.riverbankcomputing.co.uk/software/pyqt'))
    try:
        from qtsix import Qsci
    except ImportError:
        pass
    else:
        all_versions.append((
예제 #32
0
 def strippedName(self, fullFileName):
     return QtCore.QFileInfo(fullFileName).fileName()
예제 #33
0
 def setCurrentFile(self, fileName):
     self.curFile = QtCore.QFileInfo(fileName).canonicalFilePath()
     self.isUntitled = False
     self.document().setModified(False)
     self.setWindowModified(False)
     self.setWindowTitle(self.userFriendlyCurrentFile() + '[*]')