diff --git a/assets/pics/document-open.svg b/assets/pics/document-open.svg new file mode 100644 index 00000000..5c248041 --- /dev/null +++ b/assets/pics/document-open.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/resource.qrc b/resource.qrc index af75dcc7..4a56db60 100755 --- a/resource.qrc +++ b/resource.qrc @@ -31,6 +31,7 @@ assets/pics/deletecell.svg assets/pics/document-close.svg assets/pics/document-export.svg + assets/pics/document-open.svg assets/pics/document-new.svg assets/pics/document-save.svg assets/pics/globe.svg diff --git a/src/filelineedit.cpp b/src/filelineedit.cpp index 511fbe8b..c0b9a937 100644 --- a/src/filelineedit.cpp +++ b/src/filelineedit.cpp @@ -10,8 +10,17 @@ #include "filelineedit.h" // #include "base/settings.h" +// +#include +#include +#include -FileLineEdit::FileLineEdit(QWidget *parent) : QLineEdit(parent) { completer = nullptr; } +FileLineEdit::FileLineEdit(QWidget *parent) : QLineEdit(parent) { + completer = nullptr; + QAction *browseAction = addAction(QIcon(":/icon/document-open.svg"), QLineEdit::TrailingPosition); + browseAction->setToolTip(tr("Browse...")); + connect(browseAction, &QAction::triggered, this, &FileLineEdit::browse); +} void FileLineEdit::getFiles(const QString &curDir, const QString &prefix, QStringList &files) { QDir dir(curDir); @@ -54,3 +63,23 @@ void FileLineEdit::refreshFileList() { completer = new QCompleter(files, this); setCompleter(completer); } + +void FileLineEdit::browse() { + QDir dataDir(QDir::currentPath()); + dataDir.mkpath(Settings::dataPath()); + dataDir.cd(Settings::dataPath()); + QString filePath = QFileDialog::getOpenFileName(this, tr("Choose File"), dataDir.absolutePath()); + + if (filePath.isEmpty()) + return; + + QString relPath = dataDir.relativeFilePath(filePath); + + if (relPath.startsWith("..") || QDir::isAbsolutePath(relPath)) { + QMessageBox::warning(this, tr("Warning"), tr("Please select a file inside the data directory."), + QMessageBox::Close); + return; + } + + setText(QDir::toNativeSeparators(relPath)); +} diff --git a/src/filelineedit.h b/src/filelineedit.h index df6c335e..ca55f5db 100644 --- a/src/filelineedit.h +++ b/src/filelineedit.h @@ -27,6 +27,7 @@ class FileLineEdit : public QLineEdit { QCompleter *completer; QStringList nameFilters; QDir::Filters filters; + void browse(); public slots: void refreshFileList(); diff --git a/translations/en_US.ts b/translations/en_US.ts index 24b8fef3..f820b2ab 100644 --- a/translations/en_US.ts +++ b/translations/en_US.ts @@ -2694,4 +2694,23 @@ p, li { white-space: pre-wrap; } + + FileLineEdit + + Browse... + + + + Warning + + + + Please select a file inside the data directory. + + + + Choose File + + + diff --git a/translations/zh_CN.ts b/translations/zh_CN.ts index 732a5a54..ee8fb1f2 100755 --- a/translations/zh_CN.ts +++ b/translations/zh_CN.ts @@ -2728,4 +2728,23 @@ p, li { white-space: pre-wrap; } 新建 + + FileLineEdit + + Browse... + 浏览... + + + Warning + 警告 + + + Please select a file inside the data directory. + 请选择 data 目录内的文件。 + + + Choose File + 选择文件 + + diff --git a/translations/zh_TW.ts b/translations/zh_TW.ts index 18ac6366..ecc0fd65 100644 --- a/translations/zh_TW.ts +++ b/translations/zh_TW.ts @@ -2728,4 +2728,23 @@ p, li { white-space: pre-wrap; } 新建 + + FileLineEdit + + Browse... + 瀏覽... + + + Warning + 警告 + + + Please select a file inside the data directory. + 請選擇 data 目錄內的檔案。 + + + Choose File + 選擇檔案 + +