void DialogGui::initializeImageFileDialog(QFileDialog &fileDialog, QFileDialog::Options options, QFileDialog::FileMode fm) { fileDialog.setConfirmOverwrite( !(options & QFileDialog::DontConfirmOverwrite) ); fileDialog.setResolveSymlinks( !(options & QFileDialog::DontResolveSymlinks) ); fileDialog.setIconProvider(ensureIconProvider()); fileDialog.setFileMode(fm); }
File FileDialogs::savePlaylist() { QStringList filters; filters << filterByType(File::M3U) << filterByType(File::M3UClean) << filterByType(File::M3UUdpxy) << filterByType(File::CSV) << filterByType(File::JS); QFileDialog dialog; dialog.setAcceptMode(QFileDialog::AcceptSave); dialog.setFileMode(QFileDialog::AnyFile); dialog.setConfirmOverwrite(true); dialog.setNameFilters(filters); QString fileName; File::Type type = File::Unknown; if (dialog.exec()) { fileName = dialog.selectedFiles()[0]; for (int i = 0; i < 50; i++) { if (dialog.selectedNameFilter() == filterByType(File::Type(i))) { type = File::Type(i); } } } File file; file.path = fileName; file.type = type; return file; }
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); } }
void GLWidget::saveImage() { rgbImage temp; if ( rb!=0 ) { rb->lockRead(); int idx=rb->curRead(); FrameData * frame = rb->getPointer ( idx ); VisualizationFrame * vis_frame=(VisualizationFrame *)(frame->map.get("vis_frame")); if (vis_frame !=0 && vis_frame->valid) { temp.copy ( vis_frame->data ); rb->unlockRead(); } else { rb->unlockRead(); return; } } if ( temp.getWidth() > 1 && temp.getHeight() > 1 ) { QFileDialog dialog ( this, "Export image to file...", "", "PNG (*.png)" ); dialog.setConfirmOverwrite ( true ); dialog.setDefaultSuffix ( "png" ); dialog.setAcceptMode ( QFileDialog::AcceptSave ); if ( dialog.exec() ) { if ( dialog.selectedFiles().size() > 0 ) { QString filename=dialog.selectedFiles().at ( 0 ); if ( temp.save ( filename.toStdString() ) ) { QMessageBox::information ( this, "Success","PNG was saved successfully." ); } else { QMessageBox::warning ( this, "Error","Unknown error while saving PNG." ); } } } } }
void NWebView::downloadRequested(QNetworkRequest req) { QString urlString = req.url().toString(); if (urlString == "") { downloadImageAction()->trigger(); return; } if (urlString.startsWith("nnres:")) { int pos = urlString.indexOf(global.attachmentNameDelimeter); QString extension = ""; if (pos > 0) { extension = urlString.mid(pos+global.attachmentNameDelimeter.length()); urlString = urlString.mid(0,pos); } urlString = urlString.mid(6); qint32 lid = urlString.toInt(); ResourceTable resTable(global.db); Resource r; resTable.get(r, lid, false); QString filename; ResourceAttributes attributes; if (r.attributes.isSet()) attributes = r.attributes; if (attributes.fileName.isSet()) filename = attributes.fileName; else filename = urlString + QString(".") + extension; QFileDialog fd; fd.setFileMode(QFileDialog::AnyFile); fd.setWindowTitle(tr("Save File")); fd.setAcceptMode(QFileDialog::AcceptSave); fd.selectFile(filename); fd.setConfirmOverwrite(true); if (fd.exec()) { if (fd.selectedFiles().size() == 0) return; filename = fd.selectedFiles()[0]; QFile newFile(filename); newFile.open(QIODevice::WriteOnly); Data d; if (r.data.isSet()) d = r.data; QByteArray body; if (d.body.isSet()) body = d.body; int size = 0; if (d.size.isSet()) size = d.size; newFile.write(body, size); newFile.close(); return; } } if (urlString.startsWith("file:////")) { if (!req.url().isValid()) return; urlString = urlString.mid(8); QFileDialog fd; fd.setFileMode(QFileDialog::AnyFile); fd.setWindowTitle(tr("Save File")); fd.setAcceptMode(QFileDialog::AcceptSave); QString oldname = urlString; fd.selectFile(urlString.replace(global.fileManager.getDbaDirPath(), "")); fd.setConfirmOverwrite(true); if (fd.exec()) { if (fd.selectedFiles().size() == 0) return; QString newname = fd.selectedFiles()[0]; QFile::remove(urlString); QFile::copy(oldname, newname); return; } } }
/* static */ QString QIFileDialog::getSaveFileName (const QString &aStartWith, const QString &aFilters, QWidget *aParent, const QString &aCaption, QString *aSelectedFilter /* = 0 */, bool aResolveSymlinks /* = true */, bool fConfirmOverwrite /* = false */) { #if defined(VBOX_WS_WIN) && (QT_VERSION < 0x050000) /* Further code (WinAPI call to GetSaveFileName() in other thread) * seems not necessary any more since the MS COM issue has been fixed, * we can just call for the default QFileDialog::getSaveFileName(): */ Q_UNUSED(aResolveSymlinks); QFileDialog::Options o; if (!fConfirmOverwrite) o |= QFileDialog::DontConfirmOverwrite; return QFileDialog::getSaveFileName(aParent, aCaption, aStartWith, aFilters, aSelectedFilter, o); /** * QEvent class reimplementation to carry Win32 API native dialog's * result folder information */ class GetOpenFileNameEvent : public OpenNativeDialogEvent { public: enum { TypeId = QEvent::User + 2 }; GetOpenFileNameEvent (const QString &aResult) : OpenNativeDialogEvent (aResult, (QEvent::Type) TypeId) {} }; /** * QThread class reimplementation to open Win32 API native file dialog */ class Thread : public QThread { public: Thread (QWidget *aParent, QObject *aTarget, const QString &aStartWith, const QString &aFilters, const QString &aCaption, bool fConfirmOverwrite) : mParent (aParent), mTarget (aTarget), mStartWith (aStartWith), mFilters (aFilters), mCaption (aCaption), m_fConfirmOverwrite(fConfirmOverwrite) {} virtual void run() { QString result; QString workDir; QString initSel; QFileInfo fi (mStartWith); if (fi.isDir()) workDir = mStartWith; else { workDir = fi.absolutePath(); initSel = fi.fileName(); } workDir = QDir::toNativeSeparators (workDir); if (!workDir.endsWith ("\\")) workDir += "\\"; QString title = mCaption.isNull() ? tr ("Select a file") : mCaption; QWidget *topParent = windowManager().realParentWindow(mParent ? mParent : windowManager().mainWindowShown()); QString winFilters = winFilter (mFilters); AssertCompile (sizeof (TCHAR) == sizeof (QChar)); TCHAR buf [1024]; if (initSel.length() > 0 && initSel.length() < sizeof (buf)) memcpy (buf, initSel.isNull() ? 0 : initSel.utf16(), (initSel.length() + 1) * sizeof (TCHAR)); else buf [0] = 0; OPENFILENAME ofn; memset (&ofn, 0, sizeof (OPENFILENAME)); ofn.lStructSize = sizeof (OPENFILENAME); ofn.hwndOwner = topParent ? topParent->winId() : 0; ofn.lpstrFilter = (TCHAR *)(winFilters.isNull() ? 0 : winFilters.utf16()); ofn.lpstrFile = buf; ofn.nMaxFile = sizeof (buf) - 1; ofn.lpstrInitialDir = (TCHAR *)(workDir.isNull() ? 0 : workDir.utf16()); ofn.lpstrTitle = (TCHAR *)(title.isNull() ? 0 : title.utf16()); ofn.Flags = (OFN_NOCHANGEDIR | OFN_HIDEREADONLY | OFN_EXPLORER | OFN_ENABLEHOOK | OFN_NOTESTFILECREATE | (m_fConfirmOverwrite ? OFN_OVERWRITEPROMPT : 0)); ofn.lpfnHook = OFNHookProc; if (GetSaveFileName (&ofn)) { result = QString::fromUtf16 ((ushort *) ofn.lpstrFile); } // qt_win_eatMouseMove(); MSG msg = {0, 0, 0, 0, 0, 0, 0}; while (PeekMessage (&msg, 0, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_REMOVE)); if (msg.message == WM_MOUSEMOVE) PostMessage (msg.hwnd, msg.message, 0, msg.lParam); result = result.isEmpty() ? result : QFileInfo (result).absoluteFilePath(); QApplication::postEvent (mTarget, new GetOpenFileNameEvent (result)); } private: QWidget *mParent; QObject *mTarget; QString mStartWith; QString mFilters; QString mCaption; bool m_fConfirmOverwrite; }; if (aSelectedFilter) *aSelectedFilter = QString::null; /* Local event loop to run while waiting for the result from another * thread */ QEventLoop loop; QString startWith = QDir::toNativeSeparators (aStartWith); LoopObject loopObject ((QEvent::Type) GetOpenFileNameEvent::TypeId, loop); if (aParent) aParent->setWindowModality (Qt::WindowModal); Thread openDirThread (aParent, &loopObject, startWith, aFilters, aCaption, fConfirmOverwrite); openDirThread.start(); loop.exec(); openDirThread.wait(); if (aParent) aParent->setWindowModality (Qt::NonModal); return loopObject.result(); #elif defined (VBOX_WS_X11) && (QT_VERSION < 0x040400) /* Here is workaround for Qt4.3 bug with QFileDialog which crushes when * gets initial path as hidden directory if no hidden files are shown. * See http://trolltech.com/developer/task-tracker/index_html?method=entry&id=193483 * for details */ QFileDialog dlg (aParent); dlg.setWindowTitle (aCaption); dlg.setDirectory (aStartWith); dlg.setFilter (aFilters); dlg.setFileMode (QFileDialog::QFileDialog::AnyFile); dlg.setAcceptMode (QFileDialog::AcceptSave); if (aSelectedFilter) dlg.selectFilter (*aSelectedFilter); dlg.setResolveSymlinks (aResolveSymlinks); dlg.setConfirmOverwrite (fConfirmOverwrite); QAction *hidden = dlg.findChild <QAction*> ("qt_show_hidden_action"); if (hidden) { hidden->trigger(); hidden->setVisible (false); } return dlg.exec() == QDialog::Accepted ? dlg.selectedFiles().value (0, "") : QString::null; #elif defined (VBOX_WS_MAC) && (QT_VERSION >= 0x040600) && (QT_VERSION < 0x050000) /* After 4.5 exec ignores the Qt::Sheet flag. * See "New Ways of Using Dialogs" in http://doc.trolltech.com/qq/QtQuarterly30.pdf why. * We want the old behavior for file-save dialog. Unfortunately there is a bug in Qt 4.5.x * which result in showing the native & the Qt dialog at the same time. */ QFileDialog dlg(aParent); dlg.setWindowTitle(aCaption); /* Some predictive algorithm which seems missed in native code. */ QDir dir(aStartWith); while (!dir.isRoot() && !dir.exists()) dir = QDir(QFileInfo(dir.absolutePath()).absolutePath()); const QString strDirectory = dir.absolutePath(); if (!strDirectory.isNull()) dlg.setDirectory(strDirectory); if (strDirectory != aStartWith) dlg.selectFile(QFileInfo(aStartWith).absoluteFilePath()); dlg.setNameFilter(aFilters); dlg.setFileMode(QFileDialog::AnyFile); dlg.setAcceptMode(QFileDialog::AcceptSave); if (aSelectedFilter) dlg.selectFilter(*aSelectedFilter); dlg.setResolveSymlinks(aResolveSymlinks); dlg.setConfirmOverwrite(fConfirmOverwrite); QEventLoop eventLoop; QObject::connect(&dlg, SIGNAL(finished(int)), &eventLoop, SLOT(quit())); dlg.open(); eventLoop.exec(); return dlg.result() == QDialog::Accepted ? dlg.selectedFiles().value(0, QString()) : QString(); #else QFileDialog::Options o; # if defined (VBOX_WS_X11) /** @todo see http://bugs.kde.org/show_bug.cgi?id=210904, make it conditional * when this bug is fixed (xtracker 5167) * Apparently not necessary anymore (xtracker 5748)! */ // if (vboxGlobal().isKWinManaged()) // o |= QFileDialog::DontUseNativeDialog; # endif if (!aResolveSymlinks) o |= QFileDialog::DontResolveSymlinks; if (!fConfirmOverwrite) o |= QFileDialog::DontConfirmOverwrite; return QFileDialog::getSaveFileName (aParent, aCaption, aStartWith, aFilters, aSelectedFilter, o); #endif }