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; }
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; }
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 ); } }
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; }
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(); }
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(); }
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); }
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; }
// 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); }
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 ); }
// 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); }
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); }
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); }
int OBJFN_Vert(void) { GetAttr(PGA_Top,ObjVertProp,(ULONG *)&ObjTop); SetGadgetAttrs(ObjectGadgets[GD_OBJLIST],ObjectWnd,NULL,LIST_Top,ObjTop,TAG_DONE); return 1; }
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 ); }
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; } } }
// 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; }
/* 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); }
/// /// 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) */ }
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 ); }
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; }