osxfolderbrowsedialog.cpp
来自「这是VCF框架的代码」· C++ 代码 · 共 165 行
CPP
165 行
/*Copyright 2000-2004 The VCF Project.Please see License.txt in the top level directorywhere you installed the VCF.*/#include "vcf/ApplicationKit/ApplicationKit.h"#include "vcf/ApplicationKit/ApplicationKitPrivate.h"#include "vcf/ApplicationKit/OSXFolderBrowseDialog.h"namespace VCF {OSXFolderBrowseDialog::OSXFolderBrowseDialog(Control* owner): browseDlgResult_(false){ }OSXFolderBrowseDialog::~OSXFolderBrowseDialog(){}void OSXFolderBrowseDialog::setTitle( const String& title ){ title_ = title;}bool OSXFolderBrowseDialog::execute(){ bool result = false; browseDlgResult_ = false; OSStatus err = NavGetDefaultDialogCreationOptions (&dlgOptions_ ); if ( err != noErr ) { throw RuntimeException( MAKE_ERROR_MSG_2("NavGetDefaultDialogCreationOptions failed in OSXFolderBrowseDialog::execute()") ); } CFTextString dlgTitle; dlgTitle = title_; dlgOptions_.windowTitle = dlgTitle; //dlgOptions_.parentWindow = ActiveNonFloatingWindow() ; dlgOptions_.modality = kWindowModalityAppModal; NavDialogRef browseForFolder; err = NavCreateChooseFolderDialog( &dlgOptions_, OSXFolderBrowseDialog::BrowseDlgCallbackProc, NULL, this, &browseForFolder ); if ( err != noErr ) { throw RuntimeException( MAKE_ERROR_MSG_2("NavCreateChooseFolderDialog failed in OSXFolderBrowseDialog::execute()") ); } err = NavDialogRun( browseForFolder ); if ( noErr != err ) { result = false; } else { result = browseDlgResult_; } NavDialogDispose( browseForFolder ); return result;}void OSXFolderBrowseDialog::setDirectory( const String & directory ){ directory_ = directory;}String OSXFolderBrowseDialog::getDirectory(){ return directory_;} void OSXFolderBrowseDialog::BrowseDlgCallbackProc( NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParms, void *callBackUD ){ OSXFolderBrowseDialog* thisPtr = (OSXFolderBrowseDialog*)callBackUD; VCF_ASSERT( thisPtr != NULL ); VCF_ASSERT(callBackParms != NULL); if (callBackSelector == kNavCBUserAction) { NavDialogRef dialog = callBackParms->context; switch (callBackParms->userAction) { case kNavUserActionChoose: { NavReplyRecord reply; AEDescList selection; AEKeyword keyword; DescType type; FSRef folder; ::Size size; long count; OSStatus err = NavDialogGetReply(dialog, &reply); selection = reply.selection; err = AECountItems(&selection, &count); printf( "AECountItems() %d count: %d\n", err, count ); if ( err == noErr ) { err = AEGetNthPtr(&selection, 1, typeFSRef, &keyword, &type, &folder, sizeof(folder), &size); printf( "AEGetNthPtr() %d\n", err ); if ( err == noErr ) { CFRefObject<CFURLRef> url = CFURLCreateFromFSRef( NULL, &folder ); char buf[256]; if ( CFURLGetFileSystemRepresentation( url, true, (UInt8*)buf, sizeof(buf) ) ) { thisPtr->directory_ = buf; } else { thisPtr->directory_ = OSXStringUtils::extractStringValueFromCFType( url ); } printf( "thisPtr->directory_: %s\n", thisPtr->directory_.ansi_c_str() ); thisPtr->browseDlgResult_ = true; } } } break; case kNavUserActionCancel: { thisPtr->browseDlgResult_ = false; } break; } }}};/***CVS Log info*$Log$*Revision 1.3 2006/04/07 02:35:24 ddiego*initial checkin of merge from 0.6.9 dev branch.**Revision 1.2.4.1 2005/11/21 04:00:51 ddiego*more osx updates.**Revision 1.2 2004/12/01 04:31:37 ddiego*merged over devmain-0-6-6 code. Marcello did a kick ass job*of fixing a nasty bug (1074768VCF application slows down modal dialogs.)*that he found. Many, many thanks for this Marcello.**Revision 1.1.2.1 2004/10/30 20:27:26 ddiego*added osx color dialog and browse for folder dialog***/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?