Newer
Older
# -*- coding: utf-8 -*-
"""
/***************************************************************************

Benjamin Jakimow
committed
EO Time Series Viewer
-------------------
begin : 2015-08-20
git sha : $Format:%H$
copyright : (C) 2017 by HU-Berlin
email : benjamin.jakimow@geo.hu-berlin.de
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
"""
# noinspection PyPep8Naming
from qgis.core import *
from qgis.gui import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtXml import QDomDocument

Benjamin Jakimow
committed
from .utils import *
from .timeseries import TimeSeriesDatum
from qps.crosshair.crosshair import CrosshairDialog, CrosshairStyle
from qps.maptools import *

Benjamin Jakimow
committed
from .labeling import LabelAttributeTableModel, labelShortcutLayers, layerClassSchemes, applyShortcutsToRegisteredLayers
from qps.classification.classificationscheme import ClassificationScheme, ClassInfo

Benjamin Jakimow
committed
import timeseriesviewer.settings
def toQgsMimeDataUtilsUri(mapLayer:QgsMapLayer):
uri = QgsMimeDataUtils.Uri()
uri.name = mapLayer.name()
uri.providerKey = mapLayer.dataProvider().name()
uri.uri = mapLayer.source()
if isinstance(mapLayer, QgsRasterLayer):
uri.layerType = 'raster'
elif isinstance(mapLayer, QgsVectorLayer):
uri.layerType = 'vector'
else:
raise NotImplementedError()
return uri
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
class MapCanvasLayerModel(QAbstractTableModel):
class LayerItem(object):
def __init__(self, src):
self.mLyr = None
self.mUri = None
self.mIsVisible = True
self.mExternalControl = False
if isinstance(src, QgsMimeDataUtils.Uri):
self.mUri = src
self.mExternalControl = False
else:
assert isinstance(src, QgsMapLayer)
self.mLyr = src
self.mUri = toQgsMimeDataUtilsUri(src)
self.mExternalControl = True
s = ""
assert isinstance(self.mUri, QgsMimeDataUtils.Uri)
def name(self)->str:
return self.mUri.name
def source(self)->str:
return self.mUri.uri
def layerType(self)->str:
return self.mUri.layerType
def isVisible(self)->bool:
return self.mIsVisible
def providerKey(self)->str:
return self.mUri.providerKey
def hasMapLayerInstance(self)->bool:
return isinstance(self.mLyr, QgsMapLayer)
def mapLayer(self)->QgsMapLayer:
if not self.hasMapLayerInstance():
assert isinstance(self.mUri, QgsMimeDataUtils.Uri)
if self.layerType() == 'raster':
self.mLyr = QgsRasterLayer(self.source(), self.name(), self.providerKey())
elif self.layerType() == 'vector':
self.mLyr = QgsVectorLayer(self.source(), self.name(), self.providerKey())
else:
raise Exception()
return self.mLyr
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
"""
A model to create QgsMapLayer instances and control its visibility.
"""
def __init__(self, parent=None):
super(MapCanvasLayerModel, self).__init__()
self.cnName = 'Name'
self.cnUri = 'Uri'
self.cnLayerType = 'Type'
self.mColumnNames = [self.cnName, self.cnLayerType, self.cnUri]
self.mVectorsVisible = True
self.mRastersVisible = True
self.mDefaultRasterRenderer = None
self.mDefaultVectorRenderer = None
self.mItems = []
def __iter__(self):
return iter(self.mItems)
def __len__(self)->int:
return len(self.mItems)
def setDefaultRasterRenderer(self, renderer:QgsRasterRenderer):

Benjamin Jakimow
committed
if isinstance(renderer, QgsRasterRenderer):
self.mDefaultRasterRenderer = renderer

Benjamin Jakimow
committed
for item in self.mItems:
assert isinstance(item, MapCanvasLayerModel.LayerItem)
if not item.mExternalControl and isinstance(item.mLyr, QgsRasterLayer):
item.mLyr.setRenderer(renderer.clone())
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
def setDefaultVectorRenderer(self, renderer:QgsFeatureRenderer):
assert isinstance(renderer, QgsFeatureRenderer)
self.mDefaultVectorRenderer = renderer
for item in self.mItems:
assert isinstance(item, MapCanvasLayerModel.LayerItem)
if not item.mExternalControl and isinstance(item.mLyr, QgsVectorLayer):
item.mLyr.setRenderer(renderer.clone())
def setLayerVisibility(self, cls, b:bool):
assert isinstance(b, bool)
if isinstance(cls, int):
item = self.mItems[cls]
assert isinstance(item, MapCanvasLayerModel.LayerItem)
item.mIsVisible = b
elif cls == QgsRasterLayer:
self.mRastersVisible = b
for item in [i for i in self if i.layerType() == 'raster']:
assert isinstance(item, MapCanvasLayerModel.LayerItem)
item.mIsVisible = b
elif cls == QgsVectorLayer:
self.mVectorsVisible = b
for item in [i for i in self if i.layerType() == 'vector']:
assert isinstance(item, MapCanvasLayerModel.LayerItem)
item.mIsVisible = b
else:
raise NotImplementedError()
def clear(self):
"""
Removes all layers
"""
self.beginRemoveRows(QModelIndex(), 0, len(self)-1)
self.mItems.clear()
self.endRemoveRows()
def addMapLayerSources(self, src):
i = len(self.mItems)
self.insertMapLayerSources(i, src)
def insertMapLayerSources(self, index:int, mapLayerSources):
assert isinstance(mapLayerSources, (list, types.GeneratorType))
items = [MapCanvasLayerModel.LayerItem(src) for src in mapLayerSources]
self.beginInsertRows(QModelIndex(), index, index + len(items) - 1)
i = index
for item in items:
Loading
Loading full blame...