1818#ifndef PAGE_H
1919#define PAGE_H
2020
21+ #include < QInputDialog>
22+ #include < QJsonDocument>
23+ #include < QJsonObject>
24+ #include < QMessageBox>
2125#include < QNetworkReply>
26+ #include < QRegularExpression>
27+ #include < QTimer>
2228#include < QUrl>
2329#include < QUrlQuery>
2430#include < QWebPage>
2531#include < QWebFrame>
26- #include < QTimer>
27- #include < QJsonDocument>
28- #include < QJsonObject>
29- #include < QInputDialog>
30- #include < QMessageBox>
3132
3233#include " file-reader.h"
3334#include " script-handler.h"
@@ -48,7 +49,6 @@ class QPage : public QWebPage
4849 void displayScriptErrorsSignal (QString errors);
4950 void printPreviewSignal ();
5051 void printSignal ();
51- void selectInodeSignal (QNetworkRequest request);
5252 void pageStatusSignal (QString pageStatus);
5353 void closeAllScriptsSignal ();
5454 void closeWindowSignal ();
@@ -303,6 +303,70 @@ public slots:
303303 QPage::mainFrame ()->setHtml (htmlErrorContents);
304304 }
305305
306+ // ==============================
307+ // Select files or folders:
308+ // ==============================
309+ void qSelectInodesSlot (QNetworkRequest request)
310+ {
311+ QString target = request.url ().query ().replace (" target=" , " " );
312+
313+ QFileDialog inodesDialog (qApp->activeWindow ());
314+ inodesDialog.setWindowModality (Qt::WindowModal);
315+ inodesDialog.setViewMode (QFileDialog::Detail);
316+ // inodesDialog.setWindowTitle(QViewWidget::title());
317+ #ifdef Q_OS_WIN
318+ inodesDialog.setOption (QFileDialog::DontUseNativeDialog);
319+ #endif
320+
321+ if (request.url ().fileName () == " open-file.function" ) {
322+ inodesDialog.setFileMode (QFileDialog::AnyFile);
323+ }
324+
325+ if (request.url ().fileName () == " open-files.function" ) {
326+ inodesDialog.setFileMode (QFileDialog::ExistingFiles);
327+ }
328+
329+ if (request.url ().fileName () == " new-file-name.function" ) {
330+ inodesDialog.setAcceptMode (QFileDialog::AcceptSave);
331+ }
332+
333+ if (request.url ().fileName () == " open-directory.function" ) {
334+ inodesDialog.setFileMode (QFileDialog::Directory);
335+ }
336+
337+ QStringList userSelectedInodes;
338+ if (inodesDialog.exec ()) {
339+ userSelectedInodes = inodesDialog.selectedFiles ();
340+ }
341+
342+ inodesDialog.close ();
343+ inodesDialog.deleteLater ();
344+
345+ if (!userSelectedInodes.isEmpty ()) {
346+ QString userSelectedInodesFormatted;
347+ foreach (QString userSelectedInode, userSelectedInodes) {
348+ userSelectedInodesFormatted.append (userSelectedInode);
349+ userSelectedInodesFormatted.append (" ;" );
350+ }
351+ userSelectedInodesFormatted.replace (QRegularExpression (" ;$" ), " " );
352+
353+ // JavaScript bridge back to
354+ // the local HTML frame where request originated:
355+ qJavaScriptInjector (currentFrame ());
356+
357+ QString inodeSelectedJavaScript =
358+ " pebInodeSelection(\" " +
359+ userSelectedInodesFormatted +
360+ " \" , \" " +
361+ target +
362+ " \" ); null" ;
363+
364+ currentFrame ()->evaluateJavaScript (inodeSelectedJavaScript);
365+
366+ qDebug () << " User selected inode:" << userSelectedInodesFormatted;
367+ }
368+ }
369+
306370 // ==============================
307371 // JavaScript-injecting routines:
308372 // ==============================
@@ -495,7 +559,7 @@ public slots:
495559 request.url ().fileName () == " open-file.function" ) {
496560 if (request.url ().query ()
497561 .replace (" target=" , " " ).length () > 0 ) {
498- emit selectInodeSignal (request);
562+ qSelectInodesSlot (request);
499563 }
500564
501565 return false ;
@@ -508,7 +572,7 @@ public slots:
508572 request.url ().fileName () == " open-files.function" ) {
509573 if (request.url ().query ()
510574 .replace (" target=" , " " ).length () > 0 ) {
511- emit selectInodeSignal (request);
575+ qSelectInodesSlot (request);
512576 }
513577
514578 return false ;
@@ -521,7 +585,7 @@ public slots:
521585 request.url ().fileName () == " new-file-name.function" ) {
522586 if (request.url ().query ()
523587 .replace (" target=" , " " ).length () > 0 ) {
524- emit selectInodeSignal (request);
588+ qSelectInodesSlot (request);
525589 }
526590
527591 return false ;
@@ -534,7 +598,7 @@ public slots:
534598 request.url ().fileName () == " open-directory.function" ) {
535599 if (request.url ().query ()
536600 .replace (" target=" , " " ).length () > 0 ) {
537- emit selectInodeSignal (request);
601+ qSelectInodesSlot (request);
538602 }
539603
540604 return false ;
0 commit comments