Пример #1
0
int OBJFN_Down(void)
{
	ObjTop++;
	if((ObjVisible<ObjTotal) || (ObjTop>(ObjTotal-ObjVisible))) ObjTop=ObjTotal-ObjVisible;
	SetGadgetAttrs(ObjectGadgets[GD_OBJLIST],ObjectWnd,NULL,LIST_Top,ObjTop,TAG_DONE);
	SetGadgetAttrs((struct Gadget *)ObjVertProp,ObjectWnd,NULL,PGA_Top,ObjTop,TAG_DONE);
	return 1;
}
Пример #2
0
int OBJFN_Up(void)
{
	ObjTop--;
	if(ObjTop<0L) ObjTop=0L;
	SetGadgetAttrs(ObjectGadgets[GD_OBJLIST],ObjectWnd,NULL,LIST_Top,ObjTop,TAG_DONE);
	SetGadgetAttrs((struct Gadget *)ObjVertProp,ObjectWnd,NULL,PGA_Top,ObjTop,TAG_DONE);
	return 1;
}
Пример #3
0
static void UpdateSliderLevel(int src, int dst, LONG *index, char * (*func)(void)) {
  if(GetAttr( SLIDER_Level, Window_Objs[src], (ULONG *) index)) {
    SetGadgetAttrs((struct Gadget *) Window_Objs[dst],
        window, NULL,
        INFO_TextFormat, (ULONG) (*(func))(), 
        TAG_DONE );
  }
}
Пример #4
0
int FN_TBP_PALETTE_Clicked(void)
{
	struct Node_Image *ni;

	piGetAttr(CurrentImage,OBJ_Node,(ULONG *)&ni);
	SetGadgetAttrs((struct Gadget *)ni->ni_Draw,ni->ni_Window,NULL,DRAW_ActualPen,FindPen(ni,TB_PointerMsg.Code),TAG_DONE);
	return 1;
}
Пример #5
0
static void GUINewUnit(void) {
  DoMethod( Window_Objs[ACTID_MODE], LVM_CLEAR, NULL );
  DoMethod( Window_Objs[ACTID_MODE], LVM_ADDENTRIES, NULL, Modes, LVAP_HEAD);
  BGUI_DoGadgetMethod( Window_Objs[ACTID_MODE], window, NULL,
    LVM_REFRESH );
  SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_MODE], window, NULL,
    LISTV_Select,      state.ModeSelected,
    TAG_DONE );
  GUINewMode();
}
Пример #6
0
static void GUINewSettings(void) {
  Object *oldcycle;
  Object *cycle = CycleObject,
      CYC_Labels,    Units,
      CYC_Active,    state.UnitSelected,
      CYC_PopActive, PopUpMenus,
      CYC_Popup,     PopUpMenus,
      GA_ID,         ACTID_UNIT,
  EndObject;

  if(cycle) {
    oldcycle = (Object *) DoMethod( vgroup, GRM_REPLACEMEMBER,
      Window_Objs[ACTID_UNIT], cycle, FixMinHeight, TAG_DONE);
    if(oldcycle) {
      DisposeObject(oldcycle);
      Window_Objs[ACTID_UNIT] = cycle;
    }
    else {
      DisposeObject(cycle);
    }
  }

  SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_DEBUG], window, NULL,
      CYC_Active, globalprefs.ahigp_DebugLevel, TAG_DONE);
  SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_SURROUND], window, NULL,
      CYC_Active, globalprefs.ahigp_DisableSurround, TAG_DONE);
  SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_ECHO], window, NULL,
      CYC_Active, (globalprefs.ahigp_DisableEcho ? 2 : 0) | 
                  (globalprefs.ahigp_FastEcho    ? 1 : 0),     TAG_DONE);
  SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_CLIPMV], window, NULL,
      CYC_Active, globalprefs.ahigp_ClipMasterVolume, TAG_DONE);
  SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_CPULIMIT], window, NULL,
      SLIDER_Level, (globalprefs.ahigp_MaxCPU * 100 + 32768) >> 16, TAG_DONE);

  GUINewUnit();
}
Пример #7
0
void ami_recreate_listbrowser(struct treeview_window *twin)
{
	static WORD gen=0;

	SetGadgetAttrs(twin->gadgets[GID_TREEBROWSER],twin->win,NULL,
					LISTBROWSER_Labels,~0,
					TAG_DONE);

	FreeListBrowserList(twin->listbrowser_list);
	ami_add_elements(twin,twin->tree->root,&gen);

	RefreshSetGadgetAttrs(twin->gadgets[GID_TREEBROWSER],twin->win,NULL,
							LISTBROWSER_Labels,twin->listbrowser_list,
							LISTBROWSER_SelectedNode,selectednode,
							TAG_DONE);
}
Пример #8
0
int GetConvArgs( FRAME *frame, struct TagItem *tags, struct PPTBase *xd, struct convargs *cargs )
{
    Object *Win, *wtgroup, *weights[7][7], *Bias, *Frq, *Name, *Div;
    ULONG sigmask, sig, rc;
    int quit = FALSE, res = PERR_OK,i,j;
    struct Window *win;
    struct IntuitionBase *IntuitionBase = xd->lb_Intuition;
    struct ExecBase *SysBase = xd->lb_Sys;
    struct Library *BGUIBase = xd->lb_BGUI;
    char *name = "Unknown";

#ifdef DEBUG_MODE
    PDebug("\tCreating window object\n");
#endif

    Win = WindowObject,
        WINDOW_Screen,    xd->g->maindisp->scr,
        WINDOW_Title,     frame->nd.ln_Name,
        WINDOW_Font,      xd->g->userprefs->mainfont,
        WINDOW_ScreenTitle, "Convolute Tool",
        WINDOW_ScaleWidth, 20,
        WINDOW_MenuStrip, Menus,
        TAG_SKIP,         (cargs->winpos.Height == 0) ? 1 : 0,
        WINDOW_Bounds,    &(cargs->winpos),
        WINDOW_NoBufferRP, TRUE,
        WINDOW_MasterGroup,
            VGroupObject, Spacing(4), HOffset(6), VOffset(4),
                StartMember,
                    Name = InfoFixed("Name:","",NULL,1),
                EndMember,
                StartMember,
                    HGroupObject, Spacing(4), HOffset(4),
                        StartMember,
                            /* Grid */
                            wtgroup = VGroupObject,
                                StartMember,
                                    HGroupObject,
                                        StartMember,
                                            weights[0][0] = Integer(NULL,0,3,GID_W00),
                                        EndMember,
                                        StartMember,
                                            weights[0][1] = Integer(NULL,0,3,GID_W01),
                                        EndMember,
                                        StartMember,
                                            weights[0][2] = Integer(NULL,0,3,GID_W02),
                                        EndMember,
                                        StartMember,
                                            weights[0][3] = Integer(NULL,0,3,GID_W03),
                                        EndMember,
                                        StartMember,
                                            weights[0][4] = Integer(NULL,0,3,GID_W04),
                                        EndMember,
                                        StartMember,
                                            weights[0][5] = Integer(NULL,0,3,GID_W05),
                                        EndMember,
                                        StartMember,
                                            weights[0][6] = Integer(NULL,0,3,GID_W06),
                                        EndMember,
                                    EndObject,
                                EndMember,
                                StartMember,
                                    HGroupObject,
                                        StartMember,
                                            weights[1][0] = Integer(NULL,0,3,GID_W10),
                                        EndMember,
                                        StartMember,
                                            weights[1][1] = Integer(NULL,0,3,GID_W11),
                                        EndMember,
                                        StartMember,
                                            weights[1][2] = Integer(NULL,0,3,GID_W12),
                                        EndMember,
                                        StartMember,
                                            weights[1][3] = Integer(NULL,0,3,GID_W13),
                                        EndMember,
                                        StartMember,
                                            weights[1][4] = Integer(NULL,0,3,GID_W14),
                                        EndMember,
                                        StartMember,
                                            weights[1][5] = Integer(NULL,0,3,GID_W15),
                                        EndMember,
                                        StartMember,
                                            weights[1][6] = Integer(NULL,0,3,GID_W16),
                                        EndMember,
                                    EndObject,
                                EndMember,
                                StartMember,
                                    HGroupObject,
                                        StartMember,
                                            weights[2][0] = Integer(NULL,0,3,GID_W20),
                                        EndMember,
                                        StartMember,
                                            weights[2][1] = Integer(NULL,0,3,GID_W21),
                                        EndMember,
                                        StartMember,
                                            weights[2][2] = Integer(NULL,0,3,GID_W22),
                                        EndMember,
                                        StartMember,
                                            weights[2][3] = Integer(NULL,0,3,GID_W23),
                                        EndMember,
                                        StartMember,
                                            weights[2][4] = Integer(NULL,0,3,GID_W24),
                                        EndMember,
                                        StartMember,
                                            weights[2][5] = Integer(NULL,0,3,GID_W25),
                                        EndMember,
                                        StartMember,
                                            weights[2][6] = Integer(NULL,0,3,GID_W26),
                                        EndMember,
                                    EndObject,
                                EndMember,
                                StartMember,
                                    HGroupObject,
                                        StartMember,
                                            weights[3][0] = Integer(NULL,0,3,GID_W30),
                                        EndMember,
                                        StartMember,
                                            weights[3][1] = Integer(NULL,0,3,GID_W31),
                                        EndMember,
                                        StartMember,
                                            weights[3][2] = Integer(NULL,0,3,GID_W32),
                                        EndMember,
                                        StartMember,
                                            weights[3][3] = Integer(NULL,1,3,GID_W33),
                                        EndMember,
                                        StartMember,
                                            weights[3][4] = Integer(NULL,0,3,GID_W34),
                                        EndMember,
                                        StartMember,
                                            weights[3][5] = Integer(NULL,0,3,GID_W35),
                                        EndMember,
                                        StartMember,
                                            weights[3][6] = Integer(NULL,0,3,GID_W36),
                                        EndMember,
                                    EndObject,
                                EndMember,
                                StartMember,
                                    HGroupObject,
                                        StartMember,
                                            weights[4][0] = Integer(NULL,0,3,GID_W40),
                                        EndMember,
                                        StartMember,
                                            weights[4][1] = Integer(NULL,0,3,GID_W41),
                                        EndMember,
                                        StartMember,
                                            weights[4][2] = Integer(NULL,0,3,GID_W42),
                                        EndMember,
                                        StartMember,
                                            weights[4][3] = Integer(NULL,0,3,GID_W43),
                                        EndMember,
                                        StartMember,
                                            weights[4][4] = Integer(NULL,0,3,GID_W44),
                                        EndMember,
                                        StartMember,
                                            weights[4][5] = Integer(NULL,0,3,GID_W45),
                                        EndMember,
                                        StartMember,
                                            weights[4][6] = Integer(NULL,0,3,GID_W46),
                                        EndMember,
                                    EndObject,
                                EndMember,
                                StartMember,
                                    HGroupObject,
                                        StartMember,
                                            weights[5][0] = Integer(NULL,0,3,GID_W50),
                                        EndMember,
                                        StartMember,
                                            weights[5][1] = Integer(NULL,0,3,GID_W51),
                                        EndMember,
                                        StartMember,
                                            weights[5][2] = Integer(NULL,0,3,GID_W52),
                                        EndMember,
                                        StartMember,
                                            weights[5][3] = Integer(NULL,0,3,GID_W53),
                                        EndMember,
                                        StartMember,
                                            weights[5][4] = Integer(NULL,0,3,GID_W54),
                                        EndMember,
                                        StartMember,
                                            weights[5][5] = Integer(NULL,0,3,GID_W55),
                                        EndMember,
                                        StartMember,
                                            weights[5][6] = Integer(NULL,0,3,GID_W56),
                                        EndMember,
                                    EndObject,
                                EndMember,
                                StartMember,
                                    HGroupObject,
                                        StartMember,
                                            weights[6][0] = Integer(NULL,0,3,GID_W60),
                                        EndMember,
                                        StartMember,
                                            weights[6][1] = Integer(NULL,0,3,GID_W61),
                                        EndMember,
                                        StartMember,
                                            weights[6][2] = Integer(NULL,0,3,GID_W62),
                                        EndMember,
                                        StartMember,
                                            weights[6][3] = Integer(NULL,0,3,GID_W63),
                                        EndMember,
                                        StartMember,
                                            weights[6][4] = Integer(NULL,0,3,GID_W64),
                                        EndMember,
                                        StartMember,
                                            weights[6][5] = Integer(NULL,0,3,GID_W65),
                                        EndMember,
                                        StartMember,
                                            weights[6][6] = Integer(NULL,0,3,GID_W66),
                                        EndMember,
                                    EndObject,
                                EndMember,
                                StartMember,
                                    HGroupObject, Spacing(4),
                                        StartMember,
                                            Bias = Integer("Bias:",0,4,GID_BIAS),
                                        EndMember,
                                        StartMember,
                                            Div = Integer("Div:",1,4,GID_DIV),
                                        EndMember,
                                    EndObject,
                                EndMember,
                            EndObject, Weight(75),
                        EndMember,
                        StartMember,
                            VGroupObject, Spacing(4),
                                StartMember,
                                    XenButton("Load",GID_LOAD),
                                EndMember,
                                StartMember,
                                    XenButton("Save",GID_SAVE),
                                EndMember,
                                StartMember,
                                    XenButton("Clear",GID_CLEAR),
                                EndMember,
                                StartMember,
                                    XenButton("Convolute!",GID_OK),
                                EndMember,
                                StartMember,
                                    XenButton("Cancel",GID_CANCEL),
                                EndMember,
                            EndObject, Weight(10),
                        EndMember,
                    EndObject,
                EndMember,
            EndObject, /* MasterVGroup */
        EndObject; /* Window */

    if(Win) {
#ifdef DEBUG_MODE
        PDebug("\tSucceeded in creating window\n");
#endif

        for(i = 0; i < 7; i++) {
            for(j = 0; j < 7; j++) {
                SetGadgetAttrs( (struct Gadget *)weights[i][j], NULL, NULL,
                                STRINGA_LongVal, cargs->weights[i][j], TAG_DONE );
            }
        }
        SetGadgetAttrs( (struct Gadget *)Bias, NULL, NULL, STRINGA_LongVal, cargs->bias, TAG_DONE);
        SetGadgetAttrs( (struct Gadget *)Div, NULL, NULL, STRINGA_LongVal, cargs->div, TAG_DONE);
        SetGadgetAttrs( (struct Gadget *)Name, NULL, NULL, INFO_TextFormat, cargs->name, TAG_DONE);

        if( win = WindowOpen( Win ) ) {
#ifdef DEBUG_MODE
            PDebug("\tOpened window OK\n");
#endif
            Frq = FileReqObject,
                    ASLFR_Window, win,
                    ASLFR_SleepWindow, TRUE,
                    ASLFR_InitialDrawer, "PROGDIR:modules/convolutions",
                    ASLFR_InitialPattern,"~(#?.info)",
                  EndObject;
            GetAttr( WINDOW_SigMask, Win, &sigmask );

            while(!quit) {
                sig = Wait(sigmask | SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_F);

                /*
                 *  Break signal
                 */

                if( sig & SIGBREAKF_CTRL_C ) {
                    quit = TRUE;
                    res = PERR_BREAK;
                }

                if( sig & SIGBREAKF_CTRL_F ) {
                    WindowToFront( win );
                    ActivateWindow( win );
                }

                /*
                 *  Gadget message
                 */

                if( sig & sigmask ) {
                    while(( rc = HandleEvent( Win )) != WMHI_NOMORE ) {
                        struct TagItem clrtable[] = { STRINGA_LongVal, 0, TAG_END };
                        struct TagItem nonametable[] = { INFO_TextFormat, (ULONG)"unnamed", TAG_END };
                        struct TagItem settable[] = {STRINGA_LongVal, 0, TAG_END };
                        struct TagItem frqloadtable[] = {ASLFR_DoSaveMode, FALSE, TAG_END };
                        struct TagItem newnametable[] = {INFO_TextFormat, NULL, TAG_END };
                        struct TagItem frqsavetable[] = {ASLFR_DoSaveMode, TRUE, TAG_END };
                        struct TagItem nametable[] = {INFO_TextFormat, NULL, TAG_END };
                        int id;

                        switch(rc) {
                            case WMHI_CLOSEWINDOW:
                            case GID_CANCEL:
                                res = PERR_CANCELED;
                                quit = TRUE;
                                WindowClose(Win);
                                break;

                            case GID_CLEAR:
                                WindowBusy(Win);
                                clrtable[0].ti_Data = 0;
                                SetGadgetAttrsA( (struct Gadget *)Bias, win, NULL, clrtable);
                                for(i = 0; i < 7; i++) {
                                    for(j = 0; j < 7; j++) {
                                        SetGadgetAttrsA( (struct Gadget *)weights[i][j], win,
                                                         NULL, clrtable );
                                        cargs->weights[i][j] = 0;
                                    }
                                }
                                clrtable[0].ti_Data = 1; /* For Divisor & Middle value. */

                                SetGadgetAttrsA( (struct Gadget *)weights[3][3], win,
                                                 NULL, clrtable );
                                cargs->weights[3][3] = 1;

                                clrtable[0].ti_Data = 1; /* For Divisor */
                                SetGadgetAttrsA( (struct Gadget *)Div, win, NULL, clrtable);
                                SetGadgetAttrsA( (struct Gadget *) Name, win, NULL, nonametable);
                                WindowReady(Win);
                                break;

                            case GID_LOAD:
                                SetAttrsA( Frq, frqloadtable );
                                if(DoRequest( Frq ) == FRQ_OK) {
                                    GetAttr( FRQ_Path, Frq, (ULONG *)&name );
                                    WindowBusy(Win);
                                    if(LoadConvFilter( xd, name, cargs ) == PERR_OK ) {
                                        for(i = 0; i < 7; i++) {
                                            for(j = 0; j < 7; j++) {
                                                settable[0].ti_Data = cargs->weights[i][j];
                                                SetGadgetAttrsA( (struct Gadget *)weights[i][j], win,
                                                    NULL, settable );
                                            }
                                        }
                                        settable[0].ti_Data = cargs->bias;
                                        SetGadgetAttrsA( (struct Gadget *)Bias, win, NULL, settable);
                                        settable[0].ti_Data = cargs->div;
                                        SetGadgetAttrsA( (struct Gadget *)Div, win, NULL, settable);
                                        GetAttr( FRQ_File, Frq, (ULONG *) &newnametable[0].ti_Data );
                                        SetGadgetAttrsA( (struct Gadget *) Name, win, NULL, newnametable);
                                    }
                                    WindowReady(Win);
                                }
                                break;

                            case GID_SAVE:
                                SetAttrsA( Frq, frqsavetable );
                                if(DoRequest(Frq) == FRQ_OK) {
                                    WindowBusy(Win);
                                    GetAttr( FRQ_Path, Frq, (ULONG *)&name );
                                    for(i = 0; i < 7; i++) {
                                        for(j = 0; j < 7; j++) {
                                            GetAttr( STRINGA_LongVal, weights[i][j], (ULONG *) &(cargs->weights[i][j]) );
                                        }
                                    }
                                    GetAttr( STRINGA_LongVal, Bias, (ULONG *) &(cargs->bias));
                                    GetAttr( STRINGA_LongVal, Div, (ULONG *) &(cargs->div));
                                    SaveConvFilter( xd, name, cargs );
                                    GetAttr( FRQ_File, Frq, &nametable[0].ti_Data );
                                    SetGadgetAttrsA( (struct Gadget *) Name, win, NULL, nametable);
                                    WindowReady(Win);
                                }
                                break;

                            case GID_OK:
                                GetAttr( STRINGA_LongVal, Bias, (ULONG *) &(cargs->bias));
                                GetAttr( STRINGA_LongVal, Div, (ULONG *) &(cargs->div));
                                GetAttr( WINDOW_Bounds, Win, (ULONG *) &(cargs->winpos) );
                                if( cargs->div != 0 ) {
                                    WindowClose(Win);
                                    for(i = 0; i < 7; i++) {
                                        for(j = 0; j < 7; j++) {
                                            GetAttr( STRINGA_LongVal, weights[i][j], (ULONG *) &(cargs->weights[i][j]) );
                                        }
                                    }
                                    GetAttr( STRINGA_LongVal, Bias, (ULONG *) &(cargs->bias));
                                    GetAttr( STRINGA_LongVal, Div, (ULONG *) &(cargs->div));
                                    strncpy( cargs->name, name, 40 );
                                    res = PERR_OK;
                                    quit = TRUE;
                                }
                                break;

                            default:

                                if(rc >= OPR(0) && rc <= OPR(1000)) { /* It's a default opr */
                                    WindowBusy(Win);
                                    for(id = 0; presets[id].id != rc && presets[id].id != 0L; id++); /* Fetch correct area. */
                                    if(presets[id].id) {
                                        for(i = 0; i < 7; i++) {
                                            for(j = 0; j < 7; j++) {
                                                settable[0].ti_Data = cargs->weights[i][j] = presets[id].weights[i][j];
                                                SetGadgetAttrsA( (struct Gadget *)weights[i][j], win,
                                                    NULL, settable );
                                            }
                                        }
                                        settable[0].ti_Data = cargs->bias = presets[id].bias;
                                        SetGadgetAttrsA( (struct Gadget *)Bias, win, NULL, settable);
                                        settable[0].ti_Data = cargs->div = presets[id].div;
                                        SetGadgetAttrsA( (struct Gadget *)Div,  win, NULL, settable);
                                        newnametable[0].ti_Data = name = (ULONG)presets[id].name;
                                        SetGadgetAttrsA( (struct Gadget *)Name, win, NULL, newnametable);
                                    }
#ifdef DEBUG_MODE
                                    else {
                                        PDebug("Serious software error!!!\n");
                                    }
#endif
                                    WindowReady(Win);
                                }
                                break;

                        } /* switch */
                    } /* while */
                } /* sig & sigmask */

            } /* while(!quit) */

            DisposeObject(Win);
            DisposeObject(Frq);
        } else {
#ifdef DEBUG_MODE
            PDebug("\tFailed to get window\n");
#endif
            DisposeObject(Win);
            return PERR_WONTOPEN;
        }
    } else {
#ifdef DEBUG_MODE
        PDebug("\tFailed to get window object\n");
#endif
        return PERR_WONTOPEN;
    }

    return res;
}
Пример #9
0
// Make sure a button selector is visible
BOOL buttons_visible_select(Buttons *buttons)
{
	int old_left,old_top;

	// Anything selected?
	if (!buttons->button_sel_button) return 0;

	// Store old positions
	old_left=buttons->button_left;
	old_top=buttons->button_top;

	// Check selection column
	if (buttons->editor_sel_col<0)
	{
		// Move to previous row
		buttons->editor_sel_col=buttons->bank->window.columns-1;
		--buttons->editor_sel_row;
	}

	else
	if (buttons->editor_sel_col>=buttons->bank->window.columns)
	{
		// Move to next row
		buttons->editor_sel_col=0;
		++buttons->editor_sel_row;
	}

	// Check selection row
	if (buttons->editor_sel_row<0) buttons->editor_sel_row=0;
	else
	if (buttons->editor_sel_row>=buttons->bank->window.rows)
		buttons->editor_sel_row=buttons->bank->window.rows-1;

	// Do we need to scroll left?
	if (buttons->editor_sel_col<buttons->button_left)
		buttons->button_left=buttons->editor_sel_col;

	// Or right?
	else
	if (buttons->editor_sel_col>=buttons->button_left+buttons->button_cols)
		buttons->button_left=buttons->editor_sel_col-buttons->button_cols+1;

	// Check left/right
	if (buttons->button_left>buttons->bank->window.columns-buttons->button_cols)
		buttons->button_left=buttons->bank->window.columns-buttons->button_cols;
	if (buttons->button_left<0) buttons->button_left=0;

	// Do we need to scroll up?
	if (buttons->editor_sel_row<buttons->button_top)
		buttons->button_top=buttons->editor_sel_row;

	// Or down?
	else
	if (buttons->editor_sel_row>=buttons->button_top+buttons->button_rows)
		buttons->button_top=buttons->editor_sel_row-buttons->button_rows+1;

	// Check up/down
	if (buttons->button_top>buttons->bank->window.rows-buttons->button_rows)
		buttons->button_top=buttons->bank->window.rows-buttons->button_rows;
	if (buttons->button_top<0) buttons->button_top=0;

	// Fix slider positions
	if (buttons->horiz_scroll)
		SetGadgetAttrs(buttons->horiz_scroll,buttons->window,0,PGA_Top,buttons->button_left,TAG_DONE);
	if (buttons->vert_scroll)
		SetGadgetAttrs(buttons->vert_scroll,buttons->window,0,PGA_Top,buttons->button_top,TAG_DONE);

	// Did we have to scroll?
	return (BOOL)(buttons->button_left!=old_left || buttons->button_top!=old_top);
}
Пример #10
0
static uint32 myStringSearch( Class *cl, Object *obj )
{
	struct myStringClassData *data;
	struct Window *win;
	struct Node *node;
	struct Node *n;
	uint32 found;
	uint32 bufpos;
	STRPTR searchString;
	STRPTR compString;

	found = 0;

	data = INST_DATA( cl, obj );

	win = data->Window;

	// Remove List and Free Nodes

    SetGadgetAttrs( (struct Gadget *)data->ListviewObject, win, NULL,
	    LISTBROWSER_Labels, ~0,
	    TAG_END
    );

	while(( node = RemHead( &data->ListviewHeader )))
	{
		FreeListBrowserNode( node );
	}

	GetAttr( STRINGA_BufferPos, obj, &bufpos );

	if ( bufpos == 0 )
	{
		goto bailout;
	}

//-------------

	searchString = strstr(data->SearchBuffer, "://");
	if(searchString)
	{
		searchString += 3;
		if (bufpos >= searchString - data->SearchBuffer)
			bufpos -= searchString - data->SearchBuffer;
	}
	else
		searchString = data->SearchBuffer;

	node = GetHead( data->SearchHeader );

	while( node )
	{
		uint32 srcpos;
		BOOL possible;

		possible = FALSE;
		srcpos = 0;

		compString = strstr(node->ln_Name, "://");
		if(compString)
			compString += 3;
		else
			compString = node->ln_Name;

		if( 0 == strncasecmp( compString, searchString, bufpos ) )
		{
			// found match after protocol
			possible = TRUE;
		}
		else
		{
			// no match after protocol, see if there's a match after www
			if( 0 == strncasecmp( compString, "www.", 4) ) {
				// got www, compare it!
				if( 0 == strncasecmp( &compString[4], searchString, bufpos ) )
					possible = TRUE;
			}
		}

		if ( possible == TRUE )
		{
			n = AllocListBrowserNode( 1,
				LBNA_Column,    0,
					LBNCA_CopyText, TRUE,
					LBNCA_Text,     node->ln_Name,
				TAG_END
			);

			if ( n )
			{
				AddTail( &data->ListviewHeader, n );
				found++;
			}
		}

		node = GetSucc( node );
	}

//-------------

bailout:

	data->ListviewCount = found;
	data->ListviewSelected = -1;

	// Add List Again

	RefreshSetGadgetAttrs( (struct Gadget *)data->ListviewObject, win, NULL,
	    LISTBROWSER_Labels, &data->ListviewHeader,
		LISTBROWSER_Selected, data->ListviewSelected,
		LISTBROWSER_MakeVisible, 0,
	    TAG_END
    );

	return( found );
}
Пример #11
0
// Refresh buttons display
void buttons_refresh(Buttons *buttons,ULONG type)
{
	int x,y;
	Cfg_Button *button;

	// Lock bank
	GetSemaphore(&buttons->bank->lock,SEMF_SHARED,0);

	// Make selector visible
	if (type&BUTREFRESH_SELECTOR)
	{
		if (buttons_visible_select(buttons))
			type|=BUTREFRESH_REFRESH;
	}

	// Font reset
	if (type&BUTREFRESH_FONT)
	{
		// See if font has changed
		if ((strcmp(
			buttons->window->RPort->Font->tf_Message.mn_Node.ln_Name,
			buttons->bank->window.font_name))!=0 ||
			buttons->window->RPort->Font->tf_YSize!=buttons->bank->window.font_size)
		{
			// Get new font
			buttons_get_font(buttons);

			// Do full reset
			type=BUTREFRESH_RESIZE|BUTREFRESH_REFRESH;

			// Clear resized flag
			buttons->flags&=~BUTTONF_RESIZED;
		}
	}

	// Resize event?
	if (type&BUTREFRESH_RESIZE)
	{
		unsigned short min_width,min_height;
		unsigned short max_width,max_height;
		short border_x=0,border_y=0;

		// Borderless window?
		if (buttons->flags&BUTTONF_BORDERLESS)
		{
			ULONG flags;
			short old_width,old_height;
			ULONG old_border;

			// Save drag gadget flags and size
			flags=buttons->drag_gadget.Flags;
			old_width=buttons->drag_gadget.Width;
			old_height=buttons->drag_gadget.Height;
			old_border=buttons->border_type;

			// See if drag bar orientation has changed
			if (buttons_fix_drag(buttons))
			{
				short width,height;

				// Get current width/height
				width=buttons->window->Width;
				height=buttons->window->Height;

				// If bar is now horizontal, it used to be vertical
				if (buttons->drag_gadget.Flags&GFLG_RELWIDTH && flags&GFLG_RELHEIGHT)
				{
					// Adjust accordingly
					width-=old_width;
					height+=buttons->drag_gadget.Height;
				}

				// And vice versa
				else
				if (buttons->drag_gadget.Flags&GFLG_RELHEIGHT && flags&GFLG_RELWIDTH)
				{
					// Adjust
					height-=old_height;
					width+=buttons->drag_gadget.Width;
				}

				// No drag bar
				else
				if (!(buttons->drag_gadget.Flags&(GFLG_RELWIDTH|GFLG_RELHEIGHT)))
				{
					// Adjust size
					if (flags&GFLG_RELHEIGHT)
					{
						if (old_border&BTNWF_RIGHT_BELOW) border_x=old_width;
						width-=old_width;
					}
					else
					if (flags&GFLG_RELWIDTH)
					{
						if (old_border&BTNWF_RIGHT_BELOW) border_y=old_height;
						height-=old_height;
					}
				}

				// State of right/below flag changed
				else
				if (!(old_border&BTNWF_RIGHT_BELOW) && (buttons->bank->window.flags&BTNWF_RIGHT_BELOW))
				{
					// Move window up or right depending on border
					if (buttons->bank->window.flags&BTNWF_HORIZ)
						border_y=-((GUI->screen_info&SCRI_LORES)?DRAG_LO_HEIGHT:DRAG_HI_HEIGHT);
					else
					if (buttons->bank->window.flags&BTNWF_VERT)
						border_x=-DRAG_WIDTH;
				}

				// Is size not changing?
				if (buttons->window->Width==width && buttons->window->Height==height)
				{
					// Refresh buttons display
					type|=BUTREFRESH_REFRESH;
					RefreshGList(&buttons->drag_gadget,buttons->window,0,1);
				}

				// Size is changing so window will be refreshed automatically
				else
				{
					// Resize window
					ChangeWindowBox(
						buttons->window,
						buttons->window->LeftEdge+border_x,buttons->window->TopEdge+border_y,
						width,height);
					buttons->flags|=BUTTONF_RESIZED;
				}

				// Recalculate internal size
				buttons_fix_internal(buttons);
			}

			// Refresh drag gadget
			else
			{
				RefreshGList(&buttons->drag_gadget,buttons->window,0,1);
			}
		}

		// Get the maximum size of a button
		buttons_get_max_size(buttons,&max_width,&max_height);

		// Graphical buttons?
		if (buttons->bank->window.flags&BTNWF_GFX)
		{
			// Maximum is also minimum
			min_width=max_width;
		}

		// Text buttons
		else
		{
			// Get minimum width
			min_width=TextLength(buttons->window->RPort,"a",1)*6;

			// Border?
			if (!(buttons->flags&BUTTONF_BORDERLESS))
			{
				// Calculate button size from window
				max_width=buttons->window->GZZWidth/buttons->bank->window.columns;
			}

			// Is button width less than minimum?
			if (max_width<min_width) max_width=min_width;
		}

		// Store button size
		buttons->button_width=max_width;
		buttons->button_height=max_height;

		// No border or toolbar?
		if (buttons->flags&(BUTTONF_BORDERLESS|BUTTONF_TOOLBAR))
		{
			short side_borders,top_borders;

			// Start with maximum columns/rows
			buttons->button_cols=buttons->bank->window.columns;
			buttons->button_rows=buttons->bank->window.rows;

			// Calculate window size
			max_width=buttons->button_width*buttons->button_cols;
			max_height=buttons->button_height*buttons->button_rows;

			// Calculate border sizes
			side_borders=buttons->window->Width-buttons->internal.Width;
			top_borders=buttons->window->Height-buttons->internal.Height;

			// Too big for screen?
			if (max_width+side_borders>buttons->window->WScreen->Width)
			{
				buttons->button_cols=(buttons->window->WScreen->Width-side_borders)/buttons->button_width;
				max_width=buttons->button_cols*buttons->button_width;
			}
			if (max_height+top_borders>buttons->window->WScreen->Height)
			{
				buttons->button_rows=(buttons->window->WScreen->Height-top_borders)/buttons->button_height;
				max_height=buttons->button_rows*buttons->button_height;
			}

			// Add border size
			max_width+=side_borders;
			max_height+=top_borders;

			// Minimum is the maximum
			min_width=max_width;
			min_height=max_height;
		}

		// Normal borders
		else
		{
			// Get columns/rows
			buttons->button_cols=buttons->window->GZZWidth/buttons->button_width;
			buttons->button_rows=buttons->window->GZZHeight/buttons->button_height;

			// Check columns/rows don't exceed actual number of buttons
			if (buttons->button_cols>buttons->bank->window.columns)
				buttons->button_cols=buttons->bank->window.columns;
			if (buttons->button_rows>buttons->bank->window.rows)
				buttons->button_rows=buttons->bank->window.rows;

			// Get window minimum size
			min_width+=buttons->window->BorderLeft+buttons->window->BorderRight;
			min_height=buttons->window->BorderTop+buttons->window->BorderBottom+buttons->button_height;

			// Get window maximum size
			max_width=(!(buttons->bank->window.flags&BTNWF_GFX))?buttons->window->WScreen->Width:
				buttons->window->BorderLeft+
				buttons->window->BorderRight+
				buttons->bank->window.columns*buttons->button_width;
			max_height=
				buttons->window->BorderTop+
				buttons->window->BorderBottom+
				buttons->button_height*buttons->bank->window.rows;
		}

		// Set window limits
		WindowLimits(buttons->window,0,0,(ULONG)-1,(ULONG)-1);

		// See if window size can be changed
		if (!(buttons->flags&BUTTONF_RESIZED))
		{
			short width,height;

			// No border?
			if (buttons->flags&BUTTONF_BORDERLESS)
			{
				// Get desired size
				width=max_width;
				height=max_height;
			}

			// Normal borders
			else
			{
				// Get initial size
				width=buttons->window->Width;
				height=buttons->window->Height;

				// Is window narrower than minimum?
				if (buttons->window->Width<min_width) width=min_width;

				// Or wider than maximum?
				else
				if (buttons->window->Width>max_width) width=max_width;

				// Otherwise, size to button boundary
				else
				{
					// Drop back to last whole column
					width-=buttons->window->GZZWidth-(buttons->button_cols*buttons->button_width);

					// Size to make window bigger?
					if (buttons->window->Width>buttons->last_position.Width &&
						buttons->button_cols<buttons->bank->window.columns)
					{
						short new_width;

						// Get new width
						new_width=width+buttons->button_width;

						// Would this be legal?
						if (buttons->window->LeftEdge+new_width<=buttons->window->WScreen->Width)
							width=new_width;
					}
				}

				// Is window shorter than minimum?
				if (buttons->window->Height<min_height) height=min_height;

				// Or taller than maximum?
				else
				if (buttons->window->Height>max_height) height=max_height;

				// Otherwise, size to button boundary
				else
				{
					// Drop back to last whole row
					height-=buttons->window->GZZHeight-(buttons->button_rows*buttons->button_height);

					// Size to make window bigger?
					if (buttons->window->Height>buttons->last_position.Height &&
						buttons->button_rows<buttons->bank->window.rows)
					{
						short new_height;

						// Get new height
						new_height=height+buttons->button_height;

						// Would this be legal?
						if (buttons->window->TopEdge+new_height<=buttons->window->WScreen->Height)
							height=new_height;
					}
				}
			}

			// Does window need to be resized?
			if (buttons->window->Width!=width ||
				buttons->window->Height!=height)
			{
				// Resize window
				ChangeWindowBox(
					buttons->window,
					buttons->window->LeftEdge+border_x,buttons->window->TopEdge+border_y,
					width,height);
				buttons->flags|=BUTTONF_RESIZED;

				// Set window limits
				WindowLimits(buttons->window,
					min_width,
					min_height,
					max_width,
					max_height);

				// Unlock bank
				FreeSemaphore(&buttons->bank->lock);
				return;
			}
		}

		// Returned from a resize; refresh frame
		else RefreshWindowFrame(buttons->window);

		// Save window position
		buttons->last_position=*((struct IBox *)&buttons->window->LeftEdge);

		// Set window limits
		WindowLimits(buttons->window,
			min_width,
			min_height,
			max_width,
			max_height);

		// Fix sliders
		if (buttons->vert_scroll)
		{
			SetGadgetAttrs(buttons->vert_scroll,buttons->window,0,
				PGA_Total,buttons->bank->window.rows,
				PGA_Visible,buttons->button_rows,
				TAG_END);
		}
		if (buttons->horiz_scroll)
		{
			SetGadgetAttrs(buttons->horiz_scroll,buttons->window,0,
				PGA_Total,buttons->bank->window.columns,
				PGA_Visible,buttons->button_cols,
				TAG_END);
		}

		// Make sure selector is visible
		if (buttons->editor) buttons_visible_select(buttons);
	}

	// Refresh event
	if (type&BUTREFRESH_REFRESH)
	{
		// Get vertical position
		if (buttons->vert_scroll)
			GetAttr(PGA_Top,buttons->vert_scroll,(ULONG *)&buttons->button_top);
		else buttons->button_top=0;

		// Horizontal
		if (buttons->horiz_scroll)
			GetAttr(PGA_Top,buttons->horiz_scroll,(ULONG *)&buttons->button_left);
		else  buttons->button_left=0;

		// Draw buttons
		button=(Cfg_Button *)buttons->bank->buttons.lh_Head;
		for (y=0;y<buttons->bank->window.rows;y++)
		{
			for (x=0;x<buttons->bank->window.columns;x++)
			{
				// Check button is valid
				if (button && !button->node.ln_Succ) button=0;

				// Is button visible?
				if (y>=buttons->button_top && y<buttons->button_top+buttons->button_rows &&
					x>=buttons->button_left && x<buttons->button_left+buttons->button_cols)
				{
					// Draw button
					buttons_show_button(
						buttons,
						button,
						x-buttons->button_left,
						y-buttons->button_top,
						(button)?button->current:0,0);
				}

				// Get next button
				if (button) button=(Cfg_Button *)button->node.ln_Succ;
			}
		}
	}

	// Clear resized flag
	buttons->flags&=~BUTTONF_RESIZED;

	// Unlock bank
	FreeSemaphore(&buttons->bank->lock);
}
Пример #12
0
IPTR Prop__OM_SET(struct IClass *cl, Object *obj, struct opSet *msg)
{
    struct TagItem *tags,*tag;
    struct Prop_DATA *data = INST_DATA(cl, obj);
    int refresh = 0;
    int only_trigger = 0;

    for (tags = msg->ops_AttrList; (tag = NextTagItem((const struct TagItem **)&tags)); )
    {
	switch (tag->ti_Tag)
	{
	    case    MUIA_Prop_Entries:
	    	    if ((IPTR)data->entries != tag->ti_Data)
		    {
		    	data->entries = tag->ti_Data;
		    	refresh = 1;
		    }
		    else
		    {
		    	tag->ti_Tag = TAG_IGNORE;
		    }
		    break;

	    case    MUIA_Prop_First:
	    	    if ((IPTR)data->first != tag->ti_Data)
		    {
 		    	data->first = tag->ti_Data;
		    	refresh = 1;
		    }
		    else
		    {
		    	tag->ti_Tag = TAG_IGNORE;
		    }
		    break;

	    case    MUIA_Prop_Slider:
		    break;

	    case    MUIA_Prop_Visible:
	    	    if ((IPTR)data->visible != tag->ti_Data)
		    {
		    	data->visible = tag->ti_Data;
		    	refresh = 1;
		    }
		    else
		    {
		    	tag->ti_Tag = TAG_IGNORE;
		    }
		    break;

	    case    MUIA_Prop_OnlyTrigger:
		    only_trigger = tag->ti_Data;
		    break;
		    
	    case    MUIA_Prop_DeltaFactor:
	    	    data->deltafactor = tag->ti_Data;
		    break;
	}
    }

    if (data->first < 0)
	data->first = 0;

    if (data->prop_object && refresh && !only_trigger)
    {
    	calcscale16(data);
	
	/* Rendering will happen here!! This could make problems with virtual groups, forward this to MUIM_Draw??? */
	SetAttrs(data->prop_object, ICA_TARGET, NULL, TAG_DONE);
	if (SetGadgetAttrs((struct Gadget*)data->prop_object,_window(obj),NULL,
		PGA_Top,downscale(data, data->first),
		PGA_Visible,downscale(data, data->visible),
		PGA_Total,downscale(data, data->entries),
		TAG_DONE))
	    RefreshGList((struct Gadget*)data->prop_object, _window(obj), NULL, 1);
	SetAttrs(data->prop_object, ICA_TARGET, ICTARGET_IDCMP, TAG_DONE);
    }

    return DoSuperMethodA(cl,obj,(Msg)msg);
}
Пример #13
0
int OpenObjectList()
{
	if(!ObjectWnd)
	{
		ObjectNode[0].lvnode.ln_Name=GetCatString(MSG_MainObjWindow_MITEM)+2;
		ObjectNode[1].lvnode.ln_Name=GetCatString(MSG_MainObjMenu_MITEM)+2;
		ObjectNode[2].lvnode.ln_Name=GetCatString(MSG_MainObjImage_MITEM)+2;
		ObjectNode[3].lvnode.ln_Name=GetCatString(MSG_MainObjStrings_MITEM)+2;
		ObjectNode[4].lvnode.ln_Name=GetCatString(MSG_MainObjScreen_MITEM)+2;
		ObjectNode[5].lvnode.ln_Name=GetCatString(MSG_MainObjVersion_MITEM)+2;
		unless(ObjDownButton=NewObject(NULL, BUTTONGCLASS,
			ICA_TARGET, ICTARGET_IDCMP,
			GA_Image, gui_DownImage,
			GA_RelRight, 1-(IM_WIDTH(gui_DownImage)),
			GA_RelBottom, 1-(IM_HEIGHT(gui_SizeImage)+IM_HEIGHT(gui_DownImage)),
			GA_RightBorder,TRUE,
			GA_UserData,OBJFN_Down, 
			GA_ID, 2,
			TAG_DONE)) return 1;
		unless(ObjUpButton=NewObject(NULL, BUTTONGCLASS,
			ICA_TARGET, ICTARGET_IDCMP,
			GA_Image, gui_UpImage,
			GA_RelRight, 1-(IM_WIDTH(gui_UpImage)),
			GA_RelBottom, 1-(IM_HEIGHT(gui_SizeImage)+IM_HEIGHT(gui_DownImage)+IM_HEIGHT(gui_UpImage)),
			GA_RightBorder,TRUE,
			GA_Previous,ObjDownButton,
			GA_UserData, OBJFN_Up,
			GA_ID, 3,
			TAG_DONE)) return 1;
		unless(ObjVertProp=NewObject(NULL, PROPGCLASS,
			ICA_TARGET, ICTARGET_IDCMP,
			PGA_Freedom, FREEVERT,
			PGA_NewLook, TRUE,
			PGA_Borderless, ((DrawInfo->dri_Flags & DRIF_NEWLOOK) && DrawInfo->dri_Depth != 1),
			GA_RelRight, -(IM_WIDTH(gui_SizeImage)-5),
			GA_Top, Scr->WBorTop+Scr->Font->ta_YSize+1+1,
			GA_Width, IM_WIDTH(gui_SizeImage)-2-2-4,
			GA_RelHeight, -(IM_HEIGHT(gui_SizeImage)+IM_HEIGHT(gui_UpImage)+IM_HEIGHT(gui_DownImage)+Scr->WBorTop+Scr->Font->ta_YSize+1+1+1),
			GA_RightBorder, TRUE,
			GA_Previous,ObjUpButton,
			GA_UserData, OBJFN_Vert,
			GA_ID, 4,
			PGA_Top, ObjTop,
			PGA_Total, ObjTotal,
			PGA_Visible, ObjVisible,
			TAG_DONE)) return 1;

		OpenWindow_Object();
		Tree_NewList(&ObjectList);
		UpdateObjectList();

		GetAttr(LIST_Visible,ObjectGadgets[GD_OBJLIST],(ULONG *)&ObjVisible);
		GetAttr(LIST_Top,ObjectGadgets[GD_OBJLIST],(ULONG *)&ObjTop);
		SetGadgetAttrs((struct Gadget *)ObjVertProp,ObjectWnd,NULL,
			PGA_Top, ObjTop,
			PGA_Total, ObjTotal,
			PGA_Visible, ObjVisible,
			TAG_DONE);
			
		AddGList(ObjectWnd,(struct Gadget *)ObjDownButton,-1,-1,NULL);
		RefreshGList((struct Gadget *)ObjDownButton,ObjectWnd,NULL,-1);
		SetWndSignals();
		MenuCheck(MainMenus,FULLMENUNUM(3,1,0),TRUE);
		SetFlag(GUI.gui_Prefs->pr_Flags,PRFLAG_OBJECTSOPEN);
	}
Пример #14
0
int OBJFN_Vert(void)
{
	GetAttr(PGA_Top,ObjVertProp,(ULONG *)&ObjTop);
	SetGadgetAttrs(ObjectGadgets[GD_OBJLIST],ObjectWnd,NULL,LIST_Top,ObjTop,TAG_DONE);
	return 1;
}
Пример #15
0
static void GUINewMode(void) {
  int Max, Sel;

  infoargs[0] = (char *) getAudioMode();
  infoargs[1] = getRecord();
  infoargs[2] = getAuthor();
  infoargs[3] = getCopyright();
  infoargs[4] = getDriver();
  infoargs[5] = getVersion();

  SetGadgetAttrs((struct Gadget *) Window_Objs[SHOWID_MODE], window, NULL,
      INFO_TextFormat, (ULONG) "0x%08lx\n"
                       "%s\n"
                       "%s\n"
                       "%s\n"
                       "Devs:AHI/%s.audio\n"
                       "%s",
      INFO_Args,       (ULONG) &infoargs,
      TAG_DONE );

  Max = max(state.Frequencies -1, 0);
  Sel = min(Max, state.FreqSelected);
  SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_FREQ], window, NULL,
      SLIDER_Min,   0,
      SLIDER_Max,   Max,
      SLIDER_Level, Sel,
      GA_Disabled,  (Max == 0),
      TAG_DONE );
  Max = max(state.Channels, 0);
  Sel = min(Max, state.ChannelsSelected);
  SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_CHANNELS], window, NULL,
      SLIDER_Min,   1,
      SLIDER_Max,   Max,
      SLIDER_Level, Sel,
      GA_Disabled,  (Max == 1) || state.ChannelsDisabled,
      TAG_DONE );
  Max = max(state.OutVols -1, 0);
  Sel = min(Max, state.OutVolSelected);
  SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_OUTVOL], window, NULL,
      SLIDER_Min,   0,
      SLIDER_Max,   Max,
      SLIDER_Level, Sel,
      GA_Disabled,  (Max == 0),
      TAG_DONE );
  Max = max(state.MonVols -1, 0);
  Sel = min(Max, state.MonVolSelected);
  SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_MONVOL], window, NULL,
      SLIDER_Min,   0,
      SLIDER_Max,   Max,
      SLIDER_Level, Sel,
      GA_Disabled,  (Max == 0),
      TAG_DONE );
  Max = max(state.Gains -1, 0);
  Sel = min(Max, state.GainSelected);
  SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_GAIN], window, NULL,
      SLIDER_Min,   0,
      SLIDER_Max,   Max,
      SLIDER_Level, Sel,
      GA_Disabled,  (Max == 0),
      TAG_DONE );
  Max = max(state.Inputs -1, 0);
  Sel = min(Max, state.InputSelected);
  SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_INPUT], window, NULL,
      SLIDER_Min,   0,
      SLIDER_Max,   Max,
      SLIDER_Level, Sel,
      GA_Disabled,  (Max == 0),
      TAG_DONE );
  Max = max(state.Outputs -1, 0);
  Sel = min(Max, state.OutputSelected);
  SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_OUTPUT], window, NULL,
      SLIDER_Min,   0,
      SLIDER_Max,   Max,
      SLIDER_Level, Sel,
      GA_Disabled,  (Max == 0),
      TAG_DONE );

    // Update indicators..

    SetGadgetAttrs((struct Gadget *) Window_Objs[SHOWID_FREQ], window, NULL,
        INFO_TextFormat, (ULONG) getFreq(), TAG_DONE );

    SetGadgetAttrs((struct Gadget *) Window_Objs[SHOWID_CHANNELS], window, NULL,
        INFO_TextFormat, (ULONG) getChannels(), TAG_DONE );

    SetGadgetAttrs((struct Gadget *) Window_Objs[SHOWID_OUTVOL], window, NULL,
        INFO_TextFormat, (ULONG) getOutVol(), TAG_DONE );

    SetGadgetAttrs((struct Gadget *) Window_Objs[SHOWID_MONVOL], window, NULL,
        INFO_TextFormat, (ULONG) getMonVol(), TAG_DONE );

    SetGadgetAttrs((struct Gadget *) Window_Objs[SHOWID_GAIN], window, NULL,
        INFO_TextFormat, (ULONG) getGain(), TAG_DONE );

    SetGadgetAttrs((struct Gadget *) Window_Objs[SHOWID_INPUT], window, NULL,
        INFO_TextFormat, (ULONG) getInput(), TAG_DONE );

    SetGadgetAttrs((struct Gadget *) Window_Objs[SHOWID_OUTPUT], window, NULL,
        INFO_TextFormat, (ULONG) getOutput(), TAG_DONE );

}
Пример #16
0
static void HOOKCALL
IDCMPhookFunc( REG( a0, struct Hook *hook ),
               REG( a2, Object *obj ),
               REG( a1, struct IntuiMessage *msg) )
{
  switch(msg->Code) {

    case 0x42:
    {
      /*
      **      TAB             - Next page
      **      SHIFT + TAB     - Prev page
      */
      ULONG          pos = 0;

      GetAttr( MX_Active,  Window_Objs[ACTID_TABS], &pos );

      if ( msg->Qualifier & ( IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT ))
        pos--;
      else 
        pos++;
      SetGadgetAttrs(( struct Gadget * ) Window_Objs[ACTID_TABS], window, NULL,
          MX_Active, pos, TAG_END );
      break;
    }

    case 0x4C:
    {
      /*
      **      UP              - Move entry up.
      **      SHIFT + UP      - Move page up.
      **      CTRL + UP       - Move to the top.
      **/
      ULONG mode = 0;

      if(msg->Qualifier & ( IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT ))
        SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_MODE], window, NULL,
            LISTV_Select, LISTV_Select_Page_Up, TAG_END );
      else if(msg->Qualifier & IEQUALIFIER_CONTROL )
        SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_MODE], window, NULL,
            LISTV_Select, LISTV_Select_First, TAG_END );
      else
        SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_MODE], window, NULL,
            LISTV_Select, LISTV_Select_Previous, TAG_END );

      GetAttr( LISTV_LastClickedNum, Window_Objs[ACTID_MODE], &mode);
      FillUnit();
      NewMode(mode);
      GUINewMode();
      break;
    }

    case 0x4D:
    {
      /*
      **      DOWN            - Move entry down.
      **      SHIFT + DOWN    - Move page down.
      **      CTRL + DOWN     - Move to the end.
      **/
      ULONG mode = 0;

      if(msg->Qualifier & ( IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT ))
        SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_MODE], window, NULL,
            LISTV_Select, LISTV_Select_Page_Down, TAG_END );
      else if(msg->Qualifier & IEQUALIFIER_CONTROL )
        SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_MODE], window, NULL,
            LISTV_Select, LISTV_Select_Last, TAG_END );
      else
        SetGadgetAttrs((struct Gadget *) Window_Objs[ACTID_MODE], window, NULL,
            LISTV_Select, LISTV_Select_Next, TAG_END );

      GetAttr( LISTV_LastClickedNum, Window_Objs[ACTID_MODE], &mode);
      FillUnit();
      NewMode(mode);
      GUINewMode();
      break;
    }

    case 0x4f:
    {
      /*
      **      LEFT            - Prev unit
      */
      LONG pos = 0;
      int i;
      char **u = Units;

      for(i=0; *u; i++, u++);

      GetAttr( CYC_Active,  Window_Objs[ACTID_UNIT], (ULONG *) &pos );

      pos = (pos - 1) % i;
      if(pos < 0) pos += i;

      SetGadgetAttrs(( struct Gadget * ) Window_Objs[ACTID_UNIT], window, NULL,
          CYC_Active, pos, TAG_END );

      GetAttr( CYC_Active, Window_Objs[ACTID_UNIT], (ULONG *) &pos);
      FillUnit();
      NewUnit(pos);
      GUINewUnit();
      break;
    }

    case 0x4e:
    {
      /*
      **      RIGHT           - Prev unit
      */
      LONG pos = 0;
      int i;
      char **u = Units;

      for(i=0; *u; i++, u++);

      GetAttr( CYC_Active,  Window_Objs[ACTID_UNIT], (ULONG *) &pos );

      pos = (pos + 1) % i;;

      SetGadgetAttrs(( struct Gadget * ) Window_Objs[ACTID_UNIT], window, NULL,
          CYC_Active, pos, TAG_END );

      GetAttr( CYC_Active, Window_Objs[ACTID_UNIT], (ULONG *) &pos);

      FillUnit();
      NewUnit(pos);
      GUINewUnit();
      break;
    }

  }
}
Пример #17
0
// Handle backdrop icon idcmp stuff
BOOL backdrop_idcmp(BackdropInfo *info,struct IntuiMessage *msg,unsigned short flags)
{
	BOOL handled=1;
	BOOL busy=0;

	// Lister locked?
	if (info->lister && info->lister->flags&LISTERF_LOCK) busy=1;

	// Message class?
	switch (msg->Class)
	{
		// Size change
		case IDCMP_NEWSIZE:
			backdrop_update_size(info);
			break;

		// Refresh window
		case IDCMP_REFRESHWINDOW:

			// If we haven't already refreshed
			if (!(info->flags&BDIF_REFRESHED))
			{
				UWORD ref_flags;

				// Get flags for refreshing
				ref_flags=BDSF_REFRESH;
				if (!(flags&BIDCMPF_LISTER)) ref_flags|=BDSF_REFRESH_DONE;

				// From a resize?
				if (info->flags&BDIF_NEW_SIZE) ref_flags|=BDSF_RECALC;

				// Otherwise, check that size is ok
				else backdrop_check_size(info);

				// Refresh objects
				backdrop_show_objects(info,ref_flags);
			}

			// Clear flags
			info->flags&=~(BDIF_NEW_SIZE|BDIF_REFRESHED);

			// Got a lister?
			if (info->lister)
			{
				// Clear 'sized' flag in lister
				info->lister->flags&=~LISTERF_RESIZED;

				// Save event for lister too
				if (flags&BIDCMPF_LISTER) handled=0;
			}
			break;


		// Mouse moved
		case IDCMP_MOUSEMOVE:

			// Rubber banding?
			if (info->flags&BDIF_RUBBERBAND)
			{
				short x,y;

				// Get coordinates, clip to borders
				x=info->window->MouseX;
				y=info->window->MouseY;
				if (x<info->size.MinX) x=info->size.MinX;
				if (x>info->size.MaxX) x=info->size.MaxX;
				if (y<info->size.MinY) y=info->size.MinY;
				if (y>info->size.MaxY) y=info->size.MaxY;

				// Have coordinates changed?
				if (info->select.MaxX!=x ||
					info->select.MaxY!=y)
				{
					// Erase old box
					backdrop_rubber_band(info,0);

					// New coordinates
					info->select.MaxX=x;
					info->select.MaxY=y;

					// Show new box
					backdrop_rubber_band(info,1);
				}
				break;
			}

			// Are we dragging something?
			else
			if (info->flags&BDIF_DRAGGING && info->last_sel_object)
			{
				// Show drag objects
				backdrop_show_drag(
					info,
					info->last_sel_object,
					info->window->WScreen->MouseX,
					info->window->WScreen->MouseY);
				break;
			}

			// No gadget down, or no real-time scrolling?
			if (!info->down_gadget || !(environment->env->display_options&DISPOPTF_REALTIME_SCROLL))
			{
				// Not handled
				handled=0;
				break;
			}

		// Tick
		case IDCMP_INTUITICKS:

			// Tick?
			if (msg->Class==IDCMP_INTUITICKS)
			{
				// Increment tick count
				++info->tick_count;

				// No gadget down?
				if (!info->down_gadget)
				{
					// Turn ticks off if not dragging
					if (!(info->flags&(BDIF_DRAGGING|BDIF_RUBBERBAND)))
						ModifyIDCMP(info->window,info->window->IDCMPFlags&~IDCMP_INTUITICKS);
					break;
				}

				// Ignore this gadget?
				if (info->flags&BDIF_IGNORE_GADGET)
				{
					info->flags&=~BDIF_IGNORE_GADGET;
					break;
				}
			}

			// Fake gadget down
			msg->IAddress=info->down_gadget;

		// Gadget down
		case IDCMP_GADGETDOWN:

			// Store gadget
			if (info->down_gadget!=(struct Gadget *)msg->IAddress)
			{
				info->down_gadget=(struct Gadget *)msg->IAddress;
				info->flags|=BDIF_IGNORE_GADGET;
				ModifyIDCMP(info->window,info->window->IDCMPFlags|IDCMP_INTUITICKS);
			}

			// Check gadget is selected
			if (!(info->down_gadget->Flags&GFLG_SELECTED))
				break;

			// Look at gadget ID
			switch (info->down_gadget->GadgetID)
			{
				// Up arrow
				case GAD_VERT_ARROW_UP:
					backdrop_scroll(info,0,-1);
					break;

				// Down arrow
				case GAD_VERT_ARROW_DOWN:
					backdrop_scroll(info,0,1);
					break;

				// Left arrow
				case GAD_HORIZ_ARROW_LEFT:
					backdrop_scroll(info,-1,0);
					break;

				// Right arrow
				case GAD_HORIZ_ARROW_RIGHT:
					backdrop_scroll(info,1,0);
					break;

				// Vertical slider
				case GAD_VERT_SCROLLER:
					if (environment->env->display_options&DISPOPTF_REALTIME_SCROLL)
						backdrop_pos_slider(info,SLIDER_VERT);
					break;

				// Horizontal slider
				case GAD_HORIZ_SCROLLER:
					if (environment->env->display_options&DISPOPTF_REALTIME_SCROLL)
						backdrop_pos_slider(info,SLIDER_HORZ);
					break;
			}
			break;


		// Gadget up
		case IDCMP_GADGETUP:
			info->down_gadget=0;
			info->flags&=~BDIF_IGNORE_GADGET;
			ModifyIDCMP(info->window,info->window->IDCMPFlags&~IDCMP_INTUITICKS);

			// Look at gadget ID
			switch (((struct Gadget *)msg->IAddress)->GadgetID)
			{
				// Vertical slider
				case GAD_VERT_SCROLLER:
					backdrop_pos_slider(info,SLIDER_VERT);
					break;

				// Horizontal slider
				case GAD_HORIZ_SCROLLER:
					backdrop_pos_slider(info,SLIDER_HORZ);
					break;

				// Another gadget
				default:
					handled=0;
					break;
			}
			break;


		// Mouse buttons
		case IDCMP_MOUSEBUTTONS:

			// Ignore if busy
			if (busy) break;

			// Clear down gadget
			info->down_gadget=0;
			info->flags&=~BDIF_IGNORE_GADGET;
			ModifyIDCMP(info->window,info->window->IDCMPFlags&~IDCMP_INTUITICKS);

			// Handle button
			handled=backdrop_handle_button(info,msg,flags);

			// Remember the last button pushed
			info->last_button=msg->Code&~IECODE_UP_PREFIX;
			break;


		// Key press
		case IDCMP_RAWKEY:

			// Dragging something?
			if (info->flags&(BDIF_RUBBERBAND|BDIF_DRAGGING))
			{
				// If escape is pressed, cancel drag
				if (msg->Code==0x45) backdrop_stop_drag(info);
				break;
			}

			// Title-barred lister?
			if (info->lister && info->lister->more_flags&LISTERF_TITLEBARRED)
				break;

			// Not handled by default
			handled=0;

			// Look at key
			switch (msg->Code)
			{
				// Space toggles icon selection
				case 0x40:

					// Lister not busy?
					if (!busy)
					{
						BackdropObject *object;

						// Lock backdrop list
						lock_listlock(&info->objects,1);

						// Turn off?
						if (info->flags&BDIF_KEY_SELECTION)
						{
							// See if current selection is still valid
							if ((object=find_backdrop_object(info,info->current_sel_object)))
							{
								// Clear selection flag and redraw
								object->flags&=~BDOF_SELECTED;
								backdrop_render_object(info,object,BRENDERF_CLIP);
							}

							// Clear selection pointer
							info->current_sel_object=0;
							info->flags&=~BDIF_KEY_SELECTION;
						}

						// Turn on
						else
						{
							// Sort objects into position order
							backdrop_sort_objects(info,0,0);

							// Get first object
							object=(BackdropObject *)info->objects.list.lh_Head;
							if (object->node.ln_Succ)
							{
								// Set selection flag in new object and render
								object->flags|=BDOF_SELECTED;
								backdrop_render_object(info,object,BRENDERF_CLIP);

								// Store object pointer
								info->current_sel_object=object;
								info->flags|=BDIF_KEY_SELECTION;
							}
						}

						// Unlock backdrop list
						unlock_listlock(&info->objects);
						handled=1;
					}
					break;


				// Cursor keys changes selection
				case CURSORUP:
				case CURSORDOWN:
				case CURSORLEFT:
				case CURSORRIGHT:

					// In selection mode?
					if (!busy && info->flags&BDIF_KEY_SELECTION)
					{
						BackdropObject *object=0,*lastobject;
						short horiz=0;

						// Lock backdrop list
						lock_listlock(&info->objects,1);

						// Horizontal movement?
						if (msg->Code==CURSORLEFT || msg->Code==CURSORRIGHT) horiz=BSORT_HORIZ;

						// Need to resort?
						if ((horiz && !(info->flags&BDIF_LAST_SORT_HORIZ)) ||
							(!horiz && info->flags&BDIF_LAST_SORT_HORIZ))
						{
							// Sort objects into position order
							backdrop_sort_objects(info,horiz,0);
						}

						// See if current selection is still valid
						if ((lastobject=find_backdrop_object(info,info->current_sel_object)))
						{
							// Down or right, get next object
							if (msg->Code==CURSORDOWN || msg->Code==CURSORRIGHT)
								object=(BackdropObject *)lastobject->node.ln_Succ;

							// Up or left, get previous object
							else
								object=(BackdropObject *)lastobject->node.ln_Pred;
						}

						// Invalid object?
						if (!object || !object->node.ln_Succ || !object->node.ln_Pred)
						{
							// Get first (or last) selection
							if (object && !object->node.ln_Pred)
								object=(BackdropObject *)info->objects.list.lh_TailPred;
							else object=(BackdropObject *)info->objects.list.lh_Head;
						}

						// New object different from last?
						if (object!=info->current_sel_object)
						{
							// Was there an old selection?
							if (lastobject)
							{
								// Clear selection flag and redraw
								lastobject->flags&=~BDOF_SELECTED;
								backdrop_render_object(info,lastobject,BRENDERF_CLIP);
							}

							// New valid object?
							if (object)
							{
								// Make sure object is visible
								backdrop_make_visible(info,object);

								// Set selection flag in new object and render
								object->flags|=BDOF_SELECTED;
								backdrop_render_object(info,object,BRENDERF_CLIP);
							}

							// Store object pointer
							info->current_sel_object=object;
						}

						// Unlock backdrop list
						unlock_listlock(&info->objects);
						handled=1;
					}
					break;


				// Return opens an icon
				case 0x44:

					// In selection mode?
					if (!busy && info->flags&BDIF_KEY_SELECTION)
					{
						BackdropObject *object;

						// Lock backdrop list
						lock_listlock(&info->objects,0);

						// See if current selection is still valid
						if ((object=find_backdrop_object(info,info->current_sel_object)))
						{
							// Open object
							info->last_sel_object=object;
							backdrop_object_open(info,object,msg->Qualifier,1,0,0);

							// Clear selection pointers
							info->current_sel_object=0;
							info->last_sel_object=0;
							info->flags&=~BDIF_KEY_SELECTION;

							// Deselect object
							object->flags&=~BDOF_SELECTED;
							backdrop_render_object(info,object,BRENDERF_CLIP);
						}

						// Unlock backdrop list
						unlock_listlock(&info->objects);
						handled=1;
					}
					break;


				// Page up/Page down
				case PAGEUP:
				case PAGEDOWN:
					{
						ULONG oldpos,pos;
						long newpos,diff;

						// Get old position
						GetAttr(PGA_Top,info->vert_scroller,&oldpos);

						// Get new position
						newpos=info->offset_y-info->area.MinY;
						if (msg->Code==PAGEUP) newpos-=(info->size.MaxY-info->size.MinY)+1;
						else newpos+=(info->size.MaxY-info->size.MinY)+1;
						if (newpos<0) newpos=0;

						// Update gadget
						SetGadgetAttrs(info->vert_scroller,info->window,0,
							PGA_Top,newpos,
							TAG_END);

						// Get new position
						GetAttr(PGA_Top,info->vert_scroller,&pos);

						// Change?
						diff=oldpos-pos;
						if (diff<0) diff=-diff;
						if (diff>2)
						{
							// Update screen
							backdrop_pos_slider(info,SLIDER_VERT);
						}
						handled=1;
					}
					break;


				// Home/End
				case HOME:
				case END:
					{
						ULONG oldpos,pos;
						long diff;

						// Get old position
						GetAttr(PGA_Top,info->horiz_scroller,&oldpos);

						// Update gadget
						SetGadgetAttrs(info->horiz_scroller,info->window,0,
							PGA_Top,(msg->Code==HOME)?0:0xfffffff,
							TAG_END);

						// Get new position
						GetAttr(PGA_Top,info->horiz_scroller,&pos);

						// Change?
						diff=oldpos-pos;
						if (diff<0) diff=-diff;
						if (diff>2)
						{
							// Update screen
							backdrop_pos_slider(info,SLIDER_HORZ);
						}
						handled=1;
					}
					break;
			}
			break;


		// Not handled
		default:
			handled=0;
			break;
	}

	return handled;
}
Пример #18
0
/*
    The following cases apply:

    Make black transparent
    Make white transparent
    Make any color transparent
    Make background transparent
 */
