uitoolkit.cpp

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

CPP
1,812
字号
//UIToolkit.cpp

/*
Copyright 2000-2004 The VCF Project.
Please see License.txt in the top level directory
where you installed the VCF.
*/


/* Generated by Together */

#include "vcf/ApplicationKit/ApplicationKit.h"
#include "vcf/ApplicationKit/ApplicationKitPrivate.h"
#include "vcf/ApplicationKit/DefaultPropertyEditors.h"
#include "vcf/ApplicationKit/ImageControl.h"
#include "vcf/ApplicationKit/MenuManager.h"
#include "vcf/ApplicationKit/PropertyEditorManager.h"

//Peers

using namespace VCF;





UIToolkit* UIToolkit::toolKitInstance = NULL;

static Control* prevTabbedControlContainer = NULL;

UIToolkit::UIToolkit():
	systemClipboard_(NULL),
	graphicsToolKit_(NULL),
	stopImage_(NULL),
	warningImage_(NULL),
	informationImage_(NULL),
	questionImage_(NULL),
	acceleratorMnemonicHandler_(NULL),
	defaultButtonHandler_(NULL),
	metricsMgr_(NULL),
	policyMgr_(NULL)
{
	acceleratorMnemonicHandler_ =
		new KeyboardEventHandler<UIToolkit>( this, &UIToolkit::onAcceleratorMnemonic );

	defaultButtonHandler_ =
		new KeyboardEventHandler<UIToolkit>( this, &UIToolkit::onDefaultButton );

	Component::initComponentRegistrar();
}

UIToolkit::~UIToolkit()
{
	std::multimap<ulong32,AcceleratorKey*>::iterator it = acceleratorMap_.begin();
	while ( it != acceleratorMap_.end() ) {
		delete it->second;
		it ++;
	}
	acceleratorMap_.clear();

	std::map<String,ComponentInfo*>::iterator it2 = componentInfoMap_.begin();
	while( it2 != componentInfoMap_.end() ) {
		ComponentInfo* info = it2->second;
		delete info;
		info = NULL;
		it2++;
	}
	componentInfoMap_.clear();

	delete systemClipboard_;

	Component::clearRegistedComponents();

	MenuManager::terminate();

	delete stopImage_;
	delete warningImage_;
	delete informationImage_;
	delete questionImage_;

	delete acceleratorMnemonicHandler_;
	acceleratorMnemonicHandler_ = NULL;

	delete defaultButtonHandler_;
	defaultButtonHandler_ = NULL;

	metricsMgr_->free();

	delete policyMgr_;	
}

