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 + -
显示快捷键?