From 44e85dce678e7e36f436a6d0a25c212c9a2d3657 Mon Sep 17 00:00:00 2001 From: "Felix (xq) Queißner" Date: Sat, 6 Jun 2020 23:07:45 +0200 Subject: A bit of redesign of the user interface, more convenience functions. --- README.md | 2 +- browsertab.cpp | 40 ++---------------- browsertab.hpp | 5 +-- browsertab.ui | 11 ----- icons.qrc | 1 + icons/settings.svg | 1 + mainwindow.cpp | 116 ++++++++++++++++++++++++++++++++++++++------------ mainwindow.hpp | 20 ++++++--- mainwindow.ui | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++ settingsdialog.ui | 2 +- 10 files changed, 235 insertions(+), 85 deletions(-) create mode 100644 icons/settings.svg diff --git a/README.md b/README.md index 9b359b6..19e4ceb 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ A high-quality visual cross-platform gemini browser. - `text/markdown` - `text/*` - `image/*` -- [Outline generation](https://mq32.de/public/a50ef327f4150d870393b1989c5b41db495b56f7.png) +- [Outline generation](https://mq32.de/public/a50ef327f4150d870393b1989c5b41db495b56f7.png) ([Video](https://mq32.de/public/kristall-02.mp4)) - Favourite Sites - Tabbed interface - Survives [ConMans torture suite](gemini://gemini.conman.org/test/torture/) diff --git a/browsertab.cpp b/browsertab.cpp index e81dc39..f7e5f78 100644 --- a/browsertab.cpp +++ b/browsertab.cpp @@ -41,7 +41,6 @@ BrowserTab::BrowserTab(MainWindow * mainWindow) : this->ui->text_browser->setVisible(false); this->ui->graphics_browser->setScene(&graphics_scene); - } BrowserTab::~BrowserTab() @@ -110,40 +109,10 @@ void BrowserTab::scrollToAnchor(QString const & anchor) this->ui->text_browser->scrollToAnchor(anchor); } -void BrowserTab::on_menu_button_clicked() +void BrowserTab::reloadPage() { - QMenu menu; - connect(menu.addAction("Open Empty Tab"), &QAction::triggered, mainWindow, &MainWindow::addEmptyTab); - - QMenu * view_menu = menu.addMenu("View"); - { - QList dockWidgets = mainWindow->findChildren(); - - for(QDockWidget * dock : dockWidgets) - { - QAction * act = view_menu ->addAction(dock->windowTitle()); - act->setCheckable(true); - act->setChecked(dock->isVisible()); - - connect(act, QOverload::of(&QAction::triggered), dock, &QDockWidget::setVisible); - } - } - - connect(menu.addAction("Settings..."), &QAction::triggered, [this]() { - SettingsDialog dialog; - - dialog.setGeminiStyle(mainWindow->current_style); - - if(dialog.exec() == QDialog::Accepted) { - mainWindow->current_style = dialog.geminiStyle(); - - mainWindow->saveSettings(); - } - }); - - - connect(menu.addAction("Quit"), &QAction::triggered, &QApplication::quit); - menu.exec(QCursor::pos()); + if(current_location.isValid()) + this->navigateTo(this->current_location, DontPush); } void BrowserTab::on_url_bar_returnPressed() @@ -159,8 +128,7 @@ void BrowserTab::on_url_bar_returnPressed() void BrowserTab::on_refresh_button_clicked() { - if(current_location.isValid()) - this->navigateTo(this->current_location, DontPush); + reloadPage(); } void BrowserTab::on_gemini_complete(const QByteArray &data, const QString &mime) diff --git a/browsertab.hpp b/browsertab.hpp index 44e47b7..7f0ac35 100644 --- a/browsertab.hpp +++ b/browsertab.hpp @@ -41,20 +41,19 @@ public: void scrollToAnchor(QString const & anchor); + void reloadPage(); + signals: void titleChanged(QString const & title); void locationChanged(QUrl const & url); private slots: - void on_menu_button_clicked(); - void on_url_bar_returnPressed(); void on_refresh_button_clicked(); void on_gemini_complete(QByteArray const & data, QString const & mime); - void on_protocolViolation(QString const & reason); void on_inputRequired(QString const & query); diff --git a/browsertab.ui b/browsertab.ui index 6207711..265560e 100644 --- a/browsertab.ui +++ b/browsertab.ui @@ -130,17 +130,6 @@ - - - - ... - - - - :/icons/menu.svg:/icons/menu.svg - - - diff --git a/icons.qrc b/icons.qrc index 5b6b051..a0daae0 100644 --- a/icons.qrc +++ b/icons.qrc @@ -10,5 +10,6 @@ icons/format-font.svg icons/palette.svg icons/kristall.svg + icons/settings.svg diff --git a/icons/settings.svg b/icons/settings.svg new file mode 100644 index 0000000..731a5a7 --- /dev/null +++ b/icons/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/mainwindow.cpp b/mainwindow.cpp index 4b8d692..19dd922 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,7 +1,9 @@ #include "mainwindow.hpp" #include "ui_mainwindow.h" #include "browsertab.hpp" +#include "settingsdialog.hpp" +#include #include #include #include @@ -25,22 +27,39 @@ MainWindow::MainWindow(QWidget *parent) : this->ui->clientcert_window->setVisible(false); this->ui->bookmarks_window->setVisible(true); - - auto add_shortcut = [this](QString const & sequence, void (MainWindow::*fun)()) + for(QDockWidget * dock : findChildren()) { - auto * shortcut = new QShortcut(QKeySequence(sequence), this); - connect(shortcut, &QShortcut::activated, this, fun); - }; + QAction * act = this->ui->menuView ->addAction(dock->windowTitle()); + act->setCheckable(true); + act->setChecked(dock->isVisible()); + act->setData(QVariant::fromValue(dock)); + connect(act, QOverload::of(&QAction::triggered), dock, &QDockWidget::setVisible); + } + + connect(this->ui->menuView, &QMenu::aboutToShow, [this]() { + for(QAction * act : this->ui->menuView->actions()) + { + auto * dock = qvariant_cast(act->data()); + act->setChecked(dock->isVisible()); + } + }); - add_shortcut("Ctrl+T", &MainWindow::on_new_tab); - add_shortcut("Ctrl+W", &MainWindow::on_close_tab); - add_shortcut("F5", &MainWindow::on_refresh); - add_shortcut("Alt+Left", &MainWindow::on_nav_back); - add_shortcut("Alt+Right", &MainWindow::on_nav_forward); + + { + settings.beginGroup("Window State"); + if(settings.contains("geometry")) { + restoreGeometry(settings.value("geometry").toByteArray()); + } + if(settings.contains("state")) { + restoreState(settings.value("state").toByteArray()); + } + settings.endGroup(); + } } MainWindow::~MainWindow() { + this->saveSettings(); delete ui; } @@ -85,6 +104,15 @@ void MainWindow::saveSettings() { this->favourites.save(settings); this->current_style.save(settings); + + { + settings.beginGroup("Window State"); + + settings.setValue("geometry", saveGeometry()); + settings.setValue("state", saveState()); + + settings.endGroup(); + } } void MainWindow::on_browser_tabs_currentChanged(int index) @@ -147,20 +175,53 @@ void MainWindow::on_tab_locationChanged(const QUrl &url) } } -void MainWindow::on_new_tab() +void MainWindow::on_outline_view_clicked(const QModelIndex &index) { - this->addEmptyTab(true); + BrowserTab * tab = qobject_cast(this->ui->browser_tabs->currentWidget()); + if(tab != nullptr) { + + auto anchor = tab->outline.getAnchor(index); + if(not anchor.isEmpty()) { + tab->scrollToAnchor(anchor); + } + } } -void MainWindow::on_refresh() +void MainWindow::on_actionSettings_triggered() { - BrowserTab * tab = qobject_cast(this->ui->browser_tabs->currentWidget()); - if(tab != nullptr) { - // tab->reloadPage(); + SettingsDialog dialog; + + dialog.setGeminiStyle(this->current_style); + + if(dialog.exec() == QDialog::Accepted) { + this->current_style = dialog.geminiStyle(); + this->saveSettings(); } } -void MainWindow::on_close_tab() +void MainWindow::on_actionNew_Tab_triggered() +{ + this->addEmptyTab(true); +} + +void MainWindow::on_actionQuit_triggered() +{ + QApplication::quit(); +} + +void MainWindow::on_actionAbout_triggered() +{ + QMessageBox::about(this, + "Kristall", +R"about(Kristall, an OpenSource Gemini browser. +Made by Felix "xq" Queißner + +This is free software. You can get the source code at +https://github.com/MasterQ32/Kristall)about" + ); +} + +void MainWindow::on_actionClose_Tab_triggered() { BrowserTab * tab = qobject_cast(this->ui->browser_tabs->currentWidget()); if(tab != nullptr) { @@ -168,30 +229,31 @@ void MainWindow::on_close_tab() } } -void MainWindow::on_nav_back() +void MainWindow::on_actionForward_triggered() { BrowserTab * tab = qobject_cast(this->ui->browser_tabs->currentWidget()); if(tab != nullptr) { - tab->navOneBackback(); + tab->navOneForward(); } } -void MainWindow::on_nav_forward() +void MainWindow::on_actionBackward_triggered() { BrowserTab * tab = qobject_cast(this->ui->browser_tabs->currentWidget()); if(tab != nullptr) { - tab->navOneForward(); + tab->navOneBackback(); } } -void MainWindow::on_outline_view_clicked(const QModelIndex &index) +void MainWindow::on_actionRefresh_triggered() { BrowserTab * tab = qobject_cast(this->ui->browser_tabs->currentWidget()); if(tab != nullptr) { - - auto anchor = tab->outline.getAnchor(index); - if(not anchor.isEmpty()) { - tab->scrollToAnchor(anchor); - } + tab->reloadPage(); } } + +void MainWindow::on_actionAbout_Qt_triggered() +{ + QMessageBox::aboutQt(this, "Kristall"); +} diff --git a/mainwindow.hpp b/mainwindow.hpp index dd901e3..41b6e2c 100644 --- a/mainwindow.hpp +++ b/mainwindow.hpp @@ -46,17 +46,25 @@ private slots: void on_tab_locationChanged(QUrl const & url); - void on_new_tab(); + void on_outline_view_clicked(const QModelIndex &index); - void on_refresh(); + void on_actionSettings_triggered(); - void on_close_tab(); + void on_actionNew_Tab_triggered(); - void on_nav_back(); + void on_actionQuit_triggered(); - void on_nav_forward(); + void on_actionAbout_triggered(); - void on_outline_view_clicked(const QModelIndex &index); + void on_actionClose_Tab_triggered(); + + void on_actionForward_triggered(); + + void on_actionBackward_triggered(); + + void on_actionRefresh_triggered(); + + void on_actionAbout_Qt_triggered(); public: QSettings settings; diff --git a/mainwindow.ui b/mainwindow.ui index 04e6940..08ba787 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -179,6 +179,128 @@ + + + + 0 + 0 + 800 + 20 + + + + + File + + + + + + + + + + + Help + + + + + + + View + + + + + Navigation + + + + + + + + + + + + + + About... + + + + + Quit + + + + + New Tab + + + Ctrl+T + + + + + Close Tab + + + Ctrl+W + + + + + + :/icons/settings.svg:/icons/settings.svg + + + Settings + + + + + + :/icons/arrow-left.svg:/icons/arrow-left.svg + + + Backward + + + Alt+Left + + + + + + :/icons/arrow-right.svg:/icons/arrow-right.svg + + + Forward + + + Alt+Right + + + + + + :/icons/refresh.svg:/icons/refresh.svg + + + Refresh + + + F5 + + + + + About Qt... + + diff --git a/settingsdialog.ui b/settingsdialog.ui index d30b049..aee3959 100644 --- a/settingsdialog.ui +++ b/settingsdialog.ui @@ -11,7 +11,7 @@ - Dialog + Settings -- cgit v1.2.3