void UIToolkit::init()
{


	systemClipboard_ = new Clipboard();
	/**
	*register basic property editors
	*/

	PropertyEditorManager::registerPropertyEditor( "VCF::IntegerPropertyEditor", CLASS_INTEGER );
	PropertyEditorManager::registerPropertyEditor( "VCF::DoublePropertyEditor", CLASS_DOUBLE );
	PropertyEditorManager::registerPropertyEditor( "VCF::BoolPropertyEditor", CLASS_BOOL );
	PropertyEditorManager::registerPropertyEditor( "VCF::StringPropertyEditor", CLASS_STRING );

	PropertyEditorManager::registerPropertyEditor( "VCF::EnumPropertyEditor", "VCF::AlignmentType" );
	PropertyEditorManager::registerPropertyEditor( "VCF::EnumPropertyEditor", "VCF::IconStyleType" );
	PropertyEditorManager::registerPropertyEditor( "VCF::EnumPropertyEditor", "VCF::IconAlignType" );
	PropertyEditorManager::registerPropertyEditor( "VCF::EnumPropertyEditor", "VCF::TextAlignmentType" );
	PropertyEditorManager::registerPropertyEditor( "VCF::EnumPropertyEditor", "VCF::TextVerticalAlignment" );
	PropertyEditorManager::registerPropertyEditor( "VCF::EnumPropertyEditor", "VCF::FrameStyleType" );
	PropertyEditorManager::registerPropertyEditor( "VCF::EnumPropertyEditor", "VCF::ButtonCommandType" );

	PropertyEditorManager::registerPropertyEditor( "VCF::EnumSetPropertyEditor", "VCF::AnchorTypes" );
	PropertyEditorManager::registerPropertyEditor( "VCF::CursorPropertyEditor", "VCF::Cursor::SystemCursorType" );

	PropertyEditorManager::registerPropertyEditor( "VCF::ColorPropertyEditor", "VCF::Color" );
	PropertyEditorManager::registerPropertyEditor( "VCF::FontPropertyEditor", "VCF::Font" );
	PropertyEditorManager::registerPropertyEditor( "VCF::DefaultMenuItemPropertyEditor", "VCF::DefaultMenuItem" );
	PropertyEditorManager::registerPropertyEditor( "VCF::DefaultListModelPropertyEditor", "VCF::DefaultListModel" );
	PropertyEditorManager::registerPropertyEditor( "VCF::ImageFilenamePropertyEditor", "VCF::ImageFilenameString" );
	PropertyEditorManager::registerPropertyEditor( "VCF::ImagePropertyEditor", "VCF::Image" );
	PropertyEditorManager::registerPropertyEditor( "VCF::ImagePropertyEditor", "VCF::Win32Image" );

	/**
	register the components in categorys
	It's entirely possible that this might ultimately make more sense moved to the 
	VCF Builder at one point.
	*/

	Component::registerComponent( "VCF::TabbedPages", STANDARD_CATEGORY );
	Component::registerComponent( "VCF::Panel", STANDARD_CATEGORY );
	Component::registerComponent( "VCF::CommandButton", STANDARD_CATEGORY );
	Component::registerComponent( "VCF::ListBoxControl", STANDARD_CATEGORY );
	Component::registerComponent( "VCF::ListViewControl", STANDARD_CATEGORY );
	Component::registerComponent( "VCF::TreeControl", STANDARD_CATEGORY );
	Component::registerComponent( "VCF::TextControl", STANDARD_CATEGORY );
	Component::registerComponent( "VCF::MultilineTextControl", STANDARD_CATEGORY );
	Component::registerComponent( "VCF::Label", STANDARD_CATEGORY );
	Component::registerComponent( "VCF::CheckBoxControl", STANDARD_CATEGORY );
	Component::registerComponent( "VCF::RadioButtonControl", STANDARD_CATEGORY );
	Component::registerComponent( "VCF::SliderControl", STANDARD_CATEGORY );
	Component::registerComponent( "VCF::ProgressControl", STANDARD_CATEGORY );

	Component::registerComponent( "VCF::MenuBar", STANDARD_CATEGORY );
	Component::registerComponent( "VCF::PopupMenu", STANDARD_CATEGORY );

	Component::registerComponent( "VCF::TimerComponent", ADDITIONAL_CATEGORY );
	Component::registerComponent( "VCF::ScrollbarManager", ADDITIONAL_CATEGORY );
	Component::registerComponent( "VCF::SystemTray", ADDITIONAL_CATEGORY );
	Component::registerComponent( "VCF::PushButton", ADDITIONAL_CATEGORY );
	Component::registerComponent( "VCF::OpenGLControl", ADDITIONAL_CATEGORY );
	Component::registerComponent( "VCF::ImageControl", ADDITIONAL_CATEGORY );

	Component::registerComponent( "VCF::TableControl", ADDITIONAL_CATEGORY );
	Component::registerComponent( "VCF::Splitter", ADDITIONAL_CATEGORY );
	Component::registerComponent( "VCF::TreeListControl", ADDITIONAL_CATEGORY );
	Component::registerComponent( "VCF::HeaderControl", ADDITIONAL_CATEGORY );

	Component::registerComponent( "VCF::Basic3DBorder", BORDER_CATEGORY );
	Component::registerComponent( "VCF::EtchedBorder", BORDER_CATEGORY );
	Component::registerComponent( "VCF::ColorEtchedBorder", BORDER_CATEGORY );
	Component::registerComponent( "VCF::Light3DBorder", BORDER_CATEGORY );
	Component::registerComponent( "VCF::TitledBorder", BORDER_CATEGORY );


	Component::registerComponent( "VCF::StandardContainer", CONTAINER_CATEGORY );
	Component::registerComponent( "VCF::ColumnLayoutContainer", CONTAINER_CATEGORY );
	Component::registerComponent( "VCF::HorizontalLayoutContainer", CONTAINER_CATEGORY );


	//internal_setUpdateTimerSpeed( UIToolkit::defaultUpdateSpeed );

	MenuManager::create();
	//Desktop::getDesktop()->init();
}

