summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mainwindow.cc109
-rw-r--r--src/mainwindow.h3
-rw-r--r--src/qookie-cast-client.cc1
-rw-r--r--src/viewer.cc48
-rw-r--r--src/viewer.h10
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 <QPainter>
#include <QVBoxLayout>
#include <QLineEdit>
+#include <QAction>
#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 <QMainWindow>
#include <QListWidget>
+#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 <iostream>
#include <QTextEdit>
-#include <QHBoxLayout>
+#include <QLineEdit>
+#include <QVBoxLayout>
#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", "<br/>");
@@ -99,7 +109,7 @@ void Viewer::show(const Recipe& recipe)
break;
}
- QString html =
+ html =
"<center><strong style=\"font-size:28px;\">" + QString::fromUtf8(recipe.title.data()) + "</strong></center><br/>"
"<table>"
"<tr>"
@@ -125,6 +135,30 @@ void Viewer::show(const Recipe& recipe)
"<p>" + instructions + "</p>"
;
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 <QWidget>
#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;
};