[update] improved SearchFileByExtensionDialog widget (table, auto refresh)

This commit is contained in:
Marcel Paffrath 2024-05-29 11:42:10 +02:00
parent 6cc9cb4a96
commit 48d196df11
2 changed files with 30 additions and 10 deletions

View File

@ -1886,6 +1886,7 @@ class MainWindow(QMainWindow):
# which will read in data input twice. Therefore current tab is changed to 0 # which will read in data input twice. Therefore current tab is changed to 0
# in loadProject before calling this function. # in loadProject before calling this function.
self.fill_eventbox() self.fill_eventbox()
#print(f'{self.get_current_event()=}')
plotted = False plotted = False
if self.tabs.currentIndex() == 2: if self.tabs.currentIndex() == 2:
self.init_event_table() self.init_event_table()
@ -1920,7 +1921,6 @@ class MainWindow(QMainWindow):
self.spectro_layout.addWidget(newSpectroWidget) self.spectro_layout.addWidget(newSpectroWidget)
self.spectroWidget = newSpectroWidget self.spectroWidget = newSpectroWidget
def newWF(self, event=None, plot=True): def newWF(self, event=None, plot=True):
''' '''
Load new data and plot if necessary. Load new data and plot if necessary.
@ -1971,6 +1971,8 @@ class MainWindow(QMainWindow):
# ans = False # ans = False
settings = QSettings() settings = QSettings()
# process application events to wait for event items to appear in event box
QApplication.processEvents()
curr_event = self.get_current_event() curr_event = self.get_current_event()
if not curr_event: if not curr_event:
print('Could not find current event. Try reload?') print('Could not find current event. Try reload?')
@ -3632,7 +3634,7 @@ class MainWindow(QMainWindow):
return True return True
return False return False
def update_status(self, message, duration=5000): def update_status(self, message, duration=10000):
self.statusBar().showMessage(message, duration) self.statusBar().showMessage(message, duration)
if self.get_data() is not None: if self.get_data() is not None:
if not self.get_current_event() or not self.project.location: if not self.get_current_event() or not self.project.location:

View File

@ -36,7 +36,7 @@ from PySide2.QtWidgets import QAction, QApplication, QCheckBox, QComboBox, \
QGridLayout, QLabel, QLineEdit, QMessageBox, \ QGridLayout, QLabel, QLineEdit, QMessageBox, \
QTabWidget, QToolBar, QVBoxLayout, QHBoxLayout, QWidget, \ QTabWidget, QToolBar, QVBoxLayout, QHBoxLayout, QWidget, \
QPushButton, QFileDialog, QInputDialog QPushButton, QFileDialog, QInputDialog
from PySide2.QtCore import QSettings, Qt, QUrl, Signal from PySide2.QtCore import QSettings, Qt, QUrl, Signal, QTimer
from PySide2.QtWebEngineWidgets import QWebEngineView as QWebView from PySide2.QtWebEngineWidgets import QWebEngineView as QWebView
from obspy import Stream, Trace, UTCDateTime from obspy import Stream, Trace, UTCDateTime
from obspy.core.util import AttribDict from obspy.core.util import AttribDict
@ -1579,6 +1579,9 @@ class SearchFileByExtensionDialog(QtWidgets.QDialog):
self.setupUi() self.setupUi()
self.connectSignals() self.connectSignals()
self.showPaths() self.showPaths()
self.refresh_timer = QTimer(self)
self.refresh_timer.timeout.connect(self.showPaths)
self.refresh_timer.start(10000)
self.resize(800, 450) self.resize(800, 450)
@ -1597,9 +1600,16 @@ class SearchFileByExtensionDialog(QtWidgets.QDialog):
self.searchButton = QtWidgets.QPushButton('Search') self.searchButton = QtWidgets.QPushButton('Search')
self.searchButton.setVisible(False) self.searchButton.setVisible(False)
self.textWidget = QtWidgets.QTextEdit() self.tableWidget = QtWidgets.QTableWidget()
self.textWidget.setMaximumWidth(1e5) tableWidget = self.tableWidget
self.textWidget.setReadOnly(True) tableWidget.setColumnCount(2)
tableWidget.setRowCount(len(self.events))
tableWidget.setHorizontalHeaderLabels(('Filename', 'Last modified'))
tableWidget.setEditTriggers(tableWidget.NoEditTriggers)
tableWidget.setSortingEnabled(True)
header = tableWidget.horizontalHeader()
header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
header.setStretchLastSection(True)
self.statusText = QtWidgets.QLabel() self.statusText = QtWidgets.QLabel()
@ -1608,23 +1618,31 @@ class SearchFileByExtensionDialog(QtWidgets.QDialog):
self.header_layout.addWidget(self.searchButton) self.header_layout.addWidget(self.searchButton)
self.main_layout.addLayout(self.header_layout) self.main_layout.addLayout(self.header_layout)
self.main_layout.addWidget(self.textWidget) self.main_layout.addWidget(self.tableWidget)
self.main_layout.addWidget(self.statusText) self.main_layout.addWidget(self.statusText)
self.main_layout.addWidget(self._buttonbox) self.main_layout.addWidget(self._buttonbox)
def showPaths(self): def showPaths(self):
self.filepaths = [] self.filepaths = []
fext = self.lineEdit.text() fext = self.lineEdit.text()
for event in self.events: self.tableWidget.clearContents()
for index, event in enumerate(self.events):
filename = get_pylot_eventfile_with_extension(event, fext) filename = get_pylot_eventfile_with_extension(event, fext)
if filename: if filename:
self.filepaths.append(filename) self.filepaths.append(filename)
self.textWidget.append(f'{filename}') ts = int(os.path.getmtime(filename))
# create QTableWidgetItems of filepath and last modification time
fname_item = QtWidgets.QTableWidgetItem(f'{filename}')
ts_item = QtWidgets.QTableWidgetItem(f'{datetime.datetime.fromtimestamp(ts)}')
self.tableWidget.setItem(index, 0, fname_item)
self.tableWidget.setItem(index, 1, ts_item)
# TODO: Idea -> only refresh if table contents changed. Use selection to load only a subset of files
if len(self.filepaths) > 0: if len(self.filepaths) > 0:
status_text = f'Found {len(self.filepaths)} eventfiles. Do you want to load them?' status_text = f'Found {len(self.filepaths)} eventfiles. Do you want to load them?'
else: else:
status_text = 'Did not find any files for specified file mask.' status_text = 'Did not find any files for specified file mask.'
self.textWidget.setText('')
self.statusText.setText(status_text) self.statusText.setText(status_text)