diff options
| author | Joel Klinghed <the_jk@yahoo.com> | 2017-07-28 22:05:37 +0200 |
|---|---|---|
| committer | Joel Klinghed <the_jk@yahoo.com> | 2017-07-28 22:11:23 +0200 |
| commit | 29d3d1cef5272f5cba1fe573b664ea6059f05eda (patch) | |
| tree | 9a3b346b75cf6464def9c73b8efddc74ae955060 /src/gui_qt.cc | |
| parent | 0898066430e0f2908565a1b4588e50de2d41a256 (diff) | |
Add GuiMain::file_dialog
Diffstat (limited to 'src/gui_qt.cc')
| -rw-r--r-- | src/gui_qt.cc | 81 |
1 files changed, 46 insertions, 35 deletions
diff --git a/src/gui_qt.cc b/src/gui_qt.cc index 77e292e..c032c87 100644 --- a/src/gui_qt.cc +++ b/src/gui_qt.cc @@ -362,6 +362,34 @@ private: std::unordered_map<std::string, std::string> memory_; }; +QString show_file_dialog(QWidget* parent, std::string const& title, + QString const& value, uint8_t flags, + std::vector<GuiFile::Filter> const& filters) { + QString filter; + for (auto const& f : filters) { + if (!filter.isEmpty()) filter.append(";;"); + filter.append(QString::fromStdString(f.name)); + filter.append(" ("); + bool first = true; + for (auto const& mask : f.masks) { + if (first) { + first = false; + } else { + filter.append(' '); + } + filter.append(QString::fromStdString(mask)); + } + filter.append(')'); + } + if (!(flags & GuiFile::FILE_SAVE)) { + return QFileDialog::getOpenFileName( + parent, QString::fromStdString(title), value, filter); + } else { + return QFileDialog::getSaveFileName( + parent, QString::fromStdString(title), value, filter); + } +} + class QtGuiMain : public GuiMain, public QtGuiWindow { public: QtGuiMain(std::string const& title, uint32_t width, uint32_t height) @@ -489,6 +517,14 @@ public: return config_.get(); } + std::string file_dialog(std::string const& title, std::string const& file, + uint8_t flags, + std::vector<GuiFile::Filter> const& filter) override { + auto ret = show_file_dialog(main_.get(), title, QString::fromStdString(file), + flags, filter); + return ret.isNull() ? "" : ret.toStdString(); + } + private: static bool valid_utf8(std::string const& data) { QTextCodec::ConverterState state; @@ -859,7 +895,7 @@ public: std::string const& value, std::string const& description, uint8_t flags, - std::vector<Filter> const& filter) override { + std::vector<GuiFile::Filter> const& filter) override { values_.emplace_back(new FileValue(id, label, description, value, flags, filter)); } @@ -1014,13 +1050,13 @@ protected: struct FileValue : public Value { std::string value_; uint8_t flags_; - std::vector<Filter> filter_; + std::vector<GuiFile::Filter> filter_; QPushButton* button_; FileValue(std::string const& id, std::string const& label, std::string const& description, std::string const& value, - uint8_t flags, std::vector<Filter> const& filter) + uint8_t flags, std::vector<GuiFile::Filter> const& filter) : Value(FILE, id, label, description), value_(value), flags_(flags), filter_(filter), button_(nullptr) { } @@ -1202,36 +1238,11 @@ protected: } void showFileDialog(FileValue* value) { - QString filter; - for (auto const& f : value->filter_) { - if (!filter.isEmpty()) filter.append(";;"); - filter.append(QString::fromStdString(f.name)); - filter.append(" ("); - bool first = true; - for (auto const& mask : f.masks) { - if (first) { - first = false; - } else { - filter.append(' '); - } - filter.append(QString::fromStdString(mask)); - } - filter.append(')'); - } - if (!(value->flags_ & FILE_SAVE)) { - auto file = QFileDialog::getOpenFileName( - dialog_, QString::fromStdString(value->label_), - value->edit_->text(), filter); - if (!file.isNull()) { - value->edit_->setText(file); - } - } else { - auto file = QFileDialog::getSaveFileName( - dialog_, QString::fromStdString(value->label_), - value->edit_->text(), filter); - if (!file.isNull()) { - value->edit_->setText(file); - } + auto file = show_file_dialog(dialog_, value->label_, + value->edit_->text(), value->flags_, + value->filter_); + if (!file.isNull()) { + value->edit_->setText(file); } } @@ -1697,8 +1708,8 @@ GuiForm* GuiForm::create(std::string const& title, } // static -uint8_t const GuiForm::FILE_OPEN = 0; -uint8_t const GuiForm::FILE_SAVE = 1; +uint8_t const GuiFile::FILE_OPEN = 0; +uint8_t const GuiFile::FILE_SAVE = 1; // static GuiFormApply* GuiFormApply::create(std::string const& title, |
