home *** CD-ROM | disk | FTP | other *** search
- #include <classes/BOOPSI/gadgets.h>
- #include <classes/BOOPSI/boopsilib.h>
-
- #include <intuition/icclass.h>
- #include <string.h>
-
- #pragma -
- #include <pragma/utility_lib.h>
- #include <clib/alib_protos.h>
- #include <pragma/intuition_lib.h>
- #include <pragma/graphics_lib.h>
- #include <pragma/layers_lib.h>
- #include <graphics/gfxmacros.h>
- #pragma +
-
- struct InstanceData {
- struct TextAttr *tattr;
- struct TextFont *font;
- UWORD spacing;
- struct List *members;
- BOOL attached;
- LONG top;
- LONG active;
- BOOL readonly;
- Object *frame;
- IBox framebox;
- WORD frameright;
- WORD framebottom;
- ULONG total;
- UWORD itemheight;
- BOOL customHeight;
- ULONG columns;
- ULONG lines;
- UBYTE labelmark;
- UWORD horizleft;
- Object *horiztarget;
- struct TagItem *horizmap;
- ULONG horizadjust;
- WORD leftborder;
- WORD rightborder;
- WORD topborder;
- WORD bottomborder;
- Object *horizic;
- struct LabelText *label;
-
- UWORD visible; // Anzahl der sichtbaren Zeilen
- UWORD linetop; // relative TopEdge der ersten Zeile
- UWORD horiztotal;
- UWORD horizwidth;
- };
-
- ListClass::ListClass()
- : BoopsiClass(sizeof(struct InstanceData),(ULONG (*)()) &dispatcher,GADGETCLASS,NULL)
- {
- }
-
- ULONG ListClass::dispatcher(Class *cl, Object *o, Msg msg)
- {
- struct InstanceData *data;
- ULONG retval = FALSE;
- switch (msg->MethodID)
- {
- case OM_NEW:
- {
- Object *object;
- if (object = (Object *) DoSuperMethodA(cl,o,msg))
- {
- data = (struct InstanceData *) INST_DATA(cl,object);
- data->tattr = NULL;
- data->font = NULL;
- data->spacing = 1;
- data->members = NULL;
- data->attached = FALSE;
- data->top = 0;
- data->active = -1;
- data->readonly = FALSE;
- data->frame = NULL;
- data->itemheight = 0;
- data->customHeight = FALSE;
- data->columns = 25;
- data->lines = 6;
- data->labelmark = '_';
- data->horizleft = 0;
- data->horiztarget = NULL;
- data->horizmap = NULL;
- data->horizadjust = LS_AdjustLeft;
- TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
- while (!tic.isDone()) {
- /* register */ ULONG ticData = tic.itemData();
- switch (tic.itemTag())
- {
- case LSA_Font:
- data->tattr = (struct TextAttr *) ticData;
- break;
- case LSA_Spacing:
- data->spacing = (UWORD) ticData;
- break;
- case LSA_Attach:
- data->members = (struct List *) ticData;
- data->attached = TRUE;
- break;
- case LSA_Top:
- data->top = (LONG) ticData;
- break;
- case LSA_Active:
- data->active = (LONG) ticData;
- break;
- case LSA_ReadOnly:
- data->readonly = (BOOL) ticData;
- break;
- case LSA_Frame:
- data->frame = (Object *) ticData;
- break;
- case LSA_ItemHeight:
- data->itemheight = (UWORD) ticData;
- data->customHeight = data->itemheight != 0;
- break;
- case LSA_Columns:
- data->columns = (ULONG) ticData;
- break;
- case LSA_Lines:
- data->lines = (ULONG) ticData;
- break;
- case LSA_HorizLeft:
- data->horizleft = (UWORD) ticData;
- break;
- case LSA_HorizTarget:
- data->horiztarget = (Object *) ticData;
- break;
- case LSA_HorizMap:
- data->horizmap = (struct TagItem *) ticData;
- break;
- case LSA_HorizAdjust:
- data->horizadjust = (ULONG) ticData;
- break;
- default:
- break;
- };
- tic.next();
- };
- if (data->tattr)
- data->font = OpenFont(data->tattr);
- data->label = AllocLText(
- (STRPTR) ((struct Gadget *) object)->GadgetText,
- data->tattr,1,0,JAM2,data->labelmark);
- data->total = countListLength(data);
- if (!data->customHeight && data->font)
- {
- data->itemheight = data->font->tf_YSize;
- };
- GetInnerFrame((struct Gadget *) object, data->frame,
- &data->framebox,&data->frameright,&data->framebottom);
- calcBorders(cl,(struct Gadget *) object, data);
- data->horizic = (Object *) NewObject(NULL,ICCLASS,
- ICA_TARGET, data->horiztarget,
- ICA_MAP, data->horizmap,
- TAG_END);
- retval = (ULONG) object;
- };
- break;
- };
- case OM_DISPOSE:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- if (data->font)
- CloseFont(data->font);
- if (data->horizic)
- DisposeObject(data->horizic);
- FreeLText(data->label);
- retval = DoSuperMethodA(cl,o,msg);
- break;
- };
- case OM_GET:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- switch (((struct opGet *) msg)->opg_AttrID)
- {
- case GA_Left:
- *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->LeftEdge;
- retval = TRUE;
- break;
- case GA_Top:
- *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->TopEdge;
- retval = TRUE;
- break;
- case GA_Width:
- *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->Width;
- retval = TRUE;
- break;
- case GA_Height:
- *(((struct opGet *) msg)->opg_Storage) = ((struct Gadget *) o)->Height;
- retval = TRUE;
- break;
- case LSA_Font:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->tattr;
- retval = TRUE;
- break;
- case LSA_Spacing:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->spacing;
- retval = TRUE;
- break;
- case LSA_Attach:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->members;
- retval = TRUE;
- break;
- case LSA_Top:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->top;
- retval = TRUE;
- break;
- case LSA_Active:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->active;
- retval = TRUE;
- break;
- case LSA_ReadOnly:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->readonly;
- retval = TRUE;
- break;
- case LSA_Frame:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->frame;
- retval = TRUE;
- break;
- case LSA_ItemHeight:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->itemheight;
- retval = TRUE;
- break;
- case LSA_LeftBorder:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->leftborder;
- retval = TRUE;
- break;
- case LSA_RightBorder:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->rightborder;
- retval = TRUE;
- break;
- case LSA_TopBorder:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->topborder;
- retval = TRUE;
- break;
- case LSA_BottomBorder:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->bottomborder;
- retval = TRUE;
- break;
- case LSA_AutoWidth:
- *(((struct opGet *) msg)->opg_Storage) =
- (ULONG) calcWidth(cl,(struct Gadget *) o, data);
- retval = TRUE;
- break;
- case LSA_AutoHeight:
- *(((struct opGet *) msg)->opg_Storage) =
- (ULONG) calcHeight(cl,(struct Gadget *) o, data);
- retval = TRUE;
- break;
- case LSA_Columns:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->columns;
- retval = TRUE;
- break;
- case LSA_Lines:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->lines;
- retval = TRUE;
- break;
- case LSA_LabelMark:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->labelmark;
- retval = TRUE;
- break;
- case LSA_HorizLeft:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->horizleft;
- retval = TRUE;
- break;
- case LSA_HorizTarget:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->horiztarget;
- retval = TRUE;
- break;
- case LSA_HorizMap:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->horizmap;
- retval = TRUE;
- break;
- case LSA_HorizAdjust:
- *(((struct opGet *) msg)->opg_Storage) = (ULONG) data->horizadjust;
- retval = TRUE;
- break;
- default:
- retval = DoSuperMethodA(cl,o,msg);
- break;
- };
- break;
- };
- case OM_SET:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- BOOL redrawIt = FALSE;
- TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
- while (!tic.isDone()) {
- /* register */ ULONG ticData = tic.itemData();
- switch (tic.itemTag())
- {
- case GA_Width:
- if (data->frame)
- SetAttrs(data->frame,IA_Width,ticData,TAG_END);
- data->framebox.Width = ticData
- - data->framebox.Left - data->frameright;
- break;
- case GA_Height:
- if (data->frame)
- SetAttrs(data->frame,IA_Height,ticData,TAG_END);
- data->framebox.Height = ticData
- - data->framebox.Top - data->framebottom;
- break;
- case LSA_Font:
- if (data->font)
- {
- CloseFont(data->font);
- data->font = NULL;
- };
- data->tattr = (struct TextAttr *) ticData;
- if (data->tattr)
- data->font = OpenFont(data->tattr);
- if (!data->customHeight && data->font)
- {
- data->itemheight = data->font->tf_YSize;
- };
- data->total = countListLength(data);
- ChangeLTextFont(data->label,data->tattr);
- calcBorders(cl,(struct Gadget *) o, data);
- break;
- case LSA_Spacing:
- data->spacing = (UWORD) ticData;
- redrawIt = TRUE;
- break;
- case LSA_Attach:
- if (ticData != ~0)
- data->members = (struct List *) ticData;
- data->total = countListLength(data);
- data->attached = TRUE;
- redrawIt = TRUE;
- break;
- case LSA_Detach:
- if ((BOOL) ticData)
- data->attached = FALSE;
- redrawIt = TRUE;
- break;
- case LSA_Top:
- data->top = (LONG) ticData;
- redrawIt = TRUE;
- break;
- case LSA_Active:
- data->active = (LONG) ticData;
- redrawIt = TRUE;
- break;
- case LSA_ReadOnly:
- data->readonly = (BOOL) ticData;
- redrawIt = TRUE;
- break;
- case LSA_ItemHeight:
- data->itemheight = (UWORD) ticData;
- data->customHeight = data->itemheight != 0;
- redrawIt = TRUE;
- break;
- case LSA_Next:
- (data->active)++;
- if (data->active >= data->total)
- data->active = 0;
- redrawIt = TRUE;
- break;
- case LSA_Prev:
- if (data->active == 0)
- data->active = data->total - 1
- else
- (data->active)--;
- redrawIt = TRUE;
- break;
- case LSA_Columns:
- data->columns = (ULONG) ticData;
- break;
- case LSA_Lines:
- data->lines = (ULONG) ticData;
- break;
- case LSA_HorizLeft:
- data->horizleft = (UWORD) ticData;
- redrawIt = TRUE;
- break;
- case LSA_HorizTarget:
- data->horiztarget = (Object *) ticData;
- if (data->horizic)
- {
- SetAttrs(data->horizic,ICA_TARGET,data->horiztarget,TAG_END);
- };
- break;
- case LSA_HorizMap:
- data->horizmap = (struct TagItem *) ticData;
- if (data->horizic)
- {
- SetAttrs(data->horizic,ICA_MAP,data->horizmap,TAG_END);
- };
- break;
- case LSA_HorizAdjust:
- data->horizadjust = (ULONG) ticData;
- redrawIt = TRUE;
- break;
- default:
- break;
- };
- tic.next();
- };
- retval = DoSuperMethodA(cl,o,msg);
- if (data->itemheight == 0)
- {
- if (data->font)
- data->itemheight = data->font->tf_YSize;
- };
- if (redrawIt)
- {
- render(cl,(struct Gadget *) o,
- (struct gpRender *) msg, data);
- };
- break;
- };
- case OM_UPDATE:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- BOOL redrawIt = FALSE;
- TagItemCursorC tic(((struct opSet *) msg)->ops_AttrList);
- while (!tic.isDone()) {
- /* register */ ULONG ticData = tic.itemData();
- switch (tic.itemTag())
- {
- case LSA_Top:
- if (data->top != (LONG) ticData)
- {
- data->top = (LONG) ticData;
- redrawIt = TRUE;
- };
- break;
- case LSA_Active:
- if (data->active != (LONG) ticData)
- {
- data->active = (LONG) ticData;
- redrawIt = TRUE;
- };
- break;
- case LSA_Next:
- (data->active)++;
- if (data->active >= data->total)
- data->active = 0;
- redrawIt = TRUE;
- break;
- case LSA_Prev:
- if (data->active == 0)
- data->active = data->total - 1
- else
- (data->active)--;
- redrawIt = TRUE;
- break;
- case LSA_HorizLeft:
- if (data->horizleft != (UWORD) ticData)
- {
- data->horizleft = (UWORD) ticData;
- redrawIt = TRUE;
- };
- break;
- default:
- break;
- };
- tic.next();
- };
- // retval = DoSuperMethodA(cl,o,msg);
- if (redrawIt)
- {
- render(cl,(struct Gadget *) o,
- (struct gpRender *) msg, data, FALSE);
- };
- break;
- };
- case GM_RENDER:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- retval = render(cl,(struct Gadget *) o,
- (struct gpRender *) msg,data, TRUE);
- break;
- };
- case GM_HITTEST:
- {
- retval = GMR_GADGETHIT;
- break;
- };
- case GM_GOACTIVE:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- if (((struct gpInput *) msg)->gpi_IEvent && !data->readonly)
- {
- ((struct Gadget *) msg)->Flags |= GFLG_SELECTED;
- struct gpInput *gpi = (struct gpInput *) msg;
- ULONG a = gpi->gpi_Mouse.Y / (data->itemheight + data->spacing);
- data->active = data->top + a;
- if (data->active >= data->total)
- data->active = data->total-1;
- render(cl,(struct Gadget *) o,
- (struct gpRender *) msg,data,FALSE);
- if (data->active == -1)
- retval = GMR_NOREUSE
- else
- retval = GMR_NOREUSE|GMR_VERIFY;
- }
- else
- retval = GMR_NOREUSE;
- break;
- };
- case GM_GOINACTIVE:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- ((struct Gadget *) o)->Flags &= ~GFLG_SELECTED;
- render(cl,(struct Gadget *) o,
- (struct gpRender *) msg,data,FALSE);
- break;
- };
- case GM_HANDLEINPUT:
- {
- data = (struct InstanceData *) INST_DATA(cl,o);
- struct gpInput *gpi = (struct gpInput *) msg;
- struct InputEvent *ie = gpi->gpi_IEvent;
- BOOL mouseOverGadget = ((gpi->gpi_Mouse.X >= 0) &&
- (gpi->gpi_Mouse.X < ((struct Gadget *) o)->Width) &&
- (gpi->gpi_Mouse.Y >= 0) &&
- (gpi->gpi_Mouse.Y < ((struct Gadget *) o)->Height));
- if (mouseOverGadget)
- {
- if (!(((struct Gadget *) o)->Flags & GFLG_SELECTED))
- {
- ((struct Gadget *) o)->Flags |= GFLG_SELECTED;
- render(cl,(struct Gadget *) o,
- (struct gpRender *) msg,data);
- };
- };
- else {
- if (((struct Gadget *) o)->Flags & GFLG_SELECTED)
- {
- ((struct Gadget *) o)->Flags &= ~GFLG_SELECTED;
- render(cl,(struct Gadget *) o,
- (struct gpRender *) msg,data);
- };
- };
- switch (ie->ie_Class)
- {
- case IECLASS_RAWMOUSE:
- {
- switch (ie->ie_Code)
- {
- case SELECTUP:
- if (mouseOverGadget)
- {
- retval = GMR_NOREUSE | GMR_VERIFY;
- }
- else {
- retval = GMR_NOREUSE;
- };
- break;
- case MENUDOWN:
- retval = GMR_REUSE;
- break;
- default:
- retval = GMR_MEACTIVE;
- break;
- };
- break;
- };
- default:
- retval = GMR_MEACTIVE;
- break;
- };
- break;
- };
- default:
- {
- retval = DoSuperMethodA(cl,o,msg);
- break;
- };
- };
- return retval;
- }
-
- ULONG ListClass::render(Class *cl, struct Gadget *g,
- struct gpRender *msg, struct InstanceData *data, BOOL fullrender)
- {
- static UWORD ditherData[] = { 0x1111,0x4444 };
-
- struct RastPort *rp;
- struct GadgetInfo *ginfo;
- if (msg->MethodID == OM_SET || msg->MethodID == OM_UPDATE)
- ginfo = ((struct opSet *) msg)->ops_GInfo
- else
- ginfo = msg->gpr_GInfo;
- if (!ginfo)
- return TRUE;
- UWORD *pens = ginfo->gi_DrInfo->dri_Pens;
- if (msg->MethodID == GM_RENDER)
- rp = msg->gpr_RPort
- else
- rp = ObtainGIRPort(ginfo);
- if (rp)
- {
- if (fullrender)
- {
- SetDrMd(rp,JAM1);
- SetAPen(rp,pens[BACKGROUNDPEN]);
- RectFill(rp,g->LeftEdge, g->TopEdge,
- g->LeftEdge + g->Width - 1, g->TopEdge + g->Height - 1);
- countListLength(data);
- };
- if (fullrender && data->frame)
- {
- DrawImageState(rp,(struct Image *) data->frame,
- g->LeftEdge, g->TopEdge,
- IDS_NORMAL,ginfo->gi_DrInfo);
- };
- if (fullrender && data->font && g->GadgetText)
- {
- ChangeLTextPens(data->label,pens[TEXTPEN],pens[BACKGROUNDPEN],JAM2);
- PrintLText(rp,data->label,
- g->LeftEdge, g->TopEdge - data->topborder,
- g->Width, data->topborder - 4,
- STADJUST_Center);
- };
- if (data->font)
- {
- WORD lineheight = data->itemheight + data->spacing;
-
- data->visible = data->framebox.Height / lineheight;
- data->linetop = 0;
-
- if (data->total <= data->visible)
- data->top = 0
- else if (data->top > data->total - data->visible)
- data->top = data->total - data->visible;
- if (data->active >= data->total)
- data->active = -1;
- data->horizwidth = data->framebox.Width - 4;
- NotifyTarget(cl,(Object *) g,data,ginfo,0);
-
- if (data->members && data->attached)
- {
- struct Rectangle rectangle;
- struct Region *new_region = NewRegion();
- struct Region *old_region;
- if (new_region)
- {
- rectangle.MinX = g->LeftEdge + data->framebox.Left + 2;
- rectangle.MinY = g->TopEdge + data->framebox.Top + data->linetop;
- rectangle.MaxX = g->LeftEdge + data->framebox.Left + data->framebox.Width - 2;
- rectangle.MaxY = g->TopEdge + data->framebox.Top + data->framebox.Height - 2;
- if (OrRectRegion(new_region,&rectangle))
- {
- if (ginfo->gi_Window->Flags & WFLG_WINDOWREFRESH)
- {
- EndRefresh(ginfo->gi_Window,FALSE);
- old_region = InstallClipRegion(ginfo->gi_Window->WLayer,new_region);
- BeginRefresh(ginfo->gi_Window);
- }
- else {
- old_region = InstallClipRegion(ginfo->gi_Window->WLayer,new_region);
- };
-
- LONG top = 0;
- struct Node *topobject = data->members->lh_Head;
- while (top < data->top && topobject->ln_Succ) {
- top++;
- topobject = topobject->ln_Succ;
- };
- ULONG leftpixel = g->LeftEdge + data->framebox.Left + 2 - data->horizleft;
- ULONG toppixel = g->TopEdge + data->framebox.Top + data->linetop;
- ULONG lines = 0;
- SetFont(rp,data->font);
- while (lines < data->visible && topobject->ln_Succ) {
- SetDrMd(rp,JAM1);
- UWORD textpen = TEXTPEN;
- if (top == data->active)
- {
- SetAPen(rp,pens[FILLPEN]);
- RectFill(rp,g->LeftEdge + data->framebox.Left,
- toppixel,
- g->LeftEdge + data->framebox.Left + data->framebox.Width - 1,
- toppixel + data->itemheight - 1);
- textpen = FILLTEXTPEN;
- }
- else {
- SetAPen(rp,pens[BACKGROUNDPEN]);
- RectFill(rp,g->LeftEdge + data->framebox.Left,
- toppixel,
- g->LeftEdge + data->framebox.Left + data->framebox.Width - 1,
- toppixel + data->itemheight - 1);
- };
- if (topobject->ln_Name)
- {
- SetAPen(rp,pens[textpen]);
- Move(rp,leftpixel, toppixel +
- (data->itemheight - data->font->tf_YSize + 1) / 2
- + data->font->tf_Baseline);
- Text(rp,topobject->ln_Name,strlen(topobject->ln_Name));
- };
- toppixel += lineheight;
- top++;
- lines++;
- topobject = topobject->ln_Succ;
- };
- if (ginfo->gi_Window->Flags & WFLG_WINDOWREFRESH)
- {
- EndRefresh(ginfo->gi_Window,FALSE);
- InstallClipRegion(ginfo->gi_Window->WLayer,old_region);
- BeginRefresh(ginfo->gi_Window);
- }
- else {
- InstallClipRegion(ginfo->gi_Window->WLayer,old_region);
- };
- };
- DisposeRegion(new_region);
- };
- };
- };
- if (g->Flags & GFLG_DISABLED)
- {
- SetDrMd(rp,JAM1);
- SetAPen(rp,pens[TEXTPEN]);
- SetAfPt(rp,ditherData,1);
- RectFill(rp,g->LeftEdge, g->TopEdge,
- g->LeftEdge + g->Width - 1, g->TopEdge + g->Height - 1);
- SetAfPt(rp,NULL,0);
- };
- if (msg->MethodID != GM_RENDER)
- ReleaseGIRPort(rp);
- return TRUE;
- };
- return FALSE;
- }
-
- // *************************************************************
-
- ULONG ListClass::countListLength(struct InstanceData *data)
- {
- data->horiztotal = 0;
- if (!data->members)
- return 0;
- ULONG ll = 0;
- UWORD total = 0;
- struct Node *n;
- struct IntuiText it;
- it.ITextFont = data->tattr;
- for (n = data->members->lh_Head; n->ln_Succ; n = n->ln_Succ)
- {
- if (n->ln_Name)
- {
- it.IText = (STRPTR) n->ln_Name;
- UWORD t = IntuiTextLength(&it);
- if (t > total)
- total = t;
- };
- ll++;
- };
- data->horiztotal = total;
- return ll;
- }
-
- // *************************************************************
-
- VOID ListClass::NotifyTarget(Class *cl, Object *o,
- struct InstanceData *data, struct GadgetInfo *ginfo, ULONG flags)
- {
- struct TagItem tt[4];
- tt[0].ti_Tag = LSA_Top;
- tt[0].ti_Data = data->top;
- tt[1].ti_Tag = LSA_Visible;
- tt[1].ti_Data = data->visible;
- tt[2].ti_Tag = LSA_Total;
- tt[2].ti_Data = data->total;
- tt[3].ti_Tag = TAG_END;
- DoSuperMethod(cl,o,OM_NOTIFY,tt,ginfo,flags);
- if (data->horizic && data->horiztarget)
- {
- tt[0].ti_Tag = LSA_HorizLeft;
- tt[0].ti_Data = data->horizleft;
- tt[1].ti_Tag = LSA_HorizWidth;
- tt[1].ti_Data = data->horizwidth;
- tt[2].ti_Tag = LSA_HorizTotal;
- tt[2].ti_Data = data->horiztotal;
- tt[3].ti_Tag = TAG_END;
- DoMethod(data->horizic,OM_UPDATE,tt,ginfo,flags);
- };
- }
-
- // *************************************************************
-
- VOID ListClass::calcBorders(Class *cl, struct Gadget *g,
- struct InstanceData *data)
- {
- data->leftborder = 0;
- data->rightborder = 0;
- data->topborder = 0;
- data->bottomborder = 0;
- if (g->GadgetText && data->tattr)
- {
- data->topborder = data->tattr->ta_YSize + 4;
- };
- }
-
- WORD ListClass::calcWidth(Class *cl, struct Gadget *g,
- struct InstanceData *data)
- {
- if (data->tattr)
- {
- UWORD cols = data->columns;
- if (cols == 0)
- cols = 16;
- return MeasureTextLength("0",data->tattr)*cols + 8;
- };
- return 100;
- }
-
- WORD ListClass::calcHeight(Class *cl, struct Gadget *g,
- struct InstanceData *data)
- {
- if (data->itemheight == 0)
- return 60;
- UWORD lines = data->lines;
- if (!lines)
- data->lines = 6;
- return (data->itemheight + data->spacing) * lines + 4;
- }
-
- // *************************************************************
-
- ListClass BListC::lic;
-
- // *************************************************************
-
-