abstractgtkcontrol.cpp

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

CPP
1,333
字号
//AbstractGTKControl.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/AbstractGTKControl.h"#include "vcf/ApplicationKit/GTKControl.h"using namespace VCF;AbstractGTKControl::GTKControlMap AbstractGTKControl::gtkControlMap;static GtkContainerClass * internalVCFParentClass = NULL;AbstractGTKControl::AbstractGTKControl() :		enabled_( false ),		control_( NULL ),		wndHandle_( NULL ),		parent_( NULL ),		repainted_( false ){}AbstractGTKControl::~AbstractGTKControl(){}void AbstractGTKControl::create( Control* owningControl ){}void AbstractGTKControl::destroyControl(){}String AbstractGTKControl::getText(){	String result;	return result;}void AbstractGTKControl::setText( const String& text ){}void AbstractGTKControl::setBounds( Rect* rect ){	bounds_ = *rect;	if ( !GTK_IS_VCF_CONTAINER( wndHandle_ ) ) {		GtkWidget * gdkParent = gtk_widget_get_parent ( wndHandle_ );		if ( !GTK_IS_VCF_CONTAINER( gdkParent ) ) {			//throw RuntimeException( MAKE_ERROR_MSG_2("Can't set bounds for gtk widget if it's not parented to a valid VCF widget!") );			return ;		}		AbstractGTKControl::Container::moveChild( GTK_VCF_CONTAINER( gdkParent ), wndHandle_, ( int ) rect->left_, ( int ) rect->top_, ( int ) rect->getWidth(), ( int ) rect->getHeight() );	} else {		AbstractGTKControl::Container::move( wndHandle_, ( int ) rect->left_, ( int ) rect->top_, ( int ) rect->getWidth(), ( int ) rect->getHeight() );	}}bool AbstractGTKControl::beginSetBounds( const ulong32& numberOfChildren ){	return true;}void AbstractGTKControl::endSetBounds(){}Rect AbstractGTKControl::getBounds(){	return bounds_;}void AbstractGTKControl::setVisible( const bool& visible ){	if ( GTK_WIDGET_REALIZED( wndHandle_ ) ) {		if ( visible ) {			gtk_widget_show ( wndHandle_ );		} else {			gtk_widget_hide( wndHandle_ );		}	}}bool AbstractGTKControl::getVisible(){	//if ( GTK_WIDGET_REALIZED( wndHandle_ ) ) {	//return gdk_window_is_visible( wndHandle_->window ) ? true : false;	//}	return GTK_WIDGET_VISIBLE( wndHandle_ ) ? true : false;}Control* AbstractGTKControl::getControl(){	return control_;}void AbstractGTKControl::setControl( Control* component ){	control_ = component;}void AbstractGTKControl::setCursor( Cursor* cursor ){	gdk_window_set_cursor( wndHandle_->window, ( GdkCursor* ) cursor->getPeer() ->getCursorHandleID() );}void AbstractGTKControl::setParent( Control* parent ){	GtkWidget * gdkParent = ( GtkWidget* ) parent->getPeer() ->getHandleID();	if ( NULL == gtk_widget_get_parent( wndHandle_ ) ) {		gtk_container_add ( GTK_CONTAINER ( gdkParent ), wndHandle_ );	} else {		gtk_widget_reparent( wndHandle_, gdkParent );	}}Control* AbstractGTKControl::getParent(){	Control * result = NULL;	GtkWidget* gdkParent = gtk_widget_get_parent ( wndHandle_ );	AbstractGTKControl* parentCtrl = getGTKControlFromWidget( gdkParent );	if ( NULL != parentCtrl ) {		result = parentCtrl->getControl();	}	return result;}bool AbstractGTKControl::isFocused(){	return control_ == Control::getCurrentFocusedControl();}void AbstractGTKControl::setFocused(){	if ( GTK_WIDGET_CAN_FOCUS( wndHandle_ ) ) {		gtk_widget_grab_focus( wndHandle_ ); //gdk_window_focus( wndHandle_->window, GDK_CURRENT_TIME );	}}bool AbstractGTKControl::isEnabled(){	return enabled_;}void AbstractGTKControl::setEnabled( const bool& enabled ){	enabled_ = enabled;}void AbstractGTKControl::setFont( Font* font ){	GTKFont * peer = ( GTKFont* ) font->getFontPeer();	gtk_widget_modify_font( wndHandle_, peer->getPangoFontDescription() );	//gtk_widget_modify_font	//((GTKFont*)font->getPeer())->getPangoFontDescription()}void AbstractGTKControl::repaint( Rect* repaintRect ){	if ( repainted_ ) {		return ;	}	repainted_ = true;	if ( GTK_WIDGET_DRAWABLE( wndHandle_ ) ) {		GdkRectangle rect;		if ( NULL != repaintRect ) {			rect.x = ( int ) repaintRect->left_;			rect.y = ( int ) repaintRect->top_;			rect.width = ( int ) repaintRect->getWidth();			rect.height = ( int ) repaintRect->getHeight();		} else {			rect.x = 0;			rect.y = 0;			rect.width = ( int ) bounds_.getWidth();			rect.height = ( int ) bounds_.getHeight();		}		gdk_window_invalidate_rect( wndHandle_->window, &rect, FALSE );	}}void AbstractGTKControl::keepMouseEvents(){	//return;	//GdkEventMask eventMask = (GdkEventMask)	//							(GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_RELEASE_MASK);	int eventMask = GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK;	int res = gdk_pointer_grab( wndHandle_->window, FALSE, ( GdkEventMask ) eventMask, NULL, NULL, GDK_CURRENT_TIME );	if ( res != GDK_GRAB_SUCCESS ) {		//report error throw exception here ????		StringUtils::traceWithArgs( "gdk_pointer_grab failed!\n" );		return ;	}	gtk_grab_add ( wndHandle_ );}void AbstractGTKControl::releaseMouseEvents(){	//return;	GdkDisplay * display = gtk_widget_get_display ( wndHandle_ );	gtk_grab_remove ( wndHandle_ );	if ( gdk_display_pointer_is_grabbed ( display ) ) {		gdk_display_pointer_ungrab ( display, GDK_CURRENT_TIME );	}	gdk_pointer_ungrab( GDK_CURRENT_TIME );}String GTK_EventToString( GdkEvent* gtkEvent ){	String result;	static unsigned long count = 0;	switch ( gtkEvent->type ) {		case GDK_NOTHING : {				result += "GDK_NOTHING";			}			break;		case GDK_KEY_RELEASE : {				result += "GDK_KEY_RELEASE";			}			break;		case GDK_ENTER_NOTIFY : {				result += "GDK_ENTER_NOTIFY";			}			break;		case GDK_KEY_PRESS : {				result += "GDK_KEY_PRESS";			}			break;		case GDK_BUTTON_RELEASE : {				result += "GDK_BUTTON_RELEASE";			}			break;		case GDK_3BUTTON_PRESS : {				result += "GDK_3BUTTON_PRESS";			}			break;		case GDK_2BUTTON_PRESS : {				result += "GDK_2BUTTON_PRESS";			}			break;		case GDK_BUTTON_PRESS : {				result += "GDK_BUTTON_PRESS";			}			break;		case GDK_MOTION_NOTIFY : {				result += "GDK_MOTION_NOTIFY";			}			break;		case GDK_EXPOSE : {				result += "GDK_EXPOSE";			}			break;		case GDK_DESTROY : {				result += "GDK_DESTROY";			}			break;		case GDK_DELETE : {				result += "GDK_DELETE";			}			break;		case GDK_SELECTION_REQUEST : {				result += "GDK_SELECTION_REQUEST";			}			break;		case GDK_SELECTION_CLEAR : {				result += "GDK_SELECTION_CLEAR";			}			break;		case GDK_PROPERTY_NOTIFY : {				result += "GDK_PROPERTY_NOTIFY";			}			break;		case GDK_UNMAP : {				result += "GDK_UNMAP";			}			break;		case GDK_MAP : {				result += "GDK_MAP";			}			break;		case GDK_CONFIGURE : {				result += "GDK_CONFIGURE";			}			break;		case GDK_FOCUS_CHANGE : {				result += "GDK_FOCUS_CHANGE";			}			break;		case GDK_LEAVE_NOTIFY : {				result += "GDK_LEAVE_NOTIFY";			}			break;		case GDK_DRAG_MOTION : {				result += "GDK_DRAG_MOTION";			}			break;		case GDK_DRAG_LEAVE : {				result += "GDK_DRAG_LEAVE";			}			break;		case GDK_DRAG_ENTER : {				result += "GDK_DRAG_ENTER";			}			break;		case GDK_PROXIMITY_OUT : {				result += "GDK_PROXIMITY_OUT";			}			break;		case GDK_PROXIMITY_IN : {				result += "GDK_PROXIMITY_IN";			}			break;		case GDK_SELECTION_NOTIFY : {				result += "GDK_SELECTION_NOTIFY";			}			break;		case GDK_NO_EXPOSE : {				result += "GDK_NO_EXPOSE";			}			break;		case GDK_VISIBILITY_NOTIFY : {				result += "GDK_VISIBILITY_NOTIFY";			}			break;		case GDK_CLIENT_EVENT : {				result += "GDK_CLIENT_EVENT";			}			break;		case GDK_DROP_FINISHED : {				result += "GDK_DROP_FINISHED";			}			break;		case GDK_DROP_START : {				result += "GDK_DROP_START";			}			break;		case GDK_DRAG_STATUS : {				result += "GDK_DRAG_STATUS";			}			break;		case GDK_SETTING : {				result += "GDK_SETTING";			}			break;		case GDK_WINDOW_STATE : {				result += "GDK_WINDOW_STATE";			}			break;		case GDK_SCROLL : {				result += "GDK_SCROLL";			}			break;	}	result += " count: " + StringUtils::toString( count );	count ++;	return result;}gboolean AbstractGTKControl::handleEvent( GdkEvent* gtkEvent ){	//StringUtils::traceWithArgs( "widget: %p, name: %s, event: %s\n",	//								wndHandle_,	//								wndHandle_->name,	//								GTK_EventToString(gtkEvent).c_str() );

⌨️ 快捷键说明

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