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 )