Merging NList MCC 0.119 into the main branch.
[AROS.git] / workbench / classes / zune / nlist / nlist_mcc / private.h
blobdaa6d34dfa9474cbd2216361632de8ba4b2cb5e5
1 #ifndef MUI_NList_priv_MCC_H
2 #define MUI_NList_priv_MCC_H
4 /***************************************************************************
6 NList.mcc - New List MUI Custom Class
7 Registered MUI class, Serial Number: 1d51 0x9d510030 to 0x9d5100A0
8 0x9d5100C0 to 0x9d5100FF
10 Copyright (C) 1996-2001 by Gilles Masson
11 Copyright (C) 2001-2014 NList Open Source Team
13 This library is free software; you can redistribute it and/or
14 modify it under the terms of the GNU Lesser General Public
15 License as published by the Free Software Foundation; either
16 version 2.1 of the License, or (at your option) any later version.
18 This library is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 Lesser General Public License for more details.
23 NList classes Support Site: http://www.sf.net/projects/nlist-classes
25 $Id$
27 ***************************************************************************/
29 #include <libraries/mui.h>
31 #include <mui/NList_mcc.h>
33 #include "Debug.h"
34 #include "Pointer.h"
35 #include "mcc_common.h"
36 #include "muiextra.h"
38 #ifndef LONG_MAX
39 #define LONG_MAX 0x7fffffff /* max value for a long */
40 #endif
41 #ifndef LONG_MIN
42 #define LONG_MIN 0x80000000 /* min value for a long */
43 #endif
44 #ifndef ULONG_MAX
45 #define ULONG_MAX 0xffffffffU /* max value for an unsigned long */
46 #endif
48 #define MUIM_NList_Trigger 0x9d510090 /* GM */
50 #ifndef MUIA_Prop_DoSmooth
51 #define MUIA_Prop_DoSmooth 0x804236ce /* V4 i.. LONG */
52 #endif
54 #define MUIV_NList_CursorType_None 0
55 #define MUIV_NList_CursorType_Bar 1
56 #define MUIV_NList_CursorType_Rect 2
59 #define MUIV_NList_TypeSelect_Line 0
60 #define MUIV_NList_TypeSelect_Char 1
62 #define MUIV_NList_TypeSelect_CWord 2
63 #define MUIV_NList_TypeSelect_CLine 3
64 #define MUIV_NList_TypeSelect_None 4
66 #define MUIV_NList_Active_UntilPageUp -8
67 #define MUIV_NList_Active_UntilPageDown -9
68 #define MUIV_NList_Active_UntilTop -10
69 #define MUIV_NList_Active_UntilBottom -11
73 #define IEQUALIFIER_SHIFT (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT)
74 #define IEQUALIFIER_ALT (IEQUALIFIER_LALT|IEQUALIFIER_RALT)
75 #define IEQUALIFIER_COMMAND (IEQUALIFIER_LCOMMAND|IEQUALIFIER_RCOMMAND)
76 #define IEQUALIFIER_CTRL_SHIFT (IEQUALIFIER_CONTROL|IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT)
77 #define IEQUALIFIER_CTRL_LSHIFT (IEQUALIFIER_CONTROL|IEQUALIFIER_LSHIFT)
78 #define IEQUALIFIER_CTRL_RSHIFT (IEQUALIFIER_CONTROL|IEQUALIFIER_RSHIFT)
79 #define IEQUALIFIER_CTRL_ALT (IEQUALIFIER_CONTROL|IEQUALIFIER_LALT|IEQUALIFIER_RALT)
80 #define IEQUALIFIER_CTRL_LALT (IEQUALIFIER_CONTROL|IEQUALIFIER_LALT)
81 #define IEQUALIFIER_CTRL_RALT (IEQUALIFIER_CONTROL|IEQUALIFIER_RALT)
83 #define IEQUALIFIER_MASK (IEQUALIFIER_CONTROL|IEQUALIFIER_SHIFT|IEQUALIFIER_ALT|IEQUALIFIER_COMMAND)
85 #ifndef RAWKEY_PAGEUP
86 #define RAWKEY_PAGEUP 0x48
87 #endif
88 #ifndef RAWKEY_PAGEDOWN
89 #define RAWKEY_PAGEDOWN 0x49
90 #endif
91 #ifndef RAWKEY_HOME
92 #define RAWKEY_HOME 0x70
93 #endif
94 #ifndef RAWKEY_END
95 #define RAWKEY_END 0x71
96 #endif
98 #define SCROLLBARSTIME 10
100 #define DATA_STRING_MAX 120
102 #define CI_PERCENT 0
103 #define CI_COL 1
104 #define CI_PIX 2
106 // defines for the different particalcol substitution types
107 #define PCS_DISABLED 0
108 #define PCS_RIGHT 1
109 #define PCS_LEFT 2
110 #define PCS_CENTER 3
112 struct colinfo
114 struct colinfo *c;
116 char *preparse;
117 SIPTR colwidthbiggestptr;
118 SIPTR colwidthbiggestptr2;
119 WORD colwidthbiggest;
120 WORD colwidthbiggest2;
121 WORD minx;
122 WORD maxx;
123 WORD dx;
125 WORD style;
126 WORD xoffset;
127 WORD colwidth;
128 WORD ninfo;
130 WORD colwidthmax;
132 WORD userwidth;
133 WORD titlebutton;
135 WORD delta;
136 WORD col;
137 WORD width;
138 WORD minwidth;
139 WORD maxwidth;
140 WORD mincolwidth;
141 WORD maxcolwidth;
142 WORD minpixwidth;
143 WORD maxpixwidth;
144 BYTE bar;
145 BYTE width_type;
146 WORD partcolsubst;
150 #define AFFINFOS_START_MAX 40
152 struct affinfo
154 char *strptr;
155 ULONG tag,tagval,button,imgnum; // RHP: Changed for Special ShortHelp
156 IPTR pen;
157 WORD pos;
158 WORD len;
159 WORD style;
160 UBYTE addchar;
161 UBYTE addinfo;
165 /* Select values */
166 #define TE_Select_None -1
167 #define TE_Select_Line -2
169 /* Wrap values */
170 #define TE_Wrap_None 0
171 #define TE_Wrap_TmpLine 0x80
172 #define TE_Wrap_TmpMask 0x7F
174 #include "amiga-align.h"
176 /* The Type entry is exported to NListtree (sigh), so this have to be amiga
177 * aligned */
179 struct TypeEntry {
180 APTR Entry;
181 BYTE Select;
182 UBYTE Wrap;
183 WORD PixLen;
184 WORD pos;
185 WORD len;
186 WORD style;
187 UWORD dnum;
188 ULONG entpos;
191 #include "default-align.h"
193 struct UseImage {
194 Object *imgobj;
195 struct BitMapImage *bmimg;
196 ULONG flags;
201 #define MUIV_NList_Select_None -10
202 #define MUIV_NList_Select_List -11
204 struct SelPoint {
205 LONG ent;
206 WORD xoffset;
207 WORD column;
208 WORD colxoffset;
209 WORD colpos;
212 #define PREPARSE_OFFSET_COL 2000
213 #define PREPARSE_OFFSET_ENTRY 1000
216 struct NImgList
217 { struct NImgList *next;
218 APTR NImgObj;
219 WORD width,height;
220 WORD dx,dy;
221 char *ImgName;
224 #define MAXRAWBUF 40
226 struct NLData
228 Object *this; // pointer to the own object
229 Object *nlistviewobj; // pointer to the parent/listview
230 Object *listviewobj; // pointer to the parent/listview if listview is Listview.mui
231 Object *scrollersobj; // pointer to the scrollers object
233 LONG SETUP;
234 LONG SHOW;
236 LONG pad1;
237 LONG pad2;
238 struct MUI_InputHandlerNode ihnode;
239 LONG pad3;
240 LONG pad4;
242 LONG pad5;
243 LONG pad6;
244 struct MUI_EventHandlerNode ehnode;
245 LONG Seconds;
246 LONG Micros;
248 LONG DRAW;
250 char *NList_Format;
251 char *NList_SkipChars;
252 char *NList_WordSelectChars;
253 char *NList_Title;
254 const char *NList_IgnoreSpecialChars;
255 LONG NList_TitleSeparator;
256 LONG NList_TitleMark;
257 LONG NList_TitleMark2;
258 LONG NList_LastInserted;
259 ULONG NList_Quiet;
260 LONG NList_AffActive;
261 LONG NList_Active;
262 LONG NList_Smooth;
263 LONG NList_AffFirst;
264 LONG NList_AffFirst_Incr;
265 LONG NList_First;
266 LONG NList_First_Incr;
267 LONG NList_Visible;
268 LONG NList_Entries;
269 LONG NList_Prop_First;
270 LONG NList_Prop_First_Real;
271 LONG NList_Prop_First_Prec;
272 LONG NList_Prop_Add;
273 LONG NList_Prop_Wait;
274 LONG NList_Prop_Visible;
275 LONG NList_Prop_Entries;
276 LONG NList_Horiz_AffFirst;
277 LONG NList_Horiz_First;
278 LONG NList_Horiz_Visible;
279 LONG NList_Horiz_Entries;
280 LONG NList_MultiSelect;
281 BOOL NList_DefaultObjectOnClick;
282 BOOL NList_ActiveObjectOnClick;
283 LONG NList_MinLineHeight;
284 LONG NList_Input;
285 LONG NList_TypeSelect;
286 LONG NList_SelectChange;
287 IPTR NList_TitlePen;
288 IPTR NList_ListPen;
289 IPTR NList_SelectPen;
290 IPTR NList_CursorPen;
291 IPTR NList_UnselCurPen;
292 IPTR NList_InactivePen;
293 IPTR NList_TitleBackGround;
294 IPTR NList_ListBackGround;
295 IPTR NList_SelectBackground;
296 IPTR NList_CursorBackground;
297 IPTR NList_UnselCurBackground;
298 IPTR NList_InactiveBackground;
299 LONG NList_DragType;
300 LONG NList_Dropable;
301 LONG NList_DragColOnly;
302 LONG NList_DragSortable;
303 LONG NList_DropMark;
304 LONG NList_ShowDropMarks;
305 LONG NList_ColWidthDrag;
306 LONG NList_AdjustHeight;
307 LONG NList_AdjustWidth;
308 LONG NList_SourceArray;
309 IPTR NList_KeepActive;
310 IPTR NList_MakeActive;
311 LONG NList_DefClickColumn;
312 LONG NList_AutoCopyToClip;
313 LONG NList_AutoVisible;
314 LONG NList_TabSize;
315 LONG NList_EntryValueDependent;
316 APTR NList_PrivateData;
317 LONG NList_ForcePen;
318 LONG NList_PartialCol;
319 LONG NList_List_Select;
320 LONG NList_PartialChar;
321 LONG NList_ContextMenu;
322 LONG NList_SortType;
323 LONG NList_SortType2;
324 LONG NList_ButtonClick;
325 LONG NList_MinColSortable;
326 LONG NList_Imports;
327 LONG NList_Exports;
328 LONG NList_Disabled;
329 LONG NList_SerMouseFix;
330 LONG NList_DragLines;
331 LONG NList_WheelStep;
332 LONG NList_WheelFast;
333 LONG NList_WheelMMB;
334 LONG NList_VerticalCenteredText;
335 BOOL NList_AutoClip;
336 BOOL NList_SelectPointer;
338 // object pointers for forwarding the
339 // key focus to other objects.
340 Object *NList_KeyUpFocus;
341 Object *NList_KeyDownFocus;
342 Object *NList_KeyLeftFocus;
343 Object *NList_KeyRightFocus;
345 STRPTR NList_ShortHelp;
347 LONG ListCompatibility;
348 struct KeyBinding *NList_Keys;
349 struct KeyBinding *Wheel_Keys;
350 UBYTE *NList_Columns;
351 ULONG HLINE_thick_pen;
352 LONG ContextMenu;
353 LONG ContextMenuOn;
354 struct TypeEntry **EntriesArray;
355 struct Hook *NList_CompareHook;
356 struct Hook *NList_ConstructHook;
357 struct Hook *NList_DestructHook;
358 struct Hook *NList_DisplayHook;
359 struct Hook *NList_MultiTestHook;
360 struct Hook *NList_CopyEntryToClipHook;
361 struct Hook *NList_CopyColumnToClipHook;
362 LONG NList_CompareHook2;
363 LONG NList_ConstructHook2;
364 LONG NList_DestructHook2;
365 LONG NList_DisplayHook2;
366 LONG NList_CopyEntryToClipHook2;
367 LONG NList_CopyColumnToClipHook2;
368 APTR Pool; /* Custom or internal pool pointer. */
369 APTR PoolInternal; /* Internal pool pointer. */
370 APTR EntryPool;
371 IPTR NList_Font;
372 LONG MOUSE_MOVE;
374 struct IClass *ncl;
375 struct IClass *ocl;
377 APTR VertPropObject;
378 Object *NL_Group;
379 Object *VirtGroup;
380 Object *VirtGroup2;
381 struct IClass *VirtClass;
382 Object *MenuObj;
384 // for our own mouse pointer management
385 Object *SizePointerObj;
386 Object *MovePointerObj;
387 Object *SelectPointerObj;
388 enum PointerType activeCustomPointer;
390 struct TextFont *InUseFont;
392 struct NImgList *NImage2;
393 struct NImgList NImage;
395 struct UseImage *NList_UseImages;
396 LONG LastImage;
398 APTR dispentry; char *DisplayArray[DISPLAY_ARRAY_MAX*2 +2];
399 LONG LastEntry;
401 LONG ForcePen;
403 LONG lvisible;
404 LONG hvisible;
405 LONG ScrollBarsPos;
406 LONG ScrollBars;
407 LONG ScrollBarsOld;
408 LONG ScrollBarsTime;
410 LONG Notify;
411 LONG DoNotify;
412 LONG Notifying;
414 LONG TitleClick;
415 LONG TitleClick2;
417 BOOL isActiveObject; // TRUE in case object is active object of window
419 LONG MinImageHeight;
421 LONG pushtrigger;
422 LONG parse_column;
423 LONG parse_ent;
424 char *display_ptr;
425 LONG drag_type;
426 LONG drag_border;
427 LONG drag_qualifier;
428 LONG moves;
429 LONG multiselect;
430 LONG multisel_qualifier;
431 LONG multiclick;
432 LONG multiclickalone;
433 LONG sorted;
434 LONG selectmode;
435 LONG lastselected;
436 LONG lastactived;
437 LONG selectskiped;
438 LONG first_change;
439 LONG last_change;
440 LONG minx_change_offset;
441 LONG minx_change_entry;
442 LONG maxx_change_offset;
443 LONG maxx_change_entry;
444 LONG adding_member;
445 LONG markdraw;
446 LONG markerase;
447 LONG marktype;
448 LONG markdrawnum;
449 LONG markerasenum;
450 LONG actbackground;
451 LONG NumIntuiTick;
452 struct RastPort *DragRPort;
453 char *DragText;
454 LONG DragEntry;
455 LONG DragWidth;
456 LONG DragHeight;
458 IPTR Pen_Title_init;
459 IPTR Pen_List_init;
460 IPTR Pen_Select_init;
461 IPTR Pen_Cursor_init;
462 IPTR Pen_UnselCur_init;
463 IPTR Pen_Inactive_init;
464 IPTR BG_Title_init;
465 IPTR BG_List_init;
466 IPTR BG_Select_init;
467 IPTR BG_Cursor_init;
468 IPTR BG_UnselCur_init;
469 IPTR BG_Inactive_init;
471 LONG old_prop_first;
472 LONG old_prop_visible;
473 LONG old_prop_entries;
474 LONG old_prop_delta;
475 LONG old_horiz_first;
476 LONG old_horiz_visible;
477 LONG old_horiz_entries;
478 LONG old_horiz_delta;
479 APTR drawsuper;
481 struct RastPort *rp;
482 struct TextFont *font;
483 UWORD *pens;
485 ULONG secs, micros;
486 LONG mouse_x;
487 LONG mouse_y;
488 LONG click_line;
489 LONG click_x;
490 LONG click_y;
492 WORD min_sel;
493 WORD max_sel;
494 struct SelPoint sel_pt[4];
495 LONG last_sel_click_x;
496 LONG last_sel_click_y;
498 LONG affover; // RHP: Added for Special Shorthelp
499 LONG affimage; // RHP: Added for Special Shorthelp
500 LONG storebutton;
501 LONG affbutton;
502 LONG affbuttonline;
503 LONG affbuttoncol;
504 LONG affbuttonstate;
505 struct IBox affbuttonpos;
507 struct affinfo *aff_infos;
508 struct colinfo *cols;
510 WORD numaff_infos;
511 WORD numcols;
512 WORD numcols2;
514 WORD format_chge;
515 WORD do_draw_all;
516 WORD do_draw_title;
517 WORD do_draw_active;
518 WORD do_draw;
519 WORD do_parse;
520 WORD do_images;
521 WORD do_setcols;
522 WORD do_updatesb;
523 WORD do_wwrap;
524 WORD force_wwrap;
525 WORD nodraw;
526 WORD dropping;
527 WORD refreshing;
528 WORD UpdateScrollersRedrawn;
529 WORD UpdatingScrollbars;
531 WORD adjustcolumn;
532 WORD adjustbar;
533 WORD adjustbar2;
534 WORD adjustbar_old;
535 WORD adjustbar_last;
536 WORD adjustbar_last2;
538 WORD tabsize;
539 WORD spacesize;
540 WORD Title_PixLen;
541 WORD badrport;
543 WORD mleft;
544 WORD mright;
545 WORD mtop;
546 WORD mbottom;
547 WORD mwidth;
548 WORD mheight;
550 WORD vdx;
551 WORD vdy;
552 WORD vleft;
553 WORD vright;
554 WORD vtop;
555 WORD vbottom;
556 WORD vwidth;
557 WORD vheight;
559 WORD drawall_bits;
560 WORD drawall_dobit;
562 WORD vpos;
563 WORD voff;
564 WORD vinc;
565 WORD addvinc;
566 WORD hpos;
567 WORD hinc;
568 WORD vdtitlepos;
569 WORD vdtitleheight;
570 WORD vdtpos;
571 WORD vdt;
572 WORD vdbpos;
573 WORD vdb;
575 WORD firstselect;
577 WORD left;
578 WORD top;
579 WORD width;
580 WORD height;
582 BYTE column[DISPLAY_ARRAY_MAX+2];
584 char imagebuf[64+4];
586 struct InputEvent ievent;
587 char rawtext[MAXRAWBUF];
589 char NList_TitlePenBuffer[128];
590 char NList_ListPenBuffer[128];
591 char NList_SelectPenBuffer[128];
592 char NList_CursorPenBuffer[128];
593 char NList_UnselCurPenBuffer[128];
594 char NList_InactivePenBuffer[128];
595 char NList_TitleBackGroundBuffer[128];
596 char NList_ListBackGroundBuffer[128];
597 char NList_SelectBackgroundBuffer[128];
598 char NList_CursorBackgroundBuffer[128];
599 char NList_UnselCurBackgroundBuffer[128];
600 char NList_InactiveBackgroundBuffer[128];
604 #define MUII_myListInactive (data->NList_InactiveBackground)
605 #define MUII_myListUnselCur (data->NList_UnselCurBackground)
606 #define MUII_myListCursor (data->NList_CursorBackground)
607 #define MUII_myListSelCur (data->NList_CursorBackground)
608 #define MUII_myListSelect (data->NList_SelectBackground)
612 extern struct TextFont *Topaz_8;
615 #define LIBVER(lib) ((struct Library *)lib)->lib_Version
618 #ifndef NO_PROTOS
619 #include "protos.h"
620 #endif
622 #define MUIV_NList_PoolPuddleSize_Default 2048
623 #define MUIV_NList_PoolThreshSize_Default 1024
625 /// xget()
626 // Gets an attribute value from a MUI object
627 IPTR xget(Object *obj, const IPTR attr);
628 #if defined(__GNUC__)
629 // please note that we do not evaluate the return value of GetAttr()
630 // as some attributes (e.g. MUIA_Selected) always return FALSE, even
631 // when they are supported by the object. But setting b=0 right before
632 // the GetAttr() should catch the case when attr doesn't exist at all
633 #define xget(OBJ, ATTR) ({IPTR b=0; GetAttr(ATTR, OBJ, &b); b;})
634 #endif
637 #ifndef MIN
638 #define MIN(a,b) (((a) < (b)) ? (a) : (b))
639 #endif
640 #ifndef MAX
641 #define MAX(a,b) (((a) > (b)) ? (a) : (b))
642 #endif
644 // special flagging macros
645 #define isFlagSet(v,f) (((v) & (f)) == (f)) // return TRUE if the flag is set
646 #define hasFlag(v,f) (((v) & (f)) != 0) // return TRUE if one of the flags in f is set in v
647 #define isFlagClear(v,f) (((v) & (f)) == 0) // return TRUE if flag f is not set in v
648 #define SET_FLAG(v,f) ((v) |= (f)) // set the flag f in v
649 #define CLEAR_FLAG(v,f) ((v) &= ~(f)) // clear the flag f in v
650 #define MASK_FLAG(v,f) ((v) &= (f)) // mask the variable v with flag f bitwise
652 #define VERSION_IS_AT_LEAST(ver, rev, minver, minrev) (((ver) > (minver)) || ((ver) == (minver) && (rev) == (minrev)) || ((ver) == (minver) && (rev) > (minrev)))
653 #define LIB_VERSION_IS_AT_LEAST(lib, minver, minrev) VERSION_IS_AT_LEAST(((struct Library *)(lib))->lib_Version, ((struct Library *)(lib))->lib_Revision, minver, minrev)
655 #if defined(__amigaos4__)
656 #define AllocVecShared(size, flags) AllocVecTags((size), AVT_Type, MEMF_SHARED, AVT_Lock, FALSE, ((flags)&MEMF_CLEAR) ? AVT_ClearWithValue : TAG_IGNORE, 0, TAG_DONE)
657 #else
658 #define AllocVecShared(size, flags) AllocVec((size), (flags))
659 #endif
661 #endif /* MUI_NList_priv_MCC_H */