From 14c76e247f982b153adba005283826a2b722f89f Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 16 Apr 2017 21:33:38 +0200 Subject: Hacky filebrowser-as-a-Dialog implementation. --- plugingui/filebrowser.cc | 21 +++++++++++++++++++++ plugingui/filebrowser.h | 12 ++++++++++++ plugingui/tests/filebrowsertest.cc | 20 +++++++++++++++++++- 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/plugingui/filebrowser.cc b/plugingui/filebrowser.cc index 50e34c3..3d3df99 100644 --- a/plugingui/filebrowser.cc +++ b/plugingui/filebrowser.cc @@ -69,6 +69,8 @@ FileBrowser::FileBrowser(Widget* parent) CONNECT(&lineedit, enterPressedNotifier, this, &FileBrowser::handleKeyEvent); CONNECT(&listbox, selectionNotifier, this, &FileBrowser::listSelectionChanged); + CONNECT(this, fileSelectNotifier, + this, &FileBrowser::select); btn_sel.setText("Select"); CONNECT(&btn_sel, clickNotifier, this, &FileBrowser::selectButtonClicked); @@ -166,6 +168,15 @@ void FileBrowser::handleKeyEvent() void FileBrowser::cancel() { + has_filename = false; + hide(); + fileSelectCancelNotifier(); +} + +void FileBrowser::select(const std::string& file) +{ + has_filename = true; + filename = file; hide(); } @@ -255,4 +266,14 @@ void FileBrowser::changeDir() listbox.addItems(items); } +std::string FileBrowser::getFilename() const +{ + return filename; +} + +bool FileBrowser::hasFilename() const +{ + return has_filename; +} + } // GUI:: diff --git a/plugingui/filebrowser.h b/plugingui/filebrowser.h index 7b31864..ff8a7e8 100644 --- a/plugingui/filebrowser.h +++ b/plugingui/filebrowser.h @@ -49,12 +49,20 @@ public: void setPath(const std::string& path); Notifier fileSelectNotifier; // (const std::string& path) + Notifier<> fileSelectCancelNotifier; // From Widget: bool isFocusable() override { return true; } virtual void repaintEvent(RepaintEvent* repaintEvent) override; virtual void resize(std::size_t width, std::size_t height) override; + //! Return the filename selected in the browser. + std::string getFilename() const; + + //! Returns true if the filebrowser has a selection, false if the window was + //! closed or the cancel button was clicked. + bool hasFilename() const; + private: void listSelectionChanged(); void selectButtonClicked(); @@ -68,6 +76,7 @@ private: #endif void cancel(); + void select(const std::string& file); void changeDir(); Label lbl_path; @@ -79,6 +88,9 @@ private: Button btn_esc; Image back; + + bool has_filename{false}; + std::string filename; }; } // GUI:: diff --git a/plugingui/tests/filebrowsertest.cc b/plugingui/tests/filebrowsertest.cc index cfe5aa2..c558fab 100644 --- a/plugingui/tests/filebrowsertest.cc +++ b/plugingui/tests/filebrowsertest.cc @@ -53,6 +53,14 @@ public: CONNECT(file_browser.eventHandler(), closeNotifier, this, &TestWindow::dialogCloseEventHandler); + + CONNECT(&file_browser, fileSelectNotifier, + this, &TestWindow::fileSelected); + + CONNECT(&file_browser, fileSelectCancelNotifier, + this, &TestWindow::fileCanceled); + + button.move(0, 0); button.resize(120, 30); button.setText("Browse..."); @@ -65,6 +73,16 @@ public: this, &TestWindow::dialogShow); } + void fileSelected(const std::string& filename) + { + label.setText(filename); + } + + void fileCanceled() + { + label.setText("[Canceled]"); + } + void closeEventHandler() { closing = true; @@ -78,7 +96,7 @@ public: void dialogShow() { file_browser.show(); - //file_browser.resize(300, 300); + file_browser.resize(300, 300); } bool processEvents() -- cgit v1.2.3