Moving to main tree, needed by SysExplorer
[AROS.git] / workbench / classes / zune / nlist / nlistviews_mcp / NListviews.c
blobb175609151077770335258e838da3bb5655d4d2d
1 /***************************************************************************
3 NListviews.mcp - New Listview MUI Custom Class Preferences
4 Registered MUI class, Serial Number: 1d51 (0x9d510001 to 0x9d51001F
5 and 0x9d510101 to 0x9d51013F)
7 Copyright (C) 1996-2001 by Gilles Masson
8 Copyright (C) 2001-2007 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 <string.h>
27 #include <stdlib.h>
29 #include <devices/inputevent.h>
30 #include <libraries/asl.h>
31 #include <libraries/locale.h>
32 #include <libraries/commodities.h>
33 #include <mui/HotkeyString_mcc.h>
35 #include <clib/alib_protos.h>
36 #include <proto/commodities.h>
37 #include <proto/muimaster.h>
38 #include <proto/intuition.h>
39 #include <proto/console.h>
40 #include <proto/locale.h>
41 #include <proto/exec.h>
43 #include "private.h"
44 #include "version.h"
46 #include "locale.h"
48 #include "muiextra.h"
50 #define INTUIBASEMIN 39
53 #define SimpleButtonCycle(name,helpstring) \
54 (void *)TextObject, \
55 ButtonFrame, \
56 MUIA_CycleChain, 1, \
57 MUIA_Font, MUIV_Font_Button, \
58 MUIA_Text_Contents, name, \
59 MUIA_Text_PreParse, "\33c", \
60 MUIA_InputMode , MUIV_InputMode_RelVerify, \
61 MUIA_Background , MUII_ButtonBack, \
62 MUIA_ShortHelp, helpstring, \
63 End
66 #define ToggleButtonCycle(name,selected,disable,helpstring) \
67 (void *)TextObject, \
68 ButtonFrame, \
69 MUIA_CycleChain, 1, \
70 MUIA_Font, MUIV_Font_Button, \
71 MUIA_Text_Contents, name, \
72 MUIA_Text_PreParse, "\33c", \
73 MUIA_Text_SetMax, TRUE, \
74 MUIA_InputMode , MUIV_InputMode_Toggle, \
75 MUIA_Selected , selected,\
76 MUIA_Background , MUII_ButtonBack, \
77 MUIA_Disabled , disable,\
78 MUIA_ShortHelp, helpstring, \
79 End
82 MUIA_ShowSelState , FALSE,\
84 struct QualifierDef {
85 char *qualstr;
86 LONG qualval;
90 static struct QualifierDef QualTab[] =
92 { "SHIFT", (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT) },
93 { "LSHIFT", IEQUALIFIER_LSHIFT },
94 { "RSHIFT", IEQUALIFIER_RSHIFT },
95 { "CONTROL", IEQUALIFIER_CONTROL },
96 { "ALT", (IEQUALIFIER_LALT|IEQUALIFIER_RALT) },
97 { "LALT", IEQUALIFIER_LALT },
98 { "RALT", IEQUALIFIER_RALT },
99 { "COMMAND", (IEQUALIFIER_LCOMMAND|IEQUALIFIER_RCOMMAND) },
100 { "LCOMMAND", IEQUALIFIER_LCOMMAND },
101 { "RCOMMAND", IEQUALIFIER_RCOMMAND },
102 { "MIDBUTTON", IEQUALIFIER_MIDBUTTON },
103 { "RBUTTON", IEQUALIFIER_RBUTTON },
104 { "LEFTBUTTON", IEQUALIFIER_LEFTBUTTON },
105 { NULL, 0 }
109 Object *MakeCheck(STRPTR label, STRPTR help, ULONG check)
111 Object *obj = MUI_MakeObject(MUIO_Checkmark, label);
112 if (obj)
114 SetAttrs(obj, MUIA_CycleChain, 1,
115 MUIA_Selected, check,
116 MUIA_ShortHelp, help,
117 TAG_DONE);
120 return (obj);
123 #define String2(contents,maxlen)\
124 (void *)StringObject,\
125 StringFrame,\
126 MUIA_CycleChain, 1,\
127 MUIA_String_MaxLen , maxlen,\
128 MUIA_String_Contents, contents,\
131 #define LOAD_DATALONG(obj,attr,cfg_attr,defaultval) \
133 LONG *ptrd; \
134 if((ptrd = (LONG *) DoMethod(msg->configdata, MUIM_Dataspace_Find, cfg_attr))) \
135 set(obj, attr, *ptrd); \
136 else \
137 set(obj, attr, defaultval); \
140 #define SAVE_DATALONG(obj,attr,cfg_attr) \
142 LONG ptrd=0; \
143 get(obj, attr, &ptrd); \
144 DoMethod(msg->configdata, MUIM_Dataspace_Add, &ptrd, 8, cfg_attr); \
147 #define LOAD_DATASPEC(obj,attr,cfg_attr,defaultval) \
149 LONG ptrd; \
150 if((ptrd = DoMethod(msg->configdata, MUIM_Dataspace_Find, cfg_attr))) \
151 set(obj, attr, ptrd); \
152 else \
153 set(obj, attr, defaultval); \
156 #define SAVE_DATASPEC(obj,attr,cfg_attr) \
158 LONG ptrd=0; \
159 get(obj, attr, &ptrd); \
160 if (ptrd) \
161 DoMethod(msg->configdata, MUIM_Dataspace_Add, ptrd, sizeof(struct MUI_PenSpec), cfg_attr); \
164 #define SAVE_DATASPEC2(obj,attr,cfg_attr) \
166 LONG ptrd=0; \
167 get(obj, attr, &ptrd); \
168 if (ptrd) \
169 DoMethod(msg->configdata, MUIM_Dataspace_Add, ptrd, sizeof(struct MUI_ImageSpec), cfg_attr); \
172 #define LOAD_DATAFONT(obj,cfg_attr) \
174 LONG ptrd; \
175 if((ptrd = DoMethod(msg->configdata, MUIM_Dataspace_Find, cfg_attr))) \
176 set(obj, MUIA_String_Contents, ptrd); \
177 else \
178 set(obj, MUIA_String_Contents, ""); \
181 #define SAVE_DATAFONT(obj,cfg_attr) \
183 IPTR ptrd=0; \
184 get(obj, MUIA_String_Contents, &ptrd); \
185 if (ptrd) \
187 LONG dlen = strlen((char *) ptrd) + 1; \
188 if (dlen > 2) \
189 DoMethod(msg->configdata, MUIM_Dataspace_Add, ptrd, dlen, cfg_attr); \
190 else \
191 DoMethod(msg->configdata, MUIM_Dataspace_Remove, cfg_attr); \
195 /* *********************************************************************** */
197 static DEFAULT_KEYS_ARRAY
199 static ULONG keytags[] =
201 KEYTAG_QUALIFIER_MULTISELECT ,
202 KEYTAG_QUALIFIER_DRAG ,
203 KEYTAG_QUALIFIER_BALANCE ,
204 KEYTAG_COPY_TO_CLIPBOARD ,
205 KEYTAG_DEFAULT_WIDTH_COLUMN ,
206 KEYTAG_DEFAULT_WIDTH_ALL_COLUMNS,
207 KEYTAG_DEFAULT_ORDER_COLUMN ,
208 KEYTAG_DEFAULT_ORDER_ALL_COLUMNS,
209 KEYTAG_SELECT_TO_TOP ,
210 KEYTAG_SELECT_TO_BOTTOM ,
211 KEYTAG_SELECT_TO_PAGE_UP ,
212 KEYTAG_SELECT_TO_PAGE_DOWN ,
213 KEYTAG_SELECT_UP ,
214 KEYTAG_SELECT_DOWN ,
215 KEYTAG_TOGGLE_ACTIVE ,
216 KEYTAG_QUALIFIER_WHEEL_FAST ,
217 KEYTAG_QUALIFIER_WHEEL_HORIZ ,
218 KEYTAG_QUALIFIER_TITLECLICK2 ,
224 static struct KeyBinding empty_key = { 0, (UWORD)-1, 0 };
226 /* *********************************************************************** */
229 static const char *MainTextArray[] =
231 "If you have problems, try to increase the stack value,",
232 "in the icon infos if you launch the program from icon,",
233 "stack of CLI if you start it from CLI/Shell,",
234 "and if you launch it from some utility read its docs",
235 "to see how to increase it.",
236 "A stack of 12Kb, 16Kb or 20Kb is most of time a good idea.",
237 " ",
238 "If you still have problems, try to see if they happen with the Demo prog, then tell me.",
239 "\033C",
240 "Latest public release can be found on aminet (dev/mui).",
241 "All releases are available on",
242 "http://www.sourceforge.net/projects/nlist-classes/",
243 "\033C",
244 "\033r\0333(C) 2001-2007 by NList Open Source Team",
245 "\033r\0333(C) 1996-1998 by Gilles Masson",
246 "\033r\0333http://www.sourceforge.net/projects/nlist-classes/",
247 "\033C",
248 "\033cThis new list/listview custom class",
249 "\033chandles its own configurable backgrounds,",
250 "\033cpens, fonts, scrollbars, keys and qualifiers",
251 "\033C",
252 "\033cThe way used to handle cursor with multiselection",
253 "\033cis not exactly as the listview one !",
254 "\033cDrag&Drop is supported, both scrollbars",
255 "\033ccan be configured to disappear automatically",
256 "\033cwhen not needed because all is visible.",
257 "\033cJust try it...",
258 "\033C",
259 "\033cYou can horizontaly scroll with cursor keys,",
260 "\033cor going on the right and left of the list",
261 "\033cwhile selecting with the mouse.",
262 "\033cTry just clicking on the left/right borders !",
263 "\033C",
264 "\033cYou can change columns widths just dragging",
265 "\033cthe vertical separator between columns titles",
266 "\033c(try it using the balancing qualifier too).",
267 "\033C",
268 "\033cYou can change columns order just dragging",
269 "\033cthe column titles.",
270 "\033C",
271 "\033cThere is builtin copy to clipboard stuff",
272 "\033cand classic char selection capability.",
273 "\033C",
274 "\033cTry the Demo program to test all that...",
275 " ",
276 " ",
277 "\033r\033bGive some feedback about it ! :-)",
278 "\033C",
279 "**************************************************************************************************",
280 NULL
284 // static arrays which we fill up later on
285 static const char *Pages[6];
286 static const char *RS_ColWidthDrag[4];
287 static const char *RS_VSB[4];
288 static const char *RS_HSB[5];
289 static const char *RS_Menu[4];
290 static const char *RS_MultiSelects[3];
291 static const char *RS_DragTypes[4];
292 static const char *functions_names[20];
294 static LONG DeadKeyConvert(struct NListviews_MCP_Data *data,struct KeyBinding *key)
296 char *text = data->rawtext;
297 char keystr[8];
298 UWORD qual = key->kb_Qualifier & KBQUAL_MASK;
299 UWORD same = key->kb_Qualifier & KBSYM_MASK;
300 int posraw;
302 text[0] = '\0';
304 if (qual)
305 { if ((qual & KBQUALIFIER_CAPS) && (same & KBSYM_CAPS))
306 strlcat(text, (char *)"caps ", sizeof(data->rawtext));
307 else if ((qual & KBQUALIFIER_SHIFT) && (same & KBSYM_SHIFT))
308 { strlcat(text, (char *)"shift ", sizeof(data->rawtext));
309 if (qual & IEQUALIFIER_CAPSLOCK) strlcat(text, (char *)"capslock ", sizeof(data->rawtext));
311 else
312 { if (qual & IEQUALIFIER_LSHIFT) strlcat(text, (char *)"lshift ", sizeof(data->rawtext));
313 if (qual & IEQUALIFIER_RSHIFT) strlcat(text, (char *)"rshift ", sizeof(data->rawtext));
314 if (qual & IEQUALIFIER_CAPSLOCK) strlcat(text, (char *)"capslock ", sizeof(data->rawtext));
316 if (qual & IEQUALIFIER_CONTROL) strlcat(text, (char *)"control ", sizeof(data->rawtext));
317 if ((qual & KBQUALIFIER_ALT) && (same & KBSYM_ALT))
318 strlcat(text, (char *)"alt ", sizeof(data->rawtext));
319 else
320 { if (qual & IEQUALIFIER_LALT) strlcat(text, (char *)"lalt ", sizeof(data->rawtext));
321 if (qual & IEQUALIFIER_RALT) strlcat(text, (char *)"ralt ", sizeof(data->rawtext));
323 if (qual & IEQUALIFIER_LCOMMAND) strlcat(text, (char *)"lcommand ", sizeof(data->rawtext));
324 if (qual & IEQUALIFIER_RCOMMAND) strlcat(text, (char *)"rcommand ", sizeof(data->rawtext));
325 if (qual & IEQUALIFIER_NUMERICPAD) strlcat(text, (char *)"numpad ", sizeof(data->rawtext));
328 if (!(key->kb_KeyTag & 0x00004000) && (key->kb_Code != (UWORD)~0))
330 switch (key->kb_Code & 0x7F)
332 case 0x40 : strlcat(text,"space", sizeof(data->rawtext)); break;
333 case 0x41 : strlcat(text,"backspace", sizeof(data->rawtext)); break;
334 case 0x42 : strlcat(text,"tab", sizeof(data->rawtext)); break;
335 case 0x43 : strlcat(text,"enter", sizeof(data->rawtext)); break;
336 case 0x44 : strlcat(text,"return", sizeof(data->rawtext)); break;
337 case 0x45 : strlcat(text,"esc", sizeof(data->rawtext)); break;
338 case 0x46 : strlcat(text,"del", sizeof(data->rawtext)); break;
339 case 0x4C : strlcat(text,"up", sizeof(data->rawtext)); break;
340 case 0x4D : strlcat(text,"down", sizeof(data->rawtext)); break;
341 case 0x4E : strlcat(text,"right", sizeof(data->rawtext)); break;
342 case 0x4F : strlcat(text,"left", sizeof(data->rawtext)); break;
343 case 0x50 : strlcat(text,"f1", sizeof(data->rawtext)); break;
344 case 0x51 : strlcat(text,"f2", sizeof(data->rawtext)); break;
345 case 0x52 : strlcat(text,"f3", sizeof(data->rawtext)); break;
346 case 0x53 : strlcat(text,"f4", sizeof(data->rawtext)); break;
347 case 0x54 : strlcat(text,"f5", sizeof(data->rawtext)); break;
348 case 0x55 : strlcat(text,"f6", sizeof(data->rawtext)); break;
349 case 0x56 : strlcat(text,"f7", sizeof(data->rawtext)); break;
350 case 0x57 : strlcat(text,"f8", sizeof(data->rawtext)); break;
351 case 0x58 : strlcat(text,"f9", sizeof(data->rawtext)); break;
352 case 0x59 : strlcat(text,"f10", sizeof(data->rawtext)); break;
353 case 0x5F : strlcat(text,"help", sizeof(data->rawtext)); break;
354 default:
355 data->ievent.ie_NextEvent = NULL;
356 data->ievent.ie_Class = IECLASS_RAWKEY;
357 data->ievent.ie_SubClass = 0;
358 data->ievent.ie_Code = key->kb_Code;
359 data->ievent.ie_Qualifier = 0;
360 data->ievent.ie_position.ie_addr = (APTR) &data->ievent;
361 posraw = RawKeyConvert(&data->ievent, keystr, sizeof(keystr), 0L);
363 if (posraw > 0)
365 keystr[posraw] = '\0';
366 strlcat(text, keystr, sizeof(data->rawtext));
368 break;
372 return ((LONG)strlen(data->rawtext));
376 static LONG NL_SaveKeys(struct NListviews_MCP_Data *data)
378 LONG pos,ne = 0;
379 struct KeyBinding *key;
380 get(data->mcp_listkeys, MUIA_NList_Entries, &ne);
381 ne++;
382 data->nlkeys_size = ne*sizeof(struct KeyBinding);
384 if((data->nlkeys = (struct KeyBinding *) AllocMem(data->nlkeys_size+4,0L)))
386 pos = 0;
388 while (pos < ne)
390 DoMethod(data->mcp_listkeys,MUIM_NList_GetEntry,pos, &key);
391 if (key)
393 data->nlkeys[pos] = *key;
394 if (data->nlkeys[pos].kb_KeyTag & 0x00004000)
395 data->nlkeys[pos].kb_Code = (UWORD)~0;
397 else
398 break;
399 pos++;
402 data->nlkeys[pos].kb_KeyTag = 0L;
403 data->nlkeys[pos].kb_Code = (UWORD)~0;
404 data->nlkeys[pos].kb_Qualifier = 0;
405 pos++;
406 ne = ((pos * sizeof(struct KeyBinding)) + 3) & 0xFFFFFFFC;
408 return (ne);
411 return (0);
415 static void NL_LoadKeys(Object *list,struct KeyBinding *keys)
417 int i = 0;
418 set(list, MUIA_NList_Quiet, TRUE);
419 DoMethod(list,MUIM_NList_Clear);
420 while (keys[i].kb_KeyTag)
421 { DoMethod(list,MUIM_NList_InsertSingle,&keys[i], MUIV_NList_Insert_Bottom);
422 i++;
424 set(list, MUIA_NList_Quiet, FALSE);
428 static void NL_UpdateKeys(Object *list,struct KeyBinding *keys)
430 int i;
431 LONG pos,posmax = -1;
432 struct KeyBinding *key;
433 set(list, MUIA_NList_Quiet, TRUE);
434 get(list,MUIA_NList_Entries,&posmax);
435 for (i = 0; keys[i].kb_KeyTag; i++)
437 for (pos = 0; pos < posmax; pos++)
439 DoMethod(list,MUIM_NList_GetEntry, pos, &key);
440 if (key && (key->kb_KeyTag == keys[i].kb_KeyTag))
441 break;
444 LONG k1 = (LONG) key->kb_KeyTag;
445 LONG k2 = (LONG) keys[i].kb_KeyTag;
446 kprintf("%lx|pos=%ld key=%lx kt=%lx (== %lx)\n",list,pos,key,k1,k2);
448 else
450 LONG k1 = (LONG) key->kb_KeyTag;
451 LONG k2 = (LONG) keys[i].kb_KeyTag;
452 kprintf("%lx|pos=%ld key=%lx kt=%lx (!= %lx)\n",list,pos,key,k1,k2);
456 if (pos >= posmax)
457 DoMethod(list,MUIM_NList_InsertSingle,&keys[i], MUIV_NList_Insert_Bottom);
459 set(list, MUIA_NList_Quiet, FALSE);
462 HOOKPROTONH(StrObjFunc, LONG, Object *pop, Object *str)
464 LONG i = 0;
466 get(str,MUIA_UserData,&i);
467 if (i >= 0)
468 set(pop,MUIA_List_Active,i);
469 else
470 set(pop,MUIA_List_Active,MUIV_List_Active_Off);
471 return(TRUE);
473 MakeStaticHook(StrObjHook, StrObjFunc);
475 HOOKPROTONH(ObjStrFunc, VOID, Object *pop, Object *str)
477 LONG i = -1;
478 get(pop,MUIA_List_Active,&i);
479 if (i >= 0)
481 set(str,MUIA_UserData,i);
482 set(str,MUIA_Text_Contents,functions_names[i]);
484 else
485 { i = -1;
486 set(str,MUIA_UserData,i);
487 set(str,MUIA_Text_Contents,"");
490 MakeStaticHook(ObjStrHook, ObjStrFunc);
493 HOOKPROTONH(WindowFunc, VOID, Object *pop, Object *win)
495 set(win,MUIA_Window_DefaultObject,pop);
497 MakeStaticHook(WindowHook, WindowFunc);
500 HOOKPROTONH(TxtFctFunc, VOID, Object *list, long *val)
502 Object *txtfct = (Object *) val[0];
503 struct KeyBinding *key = NULL;
504 LONG i = -1;
505 get(txtfct,MUIA_UserData,&i);
506 DoMethod(list,MUIM_NList_GetEntry,MUIV_NList_GetEntry_Active, &key);
507 if (key && (i >= 0))
508 { key->kb_KeyTag = keytags[i];
509 DoMethod(list,MUIM_NList_Redraw,MUIV_NList_Redraw_Active);
510 get(list,MUIA_NList_Active,&i);
511 set(list,MUIA_NList_Active,i);
514 MakeStaticHook(TxtFctHook, TxtFctFunc);
516 HOOKPROTONH(AckFunc, VOID, Object *list, long *val)
518 Object *stringkey = (Object *) val[0];
519 struct KeyBinding *key = NULL;
520 char *ackstr = NULL;
521 get(stringkey,MUIA_String_Contents, &ackstr);
522 DoMethod(list,MUIM_NList_GetEntry,MUIV_NList_GetEntry_Active, &key);
523 if (ackstr && key)
525 IX ix;
526 ix.ix_Version = IX_VERSION;
527 ParseIX(ackstr,&ix);
528 key->kb_Qualifier = (ix.ix_Qualifier & KBQUAL_MASK) | ((ix.ix_QualSame << 12) & KBSYM_MASK);
529 key->kb_Code = ix.ix_Code;
530 DoMethod(list,MUIM_NList_Redraw,MUIV_NList_Redraw_Active);
533 MakeStaticHook(AckHook, AckFunc);
535 HOOKPROTONH(ActiveFunc, VOID, Object *list, long *val)
537 struct NListviews_MCP_Data *data = (struct NListviews_MCP_Data *) (val[0]);
538 /* Object *win = NULL;*/
539 ULONG active = (ULONG) (val[1]);
540 struct KeyBinding *key = NULL;
541 if((LONG)active >= 0)
543 DoMethod(list,MUIM_NList_GetEntry,MUIV_NList_GetEntry_Active, &key);
545 if (key)
546 { LONG i;
547 i = 0;
548 while ((keytags[i] > 0) && (keytags[i] != key->kb_KeyTag))
549 i++;
550 if (keytags[i] == key->kb_KeyTag)
551 { nnset(data->mcp_stringkey,MUIA_HotkeyString_Snoop, FALSE);
552 nnset(data->mcp_stringkey,MUIA_Disabled, FALSE);
553 nnset(data->mcp_snoopkey,MUIA_Disabled, FALSE);
554 nnset(data->mcp_txtfct,MUIA_UserData,i);
555 nnset(data->mcp_txtfct,MUIA_Text_Contents,functions_names[i]);
557 DeadKeyConvert(data,key);
558 nnset(data->mcp_stringkey,MUIA_String_Contents, data->rawtext);
560 get(list, MUIA_WindowObject, &win);
561 if (win)
562 set(win, MUIA_Window_ActiveObject, data->mcp_stringkey);
565 else
566 key = NULL;
569 if (!key)
570 { nnset(data->mcp_txtfct,MUIA_UserData,-1);
571 nnset(data->mcp_txtfct,MUIA_Text_Contents,"");
572 nnset(data->mcp_stringkey,MUIA_String_Contents, "");
573 nnset(data->mcp_stringkey,MUIA_Disabled, TRUE);
574 nnset(data->mcp_snoopkey,MUIA_Disabled, TRUE);
577 MakeStaticHook(ActiveHook, ActiveFunc);
580 HOOKPROTONHNP(DefaultFunc, VOID, Object *list)
582 if (list)
583 NL_LoadKeys(list,default_keys);
585 MakeStaticHook(DefaultHook, DefaultFunc);
587 HOOKPROTONHNP(UpdateFunc, VOID, Object *list)
589 if (list)
590 NL_UpdateKeys(list,default_keys);
592 MakeStaticHook(UpdateHook, UpdateFunc);
594 HOOKPROTONHNP(InsertFunc, VOID, Object *list)
596 if (list)
597 { struct KeyBinding *key;
598 LONG pos = 0;
599 DoMethod(list,MUIM_NList_GetEntry,MUIV_NList_GetEntry_Active, &key);
600 if (!key)
601 { empty_key.kb_KeyTag = keytags[0];
602 key = &empty_key;
604 set(list,MUIA_NList_Quiet,TRUE);
605 DoMethod(list,MUIM_NList_InsertSingle,key, MUIV_NList_Insert_Active);
606 get(list,MUIA_NList_InsertPosition,&pos);
607 set(list,MUIA_NList_Active,pos);
608 set(list,MUIA_NList_Quiet,FALSE);
611 MakeStaticHook(InsertHook, InsertFunc);
613 HOOKPROTONH(DisplayFunc, VOID, Object *obj, struct NList_DisplayMessage *ndm)
615 struct KeyBinding *key = (struct KeyBinding *) ndm->entry;
616 struct NListviews_MCP_Data *data = NULL;
617 get(obj,MUIA_UserData,&data);
619 if (key && data)
621 LONG i;
623 ndm->preparses[0] = (STRPTR)"\033r";
625 DeadKeyConvert(data,key);
626 ndm->strings[0] = data->rawtext;
628 ndm->strings[1] = (STRPTR)"\033c=";
630 i = 0;
631 while ((keytags[i] > 0) && (keytags[i] != key->kb_KeyTag))
632 i++;
633 ndm->strings[2] = (STRPTR)functions_names[i];
635 else
637 ndm->preparses[0] = (STRPTR)"\033r";
638 ndm->strings[0] = (STRPTR)tr(MSG_HOTKEYS_KEY);
639 ndm->strings[1] = (STRPTR)"";
640 ndm->strings[2] = (STRPTR)tr(MSG_HOTKEYS_ACTION);
643 MakeStaticHook(DisplayHook, DisplayFunc);
645 HOOKPROTONHNO(ConstructFunc, APTR, struct NList_ConstructMessage *ncm)
647 struct KeyBinding *key = (struct KeyBinding *) ncm->entry;
649 struct KeyBinding *key2 = (struct KeyBinding *) AllocMem(sizeof(struct KeyBinding),0L);
650 if (key2)
651 *key2 = *key;
653 return ((APTR) key2);
655 MakeStaticHook(ConstructHook, ConstructFunc);
657 HOOKPROTONHNO(DestructFunc, VOID, struct NList_DestructMessage *ndm)
659 struct KeyBinding *key = (struct KeyBinding *) ndm->entry;
661 FreeMem((void *) key,sizeof(struct KeyBinding));
663 MakeStaticHook(DestructHook, DestructFunc);
665 static IPTR mNL_MCP_New(struct IClass *cl,Object *obj,struct opSet *msg)
667 struct NListviews_MCP_Data *data;
668 APTR group1, group2, group3, group4, group5;
669 char *exampleText;
671 static const char infotext[] = "\033bNListviews.mcp " LIB_REV_STRING "\033n (" LIB_DATE ")\n"
672 "Copyright (c) 1996-2001 Gilles Masson\n"
673 LIB_COPYRIGHT "\n\n"
674 "Distributed under the terms of the LGPL2.\n\n"
675 "For the latest version, check out:\n"
676 "http://www.sf.net/projects/nlist-classes/\n\n";
678 if(!(obj = (Object *)DoSuperMethodA(cl, obj,(Msg) msg)))
679 return(0);
681 data = INST_DATA(cl,obj);
683 group1 = group2 = group3 = group4 = group5 = NULL;
685 data->mcp_group = NULL;
686 data->mcp_list1 = NULL;
687 data->mcp_list2 = NULL;
688 data->mcp_PenTitle = NULL;
689 data->mcp_PenList = NULL;
690 data->mcp_PenSelect = NULL;
691 data->mcp_PenCursor = NULL;
692 data->mcp_PenUnselCur = NULL;
693 data->mcp_PenInactive = NULL;
694 data->mcp_BG_Title = NULL;
695 data->mcp_BG_List = NULL;
696 data->mcp_BG_Select = NULL;
697 data->mcp_BG_Cursor = NULL;
698 data->mcp_BG_UnselCur = NULL;
699 data->mcp_BG_Inactive = NULL;
700 data->mcp_R_Multi = NULL;
701 data->mcp_B_MultiMMB = NULL;
702 data->mcp_R_Drag = NULL;
703 data->mcp_SL_VertInc = NULL;
704 data->mcp_R_HSB = NULL;
705 data->mcp_R_VSB = NULL;
706 data->mcp_B_Smooth = NULL;
707 data->mcp_Font = NULL;
708 data->mcp_Font_Little = NULL;
709 data->mcp_Font_Fixed = NULL;
710 data->mcp_ForcePen = NULL;
711 data->mcp_ColWidthDrag = NULL;
712 data->mcp_PartialCol = NULL;
713 data->mcp_List_Select = NULL;
714 data->mcp_NList_Menu = NULL;
715 data->mcp_PartialChar = NULL;
716 data->mcp_SerMouseFix = NULL;
717 data->mcp_DragLines = NULL;
718 data->mcp_WheelStep = NULL;
719 data->mcp_WheelFast = NULL;
720 data->mcp_WheelMMB = NULL;
721 data->mcp_listkeys = NULL;
722 data->mcp_stringkey = NULL;
723 data->mcp_snoopkey = NULL;
724 data->mcp_insertkey = NULL;
725 data->mcp_removekey = NULL;
726 data->mcp_defaultkeys = NULL;
727 data->mcp_updatekeys = NULL;
728 data->mcp_txtfct = NULL;
729 data->mcp_popstrfct = NULL;
730 data->mcp_poplistfct = NULL;
731 data->nlkeys = NULL;
733 data->mcp_stringkey = HotkeyStringObject,
734 StringFrame, MUIA_CycleChain, 1,
735 MUIA_HotkeyString_Snoop, FALSE,
736 MUIA_Disabled,TRUE,
737 End;
739 if(data->mcp_stringkey == NULL)
741 data->mcp_stringkey = StringObject,
742 StringFrame, MUIA_CycleChain, 1,
743 End;
746 // create a duplicate of the translated text
747 if((exampleText = AllocVec((strlen(tr(MSG_EXAMPLE_TEXT))+1)*sizeof(char), MEMF_ANY)) != NULL)
749 char *p;
750 LONG numLines = 0;
752 // copy the text
753 strcpy(exampleText, tr(MSG_EXAMPLE_TEXT));
755 // count the number of lines
756 p = exampleText;
757 while((p = strchr(p, '\n')) != NULL)
759 numLines++;
760 p++;
763 // finally split the text into separate lines
764 if((data->exampleText = AllocVec((numLines+2)*sizeof(char *), MEMF_ANY|MEMF_CLEAR)) != NULL)
766 LONG line;
768 p = exampleText;
769 for(line = 0; line < numLines; line++)
771 char *q;
773 q = strchr(p, '\n');
774 *q++ = '\0';
775 data->exampleText[line] = AllocVec((strlen(p)+1)*sizeof(char), MEMF_ANY);
776 strcpy(data->exampleText[line], p);
777 p = q;
781 FreeVec(exampleText);
784 group1 = GroupObject,
786 Child, VGroup,
787 GroupFrameT(tr(MSG_GROUP_EXAMPLE)),
789 Child, data->mcp_list1 = NListviewObject,
790 MUIA_CycleChain, 1,
791 MUIA_NList_Title,"\033cNList / NListview",
792 MUIA_NList_TitleSeparator, TRUE,
793 MUIA_NListview_Vert_ScrollBar, MUIV_NListview_VSB_Default,
794 MUIA_NListview_Horiz_ScrollBar, MUIV_NListview_HSB_Default,
795 MUIA_NList_DefaultObjectOnClick, TRUE,
796 MUIA_NList_SourceArray, data->exampleText/*MainTextArray*/,
797 End,
798 End,
800 Child, GroupObject,
801 GroupFrameT(tr(MSG_FONTS)),
802 GroupSpacing(2),
803 MUIA_Group_Columns, 2,
805 MUIA_Weight,(ULONG)30,
806 Child, Label(tr(MSG_NORMAL_FONT)),
807 Child, data->mcp_Font = PopaslObject,
808 MUIA_Popstring_String, String2(0,80),
809 MUIA_Popstring_Button, PopButton(MUII_PopUp),
810 MUIA_Popasl_Type, ASL_FontRequest,
811 MUIA_ShortHelp, tr(MSG_NORMAL_FONT_HELP),
812 ASLFO_TitleText, tr(MSG_NORMAL_FONT_ASL),
813 End,
815 Child, Label(tr(MSG_SMALL_FONT)),
816 Child, data->mcp_Font_Little = PopaslObject,
817 MUIA_Popstring_String, String2(0,80),
818 MUIA_Popstring_Button, PopButton(MUII_PopUp),
819 MUIA_Popasl_Type, ASL_FontRequest,
820 MUIA_ShortHelp, tr(MSG_SMALL_FONT_HELP),
821 ASLFO_TitleText, tr(MSG_SMALL_FONT_ASL),
822 End,
824 Child, Label(tr(MSG_FIXED_FONT)),
825 Child, data->mcp_Font_Fixed = PopaslObject,
826 MUIA_Popstring_String, String2(0,80),
827 MUIA_Popstring_Button, PopButton(MUII_PopUp),
828 MUIA_Popasl_Type, ASL_FontRequest,
829 MUIA_ShortHelp, tr(MSG_FIXED_FONT_HELP),
830 ASLFO_TitleText, tr(MSG_FIXED_FONT_ASL),
831 ASLFO_FixedWidthOnly, TRUE,
832 End,
834 Child, Label(tr(MSG_FONT_MARGIN)),
835 Child, data->mcp_SL_VertInc = SliderObject,
836 MUIA_CycleChain, 1,
837 MUIA_Numeric_Min, 0,
838 MUIA_Numeric_Max, 9,
839 MUIA_Numeric_Value, 1,
840 MUIA_ShortHelp, tr(MSG_FONT_MARGIN_HELP),
841 End,
843 End,
844 End;
846 group2 = VGroup,
847 Child, VGroup,
848 GroupFrameT(tr(MSG_COLORS)),
849 GroupSpacing(2),
850 MUIA_VertWeight, 85,
851 MUIA_Group_Columns, 3,
853 Child, RectangleObject,
854 MUIA_VertWeight, 0,
855 MUIA_Rectangle_HBar, TRUE,
856 MUIA_Rectangle_BarTitle, tr(MSG_TEXTCOLOR),
857 End,
858 Child, HSpace(0),
859 Child, RectangleObject,
860 MUIA_VertWeight, 0,
861 MUIA_Rectangle_HBar, TRUE,
862 MUIA_Rectangle_BarTitle, tr(MSG_BACKGROUNDCOLOR),
863 End,
865 Child, data->mcp_PenTitle = PoppenObject,
866 MUIA_CycleChain, 1,
867 MUIA_Window_Title, tr(MSG_TITLE_PEN_WIN),
868 MUIA_Draggable, TRUE,
869 MUIA_ShortHelp, tr(MSG_TITLE_PEN_HELP),
870 End,
871 Child, VCenter(Label(tr(MSG_PBG_TITLE))),
872 Child, data->mcp_BG_Title = PopimageObject,
873 MUIA_CycleChain, 1,
874 MUIA_Imageadjust_Type, MUIV_Imageadjust_Type_Background,
875 MUIA_Window_Title, tr(MSG_TITLE_BG_WIN),
876 MUIA_Draggable, TRUE,
877 MUIA_ShortHelp, tr(MSG_TITLE_BG_HELP),
878 End,
880 Child, data->mcp_PenList = PoppenObject,
881 MUIA_CycleChain, 1,
882 MUIA_Window_Title, tr(MSG_LIST_PEN_WIN),
883 MUIA_Draggable, TRUE,
884 MUIA_ShortHelp, tr(MSG_LIST_PEN_HELP),
885 End,
886 Child, VCenter(Label(tr(MSG_PBG_LIST))),
887 Child, data->mcp_BG_List = PopimageObject,
888 MUIA_CycleChain, 1,
889 MUIA_Imageadjust_Type, MUIV_Imageadjust_Type_Background,
890 MUIA_Window_Title, tr(MSG_LIST_BG_WIN),
891 MUIA_Draggable, TRUE,
892 MUIA_ShortHelp, tr(MSG_LIST_BG_HELP),
893 End,
895 Child, data->mcp_PenSelect = PoppenObject,
896 MUIA_CycleChain, 1,
897 MUIA_Window_Title, tr(MSG_SELECT_PEN_WIN),
898 MUIA_Draggable, TRUE,
899 MUIA_ShortHelp, tr(MSG_SELECT_PEN_HELP),
900 End,
901 Child, VCenter(Label(tr(MSG_PBG_SELECT))),
902 Child, data->mcp_BG_Select = PopimageObject,
903 MUIA_CycleChain, 1,
904 MUIA_Imageadjust_Type, MUIV_Imageadjust_Type_Background,
905 MUIA_Window_Title, tr(MSG_SELECT_BG_WIN),
906 MUIA_Draggable, TRUE,
907 MUIA_ShortHelp, tr(MSG_SELECT_BG_HELP),
908 End,
910 Child, data->mcp_PenCursor = PoppenObject,
911 MUIA_CycleChain, 1,
912 MUIA_Window_Title, tr(MSG_CURSOR_PEN_WIN),
913 MUIA_Draggable, TRUE,
914 MUIA_ShortHelp, tr(MSG_CURSOR_PEN_HELP),
915 End,
916 Child, VCenter(Label(tr(MSG_PBG_CURSOR))),
917 Child, data->mcp_BG_Cursor = PopimageObject,
918 MUIA_CycleChain, 1,
919 MUIA_Imageadjust_Type, MUIV_Imageadjust_Type_Background,
920 MUIA_Window_Title, tr(MSG_CURSOR_BG_WIN),
921 MUIA_Draggable, TRUE,
922 MUIA_ShortHelp, tr(MSG_CURSOR_BG_HELP),
923 End,
925 Child, data->mcp_PenUnselCur = PoppenObject,
926 MUIA_CycleChain, 1,
927 MUIA_Window_Title, tr(MSG_UNSEL_PEN_WIN),
928 MUIA_Draggable, TRUE,
929 MUIA_ShortHelp, tr(MSG_UNSEL_PEN_HELP),
930 End,
931 Child, VCenter(Label(tr(MSG_PBG_UNSEL))),
932 Child, data->mcp_BG_UnselCur = PopimageObject,
933 MUIA_CycleChain, 1,
934 MUIA_Imageadjust_Type, MUIV_Imageadjust_Type_Background,
935 MUIA_Window_Title, tr(MSG_UNSEL_BG_WIN),
936 MUIA_Draggable, TRUE,
937 MUIA_ShortHelp, tr(MSG_UNSEL_BG_HELP),
938 End,
940 Child, data->mcp_PenInactive = PoppenObject,
941 MUIA_CycleChain, 1,
942 MUIA_Window_Title, tr(MSG_INACT_PEN_WIN),
943 MUIA_Draggable, TRUE,
944 MUIA_ShortHelp, tr(MSG_INACT_PEN_HELP),
945 End,
946 Child, VCenter(Label(tr(MSG_PBG_INACT))),
947 Child, data->mcp_BG_Inactive = PopimageObject,
948 MUIA_CycleChain, 1,
949 MUIA_Imageadjust_Type, MUIV_Imageadjust_Type_Background,
950 MUIA_Window_Title, tr(MSG_INACT_BG_WIN),
951 MUIA_Draggable, TRUE,
952 MUIA_ShortHelp, tr(MSG_INACT_BG_HELP),
953 End,
955 End,
957 Child, VGroup,
958 GroupFrameT(tr(MSG_COLOR_OPTIONS)),
959 MUIA_VertWeight, 15,
961 Child, VSpace(0),
962 Child, HGroup,
963 Child, HSpace(0),
964 Child, data->mcp_ForcePen = ImageObject,
965 ImageButtonFrame,
966 MUIA_InputMode, MUIV_InputMode_Toggle,
967 MUIA_Image_Spec, MUII_CheckMark,
968 MUIA_Image_FreeVert, TRUE,
969 MUIA_Background, MUII_ButtonBack,
970 MUIA_ShowSelState, FALSE,
971 End,
972 Child, Label(tr(MSG_FORCE_SELECT_PEN)),
973 MUIA_ShortHelp, tr(MSG_FORCE_SELECT_PEN_HELP),
974 Child, HSpace(0),
975 End,
976 Child, VSpace(0),
977 End,
978 End;
980 RS_VSB[0] = tr(MSG_VSB_ALWAYS);
981 RS_VSB[1] = tr(MSG_VSB_AUTO);
982 RS_VSB[2] = tr(MSG_VSB_FULLAUTO);
983 RS_VSB[3] = NULL;
985 RS_HSB[0] = tr(MSG_HSB_ALWAYS);
986 RS_HSB[1] = tr(MSG_HSB_AUTO);
987 RS_HSB[2] = tr(MSG_HSB_FULLAUTO);
988 RS_HSB[3] = tr(MSG_HSB_NONE);
989 RS_HSB[4] = NULL;
991 group3 = VGroup,
993 Child, HGroup,
994 Child, HGroup,
995 GroupFrameT(tr(MSG_SB_HORIZONTAL)),
996 Child, HSpace(0),
997 Child, VGroup,
998 Child, VSpace(0),
999 Child, data->mcp_R_HSB = RadioObject,
1000 MUIA_Radio_Entries, RS_HSB,
1001 End,
1002 MUIA_ShortHelp, tr(MSG_SB_HORIZONTAL_HELP),
1003 Child, VSpace(0),
1004 End,
1005 Child, HSpace(0),
1006 End,
1008 Child, HGroup,
1009 GroupFrameT(tr(MSG_SB_VERTICAL)),
1010 Child, HSpace(0),
1011 Child, VGroup,
1012 Child, VSpace(0),
1013 Child, data->mcp_R_VSB = RadioObject,
1014 MUIA_Radio_Entries,RS_VSB,
1015 End,
1016 MUIA_ShortHelp, tr(MSG_SB_VERTICAL_HELP),
1017 Child, VSpace(0),
1018 End,
1019 Child, HSpace(0),
1020 End,
1021 Child, VSpace(0),
1022 End,
1024 Child, VGroup,
1025 GroupFrameT(tr(MSG_SCROLLCONTROL)),
1026 Child, VSpace(0),
1028 Child, ColGroup(2),
1029 Child, HSpace(0),
1030 Child, HGroup,
1031 Child, data->mcp_B_Smooth = ImageObject,
1032 ImageButtonFrame,
1033 MUIA_InputMode, MUIV_InputMode_Toggle,
1034 MUIA_Image_Spec, MUII_CheckMark,
1035 MUIA_Image_FreeVert, TRUE,
1036 MUIA_Background, MUII_ButtonBack,
1037 MUIA_ShowSelState, FALSE,
1038 End,
1039 Child, Label(tr(MSG_SMOOTH_SCROLLING)),
1040 MUIA_ShortHelp, tr(MSG_SMOOTH_SCROLLING_HELP),
1041 Child, HSpace(0),
1042 End,
1044 Child, HSpace(0),
1045 Child, HGroup,
1046 Child, data->mcp_WheelMMB = ImageObject,
1047 ImageButtonFrame,
1048 MUIA_InputMode, MUIV_InputMode_Toggle,
1049 MUIA_Image_Spec, MUII_CheckMark,
1050 MUIA_Image_FreeVert, TRUE,
1051 MUIA_Background, MUII_ButtonBack,
1052 MUIA_ShowSelState, FALSE,
1053 End,
1054 Child, Label(tr(MSG_MMB_FASTWHEEL)),
1055 MUIA_ShortHelp, tr(MSG_MMB_FASTWHEEL_HELP),
1056 Child, HSpace(0),
1057 End,
1059 Child, Label(tr(MSG_WHEEL_STEP)),
1060 Child, data->mcp_WheelStep = SliderObject,
1061 MUIA_CycleChain, 1,
1062 MUIA_Numeric_Min, 1,
1063 MUIA_Numeric_Max, 10,
1064 MUIA_Numeric_Value, DEFAULT_WHEELSTEP,
1065 MUIA_ShortHelp, tr(MSG_WHEEL_STEP_HELP),
1066 End,
1068 Child, Label(tr(MSG_WHEEL_FAST)),
1069 Child, data->mcp_WheelFast = SliderObject,
1070 MUIA_CycleChain, 1,
1071 MUIA_Numeric_Min, 1,
1072 MUIA_Numeric_Max, 10,
1073 MUIA_Numeric_Value, DEFAULT_WHEELFAST,
1074 MUIA_ShortHelp, tr(MSG_WHEEL_FAST_HELP),
1075 End,
1076 End,
1078 Child, VSpace(0),
1079 End,
1082 End;
1085 RS_MultiSelects[0] = tr(MSG_MULTISELECT_QUAL);
1086 RS_MultiSelects[1] = tr(MSG_MULTISELECT_ALWAYS);
1087 RS_MultiSelects[2] = NULL;
1089 RS_DragTypes[0] = tr(MSG_DRAGTYPE_IMMEDIATE);
1090 RS_DragTypes[1] = tr(MSG_DRAGTYPE_BORDERS);
1091 RS_DragTypes[2] = tr(MSG_DRAGTYPE_QUALIFIER);
1092 RS_DragTypes[3] = NULL;
1094 RS_ColWidthDrag[0] = tr(MSG_COLWIDTHDRAG_TITLE);
1095 RS_ColWidthDrag[1] = tr(MSG_COLWIDTHDRAG_FULLBAR);
1096 RS_ColWidthDrag[2] = tr(MSG_COLWIDTHDRAG_VISIBLE);
1097 RS_ColWidthDrag[3] = NULL;
1099 RS_Menu[0] = tr(MSG_CMENU_ALWAYS);
1100 RS_Menu[1] = tr(MSG_CMENU_TOPONLY);
1101 RS_Menu[2] = tr(MSG_CMENU_NEVER);
1102 RS_Menu[3] = NULL;
1104 group4 = VGroup,
1106 Child, HGroup,
1107 Child, VGroup,
1108 Child, HGroup,
1109 GroupFrameT(tr(MSG_MULTISELECT)),
1111 Child, HSpace(0),
1112 Child, VGroup,
1113 Child, VSpace(0),
1115 Child, HGroup,
1116 Child, data->mcp_R_Multi = RadioObject,
1117 MUIA_Radio_Entries, RS_MultiSelects,
1118 MUIA_ShortHelp, tr(MSG_MULTISELECT_HELP),
1119 End,
1120 Child, HSpace(0),
1121 End,
1123 Child, RectangleObject,
1124 MUIA_VertWeight, 0,
1125 MUIA_Rectangle_HBar, TRUE,
1126 End,
1128 Child, HGroup,
1129 Child, data->mcp_List_Select = ImageObject,
1130 ImageButtonFrame,
1131 MUIA_InputMode, MUIV_InputMode_Toggle,
1132 MUIA_Image_Spec, MUII_CheckMark,
1133 MUIA_Image_FreeVert, TRUE,
1134 MUIA_Background, MUII_ButtonBack,
1135 MUIA_ShowSelState, FALSE,
1136 MUIA_Selected, TRUE,
1137 End,
1138 Child, Label(tr(MSG_MULTISEL_MOVEACTIVE)),
1139 MUIA_ShortHelp, tr(MSG_MULTISEL_MOVEACTIVE_HELP),
1140 Child, HSpace(0),
1141 End,
1143 Child, HGroup,
1144 Child, data->mcp_B_MultiMMB = ImageObject,
1145 ImageButtonFrame,
1146 MUIA_InputMode, MUIV_InputMode_Toggle,
1147 MUIA_Image_Spec, MUII_CheckMark,
1148 MUIA_Background, MUII_ButtonBack,
1149 MUIA_ShowSelState, FALSE,
1150 MUIA_Image_FreeVert,TRUE,
1151 End,
1152 Child, Label(tr(MSG_MMB_MULTISEL)),
1153 MUIA_ShortHelp, tr(MSG_MMB_MULTISEL_HELP),
1154 Child, HSpace(0),
1155 End,
1157 Child, VSpace(0),
1158 End,
1159 Child, HSpace(0),
1160 End,
1162 Child, HGroup,
1163 GroupFrameT(tr(MSG_LAYOUT)),
1164 Child, HSpace(0),
1165 Child, VGroup,
1166 Child, VSpace(0),
1167 Child, HGroup,
1168 Child, data->mcp_PartialCol = ImageObject,
1169 ImageButtonFrame,
1170 MUIA_InputMode, MUIV_InputMode_Toggle,
1171 MUIA_Image_Spec, MUII_CheckMark,
1172 MUIA_Image_FreeVert, TRUE,
1173 MUIA_Background, MUII_ButtonBack,
1174 MUIA_ShowSelState, FALSE,
1175 MUIA_Selected, TRUE,
1176 End,
1177 Child, Label(tr(MSG_PARTIAL_COL_MARK)),
1178 MUIA_ShortHelp, tr(MSG_PARTIAL_COL_MARK_HELP),
1179 Child, HSpace(0),
1180 End,
1182 Child, HGroup,
1183 Child, data->mcp_PartialChar = ImageObject,
1184 ImageButtonFrame,
1185 MUIA_InputMode, MUIV_InputMode_Toggle,
1186 MUIA_Image_Spec, MUII_CheckMark,
1187 MUIA_Image_FreeVert, TRUE,
1188 MUIA_Background, MUII_ButtonBack,
1189 MUIA_ShowSelState, FALSE,
1190 MUIA_Selected, FALSE,
1191 End,
1192 Child, Label(tr(MSG_PARTIAL_CHARS_DRAWN)),
1193 MUIA_ShortHelp, tr(MSG_PARTIAL_CHARS_DRAWN_HELP),
1194 Child, HSpace(0),
1195 End,
1197 Child, HGroup,
1198 Child, data->mcp_VerticalCenteredLines = ImageObject,
1199 ImageButtonFrame,
1200 MUIA_InputMode, MUIV_InputMode_Toggle,
1201 MUIA_Image_Spec, MUII_CheckMark,
1202 MUIA_Image_FreeVert, TRUE,
1203 MUIA_Background, MUII_ButtonBack,
1204 MUIA_ShowSelState, FALSE,
1205 MUIA_Selected, FALSE,
1206 End,
1207 Child, Label(tr(MSG_VERT_CENTERED)),
1208 MUIA_ShortHelp, tr(MSG_VERT_CENTERED_HELP),
1209 Child, HSpace(0),
1210 End,
1212 Child, VSpace(0),
1213 End,
1214 Child, HSpace(0),
1215 End,
1217 End,
1219 Child, VGroup,
1221 Child, HGroup,
1222 GroupFrameT(tr(MSG_DRAGDROP)),
1224 Child, VGroup,
1225 Child, VSpace(0),
1227 Child, HGroup,
1228 Child, HSpace(0),
1229 Child, data->mcp_R_Drag = RadioObject,
1230 MUIA_Radio_Entries, RS_DragTypes,
1231 MUIA_ShortHelp, tr(MSG_DRAGTYPE_HELP),
1232 End,
1233 Child, HSpace(0),
1234 End,
1236 Child, RectangleObject,
1237 MUIA_VertWeight, 0,
1238 MUIA_Rectangle_HBar, TRUE,
1239 End,
1241 Child, ColGroup(2),
1243 Child, Label(tr(MSG_DRAG_LINES)),
1244 Child, data->mcp_DragLines = SliderObject,
1245 MUIA_ShortHelp, tr(MSG_DRAG_LINES_HELP),
1246 MUIA_CycleChain, 1,
1247 MUIA_Numeric_Min, 0,
1248 MUIA_Numeric_Max, 20,
1249 MUIA_Numeric_Value, DEFAULT_DRAGLINES,
1250 End,
1252 Child, HSpace(0),
1253 Child, HGroup,
1254 Child, data->mcp_SerMouseFix = ImageObject,
1255 ImageButtonFrame,
1256 MUIA_InputMode, MUIV_InputMode_Toggle,
1257 MUIA_Image_Spec, MUII_CheckMark,
1258 MUIA_Image_FreeVert, TRUE,
1259 MUIA_Background, MUII_ButtonBack,
1260 MUIA_ShowSelState, FALSE,
1261 End,
1262 Child, Label(tr(MSG_SERMOUSE_FIX)),
1263 MUIA_ShortHelp, tr(MSG_SERMOUSE_FIX_HELP),
1264 Child, HSpace(0),
1265 End,
1266 End,
1268 Child, VSpace(0),
1269 End,
1271 End,
1273 Child, HGroup,
1274 GroupFrameT(tr(MSG_BALANCING_COLS)),
1275 Child, HSpace(0),
1276 Child, VGroup,
1277 Child, VSpace(0),
1278 Child, data->mcp_ColWidthDrag = RadioObject,
1279 MUIA_Radio_Entries, RS_ColWidthDrag,
1280 End,
1281 MUIA_ShortHelp, tr(MSG_BALANCING_COLS_HELP),
1282 Child, VSpace(0),
1283 End,
1284 Child, HSpace(0),
1285 End,
1287 End,
1288 End,
1290 Child, VGroup,
1291 GroupFrameT(tr(MSG_GROUP_MISC)),
1292 MUIA_VertWeight, 10,
1294 Child, VSpace(0),
1295 Child, HGroup,
1297 Child, HSpace(0),
1298 Child, VGroup,
1300 Child, HGroup,
1301 Child, data->mcp_SelectPointer = ImageObject,
1302 ImageButtonFrame,
1303 MUIA_InputMode, MUIV_InputMode_Toggle,
1304 MUIA_Image_Spec, MUII_CheckMark,
1305 MUIA_Image_FreeVert, TRUE,
1306 MUIA_Background, MUII_ButtonBack,
1307 MUIA_ShowSelState, FALSE,
1308 End,
1309 Child, Label(tr(MSG_SELECT_POINTER)),
1310 MUIA_ShortHelp, tr(MSG_SELECT_POINTER_HELP),
1311 Child, HSpace(0),
1312 End,
1314 End,
1316 Child, HGroup,
1317 Child, VGroup,
1318 Child, VSpace(0),
1319 Child, RectangleObject,
1320 MUIA_VertWeight, 0,
1321 MUIA_Rectangle_HBar, TRUE,
1322 MUIA_Rectangle_BarTitle, tr(MSG_BAR_CONTEXTMENU),
1323 End,
1324 Child, data->mcp_NList_Menu = RadioObject,
1325 MUIA_Radio_Entries,RS_Menu,
1326 MUIA_ShortHelp, tr(MSG_DEFAULT_CONTEXT_MENU_HELP),
1327 End,
1328 Child, VSpace(0),
1329 End,
1330 End,
1332 Child, HSpace(0),
1333 End,
1334 Child, VSpace(0),
1335 End,
1337 End;
1339 functions_names[0] = tr(MSG_FUNC_MULTISELQUAL);
1340 functions_names[1] = tr(MSG_FUNC_DRAGQUAL);
1341 functions_names[2] = tr(MSG_FUNC_BALANCEQUAL);
1342 functions_names[3] = tr(MSG_FUNC_COPYCLIP);
1343 functions_names[4] = tr(MSG_FUNC_DEFCOLWIDTH);
1344 functions_names[5] = tr(MSG_FUNC_DEFALLCOLWIDTH);
1345 functions_names[6] = tr(MSG_FUNC_DEFORDERCOL);
1346 functions_names[7] = tr(MSG_FUNC_DEFALLORDERCOL);
1347 functions_names[8] = tr(MSG_FUNC_SELECTTOP);
1348 functions_names[9] = tr(MSG_FUNC_SELECTBOTTOM);
1349 functions_names[10]= tr(MSG_FUNC_SELECTPAGEUP);
1350 functions_names[11]= tr(MSG_FUNC_SELECTPAGEDOWN);
1351 functions_names[12]= tr(MSG_FUNC_SELECTUP);
1352 functions_names[13]= tr(MSG_FUNC_SELECTDOWN);
1353 functions_names[14]= tr(MSG_FUNC_TOGGLEACTIVE);
1354 functions_names[15]= tr(MSG_FUNC_FASTWHEELQUAL);
1355 functions_names[16]= tr(MSG_FUNC_HORIZWHEELQUAL);
1356 functions_names[17]= tr(MSG_FUNC_TITLECLICKQUAL);
1357 functions_names[18]= "";
1358 functions_names[19]= NULL;
1360 group5 = GroupObject,
1361 Child, NListviewObject,
1362 MUIA_CycleChain, 1,
1363 MUIA_NListview_Vert_ScrollBar, MUIV_NListview_VSB_Always,
1364 MUIA_NListview_Horiz_ScrollBar, MUIV_NListview_HSB_None,
1365 MUIA_NListview_NList, data->mcp_listkeys = NListObject,
1366 MUIA_NList_Title,TRUE,
1367 MUIA_NList_DragSortable, TRUE,
1368 MUIA_NList_Format, "W=100 NOBAR,NOBAR,W=100 NOBAR",
1369 MUIA_NList_DisplayHook2, &DisplayHook,
1370 MUIA_NList_ConstructHook2, &ConstructHook,
1371 MUIA_NList_DestructHook2, &DestructHook,
1372 MUIA_NList_MinColSortable, 10,
1373 End,
1374 End,
1376 Child, GroupObject,MUIA_Group_Horiz,TRUE,
1378 Child, GroupObject,MUIA_Group_Horiz,TRUE,
1379 Child, data->mcp_stringkey,
1380 Child, data->mcp_snoopkey = ToggleButtonCycle(tr(MSG_SNOOP), FALSE, TRUE, tr(MSG_SNOOP_KEY)),
1381 End,
1383 Child, BalanceObject, End,
1385 Child, GroupObject,MUIA_Group_Horiz,TRUE,
1386 Child, TextObject, MUIA_Text_Contents, "=", MUIA_Text_SetMax, TRUE, End,
1387 Child, data->mcp_popstrfct = PopobjectObject,
1388 MUIA_InputMode, MUIV_InputMode_None,
1389 MUIA_Popstring_String, data->mcp_txtfct = TextObject,
1390 TextFrame,
1391 MUIA_Background, MUII_TextBack,
1392 MUIA_Text_Contents, " ",
1393 MUIA_UserData, -1,
1394 End,
1395 MUIA_Popstring_Button, PopButton(MUII_PopUp),
1396 MUIA_Popobject_StrObjHook, &StrObjHook,
1397 MUIA_Popobject_ObjStrHook, &ObjStrHook,
1398 MUIA_Popobject_WindowHook, &WindowHook,
1399 MUIA_Popobject_Object, data->mcp_poplistfct = ListviewObject,
1400 MUIA_Listview_List, ListObject,
1401 InputListFrame,
1402 MUIA_List_SourceArray, functions_names,
1403 End,
1404 End,
1405 End,
1406 End,
1408 End,
1410 Child, GroupObject,MUIA_Group_Horiz,TRUE,
1411 Child, data->mcp_insertkey = SimpleButtonCycle(tr(MSG_BUTTON_INSERT), tr(MSG_BUTTON_INSERT_HELP)),
1412 Child, data->mcp_removekey = SimpleButtonCycle(tr(MSG_BUTTON_REMOVE), tr(MSG_BUTTON_REMOVE_HELP)),
1413 Child, data->mcp_updatekeys = SimpleButtonCycle(tr(MSG_BUTTON_UPDATEKEYS), tr(MSG_BUTTON_UPDATEKEYS_HELP)),
1414 Child, data->mcp_defaultkeys = SimpleButtonCycle(tr(MSG_BUTTON_DEFAULTKEYS), tr(MSG_BUTTON_DEFAULTKEYS_HELP)),
1415 End,
1417 End;
1419 Pages[0] = tr(MSG_PAGE_FONTS);
1420 Pages[1] = tr(MSG_PAGE_COLORS);
1421 Pages[2] = tr(MSG_PAGE_SCROLLING);
1422 Pages[3] = tr(MSG_PAGE_OPTIONS);
1423 Pages[4] = tr(MSG_PAGE_KEYBINDINGS);
1425 data->mcp_group = VGroup,
1427 Child, RegisterObject,
1428 MUIA_Register_Titles, Pages,
1429 MUIA_Register_Frame, TRUE,
1430 Child, group1,
1431 Child, group2,
1432 Child, group3,
1433 Child, group4,
1434 Child, group5,
1435 End,
1437 Child, CrawlingObject,
1438 TextFrame,
1439 MUIA_FixHeightTxt, "\n\n",
1440 MUIA_Background, "m1",
1442 Child, TextObject,
1443 MUIA_Text_PreParse, "\033c",
1444 MUIA_Text_Contents, infotext,
1445 End,
1447 Child, TextObject,
1448 MUIA_Text_PreParse, "\033c",
1449 MUIA_Text_Contents, infotext,
1450 End,
1451 End,
1453 End;
1455 if(!data->mcp_group)
1457 CoerceMethod(cl, obj, OM_DISPOSE);
1458 return(0);
1461 DoMethod(obj, OM_ADDMEMBER, data->mcp_group);
1463 set(data->mcp_stringkey,MUIA_String_AttachedList,data->mcp_listkeys);
1464 set(data->mcp_listkeys,MUIA_UserData,data);
1466 DoMethod(data->mcp_listkeys,MUIM_Notify,MUIA_NList_Active, MUIV_EveryTime,
1467 data->mcp_listkeys, 3, MUIM_CallHook, &ActiveHook,data,MUIV_TriggerValue);
1469 DoMethod(data->mcp_listkeys,MUIM_Notify,MUIA_NList_DoubleClick, MUIV_EveryTime,
1470 MUIV_Notify_Window, 3, MUIM_Set, MUIA_Window_ActiveObject, data->mcp_stringkey);
1472 DoMethod(data->mcp_poplistfct,MUIM_Notify,MUIA_Listview_DoubleClick,TRUE,
1473 data->mcp_popstrfct,2,MUIM_Popstring_Close,TRUE);
1475 DoMethod(data->mcp_txtfct, MUIM_Notify, MUIA_Text_Contents, MUIV_EveryTime,
1476 data->mcp_listkeys, 3, MUIM_CallHook, &TxtFctHook,data->mcp_txtfct);
1478 DoMethod(data->mcp_snoopkey, MUIM_Notify, MUIA_Selected, TRUE,
1479 MUIV_Notify_Window, 3, MUIM_Set, MUIA_Window_ActiveObject, data->mcp_stringkey);
1481 DoMethod(data->mcp_snoopkey, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
1482 data->mcp_stringkey, 3, MUIM_Set, MUIA_HotkeyString_Snoop, MUIV_TriggerValue);
1484 DoMethod(data->mcp_stringkey, MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime,
1485 data->mcp_snoopkey, 3, MUIM_Set, MUIA_Selected, FALSE);
1487 DoMethod(data->mcp_stringkey, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime,
1488 data->mcp_listkeys, 3, MUIM_CallHook, &AckHook,data->mcp_stringkey);
1490 DoMethod(data->mcp_insertkey,MUIM_Notify, MUIA_Pressed, FALSE,
1491 data->mcp_listkeys, 3, MUIM_CallHook, &InsertHook);
1493 DoMethod(data->mcp_removekey,MUIM_Notify, MUIA_Pressed, FALSE,
1494 data->mcp_listkeys, 2,MUIM_NList_Remove,MUIV_NList_Remove_Active);
1496 DoMethod(data->mcp_defaultkeys,MUIM_Notify, MUIA_Pressed, FALSE,
1497 data->mcp_listkeys, 3, MUIM_CallHook, &DefaultHook);
1499 DoMethod(data->mcp_updatekeys,MUIM_Notify, MUIA_Pressed, FALSE,
1500 data->mcp_listkeys, 3, MUIM_CallHook, &UpdateHook);
1502 // in case we are running for a newer MUI version we can register
1503 // our mcc gadgets accordingly
1504 if(MUIMasterBase->lib_Version >= 20)
1506 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_PenTitle, MUICFG_NList_Pen_Title, 1, tr(MSG_TITLE_PEN_WIN));
1507 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_PenList, MUICFG_NList_Pen_List, 1, tr(MSG_LIST_PEN_WIN));
1508 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_PenSelect, MUICFG_NList_Pen_Select, 1, tr(MSG_SELECT_PEN_WIN));
1509 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_PenCursor, MUICFG_NList_Pen_Cursor, 1, tr(MSG_CURSOR_PEN_WIN));
1510 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_PenUnselCur, MUICFG_NList_Pen_UnselCur, 1, tr(MSG_UNSEL_PEN_WIN));
1511 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_PenInactive, MUICFG_NList_Pen_Inactive, 1, tr(MSG_INACT_PEN_WIN));
1513 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_BG_Title, MUICFG_NList_BG_Title, 1, tr(MSG_TITLE_BG_WIN));
1514 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_BG_List, MUICFG_NList_BG_List, 1, tr(MSG_LIST_BG_WIN));
1515 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_BG_Select, MUICFG_NList_BG_Select, 1, tr(MSG_SELECT_BG_WIN));
1516 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_BG_Cursor, MUICFG_NList_BG_Cursor, 1, tr(MSG_CURSOR_BG_WIN));
1517 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_BG_UnselCur, MUICFG_NList_BG_UnselCur, 1, tr(MSG_UNSEL_BG_WIN));
1518 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_BG_Inactive, MUICFG_NList_BG_Inactive, 1, tr(MSG_INACT_BG_WIN));
1520 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_Font, MUICFG_NList_Font, 1, tr(MSG_NORMAL_FONT));
1521 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_Font_Little, MUICFG_NList_Font_Little, 1, tr(MSG_SMALL_FONT));
1522 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_Font_Fixed, MUICFG_NList_Font_Fixed, 1, tr(MSG_FIXED_FONT));
1524 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_SL_VertInc, MUICFG_NList_VertInc, 1, tr(MSG_FONT_MARGIN));
1525 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_R_Drag, MUICFG_NList_DragType, 1, tr(MSG_DRAGDROP));
1527 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_R_Multi, MUICFG_NList_MultiSelect, 1, tr(MSG_MULTISELECT));
1529 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_R_VSB, MUICFG_NListview_VSB, 1, tr(MSG_SB_VERTICAL));
1530 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_R_HSB, MUICFG_NListview_HSB, 1, tr(MSG_SB_HORIZONTAL));
1532 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_B_Smooth, MUICFG_NList_Smooth, 1, tr(MSG_SMOOTH_SCROLLING));
1533 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_ForcePen, MUICFG_NList_ForcePen, 1, tr(MSG_FORCE_SELECT_PEN));
1534 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_ColWidthDrag, MUICFG_NList_ColWidthDrag, 1, tr(MSG_BALANCING_COLS));
1535 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_PartialCol, MUICFG_NList_PartialCol, 1, tr(MSG_PARTIAL_COL_MARK));
1536 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_List_Select, MUICFG_NList_List_Select, 1, tr(MSG_MULTISEL_MOVEACTIVE));
1537 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_NList_Menu, MUICFG_NList_Menu, 1, tr(MSG_BAR_CONTEXTMENU));
1538 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_PartialChar, MUICFG_NList_PartialChar, 1, tr(MSG_PARTIAL_CHARS_DRAWN));
1540 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_SerMouseFix, MUICFG_NList_SerMouseFix, 1, tr(MSG_SERMOUSE_FIX));
1541 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_listkeys, MUICFG_NList_Keys, 1, tr(MSG_PAGE_KEYBINDINGS));
1542 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_DragLines, MUICFG_NList_DragLines, 1, tr(MSG_DRAG_LINES));
1543 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_VerticalCenteredLines, MUICFG_NList_VCenteredLines, 1, tr(MSG_VERT_CENTERED));
1544 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_SelectPointer,MUICFG_NList_SelectPointer, 1, tr(MSG_SELECT_POINTER));
1546 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_WheelStep, MUICFG_NList_WheelStep, 1, tr(MSG_WHEEL_STEP));
1547 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_WheelFast, MUICFG_NList_WheelFast, 1, tr(MSG_WHEEL_FAST));
1548 DoMethod(obj, MUIM_Mccprefs_RegisterGadget, data->mcp_WheelMMB, MUICFG_NList_WheelMMB, 1, tr(MSG_MMB_FASTWHEEL));
1551 return ((IPTR)obj);
1554 static IPTR mNL_MCP_Dispose(struct IClass *cl, Object *obj, Msg msg)
1556 struct NListviews_MCP_Data *data = INST_DATA(cl, obj);
1558 if(data->exampleText != NULL)
1560 LONG i = 0;
1562 while(data->exampleText[i] != NULL)
1564 FreeVec(data->exampleText[i]);
1565 i++;
1568 FreeVec(data->exampleText);
1571 return DoSuperMethodA(cl, obj, msg);
1574 IPTR mNL_MCP_ConfigToGadgets(struct IClass *cl,Object *obj,struct MUIP_Settingsgroup_ConfigToGadgets *msg)
1576 struct NListviews_MCP_Data *data = INST_DATA(cl, obj);
1578 D(DBF_STARTUP, "configToGadgets");
1580 LOAD_DATASPEC(data->mcp_PenTitle, MUIA_Pendisplay_Spec, MUICFG_NList_Pen_Title, DEFAULT_PEN_TITLE);
1581 LOAD_DATASPEC(data->mcp_PenList, MUIA_Pendisplay_Spec, MUICFG_NList_Pen_List, DEFAULT_PEN_LIST);
1582 LOAD_DATASPEC(data->mcp_PenSelect, MUIA_Pendisplay_Spec, MUICFG_NList_Pen_Select, DEFAULT_PEN_SELECT);
1583 LOAD_DATASPEC(data->mcp_PenCursor, MUIA_Pendisplay_Spec, MUICFG_NList_Pen_Cursor, DEFAULT_PEN_CURSOR);
1584 LOAD_DATASPEC(data->mcp_PenUnselCur,MUIA_Pendisplay_Spec, MUICFG_NList_Pen_UnselCur,DEFAULT_PEN_UNSELCUR);
1585 LOAD_DATASPEC(data->mcp_PenInactive,MUIA_Pendisplay_Spec, MUICFG_NList_Pen_Inactive,DEFAULT_PEN_INACTIVE);
1587 LOAD_DATASPEC(data->mcp_BG_Title, MUIA_Imagedisplay_Spec,MUICFG_NList_BG_Title, DEFAULT_BG_TITLE);
1588 LOAD_DATASPEC(data->mcp_BG_List, MUIA_Imagedisplay_Spec,MUICFG_NList_BG_List, DEFAULT_BG_LIST);
1589 LOAD_DATASPEC(data->mcp_BG_Select, MUIA_Imagedisplay_Spec,MUICFG_NList_BG_Select, DEFAULT_BG_SELECT);
1590 LOAD_DATASPEC(data->mcp_BG_Cursor, MUIA_Imagedisplay_Spec,MUICFG_NList_BG_Cursor, DEFAULT_BG_CURSOR);
1591 LOAD_DATASPEC(data->mcp_BG_UnselCur,MUIA_Imagedisplay_Spec,MUICFG_NList_BG_UnselCur, DEFAULT_BG_UNSELCUR);
1592 LOAD_DATASPEC(data->mcp_BG_Inactive,MUIA_Imagedisplay_Spec,MUICFG_NList_BG_Inactive, DEFAULT_BG_INACTIVE);
1594 LOAD_DATALONG(data->mcp_SL_VertInc, MUIA_Numeric_Value, MUICFG_NList_VertInc, DEFAULT_VERT_INC);
1596 LOAD_DATALONG(data->mcp_B_Smooth, MUIA_Selected, MUICFG_NList_Smooth, DEFAULT_SMOOTHSCROLL);
1598 LOAD_DATAFONT(data->mcp_Font, MUICFG_NList_Font);
1599 LOAD_DATAFONT(data->mcp_Font_Little,MUICFG_NList_Font_Little);
1600 LOAD_DATAFONT(data->mcp_Font_Fixed, MUICFG_NList_Font_Fixed);
1603 LONG *ptrd;
1604 LONG num = DEFAULT_DRAGTYPE;
1605 if((ptrd = (LONG *) DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_NList_DragType)))
1607 if (*ptrd == MUIV_NList_DragType_Qualifier)
1608 num = 2;
1609 else if (*ptrd == MUIV_NList_DragType_Borders)
1610 num = 1;
1611 else
1612 num = 0;
1614 set(data->mcp_R_Drag,MUIA_Radio_Active, num);
1619 LONG *ptrd;
1620 LONG num = DEFAULT_CWD;
1621 if((ptrd = (LONG *) DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_NList_ColWidthDrag)))
1623 if (*ptrd <= 0)
1624 num = 0;
1625 else if (*ptrd == 2)
1626 num = 2;
1627 else
1628 num = 1;
1630 set(data->mcp_ColWidthDrag,MUIA_Radio_Active, num);
1634 LONG *ptrd;
1635 LONG num = DEFAULT_MULTISELECT;
1637 if((ptrd = (LONG *) DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_NList_MultiSelect)))
1638 num = *ptrd;
1640 if ((num & MUIV_NList_MultiSelect_MMB_On) == MUIV_NList_MultiSelect_MMB_On)
1642 set(data->mcp_B_MultiMMB, MUIA_Selected, TRUE);
1644 else
1646 set(data->mcp_B_MultiMMB, MUIA_Selected, FALSE);
1648 num &= 0x0007;
1649 if (num == MUIV_NList_MultiSelect_Always)
1650 num = 1;
1651 else
1652 num = 0;
1653 set(data->mcp_R_Multi,MUIA_Radio_Active, num);
1657 LONG *ptrd;
1658 LONG num = DEFAULT_HSB;
1660 if((ptrd = (LONG *) DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_NListview_HSB)))
1661 num = *ptrd;
1663 if ((num < 1) || (num > 4))
1664 num = DEFAULT_HSB;
1665 num--;
1667 set(data->mcp_R_HSB,MUIA_Radio_Active, num);
1671 LONG *ptrd;
1672 LONG num = DEFAULT_VSB;
1674 if((ptrd = (LONG *) DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_NListview_VSB)))
1675 num = *ptrd;
1677 if ((num < 1) || (num > 3))
1678 num = 1;
1679 num--;
1680 set(data->mcp_R_VSB,MUIA_Radio_Active, num);
1684 LONG *ptrd;
1685 LONG num = DEFAULT_FORCEPEN;
1686 if((ptrd = (LONG *) DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_NList_ForcePen)))
1688 if (*ptrd)
1689 num = TRUE;
1690 else
1691 num = FALSE;
1693 set(data->mcp_ForcePen, MUIA_Selected, num);
1696 LOAD_DATALONG(data->mcp_DragLines, MUIA_Numeric_Value, MUICFG_NList_DragLines, DEFAULT_DRAGLINES);
1697 LOAD_DATALONG(data->mcp_VerticalCenteredLines, MUIA_Selected, MUICFG_NList_VCenteredLines, DEFAULT_VCENTERED);
1698 LOAD_DATALONG(data->mcp_SelectPointer, MUIA_Selected, MUICFG_NList_SelectPointer, DEFAULT_SELECTPOINTER);
1699 LOAD_DATALONG(data->mcp_WheelStep, MUIA_Numeric_Value, MUICFG_NList_WheelStep, DEFAULT_WHEELSTEP);
1700 LOAD_DATALONG(data->mcp_WheelFast, MUIA_Numeric_Value, MUICFG_NList_WheelFast, DEFAULT_WHEELFAST);
1701 LOAD_DATALONG(data->mcp_WheelMMB, MUIA_Selected, MUICFG_NList_WheelMMB, DEFAULT_WHEELMMB);
1704 LONG *ptrd;
1705 LONG num = DEFAULT_SERMOUSEFIX;
1706 if((ptrd = (LONG *) DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_NList_SerMouseFix)))
1708 if (*ptrd)
1709 num = TRUE;
1710 else
1711 num = FALSE;
1713 set(data->mcp_SerMouseFix, MUIA_Selected, num);
1717 LONG *ptrd;
1718 LONG num = DEFAULT_LIST_SELECT;
1719 if((ptrd = (LONG *) DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_NList_List_Select)))
1721 if (*ptrd)
1722 num = TRUE;
1723 else
1724 num = FALSE;
1726 set(data->mcp_List_Select, MUIA_Selected, num);
1730 LONG *ptrd;
1731 LONG num = DEFAULT_PARTIALCOL;
1732 if((ptrd = (LONG *) DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_NList_PartialCol)))
1734 if (*ptrd)
1735 num = TRUE;
1736 else
1737 num = FALSE;
1739 set(data->mcp_PartialCol, MUIA_Selected, num);
1743 LONG *ptrd;
1744 LONG num = DEFAULT_PARTIALCHAR;
1745 if((ptrd = (LONG *) DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_NList_PartialChar)))
1747 if (*ptrd)
1748 num = TRUE;
1749 else
1750 num = FALSE;
1752 set(data->mcp_PartialChar, MUIA_Selected, num);
1756 LONG *ptrd;
1757 LONG num = DEFAULT_CMENU;
1758 if((ptrd = (LONG *)DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_NList_Menu)) != NULL)
1760 if(*ptrd == (LONG)MUIV_NList_ContextMenu_TopOnly)
1761 num = 1;
1762 else if(*ptrd == (LONG)MUIV_NList_ContextMenu_Never)
1763 num = 2;
1765 set(data->mcp_NList_Menu, MUIA_Radio_Active, num);
1769 LONG *ptrd;
1770 struct KeyBinding *keys = default_keys;
1772 if((ptrd = (LONG *) DoMethod(msg->configdata, MUIM_Dataspace_Find, MUICFG_NList_Keys)))
1773 keys = (struct KeyBinding *) ptrd;
1775 NL_LoadKeys(data->mcp_listkeys,keys);
1778 return(0);
1782 IPTR mNL_MCP_GadgetsToConfig(struct IClass *cl,Object *obj,struct MUIP_Settingsgroup_GadgetsToConfig *msg)
1784 struct NListviews_MCP_Data *data = INST_DATA(cl, obj);
1786 D(DBF_STARTUP, "GadgetsToConfig");
1788 SAVE_DATASPEC(data->mcp_PenTitle, MUIA_Pendisplay_Spec, MUICFG_NList_Pen_Title);
1789 SAVE_DATASPEC(data->mcp_PenList, MUIA_Pendisplay_Spec, MUICFG_NList_Pen_List);
1790 SAVE_DATASPEC(data->mcp_PenSelect, MUIA_Pendisplay_Spec, MUICFG_NList_Pen_Select);
1791 SAVE_DATASPEC(data->mcp_PenCursor, MUIA_Pendisplay_Spec, MUICFG_NList_Pen_Cursor);
1792 SAVE_DATASPEC(data->mcp_PenUnselCur,MUIA_Pendisplay_Spec, MUICFG_NList_Pen_UnselCur);
1793 SAVE_DATASPEC(data->mcp_PenInactive,MUIA_Pendisplay_Spec, MUICFG_NList_Pen_Inactive);
1795 SAVE_DATASPEC2(data->mcp_BG_Title, MUIA_Imagedisplay_Spec,MUICFG_NList_BG_Title);
1796 SAVE_DATASPEC2(data->mcp_BG_List, MUIA_Imagedisplay_Spec,MUICFG_NList_BG_List);
1797 SAVE_DATASPEC2(data->mcp_BG_Select, MUIA_Imagedisplay_Spec,MUICFG_NList_BG_Select);
1798 SAVE_DATASPEC2(data->mcp_BG_Cursor, MUIA_Imagedisplay_Spec,MUICFG_NList_BG_Cursor);
1799 SAVE_DATASPEC2(data->mcp_BG_UnselCur,MUIA_Imagedisplay_Spec,MUICFG_NList_BG_UnselCur);
1800 SAVE_DATASPEC2(data->mcp_BG_Inactive,MUIA_Imagedisplay_Spec,MUICFG_NList_BG_Inactive);
1802 SAVE_DATALONG(data->mcp_SL_VertInc, MUIA_Numeric_Value, MUICFG_NList_VertInc);
1804 SAVE_DATALONG(data->mcp_B_Smooth, MUIA_Selected, MUICFG_NList_Smooth);
1806 SAVE_DATAFONT(data->mcp_Font, MUICFG_NList_Font);
1807 SAVE_DATAFONT(data->mcp_Font_Little,MUICFG_NList_Font_Little);
1808 SAVE_DATAFONT(data->mcp_Font_Fixed, MUICFG_NList_Font_Fixed);
1811 LONG ptrd=0,num;
1812 get(data->mcp_R_Drag, MUIA_Radio_Active, &ptrd);
1813 if (ptrd == 2)
1814 num = MUIV_NList_DragType_Qualifier;
1815 else if (ptrd == 1)
1816 num = MUIV_NList_DragType_Borders;
1817 else
1818 num = MUIV_NList_DragType_Immediate;
1819 DoMethod(msg->configdata, MUIM_Dataspace_Add, &num, 8, MUICFG_NList_DragType);
1823 LONG ptrd=0,num;
1824 get(data->mcp_ColWidthDrag, MUIA_Radio_Active, &ptrd);
1825 num = ptrd;
1826 DoMethod(msg->configdata, MUIM_Dataspace_Add, &num, 8, MUICFG_NList_ColWidthDrag);
1830 LONG ptrd=0,num;
1831 get(data->mcp_R_Multi, MUIA_Radio_Active, &ptrd);
1832 if (ptrd == 1)
1833 num = MUIV_NList_MultiSelect_Always;
1834 else
1835 num = MUIV_NList_MultiSelect_Shifted;
1836 get(data->mcp_B_MultiMMB, MUIA_Selected, &ptrd);
1837 if (ptrd)
1838 num |= MUIV_NList_MultiSelect_MMB_On;
1839 else
1840 num |= MUIV_NList_MultiSelect_MMB_Off;
1841 DoMethod(msg->configdata, MUIM_Dataspace_Add, &num, 8, MUICFG_NList_MultiSelect);
1845 LONG ptrd=0,num;
1846 get(data->mcp_R_HSB, MUIA_Radio_Active, &ptrd);
1847 num = ptrd+1;
1848 DoMethod(msg->configdata, MUIM_Dataspace_Add, &num, 8, MUICFG_NListview_HSB);
1851 LONG ptrd=0,num;
1852 get(data->mcp_R_VSB, MUIA_Radio_Active, &ptrd);
1853 num = ptrd+1;
1854 DoMethod(msg->configdata, MUIM_Dataspace_Add, &num, 8, MUICFG_NListview_VSB);
1858 LONG ptrd=0,num;
1859 get(data->mcp_ForcePen, MUIA_Selected, &ptrd);
1860 if (ptrd)
1861 num = TRUE;
1862 else
1863 num = FALSE;
1864 DoMethod(msg->configdata, MUIM_Dataspace_Add, &num, 8, MUICFG_NList_ForcePen);
1867 SAVE_DATALONG(data->mcp_DragLines, MUIA_Numeric_Value, MUICFG_NList_DragLines);
1868 SAVE_DATALONG(data->mcp_VerticalCenteredLines, MUIA_Selected, MUICFG_NList_VCenteredLines);
1869 SAVE_DATALONG(data->mcp_SelectPointer,MUIA_Selected, MUICFG_NList_SelectPointer);
1870 SAVE_DATALONG(data->mcp_WheelStep, MUIA_Numeric_Value, MUICFG_NList_WheelStep);
1871 SAVE_DATALONG(data->mcp_WheelFast, MUIA_Numeric_Value, MUICFG_NList_WheelFast);
1872 SAVE_DATALONG(data->mcp_WheelMMB, MUIA_Selected, MUICFG_NList_WheelMMB);
1875 LONG ptrd=0,num;
1876 get(data->mcp_SerMouseFix, MUIA_Selected, &ptrd);
1877 if (ptrd)
1878 num = TRUE;
1879 else
1880 num = FALSE;
1881 DoMethod(msg->configdata, MUIM_Dataspace_Add, &num, 8, MUICFG_NList_SerMouseFix);
1885 LONG ptrd=0,num;
1886 get(data->mcp_List_Select, MUIA_Selected, &ptrd);
1887 if (ptrd)
1888 num = TRUE;
1889 else
1890 num = FALSE;
1891 DoMethod(msg->configdata, MUIM_Dataspace_Add, &num, 8, MUICFG_NList_List_Select);
1895 LONG ptrd=0,num;
1896 get(data->mcp_PartialCol, MUIA_Selected, &ptrd);
1897 if (ptrd)
1898 num = TRUE;
1899 else
1900 num = FALSE;
1901 DoMethod(msg->configdata, MUIM_Dataspace_Add, &num, 8, MUICFG_NList_PartialCol);
1905 LONG ptrd=0,num;
1906 get(data->mcp_PartialChar, MUIA_Selected, &ptrd);
1907 if (ptrd)
1908 num = TRUE;
1909 else
1910 num = FALSE;
1911 DoMethod(msg->configdata, MUIM_Dataspace_Add, &num, 8, MUICFG_NList_PartialChar);
1915 LONG ptrd=0,num = MUIV_NList_ContextMenu_Always;
1916 get(data->mcp_NList_Menu, MUIA_Radio_Active, &ptrd);
1917 if (ptrd == 1)
1918 num = MUIV_NList_ContextMenu_TopOnly;
1919 else if (ptrd == 2)
1920 num = MUIV_NList_ContextMenu_Never;
1921 DoMethod(msg->configdata, MUIM_Dataspace_Add, &num, 8, MUICFG_NList_Menu);
1925 LONG sk = NL_SaveKeys(data);
1926 if (sk > 0)
1927 { DoMethod(msg->configdata, MUIM_Dataspace_Add, data->nlkeys, sk, MUICFG_NList_Keys);
1928 FreeMem((void *) data->nlkeys,data->nlkeys_size+4);
1929 data->nlkeys = NULL;
1933 return(0);
1937 static IPTR mNL_MCP_Get(struct IClass *cl,Object *obj,Msg msg)
1939 IPTR *store = ((struct opGet *)msg)->opg_Storage;
1941 switch (((struct opGet *)msg)->opg_AttrID)
1943 case MUIA_Version:
1944 *store = LIB_VERSION;
1945 return(TRUE);
1946 break;
1947 case MUIA_Revision:
1948 *store = LIB_REVISION;
1949 return(TRUE);
1950 break;
1952 return (DoSuperMethodA(cl,obj,msg));
1955 DISPATCHER(_DispatcherP)
1957 switch (msg->MethodID)
1959 case OM_NEW: return(mNL_MCP_New(cl,obj,(APTR)msg));
1960 case OM_DISPOSE: return(mNL_MCP_Dispose(cl,obj,(APTR)msg));
1961 case OM_GET: return(mNL_MCP_Get(cl,obj,(APTR)msg));
1962 case MUIM_Settingsgroup_ConfigToGadgets: return(mNL_MCP_ConfigToGadgets(cl,obj,(APTR)msg));
1963 case MUIM_Settingsgroup_GadgetsToConfig: return(mNL_MCP_GadgetsToConfig(cl,obj,(APTR)msg));
1966 return(DoSuperMethodA(cl,obj,msg));