-
This commit is contained in:
@@ -22,6 +22,9 @@
|
||||
#define COMMAND_SHOW_NORMAL_WIN 16
|
||||
#define COMMAND_WINDOW_STATUS 17
|
||||
#define COMMAND_SET_TITLE 18
|
||||
#define COMMAND_CHOOSE_DIR 19
|
||||
#define COMMAND_OPEN_FILE 20
|
||||
#define COMMAND_SAVE_FILE 21
|
||||
|
||||
class Command
|
||||
{
|
||||
|
||||
@@ -51,7 +51,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
|
||||
if (i == 10) {
|
||||
wv2 = rkt_webview_create(0, eventCb);
|
||||
wv2 = rkt_webview_create(wv1, eventCb);
|
||||
rkt_webview_move(wv2, 400, 200);
|
||||
rkt_webview_resize(wv2, 800, 600);
|
||||
rkt_webview_set_url(wv2, "https://127.0.0.1");
|
||||
|
||||
@@ -184,3 +184,9 @@ result_t rkt_webview_set_title(rktwebview_t wv, const char *title)
|
||||
rkt_webview_init();
|
||||
return handler->rktWindowSetTitle(wv, title);
|
||||
}
|
||||
|
||||
rkt_js_result_t *rkt_webview_choose_dir(rktwebview_t w, const char *title, const char *base_dir)
|
||||
{
|
||||
rkt_webview_init();
|
||||
return handler->rktChooseDir(w, title, base_dir);
|
||||
}
|
||||
|
||||
@@ -29,7 +29,10 @@ typedef enum {
|
||||
webview_unspecified = 10,
|
||||
webview_dispatch_failed = 11,
|
||||
move_failed = 12,
|
||||
resize_failed = 13
|
||||
resize_failed = 13,
|
||||
choose_dir_failed = 14,
|
||||
open_file_failed = 15,
|
||||
save_file_failed = 16
|
||||
} result_t;
|
||||
|
||||
typedef struct {
|
||||
@@ -77,6 +80,8 @@ RKTWEBVIEW_QT_EXPORT result_t rkt_webview_maximize(rktwebview_t w);
|
||||
RKTWEBVIEW_QT_EXPORT result_t rkt_webview_minimize(rktwebview_t w);
|
||||
RKTWEBVIEW_QT_EXPORT window_state_t rkt_webview_window_state(rktwebview_t w);
|
||||
|
||||
RKTWEBVIEW_QT_EXPORT rkt_js_result_t *rkt_webview_choose_dir(rktwebview_t w, const char *title, const char *base_dir);
|
||||
|
||||
}
|
||||
|
||||
#endif // RKTWEBVIEW_H
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <QJsonObject>
|
||||
#include <QAbstractEventDispatcher>
|
||||
#include "command.h"
|
||||
#include <QFileDialog>
|
||||
|
||||
void Rktwebview_qt::processCommand(Command *cmd)
|
||||
{
|
||||
@@ -25,7 +26,7 @@ void Rktwebview_qt::processCommand(Command *cmd)
|
||||
void *f = cmd->args[1].value<void *>();
|
||||
event_cb_t js_event_cb = reinterpret_cast <event_cb_t>(f);
|
||||
|
||||
QWidget *p;
|
||||
WebviewWindow *p;
|
||||
if (_views.contains(parent)) {
|
||||
p = _views[parent];
|
||||
} else {
|
||||
@@ -248,6 +249,31 @@ void Rktwebview_qt::processCommand(Command *cmd)
|
||||
cmd->done = true;
|
||||
}
|
||||
break;
|
||||
case COMMAND_CHOOSE_DIR: {
|
||||
int wv = cmd->args[0].toInt();
|
||||
QString title = cmd->args[1].toString();
|
||||
QString base_dir = cmd->args[2].toString();
|
||||
if (_views.contains(wv)) {
|
||||
WebviewWindow *w = _views[wv];
|
||||
QString dir = QFileDialog::getExistingDirectory(w, title, base_dir, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
|
||||
if (dir == "") {
|
||||
QJsonObject obj;
|
||||
obj["state"] = "canceled";
|
||||
obj["dir"] = base_dir;
|
||||
cmd->result = QString::fromUtf8(QJsonDocument(obj).toJson(QJsonDocument::JsonFormat::Compact));
|
||||
} else {
|
||||
QJsonObject obj;
|
||||
obj["state"] = "choosen";
|
||||
obj["dir"] = dir;
|
||||
cmd->result = QString::fromUtf8(QJsonDocument(obj).toJson(QJsonDocument::JsonFormat::Compact));
|
||||
}
|
||||
} else {
|
||||
cmd->js_result_ok = false;
|
||||
cmd->result = false;
|
||||
}
|
||||
cmd->done = true;
|
||||
}
|
||||
break;
|
||||
default: {
|
||||
cmd->result = false;
|
||||
cmd->done = true;
|
||||
@@ -433,6 +459,31 @@ window_state_t Rktwebview_qt::rktWindowState(rktwebview_t w)
|
||||
return ws;
|
||||
}
|
||||
|
||||
rkt_js_result_t *Rktwebview_qt::rktChooseDir(rktwebview_t w, const char *title, const char *base_dir)
|
||||
{
|
||||
Command c(COMMAND_CHOOSE_DIR);
|
||||
c.args.push_back(w);
|
||||
|
||||
QString t(title);
|
||||
c.args.push_back(t);
|
||||
|
||||
QString dir(base_dir);
|
||||
c.args.push_back(dir);
|
||||
|
||||
postCommand(&c);
|
||||
|
||||
while(!c.done) { doEvents(); }
|
||||
|
||||
bool oke = c.js_result_ok;
|
||||
|
||||
rkt_js_result_t *r = static_cast<rkt_js_result_t *>(malloc(sizeof(rkt_js_result_t)));
|
||||
r->result = c.js_result_ok ? result_t::oke : result_t::choose_dir_failed;
|
||||
|
||||
r->value = strdup(c.result.toString().toUtf8());
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
result_t Rktwebview_qt::rktWindowSetTitle(rktwebview_t wv, const char *title)
|
||||
{
|
||||
Command c(COMMAND_SET_TITLE);
|
||||
|
||||
@@ -84,6 +84,8 @@ public:
|
||||
result_t rktShowNormalWindow(rktwebview_t w);
|
||||
window_state_t rktWindowState(rktwebview_t w);
|
||||
|
||||
rkt_js_result_t *rktChooseDir(rktwebview_t w, const char *title, const char *base_dir);
|
||||
|
||||
result_t rktWindowSetTitle(rktwebview_t wv, const char *title);
|
||||
|
||||
bool rktValid(rktwebview_t wv);
|
||||
|
||||
@@ -11,20 +11,27 @@
|
||||
#include <QWebEngineScriptCollection>
|
||||
#include <QWebEngineScript>
|
||||
#include <QMoveEvent>
|
||||
#include <QWindow>
|
||||
|
||||
|
||||
WebviewWindow::WebviewWindow(QWidget *parent)
|
||||
WebviewWindow::WebviewWindow(WebviewWindow *parent)
|
||||
: QMainWindow{parent}
|
||||
{
|
||||
_view = nullptr;
|
||||
_must_close = false;
|
||||
|
||||
_devtools = nullptr;
|
||||
_parent = parent;
|
||||
|
||||
_window_created = false;
|
||||
_moved = 0;
|
||||
_resized = 0;
|
||||
|
||||
if (parent != nullptr) {
|
||||
setWindowModality(Qt::WindowModality::WindowModal);
|
||||
setWindowFlag(Qt::WindowType::Dialog, true);
|
||||
}
|
||||
|
||||
connect(&_resize_timer, &QTimer::timeout, this, &WebviewWindow::triggerResize);
|
||||
connect(&_move_timer, &QTimer::timeout, this, &WebviewWindow::triggerMove);
|
||||
}
|
||||
@@ -227,6 +234,7 @@ void WebviewWindow::triggerResize()
|
||||
void WebviewWindow::showEvent(QShowEvent *event)
|
||||
{
|
||||
_window_created = true;
|
||||
|
||||
EventContainer show("show");
|
||||
_container->triggerEvent(_view->id(), show);
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ private:
|
||||
Rktwebview_qt *_container;
|
||||
WebViewQt *_view;
|
||||
QMainWindow *_devtools;
|
||||
WebviewWindow *_parent;
|
||||
|
||||
QTimer _resize_timer;
|
||||
QTimer _move_timer;
|
||||
@@ -51,7 +52,7 @@ public:
|
||||
void openDevTools();
|
||||
|
||||
public:
|
||||
explicit WebviewWindow(QWidget *parent = nullptr);
|
||||
explicit WebviewWindow(WebviewWindow *parent = nullptr);
|
||||
|
||||
private slots:
|
||||
void triggerResize();
|
||||
|
||||
Reference in New Issue
Block a user