Falkon Develop
Cross-platform Qt-based web browser
gm_addscriptdialog.cpp
Go to the documentation of this file.
1/* ============================================================
2* GreaseMonkey plugin for Falkon
3* Copyright (C) 2012-2017 David Rosca <nowrep@gmail.com>
4*
5* This program is free software: you can redistribute it and/or modify
6* it under the terms of the GNU General Public License as published by
7* the Free Software Foundation, either version 3 of the License, or
8* (at your option) any later version.
9*
10* This program is distributed in the hope that it will be useful,
11* but WITHOUT ANY WARRANTY; without even the implied warranty of
12* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13* GNU General Public License for more details.
14*
15* You should have received a copy of the GNU General Public License
16* along with this program. If not, see <http://www.gnu.org/licenses/>.
17* ============================================================ */
18#include "gm_addscriptdialog.h"
19#include "ui_gm_addscriptdialog.h"
20#include "gm_script.h"
21#include "gm_manager.h"
22#include "gm_notification.h"
23
24#include "mainapplication.h"
25#include "browserwindow.h"
26#include "tabbedwebview.h"
27#include "tabwidget.h"
28#include "datapaths.h"
29#include "qztools.h"
30
31#include <QFile>
32#include <QDir>
33
35 : QDialog(parent)
36 , ui(new Ui::GM_AddScriptDialog)
37 , m_manager(manager)
38 , m_script(script)
39{
40 ui->setupUi(this);
41 ui->iconLabel->setPixmap(QIcon(QSL(":gm/data/icon.svg")).pixmap(32));
42
43 QString runsAt;
44 QString dontRunsAt;
45
46 const QStringList include = script->include();
47 const QStringList exclude = script->exclude();
48
49 if (!include.isEmpty()) {
50 runsAt = tr("<p>runs at<br/><i>%1</i></p>").arg(include.join(QSL("<br/>")));
51 }
52
53 if (!exclude.isEmpty()) {
54 dontRunsAt = tr("<p>does not run at<br/><i>%1</i></p>").arg(exclude.join(QSL("<br/>")));
55 }
56
57 QString scriptInfo = QSL("<b>%1</b> %2<br/>%3 %4 %5").arg(script->name(), script->version(), script->description(), runsAt, dontRunsAt);
58 ui->textBrowser->setText(scriptInfo);
59
60 connect(ui->showSource, &QAbstractButton::clicked, this, &GM_AddScriptDialog::showSource);
61 connect(this, SIGNAL(accepted()), this, SLOT(accepted()));
62}
63
64void GM_AddScriptDialog::showSource()
65{
66 BrowserWindow* qz = mApp->getWindow();
67 if (!qz) {
68 return;
69 }
70
71 const QString tmpFileName = QzTools::ensureUniqueFilename(DataPaths::path(DataPaths::Temp) + QSL("/tmp-userscript.js"));
72
73 if (QFile::copy(m_script->fileName(), tmpFileName)) {
74 int index = qz->tabWidget()->addView(QUrl::fromLocalFile(tmpFileName), Qz::NT_SelectedTabAtTheEnd);
75 TabbedWebView* view = qz->weView(index);
76 view->addNotification(new GM_Notification(m_manager, tmpFileName, m_script->fileName()));
77 }
78
79 reject();
80}
81
82void GM_AddScriptDialog::accepted()
83{
84 QString message = tr("Cannot install script");
85
86 if (m_manager->addScript(m_script)) {
87 message = tr("'%1' installed successfully").arg(m_script->name());
88 }
89
90 m_manager->showNotification(message);
91}
92
94{
95 delete ui;
96}
TabWidget * tabWidget() const
TabbedWebView * weView() const
static QString path(Path type)
Definition: datapaths.cpp:66
GM_AddScriptDialog(GM_Manager *manager, GM_Script *script, QWidget *parent=Q_NULLPTR)
void showNotification(const QString &message, const QString &title=QString())
Definition: gm_manager.cpp:230
bool addScript(GM_Script *script)
Definition: gm_manager.cpp:190
QStringList exclude() const
Definition: gm_script.cpp:127
QStringList include() const
Definition: gm_script.cpp:122
QString name() const
Definition: gm_script.cpp:57
QString fileName() const
Definition: gm_script.cpp:137
QString version() const
Definition: gm_script.cpp:77
QString description() const
Definition: gm_script.cpp:72
static QString ensureUniqueFilename(const QString &name, const QString &appendFormat=QSL("(%1)"))
Definition: qztools.cpp:257
int addView(const LoadRequest &req, const Qz::NewTabPositionFlags &openFlags, bool selectLine=false, bool pinned=false)
Definition: tabwidget.cpp:314
void addNotification(QWidget *notif)
Definition: webview.cpp:286
#define mApp
@ NT_SelectedTabAtTheEnd
Definition: qzcommon.h:104
#define QSL(x)
Definition: qzcommon.h:40