summaryrefslogtreecommitdiff
path: root/src/gui_qt.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui_qt.cc')
-rw-r--r--src/gui_qt.cc81
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,