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 }