gtkuitoolkit.cpp

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

CPP
1,444
字号
//GTKUIToolkit.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/GTKUIToolkit.h"#include "vcf/ApplicationKit/GTKDesktop.h"#include "vcf/ApplicationKit/GTKApplication.h"#include "vcf/ApplicationKit/GTKControlContext.h"#include "vcf/ApplicationKit/GTKControl.h"#include "vcf/ApplicationKit/GTKCursor.h"#include "vcf/ApplicationKit/GTKWindow.h"#include "vcf/ApplicationKit/LightweightComponent.h"#include <gdk/gdkkeysyms.h>#include "vcf/ApplicationKit/GTKDialog.h"#include "vcf/ApplicationKit/GTKCommandButton.h"#include "vcf/ApplicationKit/GTKTextControl.h"#include "vcf/ApplicationKit/GTKFileOpenDialog.h"#include "vcf/ApplicationKit/GTKToolbar.h"#include "vcf/ApplicationKit/Toolbar.h"//get rid of the stupip fscking warning from GCC#define NULL 0#define VCF_GTK_POST_EVENT			"VCF_GTK_POST_EVENT"using namespace VCF;//UIMetricsManager implementation for GTKclass GTKUIMetricsManager : public UIMetricsManager{public:	GTKUIMetricsManager()	{}	virtual ~GTKUIMetricsManager()	{}	virtual VCF::Font getDefaultFontFor( const UIMetricsManager::FontType& type )	{		VCF::Font result( "ARIAL", 10 );		result.setColor( GraphicsToolkit::getSystemColor( SYSCOLOR_CAPTION_TEXT ) );		switch ( type ) {			case UIMetricsManager::ftMenuItemFont : {}				break;			case UIMetricsManager::ftSelectedMenuItemFont : {}				break;			case UIMetricsManager::ftControlFont :		case UIMetricsManager::ftSystemFont : {}				break;			case UIMetricsManager::ftMessageFont : {}				break;			case UIMetricsManager::ftToolTipFont : {}				break;		}		return result;	}	virtual double getDefaultHeightFor( const UIMetricsManager::HeightType& type )	{		double result = 0.0;		switch ( type ) {			case UIMetricsManager::htLabelHeight : {					VCF::Font f = getDefaultFontFor( UIMetricsManager::ftControlFont );					result = f.getHeight() * 1.75;				}				break;			case UIMetricsManager::htComboBoxHeight : {					VCF::Font f = getDefaultFontFor( UIMetricsManager::ftControlFont );					result = f.getHeight() * 2.0;				}				break;			case UIMetricsManager::htListItemHeight : {					VCF::Font f = getDefaultFontFor( UIMetricsManager::ftControlFont );					result = f.getHeight() * 1.65;				}				break;			case UIMetricsManager::htButtonHeight : {					VCF::Font f = getDefaultFontFor( UIMetricsManager::ftControlFont );					result = ( f.getHeight() * 1.75 ) + 2.50;				}				break;			case UIMetricsManager::htRadioBoxHeight :			case UIMetricsManager::htCheckBoxHeight : {					//in Win32 a radio box or check box is ALWAYS 10 dialog units high					//dialog units are converted by					//(2 * average char height dialog font / average char height system font pixels					//where average char height dialog font = TEXTMETRIC.tmHeight field or a Font::getHeight()					VCF::Font f = getDefaultFontFor( UIMetricsManager::ftControlFont );					result = ( 9.0 * ( ( 2.0 * f.getHeight() ) / f.getHeight() ) ) - 4.0; //0.590909;				}				break;			case UIMetricsManager::htToolTipHeight : {					VCF::Font f = getDefaultFontFor( UIMetricsManager::ftToolTipFont );					result = f.getHeight() * 1.2222;				}				break;			case UIMetricsManager::htSeparatorHeight : {					result = 2.0;				}				break;			case UIMetricsManager::htInformationalControl : {					VCF::Font f = getDefaultFontFor( UIMetricsManager::ftControlFont );					result = f.getHeight() * 1.75;				}				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/techpubs/macosx/Essentials/AquaHIGuidelines/AHIGLayout/index.html		switch ( type ) {			case UIMetricsManager::stWindowBorderDelta : {					result = 20.0;				}				break;			case UIMetricsManager::stContainerBorderDelta : {					result = 8.0;				}				break;			case UIMetricsManager::stControlVerticalSpacing : {					result = 14.0;				}				break;			case UIMetricsManager::stControlHorizontalSpacing : {					result = 10.0;				}				break;			case UIMetricsManager::stInformationControlTopSpacer : {					result = 2.0;				}				break;			case UIMetricsManager::stInformationControlBottomSpacer : {					result = 8.0;				}				break;		}		return result;	}	virtual Size getDefaultSliderThumbDimensions()	{		Size result;		//where the hell do we get these ????		result.width_ = 22;		result.height_ = 22;		return result;	}	virtual Size getDefaultMenuItemDimensions( const String& caption )	{		Size result;		return result;	}	virtual Size getDefaultVerticalScrollButtonDimensions()	{		Size result;		result.width_ = 22;		result.height_ = 22;		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;	}};GTKUIToolkit::GTKUIToolkit() :		defaultParent_( NULL ){	//this will work, but it means ignoring certain arguments that might be important for	//gtk initialization - need to figure out a better way	gdk_parse_args ( NULL, NULL );	if ( !gdk_display_open_default_libgtk_only () ) {		StringUtils::trace( "gdk_display_open_default_libgtk_only () failed!\n" );		//throw exception????	}	metricsMgr_ = new GTKUIMetricsManager();	createDefaultParentWnd();	gdk_atom_intern( VCF_GTK_POST_EVENT, FALSE );}GTKUIToolkit::~GTKUIToolkit(){}ApplicationPeer* GTKUIToolkit::internal_createApplicationPeer(){	return new GTKApplication();}TextPeer* GTKUIToolkit::internal_createTextPeer( TextControl* component,                                                 const bool& isMultiLineControl ){	return new GTKTextControl( component, isMultiLineControl );}TextPeer* GTKUIToolkit::internal_createTextPeer( TextControl* component,                                                 const bool& isMultiLineControl,                                                 ComponentType componentType ){	return new GTKTextControl( component, isMultiLineControl );}TreePeer* GTKUIToolkit::internal_createTreePeer( TreeControl* componentb ){	return 0;}ListviewPeer* GTKUIToolkit::internal_createListViewPeer( ListViewControl* component ){	return 0;}CommonPrintDialogPeer* GTKUIToolkit::internal_createCommonPrintDialogPeer( Control* owner ){	return 0;}DialogPeer* GTKUIToolkit::internal_createDialogPeer( Control* owner, Dialog* component ){	return new GTKDialog( owner, component );}DialogPeer* GTKUIToolkit::internal_createDialogPeer(){	return new GTKDialog();}ControlPeer* GTKUIToolkit::internal_createControlPeer( Control* component, ComponentType componentType ){	ControlPeer * result = NULL;	switch ( componentType ) {		case CT_LIGHTWEIGHT: {				result = new LightweightComponent( component );			}			break;		case CT_DEFAULT:		case CT_HEAVYWEIGHT: {				result = new GTKControl( component );			}			break;	}	return result;}WindowPeer* GTKUIToolkit::internal_createWindowPeer( Control* component,                                                     Control* owner ){	return new GTKWindow( component, owner );}ToolbarPeer* GTKUIToolkit::internal_createToolbarPeer( Toolbar* toolbar ){	return new GTKToolbar( toolbar );}MenuItemPeer* GTKUIToolkit::internal_createMenuItemPeer( MenuItem* item ){	return NULL;}MenuBarPeer* GTKUIToolkit::internal_createMenuBarPeer( MenuBar* menuBar ){	return NULL;}PopupMenuPeer* GTKUIToolkit::internal_createPopupMenuPeer( PopupMenu* popupMenu ){	return NULL;}ButtonPeer* GTKUIToolkit::internal_createButtonPeer( CommandButton* component ){	return new GTKCommandButton( component );}HTMLBrowserPeer* GTKUIToolkit::internal_createHTMLBrowserPeer( Control* control ){	return NULL;}ContextPeer* GTKUIToolkit::internal_createContextPeer( Control* component ){	return new GTKControlContext( component->getPeer() );}CommonFileDialogPeer* GTKUIToolkit::internal_createCommonFileOpenDialogPeer( Control* owner ){	return new GTKFileOpenDialog( owner );}CommonFileDialogPeer* GTKUIToolkit::internal_createCommonFileSaveDialogPeer( Control* owner ){	return NULL;}CommonColorDialogPeer* GTKUIToolkit::internal_createCommonColorDialogPeer( Control* owner ){	return NULL;}CommonFolderBrowseDialogPeer* GTKUIToolkit::internal_createCommonFolderBrowseDialogPeer( Control* owner ){	return NULL;}CommonFontDialogPeer* GTKUIToolkit::internal_createCommonFontDialogPeer( Control* owner ){	return NULL;}DragDropPeer* GTKUIToolkit::internal_createDragDropPeer(){	return NULL;}DataObjectPeer* GTKUIToolkit::internal_createDataObjectPeer(){	return NULL;}DropTargetPeer* GTKUIToolkit::internal_createDropTargetPeer(){	return NULL;}DesktopPeer* GTKUIToolkit::internal_createDesktopPeer( Desktop* desktop ){	return new GTKDesktop( desktop );}ScrollPeer* GTKUIToolkit::internal_createScrollPeer( Control* control ){	return NULL;}CursorPeer* GTKUIToolkit::internal_createCursorPeer( Cursor* cursor ){	return new GTKCursor( cursor );}ClipboardPeer* GTKUIToolkit::internal_createClipboardPeer(){	return NULL;}bool GTKUIToolkit::internal_createCaret( Control* owningControl, Image* caretImage ){	bool result = false;	return result;}bool GTKUIToolkit::internal_destroyCaret( Control* owningControl ){	bool result = false;	return result;}void GTKUIToolkit::internal_setCaretVisible( const bool& caretVisible ){}void GTKUIToolkit::internal_setCaretPos( Point* point ){}void GTKUIToolkit::internal_postEvent( EventHandler* eventHandler, Event* event, const bool& deleteHandler ){	GdkEventClient clientEvent;	memset( &clientEvent, 0, sizeof( clientEvent ) );	clientEvent.type = GDK_CLIENT_EVENT;	clientEvent.message_type = gdk_atom_intern( VCF_GTK_POST_EVENT, FALSE );	clientEvent.data.l[ 0 ] = ( unsigned long ) eventHandler;	clientEvent.data.l[ 1 ] = ( unsigned long ) event->clone();	clientEvent.data.l[ 2 ] = deleteHandler ? TRUE : FALSE;	gdk_event_put( ( GdkEvent* ) & clientEvent );}void GTKUIToolkit::internal_registerTimerHandler( Object* source, EventHandler* handler, const ulong32& timeoutInMilliSeconds ){	std::map<EventHandler*, TimeOutHandler>::iterator found = timeoutHandlers_.find( handler );	if ( found != timeoutHandlers_.end() ) {		TimeOutHandler & tmHandler = found->second;		gtk_timeout_remove ( tmHandler.timerID_ );		timeoutHandlers_.erase( found );	}	TimeOutHandler tmHandler;	tmHandler.source_ = source;	tmHandler.handler_ = handler;	tmHandler.timerID_ = gtk_timeout_add( timeoutInMilliSeconds,	                                      GTKUIToolkit::gtkTimeOutHandler,	                                      ( gpointer ) handler );	timeoutHandlers_[ handler ] = tmHandler;

⌨️ 快捷键说明

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