Moving to main tree, needed by SysExplorer
[AROS.git] / workbench / classes / zune / nlist / nlist_mcc / NList_mcc1.c
blobaeceb1b180ba919e057e3863bc4f11070ca79a46
1 /***************************************************************************
3 NList.mcc - New List MUI Custom Class
4 Registered MUI class, Serial Number: 1d51 0x9d510030 to 0x9d5100A0
5 0x9d5100C0 to 0x9d5100FF
7 Copyright (C) 1996-2001 by Gilles Masson
8 Copyright (C) 2001-2005 by NList Open Source Team
10 This library is free software; you can redistribute it and/or
11 modify it under the terms of the GNU Lesser General Public
12 License as published by the Free Software Foundation; either
13 version 2.1 of the License, or (at your option) any later version.
15 This library is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
20 NList classes Support Site: http://www.sf.net/projects/nlist-classes
22 $Id$
24 ***************************************************************************/
26 #include <stdlib.h>
28 #include <clib/alib_protos.h>
29 #include <proto/graphics.h>
30 #include <proto/utility.h>
31 #include <proto/exec.h>
32 #include <proto/intuition.h>
34 #include "private.h"
36 #include "NList_func.h"
37 #include "version.h"
38 #include "NListviews_mcp.h"
39 #include "NListview_mcc.h"
41 extern const struct Hook NL_ConstructHook_String;
42 extern const struct Hook NL_DestructHook_String;
44 #define SET_PEN(var_dest,test_init) \
45 { \
46 tag->ti_Tag = TAG_IGNORE; \
47 if(data->SETUP == TRUE) \
48 { \
49 test_init = tag->ti_Data; \
50 obtain_pen(obj, &(var_dest), (struct MUI_PenSpec *)tag->ti_Data); \
51 REDRAW_ALL; \
52 } \
55 #define SET_BG(var_dest,test_init) \
56 { \
57 tag->ti_Tag = TAG_IGNORE; \
58 test_init = TRUE; \
59 var_dest = tag->ti_Data; \
60 REDRAW_ALL; \
66 IPTR mNL_AskMinMax(struct IClass *cl,Object *obj,struct MUIP_AskMinMax *msg)
68 register struct NLData *data = INST_DATA(cl,obj);
69 LONG vinc = data->vinc;
71 * if (data->nodraw)
72 * {
73 * LONG minwidth = _minwidth(obj);
74 * LONG minheight = _minheight(obj);
75 * LONG maxwidth = _maxwidth(obj);
76 * LONG maxheight = _maxheight(obj);
77 * LONG defwidth = _defwidth(obj);
78 * LONG defheight = _defheight(obj);
80 * D(bug("%lx|mNL_AskMinMax() %ld,%ld %ld,%ld %ld,%ld \n",obj,minwidth,minheight,defwidth,defheight,maxwidth,maxheight));
81 * DoSuperMethodA(cl,obj,(Msg) msg);
82 * return (0);
83 * }
86 data->NList_Quiet++;
87 /*D(bug("%lx|mNL_AskMinMax() 1 \n",obj));*/
88 DoSuperMethodA(cl,obj,(Msg) msg);
89 /*D(bug("%lx|mNL_AskMinMax() 2 \n",obj));*/
91 data->font = _font(obj);
92 data->vinc = data->font->tf_YSize + data->addvinc;
93 if (data->NList_MinLineHeight > data->vinc)
94 data->vinc = data->NList_MinLineHeight;
95 if (data->MinImageHeight > data->vinc)
96 data->vinc = data->MinImageHeight;
97 if (data->vinc < 2)
98 data->vinc = 2;
100 if ((vinc > 1) && (vinc != data->vinc))
102 DO_NOTIFY(NTF_LineHeight);
105 if (((data->NList_SourceArray == 2) || data->VirtGroup) && (data->NList_Entries > 0))
106 { struct RastPort *tmprp2 = NULL;
107 if ((data->NList_AdjustWidth == -1) && !data->nodraw &&
108 (tmprp2 = (struct RastPort *) AllocVec(sizeof(struct RastPort),0)))
109 { struct RastPort *tmprp = data->rp;
110 struct TextFont *tmpfont;
111 WORD column,delta;
112 LONG show;
113 data->rp = &(_screen(obj)->RastPort);
114 *tmprp2 = *(data->rp);
115 data->rp = tmprp2;
116 tmpfont = data->rp->Font;
117 data->font = _font(obj);
118 data->pens = _pens(obj);
119 data->voff = data->font->tf_Baseline + (data->vinc - data->font->tf_YSize + 1)/2;
120 { struct TextExtent te;
121 data->hinc = 0;
122 SetSoftStyle(data->rp, FSF_BOLD|FSF_ITALIC, STYLE_MASK);
123 TextExtent(data->rp, "m", 1, &te);
124 if (data->hinc < te.te_Width)
125 data->hinc = te.te_Width;
126 SetSoftStyle(data->rp, FSF_BOLD|FSF_ITALIC, STYLE_MASK);
127 TextExtent(data->rp, "M", 1, &te);
128 if (data->hinc < te.te_Width)
129 data->hinc = te.te_Width;
130 SetSoftStyle(data->rp, FSF_BOLD|FSF_ITALIC, STYLE_MASK);
131 TextExtent(data->rp, "w", 1, &te);
132 if (data->hinc < te.te_Width)
133 data->hinc = te.te_Width;
134 SetSoftStyle(data->rp, FSF_BOLD|FSF_ITALIC, STYLE_MASK);
135 TextExtent(data->rp, "W", 1, &te);
136 if (data->hinc < te.te_Width)
137 data->hinc = te.te_Width;
138 SetSoftStyle(data->rp, 0, STYLE_MASK);
139 TextExtent(data->rp, " ", 1, &te);
140 data->spacesize = te.te_Width;
142 data->tabsize = data->spacesize * data->NList_TabSize;
143 if (data->tabsize < 4)
144 data->tabsize = 4;
146 show = data->SHOW;
147 data->SHOW = 1;
148 AllWidthColumns(data);
149 data->SHOW = show;
150 data->NList_AdjustWidth = 0;
151 delta = 0;
152 for (column = 0;column < data->numcols;column++)
153 { data->NList_AdjustWidth += data->cols[column].c->colwidthmax;
154 if (column < data->numcols-1)
155 delta += data->cols[column].c->delta;
157 if (data->NList_AdjustWidth < 2)
158 data->NList_AdjustWidth = -1;
159 else
160 data->NList_AdjustWidth += delta;
161 if (data->rp->Font!=tmpfont)
162 SetFont(data->rp,tmpfont);
163 data->rp = tmprp;
164 FreeVec(tmprp2);
166 if (data->NList_AdjustHeight)
167 { if (data->NList_Title)
168 data->NList_AdjustHeight = ((data->NList_Entries+1) * data->vinc) + 1;
169 else
170 data->NList_AdjustHeight = (data->NList_Entries * data->vinc) + 1;
171 if (data->NList_AdjustHeight == 0)
172 data->NList_AdjustHeight = -1;
173 DONE_NOTIFY(NTF_MinMax);
175 if (data->NList_SourceArray == 2)
176 data->NList_SourceArray = 1;
179 *D(bug("%lx|AskMinMax1 MiW=%ld DeW=%ld MaW=%ld MiH=%ld DeH=%ld MaH=%ld\n",obj,
180 * (LONG)msg->MinMaxInfo->MinWidth,(LONG)msg->MinMaxInfo->DefWidth,(LONG)msg->MinMaxInfo->MaxWidth,
181 * (LONG)msg->MinMaxInfo->MinHeight,(LONG)msg->MinMaxInfo->DefHeight,(LONG)msg->MinMaxInfo->MaxHeight));
183 if ((data->NList_AdjustWidth > 0) &&
184 ((data->VirtGroup || (_screen(obj)->Width*3/4 > data->NList_AdjustWidth)) && (30 < data->NList_AdjustWidth)))
185 { msg->MinMaxInfo->MinWidth += data->NList_AdjustWidth;
186 msg->MinMaxInfo->DefWidth += data->NList_AdjustWidth;
187 msg->MinMaxInfo->MaxWidth += data->NList_AdjustWidth;
188 /*D(bug("%lx|1 AdjustWidth=%ld\n",obj,data->NList_AdjustWidth));*/
190 else if (data->NList_AdjustWidth > 0)
191 { if (_screen(obj)->Width*3/4 > data->NList_AdjustWidth)
192 msg->MinMaxInfo->MinWidth += data->NList_AdjustWidth;
193 else
194 msg->MinMaxInfo->MinWidth += 30;
195 msg->MinMaxInfo->DefWidth += data->NList_AdjustWidth;
196 if (30 < data->NList_AdjustWidth)
197 msg->MinMaxInfo->MaxWidth += data->NList_AdjustWidth;
198 else
199 msg->MinMaxInfo->MaxWidth += MUI_MAXMAX;
200 /*D(bug("%lx|2 AdjustWidth=%ld\n",obj,data->NList_AdjustWidth));*/
202 else
203 { msg->MinMaxInfo->MinWidth += 30;
204 msg->MinMaxInfo->DefWidth += 300;
205 msg->MinMaxInfo->MaxWidth += MUI_MAXMAX;
206 /*D(bug("%lx|3 AdjustWidth=%ld\n",obj,300));*/
208 if ((data->NList_AdjustHeight > 0) &&
209 ((data->VirtGroup || (_screen(obj)->Height*3/4 > data->NList_AdjustHeight)) && ((data->vinc * 3) < data->NList_AdjustHeight)))
210 { msg->MinMaxInfo->MinHeight += data->NList_AdjustHeight;
211 msg->MinMaxInfo->DefHeight += data->NList_AdjustHeight;
212 msg->MinMaxInfo->MaxHeight += data->NList_AdjustHeight;
213 /*D(bug("%lx|1 AdjustHeight=%ld\n",obj,data->NList_AdjustHeight));*/
215 else if (data->NList_AdjustHeight > 0)
217 if (_screen(obj)->Height*3/4 > data->NList_AdjustHeight)
218 msg->MinMaxInfo->MinHeight += data->NList_AdjustHeight;
219 else
220 msg->MinMaxInfo->MinHeight += (data->vinc * 3);
221 msg->MinMaxInfo->DefHeight += data->NList_AdjustHeight;
222 if ((data->vinc * 3) < data->NList_AdjustHeight)
223 msg->MinMaxInfo->MaxHeight += data->NList_AdjustHeight;
224 else
225 msg->MinMaxInfo->MaxHeight += MUI_MAXMAX;
226 /*D(bug("%lx|2 AdjustHeight=%ld\n",obj,data->NList_AdjustHeight));*/
228 else
229 { msg->MinMaxInfo->MinHeight += (data->vinc * 3);
230 msg->MinMaxInfo->DefHeight += 200;
231 msg->MinMaxInfo->MaxHeight += MUI_MAXMAX;
232 /*D(bug("%lx|3 AdjustHeight=%ld\n",obj,200));*/
234 if (data->NList_TitleSeparator && data->NList_Title)
235 { msg->MinMaxInfo->MinHeight += 2;
236 msg->MinMaxInfo->DefHeight += 2;
237 msg->MinMaxInfo->MaxHeight += 2;
240 *D(bug("%lx|AskMinMax2 MiW=%ld DeW=%ld MaW=%ld MiH=%ld DeH=%ld MaH=%ld\n",obj,
241 * (LONG)msg->MinMaxInfo->MinWidth,(LONG)msg->MinMaxInfo->DefWidth,(LONG)msg->MinMaxInfo->MaxWidth,
242 * (LONG)msg->MinMaxInfo->MinHeight,(LONG)msg->MinMaxInfo->DefHeight,(LONG)msg->MinMaxInfo->MaxHeight));
244 data->NList_Quiet--;
245 if (!WANTED_NOTIFY(NTF_MinMaxNoDraw))
246 data->do_draw_all = data->do_draw_title = data->do_draw = TRUE;
247 return(0);
252 IPTR mNL_Notify(struct IClass *cl,Object *obj,struct MUIP_Notify *msg)
254 register struct NLData *data = INST_DATA(cl,obj);
255 switch (msg->TrigAttr)
257 case MUIA_NListview_Horiz_ScrollBar :
258 WANT_NOTIFY(NTF_SB);
259 data->scrollersobj = msg->DestObj;
260 break;
261 case MUIA_NList_Horiz_First :
262 WANT_NOTIFY(NTF_HSB);
263 case MUIA_NList_Horiz_Entries :
264 case MUIA_NList_Horiz_Visible :
265 case MUIA_NList_HorizDeltaFactor :
266 break;
267 case MUIA_NList_Prop_First :
268 WANT_NOTIFY(NTF_VSB);
269 if (msg->DestObj && !data->VertPropObject)
271 IPTR val;
273 // check if MUIA_Prop_First exists
274 if(GetAttr(MUIA_Prop_First, msg->DestObj, &val) != FALSE)
275 data->VertPropObject = msg->DestObj;
278 if (data->VertPropObject)
279 { if (data->NList_Smooth)
280 set(data->VertPropObject,MUIA_Prop_DoSmooth, TRUE);
281 else
282 set(data->VertPropObject,MUIA_Prop_DoSmooth, FALSE);
284 case MUIA_NList_VertDeltaFactor :
285 case MUIA_NList_Prop_Entries :
286 case MUIA_NList_Prop_Visible :
287 break;
288 case MUIA_List_Prop_First :
289 if (msg->DestObj && !data->VertPropObject)
291 IPTR val;
293 // check if there exists a MUIA_Prop_First attribute
294 if(GetAttr(MUIA_Prop_First, msg->DestObj, &val) != FALSE)
295 data->VertPropObject = msg->DestObj;
297 if (data->VertPropObject)
299 struct List *childlist;
301 if((childlist = (struct List *)xget(data->VertPropObject, MUIA_Group_ChildList)))
303 Object *object_state = (Object *)childlist->lh_Head;
304 Object *child;
306 while((child = NextObject(&object_state)))
308 // check if there exists a MUIA_Prop_First attribute
309 if(GetAttr(MUIA_Prop_First, msg->DestObj, &val) != FALSE)
311 data->VertPropObject = msg->DestObj;
312 break;
316 DoMethod(obj, MUIM_Notify, MUIA_NList_Prop_Entries,MUIV_EveryTime,
317 data->VertPropObject, 3, MUIM_NoNotifySet,MUIA_Prop_Entries,MUIV_TriggerValue);
318 DoMethod(obj, MUIM_Notify, MUIA_NList_Prop_Visible,MUIV_EveryTime,
319 data->VertPropObject, 3, MUIM_NoNotifySet,MUIA_Prop_Visible,MUIV_TriggerValue);
320 DoMethod(obj, MUIM_Notify, MUIA_NList_Prop_First,MUIV_EveryTime,
321 data->VertPropObject, 3, MUIM_NoNotifySet,MUIA_Prop_First,MUIV_TriggerValue);
322 DoMethod(data->VertPropObject, MUIM_Notify, MUIA_Prop_First,MUIV_EveryTime,
323 obj, 3, MUIM_NoNotifySet,MUIA_NList_Prop_First,MUIV_TriggerValue);
324 DoMethod(obj, MUIM_Notify, MUIA_NList_VertDeltaFactor,MUIV_EveryTime,
325 data->VertPropObject, 3, MUIM_NoNotifySet,MUIA_Prop_DeltaFactor,MUIV_TriggerValue);
326 if (data->NList_Smooth)
327 set(data->VertPropObject,MUIA_Prop_DoSmooth, TRUE);
328 else
329 set(data->VertPropObject,MUIA_Prop_DoSmooth, FALSE);
332 case MUIA_List_Prop_Entries :
333 case MUIA_List_Prop_Visible :
334 return (0);
335 case MUIA_NList_First :
336 WANT_NOTIFY(NTF_First);
337 break;
338 case MUIA_NList_Entries :
339 WANT_NOTIFY(NTF_Entries);
340 break;
341 case MUIA_NList_Active :
342 WANT_NOTIFY(NTF_Active);
343 break;
344 case MUIA_List_Active :
345 WANT_NOTIFY(NTF_L_Active);
346 break;
347 case MUIA_NList_SelectChange :
348 WANT_NOTIFY(NTF_Select);
349 break;
350 case MUIA_Listview_SelectChange :
351 WANT_NOTIFY(NTF_LV_Select);
352 break;
353 case MUIA_NList_EntryClick :
354 WANT_NOTIFY(NTF_EntryClick);
355 break;
356 case MUIA_NList_MultiClick :
357 WANT_NOTIFY(NTF_Multiclick);
358 break;
359 case MUIA_NList_MultiClickAlone :
360 WANT_NOTIFY(NTF_MulticlickAlone);
361 break;
362 case MUIA_NList_DoubleClick :
363 msg->TrigVal = MUIV_EveryTime;
364 WANT_NOTIFY(NTF_Doubleclick);
365 break;
366 case MUIA_Listview_DoubleClick :
367 WANT_NOTIFY(NTF_LV_Doubleclick);
368 break;
369 case MUIA_NList_TitleClick :
370 WANT_NOTIFY(NTF_TitleClick);
371 break;
372 case MUIA_NList_TitleClick2 :
373 WANT_NOTIFY(NTF_TitleClick2);
374 break;
375 case MUIA_NList_ButtonClick :
376 WANT_NOTIFY(NTF_ButtonClick);
377 break;
378 case MUIA_NList_LineHeight :
379 WANT_NOTIFY(NTF_LineHeight);
380 break;
381 case MUIA_NList_DragSortInsert :
382 WANT_NOTIFY(NTF_DragSortInsert);
383 break;
384 case MUIA_NList_InsertPosition :
385 WANT_NOTIFY(NTF_Insert);
386 break;
387 case MUIA_NList_Columns :
388 WANT_NOTIFY(NTF_Columns);
389 break;
391 * default:
392 * D(bug("%lx|NL: Notify(0x%lx,0x%lx) ??? \n",obj,(long) msg->TrigAttr,(long) msg->TrigVal));
395 return (DoSuperMethodA(cl,obj,(Msg) msg));
399 IPTR mNL_Set(struct IClass *cl,Object *obj,Msg msg)
401 register struct NLData *data = INST_DATA(cl,obj);
402 IPTR retval;
403 LONG do_things = TRUE;
404 struct TagItem *tags,*tag;
406 for(tags = ((struct opSet *)msg)->ops_AttrList; (tag = (struct TagItem *)NextTagItem((APTR)&tags));)
408 switch (tag->ti_Tag)
410 case MUIA_Background :
411 case MUIA_Group_Forward :
412 break;
414 case MUIA_NList_Visible :
415 tag->ti_Tag = TAG_IGNORE;
416 do_things = FALSE;
417 break;
419 case MUIA_ShortHelp : // RHP: Added for Special Shorthelp
420 if (data->affover<0)
422 data->NList_ShortHelp = (STRPTR)tag->ti_Data;
424 break;
426 case MUIA_ContextMenu :
427 if (do_things)
429 data->NList_ContextMenu = data->ContextMenu = (LONG)tag->ti_Data;
431 if (data->SETUP && (data->NList_ContextMenu == (LONG)MUIV_NList_ContextMenu_Default))
433 LONG *ptrd;
434 data->ContextMenu = MUIV_NList_ContextMenu_Always;
436 if (DoMethod(obj, MUIM_GetConfigItem, MUICFG_NList_Menu, &ptrd))
438 switch (*ptrd)
440 case MUIV_NList_ContextMenu_TopOnly :
441 case MUIV_NList_ContextMenu_Always :
442 case MUIV_NList_ContextMenu_Never :
443 data->ContextMenu = *ptrd;
444 break;
448 if ((data->ContextMenu == (LONG)MUIV_NList_ContextMenu_TopOnly) ||
449 (data->ContextMenu == (LONG)MUIV_NList_ContextMenu_Never))
450 tag->ti_Data = 0;
451 else if (data->ContextMenu == (LONG)MUIV_NList_ContextMenu_Always)
452 tag->ti_Data = MUIV_NList_ContextMenu_Always;
453 else if (((data->ContextMenu & 0x9d510030) == 0x9d510030) && (data->numcols <= 1))
454 tag->ti_Data = 0;
456 data->ContextMenuOn = (LONG) tag->ti_Data;
457 break;
458 case MUIA_List_Active :
459 if (!NOTIFYING(NTF_L_Active))
460 NL_List_Active(data,(long) tag->ti_Data,tag,data->NList_List_Select,FALSE,0);
461 NOTIFY_END(NTF_L_Active);
462 DONE_NOTIFY(NTF_L_Active);
463 break;
464 case MUIA_NList_Active :
465 // D(DBF_ALWAYS, "MUIA_NList_Active %ld was %ld %ld %ld",tag->ti_Data,data->NList_Active,NOTIFYING(NTF_Active),WANTED_NOTIFY(NTF_Active));
466 if (!NOTIFYING(NTF_Active))
467 NL_List_Active(data,(long) tag->ti_Data,tag,data->NList_List_Select,FALSE,0);
468 NOTIFY_END(NTF_Active);
469 DONE_NOTIFY(NTF_Active);
470 break;
471 case MUIA_List_First :
472 case MUIA_NList_First :
473 if (do_things)
475 NL_List_First(data,(long) tag->ti_Data,tag);
476 data->ScrollBarsTime = SCROLLBARSTIME;
478 DONE_NOTIFY(NTF_First);
479 break;
480 case MUIA_NListview_Horiz_ScrollBar: break;
481 case MUIA_List_Visible : break;
482 case MUIA_List_Entries : break;
483 case MUIA_NList_Entries : break;
484 case MUIA_List_Quiet :
485 case MUIA_NList_Quiet :
486 data->display_ptr = NULL;
487 data->parse_column = -1;
488 if (tag->ti_Data == (ULONG)MUIV_NList_Quiet_Visual)
489 VISUALQUIET;
490 else if (tag->ti_Data)
491 FULLQUIET;
492 else
493 ENDQUIET;
494 tag->ti_Tag = TAG_IGNORE;
495 break;
496 case MUIA_List_Prop_Entries :
497 case MUIA_List_Prop_Visible :
498 case MUIA_List_Prop_First :
499 tag->ti_Tag = TAG_IGNORE;
500 break;
501 case MUIA_NList_Prop_Entries :
502 data->old_prop_entries = tag->ti_Data;
503 break;
504 case MUIA_NList_Prop_Visible :
505 data->old_prop_visible = tag->ti_Data;
506 break;
507 case MUIA_NList_Prop_First :
508 if (!WANTED_NOTIFY(NTF_VSB))
509 tag->ti_Tag = TAG_IGNORE;
510 else if (((tag->ti_Data / data->vinc) != (ULONG)(data->NList_Prop_First / data->vinc)) ||
511 (data->NList_Smooth && (tag->ti_Data != (ULONG)data->NList_Prop_First_Prec)))
512 { LONG dobit = tag->ti_Data - data->old_prop_first;
513 LONG Prop_FirstReal = -100;
514 data->old_prop_first = tag->ti_Data;
516 dobit = ((dobit >= 0) ? dobit : -dobit) - data->NList_Prop_Visible;
517 dobit = (dobit >= 0) ? dobit : -dobit;
518 if ((dobit >= 2) && !data->drawall_dobit)
519 data->drawall_dobit = 2;
521 NOWANT_NOTIFY(NTF_VSB);
523 if(data->VertPropObject)
524 Prop_FirstReal = (LONG)xget(data->VertPropObject, MUIA_Prop_TrueFirst);
526 data->NList_Prop_First_Real = tag->ti_Data;
527 if ((!data->NList_Smooth) || ((!data->NList_First_Incr) && (!data->NList_AffFirst_Incr) &&
528 ((data->NList_Prop_First_Prec - (LONG)tag->ti_Data == data->vinc) ||
529 (data->NList_Prop_First_Prec - (LONG)tag->ti_Data == -data->vinc) ||
530 (Prop_FirstReal == data->NList_Prop_First_Real))))
531 { LONG lpfirst;
532 lpfirst = (data->NList_Prop_First_Real / data->vinc) * data->vinc;
533 if ((lpfirst > (data->NList_Prop_Entries - data->NList_Prop_Visible)) &&
534 (lpfirst > data->NList_Prop_First_Real))
535 lpfirst = data->NList_Prop_Entries - data->NList_Prop_Visible;
536 if (lpfirst < 0)
537 lpfirst = 0;
538 data->NList_Prop_First = (lpfirst / data->vinc) * data->vinc;
539 data->NList_Prop_First_Real = data->NList_Prop_First;
540 data->NList_Prop_Add = 0;
541 lpfirst = data->NList_Prop_First / data->vinc;
543 if (data->NList_First != lpfirst)
545 DO_NOTIFY(NTF_First);
548 data->NList_First = lpfirst;
549 data->NList_First_Incr = 0;
550 data->NList_Prop_Wait = 2;
551 if ((data->NList_Prop_First_Real - data->NList_Prop_First_Prec < -20) || (data->NList_Prop_First_Real - data->NList_Prop_First_Prec > 20))
552 data->ScrollBarsTime = SCROLLBARSTIME;
553 if ((data->NList_First <= 0) || (data->NList_First + data->NList_Visible >= data->NList_Entries))
554 data->drawall_dobit = 0;
555 REDRAW;
557 else
558 { LONG lfirst,lincr,add,add2;
560 add = data->NList_Prop_First_Real - data->NList_Prop_First_Prec;
561 if ((add < -5) || (add > 5))
562 data->ScrollBarsTime = SCROLLBARSTIME;
564 if (((data->NList_Prop_First_Real < data->NList_Prop_First_Prec) &&
565 (data->NList_Prop_First_Real < data->NList_Prop_First)) ||
566 ((data->NList_Prop_First_Real > data->NList_Prop_First_Prec) &&
567 (data->NList_Prop_First_Real > data->NList_Prop_First)))
569 add2 = data->NList_Prop_First_Real - data->NList_Prop_First;
570 if (((add2 > 0) && ((add * 2) < add2)) ||
571 ((add2 < 0) && ((add * 2) > add2)))
572 data->NList_Prop_First += (add * 2);
573 else
574 data->NList_Prop_First = data->NList_Prop_First_Real;
576 lfirst = data->NList_Prop_First / data->vinc;
577 lincr = data->NList_Prop_First % data->vinc;
578 if (((add < -1) || (add > 1)) &&
579 ((data->NList_First != lfirst) || (data->NList_First_Incr != lincr)))
580 { data->NList_Prop_Add = add;
581 data->NList_Prop_Wait = 1;
583 if (data->NList_First != lfirst)
585 DO_NOTIFY(NTF_First);
588 data->NList_First = lfirst;
589 data->NList_First_Incr = lincr;
590 REDRAW;
592 else if ((lfirst * data->vinc) == data->NList_Prop_First)
593 { data->NList_Prop_Add = 0;
594 data->NList_Prop_Wait = 1;
596 if (data->NList_First != lfirst)
598 DO_NOTIFY(NTF_First);
601 data->NList_First = lfirst;
602 data->NList_First_Incr = lincr;
603 REDRAW;
605 else
606 { if ((add < 0) && (data->NList_Prop_Add > -2))
607 data->NList_Prop_Add = -2;
608 else if ((add > 0) && (data->NList_Prop_Add < 2))
609 data->NList_Prop_Add = 2;
612 else
613 data->NList_Prop_Add = add;
615 if (data->drawall_dobit == 2)
616 data->drawall_dobit = 0;
617 WANT_NOTIFY(NTF_VSB);
619 data->NList_Prop_First_Prec = tag->ti_Data;
620 if ((tag->ti_Tag == MUIA_NList_Prop_First) || (tag->ti_Tag == MUIA_List_Prop_First))
621 data->old_prop_first = tag->ti_Data;
622 break;
623 case MUIA_NList_Horiz_Entries :
624 data->old_horiz_entries = tag->ti_Data;
625 break;
626 case MUIA_NList_Horiz_Visible :
627 data->old_horiz_visible = tag->ti_Data;
628 break;
630 case MUIA_NList_Horiz_First:
632 if (do_things)
634 data->old_horiz_first = tag->ti_Data;
635 NL_List_Horiz_First(data,(long) tag->ti_Data,tag);
636 data->ScrollBarsTime = SCROLLBARSTIME;
638 if (tag->ti_Tag == MUIA_NList_Horiz_First)
639 data->old_horiz_first = tag->ti_Data;
641 break;
643 case MUIA_List_Title :
644 case MUIA_NList_Title :
645 data->display_ptr = NULL;
646 if (tag->ti_Data && !data->NList_Title)
647 { data->NList_Title = (char *) tag->ti_Data;
648 NL_SetColsAdd(data,-1,TRUE);
649 REDRAW_ALL_FORCE;
651 else if (!tag->ti_Data && data->NList_Title)
652 { NL_SetColsRem(data,-1);
653 data->NList_Title = NULL;
654 REDRAW_ALL_FORCE;
656 else if (tag->ti_Data && data->NList_Title)
657 { NL_SetColsRem(data,-1);
658 data->NList_Title = (char *) tag->ti_Data;
659 NL_SetColsAdd(data,-1,TRUE);
660 REDRAW_FORCE;
662 break;
663 case MUIA_NList_TitleSeparator :
664 data->display_ptr = NULL;
665 data->NList_TitleSeparator = (LONG) tag->ti_Data;
666 REDRAW_ALL_FORCE;
667 break;
668 case 0x8042C53E : /* sent by Listview, has same value as its MUIA_Listview_Input */
669 break;
670 case MUIA_Listview_Input :
671 case MUIA_NList_Input :
672 if (tag->ti_Data)
673 { if (!data->NList_Input)
674 { data->NList_Input = TRUE;
675 nnset(obj,MUIA_Frame, MUIV_Frame_InputList);
676 REDRAW_ALL_FORCE;
679 else if (data->NList_Input)
681 data->NList_Input = FALSE;
682 set_Active(MUIV_NList_Active_Off);
683 NL_UnSelectAll(data,-1);
684 nnset(data->this,MUIA_Frame, MUIV_Frame_ReadList);
685 REDRAW_ALL_FORCE;
687 break;
688 case MUIA_Listview_MultiSelect :
689 case MUIA_NList_MultiSelect :
690 { BOOL reactive = FALSE;
691 if (data->multiselect == MUIV_NList_MultiSelect_None)
692 reactive = TRUE;
693 switch ((LONG) tag->ti_Data)
694 { case MUIV_NList_MultiSelect_None :
695 data->multiselect = data->NList_MultiSelect = MUIV_NList_MultiSelect_None;
696 set_Active(MUIV_NList_Active_Off);
697 NL_UnSelectAll(data,-1);
698 break;
699 case MUIV_NList_MultiSelect_Default :
700 data->NList_MultiSelect = MUIV_NList_MultiSelect_Default;
701 { LONG *multisel;
703 if (data->SETUP && DoMethod(obj, MUIM_GetConfigItem, MUICFG_NList_MultiSelect, (SIPTR) (&multisel)))
704 data->multiselect = *multisel & 0x0007;
705 else
706 data->multiselect = MUIV_NList_MultiSelect_Shifted;
708 break;
709 case MUIV_NList_MultiSelect_Shifted :
710 case MUIV_NList_MultiSelect_Always :
711 data->multiselect = data->NList_MultiSelect = (LONG) tag->ti_Data;
712 break;
714 if (reactive && (data->multiselect != MUIV_NList_MultiSelect_None) &&
715 (data->NList_Active >= 0) && (data->NList_Active < data->NList_Entries))
716 { NL_UnSelectAll(data,data->NList_Active);
717 data->selectmode = MUIV_NList_Select_On;
718 NL_List_Active(data,data->NList_Active,NULL,data->selectmode,TRUE,0);
721 break;
722 case MUIA_List_DragSortable :
723 case MUIA_NList_DragSortable :
724 data->NList_DragSortable = (LONG) tag->ti_Data;
725 tag->ti_Tag = TAG_IGNORE;
726 if (data->NList_DragSortable)
727 { if (data->drag_type == MUIV_NList_DragType_None)
728 { LONG *ptrd;
729 if (data->SETUP && DoMethod(obj, MUIM_GetConfigItem, MUICFG_NList_DragType, &ptrd))
730 data->drag_type = *ptrd;
731 else
732 data->drag_type = MUIV_NList_DragType_Immediate;
735 else if (data->NList_DragType == MUIV_NList_DragType_None)
736 data->drag_type = MUIV_NList_DragType_None;
737 nnset(obj,MUIA_Dropable,data->NList_Dropable);
738 break;
739 case MUIA_Listview_DragType :
740 case MUIA_NList_DragType :
741 data->NList_DragType = (LONG) tag->ti_Data;
742 tag->ti_Tag = TAG_IGNORE;
743 if (data->NList_DragType == MUIV_NList_DragType_Default)
744 { LONG *ptrd;
745 if (data->SETUP && DoMethod(obj, MUIM_GetConfigItem, MUICFG_NList_DragType, &ptrd))
746 data->drag_type = *ptrd;
747 else
748 data->drag_type = MUIV_NList_DragType_Immediate;
750 else
751 data->drag_type = data->NList_DragType;
752 break;
753 case MUIA_NList_DragColOnly :
754 data->NList_DragColOnly = (LONG) tag->ti_Data;
755 break;
756 case MUIA_List_ShowDropMarks :
757 case MUIA_NList_ShowDropMarks :
758 data->NList_ShowDropMarks = (LONG) tag->ti_Data;
759 if (data->NList_DragSortable)
760 data->NList_ShowDropMarks = TRUE;
761 tag->ti_Tag = TAG_IGNORE;
762 break;
763 case MUIA_Draggable :
764 /*D(bug("%lx|set(MUIA_Draggable,%lx) \n",obj,tag->ti_Data));*/
765 tag->ti_Tag = TAG_IGNORE;
766 if (tag->ti_Data && (data->drag_type == MUIV_NList_DragType_None))
767 { LONG *ptrd;
768 data->NList_DragType = MUIV_NList_DragType_Default;
769 if (data->SETUP && DoMethod(obj, MUIM_GetConfigItem, MUICFG_NList_DragType, &ptrd))
770 data->drag_type = *ptrd;
771 else
772 data->drag_type = MUIV_NList_DragType_Immediate;
774 else if (!tag->ti_Data)
775 data->NList_DragType = data->drag_type = MUIV_NList_DragType_None;
776 break;
777 case MUIA_Dropable :
778 data->NList_Dropable = tag->ti_Data;
779 if (data->NList_Dropable || data->NList_DragSortable)
780 tag->ti_Data = TRUE;
781 else
782 tag->ti_Data = FALSE;
783 break;
784 case MUIA_List_ConstructHook :
785 case MUIA_NList_ConstructHook :
786 /*D(bug("%lx|set_ConstructHook=0x%lx \n",obj,tag->ti_Data));*/
787 if (tag->ti_Data == (ULONG)MUIV_NList_ConstructHook_String)
788 data->NList_ConstructHook = (struct Hook *) &NL_ConstructHook_String;
789 else
790 data->NList_ConstructHook = (struct Hook *) tag->ti_Data;
791 data->NList_ConstructHook2 = FALSE;
792 data->do_setcols = data->do_updatesb = data->do_wwrap = TRUE;
793 data->display_ptr = NULL;
794 break;
795 case MUIA_NList_ConstructHook2 :
796 data->NList_ConstructHook = (struct Hook *) tag->ti_Data;
797 data->NList_ConstructHook2 = TRUE;
798 data->do_setcols = data->do_updatesb = data->do_wwrap = TRUE;
799 data->display_ptr = NULL;
800 break;
801 case MUIA_List_DestructHook :
802 case MUIA_NList_DestructHook :
803 /*D(bug("%lx|set_DestructHook=0x%lx \n",obj,tag->ti_Data));*/
804 if (tag->ti_Data == (ULONG)MUIV_NList_DestructHook_String)
805 data->NList_DestructHook = (struct Hook *) &NL_DestructHook_String;
806 else
807 data->NList_DestructHook = (struct Hook *) tag->ti_Data;
808 data->NList_DestructHook2 = FALSE;
809 data->do_setcols = data->do_updatesb = data->do_wwrap = TRUE;
810 data->display_ptr = NULL;
811 break;
812 case MUIA_NList_DestructHook2 :
813 data->NList_DestructHook = (struct Hook *) tag->ti_Data;
814 data->NList_DestructHook2 = TRUE;
815 data->do_setcols = data->do_updatesb = data->do_wwrap = TRUE;
816 data->display_ptr = NULL;
817 break;
818 case MUIA_List_CompareHook :
819 case MUIA_NList_CompareHook :
820 /*D(bug("%lx|set_CompareHook=0x%lx \n",obj,tag->ti_Data));*/
821 data->NList_CompareHook = (struct Hook *) tag->ti_Data;
822 data->NList_CompareHook2 = FALSE;
823 break;
824 case MUIA_NList_CompareHook2 :
825 data->NList_CompareHook = (struct Hook *) tag->ti_Data;
826 data->NList_CompareHook2 = TRUE;
827 break;
828 case MUIA_List_DisplayHook :
829 case MUIA_NList_DisplayHook :
830 /*D(bug("%lx|set_DisplayHook=0x%lx \n",obj,tag->ti_Data));*/
831 data->NList_DisplayHook = (struct Hook *) tag->ti_Data;
832 data->NList_DisplayHook2 = FALSE;
833 data->do_setcols = data->do_updatesb = data->do_wwrap = TRUE;
834 data->display_ptr = NULL;
835 break;
836 case MUIA_NList_DisplayHook2 :
837 data->NList_DisplayHook = (struct Hook *) tag->ti_Data;
838 data->NList_DisplayHook2 = TRUE;
839 data->do_setcols = data->do_updatesb = data->do_wwrap = TRUE;
840 data->display_ptr = NULL;
841 break;
842 case MUIA_List_MultiTestHook :
843 case MUIA_NList_MultiTestHook :
844 /*D(bug("%lx|set_MultiTestHook=0x%lx \n",obj,tag->ti_Data));*/
845 data->NList_MultiTestHook = (struct Hook *) tag->ti_Data;
846 break;
847 case MUIA_NList_CopyEntryToClipHook :
848 data->NList_CopyEntryToClipHook = (struct Hook *) tag->ti_Data;
849 data->NList_CopyEntryToClipHook2 = FALSE;
850 break;
851 case MUIA_NList_CopyEntryToClipHook2 :
852 data->NList_CopyEntryToClipHook = (struct Hook *) tag->ti_Data;
853 data->NList_CopyEntryToClipHook2 = TRUE;
854 break;
855 case MUIA_NList_CopyColumnToClipHook :
856 data->NList_CopyColumnToClipHook = (struct Hook *) tag->ti_Data;
857 data->NList_CopyColumnToClipHook2 = FALSE;
858 break;
859 case MUIA_NList_CopyColumnToClipHook2 :
860 data->NList_CopyColumnToClipHook = (struct Hook *) tag->ti_Data;
861 data->NList_CopyColumnToClipHook2 = TRUE;
862 break;
863 case MUIA_Listview_DoubleClick:
864 WANT_NOTIFY(NTF_LV_Doubleclick);
865 break;
866 case MUIA_NList_EntryClick :
867 WANT_NOTIFY(NTF_EntryClick);
868 break;
869 case MUIA_NList_MultiClick :
870 WANT_NOTIFY(NTF_Multiclick);
871 break;
872 case MUIA_NList_MultiClickAlone :
873 WANT_NOTIFY(NTF_MulticlickAlone);
874 break;
875 case MUIA_NList_DoubleClick :
876 WANT_NOTIFY(NTF_Doubleclick);
877 break;
878 case MUIA_NList_TitleClick:
879 /*D(bug("set(%lx,NList_TitleClick,%lx)\n",obj,tag->ti_Data));*/
880 WANT_NOTIFY(NTF_TitleClick);
881 break;
882 case MUIA_NList_TitleClick2:
883 /*D(bug("set(%lx,NList_TitleClick2,%lx)\n",obj,tag->ti_Data));*/
884 WANT_NOTIFY(NTF_TitleClick2);
885 break;
886 case MUIA_Listview_SelectChange:
887 WANT_NOTIFY(NTF_LV_Select);
888 break;
889 case MUIA_NList_SelectChange:
890 WANT_NOTIFY(NTF_Select);
891 break;
892 case MUIA_NList_TitlePen :
893 SET_PEN(data->NList_TitlePen,data->Pen_Title_init);
894 break;
895 case MUIA_NList_ListPen :
896 SET_PEN(data->NList_ListPen,data->Pen_List_init);
897 break;
898 case MUIA_NList_SelectPen :
899 SET_PEN(data->NList_SelectPen,data->Pen_Select_init);
900 break;
901 case MUIA_NList_CursorPen :
902 SET_PEN(data->NList_CursorPen,data->Pen_Cursor_init);
903 break;
904 case MUIA_NList_UnselCurPen :
905 SET_PEN(data->NList_UnselCurPen,data->Pen_UnselCur_init);
906 break;
907 case MUIA_NList_InactivePen :
908 SET_PEN(data->NList_InactivePen,data->Pen_Inactive_init);
909 break;
910 case MUIA_NList_TitleBackground :
911 SET_BG(data->NList_TitleBackGround,data->BG_Title_init);
912 break;
913 case MUIA_NList_ListBackground :
914 SET_BG(data->NList_ListBackGround,data->BG_List_init);
915 break;
916 case MUIA_NList_SelectBackground :
917 SET_BG(data->NList_SelectBackground,data->BG_Select_init);
918 break;
919 case MUIA_NList_CursorBackground :
920 SET_BG(data->NList_CursorBackground,data->BG_Cursor_init);
921 break;
922 case MUIA_NList_UnselCurBackground :
923 SET_BG(data->NList_UnselCurBackground,data->BG_UnselCur_init);
924 break;
925 case MUIA_NList_InactiveBackground :
926 SET_BG(data->NList_InactiveBackground,data->BG_Inactive_init);
927 break;
929 case MUIA_NList_DefaultObjectOnClick :
930 data->NList_DefaultObjectOnClick = (LONG) tag->ti_Data;
931 break;
933 case MUIA_NList_ActiveObjectOnClick :
935 data->NList_ActiveObjectOnClick = (BOOL)tag->ti_Data;
936 if(data->NList_ActiveObjectOnClick)
938 // disable that the object will automatically get a border when
939 // the ActiveObjectOnClick option is active
940 _flags(obj) |= (1<<7);
941 if(data->nlistviewobj != NULL)
942 _flags(data->nlistviewobj) |= (1<<7);
944 else
946 // enable that the object will automatically get a border when
947 // the ActiveObjectOnClick option is active
948 _flags(obj) &= ~(1<<7);
949 if(data->nlistviewobj != NULL)
950 _flags(data->nlistviewobj) &= ~(1<<7);
953 break;
955 case MUIA_List_MinLineHeight :
956 case MUIA_NList_MinLineHeight :
957 data->NList_MinLineHeight = (LONG) tag->ti_Data;
958 if (data->NList_MinLineHeight <= 0)
959 { data->addvinc = -data->NList_MinLineHeight;
960 REDRAW_ALL;
962 else if ((data->NList_MinLineHeight != data->vinc) &&
963 (data->NList_MinLineHeight > data->font->tf_YSize) &&
964 (data->NList_MinLineHeight > data->MinImageHeight))
965 { data->addvinc = DEFAULT_VERT_INC;
966 if (data->SETUP)
967 { LONG *ptrd;
968 if (DoMethod(obj, MUIM_GetConfigItem, MUICFG_NList_VertInc, &ptrd))
969 data->addvinc = *ptrd;
971 REDRAW_ALL;
973 break;
974 case MUIA_NList_ForcePen :
975 data->NList_ForcePen = (LONG) tag->ti_Data;
976 tag->ti_Tag = TAG_IGNORE;
977 if (data->NList_ForcePen == MUIV_NList_ForcePen_Default)
978 { LONG *ptrd;
979 if (data->SETUP && DoMethod(obj, MUIM_GetConfigItem, MUICFG_NList_ForcePen, &ptrd))
980 data->ForcePen = *ptrd;
981 else
982 data->ForcePen = MUIV_NList_ForcePen_Off;
984 else
985 data->ForcePen = data->NList_ForcePen;
986 REDRAW_ALL;
987 break;
988 case MUIA_List_Format :
989 case MUIA_NList_Format :
990 data->NList_Format = (char *) tag->ti_Data;
991 if (data->NList_Format)
992 NL_Read_Format(data,data->NList_Format,(tag->ti_Tag == MUIA_List_Format));
993 else
994 NL_Read_Format(data, (char *)"",(tag->ti_Tag == MUIA_List_Format));
995 Make_Active_Visible;
996 REDRAW;
997 break;
998 case MUIA_NList_MakeActive :
999 data->NList_MakeActive = tag->ti_Data;
1000 break;
1001 case MUIA_NList_KeepActive :
1002 data->NList_KeepActive = tag->ti_Data;
1003 break;
1004 case MUIA_NList_TypeSelect :
1005 MOREQUIET;
1006 NL_UnSelectAll(data,FALSE);
1007 UnSelectCharSel(data,FALSE);
1008 data->NList_TypeSelect = (LONG) tag->ti_Data;
1009 NL_UnSelectAll(data,FALSE);
1010 UnSelectCharSel(data,FALSE);
1011 set_Active(MUIV_NList_Active_Off);
1012 REDRAW_ALL;
1013 LESSQUIET;
1014 break;
1015 case MUIA_Listview_DefClickColumn :
1016 case MUIA_NList_DefClickColumn :
1017 data->NList_DefClickColumn = (LONG) tag->ti_Data;
1018 break;
1019 case MUIA_NList_AutoCopyToClip :
1020 data->NList_AutoCopyToClip = (LONG) tag->ti_Data;
1021 break;
1022 case MUIA_NList_AutoClip :
1023 data->NList_AutoClip = (BOOL)tag->ti_Data;
1024 break;
1025 case MUIA_NList_TabSize :
1026 data->NList_TabSize = (LONG) tag->ti_Data;
1027 REDRAW_ALL;
1028 break;
1029 case MUIA_NList_SkipChars :
1030 data->NList_SkipChars = (char *) tag->ti_Data;
1031 REDRAW_ALL;
1032 break;
1033 case MUIA_NList_WordSelectChars :
1034 data->NList_WordSelectChars = (char *) tag->ti_Data;
1035 break;
1036 case MUIA_NList_DisplayRecall :
1037 data->display_ptr = NULL;
1038 break;
1039 case MUIA_List_AutoVisible :
1040 case MUIA_NList_AutoVisible :
1041 data->NList_AutoVisible = (LONG) tag->ti_Data;
1042 break;
1043 case MUIA_NList_EntryValueDependent :
1044 data->NList_EntryValueDependent = (LONG) tag->ti_Data;
1045 break;
1046 case MUIA_NList_SortType :
1047 data->NList_SortType = (LONG) tag->ti_Data;
1048 /*D(bug("set(%lx,NList_SortType,%lx)\n",obj,tag->ti_Data));*/
1049 break;
1050 case MUIA_NList_SortType2 :
1051 data->NList_SortType2 = (LONG) tag->ti_Data;
1052 /*D(bug("set(%lx,NList_SortType2,%lx)\n",obj,tag->ti_Data));*/
1053 break;
1054 case MUIA_NList_PrivateData :
1055 data->NList_PrivateData = (APTR) tag->ti_Data;
1056 break;
1057 case MUIA_NList_VertDeltaFactor :
1058 data->old_prop_delta = tag->ti_Data;
1059 break;
1060 case MUIA_NList_HorizDeltaFactor :
1061 data->old_horiz_delta = tag->ti_Data;
1062 break;
1063 case MUIA_NList_MinColSortable :
1064 data->NList_MinColSortable = tag->ti_Data;
1065 break;
1066 case MUIA_NList_Imports :
1067 data->NList_Imports = tag->ti_Data;
1068 break;
1069 case MUIA_NList_Exports :
1070 data->NList_Exports = tag->ti_Data;
1071 break;
1072 case MUIA_NList_TitleMark :
1073 if (data->NList_TitleMark != (LONG)tag->ti_Data)
1074 { if (((data->NList_TitleMark & MUIV_NList_TitleMark_TypeMask) == MUIV_NList_TitleMark_None) &&
1075 ((data->NList_TitleMark2 & MUIV_NList_TitleMark2_TypeMask) == MUIV_NList_TitleMark2_None) &&
1076 ((tag->ti_Data & MUIV_NList_TitleMark_TypeMask) != MUIV_NList_TitleMark_None))
1078 LONG column;
1079 for (column = 0;column < data->numcols;column++)
1080 { if (data->cols[column].c->userwidth < 0)
1081 data->cols[column].c->colwidthbiggestptr = -2;
1083 data->do_setcols = TRUE;
1084 /* NL_SetColsAdd(data,-1,TRUE);*/
1085 /* data->do_draw = data->do_draw_all = data->do_parse = data->do_setcols = data->do_updatesb = data->do_wwrap = TRUE;*/
1087 data->NList_TitleMark = tag->ti_Data;
1088 /*D(bug("set(%lx,NList_TitleMark,%lx)\n",obj,tag->ti_Data));*/
1089 data->display_ptr = NULL;
1090 data->do_draw_title = TRUE;
1091 REDRAW_FORCE;
1093 break;
1094 case MUIA_NList_TitleMark2 :
1095 if (data->NList_TitleMark2 != (LONG)tag->ti_Data)
1096 { if (((data->NList_TitleMark & MUIV_NList_TitleMark_TypeMask) == MUIV_NList_TitleMark_None) &&
1097 ((data->NList_TitleMark2 & MUIV_NList_TitleMark2_TypeMask) == MUIV_NList_TitleMark2_None) &&
1098 ((tag->ti_Data & MUIV_NList_TitleMark2_TypeMask) != MUIV_NList_TitleMark2_None))
1100 LONG column;
1101 for (column = 0;column < data->numcols;column++)
1102 { if (data->cols[column].c->userwidth < 0)
1103 data->cols[column].c->colwidthbiggestptr = -2;
1105 data->do_setcols = TRUE;
1106 /* NL_SetColsAdd(data,-1,TRUE);*/
1107 /* data->do_draw = data->do_draw_all = data->do_parse = data->do_setcols = data->do_updatesb = data->do_wwrap = TRUE;*/
1109 data->NList_TitleMark2 = tag->ti_Data;
1110 /*D(bug("set(%lx,NList_TitleMark2,%lx)\n",obj,tag->ti_Data));*/
1111 data->display_ptr = NULL;
1112 data->do_draw_title = TRUE;
1113 REDRAW_FORCE;
1115 break;
1116 case MUIA_NList_Columns :
1117 /*D(bug("set(%lx,MUIA_NList_Columns,%lx)\n",obj,tag->ti_Data));*/
1118 if (do_things)
1119 { NL_Columns(data,(BYTE *) tag->ti_Data);
1120 DONE_NOTIFY(NTF_Columns);
1122 break;
1123 case MUIA_Disabled :
1124 if (tag->ti_Data)
1125 data->NList_Disabled = 1;
1126 else
1127 { if (data->NList_Disabled)
1128 { data->do_draw_all = data->do_draw_title = data->do_draw = TRUE;
1130 data->NList_Disabled = FALSE;
1132 /*D(bug("%lx|Disabled=%ld\n",obj,data->NList_Disabled));*/
1133 break;
1134 case MUIA_Font :
1135 if (do_things)
1136 data->NList_Font = tag->ti_Data;
1137 break;
1139 case MUIA_NList_KeyUpFocus:
1140 data->NList_KeyUpFocus = (Object *)tag->ti_Data;
1141 break;
1143 case MUIA_NList_KeyDownFocus:
1144 data->NList_KeyDownFocus = (Object *)tag->ti_Data;
1145 break;
1147 case MUIA_NList_KeyLeftFocus:
1148 data->NList_KeyLeftFocus = (Object *)tag->ti_Data;
1149 break;
1151 case MUIA_NList_KeyRightFocus:
1152 data->NList_KeyRightFocus = (Object *)tag->ti_Data;
1153 break;
1155 case MUIA_NList_IgnoreSpecialChars:
1156 data->NList_IgnoreSpecialChars = (char *)tag->ti_Data;
1157 break;
1160 * case 0x8042AC64 :
1161 * case 0x8042BE50 :
1162 * case 0x8042B704 :
1163 * case 0x804237F9 :
1164 * case 0x8042C53E :
1165 * case MUIA_FillArea :
1166 * break;
1168 * case TAG_IGNORE :
1169 * D(bug("NL: Set(TAG_IGNORE,0x%lx) \n",(long) tag->ti_Data));
1170 * break;
1171 * default:
1172 * D(bug("%lx|NL: Set(0x%lx,0x%lx) ??? \n",obj,(long) tag->ti_Tag,(long) tag->ti_Data));
1176 retval = DoSuperMethodA(cl,obj,msg);
1178 /* do_notifies(NTF_AllChanges|NTF_MinMax);*/
1179 return (retval);
1182 //$$$Sensei: major cleanup: return value variable wasn't needed. The same as store. It just takes stack space.
1183 // Some NList attributes (namely MUIA_NList_DragColOnly) wasn't returning TRUE after
1184 // getting so DoSuperMethodA() was called on them, result probably was undefined!
1185 // (It depends on what superclass do in OM_GET, if it clear storage data for undefined
1186 // attributes, it could cause problems...
1187 // Fixed msg type to correct one.
1188 IPTR mNL_Get(struct IClass *cl,Object *obj,struct opGet *msg)
1190 struct NLData *data = INST_DATA( cl, obj );
1192 switch (((struct opGet *)msg)->opg_AttrID)
1194 case MUIA_Listview_SelectChange:
1195 case MUIA_NList_SelectChange:
1196 case MUIA_Listview_DoubleClick: *msg->opg_Storage = (ULONG) TRUE; return( TRUE );
1197 case MUIA_NList_DoubleClick: *msg->opg_Storage = (ULONG) data->click_line; return( TRUE );
1198 case MUIA_NList_MultiClick: *msg->opg_Storage = (ULONG) data->multiclick + 1; return( TRUE );
1199 case MUIA_NList_MultiClickAlone: *msg->opg_Storage = (ULONG) abs( data->multiclickalone ); return( TRUE );
1200 case MUIA_NList_EntryClick: *msg->opg_Storage = (ULONG) data->click_line; return( TRUE );
1201 case MUIA_List_InsertPosition:
1202 case MUIA_NList_InsertPosition:
1203 case MUIA_NList_DragSortInsert: *msg->opg_Storage = (ULONG) data->NList_LastInserted; return( TRUE );
1204 case MUIA_List_First:
1205 case MUIA_NList_First: *msg->opg_Storage = (ULONG) data->NList_First; return( TRUE );
1206 case MUIA_List_Visible:
1207 case MUIA_NList_Visible: *msg->opg_Storage = (ULONG) ( data->SHOW ? data->NList_Visible : -1 ); return( TRUE );
1208 case MUIA_List_Entries:
1209 case MUIA_NList_Entries: *msg->opg_Storage = (ULONG) data->NList_Entries; return( TRUE );
1210 case MUIA_List_Active:
1211 case MUIA_NList_Active: *msg->opg_Storage = (ULONG) data->NList_Active; return( TRUE );
1212 case MUIA_NList_Horiz_First: *msg->opg_Storage = (ULONG) data->NList_Horiz_First; return( TRUE );
1213 case MUIA_NList_Horiz_Visible: *msg->opg_Storage = (ULONG) data->NList_Horiz_Visible; return( TRUE );
1214 case MUIA_NList_Horiz_Entries: *msg->opg_Storage = (ULONG) data->NList_Horiz_Entries; return( TRUE );
1215 case MUIA_NList_Prop_First:
1216 case MUIA_List_Prop_First: *msg->opg_Storage = (ULONG) data->NList_Prop_First; return( TRUE );
1217 case MUIA_NList_Prop_Visible:
1218 case MUIA_List_Prop_Visible: *msg->opg_Storage = (ULONG) data->NList_Prop_Visible; return( TRUE );
1219 case MUIA_NList_Prop_Entries:
1220 case MUIA_List_Prop_Entries: *msg->opg_Storage = (ULONG) data->NList_Prop_Entries; return( TRUE );
1221 case MUIA_NList_VertDeltaFactor: *msg->opg_Storage = (ULONG) data->vinc; return( TRUE );
1222 case MUIA_NList_HorizDeltaFactor: *msg->opg_Storage = (ULONG) data->hinc; return( TRUE );
1223 case MUIA_NListview_Horiz_ScrollBar: *msg->opg_Storage = (ULONG) 0; return( TRUE );
1224 case MUIA_NListview_Vert_ScrollBar: *msg->opg_Storage = (ULONG) 0; return( TRUE );
1225 case MUIA_NList_TitlePen: *msg->opg_Storage = (ULONG) data->NList_TitlePen; return( TRUE );
1226 case MUIA_NList_ListPen: *msg->opg_Storage = (ULONG) data->NList_ListPen; return( TRUE );
1227 case MUIA_NList_SelectPen: *msg->opg_Storage = (ULONG) data->NList_SelectPen; return( TRUE );
1228 case MUIA_NList_CursorPen: *msg->opg_Storage = (ULONG) data->NList_CursorPen; return( TRUE );
1229 case MUIA_NList_UnselCurPen: *msg->opg_Storage = (ULONG) data->NList_UnselCurPen; return( TRUE );
1230 case MUIA_NList_InactivePen: *msg->opg_Storage = (ULONG) data->NList_InactivePen; return( TRUE );
1231 case MUIA_NList_TitleBackground: *msg->opg_Storage = (ULONG) data->NList_TitleBackGround; return( TRUE );
1232 case MUIA_NList_ListBackground: *msg->opg_Storage = (ULONG) data->NList_ListBackGround; return( TRUE );
1233 case MUIA_NList_SelectBackground: *msg->opg_Storage = (ULONG) data->NList_SelectBackground; return( TRUE );
1234 case MUIA_NList_CursorBackground: *msg->opg_Storage = (ULONG) data->NList_CursorBackground; return( TRUE );
1235 case MUIA_NList_UnselCurBackground: *msg->opg_Storage = (ULONG) data->NList_UnselCurBackground; return( TRUE );
1236 case MUIA_NList_InactiveBackground: *msg->opg_Storage = (ULONG) data->NList_InactiveBackground; return( TRUE );
1237 case MUIA_Listview_Input:
1238 case MUIA_NList_Input: *msg->opg_Storage = (ULONG) data->NList_Input; return( TRUE );
1239 case MUIA_List_Format:
1240 case MUIA_NList_Format: *msg->opg_Storage = (IPTR) data->NList_Format; return( TRUE );
1241 case MUIA_List_Title:
1242 case MUIA_NList_Title: *msg->opg_Storage = (IPTR) data->NList_Title; return( TRUE );
1243 case MUIA_NList_TitleSeparator: *msg->opg_Storage = (ULONG) data->NList_TitleSeparator; return( TRUE );
1244 case MUIA_List_DragSortable:
1245 case MUIA_NList_DragSortable: *msg->opg_Storage = (ULONG) data->NList_DragSortable; return( TRUE );
1246 case MUIA_Listview_DragType:
1247 case MUIA_NList_DragType: *msg->opg_Storage = (ULONG) data->NList_DragType; return( TRUE );
1248 case MUIA_NList_DragColOnly: *msg->opg_Storage = (ULONG) data->NList_DragColOnly; return( TRUE );
1249 case MUIA_List_ShowDropMarks:
1250 case MUIA_NList_ShowDropMarks: *msg->opg_Storage = (ULONG) data->NList_ShowDropMarks; return( TRUE );
1251 case MUIA_List_DropMark:
1252 case MUIA_NList_DropMark:
1253 if ((data->marktype & MUIV_NList_DropType_Mask) == MUIV_NList_DropType_Below)
1254 *msg->opg_Storage = (LONG) data->NList_DropMark + 1;
1255 else
1256 *msg->opg_Storage = (LONG) data->NList_DropMark;
1257 return( TRUE );
1258 case MUIA_NList_DropType:
1259 if ((data->marktype & MUIV_NList_DropType_Mask) == MUIV_NList_DropType_Below)
1260 *msg->opg_Storage = (LONG) (data->marktype & ~MUIV_NList_DropType_Mask) | MUIV_NList_DropType_Above;
1261 else
1262 *msg->opg_Storage = (LONG) data->marktype;
1263 return( TRUE );
1264 case MUIA_Listview_DefClickColumn:
1265 case MUIA_NList_DefClickColumn: *msg->opg_Storage = (ULONG) data->NList_DefClickColumn; return( TRUE );
1266 case MUIA_Listview_ClickColumn:
1267 case MUIA_NList_ClickColumn:
1268 { struct MUI_NList_TestPos_Result res;
1269 res.char_number = -2;
1270 NL_List_TestPos(data,MUI_MAXMAX,MUI_MAXMAX,&res);
1271 *msg->opg_Storage = (LONG) res.column;
1273 return( TRUE );
1274 case MUIA_NList_TitleClick: *msg->opg_Storage = (ULONG) data->TitleClick; return( TRUE );
1275 case MUIA_NList_TitleClick2: *msg->opg_Storage = (ULONG) data->TitleClick2; return( TRUE );
1276 case MUIA_NList_ForcePen: *msg->opg_Storage = (ULONG) data->ForcePen; return( TRUE );
1277 case MUIA_List_AutoVisible:
1278 case MUIA_NList_AutoVisible: *msg->opg_Storage = (ULONG) data->NList_AutoVisible; return( TRUE );
1279 case MUIA_NList_TabSize: *msg->opg_Storage = (ULONG) data->NList_TabSize; return( TRUE );
1280 case MUIA_NList_SkipChars: *msg->opg_Storage = (IPTR) data->NList_SkipChars; return( TRUE );
1281 case MUIA_NList_WordSelectChars: *msg->opg_Storage = (IPTR) data->NList_WordSelectChars; return( TRUE );
1282 case MUIA_NList_EntryValueDependent: *msg->opg_Storage = (ULONG) data->NList_EntryValueDependent; return( TRUE );
1283 case MUIA_NList_SortType: *msg->opg_Storage = (ULONG) data->NList_SortType; return( TRUE );
1284 case MUIA_NList_SortType2: *msg->opg_Storage = (ULONG) data->NList_SortType2; return( TRUE );
1285 case MUIA_NList_ButtonClick: *msg->opg_Storage = (ULONG) data->NList_ButtonClick; return( TRUE );
1286 case MUIA_NList_MinColSortable: *msg->opg_Storage = (ULONG) data->NList_MinColSortable; return( TRUE );
1287 case MUIA_NList_Columns: *msg->opg_Storage = (IPTR) NL_Columns(data,NULL); return( TRUE );
1288 case MUIA_NList_Imports: *msg->opg_Storage = (ULONG) data->NList_Imports; return( TRUE );
1289 case MUIA_NList_Exports: *msg->opg_Storage = (ULONG) data->NList_Exports; return( TRUE );
1290 case MUIA_NList_TitleMark: *msg->opg_Storage = (ULONG) data->NList_TitleMark; return( TRUE );
1291 case MUIA_NList_TitleMark2: *msg->opg_Storage = (ULONG) data->NList_TitleMark2; return( TRUE );
1292 case MUIA_NList_AutoClip: *msg->opg_Storage = (ULONG) data->NList_AutoClip; return(TRUE);
1293 case MUIA_NList_PrivateData: *msg->opg_Storage = (IPTR) data->NList_PrivateData; return(TRUE);
1295 case MUIA_NList_IgnoreSpecialChars: *msg->opg_Storage = (IPTR)data->NList_IgnoreSpecialChars; return(TRUE);
1297 case MUIA_NList_DefaultObjectOnClick: *msg->opg_Storage = (IPTR)data->NList_DefaultObjectOnClick; return(TRUE);
1298 case MUIA_NList_ActiveObjectOnClick: *msg->opg_Storage = (IPTR)data->NList_ActiveObjectOnClick; return(TRUE);
1300 case MUIA_NList_KeyUpFocus: *msg->opg_Storage = (IPTR)data->NList_KeyUpFocus; return(TRUE);
1301 case MUIA_NList_KeyDownFocus: *msg->opg_Storage = (IPTR)data->NList_KeyDownFocus; return(TRUE);
1302 case MUIA_NList_KeyLeftFocus: *msg->opg_Storage = (IPTR)data->NList_KeyLeftFocus; return(TRUE);
1303 case MUIA_NList_KeyRightFocus: *msg->opg_Storage = (IPTR)data->NList_KeyRightFocus; return(TRUE);
1305 case MUIA_Version: *msg->opg_Storage = (ULONG) LIB_VERSION; return(TRUE);
1306 case MUIA_Revision: *msg->opg_Storage = (ULONG) LIB_REVISION; return(TRUE);
1308 // Asking the superclass always yields MUIA_Disabled==FALSE even for really disabled lists.
1309 // Hence we return our own internal value, because NList intercepts MUIA_Disabled during
1310 // set() already.
1311 case MUIA_Disabled: *msg->opg_Storage = data->NList_Disabled ? TRUE : FALSE; return(TRUE);
1313 default:
1314 return(DoSuperMethodA(cl, obj, (Msg)msg));
1318 /* Cut-n-pasted from bottom of function.
1319 LONG *store = ((struct opGet *)msg)->opg_Storage;
1320 ULONG retval;
1321 LONG affit = TRUE;
1322 case MUIA_NList_MultiClickAlone:
1323 if (data->multiclickalone < 0)
1324 *store = -data->multiclickalone;
1325 else
1326 *store = data->multiclickalone;
1327 return( TRUE );
1328 retval = DoSuperMethodA(cl,obj,msg);
1331 * if (affit)
1333 * if (retval)
1334 * D(bug("NL: Get(0x%lx)=0x%lx \n",(long) ((struct opGet *)msg)->opg_AttrID, (long) *store));
1335 * else
1336 * D(bug("NL: Get(0x%lx)=???? \n",(long) ((struct opGet *)msg)->opg_AttrID));
1339 return(retval);
1342 return(0);