File indexing completed on 2025-02-02 04:11:26

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 #include "stalefiles_dialog.hpp"
0007 #include "ui_stalefiles_dialog.h"
0008 #include <QEvent>
0009 #include <QFileInfo>
0010 
0011 using namespace glaxnimate::gui;
0012 
0013 class StalefilesDialog::Private
0014 {
0015 public:
0016     Ui::StalefilesDialog ui;
0017     QList<KAutoSaveFile*> stale;
0018     KAutoSaveFile* current = nullptr;
0019     int index = -1;
0020 };
0021 
0022 StalefilesDialog::StalefilesDialog(const QList<KAutoSaveFile*>& stale, QWidget* parent)
0023     : QDialog(parent), d(std::make_unique<Private>())
0024 {
0025     d->ui.setupUi(this);
0026     d->stale = stale;
0027     for ( const auto& file : stale )
0028     {
0029         QFileInfo finfo(file->managedFile().toString());
0030         auto item = new QListWidgetItem(finfo.fileName(), d->ui.list_widget);
0031         item->setToolTip(finfo.filePath());
0032     }
0033 }
0034 
0035 StalefilesDialog::~StalefilesDialog() = default;
0036 
0037 void StalefilesDialog::changeEvent ( QEvent* e )
0038 {
0039     QWidget::changeEvent(e);
0040 
0041     if ( e->type() == QEvent::LanguageChange)
0042     {
0043         d->ui.retranslateUi(this);
0044     }
0045 }
0046 
0047 void glaxnimate::gui::StalefilesDialog::current_changed(int index)
0048 {
0049     d->index = index;
0050     if ( index >= 0 && index < d->stale.size() )
0051         d->current = d->stale[index];
0052     else
0053         d->current = nullptr;
0054 
0055     d->ui.button_open->setEnabled(d->current);
0056     d->ui.button_delete->setEnabled(d->current);
0057 }
0058 
0059 void glaxnimate::gui::StalefilesDialog::delete_all()
0060 {
0061     for ( auto stale : d->stale )
0062     {
0063         stale->remove();
0064         delete stale;
0065     }
0066     d->index = -1;
0067     d->current = nullptr;
0068     d->stale.clear();
0069     reject();
0070 }
0071 
0072 void glaxnimate::gui::StalefilesDialog::delete_selected()
0073 {
0074     if ( d->current )
0075     {
0076         d->current->remove();
0077         d->stale.removeAt(d->index);
0078         delete d->current;
0079         int row = d->index;
0080         d->index = -1;
0081         d->current = nullptr;
0082         d->ui.list_widget->takeItem(row);
0083         if ( d->stale.size() == 0 )
0084             reject();
0085     }
0086 }
0087 
0088 KAutoSaveFile * glaxnimate::gui::StalefilesDialog::selected() const
0089 {
0090     return d->current;
0091 }
0092 
0093 
0094 void glaxnimate::gui::StalefilesDialog::cleanup(KAutoSaveFile* keep)
0095 {
0096     for ( auto stale : d->stale )
0097     {
0098         if ( stale != keep )
0099             delete stale;
0100     }
0101 }