mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-24 00:47:57 -05:00
115 lines
3.1 KiB
Python
115 lines
3.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
/***************************************************************************
|
|
Name : DB Manager
|
|
Description : Database manager plugin for QGIS
|
|
Date : May 23, 2011
|
|
copyright : (C) 2011 by Giuseppe Sucameli
|
|
email : brush.tyler@gmail.com
|
|
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
"""
|
|
|
|
from PyQt4.QtCore import *
|
|
from PyQt4.QtGui import *
|
|
|
|
from .db_plugins.plugin import DbError, Table
|
|
from .dlg_db_error import DlgDbError
|
|
|
|
class TableViewer(QTableView):
|
|
def __init__(self, parent=None):
|
|
QTableView.__init__(self, parent)
|
|
self.setSelectionBehavior( QAbstractItemView.SelectRows )
|
|
self.setSelectionMode( QAbstractItemView.ExtendedSelection )
|
|
|
|
self.item = None
|
|
self.dirty = False
|
|
|
|
# allow to copy results
|
|
copyAction = QAction(QApplication.translate("DBManagerPlugin", "Copy"), self)
|
|
self.addAction( copyAction )
|
|
copyAction.setShortcuts(QKeySequence.Copy)
|
|
QObject.connect(copyAction, SIGNAL("triggered()"), self.copySelectedResults)
|
|
|
|
self._clear()
|
|
|
|
def refresh(self):
|
|
self.dirty = True
|
|
self.loadData( self.item )
|
|
|
|
def loadData(self, item ):
|
|
if item == self.item and not self.dirty:
|
|
return
|
|
self._clear()
|
|
if item is None:
|
|
return
|
|
|
|
if isinstance(item, Table):
|
|
self._loadTableData( item )
|
|
else:
|
|
return
|
|
|
|
self.item = item
|
|
self.connect(self.item, SIGNAL('aboutToChange'), self.setDirty)
|
|
|
|
def setDirty(self, val=True):
|
|
self.dirty = val
|
|
|
|
def _clear(self):
|
|
if self.item is not None:
|
|
try:
|
|
self.disconnect(self.item, SIGNAL('aboutToChange'), self.setDirty)
|
|
except:
|
|
# do not raise any error if self.item was deleted
|
|
pass
|
|
|
|
self.item = None
|
|
self.dirty = False
|
|
|
|
# delete the old model
|
|
model = self.model()
|
|
self.setModel(None)
|
|
if model: model.deleteLater()
|
|
|
|
def _loadTableData(self, table):
|
|
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
|
|
try:
|
|
# set the new model
|
|
self.setModel( table.tableDataModel(self) )
|
|
|
|
except DbError, e:
|
|
DlgDbError.showError(e, self)
|
|
return
|
|
|
|
else:
|
|
self.update()
|
|
|
|
finally:
|
|
QApplication.restoreOverrideCursor()
|
|
|
|
|
|
def copySelectedResults(self):
|
|
if len(self.selectedIndexes()) <= 0:
|
|
return
|
|
model = self.model()
|
|
|
|
# convert to string using tab as separator
|
|
text = model.headerToString( "\t" )
|
|
for idx in self.selectionModel().selectedRows():
|
|
text += "\n" + model.rowToString( idx.row(), "\t" )
|
|
|
|
QApplication.clipboard().setText( text, QClipboard.Selection )
|
|
QApplication.clipboard().setText( text, QClipboard.Clipboard )
|
|
|
|
|