diff --git a/timeseriesviewer/timeseries.py b/timeseriesviewer/timeseries.py index 1da407e56ceeb4b0fb9523490e07ef57af81b56d..c35e18d7b1c4d49decedf2f90606f0ce88c23ae0 100644 --- a/timeseriesviewer/timeseries.py +++ b/timeseriesviewer/timeseries.py @@ -413,12 +413,12 @@ class TimeSeriesDatum(QObject): class TimeSeries(QObject): - sigTimeSeriesDatumAdded = pyqtSignal(TimeSeriesDatum) - + sigTimeSeriesDatesAdded = pyqtSignal(list) + sigTimeSeriesDatesRemoved = pyqtSignal(list) #fire when a new sensor configuration is added sigSensorAdded = pyqtSignal(SensorInstrument) sigSensorRemoved = pyqtSignal(SensorInstrument) - sigChanged = pyqtSignal() + sigProgress = pyqtSignal(int, int, int, name='progress') sigClosed = pyqtSignal() sigError = pyqtSignal(object) @@ -497,7 +497,7 @@ class TimeSeries(QObject): - def getMaxExtent(self, crs=None): + def getMaxSpatialExtent(self, crs=None): if len(self.data) == 0: return None @@ -617,70 +617,57 @@ class TimeSeries(QObject): six.print_(info, file=sys.stderr) return False - def removeAll(self): - self.clear() - def clear(self): self.Sensors.clear() + dates = self.data[:] del self.data[:] - self.sigChanged.emit() + self.sigTimeSeriesDatesRemoved.emit(dates) def removeDates(self, TSDs): + removed = list() for TSD in TSDs: - self.removeTSD(TSD, _quiet=True) - self.sigChanged.emit() - - def removeTSD(self, TSD, _quiet=False): - - assert type(TSD) is TimeSeriesDatum - S = TSD.sensor - self.Sensors[S].remove(TSD) - self.data.pop(TSD, None) - if len(self.Sensors[S]) == 0: - self.Sensors.pop(S) - self.sigSensorRemoved(S) - if not _quiet: - self.sigChanged.emit() - - - - def addFile(self, pathImg, pathMsk=None, _quiet=False): - six.print_(pathImg) - six.print_('Add image {}...'.format(pathImg)) - TSD = TimeSeriesDatum(pathImg, pathMsk=pathMsk) - self.addTimeSeriesDatum(TSD) - - def addTimeSeriesDatum(self, TSD): - - try: - sensorAdded = False - existingSensors = list(self.Sensors.keys()) - if TSD.sensor not in existingSensors: - self.Sensors[TSD.sensor] = list() - sensorAdded = True - else: - TSD.sensor = existingSensors[existingSensors.index(TSD.sensor)] - - if TSD in self.data: - six.print_('Time series datum already added: {}'.format(str(TSD)), file=sys.stderr) - else: - self.Sensors[TSD.sensor].append(TSD) - - #insert sorted - bisect.insort(self.data, TSD) - #self.data[TSD] = TSD - self.sigTimeSeriesDatumAdded.emit(TSD) - if sensorAdded: - self.sigSensorAdded.emit(TSD.sensor) - + assert type(TSD) is TimeSeriesDatum + S = TSD.sensor + self.Sensors[S].remove(TSD) + if len(self.Sensors[S]) == 0: + self.Sensors.pop(S) + self.sigSensorRemoved(S) + removed.append(self.data.pop(TSD, None)) + self.sigTimeSeriesDatesRemoved.emit(removed) + + + def addTimeSeriesDates(self, timeSeriesDates): + assert isinstance(timeSeriesDates, list) + added = list() + for TSD in timeSeriesDates: + try: + sensorAdded = False + existingSensors = list(self.Sensors.keys()) + if TSD.sensor not in existingSensors: + self.Sensors[TSD.sensor] = list() + sensorAdded = True + else: + TSD.sensor = existingSensors[existingSensors.index(TSD.sensor)] + + if TSD in self.data: + six.print_('Time series datum already added: {}'.format(str(TSD)), file=sys.stderr) + else: + self.Sensors[TSD.sensor].append(TSD) + #insert sorted + bisect.insort(self.data, TSD) + added.append(TSD) + if sensorAdded: + self.sigSensorAdded.emit(TSD.sensor) - except: - exc_type, exc_value, exc_traceback = sys.exc_info() - traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2) - six.print_('Unable to add {}'.format(file), file=sys.stderr) - pass + except: + exc_type, exc_value, exc_traceback = sys.exc_info() + traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2) + six.print_('Unable to add {}'.format(file), file=sys.stderr) + pass + if len(added) > 0: + self.sigTimeSeriesDatesAdded.emit(added) def addFilesAsync(self, files): @@ -699,19 +686,16 @@ class TimeSeries(QObject): assert isinstance(files, list) l = len(files) assert l > 0 + toadd = list() - self.sigProgress.emit(0, 0, l) for i, file in enumerate(files): tmp = self.findAbsolutePath(file) if tmp: - self.addFile(tmp, _quiet=True) + toadd.append(TimeSeriesDatum(tmp)) + six.print_('Add image {}...'.format(tmp)) else: dprint('Unable to locate: {}'.format(file), file=sys.stderr) - self.sigProgress.emit(0, i + 1, l) - - self.sigProgress.emit(0, 0, 1) - self.sigChanged.emit() - + self.addTimeSeriesDates(toadd) def __len__(self): return len(self.data)