19#include "ui_gm_settings.h"
21#include "../gm_manager.h"
22#include "../gm_script.h"
27#include <QDesktopServices>
29#include <QInputDialog>
36 setAttribute(Qt::WA_DeleteOnClose);
38 ui->iconLabel->setPixmap(QIcon(
QSL(
":gm/data/icon.svg")).pixmap(32));
40 connect(ui->listWidget, &QListWidget::itemDoubleClicked,
41 this, &GM_Settings::showItemInfo);
43 this, &GM_Settings::updateItem);
45 this, &GM_Settings::removeItem);
46 connect(ui->openDirectory, &QAbstractButton::clicked,
47 this, &GM_Settings::openScriptsDirectory);
48 connect(ui->newScript, &QAbstractButton::clicked,
49 this, &GM_Settings::newScript);
51 this, &GM_Settings::openUserJs);
53 this, &GM_Settings::loadScripts);
58void GM_Settings::openUserJs()
60 mApp->addNewTab(QUrl(
QSL(
"http://openuserjs.org")));
64void GM_Settings::showItemInfo(QListWidgetItem* item)
75void GM_Settings::updateItem(QListWidgetItem* item)
84void GM_Settings::removeItem(QListWidgetItem* item)
91 QMessageBox::StandardButton button = QMessageBox::question(
this, tr(
"Remove script"),
92 tr(
"Are you sure you want to remove '%1'?").arg(script->
name()),
93 QMessageBox::Yes | QMessageBox::No);
95 if (button == QMessageBox::Yes) {
100void GM_Settings::itemChanged(QListWidgetItem* item)
107 if (item->checkState() == Qt::Checked) {
115void GM_Settings::openScriptsDirectory()
117 QDesktopServices::openUrl(QUrl::fromLocalFile(m_manager->
scriptsDirectory()));
120void GM_Settings::newScript()
122 const QString name = QInputDialog::getText(
this, tr(
"Add script"), tr(
"Choose name for script:"));
126 const QString script =
QL1S(
"// ==UserScript== \n"
128 "// @namespace kde.org \n"
129 "// @description Script description \n"
131 "// @version 1.0.0 \n"
132 "// ==/UserScript==\n\n");
137 file.open(QFile::WriteOnly);
138 file.write(script.arg(name).toUtf8());
141 auto *gmScript =
new GM_Script(m_manager, file.fileName());
148void GM_Settings::loadScripts()
150 disconnect(ui->listWidget, &QListWidget::itemChanged,
151 this, &GM_Settings::itemChanged);
153 ui->listWidget->clear();
155 const auto allScripts = m_manager->
allScripts();
157 auto* item =
new QListWidgetItem(ui->listWidget);
158 item->setText(script->name());
159 item->setIcon(script->icon());
160 item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
161 item->setCheckState(script->isEnabled() ? Qt::Checked : Qt::Unchecked);
162 item->setData(Qt::UserRole + 10, QVariant::fromValue((
void*)script));
165 ui->listWidget->viewport()->update();
168 ui->listWidget->addItem(item);
171 ui->listWidget->sortItems();
176 for (
int i = 0;
i < ui->listWidget->count(); ++
i) {
177 QListWidgetItem* topItem = ui->listWidget->item(
i);
178 QListWidgetItem* bottomItem = ui->listWidget->item(
i + 1);
179 if (!topItem || !bottomItem) {
183 if (topItem->checkState() == Qt::Unchecked && bottomItem->checkState() == Qt::Checked) {
184 QListWidgetItem* item = ui->listWidget->takeItem(
i + 1);
185 ui->listWidget->insertItem(
i, item);
192 connect(ui->listWidget, &QListWidget::itemChanged,
this, &GM_Settings::itemChanged);
195GM_Script* GM_Settings::getScript(QListWidgetItem* item)
201 GM_Script* script =
static_cast<GM_Script*
>(item->data(Qt::UserRole + 10).value<
void*>());
bool removeScript(GM_Script *script, bool removeFile=true)
void enableScript(GM_Script *script)
QString scriptsDirectory() const
bool addScript(GM_Script *script)
QList< GM_Script * > allScripts() const
void disableScript(GM_Script *script)
void updatingChanged(bool updating)
GM_Settings(GM_Manager *manager, QWidget *parent=nullptr)