Exemplo n.º 1
0
static PyObject *
get_browser_line(genericobject *g, PyObject *args)
{
	int i;
	char *str;

	if (!PyArg_Parse(args, "i", &i))
		return NULL;

	str = fl_get_browser_line (g->ob_generic, i);

	if (str == NULL) {
		Py_INCREF(Py_None);
		return Py_None;
	}
	return PyString_FromString (str);
}
Exemplo n.º 2
0
SuperSPEC *
spec_to_superspec( FL_OBJECT * obj )
{
    SuperSPEC *ssp;
    int i;
    int n;

    if ( ! obj->u_vdata )
    {
        obj->u_vdata = ssp = fl_calloc( 1, sizeof *ssp );

        ssp->content    = NULL;
        ssp->shortcut   = NULL;
        ssp->callback   = NULL;
        ssp->mode       = NULL;
        ssp->mval       = NULL;
        ssp->misc_char  = NULL;

        ssp->new_menuapi = 0;
        ssp->nlines      = 0;
    }
    else
        ssp = obj->u_vdata;

    if ( obj->objclass == FL_BROWSER )
    {
        FLI_BROWSER_SPEC *sp = obj->spec;

        ssp->h_pref = sp->h_pref;
        ssp->v_pref = sp->v_pref;

        for ( i = 1; i <= ssp->nlines; i++ )
            fl_free( ssp->content[ i ] );

        n = ssp->nlines = fl_get_browser_maxline( obj );

        ssp->content  = fl_realloc( ssp->content,
                                    ( n + 1 ) * sizeof *ssp->content );

        for ( i = 1; i <= n; i++ )
            ssp->content[ i ] = fl_strdup( fl_get_browser_line( obj, i ) );
    }
    else if ( obj->objclass == FL_CHOICE )
    {
        FLI_CHOICE_SPEC *sp = obj->spec;

        for ( i = 1; i <= ssp->nlines; i++ )
        {
            fl_free( ssp->content[ i ] );
            fl_free( ssp->shortcut[ i ] );
        }

        n = ssp->nlines = sp->numitems;

        ssp->content  = fl_realloc( ssp->content,
                                    ( n + 1 ) * sizeof *ssp->content );
        ssp->shortcut = fl_realloc( ssp->shortcut,
                                    ( n + 1 ) * sizeof *ssp->shortcut );
        ssp->mode     = fl_realloc( ssp->mode,
                                    ( n + 1 ) * sizeof *ssp->mode );

        ssp->align   = sp->align;
        ssp->int_val = sp->val;

        for ( i = 1; i <= n; i++ )
        {
            ssp->content[ i ] = fl_strdup( fl_get_choice_item_text( obj, i ) );

            if ( sp->shortcut[ i ] )
                ssp->shortcut[ i ] = fl_strdup( sp->shortcut[ i ] );
            else
                ssp->shortcut[ i ] = NULL;
        }

        memcpy( ssp->mode, sp->mode, ( n + 1 ) * sizeof *ssp->mode );

    }
    else if ( obj->objclass == FL_MENU )
    {
        FLI_MENU_SPEC *sp = obj->spec;

        for ( i = 1; i <= ssp->nlines; i++ )
        {
            fl_free( ssp->content[ i ] );
            fl_free( ssp->shortcut[ i ] );
            fl_free( ssp->callback[ i ] );
        }

        n = ssp->nlines = sp->numitems;

        ssp->content  = fl_realloc( ssp->content,
                                    ( n + 1 ) * sizeof *ssp->content );
        ssp->shortcut = fl_realloc( ssp->shortcut,
                                    ( n + 1 ) * sizeof *ssp->shortcut );
        ssp->callback = fl_realloc( ssp->callback,
                                    ( n + 1 ) * sizeof *ssp->callback );
        ssp->mode     = fl_realloc( ssp->mode,
                                    ( n + 1 ) * sizeof *ssp->mode );
        ssp->mval     = fl_realloc( ssp->mval,
                                    ( n + 1 ) * sizeof *ssp->mval );

        for ( i = 1; i <= n; i++ )
        {
            ssp->content[ i ] =
                      fl_strdup( fl_get_menu_item_text( obj, sp->mval[ i ] ) );

            if ( sp->shortcut[ i ] )
                ssp->shortcut[ i ] = fl_strdup( sp->shortcut[ i ] );
            else
                ssp->shortcut[ i ] = NULL;

            if ( sp->cb[ i ] )
                ssp->callback[ i ] = fl_strdup( ( char * ) sp->cb[ i ] );
            else
                ssp->callback[ i ] = NULL;
        }

        memcpy( ssp->mode, sp->mode, ( n + 1 ) * sizeof *ssp->mode );
        memcpy( ssp->mval, sp->mval, ( n + 1 ) * sizeof *ssp->mval );
        
    }
    else if (    obj->objclass == FL_SLIDER
              || obj->objclass == FL_VALSLIDER
              || obj->objclass == FL_THUMBWHEEL )
    {
        FLI_SLIDER_SPEC *sp = obj->spec;

        ssp->val        = sp->val;
        ssp->min        = sp->min;
        ssp->max        = sp->max;
        ssp->step       = sp->step;
        ssp->prec       = sp->prec;
        ssp->ldelta     = sp->ldelta;
        ssp->rdelta     = sp->rdelta;
        ssp->slsize     = sp->slsize;
    }
    else if (    ISBUTTON( obj->objclass )
              || obj->objclass == FL_PIXMAP
              || obj->objclass == FL_BITMAP )
    {
        FL_BUTTON_SPEC *sp = obj->spec;

        ssp->mbuttons = 0;
        for ( i = 0; i < 5; i++ )
            if ( sp->react_to[ i ] )
                ssp->mbuttons |= 1 << i; 

        ssp->int_val = sp->val;
    }
    else if ( obj->objclass == FL_POSITIONER )
    {
        FLI_POSITIONER_SPEC *sp = obj->spec;

        ssp->xstep      = sp->xstep;
        ssp->ystep      = sp->ystep;
        ssp->xmin       = sp->xmin;
        ssp->xmax       = sp->xmax;
        ssp->xval       = sp->xval;
        ssp->ymin       = sp->ymin;
        ssp->ymax       = sp->ymax;
        ssp->yval       = sp->yval;
    }
    else if ( obj->objclass == FL_COUNTER )
    {
        FLI_COUNTER_SPEC *sp = obj->spec;

        ssp->val        = sp->val;
        ssp->lstep      = sp->lstep;
        ssp->sstep      = sp->sstep;
        ssp->min        = sp->min;
        ssp->max        = sp->max;
        ssp->prec       = sp->prec;
    }
    else if ( obj->objclass == FL_DIAL )
    {
        FLI_DIAL_SPEC *sp = obj->spec;

        ssp->min        = sp->min;
        ssp->max        = sp->max;
        ssp->val        = sp->val;
        ssp->step       = sp->step;
        ssp->thetai     = sp->thetai;
        ssp->thetaf     = sp->thetaf;
        ssp->direction  = sp->direction;
    }
    else if ( obj->objclass == FL_XYPLOT )
    {
        FLI_XYPLOT_SPEC *sp = obj->spec;

        ssp->xmajor         = sp->xmajor;
        ssp->xminor         = sp->xminor;
        ssp->ymajor         = sp->ymajor;
        ssp->yminor         = sp->yminor;
        ssp->xscale         = sp->xscale;
        ssp->yscale         = sp->yscale;
        ssp->xgrid          = sp->xgrid;
        ssp->ygrid          = sp->ygrid;
        ssp->grid_linestyle = sp->grid_linestyle;
        ssp->xbase          = sp->xbase;
        ssp->ybase          = sp->ybase;
        ssp->mark_active    = sp->mark_active;
    }
    else if ( obj->objclass == FL_SCROLLBAR )
    {
        FLI_SCROLLBAR_SPEC *scbsp = obj->spec;
        FLI_SLIDER_SPEC *sp = scbsp->slider->spec;

        ssp->val    = sp->val;
        ssp->min    = sp->min;
        ssp->max    = sp->max;
        ssp->prec   = sp->prec;
        ssp->step   = sp->step;
        ssp->slsize = sp->slsize;
        ssp->ldelta = sp->ldelta;
        ssp->rdelta = sp->rdelta;
    }
    else if ( obj->objclass == FL_SPINNER )
    {
        FLI_SPINNER_SPEC *sp = obj->spec;

        ssp->val = fl_get_spinner_value( obj );
        fl_get_spinner_bounds( obj, &ssp->min, &ssp->max );
        ssp->step = fl_get_spinner_step( obj );
        ssp->prec = fl_get_spinner_precision( obj );
        ssp->orient = sp->orient;
    }

    return ssp;
}