diff --git a/frontend.py b/frontend.py index c59c72d..b8293ae 100644 --- a/frontend.py +++ b/frontend.py @@ -198,6 +198,17 @@ class AnimeTracker(QMainWindow): self.set_current_tab_by_identifier(last_tab) self.tab_widget.setFocus() + def get_current_scroll_pos(self): + widget = self.tab_widget.currentWidget() + if widget: + return widget.verticalScrollBar().value() + return 0 + + def set_current_scroll_pos(self, pos): + widget = self.tab_widget.currentWidget() + if widget: + widget.verticalScrollBar().setValue(pos) + def filter_tables(self, text): self.search_text = text.strip().lower() for table in self.tables: @@ -643,9 +654,10 @@ class AnimeTracker(QMainWindow): parts = tab_text.split(' (') default_year = int(parts[0]) default_season = '' + current_id = self.get_current_tab_identifier() + current_scroll = self.get_current_scroll_pos() dialog = AnimeDialog(self, None, default_year, self.last_used_season) if dialog.exec_() == QDialog.Accepted: - current_id = self.get_current_tab_identifier() data = dialog.get_data() if data['season']: self.last_used_season = data['season'] @@ -654,36 +666,50 @@ class AnimeTracker(QMainWindow): QMessageBox.warning(self, "Error", "Anime name cannot be empty.") return self.backend.add_anime(data) + new_year = data['year'] + new_id = "pre" if new_year < 2010 else new_year self.load_tabs() - self.set_current_tab_by_identifier(current_id) + self.set_current_tab_by_identifier(new_id) + if self.get_current_tab_identifier() == current_id: + self.set_current_scroll_pos(current_scroll) def edit_anime(self, anime_id): entry = self.backend.get_anime_by_id(anime_id) if entry: current_id = self.get_current_tab_identifier() + current_scroll = self.get_current_scroll_pos() dialog = AnimeDialog(self, entry) if dialog.exec_() == QDialog.Accepted: - current_id = self.get_current_tab_identifier() data = dialog.get_data() if not data['name']: QMessageBox.warning(self, "Error", "Anime name cannot be empty.") return self.backend.edit_anime(anime_id, data) + new_year = data['year'] + new_id = "pre" if new_year < 2010 else new_year self.load_tabs() - self.set_current_tab_by_identifier(current_id) + self.set_current_tab_by_identifier(new_id) + if self.get_current_tab_identifier() == current_id: + self.set_current_scroll_pos(current_scroll) def delete_anime(self, anime_id): if QMessageBox.question(self, "Confirm Delete", "Are you sure you want to delete this entry?") == QMessageBox.Yes: current_id = self.get_current_tab_identifier() + current_scroll = self.get_current_scroll_pos() self.backend.delete_anime(anime_id) self.load_tabs() self.set_current_tab_by_identifier(current_id) + if self.get_current_tab_identifier() == current_id: + self.set_current_scroll_pos(current_scroll) def change_status(self, anime_id, new_status): current_id = self.get_current_tab_identifier() + current_scroll = self.get_current_scroll_pos() self.backend.change_status(anime_id, new_status) self.load_tabs() self.set_current_tab_by_identifier(current_id) + if self.get_current_tab_identifier() == current_id: + self.set_current_scroll_pos(current_scroll) def add_new_year(self): current_year = datetime.now().year @@ -704,8 +730,13 @@ class AnimeTracker(QMainWindow): QMessageBox.warning(self, "Error", f"Year {year} does not exist.") return if QMessageBox.question(self, "Confirm Delete", f"Are you sure you want to delete all entries for {year}?") == QMessageBox.Yes: + current_id = self.get_current_tab_identifier() + current_scroll = self.get_current_scroll_pos() self.backend.delete_year(year) self.load_tabs() + self.set_current_tab_by_identifier(current_id) + if self.get_current_tab_identifier() == current_id: + self.set_current_scroll_pos(current_scroll) def random_pick(self): if self.tab_widget.currentIndex() == -1: @@ -770,9 +801,12 @@ class AnimeTracker(QMainWindow): file_name, _ = QFileDialog.getOpenFileName(self, "Import CSV", "", "CSV Files (*.csv)") if file_name: current_id = self.get_current_tab_identifier() + current_scroll = self.get_current_scroll_pos() self.backend.import_from_csv(file_name) self.load_tabs() self.set_current_tab_by_identifier(current_id) + if self.get_current_tab_identifier() == current_id: + self.set_current_scroll_pos(current_scroll) def export_csv(self): file_name, _ = QFileDialog.getSaveFileName(self, "Export CSV", "anime_backlog.csv", "CSV Files (*.csv)") @@ -818,4 +852,4 @@ if __name__ == '__main__': app = QApplication(sys.argv) window = AnimeTracker() window.show() - sys.exit(app.exec_()) \ No newline at end of file + sys.exit(app.exec_())