summaryrefslogtreecommitdiffstats
path: root/src/gui/dialogs/qfiledialog_p.h
diff options
context:
space:
mode:
authorQt by Nokia <qt-info@nokia.com>2011-04-27 12:05:43 +0200
committeraxis <qt-info@nokia.com>2011-04-27 12:05:43 +0200
commit38be0d13830efd2d98281c645c3a60afe05ffece (patch)
tree6ea73f3ec77f7d153333779883e8120f82820abe /src/gui/dialogs/qfiledialog_p.h
Initial import from the monolithic Qt.
This is the beginning of revision history for this module. If you want to look at revision history older than this, please refer to the Qt Git wiki for how to use Git history grafting. At the time of writing, this wiki is located here: http://qt.gitorious.org/qt/pages/GitIntroductionWithQt If you have already performed the grafting and you don't see any history beyond this commit, try running "git log" with the "--follow" argument. Branched from the monolithic repo, Qt master branch, at commit 896db169ea224deb96c59ce8af800d019de63f12
Diffstat (limited to 'src/gui/dialogs/qfiledialog_p.h')
-rw-r--r--src/gui/dialogs/qfiledialog_p.h427
1 files changed, 427 insertions, 0 deletions
diff --git a/src/gui/dialogs/qfiledialog_p.h b/src/gui/dialogs/qfiledialog_p.h
new file mode 100644
index 0000000000..882acdd758
--- /dev/null
+++ b/src/gui/dialogs/qfiledialog_p.h
@@ -0,0 +1,427 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QFILEDIALOG_P_H
+#define QFILEDIALOG_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QT_NO_FILEDIALOG
+
+#include "qfiledialog.h"
+#include "private/qdialog_p.h"
+#include "qplatformdefs.h"
+
+#include "qfilesystemmodel_p.h"
+#include <qlistview.h>
+#include <qtreeview.h>
+#include <qcombobox.h>
+#include <qtoolbutton.h>
+#include <qlabel.h>
+#include <qevent.h>
+#include <qlineedit.h>
+#include <qurl.h>
+#include <qstackedwidget.h>
+#include <qdialogbuttonbox.h>
+#include <qabstractproxymodel.h>
+#include <qcompleter.h>
+#include <qpointer.h>
+#include <qdebug.h>
+#include "qsidebar_p.h"
+#include "qfscompleter_p.h"
+#include "private/qguiplatformplugin_p.h"
+
+
+#if defined (Q_OS_UNIX)
+#include <unistd.h>
+#endif
+
+QT_BEGIN_NAMESPACE
+
+class QFileDialogListView;
+class QFileDialogTreeView;
+class QFileDialogLineEdit;
+class QGridLayout;
+class QCompleter;
+class QHBoxLayout;
+class Ui_QFileDialog;
+
+
+struct QFileDialogArgs
+{
+ QFileDialogArgs() : parent(0), mode(QFileDialog::AnyFile) {}
+
+ QWidget *parent;
+ QString caption;
+ QString directory;
+ QString selection;
+ QString filter;
+ QFileDialog::FileMode mode;
+ QFileDialog::Options options;
+};
+
+#define UrlRole (Qt::UserRole + 1)
+
+class Q_AUTOTEST_EXPORT QFileDialogPrivate : public QDialogPrivate
+{
+ Q_DECLARE_PUBLIC(QFileDialog)
+
+public:
+ QFileDialogPrivate();
+
+ void createToolButtons();
+ void createMenuActions();
+ void createWidgets();
+
+ void init(const QString &directory = QString(), const QString &nameFilter = QString(),
+ const QString &caption = QString());
+ bool itemViewKeyboardEvent(QKeyEvent *event);
+ QString getEnvironmentVariable(const QString &string);
+ static QString workingDirectory(const QString &path);
+ static QString initialSelection(const QString &path);
+ QStringList typedFiles() const;
+ QStringList addDefaultSuffixToFiles(const QStringList filesToFix) const;
+ bool removeDirectory(const QString &path);
+
+ inline QModelIndex mapToSource(const QModelIndex &index) const;
+ inline QModelIndex mapFromSource(const QModelIndex &index) const;
+ inline QModelIndex rootIndex() const;
+ inline void setRootIndex(const QModelIndex &index) const;
+ inline QModelIndex select(const QModelIndex &index) const;
+ inline QString rootPath() const;
+
+ QLineEdit *lineEdit() const;
+
+ int maxNameLength(const QString &path) {
+#if defined(Q_OS_UNIX)
+ return ::pathconf(QFile::encodeName(path).data(), _PC_NAME_MAX);
+#elif defined(Q_OS_WIN)
+#ifndef Q_OS_WINCE
+ DWORD maxLength;
+ QString drive = path.left(3);
+ if (::GetVolumeInformation(reinterpret_cast<const wchar_t *>(drive.utf16()), NULL, 0, NULL, &maxLength, NULL, NULL, 0) == FALSE)
+ return -1;
+ return maxLength;
+#else
+ Q_UNUSED(path);
+ return MAX_PATH;
+#endif //Q_OS_WINCE
+#else
+ Q_UNUSED(path);
+#endif
+ return -1;
+ }
+
+ QString basename(const QString &path) const
+ {
+ int separator = QDir::toNativeSeparators(path).lastIndexOf(QDir::separator());
+ if (separator != -1)
+ return path.mid(separator + 1);
+ return path;
+ }
+
+ QDir::Filters filterForMode(QDir::Filters filters) const
+ {
+ if (fileMode == QFileDialog::DirectoryOnly) {
+ filters |= QDir::Drives | QDir::AllDirs | QDir::Dirs;
+ filters &= ~QDir::Files;
+ } else {
+ filters |= QDir::Drives | QDir::AllDirs | QDir::Files | QDir::Dirs;
+ }
+ return filters;
+ }
+
+ QAbstractItemView *currentView() const;
+
+ static inline QString toInternal(const QString &path)
+ {
+#if defined(Q_FS_FAT) || defined(Q_OS_OS2EMX) || defined(Q_OS_SYMBIAN)
+ QString n(path);
+ for (int i = 0; i < (int)n.length(); ++i)
+ if (n[i] == QLatin1Char('\\')) n[i] = QLatin1Char('/');
+#if defined(Q_OS_WINCE)
+ if ((n.size() > 1) && (n.startsWith(QLatin1String("//"))))
+ n = n.mid(1);
+#endif
+ return n;
+#else // the compile should optimize away this
+ return path;
+#endif
+ }
+
+ void setLastVisitedDirectory(const QString &dir);
+ void retranslateWindowTitle();
+ void retranslateStrings();
+ void emitFilesSelected(const QStringList &files);
+
+ void _q_goHome();
+ void _q_pathChanged(const QString &);
+ void _q_navigateBackward();
+ void _q_navigateForward();
+ void _q_navigateToParent();
+ void _q_createDirectory();
+ void _q_showListView();
+ void _q_showDetailsView();
+ void _q_showContextMenu(const QPoint &position);
+ void _q_renameCurrent();
+ void _q_deleteCurrent();
+ void _q_showHidden();
+ void _q_showHeader(QAction *);
+ void _q_updateOkButton();
+ void _q_currentChanged(const QModelIndex &index);
+ void _q_enterDirectory(const QModelIndex &index);
+ void _q_goToDirectory(const QString &);
+ void _q_useNameFilter(int index);
+ void _q_selectionChanged();
+ void _q_goToUrl(const QUrl &url);
+ void _q_autoCompleteFileName(const QString &);
+ void _q_rowsInserted(const QModelIndex & parent);
+ void _q_fileRenamed(const QString &path, const QString oldName, const QString newName);
+
+ // layout
+#ifndef QT_NO_PROXYMODEL
+ QAbstractProxyModel *proxyModel;
+#endif
+
+ // data
+ QStringList watching;
+ QFileSystemModel *model;
+
+#ifndef QT_NO_FSCOMPLETER
+ QFSCompleter *completer;
+#endif //QT_NO_FSCOMPLETER
+
+ QFileDialog::FileMode fileMode;
+ QFileDialog::AcceptMode acceptMode;
+ bool confirmOverwrite;
+ QString defaultSuffix;
+ QString setWindowTitle;
+
+ QStringList currentHistory;
+ int currentHistoryLocation;
+
+ QAction *renameAction;
+ QAction *deleteAction;
+ QAction *showHiddenAction;
+ QAction *newFolderAction;
+
+ bool useDefaultCaption;
+ bool defaultFileTypes;
+ bool fileNameLabelExplicitlySat;
+ QStringList nameFilters;
+
+ // Members for using native dialogs:
+ bool nativeDialogInUse;
+ // setVisible_sys returns true if it ends up showing a native
+ // dialog. Returning false means that a non-native dialog must be
+ // used instead.
+ bool canBeNativeDialog();
+ bool setVisible_sys(bool visible);
+ void deleteNativeDialog_sys();
+ QDialog::DialogCode dialogResultCode_sys();
+
+ void setDirectory_sys(const QString &directory);
+ QString directory_sys() const;
+ void selectFile_sys(const QString &filename);
+ QStringList selectedFiles_sys() const;
+ void setFilter_sys();
+ void setNameFilters_sys(const QStringList &filters);
+ void selectNameFilter_sys(const QString &filter);
+ QString selectedNameFilter_sys() const;
+ //////////////////////////////////////////////
+
+#if defined(Q_WS_MAC)
+ void *mDelegate;
+#ifndef QT_MAC_USE_COCOA
+ NavDialogRef mDialog;
+ bool mDialogStarted;
+ bool mDialogClosed;
+ QString mCurrentLocation;
+ QString mCurrentSelection;
+ QStringList mCurrentSelectionList;
+
+ struct QtMacFilterName {
+ QString description;
+ QString regexp;
+ QString filter;
+ };
+ struct QtMacNavFilterInfo {
+ QtMacNavFilterInfo() : currentSelection(-1) {}
+ int currentSelection;
+ QList<QtMacFilterName> filters;
+ } filterInfo;
+
+ static void qt_mac_filedialog_event_proc(const NavEventCallbackMessage msg, NavCBRecPtr p,
+ NavCallBackUserData data);
+ static Boolean qt_mac_filedialog_filter_proc(AEDesc *theItem, void *info, void *data,
+ NavFilterModes);
+ bool showCarbonNavServicesDialog();
+ bool hideCarbonNavServicesDialog();
+ void createNavServicesDialog();
+#else
+ bool showCocoaFilePanel();
+ bool hideCocoaFilePanel();
+#endif
+ void createNSOpenSavePanelDelegate();
+ void QNSOpenSavePanelDelegate_selectionChanged(const QString &newPath);
+ void QNSOpenSavePanelDelegate_panelClosed(bool accepted);
+ void QNSOpenSavePanelDelegate_directoryEntered(const QString &newDir);
+ void QNSOpenSavePanelDelegate_filterSelected(int menuIndex);
+ void _q_macRunNativeAppModalPanel();
+ void mac_nativeDialogModalHelp();
+#endif
+
+ QScopedPointer<Ui_QFileDialog> qFileDialogUi;
+
+ QString acceptLabel;
+
+ QPointer<QObject> receiverToDisconnectOnClose;
+ QByteArray memberToDisconnectOnClose;
+ QByteArray signalToDisconnectOnClose;
+
+ QFileDialog::Options opts;
+
+ ~QFileDialogPrivate();
+
+private:
+ Q_DISABLE_COPY(QFileDialogPrivate)
+};
+
+class QFileDialogLineEdit : public QLineEdit
+{
+public:
+ QFileDialogLineEdit(QWidget *parent = 0) : QLineEdit(parent), hideOnEsc(false), d_ptr(0){}
+ void init(QFileDialogPrivate *d_pointer) {d_ptr = d_pointer; }
+ void keyPressEvent(QKeyEvent *e);
+ bool hideOnEsc;
+private:
+ QFileDialogPrivate *d_ptr;
+};
+
+class QFileDialogComboBox : public QComboBox
+{
+public:
+ QFileDialogComboBox(QWidget *parent = 0) : QComboBox(parent), urlModel(0) {}
+ void init(QFileDialogPrivate *d_pointer);
+ void showPopup();
+ void setHistory(const QStringList &paths);
+ QStringList history() const { return m_history; }
+ void paintEvent(QPaintEvent *);
+
+private:
+ QUrlModel *urlModel;
+ QFileDialogPrivate *d_ptr;
+ QStringList m_history;
+};
+
+class QFileDialogListView : public QListView
+{
+public:
+ QFileDialogListView(QWidget *parent = 0);
+ void init(QFileDialogPrivate *d_pointer);
+ QSize sizeHint() const;
+protected:
+ void keyPressEvent(QKeyEvent *e);
+private:
+ QFileDialogPrivate *d_ptr;
+};
+
+class QFileDialogTreeView : public QTreeView
+{
+public:
+ QFileDialogTreeView(QWidget *parent);
+ void init(QFileDialogPrivate *d_pointer);
+ QSize sizeHint() const;
+
+protected:
+ void keyPressEvent(QKeyEvent *e);
+private:
+ QFileDialogPrivate *d_ptr;
+};
+
+inline QModelIndex QFileDialogPrivate::mapToSource(const QModelIndex &index) const {
+#ifdef QT_NO_PROXYMODEL
+ return index;
+#else
+ return proxyModel ? proxyModel->mapToSource(index) : index;
+#endif
+}
+inline QModelIndex QFileDialogPrivate::mapFromSource(const QModelIndex &index) const {
+#ifdef QT_NO_PROXYMODEL
+ return index;
+#else
+ return proxyModel ? proxyModel->mapFromSource(index) : index;
+#endif
+}
+
+inline QString QFileDialogPrivate::rootPath() const {
+ return model->rootPath();
+}
+
+#ifndef Q_WS_MAC
+ // Dummies for platforms that don't use native dialogs:
+ inline void QFileDialogPrivate::deleteNativeDialog_sys() { qt_guiPlatformPlugin()->fileDialogDelete(q_func()); }
+ inline bool QFileDialogPrivate::setVisible_sys(bool visible) { return qt_guiPlatformPlugin()->fileDialogSetVisible(q_func(), visible); }
+ inline QDialog::DialogCode QFileDialogPrivate::dialogResultCode_sys(){ return qt_guiPlatformPlugin()->fileDialogResultCode(q_func()); }
+ inline void QFileDialogPrivate::setDirectory_sys(const QString &directory) { qt_guiPlatformPlugin()->fileDialogSetDirectory(q_func(), directory); }
+ inline QString QFileDialogPrivate::directory_sys() const { return qt_guiPlatformPlugin()->fileDialogDirectory(q_func()); }
+ inline void QFileDialogPrivate::selectFile_sys(const QString &filename) { qt_guiPlatformPlugin()->fileDialogSelectFile(q_func(), filename); }
+ inline QStringList QFileDialogPrivate::selectedFiles_sys() const { return qt_guiPlatformPlugin()->fileDialogSelectedFiles(q_func()); }
+ inline void QFileDialogPrivate::setFilter_sys() { qt_guiPlatformPlugin()->fileDialogSetFilter(q_func()); }
+ inline void QFileDialogPrivate::setNameFilters_sys(const QStringList &filters) { qt_guiPlatformPlugin()->fileDialogSetNameFilters(q_func(), filters); }
+ inline void QFileDialogPrivate::selectNameFilter_sys(const QString &filter) { qt_guiPlatformPlugin()->fileDialogSelectNameFilter(q_func(), filter); }
+ inline QString QFileDialogPrivate::selectedNameFilter_sys() const { return qt_guiPlatformPlugin()->fileDialogSelectedNameFilter(q_func()); }
+#endif
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_FILEDIALOG
+
+#endif // QFILEDIALOG_P_H