aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFelix (xq) Queißner <git@mq32.de>2020-06-06 23:38:05 +0200
committerFelix (xq) Queißner <git@mq32.de>2020-06-06 23:38:05 +0200
commit6887cd80266a8041f31b55b65c142a85239f15a1 (patch)
treea3ceabb995fc31b6e77eb23cc2dad5d3bc4846fb /src
parent3aed883402dc8da829fc304434c5efd0570cbb97 (diff)
downloadkristall-6887cd80266a8041f31b55b65c142a85239f15a1.tar.gz
Adds rendering of about:blank and about:favourites.
Diffstat (limited to 'src')
-rw-r--r--src/browsertab.cpp45
-rw-r--r--src/favouritecollection.hpp4
-rw-r--r--src/main.cpp5
-rw-r--r--src/mainwindow.cpp32
-rw-r--r--src/mainwindow.hpp2
-rw-r--r--src/settingsdialog.cpp10
-rw-r--r--src/settingsdialog.hpp4
-rw-r--r--src/settingsdialog.ui26
8 files changed, 105 insertions, 23 deletions
diff --git a/src/browsertab.cpp b/src/browsertab.cpp
index 6a4bf69..5f58704 100644
--- a/src/browsertab.cpp
+++ b/src/browsertab.cpp
@@ -51,10 +51,11 @@ BrowserTab::~BrowserTab()
void BrowserTab::navigateTo(const QUrl &url, PushToHistory mode)
{
// TODO: Implement about:// scheme!
- if(url.scheme() != "gemini") {
+ if(url.scheme() != "gemini" and url.scheme() != "about") {
QMessageBox::warning(this, "Kristall", "Unsupported uri scheme: " + url.scheme());
return;
}
+
this->current_location = url;
this->ui->url_bar->setText(url.toString());
@@ -63,11 +64,44 @@ void BrowserTab::navigateTo(const QUrl &url, PushToHistory mode)
return;
}
- this->redirection_count = 0;
- this->successfully_loaded = false;
- this->push_to_history_after_load = (mode == PushAfterSuccess);
+ if(url.scheme() == "gemini")
+ {
+ this->redirection_count = 0;
+ this->successfully_loaded = false;
+ this->push_to_history_after_load = (mode == PushAfterSuccess);
+ gemini_client.startRequest(url);
+ }
+ else if(url.scheme() == "about")
+ {
+ this->redirection_count = 0;
+ this->push_to_history_after_load = false;
+
+ if(mode == PushAfterSuccess)
+ mode = PushImmediate;
+ if(url.path() == "blank")
+ {
+ this->on_gemini_complete("", "text/gemini");
+ }
+ else if(url.path() == "favourites")
+ {
+ QByteArray document;
+
+ document.append("# Favourites\n");
+ document.append("\n");
+
+ for(auto const & fav : this->mainWindow->favourites.getAll())
+ {
+ document.append("=> " + fav.toString().toUtf8() + "\n");
+ }
+
+ this->on_gemini_complete(document, "text/gemini");
+ }
+ else
+ {
+ QMessageBox::warning(this, "Kristall", "Unknown location: " + url.path());
+ }
+ }
- gemini_client.startRequest(url);
switch(mode)
{
@@ -135,7 +169,6 @@ void BrowserTab::on_gemini_complete(const QByteArray &data, const QString &mime)
{
qDebug() << "Loaded" << data.length() << "bytes of type" << mime;
-
this->graphics_scene.clear();
this->ui->text_browser->setText("");
diff --git a/src/favouritecollection.hpp b/src/favouritecollection.hpp
index 73afa1f..043fdf2 100644
--- a/src/favouritecollection.hpp
+++ b/src/favouritecollection.hpp
@@ -27,6 +27,10 @@ public:
bool load(QString const & fileName);
bool load(QSettings & settings);
+ QVector<QUrl> getAll() const {
+ return this->items;
+ }
+
public:
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
diff --git a/src/main.cpp b/src/main.cpp
index 31cc7da..5063694 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -9,9 +9,8 @@ int main(int argc, char *argv[])
QApplication a(argc, argv);
MainWindow w;
-
-
- w.addNewTab(true, QUrl("gemini://gemini.circumlunar.space/"));
+ // w.addNewTab(true, QUrl("gemini://gemini.circumlunar.space/"));
+ w.addEmptyTab(true, true);
w.show();
return a.exec();
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 19dd922..00f3311 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -14,6 +14,10 @@ MainWindow::MainWindow(QWidget *parent) :
ui(new Ui::MainWindow),
url_status(new QLabel())
{
+ if(not this->settings.contains("start_page")) {
+ this->settings.setValue("start_page", "about:favourites");
+ }
+
ui->setupUi(this);
this->statusBar()->addWidget(this->url_status);
@@ -23,9 +27,10 @@ MainWindow::MainWindow(QWidget *parent) :
ui->favourites_view->setModel(&favourites);
- // this->ui->history_window->setVisible(false);
+ this->ui->outline_window->setVisible(false);
+ this->ui->history_window->setVisible(false);
this->ui->clientcert_window->setVisible(false);
- this->ui->bookmarks_window->setVisible(true);
+ this->ui->bookmarks_window->setVisible(false);
for(QDockWidget * dock : findChildren<QDockWidget *>())
{
@@ -64,7 +69,7 @@ MainWindow::~MainWindow()
delete ui;
}
-BrowserTab * MainWindow::addEmptyTab(bool focus_new)
+BrowserTab * MainWindow::addEmptyTab(bool focus_new, bool load_default)
{
BrowserTab * tab = new BrowserTab(this);
@@ -76,12 +81,16 @@ BrowserTab * MainWindow::addEmptyTab(bool focus_new)
this->ui->browser_tabs->setCurrentIndex(index);
}
+ if(load_default) {
+ tab->navigateTo(QUrl(this->settings.value("start_page").toString()), BrowserTab::DontPush);
+ }
+
return tab;
}
BrowserTab * MainWindow::addNewTab(bool focus_new, QUrl const & url)
{
- auto tab = addEmptyTab(focus_new);
+ auto tab = addEmptyTab(focus_new, false);
tab->navigateTo(url, BrowserTab::PushImmediate);
return tab;
}
@@ -193,15 +202,22 @@ void MainWindow::on_actionSettings_triggered()
dialog.setGeminiStyle(this->current_style);
- if(dialog.exec() == QDialog::Accepted) {
- this->current_style = dialog.geminiStyle();
- this->saveSettings();
+ dialog.setStartPage(this->settings.value("start_page").toString());
+
+ if(dialog.exec() != QDialog::Accepted)
+ return;
+
+ if(auto url = dialog.startPage(); url.isValid()) {
+ this->settings.setValue("start_page", url.toString());
}
+
+ this->current_style = dialog.geminiStyle();
+ this->saveSettings();
}
void MainWindow::on_actionNew_Tab_triggered()
{
- this->addEmptyTab(true);
+ this->addEmptyTab(true, true);
}
void MainWindow::on_actionQuit_triggered()
diff --git a/src/mainwindow.hpp b/src/mainwindow.hpp
index 41b6e2c..95b096d 100644
--- a/src/mainwindow.hpp
+++ b/src/mainwindow.hpp
@@ -23,7 +23,7 @@ public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
- BrowserTab * addEmptyTab(bool focus_new);
+ BrowserTab * addEmptyTab(bool focus_new, bool load_default);
BrowserTab * addNewTab(bool focus_new, QUrl const & url);
void setUrlPreview(QUrl const & url);
diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp
index 2078e7c..33042d5 100644
--- a/src/settingsdialog.cpp
+++ b/src/settingsdialog.cpp
@@ -89,6 +89,16 @@ void SettingsDialog::setGeminiStyle(const GeminiStyle &style)
this->reloadStylePreview();
}
+QUrl SettingsDialog::startPage() const
+{
+ return QUrl(this->ui->start_page->text());
+}
+
+void SettingsDialog::setStartPage(const QUrl &url)
+{
+ this->ui->start_page->setText(url.toString());
+}
+
void SettingsDialog::reloadStylePreview()
{
auto const document = R"gemini(# H1 Header
diff --git a/src/settingsdialog.hpp b/src/settingsdialog.hpp
index 5f56961..9df4085 100644
--- a/src/settingsdialog.hpp
+++ b/src/settingsdialog.hpp
@@ -23,6 +23,10 @@ public:
return current_style;
}
+ QUrl startPage() const;
+
+ void setStartPage(QUrl const & url);
+
private slots:
void on_std_change_font_clicked();
diff --git a/src/settingsdialog.ui b/src/settingsdialog.ui
index aee3959..b4cc9d6 100644
--- a/src/settingsdialog.ui
+++ b/src/settingsdialog.ui
@@ -19,6 +19,27 @@
<property name="currentIndex">
<number>0</number>
</property>
+ <widget class="QWidget" name="generic">
+ <attribute name="title">
+ <string>Generic</string>
+ </attribute>
+ <layout class="QFormLayout" name="formLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_14">
+ <property name="text">
+ <string>Start Page:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="start_page">
+ <property name="placeholderText">
+ <string>about://blank</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
<widget class="QWidget" name="style_tab">
<attribute name="title">
<string>Style</string>
@@ -458,11 +479,6 @@
</item>
</layout>
</widget>
- <widget class="QWidget" name="generic">
- <attribute name="title">
- <string>Generic</string>
- </attribute>
- </widget>
</widget>
</item>
<item>