def __init__(self, name, parentwidget): """ """ # Initialize parent. Should be called after other # initialization since the base class calls _create_content(). super(SpectrogramTool, self).__init__(name, parentwidget) # Where is the tool allowed to dock in the main window. self.setAllowedAreas(QtCore.Qt.RightDockWidgetArea | QtCore.Qt.BottomDockWidgetArea) self.setBaseSize(600,600) # Default position. Hide as default. self._parent.addDockWidget(QtCore.Qt.RightDockWidgetArea, self) self.hide() # Plot queue. Used to separate threads. self.spectrogram_queue = queue.Queue(maxsize=100) self.spectrogram_thread = None # self.spectrogram_active = False self.spectrogram_active = True self.last_used_spectrogram_item_id = '' self.last_used_window_size = -1 self.last_used_timeresolution = -1 self.last_used_viewpart = -1 # Use sync object for workspaces and surveys. app_core.DesktopAppSync().item_id_changed_signal.connect(self.plot_spectrogram) # Use sync object to clear buffers. app_core.DesktopAppSync().clear_buffers_signal.connect(self.clear_buffers) # Also when visible. self.visibilityChanged.connect(self.visibility_changed)
def _load_item_data(self): """ """ self.dir_path = app_core.DesktopAppSync().get_workspace() self.survey_name = app_core.DesktopAppSync().get_selected_survey() # try: self._items_model.clear() h5_wavefiles = hdf54bats.Hdf5Wavefiles(self.dir_path, self.survey_name) from_top_node = '' nodes = h5_wavefiles.get_child_nodes(from_top_node) for node_key in sorted(nodes): node_dict = nodes.get(node_key, {}) node_item_id = node_dict.get('item_id', '') node_item_type = node_dict.get('item_type', '') if node_item_type == 'wavefile': item = QtGui.QStandardItem(node_item_id) item.setCheckState(QtCore.Qt.Unchecked) item.setCheckable(True) self._items_model.appendRow(item) except Exception as e: debug_info = self.__class__.__name__ + ', row ' + str( sys._getframe().f_lineno) app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e))
def refresh_survey_list(self): """ """ try: self.survey_combo.blockSignals(True) # Clear combo. self.survey_combo.clear() self.survey_combo.addItem('<select survey>') # Clear table. dataset_table = app_framework.DatasetTable() self.events_tableview.setTableModel(dataset_table) self.events_tableview.resizeColumnsToContents() # Add to combo. selected_survey = app_core.DesktopAppSync().get_selected_survey() survey_dict = app_core.DesktopAppSync().get_surveys_dict() index = 0 row_index = 0 for h5_key in sorted(survey_dict): h5_dict = survey_dict[h5_key] h5_file = h5_dict['h5_file'] self.survey_combo.addItem(h5_file) row_index += 1 if h5_file == selected_survey: index = row_index self.survey_combo.setCurrentIndex(index) finally: self.survey_combo.blockSignals(False) # self.refresh_event_list()
def survey_changed(self): """ """ if self.survey_combo.currentIndex() > 0: selected_survey = str(self.survey_combo.currentText()) app_core.DesktopAppSync().set_selected_survey(selected_survey) else: app_core.DesktopAppSync().refresh()
def plot_spectrogram(self): """ Use a thread to relese the user. """ try: workspace = app_core.DesktopAppSync().get_workspace() survey = app_core.DesktopAppSync().get_selected_survey() item_id = app_core.DesktopAppSync().get_selected_item_id(item_type='wavefile') item_metadata = app_core.DesktopAppSync().get_metadata_dict() item_title = item_metadata.get('item_title', '') # Don't redraw the same spectrogram. if (item_id == self.last_used_spectrogram_item_id) and \ (int(self.windowsize_combo.currentText()) == self.last_used_window_size) and \ (self.timeresolution_combo.currentText() == self.last_used_timeresolution) and \ (self.viewpart_combo.currentText() == self.last_used_viewpart): return # try: # Check if thread is running. if not self.spectrogram_thread: # self.spectrogram_active = True self.spectrogram_thread = threading.Thread(target = self.run_spectrogram_plotter, args=()) self.spectrogram_thread.start() except Exception as e: debug_info = self.__class__.__name__ + ', row ' + str(sys._getframe().f_lineno) app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e)) # spectrogram_dict = {} spectrogram_dict['workspace'] = workspace spectrogram_dict['survey'] = survey spectrogram_dict['item_id'] = item_id spectrogram_dict['item_title'] = item_title # if self.spectrogram_queue.qsize() >= 1: # app_utils.Logging().info('Items removed from the spectrogram plotting queue.') while self.spectrogram_queue.qsize() >= 1: try: self.spectrogram_queue.get_nowait() except queue.Empty: break # Exits while loop. # # print('- To queue: ', item_id) self.spectrogram_queue.put(spectrogram_dict) # self.last_used_spectrogram_item_id = item_id self.last_used_window_size = int(self.windowsize_combo.currentText()) self.last_used_timeresolution = self.timeresolution_combo.currentText() self.last_used_viewpart = self.viewpart_combo.currentText() except Exception as e: debug_info = self.__class__.__name__ + ', row ' + str(sys._getframe().f_lineno) app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e))
def __init__(self, name, parentwidget): """ """ self.last_used_dir_path = None # Initialize parent. Should be called after other # initialization since the base class calls _create_content(). super().__init__(name, parentwidget) # Use sync object for workspaces and surveys. app_core.DesktopAppSync().workspace_changed_signal.connect( self.refresh_survey_list) app_core.DesktopAppSync().survey_changed_signal.connect( self.refresh_survey_list) # self.refresh_survey_list()
def update_survey_list(self): """ """ selected_survey = app_core.DesktopAppSync().get_selected_survey() survey_dict = app_core.DesktopAppSync().get_surveys_dict() self.name_combo.clear() self.name_combo.addItem('<select>') index = 0 for row_index, h5_key in enumerate(sorted(survey_dict)): h5_dict = survey_dict[h5_key] h5_file = h5_dict['h5_file'] self.name_combo.addItem(h5_file) if h5_file == selected_survey: index = row_index + 1 self.name_combo.setCurrentIndex(index)
def __init__(self, name, parentwidget): """ """ # Initialize parent. Should be called after other # initialization since the base class calls _create_content(). super().__init__(name, parentwidget) # # Where is the tool allowed to dock in the main window. self.setAllowedAreas(QtCore.Qt.RightDockWidgetArea | QtCore.Qt.BottomDockWidgetArea) self.setBaseSize(600, 600) # Default position. Hide as default. self._parent.addDockWidget(QtCore.Qt.RightDockWidgetArea, self) self.hide() # Plot map queue. Used to separate threads. self.plot_map_queue = queue.Queue(maxsize=2) # Note: Small buffer. self.plot_map_thread = None # self.plot_map_active = False self.plot_map_active = True self.last_used_latitude = 0.0 self.last_used_longitude = 0.0 self.last_used_degree_range = 0.0 # Use sync object for workspaces and surveys. app_core.DesktopAppSync().item_id_changed_signal.connect(self.plot_map) # Also when visible. self.visibilityChanged.connect(self.visibility_changed) # Map init. tilemapbase.init(create=True) ### self.osm_tiles = tilemapbase.tiles.OSM self.osm_tiles = tilemapbase.tiles.build_OSM()
def _set_filename(self, _index): """ """ survey_name = str(self.name_combo.currentText()) survey_dict = app_core.DesktopAppSync().get_surveys_dict() survey_title = survey_dict.get(survey_name, {}).get('h5_title', '') if survey_title and (self.name_combo.currentIndex() > 0): self._surveytitle_edit.setText(survey_title) else: self._surveytitle_edit.setText('')
def update_event_list(self): """ """ selected_event_id = app_core.DesktopAppSync().get_selected_item_id( item_type='event') events_dict = app_core.DesktopAppSync().get_events_dict() self.event_combo.clear() self.event_combo.addItem('<select>') index = 0 row_index = 0 for key in sorted(events_dict.keys()): item_dict = events_dict.get(key, '') item_type = item_dict.get('item_type', '') if item_type == 'event': self.event_combo.addItem(key) row_index += 1 if key == selected_event_id: index = row_index self.event_combo.setCurrentIndex(index)
def plot_map(self): """ Use a thread to relese the user. """ try: workspace = app_core.DesktopAppSync().get_workspace() survey = app_core.DesktopAppSync().get_selected_survey() item_id = app_core.DesktopAppSync().get_selected_item_id( item_type='wavefile') item_metadata = app_core.DesktopAppSync().get_metadata_dict() item_title = item_metadata.get('item_title', '') # try: # Check if thread is running. if not self.plot_map_thread: # self.plot_map_active = True self.plot_map_thread = threading.Thread( target=self.run_map_plotter, args=()) self.plot_map_thread.start() except Exception as e: debug_info = self.__class__.__name__ + ', row ' + str( sys._getframe().f_lineno) app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e)) plot_map_dict = {} plot_map_dict['workspace'] = workspace plot_map_dict['survey'] = survey plot_map_dict['item_id'] = item_id plot_map_dict['item_title'] = item_title # while self.plot_map_queue.qsize() > 1: try: self.plot_map_queue.get_nowait() except queue.Empty: break # Exits while loop. # self.plot_map_queue.put(plot_map_dict) except Exception as e: debug_info = self.__class__.__name__ + ', row ' + str( sys._getframe().f_lineno) app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e))
def refresh_survey_list(self): """ """ try: self.surveys_tableview.blockSignals(True) self.surveys_tableview.getSelectionModel().blockSignals(True) self.workspacedir_edit.blockSignals(True) # selected_workspace = app_core.DesktopAppSync().get_workspace() h5_survey_dict = app_core.DesktopAppSync().get_surveys_dict() h5_selected_survey = app_core.DesktopAppSync().get_selected_survey( ) # self.workspacedir_edit.setText(selected_workspace) # dataset_table = app_framework.DatasetTable() header = ['h5_file', 'h5_title', 'h5_filepath'] header_cap = [] for item in header: header_cap.append(item.capitalize().replace('_', ' ')) dataset_table.set_header(header_cap) # selected_survey_index = None for index, key in enumerate(sorted(h5_survey_dict)): h5_dict = h5_survey_dict[key] row = [] for head in header: row.append(h5_dict.get(head, '')) dataset_table.append_row(row) h5_file = h5_dict.get('h5_file', None) if h5_file and (h5_file == h5_selected_survey): selected_survey_index = index # self.surveys_tableview.setTableModel(dataset_table) self.surveys_tableview.resizeColumnsToContents() # if selected_survey_index is not None: qt_index = self.surveys_tableview.model().index( selected_survey_index, 0) self.surveys_tableview.setCurrentIndex(qt_index) finally: self.surveys_tableview.blockSignals(False) self.surveys_tableview.getSelectionModel().blockSignals(False) self.workspacedir_edit.blockSignals(False)
def refresh_survey_list(self): """ """ try: self.survey_combo.blockSignals(True) self.survey_combo.clear() self.survey_combo.addItem('<select survey>') selected_survey = app_core.DesktopAppSync().get_selected_survey() survey_dict = app_core.DesktopAppSync().get_surveys_dict() index = 0 for row_index, h5_key in enumerate(sorted(survey_dict)): h5_dict = survey_dict[h5_key] h5_file = h5_dict['h5_file'] self.survey_combo.addItem(h5_file) if h5_file == selected_survey: index = row_index + 1 self.survey_combo.setCurrentIndex(index) finally: self.survey_combo.blockSignals(False) # self.refresh_wavefile_list()
def __init__(self, parentwidget): """ """ super().__init__(parentwidget) self.setWindowTitle("New event") self.parentwidget = parentwidget self.setLayout(self.content()) # self.dir_path = app_core.DesktopAppSync().get_workspace() self.survey_name = str(self.parentwidget.survey_combo.currentText()) # self.enable_buttons()
def __init__(self, name, parentwidget): """ """ self._last_used_dir_path = None # Initialize parent. Should be called after other # initialization since the base class calls _create_content(). super(ScannerActivity, self).__init__(name, parentwidget) # self._load_item_data() # Use sync object for workspaces and surveys. # app_core.DesktopAppSync().workspace_changed_signal.connect(self._load_item_data) app_core.DesktopAppSync().survey_changed_signal.connect( self._load_item_data)
def __init__(self, parentwidget): """ """ super(DeleteDialog, self).__init__(parentwidget) self.setWindowTitle("Delete events and detectors") self.parentwidget = parentwidget self.setLayout(self.content()) self.setMinimumSize(500, 500) # self.dir_path = app_core.DesktopAppSync().get_workspace() self.survey_name = str(self.parentwidget.survey_combo.currentText()) # self.load_item_data()
def refresh_event_list(self): """ """ try: self.events_tableview.blockSignals(True) self.events_tableview.getSelectionModel().blockSignals(True) # if self.survey_combo.currentIndex() == 0: dataset_table = app_framework.DatasetTable() self.events_tableview.setTableModel(dataset_table) self.events_tableview.resizeColumnsToContents() return dir_path = app_core.DesktopAppSync().get_workspace() survey_name = str(self.survey_combo.currentText()) if (not dir_path) or (not survey_name): dataset_table = app_framework.DatasetTable() self.events_tableview.setTableModel(dataset_table) self.events_tableview.resizeColumnsToContents() return # events_dict = app_core.DesktopAppSync().get_events_dict() dataset_table = app_framework.DatasetTable() # dataset_table.set_header(['item_title', 'item_type', 'item_id']) dataset_table.set_header(['Title', 'Type', 'Item id']) for key in events_dict.keys(): item_dict = events_dict.get(key, {}) item_type = item_dict.get('item_type', '') if item_type in ['event', 'detector']: row = [] row.append(item_dict.get('item_title', '')) row.append(item_dict.get('item_type', '')) row.append(item_dict.get('item_id', '')) dataset_table.append_row(row) # self.events_tableview.setTableModel(dataset_table) self.events_tableview.resizeColumnsToContents() finally: self.events_tableview.blockSignals(False) self.events_tableview.getSelectionModel().blockSignals(False)
def __init__(self, parentwidget): """ """ super().__init__(parentwidget) self.setWindowTitle("Copy event or detector") self.parentwidget = parentwidget self.setLayout(self.content()) # self.itemtitle_edit.setFocus() # self.dir_path = app_core.DesktopAppSync().get_workspace() self.survey_name = str(self.parentwidget.survey_combo.currentText()) # self.update_item_list()
def selected_item_changed(self): """ """ try: modelIndex = self.events_tableview.currentIndex() if modelIndex.isValid(): item_id = str(self.events_tableview.model().index( modelIndex.row(), 2).data()) # Sync. app_core.DesktopAppSync().set_selected_item_id(item_id) except Exception as e: debug_info = self.__class__.__name__ + ', row ' + str( sys._getframe().f_lineno) app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e))
def update_event_list(self): """ """ try: selected_detector_id = app_core.DesktopAppSync( ).get_selected_item_id(item_type='detector') events_dict = app_core.DesktopAppSync().get_events_dict() self.detector_combo.clear() self.detector_combo.addItem('<select>') index = 0 row_index = 0 for key in sorted(events_dict.keys()): item_dict = events_dict.get(key, '') item_type = item_dict.get('item_type', '') if item_type == 'detector': self.detector_combo.addItem(key) row_index += 1 if key == selected_detector_id: index = row_index self.detector_combo.setCurrentIndex(index) except Exception as e: debug_info = self.__class__.__name__ + ', row ' + str( sys._getframe().f_lineno) app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e))
def _set_filename(self, _index): """ """ try: survey_name = str(self.name_combo.currentText()) survey_dict = app_core.DesktopAppSync().get_surveys_dict() survey_title = survey_dict.get(survey_name, {}).get('h5_title', '') if survey_title and (self.name_combo.currentIndex() > 0): self._surveytitle_edit.setText(survey_title) else: self._surveytitle_edit.setText('') except Exception as e: debug_info = self.__class__.__name__ + ', row ' + str( sys._getframe().f_lineno) app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e))
def update_metadata(self): """ """ survey = app_core.DesktopAppSync().get_selected_survey() item_id = app_core.DesktopAppSync().get_selected_item_id() metadata_dict = app_core.DesktopAppSync().get_metadata_dict() item_title = metadata_dict.get('item_title', '') # self.metadata_list.clear() if not item_id: self.survey_edit.setText('') self.itemid_edit.setText('') self.title_edit.setText('') return # self.survey_edit.setText(survey) self.itemid_edit.setText(item_id) self.title_edit.setText(item_title) # for key in sorted(metadata_dict): text = key + ': ' + ' ' * (16 - len(key)) + '\t' + str( metadata_dict.get(key, '')) self.metadata_list.addItem(text) # return
def _create_survey(self): """ """ try: try: dir_path = app_core.DesktopAppSync().get_workspace() name = str(self._surveytitle_edit.text()) filename = str(self._surveyfilename_edit.text()) ws = hdf54bats.Hdf5Workspace(dir_path, create_ws=True) ws.create_h5(filename, title=name) finally: self.accept() # Close dialog box. except Exception as e: debug_info = self.__class__.__name__ + ', row ' + str( sys._getframe().f_lineno) app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e))
def selected_survey_changed(self): """ """ try: modelIndex = self.surveys_tableview.currentIndex() if modelIndex.isValid(): h5_survey = self.surveys_tableview.model().index( modelIndex.row(), 0).data() # time.sleep(0.1) # Sync. app_core.DesktopAppSync().set_selected_survey(h5_survey) except Exception as e: debug_info = self.__class__.__name__ + ', row ' + str( sys._getframe().f_lineno) app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e))
def _load_survey_data(self): """ """ try: self._surveys_model.clear() surveys_dict = app_core.DesktopAppSync().get_surveys_dict() for h5_file in sorted(surveys_dict.keys()): item = QtGui.QStandardItem(h5_file) item.setCheckState(QtCore.Qt.Unchecked) item.setCheckable(True) self._surveys_model.appendRow(item) # except Exception as e: debug_info = self.__class__.__name__ + ', row ' + str( sys._getframe().f_lineno) app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e))
def load_item_data(self): """ """ try: self.items_model.clear() events_dict = app_core.DesktopAppSync().get_events_dict() for key in sorted(events_dict.keys()): item_dict = events_dict.get(key, '') item_type = item_dict.get('item_type', '') if item_type in ['event', 'detector']: item = QtGui.QStandardItem(key) item.setCheckState(QtCore.Qt.Unchecked) item.setCheckable(True) self.items_model.appendRow(item) except Exception as e: debug_info = self.__class__.__name__ + ', row ' + str( sys._getframe().f_lineno) app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e))
def _create_survey(self): """ """ if self.name_combo.currentIndex() > 0: try: try: dir_path = app_core.DesktopAppSync().get_workspace() name_combo = self.name_combo.currentText() name = self._surveytitle_edit.text() filename = self._surveyfilename_edit.text() ws = hdf54bats.Hdf5Workspace(dir_path) ws.copy_h5(name_combo, filename) ws.set_h5_title(filename, name) finally: self.accept() # Close dialog box. except Exception as e: debug_info = self.__class__.__name__ + ', row ' + str( sys._getframe().f_lineno) app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e))
def __init__(self, name, parentwidget): """ """ self.spectrogram_thread = None self.spectrogram_thread_active = False # Initialize parent. Should be called after other # initialization since the base class calls _create_content(). super().__init__(name, parentwidget) # # Where is the tool allowed to dock in the main window. self.setAllowedAreas(QtCore.Qt.RightDockWidgetArea | QtCore.Qt.BottomDockWidgetArea) self.setBaseSize(600, 600) # Default position. Hide as default. self._parent.addDockWidget(QtCore.Qt.RightDockWidgetArea, self) self.hide() # Use sync object for workspaces and surveys. app_core.DesktopAppSync().item_id_changed_signal.connect( self.update_metadata) self.update_metadata()
def _delete_marked_surveys(self): """ """ try: try: dir_path = app_core.DesktopAppSync().get_workspace() ws = hdf54bats.Hdf5Workspace(dir_path) for rowindex in range(self._surveys_model.rowCount()): item = self._surveys_model.item(rowindex, 0) if item.checkState() == QtCore.Qt.Checked: survey_filename = str(item.text()) ws.delete_h5(survey_filename) finally: self.accept() # Close dialog box. # except Exception as e: debug_info = self.__class__.__name__ + ', row ' + str( sys._getframe().f_lineno) app_utils.Logging().error('Exception: (' + debug_info + '): ' + str(e)) self.accept() # Close dialog box.
def refresh(self): """ """ app_core.DesktopAppSync().refresh()