PObject PMapping::GetItem(char* key) const { if (!this->myObject) { throw new NULLPyObjectException(); } PyObject* ret = ::PyMapping_GetItemString(this->myObject, key); if (ret == NULL) { throw new IndexOutOfRangeException(); } return PObject(ret, true); }
Bool apc_gp_set_region( Handle self, Handle rgn) { DEFXX; Region region; PRegionSysData r; if ( PObject( self)-> options. optInDrawInfo) return false; if ( !XF_IN_PAINT(XX)) return false; if (rgn == nilHandle) { Rect r; r. left = 0; r. bottom = 0; r. right = XX-> size. x - 1; r. top = XX-> size. y - 1; return apc_gp_set_clip_rect( self, r); } r = GET_REGION(rgn); XClipBox( r-> region, &XX-> clip_rect); XX-> clip_rect. y += XX-> size. y - r-> height; XX-> clip_mask_extent. x = XX-> clip_rect. width; XX-> clip_mask_extent. y = XX-> clip_rect. height; if ( XX-> clip_rect. width == 0 || XX-> clip_rect. height == 0) { Rect r; r. left = -1; r. bottom = -1; r. right = -1; r. top = -1; return apc_gp_set_clip_rect( self, r); } region = XCreateRegion(); XUnionRegion( region, r-> region, region); /* offset region if drawable is buffered */ XOffsetRegion( region, XX-> btransform. x, XX-> size.y - r-> height - XX-> btransform. y); /* otherwise ( and only otherwise ), and if there's a X11 clipping, intersect the region with it. X11 clipping must not mix with the buffer clipping */ if (( !XX-> udrawable || XX-> udrawable == XX-> gdrawable) && XX-> paint_region) XIntersectRegion( region, XX-> paint_region, region); XSetRegion( DISP, XX-> gc, region); if ( XX-> flags. kill_current_region) XDestroyRegion( XX-> current_region); XX-> flags. kill_current_region = 1; XX-> current_region = region; XX-> flags. xft_clip = 0; #ifdef USE_XFT if ( XX-> xft_drawable) prima_xft_update_region( self); #endif #ifdef HAVE_X11_EXTENSIONS_XRENDER_H if ( XX-> argb_picture ) XRenderSetPictureClipRegion(DISP, XX->argb_picture, region); #endif return true; }
PObject PSequence::GetItem(Py_ssize_t i) const { if (!this->myObject) { throw new NULLPyObjectException(); } PyObject* ret = ::PySequence_GetItem(this->myObject, i); if (ret == NULL) { if (PyErr_ExceptionMatches(PyExc_IndexError)) { PyErr_Clear(); throw new IndexOutOfRangeException(); } } return PObject(ret, true); }
void AbstractMenu_dispose_menu( Handle self, void * menu) { PMenuItemReg m = ( PMenuItemReg) menu; if ( m == nil) return; free( m-> text); free( m-> accel); free( m-> variable); free( m-> perlSub); if ( m-> code) sv_free( m-> code); if ( m-> data) sv_free( m-> data); if ( m-> bitmap) { if ( PObject( m-> bitmap)-> stage < csDead) SvREFCNT_dec( SvRV(( PObject( m-> bitmap))-> mate)); unprotect_object( m-> bitmap); } my-> dispose_menu( self, m-> next); my-> dispose_menu( self, m-> down); free( m); }
Handle AbstractMenu_image( Handle self, Bool set, char * varName, Handle image) { PMenuItemReg m; PImage i = ( PImage) image; if ( var-> stage > csFrozen) return nilHandle; m = find_menuitem( self, varName, true); if ( m == nil) return nilHandle; if ( !m-> bitmap) return nilHandle; if ( !set) { if ( PObject( m-> bitmap)-> stage == csDead) return nilHandle; return m-> bitmap; } if (( image == nilHandle) || !( kind_of( image, CImage))) { warn("invalid object passed to ::image"); return nilHandle; } if ( i-> w == 0 || i-> h == 0) { warn("invalid object passed to ::image"); return nilHandle; } SvREFCNT_inc( SvRV(( PObject( image))-> mate)); protect_object( image); if ( PObject( m-> bitmap)-> stage < csDead) SvREFCNT_dec( SvRV(( PObject( m-> bitmap))-> mate)); unprotect_object( m-> bitmap); m-> bitmap = image; if ( m-> id > 0) if ( var-> stage <= csNormal && var-> system) apc_menu_item_set_image( self, m); return nilHandle; }
void Application_HintTimer_handle_event( Handle timer, PEvent event) { CComponent-> handle_event( timer, event); if ( event-> cmd == cmTimer) { Handle self = application; CTimer(timer)-> stop( timer); if ( var-> hintActive == 1) { Event ev = {cmHint}; if ( !var->hintUnder || apc_application_get_widget_from_point( self, my-> get_pointerPos(self)) != var->hintUnder || PObject( var-> hintUnder)-> stage != csNormal) return; ev. gen. B = true; ev. gen. H = var-> hintUnder; var-> hintVisible = 1; if (( PWidget( var-> hintUnder)-> stage == csNormal) && ( CWidget( var-> hintUnder)-> message( var-> hintUnder, &ev))) hshow( self); } else if ( var-> hintActive == -1) var-> hintActive = 0; } }
PObject PDict::GetItem(char* key) const { if (!this->myObject) { throw new NULLPyObjectException(); } PyObject* ret = ::PyDict_GetItemString(this->myObject, key); return PObject(ret, true); }
PObject PObject::call(PyObject* arg0, PyObject* arg1, PyObject* arg2, PyObject* arg3) { if (!this->myObject) { throw new NULLPyObjectException(); } //A null argument MUST BE PASSED at the end! PyObject* ret = PyObject_CallFunctionObjArgs(this->myObject, arg0, arg1, arg2, arg3); return PObject(ret, true); }
PObject PObject::getAttr(PyObject* attr) const { if (!this->myObject) { throw new NULLPyObjectException(); } PyObject* ret = ::PyObject_GetAttr(this->myObject, attr); return PObject(ret, true); }
void * AbstractMenu_new_menu( Handle self, SV * sv, int level) { AV * av; int i, count; int n; PMenuItemReg m = nil; PMenuItemReg curr = nil; Bool rightAdjust = false; if ( level == 0) { if ( SvTYPE( sv) == SVt_NULL) return nil; /* null menu */ } if ( !SvROK( sv) || ( SvTYPE( SvRV( sv)) != SVt_PVAV)) { warn("menu build error: menu is not an array"); return nil; } av = (AV *) SvRV( sv); n = av_len( av); if ( n == -1) { if ( level == 0) return nil; /* null menu */ warn("menu build error: empty array passed"); return nil; } /* cycling the list of items */ for ( i = 0; i <= n; i++) { SV **itemHolder = av_fetch( av, i, 0); AV *item; SV *subItem; PMenuItemReg r; SV **holder; int l_var = -1; int l_text = -1; int l_sub = -1; int l_accel = -1; int l_key = -1; int l_data = -1; if ( itemHolder == nil) { warn("menu build error: array panic"); my-> dispose_menu( self, m); return nil; } if ( !SvROK( *itemHolder) || ( SvTYPE( SvRV( *itemHolder)) != SVt_PVAV)) { warn("menu build error: submenu is not an array"); my-> dispose_menu( self, m); return nil; } /* entering item description */ item = ( AV *) SvRV( *itemHolder); count = av_len( item) + 1; if ( count > 6) { warn("menu build error: extra declaration"); count = 5; } if ( !( r = alloc1z( MenuItemReg))) { warn( "Not enough memory"); my-> dispose_menu( self, m); return nil; } r-> key = kbNoKey; if ( count < 2) { /* empty or 1 means line divisor, no matter of text */ r-> flags. divider = true; rightAdjust = (( level == 0) && ( var-> anchored)); if ( count == 1) l_var = 0; } else if ( count == 2) { l_text = 0; l_sub = 1; } else if ( count == 3) { l_var = 0; l_text = 1; l_sub = 2; } else if ( count == 4) { l_text = 0; l_accel = 1; l_key = 2; l_sub = 3; } else if ( count == 5) { l_var = 0; l_text = 1; l_accel = 2; l_key = 3; l_sub = 4; } else { l_var = 0; l_text = 1; l_accel = 2; l_key = 3; l_sub = 4; l_data = 5; } if ( m) curr = curr-> next = r; else curr = m = r; /* adding to list */ r-> flags. rightAdjust = rightAdjust ? 1 : 0; r-> id = ++(var-> autoEnum); #define a_get( l_, fl_, num) \ if ( num >= 0 ) { \ holder = av_fetch( item, num, 0); \ if ( holder) { \ if ( SvTYPE(*holder) != SVt_NULL) { \ l_ = duplicate_string( SvPV_nolen( *holder)); \ fl_ = prima_is_utf8_sv(*holder); \ } \ } else { \ warn("menu build error: array panic"); \ my-> dispose_menu( self, m); \ return nil; \ } \ } a_get( r-> accel , r-> flags. utf8_accel, l_accel); a_get( r-> variable, r-> flags. utf8_variable, l_var); if ( l_key >= 0) { holder = av_fetch( item, l_key, 0); if ( !holder) { warn("menu build error: array panic"); my-> dispose_menu( self, m); return nil; } r-> key = key_normalize( SvPV_nolen( *holder)); } if ( r-> variable) { #define s r-> variable int i, decr = 0; for ( i = 0; i < 2; i++) { switch ( s[i]) { case '-': r-> flags. disabled = 1; decr++; break; case '*': r-> flags. checked = 1; decr++; break; case '@': if ( r-> flags. divider ) warn("warning: auto-toggle flag @ ignored on a divider menu"); else r-> flags. autotoggle = 1; decr++; break; default: break; } } if ( decr) memmove( s, s + decr, strlen( s) + 1 - decr); if ( strlen( s) == 0 || is_var_id_name( s) != 0) { free( r-> variable); r-> variable = nil; } #undef s } /* parsing text */ if ( l_text >= 0) { holder = av_fetch( item, l_text, 0); if ( !holder) { warn("menu build error: array panic"); my-> dispose_menu( self, m); return nil; } subItem = *holder; if ( SvROK( subItem)) { Handle c_object = gimme_the_mate( subItem); if (( c_object == nilHandle) || !( kind_of( c_object, CImage))) { warn("menu build error: not an image passed"); goto TEXT; } if (((( PImage) c_object)-> w == 0) || ((( PImage) c_object)-> h == 0)) { warn("menu build error: invalid image passed"); goto TEXT; } protect_object( r-> bitmap = c_object); SvREFCNT_inc( SvRV(( PObject( r-> bitmap))-> mate)); } else { TEXT: r-> text = duplicate_string( SvPV_nolen( subItem)); r-> flags. utf8_text = prima_is_utf8_sv( subItem); } } /* parsing sub */ if ( l_sub >= 0) { holder = av_fetch( item, l_sub, 0); if ( !holder) { warn("menu build error: array panic"); my-> dispose_menu( self, m); return nil; } subItem = *holder; if ( SvROK( subItem)) { if ( SvTYPE( SvRV( subItem)) == SVt_PVCV) { r-> code = newSVsv( subItem); } else { r-> down = ( PMenuItemReg) my-> new_menu( self, subItem, level + 1); if ( r-> down == nil) { /* seems error was occured inside this call */ my-> dispose_menu( self, m); return nil; } } } else { if ( SvPOK( subItem)) { r-> perlSub = duplicate_string( SvPV_nolen( subItem)); r-> flags. utf8_perlSub = prima_is_utf8_sv( subItem); } else { warn("menu build error: invalid sub name passed"); } } } /* parsing data */ if ( l_data >= 0) { holder = av_fetch( item, l_data, 0); if ( !holder) { warn("menu build error: array panic"); my-> dispose_menu( self, m); return nil; } r-> data = newSVsv( *holder); } } return m; }
static SV * new_av( PMenuItemReg m, int level) { AV * glo; if ( m == nil) return nilSV; glo = newAV(); while ( m) { AV * loc = newAV(); if ( !m-> flags. divider) { if ( m-> variable) { /* has name */ SV * sv; int shift = ( m-> flags. checked ? 1 : 0) + ( m-> flags. disabled ? 1 : 0); if ( shift > 0) { /* has flags */ int len = (int) strlen( m-> variable); char * name = allocs( len + shift); if ( name) { int slen = len + shift; memcpy( name + shift, m-> variable, len); if ( m-> flags. disabled) name[ --shift] = '-'; if ( m-> flags. checked) name[ --shift] = '*'; if ( m-> flags. autotoggle) name[ --shift] = '@'; sv = newSVpv( name, slen); } else sv = newSVpv( m-> variable, len); } else /* has name but no flags */ sv = newSVpv( m-> variable, 0); if ( m-> flags. utf8_variable) SvUTF8_on( sv); av_push( loc, sv); } else { /* has flags but no name - autogenerate */ int len; char buffer[20]; len = sprintf( buffer, "%s%s%s#%d", m-> flags. disabled ? "-" : "", m-> flags. checked ? "*" : "", m-> flags. autotoggle ? "@" : "", m-> id); av_push( loc, newSVpv( buffer, ( STRLEN) len)); } if ( m-> bitmap) { if ( PObject( m-> bitmap)-> stage < csDead) av_push( loc, newRV( SvRV((( PObject)( m-> bitmap))-> mate))); else av_push( loc, newSVpv( "", 0)); } else { SV * sv = newSVpv( m-> text, 0); if ( m-> flags. utf8_text) SvUTF8_on( sv); av_push( loc, sv); } if ( m-> accel) { SV * sv = newSVpv( m-> accel, 0); av_push( loc, sv); if ( m-> flags. utf8_accel) SvUTF8_on( sv); } else { av_push( loc, newSVpv( "", 0)); } av_push( loc, newSViv( m-> key)); if ( m-> down) { av_push( loc, new_av( m-> down, level + 1)); } else if ( m-> code) { av_push( loc, newSVsv( m-> code)); } else if ( m-> perlSub) { SV * sv = newSVpv( m-> perlSub, 0); if ( m-> flags. utf8_perlSub) SvUTF8_on( sv); av_push( loc, sv); } else { av_push( loc, newSVpv( "", 0)); } if ( m-> data) av_push( loc, newSVsv( m-> data)); } else { /* divider */ if ( m-> variable) { SV * sv = newSVpv( m-> variable, 0); if ( m-> flags. utf8_perlSub) SvUTF8_on( sv); av_push( loc, sv); } else { int len; char buffer[20]; len = sprintf( buffer, "#%d", m-> id); av_push( loc, newSVpv( buffer, ( STRLEN) len)); } } av_push( glo, newRV_noinc(( SV *) loc)); m = m-> next; } return newRV_noinc(( SV *) glo); }