int lib_intuition_f_AddGList_2(emumsg_syscall_t *msg) { /* Make real syscall */ msg->arg[0]._uword = AddGList( (struct Window *)msg->arg[0]._aptr, (struct Gadget *)msg->arg[1]._aptr, msg->arg[2]._ulong, msg->arg[3]._long, (struct Requester *)msg->arg[4]._aptr ); return HOOK_DONE; }
ULONG TAPEDECK_RENDER_Gadget(piClass *cl,piObject *o,Msg msg) { UWORD x,y,w,h; struct Node_Gadget *ng; struct Node_Window *nw; struct Gadget *g,*ga; BOOL fill=FALSE; piGetAttr(o,OBJ_Node,(ULONG *)&ng); piGetAttr(ng->ng_Window,OBJ_Node,(ULONG *)&nw); x=piCX(o); y=piCY(o); w=piCW(o); h=piCH(o); SetAPen(nw->nw_Window->RPort,DrawInfo->dri_Pens[BACKGROUNDPEN]); SetDrMd(nw->nw_Window->RPort,JAM1); RectFill(nw->nw_Window->RPort,x,y,x+w,y+h); g=CreateContext(&g); if(ga=(struct Gadget *)piDoMethod(o,OM_CREATE,g)) { AddGList(nw->nw_Window,ga,-1,-1,NULL); RefreshGList(g,nw->nw_Window,NULL,-1); RemoveGList(nw->nw_Window,ga,-1); } piDoMethod(o,OM_DELETE); g->NextGadget=NULL; FreeGadgets(g); if(ng->ng_Selected && GUI.gui_Mode==MODE_GADGET) { SetAPen(nw->nw_Window->RPort,1); SetDrMd(nw->nw_Window->RPort,COMPLEMENT); if(CurrentGadget==o) fill=TRUE; DrawRect(nw->nw_Window->RPort,x,y,fill); DrawRect(nw->nw_Window->RPort,x+w-5,y,fill); DrawRect(nw->nw_Window->RPort,x+w-5,y+h-5,fill); DrawRect(nw->nw_Window->RPort,x,y+h-5,fill); DrawRect(nw->nw_Window->RPort,x+(w/2)-2,y,fill); DrawRect(nw->nw_Window->RPort,x+(w/2)-2,y+h-5,fill); DrawRect(nw->nw_Window->RPort,x,y+(h/2)-2,fill); DrawRect(nw->nw_Window->RPort,x+w-5,y+(h/2)-2,fill); } return TRUE; }
static void resizeWindow(FrameworkWindow *window) { if(window->gadgets) { RemoveGList(window->intuitionWindow, window->gadgets->glist, -1); (*window->kind->freeGadgets)(window->gadgets); SetRast(window->intuitionWindow->RPort, 0); window->gadgets = (*window->kind->buildGadgets)(window->intuitionWindow->Width, window->intuitionWindow->Height, window->data); if(!window->gadgets) { fprintf(stderr, "resizeWindow: couldn't create gadgets\n"); goto error; } AddGList(window->intuitionWindow, window->gadgets->glist, (UWORD)~0, -1, NULL); RefreshWindowFrame(window->intuitionWindow); RefreshGList(window->gadgets->glist, window->intuitionWindow, NULL, -1); GT_RefreshWindow(window->intuitionWindow, NULL); } return; error: return; }
static BOOL LayOutReq (struct AHIAudioModeRequesterExt *req, struct TextAttr *TextAttr) { struct Gadget *gad; struct NewGadget ng; struct TextAttr *gadtextattr; struct TextFont *font; LONG fontwidth,buttonheight,buttonwidth,pixels; struct IntuiText intuitext = {1,0,JAM1,0,0,NULL,NULL,NULL}; LONG sliderlevels,sliderlevel; LONG selected; selected=GetSelected(req); GetSliderAttrs(req,&sliderlevels,&sliderlevel); // Calculate gadget area req->gx=req->Window->BorderLeft+4; req->gy=req->Window->BorderTop+2; req->gw=req->Window->Width-req->gx-(req->Window->BorderRight+4); req->gh=req->Window->Height-req->gy-(req->Window->BorderBottom+2); if(req->Gadgets) { RemoveGList(req->Window,req->Gadgets,-1); FreeGadgets(req->Gadgets); SetAPen(req->Window->RPort,0); SetDrMd(req->Window->RPort,JAM1); EraseRect(req->Window->RPort, req->Window->BorderLeft, req->Window->BorderTop, req->Window->Width-req->Window->BorderRight-1,req->Window->Height-req->Window->BorderBottom-1); RefreshWindowFrame(req->Window); } req->Gadgets=NULL; if((gad=CreateContext(&req->Gadgets))) { if(TextAttr) gadtextattr=TextAttr; else gadtextattr=req->Window->WScreen->Font; if((font=OpenFont(gadtextattr))) { fontwidth=font->tf_XSize; CloseFont(font); } else return FALSE; buttonheight=gadtextattr->ta_YSize+6; intuitext.ITextFont=gadtextattr; intuitext.IText=req->PositiveText; buttonwidth=IntuiTextLength(&intuitext); intuitext.IText=req->NegativeText; pixels=IntuiTextLength(&intuitext); buttonwidth=max(pixels,buttonwidth); buttonwidth+=4+fontwidth; // Create gadgets and check if they fit // Do the two buttons fit? if(2*buttonwidth > req->gw) return FALSE; ng.ng_TextAttr=gadtextattr; ng.ng_VisualInfo=req->vi; ng.ng_UserData=req; // OK button ng.ng_LeftEdge=req->gx; ng.ng_TopEdge=req->gy+req->gh-buttonheight; ng.ng_Width=buttonwidth; ng.ng_Height=buttonheight; ng.ng_GadgetText=req->PositiveText; ng.ng_GadgetID=OKBUTTON; ng.ng_Flags=PLACETEXT_IN; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_END); // Cancel button ng.ng_LeftEdge=req->gx+req->gw-ng.ng_Width; ng.ng_GadgetText=req->NegativeText; ng.ng_GadgetID=CANCELBUTTON; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_END); // Frequency if(req->Flags & freqgad) { intuitext.IText = GetString(msgReqFrequency, req->Catalog); pixels=IntuiTextLength(&intuitext)+INTERWIDTH; if(pixels+MINSLIDERWIDTH+INTERWIDTH+FREQLEN2*fontwidth > req->gw) return FALSE; ng.ng_Width=req->gw-pixels-INTERWIDTH-FREQLEN2*fontwidth; ng.ng_LeftEdge=req->gx+pixels; ng.ng_TopEdge-=2+buttonheight; ng.ng_GadgetText = GetString(msgReqFrequency, req->Catalog); ng.ng_GadgetID=FREQSLIDER; ng.ng_Flags=PLACETEXT_LEFT; gad=CreateGadget(SLIDER_KIND,gad,&ng, GTSL_Min,0, GTSL_Max,sliderlevels-1, GTSL_Level,sliderlevel, GTSL_LevelFormat, (ULONG) FREQTEXT2, GTSL_MaxLevelLen,FREQLEN2, GTSL_LevelPlace,PLACETEXT_RIGHT, GTSL_DispFunc, (ULONG) m68k_IndexToFrequency, GA_RelVerify,TRUE, GA_Disabled,!sliderlevels || (req->tempAudioID == AHI_DEFAULT_ID), TAG_DONE); req->slidergadget=gad; // Save for HadleReq()... } // ListView if((ng.ng_Height=ng.ng_TopEdge-2-req->gy) < buttonheight) return FALSE; ng.ng_LeftEdge=req->gx; ng.ng_TopEdge=req->gy; ng.ng_Width=req->gw; ng.ng_GadgetText=NULL, ng.ng_GadgetID=LISTVIEW; ng.ng_Flags=PLACETEXT_ABOVE; gad=CreateGadget(LISTVIEW_KIND,gad,&ng, GTLV_ScrollWidth,(fontwidth>8 ? fontwidth*2 : 18), GTLV_Labels, (ULONG) req->list, GTLV_ShowSelected,NULL, ((selected == ~0) || (GadToolsBase->lib_Version >= 39) ? TAG_IGNORE : GTLV_Top),selected, (selected == ~0 ? TAG_IGNORE : GTLV_MakeVisible),selected, GTLV_Selected,selected, TAG_DONE); req->listviewgadget=gad; // Save for HadleReq()... if(!gad) return FALSE; } else return FALSE; AddGList(req->Window,req->Gadgets,~0,-1,NULL); RefreshGList(req->Gadgets,req->Window,NULL,-1); GT_RefreshWindow(req->Window,NULL); return TRUE; }
// Initialise backdrop info void backdrop_init_info( BackdropInfo *info, struct Window *window, short no_icons) { // Backdrop window pointer info->window=window; // Initialise size info->size.MinX=window->BorderLeft+info->left_border; info->size.MinY=window->BorderTop+info->top_border; info->size.MaxX=window->Width-window->BorderRight-info->right_border-1; info->size.MaxY=window->Height-window->BorderBottom-info->bottom_border-1; // Not re-initialising? if (no_icons!=-1) { BackdropObject *icon; // Clone rastport info->rp=*window->RPort; // Get font backdrop_get_font(info); // If not backdrop window, add scroll bars if (!(window->Flags&WFLG_BACKDROP)) { // Create scroll bars if (AddScrollBars(window,&info->boopsi_list,GUI->draw_info,SCROLL_VERT|SCROLL_HORIZ|SCROLL_NOIDCMP)) { // Get scrollers info->vert_scroller=FindBOOPSIGadget(&info->boopsi_list,GAD_VERT_SCROLLER); info->horiz_scroller=FindBOOPSIGadget(&info->boopsi_list,GAD_HORIZ_SCROLLER); // Add to window AddGList(window,info->vert_scroller,-1,-1,0); RefreshGList(info->vert_scroller,window,0,-1); } } // Get clip region info->clip_region=NewRegion(); info->temp_region=NewRegion(); // Allocate notification port if (info->notify_port=CreateMsgPort()) { // Add notify request info->notify_req=AddNotifyRequest(DN_WRITE_ICON,0,info->notify_port); } // Lock icon list lock_listlock(&info->objects,0); // Remap existing icons for (icon=(BackdropObject *)info->objects.list.lh_Head; icon->node.ln_Succ; icon=(BackdropObject *)icon->node.ln_Succ) { // Remap the icon if (RemapIcon(icon->icon,info->window->WScreen,0)) { // Had icon never been remapped before? if (!(icon->flags&BDOF_REMAPPED)) { // Get new object size, etc backdrop_get_icon(info,icon,GETICON_KEEP|GETICON_POS_ONLY|GETICON_SAVE_POS|GETICON_REMAP); // Get new masks backdrop_get_masks(icon); } } // Set flag to say we've been remapped icon->flags|=BDOF_REMAPPED; } // Unlock icon list unlock_listlock(&info->objects); } // Install clip if (info->clip_region) backdrop_install_clip(info); }
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); }
// Add or remove fuel gauge void lister_set_gauge(Lister *lister,BOOL refresh) { BOOL want,change=0; // If lister is closed, problem is moot if (!lister->window || (lister->more_flags&LISTERF_TITLEBARRED)) return; // See if lister wants a gauge want=lister_want_gauge(lister); // Does lister have gauge and we don't want it to? if (lister->gauge_gadget && !want) { // Remove the gadget RemoveGList(lister->window,lister->gauge_gadget,1); // Free gadget DisposeObject((Object *)lister->gauge_gadget); lister->gauge_gadget=0; // Fix border width lister->window->BorderLeft=lister->old_border_left; // Free pens lister_init_colour(lister,ENVCOL_GAUGE,TRUE); // Set change flag change=1; } // Or, do we not have it but want it? else if (!lister->gauge_gadget && want) { // Initialise pens lister_init_colour(lister,ENVCOL_GAUGE,FALSE); // Create gauge if ((lister->gauge_gadget=(struct Gadget *) NewObject( 0, "dopusgaugeclass", GA_ID,GAD_GAUGE, GA_Left,0, GA_Top,lister->window->BorderTop, GA_Width,lister->window->BorderRight, GA_RelHeight,-lister->window->BorderTop-lister->window->BorderBottom+3, GA_LeftBorder,TRUE, DGG_FillPen,lister->lst_Colours[ENVCOL_GAUGE].cr_Pen[0], DGG_FillPenAlert,lister->lst_Colours[ENVCOL_GAUGE].cr_Pen[1], TAG_END))) { // Fix border width lister->window->BorderLeft=lister->window->BorderRight; // Add gauge to window after parent button AddGList(lister->window,lister->gauge_gadget,-1,1,0); RefreshGList(lister->gauge_gadget,lister->window,0,1); // Set change flag change=1; } // Failed else { // Free pens lister_init_colour(lister,ENVCOL_GAUGE,TRUE); } } // Changed? if (change) { // Fix left border related things lister->window->GZZWidth=lister->window->Width-lister->window->BorderLeft-lister->window->BorderRight; lister->parent_button.Width=lister->window->BorderLeft; } // Changed and need to refresh? if (change && refresh) { // Initialise and refresh lister_init_display(lister); lister_refresh(lister,LREFRESH_FULL|LREFRESH_FULL_ICON); // If the path field is added, refresh it if (lister->path_field && lister->flags&LISTERF_PATH_FIELD) { struct gpResize resize; // Fill out resize packet resize.MethodID=GM_RESIZE; resize.gpr_GInfo=0; resize.gpr_RPort=0; resize.gpr_Size.Left=lister->window->BorderLeft; resize.gpr_Size.Top=-(lister->window->BorderBottom+FIELD_FONT->tf_YSize+4); resize.gpr_Size.Width=-(lister->window->BorderLeft+lister->window->BorderRight); resize.gpr_Size.Height=FIELD_FONT->tf_YSize+4; resize.gpr_Redraw=0; resize.gpr_Window=lister->window; resize.gpr_Requester=0; // Tell string gadget to resize DoMethodA((Object *)lister->path_field,(Msg)&resize); // Erase behind path field SetAPen(lister->window->RPort,3); RectFill( lister->window->RPort, lister->window->BorderLeft, lister->window->Height+lister->path_field->TopEdge-2, lister->window->Width-lister->window->BorderRight-1, lister->window->Height+lister->path_field->TopEdge+lister->path_field->Height+1); // Refresh path field RefreshGList(lister->path_field,lister->window,0,1); } // Refresh the window frame RefreshWindowFrame(lister->window); // Do we have the gauge? if (lister->gauge_gadget) { // Refresh title and gauge lister_show_name(lister); } } }
struct Window *lister_open_window(Lister *lister,struct Screen *screen) { struct Gadget *gadget,*lock_gad; struct IBox *dims; ULONG mode; // If lister is already open, return if (!lister || lister->window) return lister->window; // Is lister meant to be iconified? if (lister->flags&LISTERF_ICONIFIED) return 0; // Is lister iconified? if (lister->appicon) { // Update icon position lister_update_icon(lister); // Remove AppIcon RemoveAppIcon(lister->appicon); lister->appicon=0; // Free icon if (lister->appicon_icon) { FreeDiskObjectCopy(lister->appicon_icon); lister->appicon_icon=0; } } // If lister was zoomed, swap dimensions around if ((lister->dimensions.wd_Flags&(WDF_VALID|WDF_ZOOMED))==(WDF_VALID|WDF_ZOOMED)) { struct IBox temp; // Swap dimensions temp=lister->dimensions.wd_Zoomed; lister->dimensions.wd_Zoomed=lister->dimensions.wd_Normal; lister->dimensions.wd_Normal=temp; // Clear zoomed flag lister->dimensions.wd_Flags&=~WDF_ZOOMED; } // Get dimensions pointer dims=&lister->dimensions.wd_Normal; // Get screen font AskFont(&screen->RastPort,&lister->screen_font); // Calculate minimum size lister_calc_limits(lister,screen); // Check lister size against minimums if (dims->Width<lister->win_limits.Left) dims->Width=lister->win_limits.Left; if (dims->Height<lister->win_limits.Top) dims->Height=lister->win_limits.Top; // Initialise backfill pattern #if defined(__MORPHOS__) lister->pattern.hook.h_Entry = (HOOKFUNC)HookEntry; lister->pattern.hook.h_SubEntry=(ULONG (*)())PatternBackfill; #else lister->pattern.hook.h_Entry=(ULONG (*)())PatternBackfill; #endif lister->pattern.hook.h_Data=lister->backdrop_info; lister->pattern.pattern=&GUI->pattern[PATTERN_LISTER]; // Is pattern initially enabled? if (lister->flags&LISTERF_VIEW_ICONS) lister->pattern.disabled=FALSE; else lister->pattern.disabled=TRUE; // Get refresh mode if (environment->env->lister_options&LISTEROPTF_SIMPLE) mode=WA_SimpleRefresh; else mode=WA_SmartRefresh; // Initialise boopsi list NewList(&lister->backdrop_info->boopsi_list); // Create iconify gadget gadget= create_iconify_gadget( screen, &lister->backdrop_info->boopsi_list, (lister->flags&LISTERF_LOCK_POS)?TRUE:FALSE); // Create lock gadget if (!(GUI->flags2&GUIF2_NO_PADLOCK) && (lock_gad= CreateTitleGadget( screen, &lister->backdrop_info->boopsi_list, (lister->flags&LISTERF_LOCK_POS)?TRUE:FALSE, (gadget)?-gadget->Width+TBGADGETOFFSET:0, IM_LOCK, GAD_LOCK))) { // Chain gadgets if (gadget) gadget->NextGadget=lock_gad; else gadget=lock_gad; // Fix selection flags lock_gad->Activation|=GACT_TOGGLESELECT; if (lister->more_flags&LISTERF_LOCK_FORMAT) lock_gad->Flags|=GFLG_SELECTED; } // Open lister window if (!(lister->window=OpenWindowTags(0, WA_Left,dims->Left, WA_Top,dims->Top, WA_Width,dims->Width, WA_Height,dims->Height, WA_MinWidth,lister->win_limits.Left, WA_MinHeight,lister->win_limits.Top, WA_MaxWidth,(ULONG)~0, WA_MaxHeight,(ULONG)~0, (lister->dimensions.wd_Flags&WDF_VALID)?WA_Zoom:TAG_IGNORE,(ULONG)&lister->dimensions.wd_Zoomed, WA_IDCMP, IDCMP_ACTIVEWINDOW| IDCMP_CHANGEWINDOW| IDCMP_CLOSEWINDOW| IDCMP_GADGETDOWN| IDCMP_GADGETUP| IDCMP_INACTIVEWINDOW| IDCMP_MENUHELP| IDCMP_MENUPICK| IDCMP_MENUVERIFY| IDCMP_MOUSEBUTTONS| IDCMP_MOUSEMOVE| #ifdef __amigaos4__ IDCMP_EXTENDEDMOUSE| #endif IDCMP_NEWSIZE| IDCMP_REFRESHWINDOW| IDCMP_RAWKEY, WA_AutoAdjust,TRUE, WA_CloseGadget,!(lister->flags&LISTERF_LOCK_POS), WA_DragBar,!(lister->flags&LISTERF_LOCK_POS), WA_DepthGadget,TRUE, WA_MenuHelp,TRUE, WA_NewLookMenus,TRUE, WA_SizeGadget,TRUE, WA_SizeBRight,TRUE, WA_SizeBBottom,TRUE, WA_CustomScreen,screen, WA_ScreenTitle,GUI->screen_title, WA_WindowName, DOPUS_WIN_NAME, WA_Gadgets,gadget, mode,TRUE, (lister->flags&LISTERF_LOCK_POS)?WA_Title:TAG_IGNORE,"", WA_BackFill,&lister->pattern, TAG_END))) return 0; // Fix title gadgets FixTitleGadgets(lister->window); // Save left border lister->old_border_left=lister->window->BorderLeft; // Initialise ID SetWindowID(lister->window,&lister->id,WINDOW_LISTER,(struct MsgPort *)lister->ipc); // Initialise dimensions InitWindowDims(lister->window,&lister->dimensions); // Close existing font if (lister->font) CloseFont(lister->font); // Clear proportional font flag lister->more_flags&=~LISTERF_PROP_FONT; // Open font if ((lister->font=OpenDiskFont(&lister->lister_font))) { // Proportional font? if (lister->font->tf_Flags&FPF_PROPORTIONAL) { lister->more_flags|=LISTERF_PROP_FONT; } } // Got a font? if (lister->font) { // Set font in window and text area SetFont(lister->window->RPort,lister->font); SetFont(&lister->text_area.rast,lister->font); } // Otherwise, get info on default font else { // Get font info AskFont(lister->window->RPort,&lister->lister_font); } // Get DrawInfo lister->drawinfo=GetScreenDrawInfo(lister->window->WScreen); // Set menus display_get_menu(lister->window); display_fix_menu( lister->window, (lister->flags&LISTERF_VIEW_ICONS)?WINDOW_LISTER_ICONS:WINDOW_LISTER, lister); lister_fix_menus(lister,0); // Initialise backdrop info backdrop_init_info(lister->backdrop_info,lister->window,0); // Turn on gauge if needed lister_set_gauge(lister,FALSE); // Fill out size covering gadget if ((gadget=FindGadgetType(lister->window->FirstGadget,GTYP_SIZING))) { // Copy size gadget fill_out_cover_gadget(gadget,&lister->size_cover_gadget); // Clear image in original gadget if lister is locked if (lister->flags&LISTERF_LOCK_POS) { gadget->Flags&=~GFLG_GADGIMAGE; gadget->GadgetRender=0; } } // Fill out zoom covering gadget if ((gadget=FindGadgetType(lister->window->FirstGadget,GTYP_WZOOM))) { // Copy zoom gadget fill_out_cover_gadget(gadget,&lister->zoom_cover_gadget); // Clear image in original gadget if lister is locked if (lister->flags&LISTERF_LOCK_POS) { // Clear image in original gadget gadget->Flags&=~GFLG_GADGIMAGE; gadget->GadgetRender=0; } // Otherwise, change gadget type else { // Clear zoom flag, set ID gadget->GadgetType&=~(GTYP_SYSTYPEMASK|GTYP_SYSGADGET); gadget->GadgetID=GAD_ZOOM; } } // Is lister locked? if (lister->flags&LISTERF_LOCK_POS) { // Add to window lister->size_cover_gadget.NextGadget=0; AddGList(lister->window,&lister->size_cover_gadget,0,1,0); RefreshWindowFrame(lister->window); } // Fix next pointer else lister->size_cover_gadget.NextGadget=&lister->zoom_cover_gadget; // Create edit hook lister->path_edit_hook= GetEditHookTags( 0, OBJECTF_NO_SELECT_NEXT, GTCustom_History,lister->path_history, TAG_END); // Create path field if (!(lister->path_field=(struct Gadget *) NewObject(0,"dopusstrgclass", GA_ID,GAD_PATH, GA_Left,lister->window->BorderLeft, GA_RelBottom,-(lister->window->BorderBottom+FIELD_FONT->tf_YSize+4), GA_RelWidth,-(lister->window->BorderLeft+lister->window->BorderRight), GA_Height,FIELD_FONT->tf_YSize+4, GA_RelVerify,TRUE, GA_Immediate,TRUE, GTCustom_ThinBorders,TRUE, GTCustom_NoGhost,TRUE, STRINGA_TextVal,(lister->cur_buffer)?lister->cur_buffer->buf_Path:"", STRINGA_MaxChars,511, STRINGA_Buffer,lister->path_buffer, STRINGA_UndoBuffer,GUI->global_undo_buffer, STRINGA_WorkBuffer,GUI->global_undo_buffer+512, STRINGA_Font,FIELD_FONT, STRINGA_EditHook,lister->path_edit_hook, TAG_END))) { lister_close(lister,0); return 0; } DoMethod((Object *)lister->path_field,OM_ADDTAIL,&lister->backdrop_info->boopsi_list); // Initialise side parent button lister->parent_button.NextGadget=lister->path_field; lister->parent_button.TopEdge=lister->window->BorderTop; lister->parent_button.Width=lister->window->BorderLeft; lister->parent_button.Height=-(lister->window->BorderTop+lister->window->BorderBottom); lister->parent_button.Flags=GFLG_GADGHCOMP|GFLG_RELHEIGHT; lister->parent_button.Activation=GACT_RELVERIFY; lister->parent_button.GadgetType=GTYP_BOOLGADGET; lister->parent_button.GadgetID=GAD_PARENT; // Try to add AppWindow lister->appwindow=AddAppWindowA( WINDOW_LISTER, (ULONG)lister, lister->window, lister->app_port,0); // Is lister busy? if (lister->flags&LISTERF_BUSY || lister->old_flags&LISTERF_BUSY) { lister->flags&=~(LISTERF_BUSY|LISTERF_LOCK|LISTERF_LOCKED); lister_busy(lister,0); } else if (lister->flags&LISTERF_LOCKED || lister->old_flags&LISTERF_LOCKED) { lister->flags&=~(LISTERF_BUSY|LISTERF_LOCK|LISTERF_LOCKED); lister_busy(lister,1); } // Initialise lister flags lister->flags&= LISTERF_LOCK_POS|LISTERF_BUSY| LISTERF_LOCK|LISTERF_LOCKED| LISTERF_VIEW_ICONS|LISTERF_SHOW_ALL|LISTERF_PATH_FIELD| LISTERF_STORED_SOURCE|LISTERF_STORED_DEST|LISTERF_ICON_ACTION| LISTERF_FIRST_TIME; lister->more_flags&=~LISTERF_TITLEBARRED; // Update selection count if in icon mode if (lister->flags&LISTERF_ICON_ACTION) backdrop_fix_count(lister->backdrop_info,0); // Initialise cursor setting lister->cursor_line=-1; lister->edit_type=-1; // Setup lister display lister_init_display(lister); lister_refresh(lister,LREFRESH_FULL); lister_refresh_name(lister); // Clear old flags lister->old_flags=0; // Is this our first time open? if (lister->flags&LISTERF_FIRST_TIME) { char buf[16]; // Build handle string lsprintf(buf,"%ld",lister); // Launch script RunScript(SCRIPT_OPEN_LISTER,buf); } // If busy, show progress window if (lister->progress_window) ShowProgressWindow(lister->progress_window,0,lister->window); // Fix current directory lister_fix_cd(lister); // Initialise things lister->title_click=-1; // Return window pointer return lister->window; }