PERROR OpenGUI(FRAME *frame, struct Objects *o, struct Values *v, struct PPTBase *PPTBase)
{
    struct Library *BGUIBase = PPTBase->lb_BGUI;
    struct Screen *scr = PPTBase->g->maindisp->scr;
    struct Library *ColorWheelBase = o->ColorWheelBase;
    struct GfxBase *GfxBase = PPTBase->lb_Gfx;
    struct IntuitionBase *IntuitionBase = PPTBase->lb_Intuition;
    BOOL   V39 = FALSE;
    struct ColorWheelRGB rgb;
    struct ColorWheelHSB hsb;

    sprintf(o->wtitle, MYNAME ": %s", frame->name );

    if( PPTBase->lb_Gfx->LibNode.lib_Version >= 39 ) {
        int i;

        V39 = TRUE;
        rgb.cw_Red   = 0;
        rgb.cw_Green = 0;
        rgb.cw_Blue  = 0;
        ConvertRGBToHSB( &rgb, &hsb );

        for( i = 0; i < GRADCOLORS; i++ ) {
            hsb.cw_Brightness = (ULONG)0xffffffff - (((ULONG)0xffffffff / GRADCOLORS ) * i );
            ConvertHSBToRGB( &hsb, &rgb );
            if( -1 == (o->pens[i] = ObtainBestPen( scr->ViewPort.ColorMap,
                                                  rgb.cw_Red, rgb.cw_Green, rgb.cw_Blue,
                                                  TAG_DONE ) ) ) {
                break;
            }
        }
        o->pens[i] = ~0;
        o->numpens = i;

        o->Gradient = ExternalObject,
            GA_ID,          GID_GRADIENTSLIDER,
            EXT_MinWidth,   10,
            EXT_MinHeight,  10,
            EXT_ClassID,    "gradientslider.gadget",
            EXT_NoRebuild,  TRUE,
            GRAD_PenArray,  o->pens,
            PGA_Freedom,    LORIENT_VERT,
        EndObject;

        if( o->Gradient )
            GetAttr( EXT_Object, o->Gradient, (ULONG *) &o->RealGradient );
    }

    o->Win = WindowObject,
        WINDOW_Screen,      scr,
        WINDOW_Title,       o->wtitle,
        WINDOW_ScreenTitle, "Transparency: Click on the image to choose a color",
        v->window.Height ? TAG_IGNORE : TAG_SKIP, 1,
        WINDOW_Bounds,      &v->window,

        WINDOW_ScaleWidth,  30,
        WINDOW_NoBufferRP,  TRUE,
        WINDOW_MenuStrip,   mymenus,
        // WINDOW_HelpFile,    "Docs/effects.guide",
        // WINDOW_HelpNode,    "Transparency",
        // WINDOW_HelpText,    infoblurb,
        WINDOW_CloseOnEsc,  TRUE,
        WINDOW_MasterGroup,
            VGroupObject, Spacing(4), HOffset(6), VOffset(4),
                StartMember,
                    HGroupObject, Spacing(6),
                        StartMember,
                            VGroupObject, Spacing(4),
                                StartMember,
                                    InfoObject,
                                        INFO_TextFormat, ISEQ_C "Please, do select\n"
                                                         "which color should be\n"
                                                         "transparent:",
                                        INFO_MinLines, 3,
                                        ButtonFrame, FRM_Flags, FRF_RECESSED,
                                    EndObject,
                                    LGO_NoAlign, TRUE,
                                EndMember,
                                VarSpace(25),
                                StartMember,
                                    VGroupObject,
                                        StartMember,
                                            HGroupObject, Spacing(3),
                                                StartMember,
                                                    o->Red = SliderObject,
                                                        GA_ID, GID_RED,
                                                        Label("Red"), Place(PLACE_LEFT),
                                                        SLIDER_Min, 0,
                                                        SLIDER_Max, 255,
                                                        SLIDER_Level, v->r,
                                                    EndObject,
                                                EndMember,
                                                StartMember,
                                                    o->RedI = StringObject,
                                                        GA_ID, GID_REDI,
                                                        STRINGA_MinCharsVisible,4,
                                                        STRINGA_MaxChars, 3,
                                                        STRINGA_IntegerMin, 0,
                                                        STRINGA_IntegerMax, 255,
                                                        STRINGA_LongVal, v->r,
                                                    EndObject, Weight(1),
                                                EndMember,
                                            EndObject, FixMinHeight,
                                        EndMember,
                                        StartMember,
                                            HGroupObject, Spacing(3),
                                                StartMember,
                                                    o->Green = SliderObject,
                                                        GA_ID, GID_GREEN,
                                                        Label("Green"), Place(PLACE_LEFT),
                                                        SLIDER_Min, 0,
                                                        SLIDER_Max, 255,
                                                        SLIDER_Level, v->g,
                                                    EndObject,
                                                EndMember,
                                                StartMember,
                                                    o->GreenI = StringObject,
                                                        GA_ID, GID_GREENI,
                                                        STRINGA_MinCharsVisible,4,
                                                        STRINGA_MaxChars, 3,
                                                        STRINGA_IntegerMin, 0,
                                                        STRINGA_IntegerMax, 255,
                                                        STRINGA_LongVal, v->g,
                                                    EndObject, Weight(1),
                                                EndMember,
                                            EndObject, FixMinHeight,
                                        EndMember,
                                        StartMember,
                                            HGroupObject, Spacing(3),
                                                StartMember,
                                                    o->Blue = SliderObject,
                                                        GA_ID, GID_BLUE,
                                                        Label("Blue"), Place(PLACE_LEFT),
                                                        SLIDER_Min, 0,
                                                        SLIDER_Max, 255,
                                                        SLIDER_Level, v->b,
                                                    EndObject,
                                                EndMember,
                                                StartMember,
                                                    o->BlueI = StringObject,
                                                        GA_ID, GID_BLUEI,
                                                        STRINGA_MinCharsVisible,4,
                                                        STRINGA_MaxChars, 3,
                                                        STRINGA_IntegerMin, 0,
                                                        STRINGA_IntegerMax, 255,
                                                        STRINGA_LongVal, v->b,
                                                    EndObject, Weight(1),
                                                EndMember,
                                            EndObject,  FixMinHeight,
                                        EndMember,
                                     EndObject,
                                EndMember,
                                VarSpace(25),
                            EndObject,  LGO_NoAlign, TRUE,
                        EndMember,
                        (V39) ? TAG_IGNORE : TAG_SKIP, 2,
                        StartMember,
                            o->Wheel = ExternalObject,
                                EXT_MinWidth,           30,
                                EXT_MinHeight,          30,
                                EXT_ClassID,            "colorwheel.gadget",
                                WHEEL_Screen,           scr,
                                /*
                                **      Pass a pointer to the "real" gradient slider
                                **      here.
                                **/
                                WHEEL_GradientSlider,   o->RealGradient,
                                WHEEL_Red,              v->r * 0x01010101,
                                WHEEL_Green,            v->g * 0x01010101,
                                WHEEL_Blue,             v->b * 0x01010101,
                                GA_FollowMouse,         TRUE,
                                GA_ID,                  GID_WHEEL,
                                /*
                                **      These attributes of the colorwheel are
                                **      tracked and reset to the object after
                                **      it has been rebuild. This way the current
                                **      colorwheel internals will not be lost
                                **      after the object is re-build.
                                **/
                                EXT_TrackAttr,          WHEEL_Red,
                                EXT_TrackAttr,          WHEEL_Green,
                                EXT_TrackAttr,          WHEEL_Blue,
                                EXT_TrackAttr,          WHEEL_Hue,
                                EXT_TrackAttr,          WHEEL_Saturation,
                                EXT_TrackAttr,          WHEEL_Brightness,
                            EndObject,
                        EndMember,
                        (V39) ? TAG_IGNORE : TAG_SKIP, 3,
                        StartMember,
                            o->Gradient, FixWidth(20),
                        EndMember,
                    EndObject, LGO_NoAlign, TRUE,
                EndMember,
                StartMember,
                    HGroupObject,
                        StartMember,
                            o->Trans = SliderObject,
                                GA_ID, GID_TRANSPARENCY,
                                Label("Transparency:"), Place(PLACE_LEFT),
                                SLIDER_Min, 0,
                                SLIDER_Max, 255,
                                SLIDER_Level, v->transp,
                            EndObject,
                        EndMember,
                        StartMember,
                            o->TransI = StringObject,
                                GA_ID, GID_TRANSPARENCYI,
                                STRINGA_MinCharsVisible,4,
                                STRINGA_MaxChars, 3,
                                STRINGA_IntegerMin, 0,
                                STRINGA_IntegerMax, 255,
                                STRINGA_LongVal, v->transp,
                            EndObject, Weight(1),
                        EndMember,
                    EndObject, FixMinHeight,
                EndMember,
                StartMember,
                    HGroupObject, NormalSpacing,
                        StartMember,
                            o->All = CheckBoxObject,
                                GA_ID, GID_ALL,
                                Label("All colors?"),
                                GA_Selected, (v->mode == MODE_ALL) ? TRUE : FALSE,
                            EndObject, Weight(1),
                        EndMember,
                        StartMember,
                            o->Tolerance = SliderObject,
                                GA_ID, GID_TOLERANCE,
                                Label("Tolerance:"), Place(PLACE_LEFT),
                                SLIDER_Min, 0,
                                SLIDER_Max, 255,
                                SLIDER_Level, v->tolerance,
                            EndObject,
                        EndMember,
                        StartMember,
                            o->ToleranceI = StringObject,
                                GA_ID, GID_TOLERANCEI,
                                STRINGA_MinCharsVisible, 4,
                                STRINGA_MaxChars, 3,
                                STRINGA_IntegerMin, 0,
                                STRINGA_IntegerMax, 255,
                                STRINGA_LongVal, v->tolerance,
                            EndObject, Weight(1),
                        EndMember,
                    EndObject, FixMinHeight,
                EndMember,
                StartMember,
                    HorizSeparator,
                EndMember,
                StartMember,
                    HGroupObject,
                        StartMember,
                            ButtonObject,
                                GA_ID, GID_OK,
                                Label("OK"), Place(PLACE_IN),
                            EndObject,
                        EndMember,
                        VarSpace(DEFAULT_WEIGHT/2),
                        StartMember,
                            ButtonObject,
                                GA_ID, GID_CANCEL,
                                Label("Cancel"), Place(PLACE_IN),
                            EndObject,
                        EndMember,
                    EndObject, FixMinHeight,
                EndMember,
            EndObject,
    EndObject;

    if( o->Win ) {

        /*
         *  Attach the gadgets unto each other
         */

        AddMap( o->Trans, o->TransI, dpcol_sl2int );
        AddMap( o->TransI,o->Trans,  dpcol_int2sl );
        AddMap( o->Red, o->RedI, dpcol_sl2int );
        AddMap( o->RedI,o->Red,  dpcol_int2sl );
        AddMap( o->Green, o->GreenI, dpcol_sl2int );
        AddMap( o->GreenI,o->Green,  dpcol_int2sl );
        AddMap( o->Blue, o->BlueI, dpcol_sl2int );
        AddMap( o->BlueI,o->Blue,  dpcol_int2sl );
        AddMap( o->Tolerance, o->ToleranceI, dpcol_sl2int );
        AddMap( o->ToleranceI,o->Tolerance,  dpcol_int2sl );

        AddCondit( o->All, o->Red, GA_Selected, FALSE,
                   GA_Disabled, FALSE, GA_Disabled, TRUE );
        AddCondit( o->All, o->RedI, GA_Selected, FALSE,
                   GA_Disabled, FALSE, GA_Disabled, TRUE );
        AddCondit( o->All, o->Green, GA_Selected, FALSE,
                   GA_Disabled, FALSE, GA_Disabled, TRUE );
        AddCondit( o->All, o->GreenI, GA_Selected, FALSE,
                   GA_Disabled, FALSE, GA_Disabled, TRUE );
        AddCondit( o->All, o->Blue, GA_Selected, FALSE,
                   GA_Disabled, FALSE, GA_Disabled, TRUE );
        AddCondit( o->All, o->BlueI, GA_Selected, FALSE,
                   GA_Disabled, FALSE, GA_Disabled, TRUE );
        AddCondit( o->All, o->ToleranceI, GA_Selected, FALSE,
                   GA_Disabled, FALSE, GA_Disabled, TRUE );
        AddCondit( o->All, o->Tolerance, GA_Selected, FALSE,
                   GA_Disabled, FALSE, GA_Disabled, TRUE );
        if(V39) {
            AddCondit( o->All, o->Wheel, GA_Selected, FALSE,
                       GA_Disabled, FALSE, GA_Disabled, TRUE );
            AddCondit( o->All, o->Gradient, GA_Selected, FALSE,
                       GA_Disabled, FALSE, GA_Disabled, TRUE );
        }

        if( o->win = WindowOpen(o->Win) ) {
            /* This sets the other gadgets disabled or enabled */
            SetGadgetAttrs( (struct Gadget *)o->All, o->win, NULL,
                            GA_Selected, (v->mode == MODE_ALL) ? TRUE : FALSE, TAG_DONE );
        } else {
            DisposeObject(o->Win);
        }
    }

    return (BOOL)(o->win ? PERR_OK : PERR_WINDOWOPEN);
}
Пример #19
0
///
/// HandleIDMCP
PERROR HandleIDCMP( FRAME *frame, struct Objects *o, struct Values *v, struct PPTBase *PPTBase )
{
    ULONG sig, sigmask, sigport = 0L;
    struct Library *ColorWheelBase = o->ColorWheelBase;
    struct IntuitionBase *IntuitionBase = PPTBase->lb_Intuition;
    BOOL V39 = FALSE;

    if( PPTBase->lb_Gfx->LibNode.lib_Version >= 39 && ColorWheelBase )
        V39 = TRUE;

    if(StartInput(frame, GINP_PICK_POINT, NULL) == PERR_OK)
        sigport = (1 << PPTBase->mport->mp_SigBit);

    GetAttr( WINDOW_SigMask, o->Win, &sigmask );
    for(;;) {

        sig = Wait( sigport|sigmask|SIGBREAKF_CTRL_C|SIGBREAKF_CTRL_F );

        if( sig & SIGBREAKF_CTRL_C ) {
            SetErrorCode( frame, PERR_BREAK );
            DisposeObject( o->Win );
            StopInput(frame);
            return PERR_BREAK;
        }

        if( sig & SIGBREAKF_CTRL_F ) {
            WindowToFront( o->win );
            ActivateWindow( o->win );
        }

        if( sig & sigport ) {
            struct gPointMessage *gp;

            gp = (struct gPointMessage*)GetMsg(PPTBase->mport);

            /*
             *  Ignore all other types of messages, except pickpoints.
             */

            if( gp->msg.code == PPTMSG_PICK_POINT ) {
                D(bug("User picked point (%d,%d)\n",gp->x,gp->y));

                if( frame->pix->colorspace == CS_RGB ) {
                    RGBPixel *cp;

                    cp = (RGBPixel *)GetPixelRow( frame, gp->y );
                    SetGadgetAttrs( GAD(o->Red), o->win, NULL, SLIDER_Level, cp[gp->x].r, TAG_DONE );
                    SetGadgetAttrs( GAD(o->Green), o->win, NULL, SLIDER_Level, cp[gp->x].g, TAG_DONE );
                    SetGadgetAttrs( GAD(o->Blue), o->win, NULL, SLIDER_Level, cp[gp->x].b, TAG_DONE );
                } else {
                    ARGBPixel *cp;

                    cp = (ARGBPixel *)GetPixelRow( frame, gp->y );
                    SetGadgetAttrs( GAD(o->Trans), o->win, NULL, SLIDER_Level, cp[gp->x].a, TAG_DONE );
                    SetGadgetAttrs( GAD(o->Red), o->win, NULL, SLIDER_Level, cp[gp->x].r, TAG_DONE );
                    SetGadgetAttrs( GAD(o->Green), o->win, NULL, SLIDER_Level, cp[gp->x].g, TAG_DONE );
                    SetGadgetAttrs( GAD(o->Blue), o->win, NULL, SLIDER_Level, cp[gp->x].b, TAG_DONE );
                }

                v->background = FALSE;
            }

            ReplyMsg( (struct Message *)gp );
        }

        if( sig & sigmask ) {
            ULONG rc, tmp;
            struct ColorWheelRGB rgb;
            struct ColorWheelHSB hsb;

            while(( rc = HandleEvent( o->Win )) != WMHI_NOMORE ) {
                switch(rc) {
                    case WMHI_CLOSEWINDOW:
                    case GID_CANCEL:
                        D(bug("User cancelled\n"));
                        SetErrorCode( frame, PERR_CANCELED );
                        DisposeObject( o->Win );
                        StopInput(frame);
                        return PERR_CANCELED;

                    /*
                     *  Can't happen if running under <V39, but let's be
                     *  sure anyway
                     */

                    case GID_GRADIENTSLIDER:
                        if( V39 ) {
                            GetAttr(GRAD_CurVal, o->RealGradient, &tmp);
                            // D(bug("New value: %d\n",tmp));
                            GetAttr( WHEEL_HSB, o->Wheel, (ULONG *)&hsb );
                            hsb.cw_Brightness = (0xFFFF - tmp) * 0x00010001;
                            ConvertHSBToRGB( &hsb, &rgb );
                            SetGadgetAttrs( GAD(o->Red), o->win, NULL, SLIDER_Level, rgb.cw_Red>>24, TAG_DONE );
                            SetGadgetAttrs( GAD(o->Green), o->win, NULL, SLIDER_Level, rgb.cw_Green>>24, TAG_DONE );
                            SetGadgetAttrs( GAD(o->Blue), o->win, NULL, SLIDER_Level, rgb.cw_Blue>>24, TAG_DONE );
                            v->background = FALSE;
                        }
                        break;

                    /*
                     *  Ditto
                     */

                    case GID_WHEEL:
                        if( V39 ) {
                            GetAttr( WHEEL_RGB, o->Wheel, (ULONG *) &rgb );
                            SetGadgetAttrs( GAD(o->Red), o->win, NULL, SLIDER_Level, rgb.cw_Red>>24, TAG_DONE );
                            SetGadgetAttrs( GAD(o->Green), o->win, NULL, SLIDER_Level, rgb.cw_Green>>24, TAG_DONE );
                            SetGadgetAttrs( GAD(o->Blue), o->win, NULL, SLIDER_Level, rgb.cw_Blue>>24, TAG_DONE );
                            v->background = FALSE;
                        }
                        break;

                    case GID_RED:
                        if( V39 ) {
                            GetAttr( SLIDER_Level, o->Red, (ULONG *)&tmp );
                            GetAttr( WHEEL_RGB, o->Wheel, (ULONG *) &rgb );
                            rgb.cw_Red = tmp * 0x01010101;
                            SetGadgetAttrs( GAD(o->Wheel), o->win, NULL, WHEEL_RGB, &rgb, TAG_DONE );
                            v->background = FALSE;
                        }
                        break;

                    case GID_GREEN:
                        if( V39 ) {
                            GetAttr( SLIDER_Level, o->Green, (ULONG *)&tmp );
                            GetAttr( WHEEL_RGB, o->Wheel, (ULONG *) &rgb );
                            rgb.cw_Green = tmp * 0x01010101;
                            SetGadgetAttrs( GAD(o->Wheel), o->win, NULL, WHEEL_RGB, &rgb, TAG_DONE );
                            v->background = FALSE;
                        }
                        break;

                    case GID_BLUE:
                        if( V39 ) {
                            GetAttr( SLIDER_Level, o->Blue, (ULONG *)&tmp );
                            GetAttr( WHEEL_RGB, o->Wheel, (ULONG *) &rgb );
                            rgb.cw_Blue = tmp * 0x01010101;
                            SetGadgetAttrs( GAD(o->Wheel), o->win, NULL, WHEEL_RGB, &rgb, TAG_DONE );
                            v->background = FALSE;
                        }
                        break;

                    case GID_BACKGROUND:
                        GetBackGround( frame, v, PPTBase );

                        if( V39 ) {
                            rgb.cw_Red   = v->r * 0x01010101;
                            rgb.cw_Green = v->g * 0x01010101;
                            rgb.cw_Blue  = v->b * 0x01010101;
                            SetGadgetAttrs( GAD(o->Wheel), o->win, NULL, WHEEL_RGB, &rgb, TAG_DONE );
                            DoMethod( o->Win, WM_REPORT_ID, GID_WHEEL, 0L ); // A bug in OS?
                        } else {
                            SetGadgetAttrs( GAD(o->Red), o->win, NULL, SLIDER_Level,v->r, TAG_DONE );
                            SetGadgetAttrs( GAD(o->Green), o->win, NULL, SLIDER_Level,v->g, TAG_DONE );
                            SetGadgetAttrs( GAD(o->Blue), o->win, NULL, SLIDER_Level,v->b, TAG_DONE );
                        }

                        break;

                    case GID_BLACK:
                        rgb.cw_Red = rgb.cw_Green = rgb.cw_Blue = 0L;
                        if( V39 ) {
                            SetGadgetAttrs( GAD(o->Wheel), o->win, NULL, WHEEL_RGB, &rgb, TAG_DONE );
                            DoMethod( o->Win, WM_REPORT_ID, GID_WHEEL, 0L ); // A bug in OS?
                        } else {
                            SetGadgetAttrs( GAD(o->Red), o->win, NULL, SLIDER_Level,rgb.cw_Red>>24, TAG_DONE );
                            SetGadgetAttrs( GAD(o->Green), o->win, NULL, SLIDER_Level,rgb.cw_Green>>24, TAG_DONE );
                            SetGadgetAttrs( GAD(o->Blue), o->win, NULL, SLIDER_Level,rgb.cw_Blue>>24, TAG_DONE );
                        }
                        v->background = FALSE;
                        break;

                    case GID_WHITE:
                        rgb.cw_Red = rgb.cw_Green = rgb.cw_Blue = 0xFFFFFFFF;
                        if (V39 ) {
                            SetGadgetAttrs( GAD(o->Wheel), o->win, NULL, WHEEL_RGB, &rgb, TAG_DONE );
                            DoMethod( o->Win, WM_REPORT_ID, GID_WHEEL, 0L ); // A bug in OS?
                        } else {
                            SetGadgetAttrs( GAD(o->Red), o->win, NULL, SLIDER_Level,rgb.cw_Red>>24, TAG_DONE );
                            SetGadgetAttrs( GAD(o->Green), o->win, NULL, SLIDER_Level,rgb.cw_Green>>24, TAG_DONE );
                            SetGadgetAttrs( GAD(o->Blue), o->win, NULL, SLIDER_Level,rgb.cw_Blue>>24, TAG_DONE );
                        }
                        v->background = FALSE;
                        break;

                    case GID_OK:
                        D(bug("User hit OK\n"));
                        DoGadgets( frame, o, v, PPTBase );
                        GetAttr( WINDOW_Bounds, o->Win, (ULONG *)&v->window );
                        DisposeObject( o->Win );
                        StopInput(frame);
                        return PERR_OK;
                }
            }
        } /* if(sig&sigmask) */
    }
Пример #20
0
static uint32 myStringClass_GM_HandleInput( Class *cl, Object *obj, struct gpInput *msg )
{
	struct myStringClassData *data;
	struct Gadget *gad;
	uint32 retval;

	data = INST_DATA( cl, obj );

	gad = (struct Gadget *)obj;

	//IDoMethod( data->ListviewObject, (APTR)msg );

	if (( gad->Flags & GFLG_SELECTED ) == 0 )
	{
		return( GMR_NOREUSE );
	}

	switch( msg->gpi_IEvent->ie_Class )
	{
		case IECLASS_RAWKEY:
		{
			switch( msg->gpi_IEvent->ie_Code )
			{
				case 0x48:  // Page Up (DownKey)
				case 0x4c:  // Up Arrow (DownKey)
				{
					myStringArrowUp( cl, obj );
				
					retval = GMR_MEACTIVE;

					break;
				}

				case 0x49:  // Page Down (DownKey)
				case 0x4d:  // Down Arrow (DownKey)
				{
					myStringArrowDown( cl, obj );

					retval = GMR_MEACTIVE;

					break;
				}

//				  case 70:	  // Del
//				  case 65:	  // Backspace
//			      {
//					  myStringCloseListview( cl, obj );
//					  
//					  retval = IDoSuperMethodA( cl, obj, (APTR)msg );
//				      break;
//			      }

				case 68:	// Return
				{
					// If listview open, and an item is selected, copy selected node's text to the string gadget
					if( data->Window != NULL && data->ListviewCount > 0 )
					{
						struct Node *selected = NULL;
						STRPTR pText;
						GetAttr( LISTBROWSER_SelectedNode, data->ListviewObject, (uint32 *) ( &selected ) );
						if( selected != NULL )
						{
							GetListBrowserNodeAttrs( selected, LBNA_Column, 0, LBNCA_Text, &pText, TAG_END );
							SetGadgetAttrs( (struct Gadget *)obj, data->Window, NULL, STRINGA_TextVal, pText, TAG_DONE );
						}
					}

					retval = IDoSuperMethodA( cl, obj, (APTR)msg );
					break;
				}

				default:
				{
					uint32 oldpos;
					uint32 newpos;

					GetAttr( STRINGA_BufferPos, obj, &oldpos );

					retval = IDoSuperMethodA( cl, obj, (APTR)msg );

					GetAttr( STRINGA_BufferPos, obj, &newpos );

					if ( oldpos != newpos )
					{
						if ( myStringSearch( cl, obj ))
						{
							// Atleast one entry found, open window if not open
							if ( data->Window == NULL )
							{
								myStringOpenListview( cl, obj, msg );
							}
						}
						else
						{
							// No matches, migth aswell close the window
							myStringCloseListview( cl, obj );
						}
					}
					break;
				}
			}

			myStringHandleListview( cl, obj );
	        break;
	    }

		case IECLASS_MOUSEWHEEL:
		{
			struct InputEvent *ie = msg->gpi_IEvent;

			if ( ie->ie_Y < 0 )
			{
				myStringArrowUp( cl, obj );
			}
			else if ( ie->ie_Y > 0 )
			{
				myStringArrowDown( cl, obj );
			}

			myStringHandleListview( cl, obj );

			retval = GMR_MEACTIVE;
			break;
		}

	    default:
	    {
			retval = IDoSuperMethodA( cl, obj, (APTR)msg );
		    break;
	    }
    }

	return( retval );
}
Пример #21
0
BOOL GimmeWindow(FRAME *frame, FRAME *with, struct PPTBase *PPTBase )
{
    strcpy(wtitle,MYNAME": ");
    strcat(wtitle, frame->name);

    Win = WindowObject,
        WINDOW_Screen,      PPTBase->g->maindisp->scr,
        WINDOW_Title,       wtitle,
        v.bounds.Top != ~0 ? TAG_IGNORE : TAG_SKIP, 1,
        WINDOW_Bounds,      &v.bounds,
        WINDOW_Position,    POS_CENTERSCREEN,
        WINDOW_Font,        PPTBase->g->userprefs->mainfont,
        WINDOW_MasterGroup,
            VGroupObject, Spacing(4), HOffset(4), VOffset(4),
                StartMember,
                    InfoTxt = InfoObject,
                        INFO_TextFormat, ISEQ_C"Please position the source\n"
                                               "over the destination...",
                        INFO_MinLines, 3,
                    EndObject,
                EndMember,
                StartMember,
                    InfoObject,
                        Label("Destination:"),
                        ButtonFrame,
                        FRM_Flags, FRF_RECESSED,
                        INFO_TextFormat, frame->name,
                    EndObject,
                EndMember,
                StartMember,
                    InfoObject,
                        Label("Source:"),
                        ButtonFrame,
                        FRM_Flags, FRF_RECESSED,
                        INFO_TextFormat, with ? with->name : "None",
                    EndObject,
                EndMember,
                StartMember,
                    Method = CycleObject, GA_ID, GID_METHOD,
                        Label("Method:"),
                        Place(PLACE_LEFT),
                        ButtonFrame,
                        CYC_Active, v.method,
                        CYC_Labels, method_labels,
                        CYC_Popup,  TRUE,
                    EndObject,
                EndMember,
                StartMember,
                    HGroupObject,
                        StartMember,
                            Ratio = SliderObject, GA_ID, GID_RATIO,
                                Label("Ratio:"),
                                Place(PLACE_LEFT),
                                SLIDER_Min,   0,
                                SLIDER_Max,   255,
                                SLIDER_Level, v.ratio,
                                PGA_Freedom,  FREEHORIZ,
                            EndObject,
                        EndMember,
                        StartMember,
                            RatioI = IndicatorObject,
                                INDIC_Min, 0,
                                INDIC_Max, 255,
                                INDIC_Level, v.ratio,
                                INDIC_Justification, IDJ_RIGHT,
                                INDIC_FormatString, "%3ld",
                            EndObject, FixMinWidth,
                        EndMember,
                    EndObject,
                EndMember,
                StartMember,
                    Tile = CheckBoxObject,
                        GA_ID, GID_TILE,
                        Label("Tile source?"), Place(PLACE_LEFT),
                        GA_Selected, v.tile,
                    EndObject, FixMinSize,
                EndMember,
                StartMember,
                    HGroupObject, Spacing(6),
                        StartMember,
                            OKButton = ButtonObject,
                                GA_ID, GID_OK,
                                Label("OK"),
                                GA_Disabled, FALSE,
                            EndObject,
                        EndMember,
                        StartMember,
                            Button("Cancel", GID_CANCEL),
                        EndMember,
                    EndObject,
                EndMember,
            EndObject,
        EndObject;

    if(Win) {

        AddMap( Ratio, RatioI, sl2ind );
        AddCondit( Method, Ratio,  CYC_Active, Mix, GA_Disabled, FALSE, GA_Disabled, TRUE );
        AddCondit( Method, RatioI, CYC_Active, Mix, GA_Disabled, FALSE, GA_Disabled, TRUE );

        if( v.method != Mix ) {
            SetGadgetAttrs( (struct Gadget *)Ratio, NULL, NULL, GA_Disabled, TRUE, TAG_DONE );
            SetGadgetAttrs( (struct Gadget *)RatioI, NULL, NULL, GA_Disabled, TRUE, TAG_DONE );
        }

        win = WindowOpen(Win);
        if(!win) {
            SetErrorCode(frame,PERR_WINDOWOPEN);
            DisposeObject(Win);
            return FALSE;
        }
    } else
        return FALSE;

    return TRUE;
}