Example #1
0
	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);
	}
Example #2
0
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;
}
Example #3
0
	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);
	}
Example #4
0
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);
}
Example #5
0
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;
}
Example #6
0
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;
   }
}
Example #7
0
	PObject PDict::GetItem(char* key) const {
		if (!this->myObject) { throw new NULLPyObjectException(); }
		PyObject* ret = ::PyDict_GetItemString(this->myObject, key);
		return PObject(ret, true);
	}
Example #8
0
	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);
	}
Example #9
0
	PObject PObject::getAttr(PyObject* attr) const {
		if (!this->myObject) { throw new NULLPyObjectException(); }
		PyObject* ret = ::PyObject_GetAttr(this->myObject, attr);
		return PObject(ret, true);
	}
Example #10
0
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;
}
Example #11
0
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);
}