Prima

 view release on metacpan or  search on metacpan

class/Widget/events.c  view on Meta::CPAN

			if ( my-> first_that( self, (void*)prima_accel_notify, &ev)) {
				my-> clear_event( self);
				return;
			}
			objCheck;
			ev = *event;
			if ( my-> first_that( self, (void*)prima_accel_notify, &ev)) {
				my-> clear_event( self);
				return;
			}
		}
		break;
	}
}

static Bool
find_dup_msg( PEvent event, int * cmd)
{
	return event-> cmd == *cmd;
}

static void
handle_move( Handle self, PEvent event)
{
	enter_method;
	Bool doNotify = false;
	Point oldP;
	if ( var-> stage == csNormal && var-> evQueue == NULL) {
		doNotify = true;
	} else if ( var-> stage > csNormal) {
		return;
	} else if ( var-> evQueue != NULL) {
		int i = list_first_that( var-> evQueue, (void*)find_dup_msg, &event-> cmd);
		PEvent n;
		if ( i < 0) {
			if ( !( n = alloc1( Event))) goto MOVE_EVENT;
			memcpy( n, event, sizeof( Event));
			n-> gen. B = 1;
			n-> gen. R. left = n-> gen. R. bottom = 0;
			list_add( var-> evQueue, ( Handle) n);
		} else
			n = ( PEvent) list_at( var-> evQueue, i);
		n-> gen. P = event-> gen. P;
	}
MOVE_EVENT:;
	if ( !event-> gen. B)
		my-> first_that( self, (void*) Widget_move_notify, &event-> gen. P);
	if ( doNotify) oldP = var-> pos;
	var-> pos = event-> gen. P;
	if ( doNotify &&
		(oldP. x != event-> gen. P. x ||
			oldP. y != event-> gen. P. y)) {
		my-> notify( self, "<sPP", "Move", oldP, event-> gen. P);
		objCheck;
		if ( var->geometry == gtGrowMode && var-> growMode & gmCenter)
			my-> set_centered( self, var-> growMode & gmXCenter, var-> growMode & gmYCenter);
	}
}

static void
handle_popup( Handle self, PEvent event)
{
	enter_method;
	Handle org = self;
	my-> notify( self, "<siP", "Popup", event-> gen. B, event-> gen. P. x, event-> gen. P. y);
	objCheck;
	if ( evOK) {
		while ( self) {
			PPopup p = ( PPopup) CWidget( self)-> get_popup( self);
			if ( p && p-> self-> get_autoPopup(( Handle) p)) {
				Point px = event-> gen. P;
				apc_widget_map_points( org,  true,  1, &px);
				apc_widget_map_points( self, false, 1, &px);
				p-> self-> popup(( Handle) p, px. x, px. y ,0,0,0,0);
				CWidget( org)-> clear_event( org);
				return;
			}
			self = var-> owner;
		}
	}
}

static void
handle_size( Handle self, PEvent event)
{
	enter_method;
	/* expecting new size in P, old & new size in R. */
	Bool doNotify = false;
	if ( var-> stage == csNormal && var-> evQueue == NULL) {
		doNotify = true;
	} else if ( var-> stage > csNormal) {
		return;
	} else if ( var-> evQueue != NULL) {
		int i = list_first_that( var-> evQueue, (void*)find_dup_msg, &event-> cmd);
		PEvent n;
		if ( i < 0) {
			if ( !( n = alloc1( Event))) goto SIZE_EVENT;
			memcpy( n, event, sizeof( Event));
			n-> gen. B = 1;
			n-> gen. R. left = n-> gen. R. bottom = 0;
			list_add( var-> evQueue, ( Handle) n);
		} else
			n = ( PEvent) list_at( var-> evQueue, i);
		n-> gen. P. x = n-> gen. R. right  = event-> gen. P. x;
		n-> gen. P. y = n-> gen. R. top    = event-> gen. P. y;
	}
SIZE_EVENT:;
	if ( var->geometry == gtGrowMode && var-> growMode & gmCenter)
		my-> set_centered( self, var-> growMode & gmXCenter, var-> growMode & gmYCenter);
	if ( !event-> gen. B)
		my-> first_that( self, (void*) Widget_size_notify, &event-> gen. R);
	var-> w = event-> gen. P. x;
	var-> h = event-> gen. P. y;
	if ( doNotify) {
		Point oldSize;
		oldSize. x = event-> gen. R. left;
		oldSize. y = event-> gen. R. bottom;
		my-> notify( self, "<sPP", "Size", oldSize, event-> gen. P);
	}
	Widget_pack_slaves( self);
	Widget_place_slaves( self) ;
}

