From 0175008ceba01666449657086ca036fc59e0e6c7 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 13 Dec 2019 22:43:47 +0100 Subject: [PATCH] [skip ci] Implement AcceptMode for FileChooser to also allow to define an output file --- src/Gui/FileDialog.cpp | 10 ++++++++-- src/Gui/FileDialog.h | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/Gui/FileDialog.cpp b/src/Gui/FileDialog.cpp index a8f6d91cfb4d..79c957c097f0 100644 --- a/src/Gui/FileDialog.cpp +++ b/src/Gui/FileDialog.cpp @@ -619,7 +619,10 @@ QString FileIconProvider::type(const QFileInfo & info) const * Constructs a file chooser called \a name with the parent \a parent. */ FileChooser::FileChooser ( QWidget * parent ) - : QWidget(parent), md( File ), _filter( QString::null ) + : QWidget(parent) + , md( File ) + , accMode( AcceptOpen ) + , _filter( QString::null ) { QHBoxLayout *layout = new QHBoxLayout( this ); layout->setMargin( 0 ); @@ -710,7 +713,10 @@ void FileChooser::chooseFile() QString fn; if ( mode() == File ) { - fn = QFileDialog::getOpenFileName( this, tr( "Select a file" ), prechosenDirectory, _filter,0,dlgOpt ); + if (acceptMode() == AcceptOpen) + fn = QFileDialog::getOpenFileName(this, tr( "Select a file" ), prechosenDirectory, _filter, 0, dlgOpt); + else + fn = QFileDialog::getSaveFileName(this, tr( "Select a file" ), prechosenDirectory, _filter, 0, dlgOpt); } else { QFileDialog::Options option = QFileDialog::ShowDirsOnly | dlgOpt; fn = QFileDialog::getExistingDirectory( this, tr( "Select a directory" ), prechosenDirectory,option ); diff --git a/src/Gui/FileDialog.h b/src/Gui/FileDialog.h index fe7578fc395c..a9602e06b279 100644 --- a/src/Gui/FileDialog.h +++ b/src/Gui/FileDialog.h @@ -138,12 +138,15 @@ class GuiExport FileChooser : public QWidget Q_ENUMS( Mode ) Q_PROPERTY( Mode mode READ mode WRITE setMode ) + Q_ENUMS( AcceptMode ) + Q_PROPERTY( AcceptMode acceptMode READ acceptMode WRITE setAcceptMode ) Q_PROPERTY( QString fileName READ fileName WRITE setFileName ) Q_PROPERTY( QString filter READ filter WRITE setFilter ) Q_PROPERTY( QString buttonText READ buttonText WRITE setButtonText ) public: enum Mode { File, Directory }; + enum AcceptMode { AcceptOpen, AcceptSave }; FileChooser ( QWidget * parent = 0 ); virtual ~FileChooser(); @@ -169,6 +172,19 @@ class GuiExport FileChooser : public QWidget */ QString buttonText() const; + /** + * Sets the accept mode. + */ + void setAcceptMode(AcceptMode mode) { + accMode = mode; + } + /** + * Returns the accept mode. + */ + AcceptMode acceptMode() const { + return accMode; + } + public Q_SLOTS: virtual void setFileName( const QString &fn ); virtual void setMode( Mode m ); @@ -192,6 +208,7 @@ private Q_SLOTS: QFileSystemModel *fs_model; QPushButton *button; Mode md; + AcceptMode accMode; QString _filter; };