Implement category renaming
This commit is contained in:
parent
f53a948c8f
commit
6c89dae2d1
@ -29,6 +29,8 @@ class MainWindow(QMainWindow):
|
||||
= self.findChild(QVBoxLayout, "warningLayout")
|
||||
self._create_button \
|
||||
= self.findChild(QPushButton, "createCategoryButton")
|
||||
self._rename_button \
|
||||
= self.findChild(QPushButton, "renameCategoryButton")
|
||||
self._delete_button \
|
||||
= self.findChild(QPushButton, "deleteCategoryButton")
|
||||
self._apply_button \
|
||||
@ -59,6 +61,7 @@ class MainWindow(QMainWindow):
|
||||
# Set event handlers
|
||||
|
||||
self._create_button.clicked.connect(self._handle_create_click)
|
||||
self._rename_button.clicked.connect(self._handle_rename_click)
|
||||
self._delete_button.clicked.connect(self._handle_delete_click)
|
||||
self._clear_button.clicked.connect(self._handle_clear_click)
|
||||
self._apply_button.clicked.connect(self._handle_apply_click)
|
||||
@ -176,6 +179,25 @@ class MainWindow(QMainWindow):
|
||||
callback=self._dataframe_update_callback)
|
||||
context.exec(self.sender().mapToGlobal(pos))
|
||||
|
||||
def _handle_rename_click(self):
|
||||
selected_item = self._list_widget.currentItem()
|
||||
|
||||
new_name, flag = QInputDialog.getText(self, "Rename category",
|
||||
"New name:",
|
||||
text=selected_item.text())
|
||||
if not flag:
|
||||
return
|
||||
|
||||
current_items = [self._list_widget.item(x).text() for x
|
||||
in range(self._list_widget.count())]
|
||||
|
||||
if new_name not in current_items:
|
||||
self._pandas_model.rename_category(selected_item.text(), new_name)
|
||||
selected_item.setText(new_name)
|
||||
else:
|
||||
QMessageBox.warning(self, "No action performed",
|
||||
f"Category '{new_name}' already exists.")
|
||||
|
||||
def _handle_create_click(self):
|
||||
new_name, flag = QInputDialog.getText(self, "Create category",
|
||||
"New category:",
|
||||
@ -193,7 +215,7 @@ class MainWindow(QMainWindow):
|
||||
f"Category '{new_name}' already exists.")
|
||||
|
||||
def _handle_delete_click(self):
|
||||
selected_item = self._list_widget.selectedItems()[0]
|
||||
selected_item = self._list_widget.currentItem()
|
||||
|
||||
button = QMessageBox.question(self, "Delete category",
|
||||
f"Are you sure you want to delete"
|
||||
@ -245,9 +267,16 @@ class MainWindow(QMainWindow):
|
||||
else:
|
||||
self._apply_button.setEnabled(False)
|
||||
|
||||
def _check_enable_rename_button(self):
|
||||
if (len(self._list_widget.selectedItems()) > 0):
|
||||
self._rename_button.setEnabled(True)
|
||||
else:
|
||||
self._rename_button.setEnabled(False)
|
||||
|
||||
def _handle_list_selection_changed(self):
|
||||
self._check_enable_delete_button()
|
||||
self._check_enable_apply_button()
|
||||
self._check_enable_rename_button()
|
||||
|
||||
def _handle_table_selection_changed(self):
|
||||
self._check_enable_clear_button()
|
||||
|
||||
@ -60,6 +60,36 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="renameCategoryButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Rename selected category</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Rename</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="deleteCategoryButton">
|
||||
<property name="enabled">
|
||||
|
||||
@ -83,6 +83,14 @@ class PandasModel(QtCore.QAbstractTableModel):
|
||||
row_indices = self._data.loc[self._data['category'] == category].index
|
||||
self.assign_category(' ', row_indices)
|
||||
|
||||
def rename_category(self, old_name, new_name):
|
||||
if 'category' not in self._data.columns:
|
||||
self.create_column('category')
|
||||
|
||||
row_indices = self._data.loc[self._data['category'] == old_name].index
|
||||
self.assign_category(new_name, row_indices)
|
||||
|
||||
|
||||
def get_categories(self) -> typing.List[str]:
|
||||
if 'category' not in self._data.columns:
|
||||
self.create_column('category')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user