osxuitoolkit.cpp

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

CPP
2,694
字号
//OSXUIToolkit.cpp/*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/OSXDesktopPeer.h"#include "vcf/ApplicationKit/OSXApplicationPeer.h"#include "vcf/ApplicationKit/OSXControlContextPeer.h"#include "vcf/ApplicationKit/OSXCursorPeer.h"#include "vcf/ApplicationKit/OSXWindow.h"#include "vcf/ApplicationKit/OSXControl.h"#include "vcf/ApplicationKit/OSXLightweightControl.h"#include "vcf/ApplicationKit/OSXDialog.h"#include "vcf/ApplicationKit/OSXButton.h"#include "vcf/ApplicationKit/OSXColorDialog.h"#include "vcf/ApplicationKit/OSXFolderBrowseDialog.h"#include "vcf/ApplicationKit/OSXFileOpenDialog.h"#include "vcf/ApplicationKit/OSXFileSaveDialog.h"#include "vcf/ApplicationKit/OSXMenuBar.h"#include "vcf/ApplicationKit/OSXMenuItem.h"#include "vcf/ApplicationKit/OSXDropTargetPeer.h"#include "vcf/ApplicationKit/OSXDragDropPeer.h"#include "vcf/ApplicationKit/ListViewControl.h"#include "vcf/ApplicationKit/OSXListview.h"#include "vcf/ApplicationKit/OSXPopupMenu.h"#include "vcf/ApplicationKit/OSXTree.h"#include "vcf/ApplicationKit/MenuManagerPeer.h"#include "vcf/ApplicationKit/OSXMenuManagerPeer.h"#include "vcf/ApplicationKit/OSXTextPeer.h"#include "vcf/ApplicationKit/OSXTextEditPeer.h"#include "vcf/ApplicationKit/Toolbar.h"#include "vcf/ApplicationKit/OSXToolbar.h"#include "vcf/ApplicationKit/OSXScrollPeer.h"#include "vcf/FoundationKit/ResourceBundlePeer.h"#include "vcf/GraphicsKit/GraphicsResourceBundlePeer.h"#include "vcf/ApplicationKit/OSXAppResourceBundle.h"#include "vcf/FoundationKit/ResourceBundlePeer.h"#include "vcf/GraphicsKit/GraphicsResourceBundlePeer.h"#include "vcf/ApplicationKit/OSXAppResourceBundle.h"#define kSleepTime	32767VCF::ulong32 OSXUIUtils::translateButtonMask( EventMouseButton button ){	VCF::ulong32 result = 0;		if ( button == kEventMouseButtonPrimary ) {		result = VCF::mbmLeftButton;	}	else if ( button == kEventMouseButtonSecondary ) {		result = VCF::mbmRightButton;	}	else if ( button == kEventMouseButtonTertiary ) {		result = VCF::mbmMiddleButton;	}		return result;}VCF::ulong32 OSXUIUtils::translateKeyMask( UInt32 keyMod ){    VCF::ulong32 result = 0;	    if ( keyMod & shiftKey ) {        result |= VCF::kmShift;    }	    if ( keyMod & cmdKey ) {        result |= VCF::kmAlt;    }	    if ( keyMod & controlKey ) {        result |= VCF::kmCtrl;    }    return result;}namespace VCF {VirtualKeyCode translateOSXKeyToVirtKeyCode( VCFChar ch, UInt32 keyCode, UInt32 mod ){	VirtualKeyCode result = vkUndefined;	switch ( ch ) {		case kHomeCharCode : {			result = vkHome;		}        break;		case kEnterCharCode : {			result = vkReturn;		}        break;        case kEndCharCode : {			result = vkEnd;		}		break;        case kHelpCharCode : {			result = vkF1;		}		break;        case kBackspaceCharCode : {			result = vkBackSpace;		}        break;        case kTabCharCode : {			result = vkTab;		}		break;        case kPageUpCharCode : {			result = vkPgUp;		}        break;		case kPageDownCharCode : {			result = vkPgDown;		}        break;		case kReturnCharCode : {			result = vkReturn;		}        break;		case kEscapeCharCode : {			result = vkEscape;		}        break;		case kLeftArrowCharCode : {			result = vkLeftArrow;		}        break;		case kRightArrowCharCode : {			result = vkRightArrow;		}        break;		case kUpArrowCharCode : {			result = vkUpArrow;		}        break;		case kDownArrowCharCode : {			result = vkDownArrow;		}        break;		case kDeleteCharCode : {			result = vkDelete;		}        break;		case kSpaceCharCode : {			result = vkSpaceBar;		}        break;		case kFunctionKeyCharCode : {			switch( keyCode ) {				case 0x7a : {					result = vkF1;				}				break;				case 0x78 : {					result = vkF2;				}				break;				case 0x63 : {					result = vkF3;				}				break;				case 0x76 : {					result = vkF4;				}				break;				case 0x60 : {					result = vkF5;				}				break;				case 0x61 : {					result = vkF6;				}				break;				case 0x62 : {					result = vkF7;				}				break;				case 0x64 : {					result = vkF8;				}				break;				case 0x65 : {					result = vkF9;				}				break;				case 0x6D : {					result = vkF10;				}				break;				case 0x67 : {					result = vkF11;				}				break;				case 0x6F : {					result = vkF12;				}				break;				/*				case 0x69 : {					result = vkF13;				}				break;				case 0x6B : {					result = vkF14;				}				break;				case 0x71 : {					result = vkF15;				}				break;				*/			}		}	}	if ( result == vkUndefined ) {		switch ( ch ) {			case 'A': case 'a': {				result = vkLetterA;			}			break;			case 'B': case 'b': {				result = vkLetterB;			}			break;			case 'C': case 'c': {				result = vkLetterC;			}			break;			case 'D': case 'd': {				result = vkLetterD;			}			break;			case 'E': case 'e': {				result = vkLetterE;			}			break;			case 'F': case 'f': {				result = vkLetterF;			}			break;			case 'G': case 'g': {				result = vkLetterG;			}			break;			case 'H': case 'h': {				result = vkLetterH;			}			break;			case 'I': case 'i': {				result = vkLetterI;			}			break;			case 'J': case 'j': {				result = vkLetterJ;			}			break;			case 'K': case 'k': {				result = vkLetterK;			}			break;			case 'L': case 'l': {				result = vkLetterL;			}			break;			case 'M': case 'm': {				result = vkLetterM;			}			break;			case 'N': case 'n': {				result = vkLetterN;			}			break;			case 'O': case 'o': {				result = vkLetterO;			}			break;			case 'P': case 'p': {				result = vkLetterP;			}			break;			case 'Q': case 'q': {				result = vkLetterQ;			}			break;			case 'R': case 'r': {				result = vkLetterR;			}			break;			case 'S': case 's': {				result = vkLetterS;			}			break;			case 'T': case 't': {				result = vkLetterT;			}			break;			case 'U': case 'u': {				result = vkLetterU;			}			break;			case 'V': case 'v': {				result = vkLetterV;			}			break;			case 'W': case 'w': {				result = vkLetterW;			}			break;			case 'X': case 'x': {				result = vkLetterX;			}			break;			case 'Y': case 'y': {				result = vkLetterY;			}			break;			case 'Z': case 'z': {				result = vkLetterZ;			}			break;		}	}	return result;}//UIMetricsManager implementation for OSXclass OSXUIMetricsManager : public UIMetricsManager {public:	OSXUIMetricsManager(){}	virtual ~OSXUIMetricsManager(){}	virtual VCF::Font getDefaultFontFor( const UIMetricsManager::FontType& type ) {		VCF::Font result("Arial", 13);		result.setColor( GraphicsToolkit::getSystemColor( SYSCOLOR_CAPTION_TEXT ) );				Str255 fontName;		SInt16 fontSize = 0;		Style fontStyle = 0;		OSStatus err = noErr;				switch ( type ) {			case UIMetricsManager::ftMenuItemFont : {				err = GetThemeFont( kThemeSystemFont, smSystemScript, fontName, &fontSize, &fontStyle );					if ( err != noErr ) {					CFTextString name(fontName);					result.setName( name );					result.setPointSize( fontSize );					result.setBold ( (fontStyle & bold) ? true : false );					result.setItalic ( (fontStyle & italic) ? true : false );				}							}			break;			case UIMetricsManager::ftSelectedMenuItemFont : {				err = GetThemeFont( kThemeSystemFont, smSystemScript, fontName, &fontSize, &fontStyle );					if ( err != noErr ) {					CFTextString name(fontName);					result.setName( name );					result.setPointSize( fontSize );					result.setBold ( (fontStyle & bold) ? true : false );					result.setItalic ( (fontStyle & italic) ? true : false );					result.setUnderlined ( (fontStyle & underline) ? true : false );									}			}			break;			case UIMetricsManager::ftSystemFont : {				err = GetThemeFont( kThemeSystemFont, smSystemScript, fontName, &fontSize, &fontStyle );					if ( err != noErr ) {					CFTextString name(fontName);					result.setName( name );					result.setPointSize( fontSize );					result.setBold ( (fontStyle & bold) ? true : false );					result.setItalic ( (fontStyle & italic) ? true : false );					result.setUnderlined ( (fontStyle & underline) ? true : false );				}			}			break;						case UIMetricsManager::ftControlFont :   {				err = GetThemeFont( kThemeLabelFont, smSystemScript, fontName, &fontSize, &fontStyle );					if ( err != noErr ) {					CFTextString name(fontName);					result.setName( name );					result.setPointSize( fontSize );					result.setBold ( (fontStyle & bold) ? true : false );					result.setItalic ( (fontStyle & italic) ? true : false );					result.setUnderlined ( (fontStyle & underline) ? true : false );				}			}			break;						case UIMetricsManager::ftMessageFont : {				err = GetThemeFont( kThemeEmphasizedSystemFont, smSystemScript, fontName, &fontSize, &fontStyle );					if ( err != noErr ) {					CFTextString name(fontName);					result.setName( name );					result.setPointSize( fontSize );					result.setBold ( (fontStyle & bold) ? true : false );					result.setItalic ( (fontStyle & italic) ? true : false );					result.setUnderlined ( (fontStyle & underline) ? true : false );				}			}			break;			case UIMetricsManager::ftToolTipFont : {				err = GetThemeFont( kThemeSmallSystemFont, smSystemScript, fontName, &fontSize, &fontStyle );					if ( err != noErr ) {					CFTextString name(fontName);					result.setName( name );					result.setPointSize( fontSize );					result.setBold ( (fontStyle & bold) ? true : false );					result.setItalic ( (fontStyle & italic) ? true : false );					result.setUnderlined ( (fontStyle & underline) ? true : false );				}			}			break;		}		return result;	}	virtual double getDefaultHeightFor( const UIMetricsManager::HeightType& type )  {		double result = 0.0;		switch ( type ) {			case UIMetricsManager::htLabelHeight : {				result = 18;			}			break;			case UIMetricsManager::htComboBoxHeight : {				result = 20;			}			break;			case UIMetricsManager::htListItemHeight : {				result = 18;			}			break;			case UIMetricsManager::htButtonHeight : {				SInt32 val = 0;				if ( noErr == GetThemeMetric( kThemeMetricPushButtonHeight, &val ) ) {					result = val;				}				else {					result = 20;				}			}			break;			case UIMetricsManager::htRadioBoxHeight : case UIMetricsManager::htCheckBoxHeight : {				result = 18;			}			break;

⌨️ 快捷键说明

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