static Bool
pquery ( Handle window, Handle self, void * v)
{
	enter_method;
	Event ev = {cmClose};
	return ( var-> stage <= csNormal) ? !my-> message( self, &ev) : false;
}

Bool
prima_find_accel( Handle self, Handle item, int * key)
{

class/Widget/events.c  view on Meta::CPAN

				my-> notify( self, "<s", "Setup");
			}
			break;
		case cmRepaint:
			my-> repaint( self);
			break;
		case cmPaint        :
			if ( !opt_InPaint && !my-> get_locked( self))
				if ( inherited-> begin_paint( self)) {
					if ( apc_widget_begin_paint( self, true)) {
						Bool flag = exception_block(true);
						my-> notify( self, "<sH", "Paint", self);
						exception_block(flag);
						if ( var-> stage == csNormal ) apc_widget_end_paint( self);
						EXCEPTION_CHECK_RAISE;
						objCheck;
						inherited-> end_paint( self);
					} else
						inherited-> end_paint( self);
				}
			break;
		case cmEnable       :
			my-> notify( self, "<s", "Enable");
			break;
		case cmDisable      :
			my-> notify( self, "<s", "Disable");
			break;
		case cmReceiveFocus :
			my-> notify( self, "<s", "Enter");
			break;
		case cmReleaseFocus :
			my-> notify( self, "<s", "Leave");
			break;
		case cmShow         :
			my-> notify( self, "<s", "Show");
			break;
		case cmHide         :
			my-> notify( self, "<s", "Hide");
			break;
		case cmHint:
			my-> notify( self, "<si", "Hint", event-> gen. B);
			break;
		case cmClose        :
			if ( my-> first_that( self, (void*)pquery, NULL)) {
				my-> clear_event( self);
				return;
			}
			objCheck;
			my-> notify( self, "<s", "Close");
			break;
		case cmZOrderChanged:
			my-> notify( self, "<s", "ZOrderChanged");
			break;
		case cmClick:
			my-> notify( self, "<s", "Click");
			break;
		case cmColorChanged:
			if ( !kind_of( event-> gen. source, CPopup))
				my-> notify( self, "<si", "ColorChanged", event-> gen. i);
			else
				var-> popupColor[ event-> gen. i] =
					apc_menu_get_color( event-> gen. source, event-> gen. i);
			break;
		case cmFontChanged:
			if ( !kind_of( event-> gen. source, CPopup))
				my-> notify( self, "<s", "FontChanged");
			else
				apc_menu_get_font( event-> gen. source, &var-> popupFont);
			break;
		case cmMenu:
			if ( event-> gen. H) {
				char buffer[16], *context;
				context = ((( PAbstractMenu) event-> gen. H)-> self)-> make_id_context( event-> gen. H, event-> gen. i, buffer);
				my-> notify( self, "<sHs", "Menu", event-> gen. H, context);
			}
			break;
		case cmMouseClick:
			my-> notify( self, "<siiPi", "MouseClick",
				event-> pos. button, event-> pos. mod, event-> pos. where, event-> pos. nth);
			break;
		case cmMouseDown:
			if (P_APPLICATION-> hintUnder == self)
				my-> set_hintVisible( self, 0);
			objCheck;
			if (((event-> pos. button & var-> selectingButtons) != 0) && my-> get_selectable( self))
				my-> set_selected( self, true);
			objCheck;
			my-> notify( self, "<siiP", "MouseDown",
				event-> pos. button, event-> pos. mod, event-> pos. where);
			break;
		case cmMouseUp:
			my-> notify( self, "<siiP", "MouseUp",
				event-> pos. button, event-> pos. mod, event-> pos. where);
			break;
		case cmMouseMove:
			if (P_APPLICATION-> hintUnder == self)
				my-> set_hintVisible( self, -1);
			objCheck;
			my-> notify( self, "<siP", "MouseMove", event-> pos. mod, event -> pos. where);
			break;
		case cmMouseWheel:
			my-> notify( self, "<siPi", "MouseWheel",
				event-> pos. mod, event -> pos. where,
				event-> pos. button); /* +n*delta == up, -n*delta == down */
			break;
		case cmMouseEnter:
			my-> notify( self, "<siP", "MouseEnter", event-> pos. mod, event -> pos. where);
			objCheck;
			if (
				prima_guts.application &&
				is_opt( optShowHint) &&
				(P_APPLICATION-> options. optShowHint) &&
				var-> hint &&
				SvOK(var->hint) &&
				SvCUR(var-> hint)
			)
				C_APPLICATION-> set_hint_action( prima_guts.application, self, true, true);
			break;
		case cmMouseLeave:
			if ( prima_guts.application && is_opt( optShowHint))
				C_APPLICATION-> set_hint_action( prima_guts.application, self, false, true);
			my-> notify( self, "<s", "MouseLeave");
			break;
		case cmKeyDown:
			handle_key_down(self, event);
			break;
		case cmDelegateKey:
			handle_delegate_key( self, event );
			break;
		case cmTranslateAccel:
		{
			int key = CAbstractMenu-> translate_key( NULL_HANDLE, event-> key. code, event-> key. key, event-> key. mod);
			if ( my-> first_that_component( self, 0, (void*)prima_find_accel, &key)) {
				my-> clear_event( self);
				return;
			}
			objCheck;
			my-> notify( self, "<siii", "TranslateAccel",
				event-> key.code, event-> key. key, event-> key. mod);
			break;
		}
		case cmKeyUp:
			my-> notify( self, "<siii", "KeyUp",
			event-> key.code, event-> key. key, event-> key. mod);
			break;
		case cmMenuCmd:
			if ( event-> gen. source)
				((( PAbstractMenu) event-> gen. source)-> self)-> 
					sub_call_id( event-> gen. source, event-> gen. i);
			break;
		case cmMove:
			handle_move(self, event);
			break;
		case cmPopup:
			handle_popup(self, event);
			break;
		case cmSize:
			handle_size( self, event);
			break;
		case cmDragBegin       :
			handle_drag_begin( self, event );
			break;
		case cmDragOver       :
			handle_drag_over( self, event );
			break;
		case cmDragEnd        :
			handle_drag_end( self, event );
			break;
		case cmDragQuery       :
			handle_drag_query( self, event );
			break;
		case cmDragResponse     :
			my-> notify( self, "<siiH", "DragResponse", 
				event->dnd.allow, event->dnd.action, event->dnd.counterpart);
			break;
		case cmMenuItemMeasure  :
		case cmMenuItemPaint    :
			{
				Handle menu = event->gen.H;
				event->gen.H = self;
				PComponent(menu)->self->handle_event(menu, event);
				break;
			}
	}
}

