Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
// 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);
}
Example #6
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);
	}
// 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;
}