osxuitoolkit.cpp

来自「这是VCF框架的代码」· C++ 代码 · 共 2,694 行 · 第 1/5 页

CPP
2,694
字号
			case UIMetricsManager::htToolTipHeight : {				result = 18;			}			break;			case UIMetricsManager::htSeparatorHeight : {				result = 2.0;			}			break;			case UIMetricsManager::htInformationalControl : {				result = 15;			}			break;		}		return result;	}	virtual double getPreferredSpacingFor( const UIMetricsManager::SpacingType& type )  {		double result = 0.0;		//values largely derived from the Apple HIG at		//http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/index.html		//http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGLayout/chapter_19_section_2.html#//apple_ref/doc/uid/TP30000360-BEIBEAFJ		switch ( type ) {			case UIMetricsManager::stWindowBorderDelta : {				result = 20.0;			}			break;			case UIMetricsManager::stContainerBorderDelta : {				result = 22;			}			break;			case UIMetricsManager::stControlVerticalSpacing : {				result = 12;			}			break;			case UIMetricsManager::stControlHorizontalSpacing : {				result = 12;			}			break;			case UIMetricsManager::stInformationControlTopSpacer : {				result = 2.0;			}			break;			case UIMetricsManager::stInformationControlBottomSpacer : {				result = 8.0;			}			break;		}		return result;	}	virtual Size getDefaultSliderThumbDimensions()  {		Size result;		SInt32 val = 0;		GetThemeMetric( kThemeMetricScrollBarWidth, &val );				result.width_ = val;		result.height_ = val;		return result;	}	virtual Size getDefaultMenuItemDimensions( const String& caption )  {		Size result;		return result;	}	virtual Size getDefaultVerticalScrollButtonDimensions()  {		Size result;		SInt32 val = 0;		GetThemeMetric( kThemeMetricScrollBarWidth, &val );				result.width_ = val;		result.height_ = val;		return result;	}	virtual Size getDefaultHorizontalScrollButtonDimensions()  {		Size result;		result.width_ = 22;		result.height_ = 22;		return result;	}	virtual Size getDefaultTabDimensions( const String& caption )  {		Size result;		return result;	}		virtual double getValue( const MetricType& type, const String& text ) {		double result = 0;		switch ( type ) {			case mtLabelHeight : {				result = 18;			}			break;			case mtComboBoxHeight : {				result = 20;			}			break;			case mtListItemHeight : {				result = 19.0;			}			break;			case mtButtonHeight : {							SInt32 val = 0;				if ( noErr == GetThemeMetric( kThemeMetricPushButtonHeight, &val ) ) {					result = val;				}				else {					result = 20;				}			}			break;			case mtRadioBoxHeight : {							result = 18;			}			break;			case mtCheckBoxHeight : {								result = 18;			}			break;			case mtToolTipHeight : {				result = 18;			}			break;			case mtSeparatorHeight : {				result = 2.0;			}			break;			case mtHeaderHeight : {				SInt32 val = 0;				if ( noErr == GetThemeMetric( kThemeMetricListHeaderHeight, &val ) ) {					result = val;				}				else {					result = 20;				}			}			break;			case mtTreeItemHeight : {//???? is this even right?				result = 19.0;			}			break;			case mtTextControlHeight : {				result = 22.0;			}			break;			case mtVerticalProgressWidth : {				result = 16.0;			}			break;			case mtHorizontalProgressHeight : {				result = 16.0;			}			break;			case mtInformationalControlHeight : {							}			break;			case mtVerticalScrollbarThumbWidth : {				SInt32 val = 0;				if ( noErr == GetThemeMetric( kThemeMetricScrollBarWidth, &val ) ) {					result = val;				}				else {					result = 20;				}			}			break;			case mtHorizontalScrollbarThumbHeight : {				SInt32 val = 0;				if ( noErr == GetThemeMetric( kThemeMetricScrollBarWidth, &val ) ) {					result = val;				}				else {					result = 20;				}			}			break;			case mtVerticalScrollbarWidth : {				SInt32 val = 0;				if ( noErr == GetThemeMetric( kThemeMetricScrollBarWidth, &val ) ) {					result = val;				}				else {					result = 20;				}			}			break;			case mtHorizontalScrollbarHeight : {				SInt32 val = 0;				if ( noErr == GetThemeMetric( kThemeMetricScrollBarWidth, &val ) ) {					result = val;				}				else {					result = 20;				}			}			break;			case mtMenuIndent : {			}			break;			case mtWindowBorderDelta : {				result = 20.0;			}			break;			case mtContainerBorderDelta : {				result = 22;			}			break;			case mtControlVerticalSpacing : {				result = 12;			}			break;			case mtControlHorizontalSpacing : {				result = 12;			}			break;			case mtInformationControlTopSpacer : {				result = 2.0;			}			break;			case mtInformationControlBottomSpacer : {				result = 8.0;			}			break;			default : {				throw RuntimeException( MAKE_ERROR_MSG_2("Invalid metric type.") );			}			break;		}				return result;	}		virtual VCF::Size getSize( const MetricType& type, const String& text ) {		Size result;				switch ( type ) {			case mtMenuSize : {							}			break;			case mtVerticalSliderThumbSize : {							}			break;			case mtHorizontalSliderThumbSize : {							}			break;			case mtTabSize : {							}			break;			case mtRadioBoxBtnSize : {							}			break;			case mtCheckBoxBtnSize : {							}			break;			case mtComboBoxDropBtnSize : {						}			break;			case mtDisclosureButtonSize : {							}			break;			default : {				throw RuntimeException( MAKE_ERROR_MSG_2("Invalid metric type.") );			}			break;		}		return result;	}		virtual VCF::Rect getRect( const MetricType& type, VCF::Rect* rect ) {		return VCF::Rect();	}};class OSXUIPolicyManager : public UIPolicyManager {public:	virtual void mergeMenus( Menu* appMenu, Menu* windowMenu ){		}	virtual Frame* getOwnerForDialog() {		return NULL;	}		virtual Rect adjustInitialDialogBounds( Dialog* dialog ) {		Rect result;		Control* owner = dialog->getOwner();		if ( NULL != owner ) {						result.left_ = owner->getLeft() + ( owner->getWidth()/2.0 - dialog->getWidth()/2.0 );			result.top_ = owner->getTop() + ( owner->getHeight()/2.0 - dialog->getHeight()/2.0 );			result.right_ = result.left_ + dialog->getWidth();			result.bottom_ = result.top_ + dialog->getHeight();			if ( NULL != owner->getParent() ) {				owner->translateToScreenCoords( &result );			}		}		else {			//get the horizontal center of screen, and the vertical position			//about 1/3 of the way from the top			double w = Desktop::getDesktop()->getWidth();			double h = Desktop::getDesktop()->getHeight();						result.left_ = result.right_ = w / 2.0;			result.top_ = result.bottom_ = h / 3.0;						result.inflate( dialog->getWidth()/2.0, dialog->getHeight()/2.0 );					}				return result;	}		virtual String transformMnemonicValues( const String& input ) {		String result = input;				size_t pos = result.find( "&" );		while ( pos != String::npos ) {			if ( result[pos+1] != '&' ) {				result.erase( pos, 1 );			}			else {				pos ++;			}						pos = result.find( "&", pos +1 );		}				return result;	}		virtual AcceleratorKey::Value getStandardAcceleratorFor( const StandardAccelerator& val ) {		AcceleratorKey::Value result;				switch ( val ) {			case UIPolicyManager::saApplicationQuit : {				result = AcceleratorKey::Value( kmCtrl,vkLetterQ );			}			break;			case UIPolicyManager::saApplicationAbout : {							}			break;			case UIPolicyManager::saApplicationPreferences : {				result = AcceleratorKey::Value( kmCtrl,vkComma );			}			break;			case UIPolicyManager::saFileNew : {				result = AcceleratorKey::Value( kmCtrl,vkLetterN );			}			break;			case UIPolicyManager::saFileOpen : {				result = AcceleratorKey::Value( kmCtrl,vkLetterO );			}			break;			case UIPolicyManager::saFileSave : {				result = AcceleratorKey::Value( kmCtrl,vkLetterS );			}			break;			case UIPolicyManager::saFileSaveAs : {				result = AcceleratorKey::Value( kmCtrl | kmShift,vkLetterS );			}			break;			case UIPolicyManager::saFilePrint : {				result = AcceleratorKey::Value( kmCtrl, vkLetterP );			}			break;			case UIPolicyManager::saFilePageSetup : {				result = AcceleratorKey::Value( kmCtrl | kmShift,vkLetterP );			}			break;			case UIPolicyManager::saEditUndo : {				result = AcceleratorKey::Value( kmCtrl, vkLetterZ );			}			break;			case UIPolicyManager::saEditRedo : {				result = AcceleratorKey::Value( kmCtrl | kmShift,vkLetterZ );			}			break;			case UIPolicyManager::saEditCut : {				result = AcceleratorKey::Value( kmCtrl, vkLetterX );			}			break;			case UIPolicyManager::saEditCopy : {				result = AcceleratorKey::Value( kmCtrl, vkLetterC );			}			break;			case UIPolicyManager::saEditPaste : {				result = AcceleratorKey::Value( kmCtrl, vkLetterV );			}			break;			case UIPolicyManager::saEditDelete : {				result = AcceleratorKey::Value( kmUndefined, vkDelete );			}			break;			case UIPolicyManager::saEditSelectAll : {				result = AcceleratorKey::Value( kmCtrl, vkLetterA );			}			break;			case UIPolicyManager::saEditFind : {				result = AcceleratorKey::Value( kmCtrl, vkLetterF );			}			break;			case UIPolicyManager::saEditFindNext : {				result = AcceleratorKey::Value( kmCtrl, vkLetterG );			}			break;			case UIPolicyManager::saHelpContents : {				result = AcceleratorKey::Value( kmCtrl, vkQuestionMark );			}			break;		}		return result;	}};};//end of VCF namespaceusing namespace VCF;OSXUIToolkit::OSXUIToolkit():    quitEventLoop_(false),    eventHandlerRef_(NULL),    handlerUPP_(NULL),    timerUPP_(NULL),    idleTimerUPP_(NULL),    idleTimerRef_(NULL){    metricsMgr_ = new OSXUIMetricsManager();	policyMgr_ = new OSXUIPolicyManager();    //install event loop callbacks    handlerUPP_ = NewEventHandlerUPP(OSXUIToolkit::handleOSXApplicationEvents);    static EventTypeSpec eventsToHandle[] ={                            { kEventClassCommand, kEventCommandProcess },                            { kEventClassCommand, kEventCommandUpdateStatus },                            { OSXUIToolkit::CustomEventClass, OSXUIToolkit::EventPosted} };    OSStatus err = InstallEventHandler( GetApplicationEventTarget(),                                        handlerUPP_,                                        sizeof(eventsToHandle)/sizeof(eventsToHandle[0]),                                        eventsToHandle,                                        this,                                        &eventHandlerRef_ );    timerUPP_ = NewEventLoopTimerUPP(OSXUIToolkit::handleTimerEvent);    idleTimerUPP_ = NewEventLoopIdleTimerUPP(OSXUIToolkit::handleIdleTimer);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?