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

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #include "snippet_list_widget.hpp"
0008 #include "ui_snippet_list_widget.h"
0009 
0010 #include <QEvent>
0011 #include <QDesktopServices>
0012 #include <QUrl>
0013 
0014 #include "item_models/python_snippet_model.hpp"
0015 
0016 using namespace glaxnimate::gui;
0017 
0018 class SnippetListWidget::Private
0019 {
0020 public:
0021     Ui::SnippetListWidget ui;
0022     item_models::PythonSnippetModel model;
0023 };
0024 
0025 SnippetListWidget::SnippetListWidget(QWidget* parent)
0026     : QWidget(parent), d(std::make_unique<Private>())
0027 {
0028     d->ui.setupUi(this);
0029     d->model.reload();
0030     d->ui.list_view->setModel(&d->model);
0031 }
0032 
0033 SnippetListWidget::~SnippetListWidget() = default;
0034 
0035 void SnippetListWidget::changeEvent ( QEvent* e )
0036 {
0037     QWidget::changeEvent(e);
0038 
0039     if ( e->type() == QEvent::LanguageChange)
0040     {
0041         d->ui.retranslateUi(this);
0042     }
0043 }
0044 
0045 void SnippetListWidget::snippet_new()
0046 {
0047     d->ui.list_view->setCurrentIndex(d->model.append());
0048 }
0049 
0050 void SnippetListWidget::snippet_delete()
0051 {
0052     d->model.removeRows(d->ui.list_view->currentIndex().row(), 1, {});
0053 }
0054 
0055 void SnippetListWidget::snippet_edit()
0056 {
0057     auto snippet = d->model.snippet(d->ui.list_view->currentIndex());
0058     if ( snippet.name().isEmpty() )
0059     {
0060         Q_EMIT warning(i18n("Snippets need a name"), i18n("Snippets"));
0061         return;
0062     }
0063 
0064     if ( !snippet.ensure_file_exists() )
0065     {
0066         Q_EMIT warning(i18n("Could not create snippet: `%1`", snippet.filename()), i18n("Snippets"));
0067     }
0068 
0069     QDesktopServices::openUrl(QUrl::fromLocalFile(snippet.filename()));
0070 }
0071 
0072 void SnippetListWidget::snippet_run()
0073 {
0074     auto snippet = d->model.snippet(d->ui.list_view->currentIndex());
0075     if ( !snippet.name().isEmpty() )
0076     {
0077         QString src = snippet.get_source();
0078         if ( !src.isEmpty() )
0079             Q_EMIT run_snippet(src);
0080     }
0081 }
0082 
0083 void SnippetListWidget::snippet_reload()
0084 {
0085     d->model.reload();
0086 }