void UIToolkit::initToolKit()
{
	if ( NULL == UIToolkit::toolKitInstance ) {
#ifdef WIN32
		UIToolkit::toolKitInstance = new Win32ToolKit();
#elif VCF_X11
		UIToolkit::toolKitInstance = new X11UIToolkit();
#elif VCF_GTK
		UIToolkit::toolKitInstance = new GTKUIToolkit();
#elif VCF_OSX
		UIToolkit::toolKitInstance = new OSXUIToolkit();
#endif

		if ( NULL == UIToolkit::toolKitInstance ) {
			//Damn the UI toolkit is STILL NULL !!!
			//Well that means we are well and truly screwed, so lets get out of Dodge pardner!
			throw NoToolKitFoundException( MAKE_ERROR_MSG_2(NO_TOOLKIT_ERROR));
		}


		//inialize the toolkit instance
		((UIToolkit*)UIToolkit::toolKitInstance)->init();

		//verify the presence of a valid UIMetricsManager instance
		if ( NULL == UIToolkit::toolKitInstance->metricsMgr_ ) {
			//Oops! we're screwed, do not pass GO, do NOT collect $200!
			throw InvalidPointerException( MAKE_ERROR_MSG_2("This implementation of the UIToolkit does NOT have a valid instance of a UIMetricsManager! Please fix this!") );
		}
	}
}

void UIToolkit::closeToolkit()
{
	delete UIToolkit::toolKitInstance;
	UIToolkit::toolKitInstance = NULL;
}

UIToolkit* UIToolkit::internal_getDefaultUIToolkit()
{
	return UIToolkit::toolKitInstance;
}




ControlPeer* UIToolkit::createControlPeer( Control* component, ComponentType componentType)
{
	return UIToolkit::toolKitInstance->internal_createControlPeer( component, componentType );
}

ContextPeer* UIToolkit::createContextPeer( Control* component )
{
	return UIToolkit::toolKitInstance->internal_createContextPeer( component );
}

ContextPeer* UIToolkit::createContextPeer( OSHandleID contextID )
{
	return UIToolkit::toolKitInstance->internal_createContextPeer( contextID );
}

ContextPeer* UIToolkit::createContextPeer( const unsigned long& width, const unsigned long& height )
{
	return UIToolkit::toolKitInstance->internal_createContextPeer( width, height );
}

ListviewPeer* UIToolkit::createListViewPeer( ListViewControl* component)
{
	return UIToolkit::toolKitInstance->internal_createListViewPeer( component );
}

TreePeer* UIToolkit::createTreePeer( TreeControl* component)
{
	return UIToolkit::toolKitInstance->internal_createTreePeer( component );
}

TextPeer* UIToolkit::createTextPeer( const bool& autoWordWrap, const bool& multiLined )
{
	return UIToolkit::toolKitInstance->internal_createTextPeer( autoWordWrap,multiLined );
}

TextEditPeer* UIToolkit::createTextEditPeer( TextControl* component, const bool& isMultiLineControl)
{
	return UIToolkit::toolKitInstance->internal_createTextEditPeer( component, isMultiLineControl );
}


ButtonPeer* UIToolkit::createButtonPeer( CommandButton* component)
{
	return UIToolkit::toolKitInstance->internal_createButtonPeer( component );
}

DialogPeer* UIToolkit::createDialogPeer( Control* owner, Dialog* component)
{
	return UIToolkit::toolKitInstance->internal_createDialogPeer( owner, component );
}

DialogPeer* UIToolkit::createDialogPeer()
{
	return UIToolkit::toolKitInstance->internal_createDialogPeer();
}

WindowPeer* UIToolkit::createWindowPeer( Control* component, Control* owner)
{
	return UIToolkit::toolKitInstance->internal_createWindowPeer( component, owner );
}

ToolbarPeer* UIToolkit::createToolbarPeer( Toolbar* toolbar )
{
	return UIToolkit::toolKitInstance->internal_createToolbarPeer( toolbar );
}

MenuItemPeer* UIToolkit::createMenuItemPeer( MenuItem* item )
{
	return UIToolkit::toolKitInstance->internal_createMenuItemPeer( item );
}

MenuBarPeer* UIToolkit::createMenuBarPeer( MenuBar* menuBar )
{
	return UIToolkit::toolKitInstance->internal_createMenuBarPeer( menuBar );
}

PopupMenuPeer* UIToolkit::createPopupMenuPeer( PopupMenu* popupMenu )
{
	return UIToolkit::toolKitInstance->internal_createPopupMenuPeer( popupMenu );
}

ClipboardPeer* UIToolkit::createClipboardPeer()
{
	return UIToolkit::toolKitInstance->internal_createClipboardPeer();
}

DragDropPeer* UIToolkit::createDragDropPeer()
{
	return UIToolkit::toolKitInstance->internal_createDragDropPeer();
}

DataObjectPeer* UIToolkit::createDataObjectPeer()
{
	return UIToolkit::toolKitInstance->internal_createDataObjectPeer();
}

DropTargetPeer* UIToolkit::createDropTargetPeer()
{
	return UIToolkit::toolKitInstance->internal_createDropTargetPeer();
}

ApplicationPeer* UIToolkit::createApplicationPeer()
{
	return UIToolkit::toolKitInstance->internal_createApplicationPeer();
}

