diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index 6b7fcb884..1629c026a 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -571,28 +571,8 @@ bool Document::saveAs(void) getMainWindow()->showMessage(QObject::tr("Save document under new filename...")); QString exe = qApp->applicationName(); - QString fn = QFileDialog::getSaveFileName(getMainWindow(), QObject::tr("Save %1 Document").arg(exe), - FileDialog::getWorkingDirectory(), QObject::tr("%1 document (*.FCStd)").arg(exe)); - if (!fn.isEmpty()) { - FileDialog::setWorkingDirectory(fn); - QString file = fn.toLower(); - if (!file.endsWith(QLatin1String(".fcstd"))) { - fn += QLatin1String(".fcstd"); - QFileInfo fi; - fi.setFile(fn); - if (fi.exists()) { - // if we auto-append the extension make sure that we don't override an existing file - int ret = QMessageBox::question(getMainWindow(), QObject::tr("Save As"), - QObject::tr("%1 already exists.\n" - "Do you want to replace it?").arg(fn), - QMessageBox::Yes|QMessageBox::Default, - QMessageBox::No|QMessageBox::Escape); - if (ret != QMessageBox::Yes) - fn = QString(); - } - } - } - + QString fn = FileDialog::getSaveFileName(getMainWindow(), QObject::tr("Save %1 Document").arg(exe), + QString(), QObject::tr("%1 document (*.FCStd)").arg(exe)); if (!fn.isEmpty()) { QFileInfo fi; fi.setFile(fn); diff --git a/src/Gui/FileDialog.cpp b/src/Gui/FileDialog.cpp index 028501982..46b044aa6 100644 --- a/src/Gui/FileDialog.cpp +++ b/src/Gui/FileDialog.cpp @@ -32,6 +32,7 @@ # include # include # include +# include # include #endif @@ -64,7 +65,7 @@ void FileDialog::onSelectedFilter(const QString& filter) QString suf = selectedFilter(); if (rx.indexIn(suf) >= 0) { suf = rx.cap(1); - setDefaultSuffix(suf); + setDefaultSuffix(suf.toLower()); } } @@ -117,12 +118,16 @@ QString FileDialog::getSaveFileName (QWidget * parent, const QString & caption, urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::DesktopLocation)); urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation)); urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::HomeLocation)); + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::MusicLocation)); + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::PicturesLocation)); + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::MoviesLocation)); urls << QUrl::fromLocalFile(getWorkingDirectory()); QString file; FileDialog dlg(parent); dlg.setWindowTitle(windowTitle); dlg.setSidebarUrls(urls); + dlg.setIconProvider(new FileIconProvider()); dlg.setFileMode(QFileDialog::AnyFile); dlg.setAcceptMode(QFileDialog::AcceptSave); dlg.setDirectory(dirName); @@ -183,7 +188,36 @@ QString FileDialog::getOpenFileName(QWidget * parent, const QString & caption, c #if defined(FC_OS_MACOSX) options |= QFileDialog::DontUseNativeDialog; #endif + +#if defined(FC_OS_LINUX) + QList urls; + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::DesktopLocation)); + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation)); + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::HomeLocation)); + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::MusicLocation)); + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::PicturesLocation)); + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::MoviesLocation)); + urls << QUrl::fromLocalFile(getWorkingDirectory()); + + QString file; + FileDialog dlg(parent); + dlg.setWindowTitle(windowTitle); + dlg.setSidebarUrls(urls); + dlg.setIconProvider(new FileIconProvider()); + dlg.setFileMode(QFileDialog::ExistingFile); + dlg.setAcceptMode(QFileDialog::AcceptOpen); + dlg.setDirectory(dirName); + dlg.setOptions(options); + dlg.setFilters(filter.split(QLatin1String(";;"))); + dlg.setNameFilterDetailsVisible(true); + if (dlg.exec() == QDialog::Accepted) { + if (selectedFilter) + *selectedFilter = dlg.selectedFilter(); + file = dlg.selectedFiles().front(); + } +#else QString file = QFileDialog::getOpenFileName(parent, windowTitle, dirName, filter, selectedFilter, options); +#endif if (!file.isEmpty()) { setWorkingDirectory(file); return file; @@ -209,7 +243,36 @@ QStringList FileDialog::getOpenFileNames (QWidget * parent, const QString & capt #if defined(FC_OS_MACOSX) options |= QFileDialog::DontUseNativeDialog; #endif + +#if defined(FC_OS_LINUX) + QList urls; + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::DesktopLocation)); + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation)); + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::HomeLocation)); + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::MusicLocation)); + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::PicturesLocation)); + urls << QUrl::fromLocalFile(QDesktopServices::storageLocation(QDesktopServices::MoviesLocation)); + urls << QUrl::fromLocalFile(getWorkingDirectory()); + + QStringList files; + FileDialog dlg(parent); + dlg.setWindowTitle(windowTitle); + dlg.setSidebarUrls(urls); + dlg.setIconProvider(new FileIconProvider()); + dlg.setFileMode(QFileDialog::ExistingFiles); + dlg.setAcceptMode(QFileDialog::AcceptOpen); + dlg.setDirectory(dirName); + dlg.setOptions(options); + dlg.setFilters(filter.split(QLatin1String(";;"))); + dlg.setNameFilterDetailsVisible(true); + if (dlg.exec() == QDialog::Accepted) { + if (selectedFilter) + *selectedFilter = dlg.selectedFilter(); + files = dlg.selectedFiles(); + } +#else QStringList files = QFileDialog::getOpenFileNames(parent, windowTitle, dirName, filter, selectedFilter, options); +#endif if (!files.isEmpty()) { setWorkingDirectory(files.front()); } @@ -376,17 +439,17 @@ FileIconProvider::~FileIconProvider() { } -QIcon FileIconProvider::icon ( IconType type ) const +QIcon FileIconProvider::icon(IconType type) const { return QFileIconProvider::icon(type); } -QIcon FileIconProvider::icon ( const QFileInfo & info ) const +QIcon FileIconProvider::icon(const QFileInfo & info) const { return QFileIconProvider::icon(info); } -QString FileIconProvider::type ( const QFileInfo & info ) const +QString FileIconProvider::type(const QFileInfo & info) const { return QFileIconProvider::type(info); } diff --git a/src/Gui/FileDialog.h b/src/Gui/FileDialog.h index 56e0717b2..ddca6a647 100644 --- a/src/Gui/FileDialog.h +++ b/src/Gui/FileDialog.h @@ -113,9 +113,9 @@ public: FileIconProvider(); ~FileIconProvider(); - QIcon icon ( IconType type ) const; - QIcon icon ( const QFileInfo & info ) const; - QString type ( const QFileInfo & info ) const; + QIcon icon(IconType type) const; + QIcon icon(const QFileInfo & info) const; + QString type(const QFileInfo & info) const; }; // ----------------------------------------------------------------------