From eaf3efa06bf4d0149e4569466f19ab63086f427c Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Wed, 11 May 2022 16:45:50 +0200 Subject: Improve scratch-pad --- src/mainwindow.cc | 109 +++++++++++++++++++++++++++------------------- src/mainwindow.h | 3 ++ src/qookie-cast-client.cc | 1 + src/viewer.cc | 48 +++++++++++++++++--- src/viewer.h | 10 ++++- 5 files changed, 117 insertions(+), 54 deletions(-) diff --git a/src/mainwindow.cc b/src/mainwindow.cc index 30680de..1e988bf 100644 --- a/src/mainwindow.cc +++ b/src/mainwindow.cc @@ -36,6 +36,7 @@ #include #include #include +#include #include "database.h" #include "viewer.h" @@ -43,53 +44,71 @@ MainWindow::MainWindow(Database& db) : db(db) { - //connect(document, SIGNAL(documentStatusChanged(bool)), this, SLOT(updateDocumentStatus(bool))); - //updateDocumentStatus(document->hasChanged()); - setWindowTitle("Qookie"); - // - // Create the toolbar - // - QToolBar *toolbar = new QToolBar("A toolbar"); - /* - QAction *act_load = toolbar->addAction("Load"); - // connect(act_load, SIGNAL(triggered()), &document, SLOT(load())); - - QAction *act_save = toolbar->addAction("Save"); - // connect(act_save, SIGNAL(triggered()), &document, SLOT(save())); - */ - // - // Create the browser docking widget - // - QDockWidget *browser = new QDockWidget("Browser"); - auto w = new QWidget(); - auto layout = new QVBoxLayout(); - w->setLayout(layout); - - auto e = new QLineEdit(); - layout->addWidget(e); - connect(e, &QLineEdit::textChanged, this, &MainWindow::filterChanged); - - listWidget = new QListWidget(this); - listWidget->setIconSize({64, 64}); - layout->addWidget(listWidget); - - browser->setWidget(w); - - // - // Create the viewer - // - viewer = new Viewer(); - setCentralWidget(viewer); - - addToolBar(Qt::TopToolBarArea, toolbar); - addDockWidget(Qt::LeftDockWidgetArea, browser); - - QObject::connect(listWidget, &QListWidget::currentRowChanged, - this, &MainWindow::itemChanged); - - listWidget->setSortingEnabled(true); + //client.connectToHost("127.0.0.1"); + client.connectToHost("nanny"); + + { + auto toolbar = new QToolBar(); + + { + auto act = toolbar->addAction("New Scratch Pad"); + connect(act, &QAction::triggered, + [&]() + { + viewer->scratchPad(); + }); + } + + { + auto spacer = new QWidget(); + spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + toolbar->addWidget(spacer); + } + + { + auto act = toolbar->addAction("🍪ookie-Cast"); + connect(act, &QAction::triggered, + [&]() + { + const auto& title = viewer->getTitle(); + const auto& html = viewer->getHtml(); + client.writeData(title, html.toUtf8()); + }); + } + + addToolBar(Qt::TopToolBarArea, toolbar); + } + + { + auto browser = new QDockWidget("Recipes"); + browser->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable); + auto w = new QWidget(); + auto layout = new QVBoxLayout(); + w->setLayout(layout); + + auto e = new QLineEdit(); + layout->addWidget(e); + connect(e, &QLineEdit::textChanged, this, &MainWindow::filterChanged); + + listWidget = new QListWidget(this); + listWidget->setIconSize({64, 64}); + QObject::connect(listWidget, &QListWidget::currentRowChanged, + this, &MainWindow::itemChanged); + listWidget->setSortingEnabled(true); + layout->addWidget(listWidget); + + browser->setWidget(w); + + addDockWidget(Qt::LeftDockWidgetArea, browser); + } + + { + viewer = new Viewer(); + setCentralWidget(viewer); + } + readDatabase(); } diff --git a/src/mainwindow.h b/src/mainwindow.h index 3588a19..ece4a85 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -29,6 +29,8 @@ #include #include +#include "client.h" + class QListWidget; class QListWidgetItem; class Database; @@ -52,4 +54,5 @@ private: QListWidget *listWidget; Database& db; Viewer* viewer{nullptr}; + Client client; }; diff --git a/src/qookie-cast-client.cc b/src/qookie-cast-client.cc index 04e254d..e33edfd 100644 --- a/src/qookie-cast-client.cc +++ b/src/qookie-cast-client.cc @@ -77,6 +77,7 @@ void Server::readyRead() auto webview = new WebView(); webview->setHtml(QString::fromUtf8(html)); + webview->setReadOnly(true); tabs.addTab(webview, QString::fromUtf8(title)); payload_size = -1; // Store remainder (ie. skip, title_size, title and html) diff --git a/src/viewer.cc b/src/viewer.cc index b0b6f35..43b82dd 100644 --- a/src/viewer.cc +++ b/src/viewer.cc @@ -29,23 +29,33 @@ #include #include -#include +#include +#include #include "recipe.h" #include "client.h" Viewer::Viewer() { - setLayout(new QHBoxLayout()); + setLayout(new QVBoxLayout()); + + lineEdit = new QLineEdit(); + lineEdit->setVisible(false); + layout()->addWidget(lineEdit); + textEdit = new QTextEdit(); - layout()->addWidget(textEdit); textEdit->setReadOnly(true); - //client.connectToHost("127.0.0.1"); - client.connectToHost("nanny"); + textEdit->setVisible(false); + layout()->addWidget(textEdit); } void Viewer::show(const Recipe& recipe) { + textEdit->setReadOnly(true); + textEdit->setVisible(true); + lineEdit->setVisible(false); + + title = QString::fromUtf8(recipe.title.data()); auto instructions = QString::fromUtf8(recipe.instructions.data()); instructions.replace("\n", "
"); @@ -99,7 +109,7 @@ void Viewer::show(const Recipe& recipe) break; } - QString html = + html = "
" + QString::fromUtf8(recipe.title.data()) + "

" "" "" @@ -125,6 +135,30 @@ void Viewer::show(const Recipe& recipe) "

" + instructions + "

" ; textEdit->setHtml(html); +} + +void Viewer::scratchPad() +{ + textEdit->setReadOnly(false); + textEdit->setVisible(true); + textEdit->setHtml(""); - client.writeData(QString::fromUtf8(recipe.title.data()), html.toUtf8()); + lineEdit->setVisible(true); + lineEdit->setText(""); +} + +const QString& Viewer::getTitle() +{ + if(lineEdit->isVisible()) + { + title = lineEdit->text(); + } + + return title; +} + +const QString& Viewer::getHtml() +{ + html = textEdit->toHtml(); + return html; } diff --git a/src/viewer.h b/src/viewer.h index 8788d45..83ef9a5 100644 --- a/src/viewer.h +++ b/src/viewer.h @@ -29,9 +29,9 @@ #include #include "recipe.h" -#include "client.h" class QTextEdit; +class QLineEdit; class Viewer : public QWidget @@ -41,8 +41,14 @@ public: Viewer(); void show(const Recipe& recipe); + void scratchPad(); + + const QString& getTitle(); + const QString& getHtml(); private: + QLineEdit* lineEdit{nullptr}; QTextEdit* textEdit{nullptr}; - Client client; + QString html; + QString title; }; -- cgit v1.2.3