From b43bd333e5549aa2dbb0d447d08b73f4df1d6c34 Mon Sep 17 00:00:00 2001 From: Jeffrey Bouman Date: Thu, 27 Aug 2020 20:32:08 +0200 Subject: [PATCH 1/3] Add log entry modification support --- .../src/march_rqt_note_taker/entry.py | 3 +++ .../src/march_rqt_note_taker/entry_model.py | 12 ++++++++--- .../src/march_rqt_note_taker/notes_widget.py | 21 ++++++++++++++++++- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/march_rqt_note_taker/src/march_rqt_note_taker/entry.py b/march_rqt_note_taker/src/march_rqt_note_taker/entry.py index b7ee549..c7388e0 100644 --- a/march_rqt_note_taker/src/march_rqt_note_taker/entry.py +++ b/march_rqt_note_taker/src/march_rqt_note_taker/entry.py @@ -28,3 +28,6 @@ def time_string(self): def __str__(self): """Returns a string representation of an Entry.""" return '[{0}] {1}'.format(self.date_time.toString(), self.content) + + def edit_content(self, content): + self.content = content diff --git a/march_rqt_note_taker/src/march_rqt_note_taker/entry_model.py b/march_rqt_note_taker/src/march_rqt_note_taker/entry_model.py index 283f4ac..886c0ec 100644 --- a/march_rqt_note_taker/src/march_rqt_note_taker/entry_model.py +++ b/march_rqt_note_taker/src/march_rqt_note_taker/entry_model.py @@ -41,6 +41,9 @@ def data(self, index, role=Qt.DisplayRole): if column == 'entry' and entry.is_error: return QBrush(Qt.darkRed) + if role == Qt.EditRole: + return entry + return None def remove_rows(self, position, rows=1): @@ -56,14 +59,17 @@ def remove_rows(self, position, rows=1): self._entries = self._entries[:position] + self._entries[position + rows:] self.endRemoveRows() - def insert_row(self, entry): + def insert_row(self, entry, row=-1): """Appends an entry. :type entry: Entry :param entry: Entry to append to rows + :param row: Row number at which to add the entry """ - self.beginInsertRows(QModelIndex(), self.rowCount(), self.rowCount()) - self._entries.append(entry) + if row == -1: + row = self.rowCount() + self.beginInsertRows(QModelIndex(), row, row) + self._entries.insert(row, entry) self.endInsertRows() def insert_log_msg(self, log_msg): diff --git a/march_rqt_note_taker/src/march_rqt_note_taker/notes_widget.py b/march_rqt_note_taker/src/march_rqt_note_taker/notes_widget.py index cfd80a2..d5f62c1 100644 --- a/march_rqt_note_taker/src/march_rqt_note_taker/notes_widget.py +++ b/march_rqt_note_taker/src/march_rqt_note_taker/notes_widget.py @@ -2,7 +2,7 @@ from python_qt_binding import loadUi, QtCore from python_qt_binding.QtGui import QKeySequence -from python_qt_binding.QtWidgets import QFileDialog, QShortcut, QWidget +from python_qt_binding.QtWidgets import QFileDialog, QShortcut, QWidget, QInputDialog, QLineEdit import rospy from .entry import Entry @@ -31,6 +31,7 @@ def __init__(self, model, ui_file): self._autosave(first, last, self.REMOVE)]) self.table_view.setModel(self._model) + self.table_view.doubleClicked.connect(self._edit_selected) self.table_view.verticalScrollBar().rangeChanged.connect(self._handle_change_scroll) self._last_scroll_max = self.table_view.verticalScrollBar().maximum() @@ -81,6 +82,24 @@ def _delete_selected(self): if indices and indices[0].isValid(): self._model.remove_rows(indices[0].row(), len(indices)) + def _edit_selected(self): + selection_model = self.table_view.selectionModel() + if self.table_view.hasFocus() and selection_model.hasSelection(): + indices = [index for index in selection_model.selectedIndexes() if not index.column()] + if indices and indices[0].isValid(): + ''' Get the full entry from dataset ''' + entry = self._model.data(indices[0], QtCore.Qt.EditRole) + ''' Get new value for entry ''' + entry_content, ok = QInputDialog().getText(self, 'Edit Entry', 'Entry:', QLineEdit.Normal, entry.content) + if ok and entry_content: + entry.content = entry_content + ''' Delete the current data entry and input the new entry ''' + self._model.remove_rows(indices[0].row()) + new_row = indices[0].row() + if new_row < 0: + new_row = 0 + self._model.insert_row(entry, new_row) + def _set_saved(self, saved): self._can_save = not saved self.save_button.setEnabled(not saved) From 36ce5467a6af4b7a1a4c00d4c3abad17f9707789 Mon Sep 17 00:00:00 2001 From: Jeffrey Bouman Date: Thu, 27 Aug 2020 20:39:44 +0200 Subject: [PATCH 2/3] Use the new edit_entry function of entry --- march_rqt_note_taker/src/march_rqt_note_taker/notes_widget.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/march_rqt_note_taker/src/march_rqt_note_taker/notes_widget.py b/march_rqt_note_taker/src/march_rqt_note_taker/notes_widget.py index d5f62c1..da6e3b3 100644 --- a/march_rqt_note_taker/src/march_rqt_note_taker/notes_widget.py +++ b/march_rqt_note_taker/src/march_rqt_note_taker/notes_widget.py @@ -92,7 +92,7 @@ def _edit_selected(self): ''' Get new value for entry ''' entry_content, ok = QInputDialog().getText(self, 'Edit Entry', 'Entry:', QLineEdit.Normal, entry.content) if ok and entry_content: - entry.content = entry_content + entry.edit_content(entry_content) ''' Delete the current data entry and input the new entry ''' self._model.remove_rows(indices[0].row()) new_row = indices[0].row() From f3ce1cb3b5ba45c15145a5c5ec72664614f9fa05 Mon Sep 17 00:00:00 2001 From: Jeffrey Bouman Date: Thu, 27 Aug 2020 20:54:56 +0200 Subject: [PATCH 3/3] Make Travis happy --- .../src/march_rqt_note_taker/notes_widget.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/march_rqt_note_taker/src/march_rqt_note_taker/notes_widget.py b/march_rqt_note_taker/src/march_rqt_note_taker/notes_widget.py index da6e3b3..31f7c51 100644 --- a/march_rqt_note_taker/src/march_rqt_note_taker/notes_widget.py +++ b/march_rqt_note_taker/src/march_rqt_note_taker/notes_widget.py @@ -2,7 +2,7 @@ from python_qt_binding import loadUi, QtCore from python_qt_binding.QtGui import QKeySequence -from python_qt_binding.QtWidgets import QFileDialog, QShortcut, QWidget, QInputDialog, QLineEdit +from python_qt_binding.QtWidgets import QFileDialog, QInputDialog, QLineEdit, QShortcut, QWidget import rospy from .entry import Entry @@ -87,16 +87,17 @@ def _edit_selected(self): if self.table_view.hasFocus() and selection_model.hasSelection(): indices = [index for index in selection_model.selectedIndexes() if not index.column()] if indices and indices[0].isValid(): - ''' Get the full entry from dataset ''' + """ Get the full entry from dataset """ entry = self._model.data(indices[0], QtCore.Qt.EditRole) - ''' Get new value for entry ''' - entry_content, ok = QInputDialog().getText(self, 'Edit Entry', 'Entry:', QLineEdit.Normal, entry.content) + """ Get new value for entry """ + entry_content, ok = QInputDialog().getText(self, 'Edit Entry', 'Entry:', + QLineEdit.Normal, entry.content) if ok and entry_content: entry.edit_content(entry_content) - ''' Delete the current data entry and input the new entry ''' + """ Delete the current data entry and input the new entry """ self._model.remove_rows(indices[0].row()) new_row = indices[0].row() - if new_row < 0: + if new_row < 0: new_row = 0 self._model.insert_row(entry, new_row)