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