void
Widget_key_event( Handle self, int command, int code, int key, int mod, int repeat, Bool post)
{
	Event ev;
	if ( command != cmKeyDown && command != cmKeyUp) return;
	memset( &ev, 0, sizeof( ev));
	if ( repeat <= 0) repeat = 1;
	ev. cmd = command;
	ev. key. code   = code;
	ev. key. key    = key;
	ev. key. mod    = mod;
	ev. key. repeat = repeat;
	apc_message( self, &ev, post);
}

void
Widget_mouse_event( Handle self, int command, int button, int mod, int x, int y, int nth, Bool post)
{
	Event ev;
	if ( command != cmMouseDown
		&& command != cmMouseUp
		&& command != cmMouseClick
		&& command != cmMouseMove
		&& command != cmMouseWheel
		&& command != cmMouseEnter
		&& command != cmMouseLeave
	) return;

	memset( &ev, 0, sizeof( ev));

class/Widget/events.c  view on Meta::CPAN

	p-> h = self;
	if ( var-> postList == NULL)
		var-> postList = plist_create( 8, 8);
	list_add( var-> postList, ( Handle) p);
	ev. gen. p = p;
	ev. gen. source = ev. gen. H = self;
	apc_message( self, &ev, true);
}

Bool
Widget_process_accel( Handle self, int key)
{
	enter_method;
	if ( my-> first_that_component( self, 0, (void*)prima_find_accel, &key)) return true;
	return kind_of( var-> owner, CWidget) ?
			((( PWidget) var-> owner)-> self)->process_accel( var-> owner, key) : false;
}

