diff --git a/src/lib_gui/qt/graphics/QtGraphicsView.cpp b/src/lib_gui/qt/graphics/QtGraphicsView.cpp index ae9293d4..57a0d5f5 100644 --- a/src/lib_gui/qt/graphics/QtGraphicsView.cpp +++ b/src/lib_gui/qt/graphics/QtGraphicsView.cpp @@ -244,9 +244,45 @@ void QtGraphicsView::stopTimer() m_timer->stop(); } +QString ShowSaveFileDialog(QWidget *parent, + const QString &title, + const QString &directory, + const QString &filter) { +#if defined(Q_WS_WIN) || defined(Q_WS_MAC) + return QFileDialog::getSaveFileName(parent, + title, + directory, + filter); +#else + QFileDialog dialog(parent, title, directory, filter); + if (parent) { + dialog.setWindowModality(Qt::WindowModal); + } + QRegExp filter_regex(QLatin1String("(?:^\\*\\.(?!.*\\()|\\(\\*\\.)(\\w+)")); + QStringList filters = filter.split(QLatin1String(";;")); + if (!filters.isEmpty()) { + dialog.setNameFilters(filters); + } + dialog.setAcceptMode(QFileDialog::AcceptSave); + if (dialog.exec() == QDialog::Accepted) { + QString file_name = dialog.selectedFiles().first(); + QFileInfo info(file_name); + if (info.suffix().isEmpty() && !dialog.selectedNameFilter().isEmpty()) { + if (filter_regex.indexIn(dialog.selectedNameFilter()) != -1) { + QString extension = filter_regex.cap(1); + file_name += QLatin1String(".") + extension; + } + } + return file_name; + } else { + return QString(); + } +#endif // Q_WS_MAC || Q_WS_WIN +} + void QtGraphicsView::exportGraph() { - QString fileName = QFileDialog::getSaveFileName( + QString fileName = ShowSaveFileDialog( this, "Save image", QDir::homePath(), "PNG (*.png);;JPEG (*.JPEG);;BMP Files (*.bmp)"); if (!fileName.isNull())