117 - (void)updateProperties; |
117 - (void)updateProperties; |
118 - (QStringList)acceptableExtensionsForSave; |
118 - (QStringList)acceptableExtensionsForSave; |
119 - (QString)removeExtensions:(const QString &)filter; |
119 - (QString)removeExtensions:(const QString &)filter; |
120 - (void)createTextField; |
120 - (void)createTextField; |
121 - (void)createPopUpButton:(const QString &)selectedFilter hideDetails:(BOOL)hideDetails; |
121 - (void)createPopUpButton:(const QString &)selectedFilter hideDetails:(BOOL)hideDetails; |
|
122 - (QStringList)findStrippedFilterWithVisualFilterName:(QString)name; |
122 - (void)createAccessory; |
123 - (void)createAccessory; |
123 |
124 |
124 @end |
125 @end |
125 |
126 |
126 @implementation QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) |
127 @implementation QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) |
127 |
128 |
128 - (id)initWithAcceptMode:(QT_PREPEND_NAMESPACE(QFileDialog::AcceptMode))acceptMode |
129 - (id)initWithAcceptMode:(QT_PREPEND_NAMESPACE(QFileDialog::AcceptMode))acceptMode |
129 title:(const QString &)title |
130 title:(const QString &)title |
130 nameFilters:(const QStringList &)nameFilters |
|
131 selectedNameFilter:(const QString &)selectedNameFilter |
|
132 hideNameFilterDetails:(bool)hideNameFilterDetails |
131 hideNameFilterDetails:(bool)hideNameFilterDetails |
133 qDirFilter:(QT_PREPEND_NAMESPACE(QDir::Filters))qDirFilter |
132 qDirFilter:(QT_PREPEND_NAMESPACE(QDir::Filters))qDirFilter |
134 fileOptions:(QT_PREPEND_NAMESPACE(QFileDialog::Options))fileOptions |
133 fileOptions:(QT_PREPEND_NAMESPACE(QFileDialog::Options))fileOptions |
135 fileMode:(QT_PREPEND_NAMESPACE(QFileDialog::FileMode))fileMode |
134 fileMode:(QT_PREPEND_NAMESPACE(QFileDialog::FileMode))fileMode |
136 selectFile:(const QString &)selectFile |
135 selectFile:(const QString &)selectFile |
156 mConfirmOverwrite = confirm; |
155 mConfirmOverwrite = confirm; |
157 mReturnCode = -1; |
156 mReturnCode = -1; |
158 mPriv = priv; |
157 mPriv = priv; |
159 mLastFilterCheckPath = new QString; |
158 mLastFilterCheckPath = new QString; |
160 mQDirFilterEntryList = new QStringList; |
159 mQDirFilterEntryList = new QStringList; |
161 mNameFilterDropDownList = new QStringList(nameFilters); |
160 mNameFilterDropDownList = new QStringList(priv->nameFilters); |
162 mSelectedNameFilter = new QStringList(qt_clean_filter_list(selectedNameFilter)); |
161 QString selectedVisualNameFilter = priv->qFileDialogUi->fileTypeCombo->currentText(); |
|
162 mSelectedNameFilter = new QStringList([self findStrippedFilterWithVisualFilterName:selectedVisualNameFilter]); |
|
163 |
163 QFileInfo sel(selectFile); |
164 QFileInfo sel(selectFile); |
164 if (sel.isDir()){ |
165 if (sel.isDir()){ |
165 mCurrentDir = [qt_mac_QStringToNSString(sel.absoluteFilePath()) retain]; |
166 mCurrentDir = [qt_mac_QStringToNSString(sel.absoluteFilePath()) retain]; |
166 mCurrentSelection = new QString; |
167 mCurrentSelection = new QString; |
167 } else { |
168 } else { |
168 mCurrentDir = [qt_mac_QStringToNSString(sel.absolutePath()) retain]; |
169 mCurrentDir = [qt_mac_QStringToNSString(sel.absolutePath()) retain]; |
169 mCurrentSelection = new QString(sel.absoluteFilePath()); |
170 mCurrentSelection = new QString(sel.absoluteFilePath()); |
170 } |
171 } |
|
172 |
171 [mSavePanel setTitle:qt_mac_QStringToNSString(title)]; |
173 [mSavePanel setTitle:qt_mac_QStringToNSString(title)]; |
172 [self createPopUpButton:selectedNameFilter hideDetails:hideNameFilterDetails]; |
174 [self createPopUpButton:selectedVisualNameFilter hideDetails:hideNameFilterDetails]; |
173 [self createTextField]; |
175 [self createTextField]; |
174 [self createAccessory]; |
176 [self createAccessory]; |
175 [mSavePanel setAccessoryView:mNameFilterDropDownList->size() > 1 ? mAccessoryView : nil]; |
177 [mSavePanel setAccessoryView:mNameFilterDropDownList->size() > 1 ? mAccessoryView : nil]; |
176 |
178 |
177 if (mPriv){ |
179 if (mPriv){ |
348 - (void)filterChanged:(id)sender |
350 - (void)filterChanged:(id)sender |
349 { |
351 { |
350 // This mDelegate function is called when the _name_ filter changes. |
352 // This mDelegate function is called when the _name_ filter changes. |
351 Q_UNUSED(sender); |
353 Q_UNUSED(sender); |
352 QString selection = mNameFilterDropDownList->value([mPopUpButton indexOfSelectedItem]); |
354 QString selection = mNameFilterDropDownList->value([mPopUpButton indexOfSelectedItem]); |
353 *mSelectedNameFilter = QT_PREPEND_NAMESPACE(qt_clean_filter_list)(selection); |
355 *mSelectedNameFilter = [self findStrippedFilterWithVisualFilterName:selection]; |
354 [mSavePanel validateVisibleColumns]; |
356 [mSavePanel validateVisibleColumns]; |
355 [self updateProperties]; |
357 [self updateProperties]; |
356 if (mPriv) |
358 if (mPriv) |
357 mPriv->QNSOpenSavePanelDelegate_filterSelected([mPopUpButton indexOfSelectedItem]); |
359 mPriv->QNSOpenSavePanelDelegate_filterSelected([mPopUpButton indexOfSelectedItem]); |
358 } |
360 } |
495 [mPopUpButton addItemWithTitle:QT_PREPEND_NAMESPACE(qt_mac_QStringToNSString)(filter)]; |
497 [mPopUpButton addItemWithTitle:QT_PREPEND_NAMESPACE(qt_mac_QStringToNSString)(filter)]; |
496 if (filters->at(i).startsWith(selectedFilter)) |
498 if (filters->at(i).startsWith(selectedFilter)) |
497 [mPopUpButton selectItemAtIndex:i]; |
499 [mPopUpButton selectItemAtIndex:i]; |
498 } |
500 } |
499 } |
501 } |
|
502 } |
|
503 |
|
504 - (QStringList) findStrippedFilterWithVisualFilterName:(QString)name |
|
505 { |
|
506 for (int i=0; i<mNameFilterDropDownList->size(); ++i) { |
|
507 if (mNameFilterDropDownList->at(i).startsWith(name)) |
|
508 return qt_clean_filter_list(mNameFilterDropDownList->at(i)); |
|
509 } |
|
510 return QStringList(); |
500 } |
511 } |
501 |
512 |
502 - (void)createAccessory |
513 - (void)createAccessory |
503 { |
514 { |
504 NSRect accessoryRect = { { 0.0, 0.0 }, { 450.0, 33.0 } }; |
515 NSRect accessoryRect = { { 0.0, 0.0 }, { 450.0, 33.0 } }; |
780 QFileInfo fi(base); |
791 QFileInfo fi(base); |
781 base = fi.completeBaseName(); |
792 base = fi.completeBaseName(); |
782 const QtMacFilterName &fn = fileDialogPrivate->filterInfo.filters.at( |
793 const QtMacFilterName &fn = fileDialogPrivate->filterInfo.filters.at( |
783 fileDialogPrivate->filterInfo.currentSelection); |
794 fileDialogPrivate->filterInfo.currentSelection); |
784 QStringList reg = fn.regexp.split(QLatin1String(";"), QString::SkipEmptyParts); |
795 QStringList reg = fn.regexp.split(QLatin1String(";"), QString::SkipEmptyParts); |
785 QString r = reg.first(); |
796 if (reg.count()) { |
786 r = r.right(r.length()-1); // Strip the * |
797 QString r = reg.first(); |
787 base += r; //"." + QString::number(s->menuType); |
798 r = r.right(r.length()-1); // Strip the * |
|
799 base += r; //"." + QString::number(s->menuType); |
|
800 } |
788 NavDialogSetSaveFileName(p->context, QCFString::toCFStringRef(base)); |
801 NavDialogSetSaveFileName(p->context, QCFString::toCFStringRef(base)); |
789 } |
802 } |
790 #ifdef DEBUG_FILEDIALOG_FILTERS |
803 #ifdef DEBUG_FILEDIALOG_FILTERS |
791 qDebug("QFileDialogPrivate::qt_mac_filedialog_event_proc:%d - Selected a filter: %ld", __LINE__, s->menuType); |
804 qDebug("QFileDialogPrivate::qt_mac_filedialog_event_proc:%d - Selected a filter: %ld", __LINE__, s->menuType); |
792 #endif |
805 #endif |
1035 bool selectDir = q->selectedFiles().isEmpty(); |
1048 bool selectDir = q->selectedFiles().isEmpty(); |
1036 QString selection(selectDir ? q->directory().absolutePath() : q->selectedFiles().value(0)); |
1049 QString selection(selectDir ? q->directory().absolutePath() : q->selectedFiles().value(0)); |
1037 QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *delegate = [[QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) alloc] |
1050 QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) *delegate = [[QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) alloc] |
1038 initWithAcceptMode:acceptMode |
1051 initWithAcceptMode:acceptMode |
1039 title:q->windowTitle() |
1052 title:q->windowTitle() |
1040 nameFilters:q->nameFilters() |
|
1041 selectedNameFilter:q->selectedNameFilter() |
|
1042 hideNameFilterDetails:q->testOption(QFileDialog::HideNameFilterDetails) |
1053 hideNameFilterDetails:q->testOption(QFileDialog::HideNameFilterDetails) |
1043 qDirFilter:model->filter() |
1054 qDirFilter:model->filter() |
1044 fileOptions:opts |
1055 fileOptions:opts |
1045 fileMode:fileMode |
1056 fileMode:fileMode |
1046 selectFile:selection |
1057 selectFile:selection |