src/gui/dialogs/qfiledialog_mac.mm
changeset 37 758a864f9613
parent 33 3e2da88830cd
equal deleted inserted replaced
36:ef0373b55136 37:758a864f9613
   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