-
This commit is contained in:
@@ -274,6 +274,41 @@ void Rktwebview_qt::processCommand(Command *cmd)
|
||||
cmd->done = true;
|
||||
}
|
||||
break;
|
||||
case COMMAND_FILE_OPEN:
|
||||
case COMMAND_FILE_SAVE: {
|
||||
int wv = cmd->args[0].toInt();
|
||||
QString title = cmd->args[1].toString();
|
||||
QString base_dir = cmd->args[2].toString();
|
||||
QString exts = cmd->args[3].toString();
|
||||
if (_views.contains(wv)) {
|
||||
WebviewWindow *w = _views[wv];
|
||||
QString file;
|
||||
QString selected_filter;
|
||||
if (cmd->cmd == COMMAND_FILE_OPEN) {
|
||||
file = QFileDialog::getOpenFileName(w, title, base_dir, exts, &selected_filter);
|
||||
} else {
|
||||
file = QFileDialog::getSaveFileName(w, title, base_dir, exts, &selected_filter);
|
||||
}
|
||||
if (file == "") {
|
||||
QJsonObject obj;
|
||||
obj["state"] = "canceled";
|
||||
obj["file"] = "";
|
||||
obj["used-filter"] = selected_filter;
|
||||
cmd->result = QString::fromUtf8(QJsonDocument(obj).toJson(QJsonDocument::JsonFormat::Compact));
|
||||
} else {
|
||||
QJsonObject obj;
|
||||
obj["state"] = "choosen";
|
||||
obj["file"] = file;
|
||||
obj["used-filter"] = selected_filter;
|
||||
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;
|
||||
@@ -484,6 +519,62 @@ rkt_js_result_t *Rktwebview_qt::rktChooseDir(rktwebview_t w, const char *title,
|
||||
return r;
|
||||
}
|
||||
|
||||
rkt_js_result_t *Rktwebview_qt::rktFileOpen(rktwebview_t w, const char *title, const char *base_dir, const char *permitted_exts)
|
||||
{
|
||||
Command c(COMMAND_FILE_OPEN);
|
||||
c.args.push_back(w);
|
||||
|
||||
QString t(title);
|
||||
c.args.push_back(t);
|
||||
|
||||
QString dir(base_dir);
|
||||
c.args.push_back(dir);
|
||||
|
||||
QString exts(permitted_exts);
|
||||
c.args.push_back(exts);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
rkt_js_result_t *Rktwebview_qt::rktFileSave(rktwebview_t w, const char *title, const char *base_dir, const char *permitted_exts)
|
||||
{
|
||||
Command c(COMMAND_FILE_SAVE);
|
||||
c.args.push_back(w);
|
||||
|
||||
QString t(title);
|
||||
c.args.push_back(t);
|
||||
|
||||
QString dir(base_dir);
|
||||
c.args.push_back(dir);
|
||||
|
||||
QString exts(permitted_exts);
|
||||
c.args.push_back(exts);
|
||||
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user