diff options
-rw-r--r-- | header-gpl3.txt | 20 | ||||
-rwxr-xr-x | scripts/licensecheck.py | 59 | ||||
-rw-r--r-- | src/browser.cpp | 114 | ||||
-rw-r--r-- | src/browser.h | 72 | ||||
-rw-r--r-- | src/forms/downloaddialog.cpp | 20 | ||||
-rw-r--r-- | src/forms/downloaddialog.h | 20 | ||||
-rw-r--r-- | src/forms/profiledialog.cpp | 20 | ||||
-rw-r--r-- | src/forms/profiledialog.h | 20 | ||||
-rw-r--r-- | src/main.cpp | 96 | ||||
-rw-r--r-- | src/mainwindow.cpp | 332 | ||||
-rw-r--r-- | src/mainwindow.h | 136 | ||||
-rw-r--r-- | src/settings.cpp | 20 | ||||
-rw-r--r-- | src/settings.h | 20 | ||||
-rw-r--r-- | src/webengine/downloaditemform.cpp | 20 | ||||
-rw-r--r-- | src/webengine/downloaditemform.h | 20 | ||||
-rw-r--r-- | src/webengine/webengineprofile.cpp | 20 | ||||
-rw-r--r-- | src/webengine/webengineprofile.h | 20 | ||||
-rw-r--r-- | src/widgets/webviewtabbar.cpp | 20 | ||||
-rw-r--r-- | src/widgets/webviewtabbar.h | 20 |
19 files changed, 744 insertions, 325 deletions
diff --git a/header-gpl3.txt b/header-gpl3.txt new file mode 100644 index 0000000..939e526 --- /dev/null +++ b/header-gpl3.txt @@ -0,0 +1,20 @@ +/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) $CURRENTYEAR$ $AUTHOR$ + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + diff --git a/scripts/licensecheck.py b/scripts/licensecheck.py new file mode 100755 index 0000000..be6de9a --- /dev/null +++ b/scripts/licensecheck.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 + +# TODO: username argument +# TODO: updating licenses + +import argparse +import datetime + +def getLicense(licenseFile): + with open(licenseFile) as rawlicense: + licensetext = rawlicense.read() + + # fill in name and year + licensetext = licensetext.replace('$AUTHOR$', 'Xian Nox') + licensetext = licensetext.replace('$CURRENTYEAR$', str(datetime.datetime.now().year)) + + return licensetext + +def hasLicense(sourceFile): + with open(sourceFile) as source: + if source.readline().startswith('/** LICENSE **'): + return True + else: + return False + +def fix(sourceFile, licenseText): + with open(sourceFile, 'r') as source: + origData = source.read() + with open(sourceFile, 'w') as source: + source.write(licenseText + origData) + +def main(license, src, verbose=False): + if verbose is True: + print("Using license header {0}".format(license)) + print("Going through {0}".format(src)) + + # read license file + licensetext = getLicense(license) + #print(licensetext) + + # open source file and check for license + for filename in src: + if hasLicense(filename): + print("{0} has license".format(filename)) + else: + fix(filename, licensetext) + print("{0} license added".format(filename)) + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Check source files for license') + parser.add_argument('-l', '--license', required=True) + parser.add_argument('-v', '--verbose', action='store_true') + parser.add_argument('src', nargs='*') + args = parser.parse_args() + + main(args.license, args.src, args.verbose) +else: + print('Do not use this as an import!') + sys.exit(-1) diff --git a/src/browser.cpp b/src/browser.cpp index e6be694..654c020 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -1,47 +1,67 @@ -#include "browser.h"
-#include "mainwindow.h"
-#include "settings.h"
-#include <QtWebEngine>
-
-Browser::Browser(QString configPath, QObject *parent) : QObject(parent)
-{
- if(configPath.isEmpty()) {
- // set default config path
- Settings::setFilepath(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini");
- } else {
- // set custom config path
- Settings::setFilepath(configPath);
- }
-
- // TODO Restore previous session
-
- QtWebEngine::initialize();
-}
-
-Browser::~Browser()
-{
- // TODO Save session
-
- // cleanup
- qDeleteAll(m_windows);
- m_windows.clear();
-}
-
-void Browser::addWindow(MainWindow *window)
-{
- if(m_windows.contains(window)) {
- return;
- }
-
- m_windows.append(window);
- connect(window, &QObject::destroyed, [this, window]() {
- this->removeWindow(window);
- });
-
- window->show();
-}
-
-void Browser::removeWindow(MainWindow *window)
-{
- m_windows.removeOne(window);
-}
+/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + +#include "browser.h" +#include "mainwindow.h" +#include "settings.h" +#include <QtWebEngine> + +Browser::Browser(QString configPath, QObject *parent) : QObject(parent) +{ + if(configPath.isEmpty()) { + // set default config path + Settings::setFilepath(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.ini"); + } else { + // set custom config path + Settings::setFilepath(configPath); + } + + // TODO Restore previous session + + QtWebEngine::initialize(); +} + +Browser::~Browser() +{ + // TODO Save session + + // cleanup + qDeleteAll(m_windows); + m_windows.clear(); +} + +void Browser::addWindow(MainWindow *window) +{ + if(m_windows.contains(window)) { + return; + } + + m_windows.append(window); + connect(window, &QObject::destroyed, [this, window]() { + this->removeWindow(window); + }); + + window->show(); +} + +void Browser::removeWindow(MainWindow *window) +{ + m_windows.removeOne(window); +} diff --git a/src/browser.h b/src/browser.h index 38826f0..14ef771 100644 --- a/src/browser.h +++ b/src/browser.h @@ -1,26 +1,46 @@ -#ifndef BROWSER_H
-#define BROWSER_H
-
-#include <QObject>
-#include <QVector>
-
-class MainWindow;
-class Browser : public QObject
-{
- Q_OBJECT
-
-public:
- explicit Browser(QString configPath, QObject *parent = 0);
- ~Browser();
-
- void addWindow(MainWindow* window);
-
-public slots:
- void removeWindow(MainWindow* window);
-
-private:
- QVector<MainWindow*> m_windows;
-
-};
-
-#endif // BROWSER_H
+/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + +#ifndef BROWSER_H +#define BROWSER_H + +#include <QObject> +#include <QVector> + +class MainWindow; +class Browser : public QObject +{ + Q_OBJECT + +public: + explicit Browser(QString configPath, QObject *parent = 0); + ~Browser(); + + void addWindow(MainWindow* window); + +public slots: + void removeWindow(MainWindow* window); + +private: + QVector<MainWindow*> m_windows; + +}; + +#endif // BROWSER_H diff --git a/src/forms/downloaddialog.cpp b/src/forms/downloaddialog.cpp index 4943fcc..bb92a0f 100644 --- a/src/forms/downloaddialog.cpp +++ b/src/forms/downloaddialog.cpp @@ -1,3 +1,23 @@ +/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + #include "downloaddialog.h" #include "ui_downloaddialog.h" diff --git a/src/forms/downloaddialog.h b/src/forms/downloaddialog.h index bec0037..cadc2b5 100644 --- a/src/forms/downloaddialog.h +++ b/src/forms/downloaddialog.h @@ -1,3 +1,23 @@ +/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + #ifndef DOWNLOADDIALOG_H #define DOWNLOADDIALOG_H diff --git a/src/forms/profiledialog.cpp b/src/forms/profiledialog.cpp index 286d85c..3d93dd0 100644 --- a/src/forms/profiledialog.cpp +++ b/src/forms/profiledialog.cpp @@ -1,3 +1,23 @@ +/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + #include "profiledialog.h" #include "ui_profiledialog.h" diff --git a/src/forms/profiledialog.h b/src/forms/profiledialog.h index c78f892..59c2d5a 100644 --- a/src/forms/profiledialog.h +++ b/src/forms/profiledialog.h @@ -1,3 +1,23 @@ +/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + #ifndef PROFILEDIALOG_H #define PROFILEDIALOG_H diff --git a/src/main.cpp b/src/main.cpp index ef6a5e1..698a4a4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,38 +1,58 @@ -#include "browser.h"
-#include "mainwindow.h"
-#include <QApplication>
-#include <QCommandLineParser>
-
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
- app.setApplicationName("smolbote");
- app.setApplicationVersion("0.0.0");
-
- QCommandLineParser parser;
- parser.setApplicationDescription("Test browser using QtWebEngine");
- parser.addHelpOption();
- parser.addVersionOption();
-
- parser.addPositionalArgument("URL", "URL to open");
-
- QCommandLineOption configOption(QStringList() << "c" << "config", "Set configuration file.", "PATH");
- parser.addOption(configOption);
-
- parser.process(app);
-
- Browser instance(parser.value(configOption));
-
- if(parser.positionalArguments().length() > 0) {
- QUrl url = QUrl::fromUserInput(parser.positionalArguments().at(0));
- if(url.isValid()) {
- instance.addWindow(new MainWindow(&instance, url));
- } else {
- instance.addWindow(new MainWindow(&instance));
- }
- } else {
- instance.addWindow(new MainWindow(&instance));
- }
-
- return app.exec();
-}
+/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + +#include "browser.h" +#include "mainwindow.h" +#include <QApplication> +#include <QCommandLineParser> + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + app.setApplicationName("smolbote"); + app.setApplicationVersion("0.0.0"); + + QCommandLineParser parser; + parser.setApplicationDescription("Test browser using QtWebEngine"); + parser.addHelpOption(); + parser.addVersionOption(); + + parser.addPositionalArgument("URL", "URL to open"); + + QCommandLineOption configOption(QStringList() << "c" << "config", "Set configuration file.", "PATH"); + parser.addOption(configOption); + + parser.process(app); + + Browser instance(parser.value(configOption)); + + if(parser.positionalArguments().length() > 0) { + QUrl url = QUrl::fromUserInput(parser.positionalArguments().at(0)); + if(url.isValid()) { + instance.addWindow(new MainWindow(&instance, url)); + } else { + instance.addWindow(new MainWindow(&instance)); + } + } else { + instance.addWindow(new MainWindow(&instance)); + } + + return app.exec(); +} diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 9e028e4..1a52ee2 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1,156 +1,176 @@ -#include "mainwindow.h"
-#include "ui_mainwindow.h"
-#include "settings.h"
-#include <QMenu>
-#include <QMenuBar>
-#include <QCloseEvent>
-#include <QMessageBox>
-#include "browser.h"
-#include "forms/profiledialog.h"
-#include <QApplication>
-#include <QInputDialog>
-#include <QWebEngineDownloadItem>
-
-MainWindow::MainWindow(Browser *instance, QUrl defaultUrl, QWidget *parent) :
- QMainWindow(parent),
- downloadManager(new DownloadDialog(this)),
- ui(new Ui::MainWindow),
- navigationToolBar(new QToolBar(this)),
- tabToolBar(new QToolBar(this)),
- tabBar(new WebViewTabBar(this)),
- urlLineEdit(new QLineEdit(navigationToolBar))
-{
- browserInstance = instance;
- Settings settings;
-
- // Load profile and connect its signals
- loadProfile(settings.value("defaults/profile").toString());
-
- ui->setupUi(this);
- resize(settings.value("window/width", 800).toInt(), settings.value("window/height", 600).toInt());
-
- // Browser menu
- browserMenu = new QMenu(qApp->applicationName(), ui->menuBar);
- ui->menuBar->addMenu(browserMenu);
- browserMenu->addAction(tr("New Window"), this, SLOT(handleNewWindow()), QKeySequence(tr("Ctrl+N")));
- browserMenu->addAction(tr("New Tab"), this, SLOT(createNewTab()), QKeySequence(tr("Ctrl+T")));
- browserMenu->addSeparator();
- browserMenu->addAction(tr("About Qt"), qApp, SLOT(aboutQt()));
- browserMenu->addAction(tr("Quit"), qApp, SLOT(quit()), QKeySequence(tr("Ctrl+Q")));
-
- // Profile menu
- QMenuBar *rightBar = new QMenuBar(ui->menuBar);
- profileMenu = new QMenu(tr("Profile: ") + profileName);
- rightBar->addMenu(profileMenu);
- ui->menuBar->setCornerWidget(rightBar);
- profileMenu->addAction(tr("Edit profile"), this, SLOT(createProfileDialog()));
- profileMenu->addAction(tr("Load profile"), this, SLOT(handleLoadProfile()));
- profileMenu->addAction(tr("Downloads"), downloadManager, SLOT(show()));
- //profileMenu->addAction(tr("Settings"));
- //profileMenu->addAction(tr("Cookies"));
-
- this->addToolBar(Qt::TopToolBarArea, navigationToolBar);
- this->addToolBarBreak(Qt::TopToolBarArea);
- this->addToolBar(Qt::TopToolBarArea, tabToolBar);
-
- navigationToolBar->addWidget(urlLineEdit);
- connect(urlLineEdit, SIGNAL(returnPressed()), this, SLOT(handleUrlChanged()));
-
- tabToolBar->addWidget(tabBar);
- connect(tabBar, SIGNAL(currentTabChanged(QWebEngineView*)), this, SLOT(handleTabChanged(QWebEngineView*)));
-
- if(!defaultUrl.isEmpty())
- createNewTab(defaultUrl);
- else
- createNewTab(settings.value("defaults/url", QUrl("http://duckduckgo.com")).toUrl());
-}
-
-MainWindow::~MainWindow()
-{
- delete ui;
-}
-
-void MainWindow::createNewTab(const QUrl &url)
-{
- tabBar->addTab(profile, url);
-}
-
-void MainWindow::closeEvent(QCloseEvent *event)
-{
- if(tabBar->count() > 1) {
- int ret = QMessageBox::warning(this, tr("Close window?"), tr("Close multiple tabs?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
- if(ret == QMessageBox::No) {
- event->ignore();
- return;
- }
- }
- QMainWindow::closeEvent(event);
-}
-
-void MainWindow::loadProfile(const QString &name)
-{
- if(profile) {
- profile->deleteLater();
- }
-
- if(name.isEmpty()) {
- qDebug("Creating off-the-record profile");
- profileName = tr("Off the record");
- profile = new WebEngineProfile(this);
- } else {
- profileName = name;
- qDebug("Using profile: %s", qUtf8Printable(profileName));
- profile = new WebEngineProfile(profileName, this);
- }
-
- connect(profile, SIGNAL(downloadRequested(QWebEngineDownloadItem*)), downloadManager, SLOT(addDownload(QWebEngineDownloadItem*)));
-}
-
-void MainWindow::handleLoadProfile()
-{
- bool ok;
- QString name = QInputDialog::getText(this, tr("Load Profile"), tr("Enter Profile name"), QLineEdit::Normal, QString(""), &ok);
- if(ok) {
- loadProfile(name);
- profileMenu->setTitle(tr("Profile: ") + profileName);
- tabBar->setProfile(profile);
- }
-}
-
-void MainWindow::handleNewWindow(const QUrl &url)
-{
- browserInstance->addWindow(new MainWindow(browserInstance, url));
-}
-
-void MainWindow::handleTabChanged(QWebEngineView *view)
-{
- centralWidget()->setParent(0);
- disconnect(centralWidget());
- setCentralWidget(view);
- connect(view, SIGNAL(urlChanged(QUrl)), this, SLOT(handleUrlUpdated(QUrl)));
- connect(view, SIGNAL(titleChanged(QString)), this, SLOT(handleTitleUpdated(QString)));
- this->handleUrlUpdated(view->url());
- this->handleTitleUpdated(view->title());
-}
-
-void MainWindow::handleUrlChanged()
-{
- tabBar->currentView()->load(QUrl::fromUserInput(urlLineEdit->text()));
-}
-
-void MainWindow::handleUrlUpdated(const QUrl &url)
-{
- urlLineEdit->setText(url.toString());
-}
-
-void MainWindow::handleTitleUpdated(const QString &title)
-{
- Settings settings;
- setWindowTitle(title + settings.value("window/title").toString());
-}
-
-void MainWindow::createProfileDialog()
-{
- ProfileDialog *dialog = new ProfileDialog(profile, this);
- dialog->exec();
-}
+/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include "settings.h" +#include <QMenu> +#include <QMenuBar> +#include <QCloseEvent> +#include <QMessageBox> +#include "browser.h" +#include "forms/profiledialog.h" +#include <QApplication> +#include <QInputDialog> +#include <QWebEngineDownloadItem> + +MainWindow::MainWindow(Browser *instance, QUrl defaultUrl, QWidget *parent) : + QMainWindow(parent), + downloadManager(new DownloadDialog(this)), + ui(new Ui::MainWindow), + navigationToolBar(new QToolBar(this)), + tabToolBar(new QToolBar(this)), + tabBar(new WebViewTabBar(this)), + urlLineEdit(new QLineEdit(navigationToolBar)) +{ + browserInstance = instance; + Settings settings; + + // Load profile and connect its signals + loadProfile(settings.value("defaults/profile").toString()); + + ui->setupUi(this); + resize(settings.value("window/width", 800).toInt(), settings.value("window/height", 600).toInt()); + + // Browser menu + browserMenu = new QMenu(qApp->applicationName(), ui->menuBar); + ui->menuBar->addMenu(browserMenu); + browserMenu->addAction(tr("New Window"), this, SLOT(handleNewWindow()), QKeySequence(tr("Ctrl+N"))); + browserMenu->addAction(tr("New Tab"), this, SLOT(createNewTab()), QKeySequence(tr("Ctrl+T"))); + browserMenu->addSeparator(); + browserMenu->addAction(tr("About Qt"), qApp, SLOT(aboutQt())); + browserMenu->addAction(tr("Quit"), qApp, SLOT(quit()), QKeySequence(tr("Ctrl+Q"))); + + // Profile menu + QMenuBar *rightBar = new QMenuBar(ui->menuBar); + profileMenu = new QMenu(tr("Profile: ") + profileName); + rightBar->addMenu(profileMenu); + ui->menuBar->setCornerWidget(rightBar); + profileMenu->addAction(tr("Edit profile"), this, SLOT(createProfileDialog())); + profileMenu->addAction(tr("Load profile"), this, SLOT(handleLoadProfile())); + profileMenu->addAction(tr("Downloads"), downloadManager, SLOT(show())); + //profileMenu->addAction(tr("Settings")); + //profileMenu->addAction(tr("Cookies")); + + this->addToolBar(Qt::TopToolBarArea, navigationToolBar); + this->addToolBarBreak(Qt::TopToolBarArea); + this->addToolBar(Qt::TopToolBarArea, tabToolBar); + + navigationToolBar->addWidget(urlLineEdit); + connect(urlLineEdit, SIGNAL(returnPressed()), this, SLOT(handleUrlChanged())); + + tabToolBar->addWidget(tabBar); + connect(tabBar, SIGNAL(currentTabChanged(QWebEngineView*)), this, SLOT(handleTabChanged(QWebEngineView*))); + + if(!defaultUrl.isEmpty()) + createNewTab(defaultUrl); + else + createNewTab(settings.value("defaults/url", QUrl("http://duckduckgo.com")).toUrl()); +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +void MainWindow::createNewTab(const QUrl &url) +{ + tabBar->addTab(profile, url); +} + +void MainWindow::closeEvent(QCloseEvent *event) +{ + if(tabBar->count() > 1) { + int ret = QMessageBox::warning(this, tr("Close window?"), tr("Close multiple tabs?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); + if(ret == QMessageBox::No) { + event->ignore(); + return; + } + } + QMainWindow::closeEvent(event); +} + +void MainWindow::loadProfile(const QString &name) +{ + if(profile) { + profile->deleteLater(); + } + + if(name.isEmpty()) { + qDebug("Creating off-the-record profile"); + profileName = tr("Off the record"); + profile = new WebEngineProfile(this); + } else { + profileName = name; + qDebug("Using profile: %s", qUtf8Printable(profileName)); + profile = new WebEngineProfile(profileName, this); + } + + connect(profile, SIGNAL(downloadRequested(QWebEngineDownloadItem*)), downloadManager, SLOT(addDownload(QWebEngineDownloadItem*))); +} + +void MainWindow::handleLoadProfile() +{ + bool ok; + QString name = QInputDialog::getText(this, tr("Load Profile"), tr("Enter Profile name"), QLineEdit::Normal, QString(""), &ok); + if(ok) { + loadProfile(name); + profileMenu->setTitle(tr("Profile: ") + profileName); + tabBar->setProfile(profile); + } +} + +void MainWindow::handleNewWindow(const QUrl &url) +{ + browserInstance->addWindow(new MainWindow(browserInstance, url)); +} + +void MainWindow::handleTabChanged(QWebEngineView *view) +{ + centralWidget()->setParent(0); + disconnect(centralWidget()); + setCentralWidget(view); + connect(view, SIGNAL(urlChanged(QUrl)), this, SLOT(handleUrlUpdated(QUrl))); + connect(view, SIGNAL(titleChanged(QString)), this, SLOT(handleTitleUpdated(QString))); + this->handleUrlUpdated(view->url()); + this->handleTitleUpdated(view->title()); +} + +void MainWindow::handleUrlChanged() +{ + tabBar->currentView()->load(QUrl::fromUserInput(urlLineEdit->text())); +} + +void MainWindow::handleUrlUpdated(const QUrl &url) +{ + urlLineEdit->setText(url.toString()); +} + +void MainWindow::handleTitleUpdated(const QString &title) +{ + Settings settings; + setWindowTitle(title + settings.value("window/title").toString()); +} + +void MainWindow::createProfileDialog() +{ + ProfileDialog *dialog = new ProfileDialog(profile, this); + dialog->exec(); +} diff --git a/src/mainwindow.h b/src/mainwindow.h index 2ad88b8..f084b95 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -1,58 +1,78 @@ -#ifndef MAINWINDOW_H
-#define MAINWINDOW_H
-
-#include <QMainWindow>
-#include <QToolBar>
-#include <QLineEdit>
-#include <QWebEngineView>
-#include "webengine/webengineprofile.h"
-#include <QUrl>
-#include "widgets/webviewtabbar.h"
-#include "forms/downloaddialog.h"
-
-namespace Ui {
-class MainWindow;
-}
-
-class Browser;
-class MainWindow : public QMainWindow
-{
- Q_OBJECT
-
-public:
- explicit MainWindow(Browser *instance, QUrl defaultUrl = QUrl(""), QWidget *parent = 0);
- ~MainWindow();
-
-public slots:
- void createNewTab(const QUrl &url = QUrl(""));
-
-protected:
- void closeEvent(QCloseEvent *event) override;
-
-private slots:
- void loadProfile(const QString &name);
- void handleLoadProfile();
-
- void handleNewWindow(const QUrl &url = QUrl(""));
- void handleTabChanged(QWebEngineView *view);
- void handleUrlChanged();
- void handleUrlUpdated(const QUrl &url);
- void handleTitleUpdated(const QString &title);
-
- void createProfileDialog();
-
-private:
- Browser *browserInstance;
- DownloadDialog *downloadManager;
- QString profileName;
- WebEngineProfile *profile = nullptr;
-
- // ui
- Ui::MainWindow *ui;
- QMenu *browserMenu, *profileMenu;
- QToolBar *navigationToolBar, *tabToolBar;
- WebViewTabBar *tabBar;
- QLineEdit *urlLineEdit;
-};
-
-#endif // MAINWINDOW_H
+/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QMainWindow> +#include <QToolBar> +#include <QLineEdit> +#include <QWebEngineView> +#include "webengine/webengineprofile.h" +#include <QUrl> +#include "widgets/webviewtabbar.h" +#include "forms/downloaddialog.h" + +namespace Ui { +class MainWindow; +} + +class Browser; +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(Browser *instance, QUrl defaultUrl = QUrl(""), QWidget *parent = 0); + ~MainWindow(); + +public slots: + void createNewTab(const QUrl &url = QUrl("")); + +protected: + void closeEvent(QCloseEvent *event) override; + +private slots: + void loadProfile(const QString &name); + void handleLoadProfile(); + + void handleNewWindow(const QUrl &url = QUrl("")); + void handleTabChanged(QWebEngineView *view); + void handleUrlChanged(); + void handleUrlUpdated(const QUrl &url); + void handleTitleUpdated(const QString &title); + + void createProfileDialog(); + +private: + Browser *browserInstance; + DownloadDialog *downloadManager; + QString profileName; + WebEngineProfile *profile = nullptr; + + // ui + Ui::MainWindow *ui; + QMenu *browserMenu, *profileMenu; + QToolBar *navigationToolBar, *tabToolBar; + WebViewTabBar *tabBar; + QLineEdit *urlLineEdit; +}; + +#endif // MAINWINDOW_H diff --git a/src/settings.cpp b/src/settings.cpp index 4dbc7c8..ad5cdb0 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1,3 +1,23 @@ +/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + #include "settings.h" QString Settings::_path = QString(""); diff --git a/src/settings.h b/src/settings.h index 146bfa1..e073ceb 100644 --- a/src/settings.h +++ b/src/settings.h @@ -1,3 +1,23 @@ +/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + #ifndef SETTINGS_H #define SETTINGS_H diff --git a/src/webengine/downloaditemform.cpp b/src/webengine/downloaditemform.cpp index 717a41d..39661f9 100644 --- a/src/webengine/downloaditemform.cpp +++ b/src/webengine/downloaditemform.cpp @@ -1,3 +1,23 @@ +/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + #include "downloaditemform.h" #include "ui_downloaditemform.h" diff --git a/src/webengine/downloaditemform.h b/src/webengine/downloaditemform.h index 996b876..963d7c5 100644 --- a/src/webengine/downloaditemform.h +++ b/src/webengine/downloaditemform.h @@ -1,3 +1,23 @@ +/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + #ifndef DOWNLOADITEMFORM_H #define DOWNLOADITEMFORM_H diff --git a/src/webengine/webengineprofile.cpp b/src/webengine/webengineprofile.cpp index 1eb1112..532250c 100644 --- a/src/webengine/webengineprofile.cpp +++ b/src/webengine/webengineprofile.cpp @@ -1,3 +1,23 @@ +/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + #include "webengineprofile.h" #include <QSettings> diff --git a/src/webengine/webengineprofile.h b/src/webengine/webengineprofile.h index ca2fd08..51fb739 100644 --- a/src/webengine/webengineprofile.h +++ b/src/webengine/webengineprofile.h @@ -1,3 +1,23 @@ +/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + #ifndef WEBENGINEPROFILE_H #define WEBENGINEPROFILE_H diff --git a/src/widgets/webviewtabbar.cpp b/src/widgets/webviewtabbar.cpp index 666c610..d3747cc 100644 --- a/src/widgets/webviewtabbar.cpp +++ b/src/widgets/webviewtabbar.cpp @@ -1,3 +1,23 @@ +/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + #include "webviewtabbar.h" WebViewTabBar::WebViewTabBar(QWidget *parent) : diff --git a/src/widgets/webviewtabbar.h b/src/widgets/webviewtabbar.h index f4fc6e4..58d85a8 100644 --- a/src/widgets/webviewtabbar.h +++ b/src/widgets/webviewtabbar.h @@ -1,3 +1,23 @@ +/** LICENSE ******************************************************************** + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + #ifndef WEBVIEWTABBAR_H #define WEBVIEWTABBAR_H |