#include "mainwindow.h" #include "ui_mainwindow.h" #include "settings.h" #include #include #include #include "browser.h" MainWindow::MainWindow(Browser *instance, QUrl defaultUrl, QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), navigationToolBar(new QToolBar(this)), tabToolBar(new QToolBar(this)), tabBar(new WebViewTabBar(this)), urlLineEdit(new QLineEdit(navigationToolBar)) { browserInstance = instance; Settings settings; ui->setupUi(this); resize(settings.value("window/width", 800).toInt(), settings.value("window/height", 600).toInt()); // Populate the menu bar // Browser menu - with new window, new tab, open and quit QMenu *browserMenu = new QMenu(qApp->applicationName(), ui->menuBar); 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("Quit"), qApp, SLOT(quit()), QKeySequence(tr("Ctrl+Q"))); ui->menuBar->addMenu(browserMenu); // View menu - fullscreen // Page menu - what page actions? // Help menu - help contents, about, about qt 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) { QWebEngineView *view = new QWebEngineView(0); view->load(url); tabBar->addTab(view); } 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::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", "qtwebenginebrowser").toString()); }