Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • software_public/passoft/sohstationviewer
1 result
Show changes
Commits on Source (8)
......@@ -7,7 +7,9 @@ from copy import deepcopy
from pathlib import Path
from PySide2 import QtCore, QtWidgets, QtGui
from PySide2.QtWidgets import QListWidgetItem, QMessageBox
from PySide2.QtCore import QSize
from PySide2.QtGui import QFont, QPalette, QColor
from PySide2.QtWidgets import QFrame, QListWidgetItem, QMessageBox
from sohstationviewer.conf import constants
from sohstationviewer.model.data_loader import DataLoader
......@@ -60,6 +62,10 @@ class MainWindow(QtWidgets.QMainWindow, UIMainWindow):
"""
self.dir_names: List[Path] = []
"""
current_dir: str - the current main data directory
"""
self.current_dir = ''
"""
rt130_das_dict: dict by rt130 for data paths, so user can choose
dasses to assign list of data paths to selected_rt130_paths
"""
......@@ -234,9 +240,23 @@ class MainWindow(QtWidgets.QMainWindow, UIMainWindow):
win.show()
@QtCore.Slot()
def from_data_card_check_box_clicked(self):
def from_data_card_check_box_clicked(self, is_from_data_card_checked):
self.open_files_list.clear()
self.set_open_files_list_texts()
self.clear_button.setEnabled(not is_from_data_card_checked)
self.search_button.setEnabled(not is_from_data_card_checked)
self.search_line_edit.setEnabled(not is_from_data_card_checked)
# QLineEdit does not change its color when it is disabled unless
# there is text inside, so we have to do it manually.
palette = self.search_line_edit.palette()
if is_from_data_card_checked:
# We are copying the color of a disabled button
search_line_edit_color = QColor(246, 246, 246)
else:
search_line_edit_color = QColor(255, 255, 255)
palette.setColor(QPalette.Base, search_line_edit_color)
self.search_line_edit.setPalette(palette)
@QtCore.Slot()
def all_wf_chans_clicked(self):
......@@ -779,6 +799,7 @@ class MainWindow(QtWidgets.QMainWindow, UIMainWindow):
# Signal current_directory_changed, and gather list of files in new
# current directory
self.current_directory_changed.emit(path)
self.current_dir = path
execute_db(f'UPDATE PersistentData SET FieldValue="{path}" WHERE '
'FieldName="currentDirectory"')
self.set_open_files_list_texts()
......@@ -930,7 +951,7 @@ class MainWindow(QtWidgets.QMainWindow, UIMainWindow):
Close all forms related to forms_menu.
Add no_forms_action to let user know that there are no forms available.
"""
self.forms_menu.clear() # remove all actions
self.forms_menu.clear() # remove all actions
for i in range(len(self.forms_in_forms_menu) - 1, -1, -1):
form = self.forms_in_forms_menu.pop(i)
form.close()
......@@ -951,3 +972,56 @@ class MainWindow(QtWidgets.QMainWindow, UIMainWindow):
if not checked:
return
self.gps_dialog.set_colors(color_mode)
@QtCore.Slot()
def clear_file_search(self):
"""
Clear the content of the file search widget.
"""
self.search_line_edit.clear()
self.set_current_directory(self.current_dir)
def filter_folder_list(self):
"""
Filter the current list of folders based on the search input.
"""
self.set_current_directory(self.current_dir)
open_file_paths = [
self.open_files_list.item(i).file_path
for i in range(self.open_files_list.count())
]
search_text = self.search_line_edit.text()
filtered_file_paths = [
path
for path in open_file_paths
if search_text.casefold() in path.casefold()
]
# We are inserting the widgets in reverse order because doing so means
# that we only have to insert into the 0th row. Otherwise, we would
# have to keep track of the current index to insert into.
# Create a line that separate filtered list of directories and list of
# directories.
separator_list_item = QListWidgetItem()
separator_list_item.setFlags(QtCore.Qt.NoItemFlags)
separator_list_item.setSizeHint(
QSize(separator_list_item.sizeHint().width(), 10) # noqa
)
self.open_files_list.insertItem(0, separator_list_item)
line = QFrame()
line.setFrameShape(QFrame.HLine)
self.open_files_list.setItemWidget(separator_list_item, line)
for path in reversed(filtered_file_paths):
current_file_list_item = FileListItem(path)
self.open_files_list.insertItem(0, current_file_list_item)
found_files_list_item = QListWidgetItem('Found files:')
bold_font = QFont()
bold_font.setBold(True)
found_files_list_item.setFont(bold_font)
found_files_list_item.setFlags(QtCore.Qt.NoItemFlags)
found_files_list_item.setForeground(QtCore.Qt.black)
self.open_files_list.insertItem(0, found_files_list_item)
# UI and connectSignals for main_window
from typing import Union, List
from typing import Union, List, Optional, Iterable
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtCore import QObject
from PySide2.QtGui import QIcon, QPixmap
from PySide2.QtWidgets import (
QMainWindow, QWidget, QTextBrowser, QPushButton, QLineEdit, QDateEdit,
QListWidget, QCheckBox, QRadioButton, QMenu, QAction, QLabel, QFrame,
QVBoxLayout, QHBoxLayout, QGridLayout, QAbstractItemView, QShortcut,
QActionGroup, QButtonGroup
QActionGroup, QButtonGroup, QStyle,
)
from sohstationviewer.view.calendar.calendar_widget import CalendarWidget
......@@ -90,9 +92,14 @@ class UIMainWindow(object):
"""
self.search_line_edit: Union[QLineEdit, None] = None
"""
clear_button: clear search_line_edit
clear_button: clear search_line_edit
"""
self.clear_button: Union[QPushButton, None] = None
self.clear_search_action: Optional[QAction] = None
"""
search_button: filter list of files based on content of
self.search_line_edit
"""
self.search_button: Union[QPushButton, None] = None
"""
replot_button: reset plotting without re-loading data
"""
......@@ -385,33 +392,56 @@ class UIMainWindow(object):
self.open_files_list.setSelectionMode(
QAbstractItemView.ExtendedSelection)
search_grid = QGridLayout()
left_layout.addLayout(search_grid)
search_layout = QHBoxLayout()
left_layout.addLayout(search_layout)
self.search_line_edit = QLineEdit(self.central_widget)
self.search_line_edit.setPlaceholderText('Search...')
search_grid.addWidget(self.search_line_edit, 0, 0, 1, 3)
self.clear_button = QPushButton('Clear', self.central_widget)
self.clear_button.setFixedWidth(65)
search_grid.addWidget(self.clear_button, 0, 3, 1, 1)
self.search_line_edit.setToolTip('Filter the list of files based on '
'the content.')
self.search_line_edit.setClearButtonEnabled(True)
try:
# This value was obtained from the C++ source of QT. We use it here
# so that the QAction found is guaranteed to be the clear button.
clear_action_name = '_q_qlineeditclearaction'
found_actions = self.search_line_edit.findChildren(
QAction, clear_action_name
)
self.clear_search_action: QAction = found_actions[0]
self.clear_search_action.triggered.connect(
self.main_window.clear_file_search
)
except IndexError:
# If the name of the clear button is changed in the C++ source of
# QT, nothing will be found. So, we raise an error to indicate this
# problem.
raise ValueError('No clear button could be found. Check its '
'objectName attribute using QObject.findChildren '
'without a name.')
search_layout.addWidget(self.search_line_edit)
search_layout.addSpacing(2)
self.search_button = QPushButton('Search', self.central_widget)
self.search_button.setFixedWidth(70)
search_layout.addWidget(self.search_button)
search_grid = QGridLayout()
left_layout.addLayout(search_grid)
self.from_data_card_check_box = QCheckBox(
'From Data Card', self.central_widget)
search_grid.addWidget(self.from_data_card_check_box, 1, 0, 1, 2)
search_grid.addWidget(self.from_data_card_check_box, 0, 0, 1, 2)
self.replot_button = QPushButton('RePlot', self.central_widget)
self.replot_button.setFixedWidth(95)
search_grid.addWidget(self.replot_button, 1, 3, 1, 1)
search_grid.addWidget(self.replot_button, 0, 3, 1, 1)
data_group = QButtonGroup()
self.data_radio_button = QRadioButton('data', self.central_widget)
data_group.addButton(self.data_radio_button)
self.data_radio_button.setEnabled(False)
search_grid.addWidget(self.data_radio_button, 2, 0, 1, 1)
search_grid.addWidget(self.data_radio_button, 1, 0, 1, 1)
self.sdata_radio_button = QRadioButton('sdata', self.central_widget)
self.sdata_radio_button.setEnabled(False)
data_group.addButton(self.sdata_radio_button)
search_grid.addWidget(self.sdata_radio_button, 2, 1, 1, 1)
search_grid.addWidget(self.sdata_radio_button, 1, 1, 1, 1)
color_tip_fmt = ('Set the background color of the plot '
' to {0}')
......@@ -747,9 +777,18 @@ class UIMainWindow(object):
self.open_files_list.itemDoubleClicked.connect(
main_window.open_files_list_item_double_clicked)
self.from_data_card_check_box.clicked.connect(
self.from_data_card_check_box.toggled.connect(
main_window.from_data_card_check_box_clicked)
# Filter files on pressing Enter
self.search_line_edit.returnPressed.connect(
main_window.filter_folder_list
)
# self.clear_button.pressed.connect(main_window.clear_file_search)
self.search_button.pressed.connect(main_window.filter_folder_list)
self.replot_button.clicked.connect(main_window.replot_loaded_data)
self.background_black_radio_button.toggled.connect(
......