QString ShowSaveFileDialog(QWidget* parent, const QString& title, const QString& directory, const QString& filter) { #if defined(OS_WIN) || defined(OS_MACOSX) 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.setNameFilter(filters.first()); if (filter_regex.indexIn(filters.first()) != -1) { dialog.setDefaultSuffix(filter_regex.cap(1)); } } 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 }
void dtkPlotViewToolBar::onExport(void) { const QList<QByteArray> imageFormats = QImageWriter::supportedImageFormats(); QStringList filters; filters += "PDF Documents (*.pdf)"; #ifndef QWT_NO_SVG filters += "SVG Documents (*.svg)"; #endif filters += "Postscript Documents (*.ps)"; for(int i = 0; i < imageFormats.size(); i++) { QString imageFilter; imageFilter += imageFormats[i].toUpper(); imageFilter += " (*."; imageFilter += imageFormats[i]; imageFilter += ")"; filters += imageFilter; } QFileDialog *dialog = new QFileDialog(0, "Export plot", QDir::homePath(), filters.join(";;")); dialog->setStyleSheet("background-color: none ; color: none; background: none;"); dialog->setAcceptMode(QFileDialog::AcceptSave); dialog->setConfirmOverwrite(true); dialog->setFileMode(QFileDialog::AnyFile); QRegExp filter_regex(QLatin1String("(?:^\\*\\.(?!.*\\()|\\(\\*\\.)(\\w+)")); if (dialog->exec() == QDialog::Accepted) { QString fileName = dialog->selectedFiles().first(); QFileInfo info(fileName); if (info.suffix().isEmpty() && !dialog->selectedNameFilter().isEmpty()) { if (filter_regex.indexIn(dialog->selectedNameFilter()) != -1) { QString extension = filter_regex.cap(1); fileName += QLatin1String(".") + extension; } } this->onExport(fileName); } }
Filter::Filter( const std::string& str ) : m_str( str ) { { // option boost::smatch m; const char* e = "(?x)" "(^[\t]+)" "<Filter .+? >" ; if ( boost::regex_search( m_str, m, Utility::create_regex(e) ) ) { m_options = Utility::extract_options_from_string( m.str() ); m_indent = m.str(1); //Utility::output_options( std::cout, m_options ); } } // next level tabs size_t tabs = m_indent.size() + 1; { std::stringstream filter_regex_strm; filter_regex_strm << "(?x)" << "^[\t]{" << tabs << "} <Filter .+? >" << ".+?" << "^[\t]{" << tabs << "} </Filter>" ; boost::regex filter_regex( filter_regex_strm.str() ); boost::sregex_iterator it( m_str.begin(), m_str.end(), filter_regex ); boost::sregex_iterator end; for ( ; it != end; ++it ) { //std::cout << it->str() << std::endl; FilterPtr filter( new Filter(it->str()) ); m_filters.push_back( filter ); } } { std::stringstream file_regex_strm; file_regex_strm << "(?x)" << "^[\t]{" << tabs << "} <File \\b .+? >" << ".+?" << "^[\t]{" << tabs << "} </File>" ; boost::regex file_regex( file_regex_strm.str() ); boost::sregex_iterator it( m_str.begin(), m_str.end(), file_regex ); boost::sregex_iterator end; for ( ; it != end; ++it ) { //std::cout << it->str() << std::endl; FilePtr file( new File(it->str()) ); m_files.push_back( file ); } } }