Clipboard* UIToolkit::getSystemClipboard()
{
	return UIToolkit::toolKitInstance->internal_getSystemClipboard();
}

CommonFileDialogPeer* UIToolkit::createCommonFileOpenDialogPeer( Control* owner )
{
	return UIToolkit::toolKitInstance->internal_createCommonFileOpenDialogPeer( owner );
}

CommonFolderBrowseDialogPeer* UIToolkit::createCommonFolderBrowseDialogPeer( Control* owner )
{
	return UIToolkit::toolKitInstance->internal_createCommonFolderBrowseDialogPeer( owner );
}

CommonFileDialogPeer* UIToolkit::createCommonFileSaveDialogPeer( Control* owner )
{
	return UIToolkit::toolKitInstance->internal_createCommonFileSaveDialogPeer( owner );
}

CommonColorDialogPeer* UIToolkit::createCommonColorDialogPeer( Control* owner )
{
	return UIToolkit::toolKitInstance->internal_createCommonColorDialogPeer( owner );
}

CommonFontDialogPeer* UIToolkit::createCommonFontDialogPeer( Control* owner )
{
	return UIToolkit::toolKitInstance->internal_createCommonFontDialogPeer( owner );
}

CommonPrintDialogPeer* UIToolkit::createCommonPrintDialogPeer( Control* owner )
{
	return UIToolkit::toolKitInstance->internal_createCommonPrintDialogPeer( owner );
}

DesktopPeer* UIToolkit::createDesktopPeer( Desktop* desktop )
{
	return UIToolkit::toolKitInstance->internal_createDesktopPeer( desktop );
}

ScrollPeer* UIToolkit::createScrollPeer( Control* control )
{
	return UIToolkit::toolKitInstance->internal_createScrollPeer( control );
}

CursorPeer* UIToolkit::createCursorPeer( Cursor* cursor )
{
	return UIToolkit::toolKitInstance->internal_createCursorPeer( cursor );
}

SystemTrayPeer* UIToolkit::createSystemTrayPeer()
{
	return UIToolkit::toolKitInstance->internal_createSystemTrayPeer();
}

MenuManagerPeer* UIToolkit::createMenuManagerPeer()
{
	return UIToolkit::toolKitInstance->internal_createMenuManagerPeer();
}

GraphicsResourceBundlePeer* UIToolkit::createGraphicsResourceBundlePeer( AbstractApplication* app )
{
	return UIToolkit::toolKitInstance->internal_createGraphicsResourceBundlePeer( app );
}

bool UIToolkit::createCaret( Control* owningControl, Image* caretImage  )
{
	return UIToolkit::toolKitInstance->internal_createCaret( owningControl, caretImage );
}

bool UIToolkit::destroyCaret( Control* owningControl )
{
	return UIToolkit::toolKitInstance->internal_destroyCaret( owningControl );
}

void UIToolkit::setCaretVisible( const bool& caretVisible )
{
	UIToolkit::toolKitInstance->internal_setCaretVisible( caretVisible );
}

void UIToolkit::setCaretPos( Point* point )
{
	UIToolkit::toolKitInstance->internal_setCaretPos( point );
}

void UIToolkit::postEvent( EventHandler* eventHandler, Event* event, const bool& deleteHandler )
{
	UIToolkit::toolKitInstance->internal_postEvent( eventHandler, event, deleteHandler );
}

void UIToolkit::registerTimerHandler( Object* source, EventHandler* handler, const ulong32& timeoutInMilliSeconds )
{
	UIToolkit::toolKitInstance->internal_registerTimerHandler( source, handler, timeoutInMilliSeconds );
}

void UIToolkit::unregisterTimerHandler( EventHandler* handler )
{
	UIToolkit::toolKitInstance->internal_unregisterTimerHandler( handler );
}

void UIToolkit::runEventLoop()
{
	UIToolkit::toolKitInstance->internal_runEventLoop();
}

UIToolkit::ModalReturnType UIToolkit::runModalEventLoopFor( Control* control )
{
	return UIToolkit::toolKitInstance->internal_runModalEventLoopFor( control );
}


void UIToolkit::quitCurrentEventLoop()
{
	UIToolkit::toolKitInstance->internal_quitCurrentEventLoop();
}

Event* UIToolkit::createEventFromNativeOSEventData( void* eventData )
{
	return UIToolkit::toolKitInstance->internal_createEventFromNativeOSEventData( eventData );
}

VCF::Size UIToolkit::getDragDropDelta()
{
	return UIToolkit::toolKitInstance->internal_getDragDropDelta();
}

⌨️ 快捷键说明

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