void
Widget_on_paint( Handle self, SV * canvas)
{
	int i;
	dSP;
	ENTER;
	SAVETMPS;
	PUSHMARK( sp);
	XPUSHs( canvas);
	for ( i = 0; i < 4; i++)
		XPUSHs( sv_2mortal( newSViv( -1)));
	PUTBACK;
	PERL_CALL_METHOD( "clear", G_DISCARD);
	SPAGAIN;
	PUTBACK;
	FREETMPS;
	LEAVE;
}

/*
void Widget_on_click( Handle self) {}
void Widget_on_change( Handle self) {}
void Widget_on_close( Handle self) {}
void Widget_on_colorchanged( Handle self, int colorIndex){}
void Widget_on_disable( Handle self) {}
void Widget_on_dragdrop( Handle self, Handle source , int x , int y ) {}
void Widget_on_dragover( Handle self, Handle source , int x , int y , int state ) {}
void Widget_on_enable( Handle self) {}
void Widget_on_enddrag( Handle self, Handle target , int x , int y ) {}
void Widget_on_fontchanged( Handle self) {}
void Widget_on_enter( Handle self) {}
void Widget_on_keydown( Handle self, int code , int key , int shiftState, int repeat ) {}
void Widget_on_keyup( Handle self, int code , int key , int shiftState ) {}
void Widget_on_menu( Handle self, Handle menu, char * variable) {}
void Widget_on_setup( Handle self) {}
void Widget_on_size( Handle self, Point oldSize, Point newSize) {}
void Widget_on_move( Handle self, Point oldPos, Point newPos) {}
void Widget_on_show( Handle self) {}
void Widget_on_hide( Handle self) {}
void Widget_on_hint( Handle self, Bool show) {}
void Widget_on_translateaccel( Handle self, int code , int key , int shiftState ) {}
void Widget_on_zorderchanged( Handle self) {}
void Widget_on_popup( Handle self, Bool mouseDriven, int x, int y) {}
void Widget_on_mouseclick( Handle self, int button , int shiftState , int x , int y , Bool dbl ) {}
void Widget_on_mousedown( Handle self, int button , int shiftState , int x , int y ) {}
void Widget_on_mouseup( Handle self, int button , int shiftState , int x , int y ) {}
void Widget_on_mousemove( Handle self, int shiftState , int x , int y ) {}
void Widget_on_mousewheel( Handle self, int shiftState , int x , int y, int z ) {}
void Widget_on_mouseenter( Handle self, int shiftState , int x , int y ) {}
void Widget_on_mouseleave( Handle self ) {}
void Widget_on_leave( Handle self) {}
*/


#ifdef __cplusplus
}
#endif



( run in 1.324 second using v1.01-cache-2.11-cpan-364913b4093 )