Implement category renaming
This commit is contained in:
parent
f53a948c8f
commit
6c89dae2d1
@ -29,6 +29,8 @@ class MainWindow(QMainWindow):
|
|||||||
= self.findChild(QVBoxLayout, "warningLayout")
|
= self.findChild(QVBoxLayout, "warningLayout")
|
||||||
self._create_button \
|
self._create_button \
|
||||||
= self.findChild(QPushButton, "createCategoryButton")
|
= self.findChild(QPushButton, "createCategoryButton")
|
||||||
|
self._rename_button \
|
||||||
|
= self.findChild(QPushButton, "renameCategoryButton")
|
||||||
self._delete_button \
|
self._delete_button \
|
||||||
= self.findChild(QPushButton, "deleteCategoryButton")
|
= self.findChild(QPushButton, "deleteCategoryButton")
|
||||||
self._apply_button \
|
self._apply_button \
|
||||||
@ -59,6 +61,7 @@ class MainWindow(QMainWindow):
|
|||||||
# Set event handlers
|
# Set event handlers
|
||||||
|
|
||||||
self._create_button.clicked.connect(self._handle_create_click)
|
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._delete_button.clicked.connect(self._handle_delete_click)
|
||||||
self._clear_button.clicked.connect(self._handle_clear_click)
|
self._clear_button.clicked.connect(self._handle_clear_click)
|
||||||
self._apply_button.clicked.connect(self._handle_apply_click)
|
self._apply_button.clicked.connect(self._handle_apply_click)
|
||||||
@ -176,6 +179,25 @@ class MainWindow(QMainWindow):
|
|||||||
callback=self._dataframe_update_callback)
|
callback=self._dataframe_update_callback)
|
||||||
context.exec(self.sender().mapToGlobal(pos))
|
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):
|
def _handle_create_click(self):
|
||||||
new_name, flag = QInputDialog.getText(self, "Create category",
|
new_name, flag = QInputDialog.getText(self, "Create category",
|
||||||
"New category:",
|
"New category:",
|
||||||
@ -193,7 +215,7 @@ class MainWindow(QMainWindow):
|
|||||||
f"Category '{new_name}' already exists.")
|
f"Category '{new_name}' already exists.")
|
||||||
|
|
||||||
def _handle_delete_click(self):
|
def _handle_delete_click(self):
|
||||||
selected_item = self._list_widget.selectedItems()[0]
|
selected_item = self._list_widget.currentItem()
|
||||||
|
|
||||||
button = QMessageBox.question(self, "Delete category",
|
button = QMessageBox.question(self, "Delete category",
|
||||||
f"Are you sure you want to delete"
|
f"Are you sure you want to delete"
|
||||||
@ -245,9 +267,16 @@ class MainWindow(QMainWindow):
|
|||||||
else:
|
else:
|
||||||
self._apply_button.setEnabled(False)
|
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):
|
def _handle_list_selection_changed(self):
|
||||||
self._check_enable_delete_button()
|
self._check_enable_delete_button()
|
||||||
self._check_enable_apply_button()
|
self._check_enable_apply_button()
|
||||||
|
self._check_enable_rename_button()
|
||||||
|
|
||||||
def _handle_table_selection_changed(self):
|
def _handle_table_selection_changed(self):
|
||||||
self._check_enable_clear_button()
|
self._check_enable_clear_button()
|
||||||
|
|||||||
@ -60,6 +60,36 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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>
|
<item>
|
||||||
<widget class="QPushButton" name="deleteCategoryButton">
|
<widget class="QPushButton" name="deleteCategoryButton">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
|
|||||||
@ -83,6 +83,14 @@ class PandasModel(QtCore.QAbstractTableModel):
|
|||||||
row_indices = self._data.loc[self._data['category'] == category].index
|
row_indices = self._data.loc[self._data['category'] == category].index
|
||||||
self.assign_category(' ', row_indices)
|
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]:
|
def get_categories(self) -> typing.List[str]:
|
||||||
if 'category' not in self._data.columns:
|
if 'category' not in self._data.columns:
|
||||||
self.create_column('category')
|
self.create_column('category')
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user