6 #define MUIMASTER_YES_INLINE_STDARG
14 #include <exec/types.h>
15 #include <exec/memory.h>
16 #include <exec/ports.h>
18 #include <exec/resident.h>
19 #include <utility/utility.h>
20 #include <libraries/dos.h>
21 #include <libraries/dosextens.h>
22 #include <libraries/gadtools.h>
23 #include <libraries/asl.h>
24 #include <libraries/mui.h>
25 #include <libraries/iffparse.h>
26 #include <devices/clipboard.h>
27 #include <workbench/workbench.h>
28 #include <workbench/icon.h>
29 #include <intuition/intuition.h>
30 #include <intuition/classusr.h>
31 #include <graphics/gfxmacros.h>
32 #include <prefs/prefhdr.h>
34 #include <clib/alib_protos.h>
38 #include <proto/exec.h>
39 #include <proto/dos.h>
40 #include <proto/icon.h>
41 #include <proto/graphics.h>
42 #include <proto/intuition.h>
43 #include <proto/gadtools.h>
44 #include <proto/utility.h>
45 #include <proto/asl.h>
46 #include <proto/locale.h>
47 #include <proto/iffparse.h>
50 #define NO_INLINE_STDARG
52 #include <proto/muimaster.h>
54 #include <mui/NListview_mcc.h>
55 #include <mui/Lamp_mcc.h>
56 #include <scalos/palette.h>
60 #include <scalos/scalosprefsplugin.h>
65 #include "PalettePrefs.h"
66 #include "DataTypesMCC.h"
68 #define ScalosPalette_NUMBERS
69 #define ScalosPalette_ARRAY
70 #define ScalosPalette_CODE
71 #include STR(SCALOSLOCALE)
75 //----------------------------------------------------------------------------
78 #define NewColorAdjustObject BOOPSIOBJMACRO_START(NewColorAdjustClass->mcc_Class)
79 #define NewPalettePenListObject BOOPSIOBJMACRO_START(NewPalettePenListClass->mcc_Class)
80 #define NewScalosPenListObject BOOPSIOBJMACRO_START(NewScalosPenListClass->mcc_Class)
81 #define myNListObject BOOPSIOBJMACRO_START(myNListClass->mcc_Class)
82 #define DataTypesImageObject BOOPSIOBJMACRO_START(DataTypesImageClass->mcc_Class)
84 #define NewColorAdjustObject NewObject(NewColorAdjustClass->mcc_Class, 0
85 #define NewPalettePenListObject NewObject(NewPalettePenListClass->mcc_Class, 0
86 #define NewScalosPenListObject NewObject(NewScalosPenListClass->mcc_Class, 0
87 #define myNListObject NewObject(myNListClass->mcc_Class, 0
88 #define DataTypesImageObject NewObject(DataTypesImageClass->mcc_Class, 0
91 //----------------------------------------------------------------------------
93 #define IMG(prefix1,PREFIX2) \
95 MUIA_FixWidth , PREFIX2##_WIDTH ,\
96 MUIA_FixHeight , PREFIX2##_HEIGHT,\
97 MUIA_Bitmap_Width , PREFIX2##_WIDTH ,\
98 MUIA_Bitmap_Height , PREFIX2##_HEIGHT,\
99 MUIA_Bodychunk_Depth , PREFIX2##_DEPTH ,\
100 MUIA_Bodychunk_Body , (UBYTE *) prefix1##_body,\
101 MUIA_Bodychunk_Compression, PREFIX2##_COMPRESSION,\
102 MUIA_Bodychunk_Masking , PREFIX2##_MASKING,\
103 MUIA_Bitmap_SourceColors , (ULONG *) prefix1##_colors,\
104 MUIA_Bitmap_Transparent , 0,\
107 //----------------------------------------------------------------------------
110 extern Object
*DoLoadDT(STRPTR source
, struct RastPort
*rast
,
111 struct ColorMap
*cmap
,
112 int x
, int y
, int w
, int h
,
113 ULONG FirstTag
, ...);
115 //----------------------------------------------------------------------------
117 // local data structures
119 #define KeyButtonHelp(name,key,HelpText)\
122 MUIA_CycleChain, TRUE, \
123 MUIA_Font, MUIV_Font_Button,\
124 MUIA_Text_Contents, name,\
125 MUIA_Text_PreParse, "\33c",\
126 MUIA_Text_HiChar , key,\
127 MUIA_ControlChar , key,\
128 MUIA_InputMode , MUIV_InputMode_RelVerify,\
129 MUIA_Background , MUII_ButtonBack,\
130 MUIA_ShortHelp, HelpText,\
133 #define CheckMarkHelp(selected, HelpTextID)\
136 MUIA_CycleChain , TRUE, \
137 MUIA_InputMode , MUIV_InputMode_Toggle,\
138 MUIA_Image_Spec , MUII_CheckMark,\
139 MUIA_Image_FreeVert , TRUE,\
140 MUIA_Selected , selected,\
141 MUIA_Background , MUII_ButtonBack,\
142 MUIA_ShowSelState , FALSE,\
143 MUIA_ShortHelp , GetLocString(HelpTextID),\
146 #define Application_Return_EDIT 0
147 #define Application_Return_USE 1001
148 #define Application_Return_SAVE 1002
150 #define ID_SPAL MAKE_ID('S','P','A','L')
151 #define ID_PENS MAKE_ID('P','E','N','S')
154 #define PEN_UNDEFINED (-1)
157 struct NewScalosPenListInst
159 ULONG nspl_fDragging
;
162 struct PensListConstruct
171 // Red,Green,Blue MUST be the very first entries!
172 // (used for MUIA_Coloradjust_RGB)
180 struct ScalosPenListEntry
184 CONST_STRPTR snle_PenName
;
201 static const LONG StopChunkList
[] =
207 //----------------------------------------------------------------------------
210 #if !defined(__amigaos4__) && !defined(__AROS__)
211 extern int _STI_240_InitMemFunctions(void);
212 extern void _STD_240_TerminateMemFunctions(void);
215 //----------------------------------------------------------------------------
219 DISPATCHER_PROTO(PalettePrefs
);
220 static BOOL
CreatePalettePrefsObject(struct PalettePrefsInst
*inst
, struct opSet
*ops
);
221 static void DisposePalettePrefsObject(struct PalettePrefsInst
*inst
);
222 static Object
*CreatePrefsGroup(struct PalettePrefsInst
*inst
);
223 static Object
*CreatePrefsImage(void);
224 static void InitHooks(struct PalettePrefsInst
*inst
);
226 static BOOL
OpenLibraries(void);
227 static void CloseLibraries(void);
228 static STRPTR
GetLocString(ULONG MsgId
);
229 static void TranslateNewMenu(struct NewMenu
*nm
);
230 //static void TranslateStringArray(STRPTR *stringArray);
231 DISPATCHER_PROTO(NewColorAdjust
);
232 DISPATCHER_PROTO(NewPalettePenList
);
233 DISPATCHER_PROTO(NewScalosPenList
);
234 static APTR
AllocatedPensListConstructFunc(struct Hook
*hook
, APTR memPool
, struct PensListEntry
*spleNew
);
235 static void AllocatedPensListDestructFunc(struct Hook
*hook
, APTR memPool
, APTR Entry
);
236 static ULONG
AllocatedPensListDisplayFunc(struct Hook
*hook
, Object
*obj
, struct NList_DisplayMessage
*ndm
);
237 static LONG
AllocatedPensListCompareFunc(struct Hook
*hook
, Object
*obj
, struct NList_CompareMessage
*ncm
);
238 static APTR
WBPensListConstructFunc(struct Hook
*hook
, APTR memPool
, struct PensListEntry
*spleNew
);
239 static void WBPensListDestructFunc(struct Hook
*hook
, APTR memPool
, APTR Entry
);
240 static ULONG
WBPensListDisplayFunc(struct Hook
*hook
, Object
*obj
, struct NList_DisplayMessage
*ndm
);
241 static LONG
WBPensListCompareFunc(struct Hook
*hook
, Object
*obj
, struct NList_CompareMessage
*ncm
);
242 static APTR
ScalosPenListConstructFunc(struct Hook
*hook
, APTR memPool
, struct ScalosPenListEntry
*msg
);
243 static void ScalosPenListDestructFunc(struct Hook
*hook
, APTR memPool
, APTR Entry
);
244 static ULONG
ScalosPenListDisplayFunc(struct Hook
*hook
, Object
*obj
, struct NList_DisplayMessage
*ndm
);
245 static LONG
ScalosPenListCompareFunc(struct Hook
*hook
, Object
*obj
, struct NList_CompareMessage
*ncm
);
246 static STRPTR
GetLocString(ULONG MsgId
);
247 static void GetWBColorsFunc(struct Hook
*hook
, Object
*pop
, Object
*win
);
248 static APTR
AddPenFunc(struct Hook
*hook
, Object
*o
, Msg msg
);
249 static APTR
SelectPalettePenFunc(struct Hook
*hook
, Object
*o
, Msg msg
);
250 static APTR
SelectScalosPenFunc(struct Hook
*hook
, Object
*o
, Msg msg
);
251 static APTR
ChangePenColorFunc(struct Hook
*hook
, Object
*o
, ULONG
**msg
);
252 static APTR
ResetToDefaultsFunc(struct Hook
*hook
, Object
*o
, Msg msg
);
253 static APTR
AboutFunc(struct Hook
*hook
, Object
*o
, Msg msg
);
254 static APTR
OpenFunc(struct Hook
*hook
, Object
*o
, Msg msg
);
255 static APTR
LastSavedFunc(struct Hook
*hook
, Object
*o
, Msg msg
);
256 static APTR
RestoreFunc(struct Hook
*hook
, Object
*o
, Msg msg
);
257 static APTR
SaveAsFunc(struct Hook
*hook
, Object
*o
, Msg msg
);
258 static APTR
DeletePenFunc(struct Hook
*hook
, Object
*o
, Msg msg
);
259 static APTR
ContextMenuTriggerHookFunc(struct Hook
*hook
, Object
*o
, Msg msg
);
260 static void AslIntuiMsgHookFunc(struct Hook
*hook
, Object
*o
, Msg msg
);
261 static void InitPenList(struct PalettePrefsInst
*inst
);
262 static LONG
ReadPrefsFile(struct PalettePrefsInst
*inst
, CONST_STRPTR Filename
, BOOL Quiet
);
263 static void SearchAndSetPen(struct PalettePrefsInst
*inst
, const struct ScalosPen
*sPen
);
264 static LONG
WritePrefsFile(struct PalettePrefsInst
*inst
, CONST_STRPTR Filename
);
265 static LONG
SaveIcon(struct PalettePrefsInst
*inst
, CONST_STRPTR IconName
);
266 static void UpdatePalettePenCount(struct PalettePrefsInst
*inst
);
267 static ULONG
GetPenReferenceCount(struct PalettePrefsInst
*inst
, ULONG PenNr
);
268 static void SetChangedFlag(struct PalettePrefsInst
*inst
, BOOL changed
);
269 DISPATCHER_PROTO(myNList
);
270 static LONG
ColorComp(ULONG Color1
, ULONG Color2
);
271 static LONG
RGBComp(const struct PensListEntry
*sple1
, const struct PensListEntry
*sple2
);
273 //----------------------------------------------------------------------------
277 struct Library
*MUIMasterBase
;
278 T_LOCALEBASE LocaleBase
;
279 struct GfxBase
*GfxBase
;
280 struct Library
*IconBase
;
281 struct Library
*IFFParseBase
;
282 T_UTILITYBASE UtilityBase
;
283 struct IntuitionBase
*IntuitionBase
;
284 struct Library
*DataTypesBase
;
286 #if defined(__GNUC__) && !defined(__amigaos4__)
287 extern T_UTILITYBASE __UtilityBase
;
288 #endif /* __GNUC__ */
291 struct Library
*DOSBase
;
292 struct DOSIFace
*IDOS
;
293 struct MUIMasterIFace
*IMUIMaster
;
294 struct LocaleIFace
*ILocale
;
295 struct GraphicsIFace
*IGraphics
;
296 struct IconIFace
*IIcon
;
297 struct IFFParseIFace
*IIFFParse
;
298 struct UtilityIFace
*IUtility
;
299 struct IntuitionIFace
*IIntuition
;
300 struct DataTypesIFace
*IDataTypes
;
301 struct Library
*NewlibBase
;
302 struct Interface
*INewlib
;
306 struct DosLibrary
*DOSBase
;
309 struct MUI_CustomClass
*NewColorAdjustClass
;
310 struct MUI_CustomClass
*NewPalettePenListClass
;
311 struct MUI_CustomClass
*NewScalosPenListClass
;
312 struct MUI_CustomClass
*myNListClass
;
313 struct MUI_CustomClass
*DataTypesImageClass
;
315 struct MUI_CustomClass
*PalettePrefsClass
;
317 static struct Catalog
*PalettePrefsCatalog
;
318 static struct Locale
*PalettePrefsLocale
;
320 static ULONG MajorVersion
, MinorVersion
;
322 static ULONG Signature
= 0x4711;
324 static const struct MUIP_ScalosPrefs_MCCList RequiredMccList
[] =
326 { MUIC_Lamp
, 11, 1 },
327 { MUIC_NListview
, 18, 0 },
331 static const struct Hook PalettePrefsHooks
[] =
333 { { NULL
, NULL
}, HOOKFUNC_DEF(WBPensListConstructFunc
), NULL
},
334 { { NULL
, NULL
}, HOOKFUNC_DEF(WBPensListDestructFunc
), NULL
},
335 { { NULL
, NULL
}, HOOKFUNC_DEF(WBPensListDisplayFunc
), NULL
},
336 { { NULL
, NULL
}, HOOKFUNC_DEF(WBPensListCompareFunc
), NULL
},
338 { { NULL
, NULL
}, HOOKFUNC_DEF(AllocatedPensListConstructFunc
), NULL
},
339 { { NULL
, NULL
}, HOOKFUNC_DEF(AllocatedPensListDestructFunc
), NULL
},
340 { { NULL
, NULL
}, HOOKFUNC_DEF(AllocatedPensListDisplayFunc
), NULL
},
341 { { NULL
, NULL
}, HOOKFUNC_DEF(AllocatedPensListCompareFunc
), NULL
},
343 { { NULL
, NULL
}, HOOKFUNC_DEF(ScalosPenListConstructFunc
), NULL
},
344 { { NULL
, NULL
}, HOOKFUNC_DEF(ScalosPenListDestructFunc
), NULL
},
345 { { NULL
, NULL
}, HOOKFUNC_DEF(ScalosPenListDisplayFunc
), NULL
},
346 { { NULL
, NULL
}, HOOKFUNC_DEF(ScalosPenListCompareFunc
), NULL
},
348 { { NULL
, NULL
}, HOOKFUNC_DEF(GetWBColorsFunc
), NULL
},
350 { { NULL
, NULL
}, HOOKFUNC_DEF(AddPenFunc
), NULL
},
351 { { NULL
, NULL
}, HOOKFUNC_DEF(SelectPalettePenFunc
), NULL
},
352 { { NULL
, NULL
}, HOOKFUNC_DEF(SelectScalosPenFunc
), NULL
},
353 { { NULL
, NULL
}, HOOKFUNC_DEF(ChangePenColorFunc
), NULL
},
354 { { NULL
, NULL
}, HOOKFUNC_DEF(ResetToDefaultsFunc
), NULL
},
355 { { NULL
, NULL
}, HOOKFUNC_DEF(AboutFunc
), NULL
},
356 { { NULL
, NULL
}, HOOKFUNC_DEF(OpenFunc
), NULL
},
357 { { NULL
, NULL
}, HOOKFUNC_DEF(LastSavedFunc
), NULL
},
358 { { NULL
, NULL
}, HOOKFUNC_DEF(RestoreFunc
), NULL
},
359 { { NULL
, NULL
}, HOOKFUNC_DEF(SaveAsFunc
), NULL
},
360 { { NULL
, NULL
}, HOOKFUNC_DEF(DeletePenFunc
), NULL
},
361 { { NULL
, NULL
}, HOOKFUNC_DEF(ContextMenuTriggerHookFunc
), NULL
},
362 { { NULL
, NULL
}, HOOKFUNC_DEF(AslIntuiMsgHookFunc
), NULL
},
366 static struct NewMenu ContextMenus
[] =
368 { NM_TITLE
, (STRPTR
) MSGID_TITLENAME
, NULL
, 0, 0, NULL
},
369 { NM_ITEM
, (STRPTR
) MSGID_MENU_PROJECT_OPEN
, (STRPTR
) MSGID_MENU_PROJECT_OPEN_SHORT
, 0, 0, (APTR
) HOOKNDX_Open
},
370 { NM_ITEM
, (STRPTR
) MSGID_MENU_PROJECT_SAVEAS
, (STRPTR
) MSGID_MENU_PROJECT_SAVEAS_SHORT
, 0, 0, (APTR
) HOOKNDX_SaveAs
},
371 { NM_ITEM
, NM_BARLABEL
, NULL
, 0, 0, NULL
},
372 { NM_ITEM
, (STRPTR
) MSGID_MENU_PROJECT_ABOUT
, NULL
, 0, 0, (APTR
) HOOKNDX_About
},
374 { NM_END
, NULL
, NULL
, 0, 0, 0,},
377 static const struct PenListInit PenListContents
[] =
379 { TEXTPEN
, 1, MSGID_TEXTPEN
},
380 { SHINEPEN
, 2, MSGID_SHINEPEN
},
381 { SHADOWPEN
, 1, MSGID_SHADOWPEN
},
382 { FILLPEN
, 3, MSGID_HIFILLPEN
},
383 { FILLTEXTPEN
, 1, MSGID_FILLTEXTPEN
},
384 { BACKGROUNDPEN
, 0, MSGID_BGPEN
},
385 { HIGHLIGHTTEXTPEN
, 2, MSGID_HITEXTPEN
},
386 { BARDETAILPEN
, 1, MSGID_BARDETAILPEN
},
387 { BARBLOCKPEN
, 2, MSGID_BARBLOCKPEN
},
388 { BARTRIMPEN
, 1, MSGID_BARTRIMPEN
},
390 { -1, 5, MSGID_HSHINEPEN
},
391 { -2, 4, MSGID_HSHADOWPEN
},
392 { -18, 1, MSGID_ICONTEXTPEN
},
393 { -19, 1, MSGID_ICONTEXTPENSEL
},
394 { -3, 1, MSGID_ICONTEXTOUTLINEPEN
},
395 { -20, 1, MSGID_ICONTEXTSHADOWPEN
},
396 { -23, 3, MSGID_ICONTEXTFILESELBG
},
397 { -4, 3, MSGID_DRAWERTEXT
},
398 { -5, 2, MSGID_DRAWERTEXTSEL
},
399 { -6, 3, MSGID_DRAWERBG
},
400 { -7, 1, MSGID_FILETEXT
},
401 { -8, 2, MSGID_FILETEXTSEL
},
402 { -9, 1, MSGID_FILEBG
},
403 { -10, 0, MSGID_BACKDROPDETAIL
},
404 { -11, 0, MSGID_BACKDROPBLOCK
},
405 { -12, 1, MSGID_TOOLTIP_TEXT
},
406 { -13, 2, MSGID_TOOLTIP_BG
},
407 { -14, 1, MSGID_DRAGINFO_TEXT
},
408 { -15, 2, MSGID_DRAGINFO_BG
},
409 { -16, 4, MSGID_STATUSBAR_BG
},
410 { -17, 1, MSGID_STATUSBAR_TEXT
},
411 { -21, 4, MSGID_THUMBNAIL_BG
},
412 { -22, 4, MSGID_THUMBNAIL_BG_SEL
},
416 static const struct PensListEntry DefaultPaletteEntries
[] =
418 { 0x95959595, 0x95959595, 0x95959595, 0 },
419 { 0x00000000, 0x00000000, 0x00000000, 1 },
420 { 0xffffffff, 0xffffffff, 0xffffffff, 2 },
421 { 0x56565656, 0x7e7e7e7e, 0xa2a2a2a2, 3 },
422 { 0x7b7b7b7b, 0x7b7b7b7b, 0x7b7b7b7b, 4 },
423 { 0xafafafaf, 0xafafafaf, 0xafafafaf, 5 },
424 { 0xaaaaaaaa, 0x90909090, 0x7c7c7c7c, 6 },
425 { 0xffffffff, 0xa9a9a9a9, 0x97979797, 7 },
428 //---------------------------------------------------------------
430 VOID
closePlugin(struct PluginBase
*PluginBase
)
432 d1(kprintf(__FUNC__
"/%ld:\n", __LINE__
));
434 if (DataTypesImageClass
)
436 CleanupDtpicClass(DataTypesImageClass
);
437 DataTypesImageClass
= NULL
;
441 MUI_DeleteCustomClass(myNListClass
);
445 if (NewColorAdjustClass
)
447 MUI_DeleteCustomClass(NewColorAdjustClass
);
448 NewColorAdjustClass
= NULL
;
450 if (NewScalosPenListClass
)
452 MUI_DeleteCustomClass(NewScalosPenListClass
);
453 NewScalosPenListClass
= NULL
;
455 if (NewPalettePenListClass
)
457 MUI_DeleteCustomClass(NewPalettePenListClass
);
458 NewPalettePenListClass
= NULL
;
461 if (PalettePrefsCatalog
)
463 CloseCatalog(PalettePrefsCatalog
);
464 PalettePrefsCatalog
= NULL
;
466 if (PalettePrefsLocale
)
468 CloseLocale(PalettePrefsLocale
);
469 PalettePrefsLocale
= NULL
;
472 if (PalettePrefsClass
)
474 MUI_DeleteCustomClass(PalettePrefsClass
);
475 PalettePrefsClass
= NULL
;
480 #if !defined(__amigaos4__) && !defined(__AROS__)
481 _STD_240_TerminateMemFunctions();
486 LIBFUNC_P2(ULONG
, LIBSCAGetPrefsInfo
,
488 A6
, struct PluginBase
*, PluginBase
);
492 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: which=%ld\n", __LINE__
, which
));
498 case SCAPREFSINFO_GetClass
:
499 result
= (ULONG
) PalettePrefsClass
;
502 case SCAPREFSINFO_GetTitle
:
503 result
= (ULONG
) GetLocString(MSGID_PLUGIN_LIST_TITLE
);
506 case SCAPREFSINFO_GetTitleImage
:
507 result
= (ULONG
) CreatePrefsImage();
515 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: Result=%08lx\n", __LINE__
, result
));
521 //----------------------------------------------------------------------------
523 DISPATCHER(PalettePrefs
)
525 struct PalettePrefsInst
*inst
;
528 d1(kprintf("%s/%s/%ld: START\n", __FILE__
, __FUNC__
, __LINE__
));
530 switch(msg
->MethodID
)
533 obj
= (Object
*) DoSuperMethodA(cl
, obj
, msg
);
534 d1(kprintf("%s/%s/%ld: obj=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, obj
));
537 Object
*prefsobject
= NULL
;
539 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
541 memset(inst
, 0, sizeof(struct PalettePrefsInst
));
543 if (CreatePalettePrefsObject(inst
, (struct opSet
*) msg
))
545 prefsobject
= CreatePrefsGroup(inst
);
546 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: prefsobject=%08lx\n", __LINE__
, prefsobject
));
550 DoMethod(obj
, OM_ADDMEMBER
, prefsobject
);
552 result
= (ULONG
) obj
;
556 CoerceMethod(cl
, obj
, OM_DISPOSE
);
562 DisposePalettePrefsObject((struct PalettePrefsInst
*) INST_DATA(cl
, obj
));
563 d1(kprintf("%s/%d/%ld: PalettePrefsCatalog=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, PalettePrefsCatalog
));
564 return DoSuperMethodA(cl
, obj
, msg
);
569 struct opSet
*ops
= (struct opSet
*) msg
;
571 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
572 inst
->ppb_fCreateIcons
= GetTagData(MUIA_ScalosPrefs_CreateIcons
, inst
->ppb_fCreateIcons
, ops
->ops_AttrList
);
573 inst
->ppb_ProgramName
= (CONST_STRPTR
) GetTagData(MUIA_ScalosPrefs_ProgramName
, (ULONG
) inst
->ppb_ProgramName
, ops
->ops_AttrList
);
574 inst
->ppb_Objects
[OBJNDX_WIN_Main
] = (APTR
) GetTagData(MUIA_ScalosPrefs_MainWindow
,
575 (ULONG
) inst
->ppb_Objects
[OBJNDX_WIN_Main
], ops
->ops_AttrList
);
576 inst
->ppb_Objects
[OBJNDX_APP_Main
] = (APTR
) GetTagData(MUIA_ScalosPrefs_Application
,
577 (ULONG
) inst
->ppb_Objects
[OBJNDX_APP_Main
], ops
->ops_AttrList
);
579 return DoSuperMethodA(cl
, obj
, msg
);
585 struct opGet
*opg
= (struct opGet
*) msg
;
587 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
588 switch (opg
->opg_AttrID
)
590 case MUIA_ScalosPrefs_CreateIcons
:
591 *opg
->opg_Storage
= inst
->ppb_fCreateIcons
;
595 result
= DoSuperMethodA(cl
, obj
, msg
);
600 case MUIM_ScalosPrefs_LoadConfig
:
601 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
602 if (RETURN_OK
!= ReadPrefsFile(inst
, "ENV:Scalos/Palette13.prefs", TRUE
))
603 ReadPrefsFile(inst
, "ENV:Scalos/Palette13.prefs", FALSE
);
604 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: \n", __LINE__
));
605 SetChangedFlag(inst
, FALSE
);
608 case MUIM_ScalosPrefs_UseConfig
:
609 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
610 WritePrefsFile(inst
, "ENV:Scalos/Palette13.prefs");
613 case MUIM_ScalosPrefs_UseConfigIfChanged
:
614 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
615 if (inst
->ppb_Changed
)
617 WritePrefsFile(inst
, "ENV:Scalos/Palette13.prefs");
618 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: \n", __LINE__
));
619 SetChangedFlag(inst
, FALSE
);
623 case MUIM_ScalosPrefs_SaveConfig
:
624 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
625 WritePrefsFile(inst
, "ENVARC:Scalos/Palette13.prefs");
626 WritePrefsFile(inst
, "ENV:Scalos/Palette13.prefs");
627 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: \n", __LINE__
));
628 SetChangedFlag(inst
, FALSE
);
631 case MUIM_ScalosPrefs_SaveConfigIfChanged
:
632 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
633 if (inst
->ppb_Changed
)
635 WritePrefsFile(inst
, "ENVARC:Scalos/Palette13.prefs");
636 WritePrefsFile(inst
, "ENV:Scalos/Palette13.prefs");
637 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: \n", __LINE__
));
638 SetChangedFlag(inst
, FALSE
);
642 case MUIM_ScalosPrefs_RestoreConfig
:
643 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
644 DoMethod(obj
, MUIM_CallHook
, &inst
->ppb_Hooks
[HOOKNDX_Restore
], 0);
647 case MUIM_ScalosPrefs_ResetToDefaults
:
648 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
649 DoMethod(obj
, MUIM_CallHook
, &inst
->ppb_Hooks
[HOOKNDX_ResetToDefaults
], 0);
652 case MUIM_ScalosPrefs_LastSavedConfig
:
653 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
654 DoMethod(obj
, MUIM_CallHook
, &inst
->ppb_Hooks
[HOOKNDX_LastSaved
], 0);
657 case MUIM_ScalosPrefs_OpenConfig
:
658 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
659 DoMethod(obj
, MUIM_CallHook
, &inst
->ppb_Hooks
[HOOKNDX_Open
], 0);
662 case MUIM_ScalosPrefs_SaveConfigAs
:
663 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
664 DoMethod(obj
, MUIM_CallHook
, &inst
->ppb_Hooks
[HOOKNDX_SaveAs
], 0);
667 case MUIM_ScalosPrefs_About
:
668 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
669 DoMethod(obj
, MUIM_CallHook
, &inst
->ppb_Hooks
[HOOKNDX_About
], 0);
672 case MUIM_ScalosPrefs_LoadNamedConfig
:
674 struct MUIP_ScalosPrefs_LoadNamedConfig
*lnc
= (struct MUIP_ScalosPrefs_LoadNamedConfig
*) msg
;
676 inst
= (struct PalettePrefsInst
*) INST_DATA(cl
, obj
);
677 ReadPrefsFile(inst
, lnc
->ConfigFileName
, FALSE
);
681 case MUIM_ScalosPrefs_CreateSubWindows
:
685 case MUIM_ScalosPrefs_GetListOfMCCs
:
686 result
= (ULONG
) RequiredMccList
;
690 d1(kprintf("%s/%s/%ld: MethodID=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, msg
->MethodID
));
691 result
= DoSuperMethodA(cl
, obj
, msg
);
695 d1(kprintf("%s/%d/%ld/%ld: END result=%ld\n", __FILE__
, __FUNC__
, __LINE__
, result
));
701 //----------------------------------------------------------------------------
703 static BOOL
CreatePalettePrefsObject(struct PalettePrefsInst
*inst
, struct opSet
*ops
)
705 BOOL Success
= FALSE
;
708 memset(inst
, 0, sizeof(struct PalettePrefsInst
));
710 inst
->ppb_Changed
= FALSE
;
711 inst
->ppb_fPreview
= TRUE
;
712 inst
->ppb_fAutoPreview
= FALSE
;
713 inst
->ppb_fDontChange
= FALSE
;
714 inst
->ppb_PalettePrecision
= PRECISION_IMAGE
;
715 inst
->ppb_PreviewWeight
= 20;
716 inst
->ppb_AllocatedPensListImageIndex
= 1;
720 inst
->ppb_fCreateIcons
= GetTagData(MUIA_ScalosPrefs_CreateIcons
, TRUE
, ops
->ops_AttrList
);
721 inst
->ppb_ProgramName
= (CONST_STRPTR
) GetTagData(MUIA_ScalosPrefs_ProgramName
, (ULONG
) "", ops
->ops_AttrList
);
722 inst
->ppb_Objects
[OBJNDX_WIN_Main
] = (APTR
) GetTagData(MUIA_ScalosPrefs_MainWindow
, (ULONG
) NULL
, ops
->ops_AttrList
);
723 inst
->ppb_Objects
[OBJNDX_APP_Main
] = (APTR
) GetTagData(MUIA_ScalosPrefs_Application
, (ULONG
) NULL
, ops
->ops_AttrList
);
725 inst
->ppb_WBScreen
= LockPubScreen("Workbench");
726 if (NULL
== inst
->ppb_WBScreen
)
736 static void DisposePalettePrefsObject(struct PalettePrefsInst
*inst
)
738 if (inst
->ppb_WBScreen
)
740 UnlockPubScreen(NULL
, inst
->ppb_WBScreen
);
741 inst
->ppb_WBScreen
= NULL
;
743 if (inst
->ppb_LoadReq
)
745 MUI_FreeAslRequest(inst
->ppb_LoadReq
);
746 inst
->ppb_LoadReq
= NULL
;
748 if (inst
->ppb_SaveReq
)
750 MUI_FreeAslRequest(inst
->ppb_SaveReq
);
751 inst
->ppb_SaveReq
= NULL
;
753 if (inst
->ppb_Objects
[OBJNDX_ContextMenu
])
755 MUI_DisposeObject(inst
->ppb_Objects
[OBJNDX_ContextMenu
]);
756 inst
->ppb_Objects
[OBJNDX_ContextMenu
] = NULL
;
761 static Object
*CreatePrefsGroup(struct PalettePrefsInst
*inst
)
763 d1(kprintf(__FUNC__
"/%ld: inst=%08lx\n", __LINE__
, inst
));
765 inst
->ppb_Objects
[OBJNDX_ContextMenu
] = MUI_MakeObject(MUIO_MenustripNM
, ContextMenus
, 0);
767 if (NULL
== inst
->ppb_Objects
[OBJNDX_ContextMenu
])
770 inst
->ppb_Objects
[OBJNDX_Group_Main
] = VGroup
,
771 MUIA_Background
, MUII_PageBack
,
776 MUIA_Font
, MUIV_Font_Title
,
778 MUIA_Background
, MUII_GroupBack
,
779 MUIA_Text_PreParse
, "\33c",
780 MUIA_Text_Contents
, GetLocString(MSGID_TITLE_SCALOSPENLIST
),
781 End
, //NListviewObject
783 Child
, NListviewObject
,
784 MUIA_CycleChain
, TRUE
,
785 MUIA_Listview_Input
, TRUE
,
786 MUIA_Listview_DragType
, MUIV_Listview_DragType_Immediate
,
787 MUIA_NListview_NList
, inst
->ppb_Objects
[OBJNDX_ScalosPenList
] = NewScalosPenListObject
,
788 MUIA_NList_PrivateData
, inst
,
790 MUIA_Background
, MUII_ListBack
,
791 MUIA_NList_Format
, "BAR D=8 P=\x1br,BAR D=8 P=\x1br,,",
792 MUIA_NList_DisplayHook2
, &inst
->ppb_Hooks
[HOOKNDX_ScalosPenListDisplay
],
793 MUIA_NList_ConstructHook
, &inst
->ppb_Hooks
[HOOKNDX_ScalosPenListConstruct
],
794 MUIA_NList_DestructHook
, &inst
->ppb_Hooks
[HOOKNDX_ScalosPenListDestruct
],
795 MUIA_NList_CompareHook2
, &inst
->ppb_Hooks
[HOOKNDX_ScalosPenListCompare
],
796 MUIA_NList_DragSortable
, TRUE
,
797 MUIA_NList_ShowDropMarks
, TRUE
,
798 MUIA_NList_AutoVisible
, TRUE
,
799 MUIA_NList_EntryValueDependent
, TRUE
,
800 MUIA_NList_Title
, TRUE
,
801 MUIA_NList_TitleSeparator
, TRUE
,
802 MUIA_NList_SortType
, 2,
803 MUIA_NList_TitleMark
, MUIV_NList_TitleMark_Down
| 2,
804 MUIA_ContextMenu
, inst
->ppb_Objects
[OBJNDX_ContextMenu
],
806 MUIA_ShortHelp
, GetLocString(MSGID_SHORTHELP_SCALOSPENLIST
),
807 End
, //NListviewObject
810 Child
, BalanceObject
,
814 Child
, inst
->ppb_Objects
[OBJNDX_AllocatedPensListTitleObj
] = TextObject
,
815 MUIA_Font
, MUIV_Font_Title
,
817 MUIA_Background
, MUII_GroupBack
,
818 MUIA_Text_PreParse
, "\33c",
819 MUIA_Text_Contents
, inst
->ppb_PalettePenListTitle
,
822 Child
, NListviewObject
,
823 MUIA_Listview_Input
, TRUE
,
824 MUIA_CycleChain
, TRUE
,
825 MUIA_Listview_DragType
, MUIV_Listview_DragType_Immediate
,
826 MUIA_NListview_NList
, inst
->ppb_Objects
[OBJNDX_AllocatedPensList
] = NewPalettePenListObject
,
827 MUIA_NList_PrivateData
, inst
,
830 MUIA_Background
, MUII_ListBack
,
831 MUIA_NList_Format
, "BAR D=8 P=\x1br,BAR D=8 P=\x1br,BAR P=\x1br,NOBAR D=8 P=\x1br,NOBAR D=8 P=\x1br,NOBAR D=8 P=\x1br",
832 MUIA_NList_DisplayHook2
, &inst
->ppb_Hooks
[HOOKNDX_AllocatedPensListDisplay
],
833 MUIA_NList_ConstructHook
, &inst
->ppb_Hooks
[HOOKNDX_AllocatedPensListConstruct
],
834 MUIA_NList_DestructHook
, &inst
->ppb_Hooks
[HOOKNDX_AllocatedPensListDestruct
],
835 MUIA_NList_CompareHook2
, &inst
->ppb_Hooks
[HOOKNDX_AllocatedPensListCompare
],
836 MUIA_NList_DragSortable
, TRUE
,
837 MUIA_NList_ShowDropMarks
, TRUE
,
838 MUIA_NList_AutoVisible
, TRUE
,
839 MUIA_NList_EntryValueDependent
, TRUE
,
840 MUIA_NList_Title
, TRUE
,
841 MUIA_NList_TitleSeparator
, TRUE
,
842 MUIA_NList_SortType
, 0,
843 MUIA_NList_TitleMark
, MUIV_NList_TitleMark_Down
| 0,
844 MUIA_ContextMenu
, inst
->ppb_Objects
[OBJNDX_ContextMenu
],
845 End
, //NewPalettePenListClass
846 MUIA_ShortHelp
, GetLocString(MSGID_SHORTHELP_PALETTEPENLIST
),
847 End
, //NListviewObject
850 Child
, inst
->ppb_Objects
[OBJNDX_Lamp_Changed
] = LampObject
,
851 MUIA_Lamp_Type
, MUIV_Lamp_Type_Huge
,
852 MUIA_Lamp_Color
, MUIV_Lamp_Color_Off
,
853 MUIA_ShortHelp
, GetLocString(MSGID_SHORTHELP_LAMP_CHANGED
),
857 MUIA_Group_SameSize
, TRUE
,
858 Child
, inst
->ppb_Objects
[OBJNDX_NewButton
] = KeyButtonHelp(GetLocString(MSGID_NEW
), 'n', GetLocString(MSGID_SHORTHELP_NEWBUTTON
)),
859 Child
, inst
->ppb_Objects
[OBJNDX_DeleteButton
] = KeyButtonHelp(GetLocString(MSGID_DELETE
), 'd', GetLocString(MSGID_SHORTHELP_DELETEBUTTON
)),
863 Child
, BalanceObject
,
866 Child
, inst
->ppb_Objects
[OBJNDX_ColorAdjust
] = NewColorAdjustObject
,
868 End
, //NewColorAdjustClass
870 Child
, PopobjectObject
,
871 MUIA_Popstring_String
, TextObject
,
872 MUIA_CycleChain
, TRUE
,
873 MUIA_Background
, MUII_GroupBack
,
875 MUIA_Text_Contents
, GetLocString(MSGID_IMPORTNAME
),
876 MUIA_Text_PreParse
, "\33c",
878 MUIA_Popstring_Button
, PopButton(MUII_PopUp
),
879 MUIA_ShortHelp
, GetLocString(MSGID_SHORTHELP_WBPENSBUTTON
),
880 MUIA_Popobject_WindowHook
, &inst
->ppb_Hooks
[HOOKNDX_GetWBColors
],
881 MUIA_Popobject_Object
, NListviewObject
,
882 MUIA_Listview_Input
, TRUE
,
883 MUIA_Listview_DragType
, MUIV_Listview_DragType_Immediate
,
884 MUIA_Listview_MultiSelect
, TRUE
,
885 MUIA_CycleChain
, TRUE
,
886 MUIA_ShortHelp
, GetLocString(MSGID_SHORTHELP_WBPENLIST
),
887 MUIA_NListview_NList
, inst
->ppb_Objects
[OBJNDX_WBColorsList
] = myNListObject
,
888 MUIA_NList_PrivateData
, inst
,
890 MUIA_Background
, MUII_ListBack
,
891 MUIA_NList_Format
, "BAR D=8 P=\x1br,BAR D=8 P=\x1br,NOBAR D=8 P=\x1br,NOBAR D=8 P=\x1br,NOBAR D=8 P=\x1br",
892 MUIA_NList_DisplayHook2
, &inst
->ppb_Hooks
[HOOKNDX_WBPensListDisplay
],
893 MUIA_NList_ConstructHook
, &inst
->ppb_Hooks
[HOOKNDX_WBPensListConstruct
],
894 MUIA_NList_DestructHook
, &inst
->ppb_Hooks
[HOOKNDX_WBPensListDestruct
],
895 MUIA_NList_CompareHook2
, &inst
->ppb_Hooks
[HOOKNDX_WBPensListCompare
],
896 MUIA_NList_ShowDropMarks
, TRUE
,
897 MUIA_NList_AutoVisible
, TRUE
,
898 MUIA_NList_Title
, TRUE
,
899 MUIA_NList_TitleSeparator
, TRUE
,
900 MUIA_NList_SortType
, 0,
901 MUIA_NList_TitleMark
, MUIV_NList_TitleMark_Down
| 0,
902 MUIA_NList_EntryValueDependent
, TRUE
,
903 MUIA_ContextMenu
, inst
->ppb_Objects
[OBJNDX_ContextMenu
],
904 End
, //inst->ppb_myNListClass
905 End
, //NListviewObject
906 End
, //PopobjectObject
910 MUIA_ContextMenu
, inst
->ppb_Objects
[OBJNDX_ContextMenu
],
913 if (NULL
== inst
->ppb_Objects
[OBJNDX_Group_Main
])
917 UpdatePalettePenCount(inst
);
919 set(inst
->ppb_Objects
[OBJNDX_DeleteButton
], MUIA_Disabled
, TRUE
);
921 // setup sorting hooks for OBJNDX_ScalosPenList list
922 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_Notify
, MUIA_NList_TitleClick
, MUIV_EveryTime
,
923 inst
->ppb_Objects
[OBJNDX_ScalosPenList
], 4, MUIM_NList_Sort3
, MUIV_TriggerValue
, MUIV_NList_SortTypeAdd_2Values
, MUIV_NList_Sort3_SortType_Both
);
924 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_Notify
, MUIA_NList_TitleClick2
, MUIV_EveryTime
,
925 inst
->ppb_Objects
[OBJNDX_ScalosPenList
], 4, MUIM_NList_Sort3
, MUIV_TriggerValue
, MUIV_NList_SortTypeAdd_2Values
, MUIV_NList_Sort3_SortType_2
);
926 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_Notify
, MUIA_NList_SortType
, MUIV_EveryTime
,
927 inst
->ppb_Objects
[OBJNDX_ScalosPenList
], 3, MUIM_Set
, MUIA_NList_TitleMark
, MUIV_TriggerValue
);
928 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_Notify
, MUIA_NList_SortType2
, MUIV_EveryTime
,
929 inst
->ppb_Objects
[OBJNDX_ScalosPenList
], 3, MUIM_Set
, MUIA_NList_TitleMark2
, MUIV_TriggerValue
);
931 // setup sorting hooks for OBJNDX_AllocatedPensList list
932 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_Notify
, MUIA_NList_TitleClick
, MUIV_EveryTime
,
933 inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], 4, MUIM_NList_Sort3
, MUIV_TriggerValue
, MUIV_NList_SortTypeAdd_2Values
, MUIV_NList_Sort3_SortType_Both
);
934 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_Notify
, MUIA_NList_TitleClick2
, MUIV_EveryTime
,
935 inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], 4, MUIM_NList_Sort3
, MUIV_TriggerValue
, MUIV_NList_SortTypeAdd_2Values
, MUIV_NList_Sort3_SortType_2
);
936 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_Notify
, MUIA_NList_SortType
, MUIV_EveryTime
,
937 inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], 3, MUIM_Set
, MUIA_NList_TitleMark
, MUIV_TriggerValue
);
938 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_Notify
, MUIA_NList_SortType2
, MUIV_EveryTime
,
939 inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], 3, MUIM_Set
, MUIA_NList_TitleMark2
, MUIV_TriggerValue
);
941 // setup sorting hooks for OBJNDX_WBColorsList list
942 DoMethod(inst
->ppb_Objects
[OBJNDX_WBColorsList
], MUIM_Notify
, MUIA_NList_TitleClick
, MUIV_EveryTime
,
943 inst
->ppb_Objects
[OBJNDX_WBColorsList
], 4, MUIM_NList_Sort3
, MUIV_TriggerValue
, MUIV_NList_SortTypeAdd_2Values
, MUIV_NList_Sort3_SortType_Both
);
944 DoMethod(inst
->ppb_Objects
[OBJNDX_WBColorsList
], MUIM_Notify
, MUIA_NList_TitleClick2
, MUIV_EveryTime
,
945 inst
->ppb_Objects
[OBJNDX_WBColorsList
], 4, MUIM_NList_Sort3
, MUIV_TriggerValue
, MUIV_NList_SortTypeAdd_2Values
, MUIV_NList_Sort3_SortType_2
);
946 DoMethod(inst
->ppb_Objects
[OBJNDX_WBColorsList
], MUIM_Notify
, MUIA_NList_SortType
, MUIV_EveryTime
,
947 inst
->ppb_Objects
[OBJNDX_WBColorsList
], 3, MUIM_Set
, MUIA_NList_TitleMark
, MUIV_TriggerValue
);
948 DoMethod(inst
->ppb_Objects
[OBJNDX_WBColorsList
], MUIM_Notify
, MUIA_NList_SortType2
, MUIV_EveryTime
,
949 inst
->ppb_Objects
[OBJNDX_WBColorsList
], 3, MUIM_Set
, MUIA_NList_TitleMark2
, MUIV_TriggerValue
);
951 // notification on Contextmenu for all places except listviews
952 DoMethod(inst
->ppb_Objects
[OBJNDX_Group_Main
], MUIM_Notify
, MUIA_ContextMenuTrigger
, MUIV_EveryTime
,
953 inst
->ppb_Objects
[OBJNDX_Group_Main
], 3, MUIM_CallHook
, &inst
->ppb_Hooks
[HOOKNDX_ContextMenuTrigger
], MUIV_TriggerValue
);
955 // Notification for "Add pen" button
956 DoMethod(inst
->ppb_Objects
[OBJNDX_NewButton
], MUIM_Notify
, MUIA_Pressed
, FALSE
,
957 inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], 2, MUIM_CallHook
, &inst
->ppb_Hooks
[HOOKNDX_AddPen
]);
959 // Notification for "Delete pen" button
960 DoMethod(inst
->ppb_Objects
[OBJNDX_DeleteButton
], MUIM_Notify
, MUIA_Pressed
, FALSE
,
961 inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], 2, MUIM_CallHook
, &inst
->ppb_Hooks
[HOOKNDX_DeletePen
]);
963 // Update ColorAdjust every time a new pen is selected
964 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_Notify
, MUIA_NList_Active
, MUIV_EveryTime
,
965 inst
->ppb_Objects
[OBJNDX_ColorAdjust
], 2, MUIM_CallHook
, &inst
->ppb_Hooks
[HOOKNDX_SelectPalettePen
]);
967 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_Notify
, MUIA_NList_Active
, MUIV_EveryTime
,
968 MUIV_Notify_Window
, 2, MUIM_CallHook
, &inst
->ppb_Hooks
[HOOKNDX_SelectScalosPen
]);
970 DoMethod(inst
->ppb_Objects
[OBJNDX_ColorAdjust
], MUIM_Notify
, MUIA_Coloradjust_RGB
, MUIV_EveryTime
,
971 inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], 3, MUIM_CallHook
, &inst
->ppb_Hooks
[HOOKNDX_ChangePenColor
], MUIV_TriggerValue
);
973 return inst
->ppb_Objects
[OBJNDX_Group_Main
];
977 static Object
*CreatePrefsImage(void)
979 #include "PalettePrefsImage.h"
982 // First try to load datatypes image from THEME: tree
983 img
= DataTypesImageObject
,
984 MUIA_ScaDtpic_Name
, (ULONG
) "THEME:prefs/plugins/palette",
985 MUIA_ScaDtpic_FailIfUnavailable
, TRUE
,
986 End
; //DataTypesMCCObject
989 img
= IMG(Palette
, PALETTE
); // use built-in fallback image
995 static void InitHooks(struct PalettePrefsInst
*inst
)
999 for (n
=0; n
<HOOKNDX_MAX
; n
++)
1001 inst
->ppb_Hooks
[n
] = PalettePrefsHooks
[n
];
1002 inst
->ppb_Hooks
[n
].h_Data
= inst
;
1007 static BOOL
OpenLibraries(void)
1009 DOSBase
= (APTR
) OpenLibrary( "dos.library", 39 );
1013 IDOS
= (struct DOSIFace
*)GetInterface((struct Library
*)DOSBase
, "main", 1, NULL
);
1018 d1(kprintf(__FUNC__
"/%ld:\n", __LINE__
));
1020 IntuitionBase
= (struct IntuitionBase
*) OpenLibrary("intuition.library", 39);
1021 if (NULL
== IntuitionBase
)
1024 IIntuition
= (struct IntuitionIFace
*)GetInterface((struct Library
*)IntuitionBase
, "main", 1, NULL
);
1025 if (NULL
== IIntuition
)
1029 MUIMasterBase
= OpenLibrary("zune.library", 0);
1030 if (NULL
== MUIMasterBase
)
1031 MUIMasterBase
= OpenLibrary(MUIMASTER_NAME
, MUIMASTER_VMIN
-1);
1032 if (NULL
== MUIMasterBase
)
1035 IMUIMaster
= (struct MUIMasterIFace
*)GetInterface((struct Library
*)MUIMasterBase
, "main", 1, NULL
);
1036 if (NULL
== IMUIMaster
)
1040 IFFParseBase
= OpenLibrary("iffparse.library", 36);
1041 if (NULL
== IFFParseBase
)
1044 IIFFParse
= (struct IFFParseIFace
*)GetInterface((struct Library
*)IFFParseBase
, "main", 1, NULL
);
1045 if (NULL
== IIFFParse
)
1049 IconBase
= OpenLibrary("icon.library", 0);
1050 if (NULL
== IconBase
)
1053 IIcon
= (struct IconIFace
*)GetInterface((struct Library
*)IconBase
, "main", 1, NULL
);
1058 GfxBase
= (struct GfxBase
*) OpenLibrary("graphics.library", 39);
1059 if (NULL
== GfxBase
)
1062 IGraphics
= (struct GraphicsIFace
*)GetInterface((struct Library
*)GfxBase
, "main", 1, NULL
);
1063 if (NULL
== IGraphics
)
1067 UtilityBase
= (T_UTILITYBASE
) OpenLibrary(UTILITYNAME
, 39);
1068 if (NULL
== UtilityBase
)
1071 IUtility
= (struct UtilityIFace
*)GetInterface((struct Library
*)UtilityBase
, "main", 1, NULL
);
1072 if (NULL
== IUtility
)
1076 #if defined(__GNUC__) && !defined(__MORPHOS__) && !defined(__amigaos4__) && !defined(__AROS__)
1077 __UtilityBase
= UtilityBase
;
1078 #endif /* __GNUC__ && !__MORPHOS__ && ! __amigaos4__ */
1080 DataTypesBase
= OpenLibrary("datatypes.library", 39);
1081 if (NULL
== DataTypesBase
)
1084 IDataTypes
= (struct DataTypesIFace
*)GetInterface((struct Library
*)DataTypesBase
, "main", 1, NULL
);
1085 if (NULL
== IDataTypes
)
1090 NewlibBase
= OpenLibrary("newlib.library", 0);
1091 if (NULL
== NewlibBase
)
1093 INewlib
= GetInterface(NewlibBase
, "main", 1, NULL
);
1094 if (NULL
== INewlib
)
1098 LocaleBase
= (T_LOCALEBASE
) OpenLibrary("locale.library", 39);
1101 ILocale
= (struct LocaleIFace
*)GetInterface((struct Library
*)LocaleBase
, "main", 1, NULL
);
1108 static void CloseLibraries(void)
1113 DropInterface(INewlib
);
1118 CloseLibrary(NewlibBase
);
1123 DropInterface((struct Interface
*)IDataTypes
);
1129 CloseLibrary(DataTypesBase
);
1130 DataTypesBase
= NULL
;
1135 DropInterface((struct Interface
*)ILocale
);
1141 CloseLibrary((struct Library
*) LocaleBase
);
1147 DropInterface((struct Interface
*)IUtility
);
1153 CloseLibrary((struct Library
*) UtilityBase
);
1159 DropInterface((struct Interface
*)IGraphics
);
1165 CloseLibrary((struct Library
*) GfxBase
);
1171 DropInterface((struct Interface
*)IIcon
);
1177 CloseLibrary(IconBase
);
1183 DropInterface((struct Interface
*)IIFFParse
);
1189 CloseLibrary(IFFParseBase
);
1190 IFFParseBase
= NULL
;
1195 DropInterface((struct Interface
*)IMUIMaster
);
1201 CloseLibrary(MUIMasterBase
);
1202 MUIMasterBase
= NULL
;
1207 DropInterface((struct Interface
*)IIntuition
);
1213 CloseLibrary((struct Library
*) IntuitionBase
);
1214 IntuitionBase
= NULL
;
1219 DropInterface((struct Interface
*)IDOS
);
1225 CloseLibrary((struct Library
*) DOSBase
);
1231 //----------------------------------------------------------------------------
1233 static STRPTR
GetLocString(ULONG MsgId
)
1235 struct ScalosPalette_LocaleInfo li
;
1237 li
.li_Catalog
= PalettePrefsCatalog
;
1238 #ifndef __amigaos4__
1239 li
.li_LocaleBase
= LocaleBase
;
1241 li
.li_ILocale
= ILocale
;
1244 return (STRPTR
)GetScalosPaletteString(&li
, MsgId
);
1248 static void TranslateNewMenu(struct NewMenu
*nm
)
1250 while (nm
&& NM_END
!= nm
->nm_Type
)
1252 if (NM_BARLABEL
!= nm
->nm_Label
)
1253 nm
->nm_Label
= GetLocString((ULONG
) nm
->nm_Label
);
1256 nm
->nm_CommKey
= GetLocString((ULONG
) nm
->nm_CommKey
);
1263 static void TranslateStringArray(STRPTR
*stringArray
)
1265 while (*stringArray
)
1267 *stringArray
= GetLocString((ULONG
) *stringArray
);
1273 //----------------------------------------------------------------------------
1275 void _XCEXIT(long x
)
1279 //----------------------------------------------------------------------------
1283 struct PalettePrefsInst
*inst
= NULL
;
1286 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: MethodID=%08lx\n", __LINE__
, msg
->MethodID
));
1288 switch(msg
->MethodID
)
1290 case MUIM_ContextMenuChoice
:
1292 struct MUIP_ContextMenuChoice
*cmc
= (struct MUIP_ContextMenuChoice
*) msg
;
1294 ULONG MenuHookIndex
= 0;
1295 struct Hook
*MenuHook
= NULL
;
1297 get(obj
, MUIA_NList_PrivateData
, &inst
);
1299 d1(kprintf(__FUNC__
"/%ld: MUIM_ContextMenuChoice item=%08lx\n", __LINE__
, cmc
->item
));
1301 MenuObj
= cmc
->item
;
1303 d1(kprintf(__FUNC__
"/%ld: MenuObj=%08lx\n", __LINE__
, MenuObj
));
1304 d1(kprintf(__FUNC__
"/%ld: msg=%08lx *msg=%08lx\n", __LINE__
, msg
, *((ULONG
*) msg
)));
1306 get(MenuObj
, MUIA_UserData
, &MenuHookIndex
);
1308 if (MenuHookIndex
> 0 && MenuHookIndex
< HOOKNDX_MAX
)
1309 MenuHook
= &inst
->ppb_Hooks
[MenuHookIndex
];
1311 d1(kprintf(__FUNC__
"/%ld: MenuHook=%08lx\n", __LINE__
, MenuHook
));
1313 DoMethod(inst
->ppb_Objects
[OBJNDX_Group_Main
], MUIM_CallHook
, MenuHook
, MenuObj
);
1320 result
= DoSuperMethodA(cl
, obj
, msg
);
1327 //----------------------------------------------------------------------------
1329 DISPATCHER(NewColorAdjust
)
1331 struct PalettePrefsInst
*inst
= NULL
;
1334 d1(kprintf( "%s/%s/%ld: START MethodID=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, msg
->MethodID
));
1336 switch (msg
->MethodID
)
1338 case MUIM_DragQuery
:
1340 struct MUIP_DragQuery
*dq
= (struct MUIP_DragQuery
*) msg
;
1342 get(obj
, MUIA_UserData
, &inst
);
1344 if (inst
->ppb_Objects
[OBJNDX_WBColorsList
] == dq
->obj
)
1345 Result
= MUIV_DragQuery_Accept
;
1347 Result
= MUIV_DragQuery_Refuse
;
1353 struct MUIP_DragDrop
*dd
= (struct MUIP_DragDrop
*) msg
;
1354 APTR activeEntry
= NULL
;
1356 get(obj
, MUIA_UserData
, &inst
);
1358 DoMethod(dd
->obj
, MUIM_NList_GetEntry
, MUIV_NList_GetEntry_Active
, &activeEntry
);
1361 set(inst
->ppb_Objects
[OBJNDX_ColorAdjust
], MUIA_Coloradjust_RGB
, (ULONG
) activeEntry
);
1368 Result
= DoSuperMethodA(cl
, obj
, msg
);
1372 d1(kprintf( "%s/%s/%ld: END Result=%ld\n", __FILE__
, __FUNC__
, __LINE__
, Result
));
1379 DISPATCHER(NewPalettePenList
)
1381 struct PalettePrefsInst
*inst
= NULL
;
1384 switch (msg
->MethodID
)
1386 case MUIM_DragQuery
:
1388 struct MUIP_DragQuery
*dq
= (struct MUIP_DragQuery
*) msg
;
1390 get(obj
, MUIA_NList_PrivateData
, &inst
);
1392 if (inst
->ppb_Objects
[OBJNDX_WBColorsList
] == dq
->obj
|| inst
->ppb_Objects
[OBJNDX_AllocatedPensList
] == dq
->obj
)
1393 Result
= MUIV_DragQuery_Accept
;
1395 Result
= MUIV_DragQuery_Refuse
;
1401 struct MUIP_DragDrop
*dd
= (struct MUIP_DragDrop
*) msg
;
1403 get(obj
, MUIA_NList_PrivateData
, &inst
);
1405 if (inst
->ppb_Objects
[OBJNDX_AllocatedPensList
] == dd
->obj
)
1407 // Drag-sorting pen list
1408 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: \n", __LINE__
));
1409 SetChangedFlag(inst
, TRUE
);
1410 Result
= DoSuperMethodA(cl
, obj
, msg
);
1417 get(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIA_NList_DropMark
, &DropMark
);
1418 set(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIA_NList_Quiet
, TRUE
);
1420 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: DropMark=%ld\n", __LINE__
, DropMark
));
1422 Entry
= MUIV_NList_NextSelected_Start
;
1425 DoMethod(dd
->obj
, MUIM_NList_NextSelected
, &Entry
);
1427 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: DropMark=%ld\n", __LINE__
, Entry
));
1429 if (Entry
!= MUIV_NList_NextSelected_End
)
1431 struct ScalosPenListEntry
*snle
;
1433 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: \n", __LINE__
));
1434 SetChangedFlag(inst
, TRUE
);
1436 DoMethod(dd
->obj
, MUIM_NList_GetEntry
, Entry
, &snle
);
1437 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
],
1438 MUIM_NList_InsertSingle
, snle
, DropMark
);
1440 if (MUIV_NList_Insert_Bottom
!= DropMark
)
1443 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: DropMark=%ld\n", __LINE__
, DropMark
));
1445 } while (Entry
!= MUIV_NList_NextSelected_End
);
1447 set(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIA_NList_Quiet
, FALSE
);
1454 case MUIM_ContextMenuChoice
:
1456 struct MUIP_ContextMenuChoice
*cmc
= (struct MUIP_ContextMenuChoice
*) msg
;
1458 ULONG MenuHookIndex
= 0;
1459 struct Hook
*MenuHook
= NULL
;
1461 get(obj
, MUIA_NList_PrivateData
, &inst
);
1463 d1(kprintf(__FUNC__
"/%ld: MUIM_ContextMenuChoice item=%08lx\n", __LINE__
, cmc
->item
));
1465 MenuObj
= cmc
->item
;
1467 d1(kprintf(__FUNC__
"/%ld: MenuObj=%08lx\n", __LINE__
, MenuObj
));
1468 d1(kprintf(__FUNC__
"/%ld: msg=%08lx *msg=%08lx\n", __LINE__
, msg
, *((ULONG
*) msg
)));
1470 get(MenuObj
, MUIA_UserData
, &MenuHookIndex
);
1472 if (MenuHookIndex
> 0 && MenuHookIndex
< HOOKNDX_MAX
)
1473 MenuHook
= &inst
->ppb_Hooks
[MenuHookIndex
];
1475 d1(kprintf(__FUNC__
"/%ld: MenuHook=%08lx\n", __LINE__
, MenuHook
));
1477 DoMethod(inst
->ppb_Objects
[OBJNDX_Group_Main
], MUIM_CallHook
, MenuHook
, MenuObj
);
1484 Result
= DoSuperMethodA(cl
, obj
, msg
);
1493 DISPATCHER(NewScalosPenList
)
1495 struct PalettePrefsInst
*inst
= NULL
;
1498 switch (msg
->MethodID
)
1500 case MUIM_DragQuery
:
1502 struct MUIP_DragQuery
*dq
= (struct MUIP_DragQuery
*) msg
;
1504 get(obj
, MUIA_NList_PrivateData
, &inst
);
1506 if (inst
->ppb_Objects
[OBJNDX_ScalosPenList
] == dq
->obj
|| inst
->ppb_Objects
[OBJNDX_AllocatedPensList
] == dq
->obj
)
1507 Result
= MUIV_DragQuery_Accept
;
1509 Result
= MUIV_DragQuery_Refuse
;
1516 struct MUIP_DragDrop
*dd
= (struct MUIP_DragDrop
*) msg
;
1518 get(obj
, MUIA_NList_PrivateData
, &inst
);
1519 get(obj
, MUIA_NList_DropMark
, &DropMark
);
1520 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: DropMark=%ld\n", __LINE__
, DropMark
));
1524 if (inst
->ppb_Objects
[OBJNDX_AllocatedPensList
] == dd
->obj
)
1526 struct ScalosPenListEntry
*snle
;
1530 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: \n", __LINE__
));
1531 SetChangedFlag(inst
, TRUE
);
1533 get(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIA_NList_Active
, &Entry
);
1534 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: Entry=%ld DropMark=%ld\n", __LINE__
, Entry
, DropMark
));
1536 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_GetEntry
, DropMark
, &snle
);
1538 OldPenNr
= snle
->snle_PenNr
;
1539 snle
->snle_PenNr
= Entry
;
1541 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_Redraw
, DropMark
);
1543 // Redraw "allocated pens" entry of old and new pen, since reference counts have changed
1544 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_Redraw
, OldPenNr
);
1545 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_Redraw
, snle
->snle_PenNr
);
1549 struct ScalosPenListEntry
*snleActive
= NULL
;
1551 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_GetEntry
, MUIV_NList_GetEntry_Active
, &snleActive
);
1554 struct ScalosPenListEntry
*snleDest
;
1557 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: DropMark=%ld\n", __LINE__
, DropMark
));
1559 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: \n", __LINE__
));
1560 SetChangedFlag(inst
, TRUE
);
1562 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_GetEntry
, DropMark
, &snleDest
);
1564 OldPenNr
= snleDest
->snle_PenNr
;
1565 snleDest
->snle_PenNr
= snleActive
->snle_PenNr
;
1567 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_Redraw
, DropMark
);
1569 // Redraw "allocated pens" entry of old and new pen, since reference counts have changed
1570 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_Redraw
, OldPenNr
);
1571 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_Redraw
, snleDest
->snle_PenNr
);
1580 case MUIM_NList_DropType
:
1582 struct MUIP_NList_DropType
*mdt
= (struct MUIP_NList_DropType
*) msg
;
1584 Result
= DoSuperMethodA(cl
, obj
, msg
);
1586 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: DropType=%ld\n", __LINE__
, *mdt
->type
));
1588 if (MUIV_NList_DropType_None
!= *mdt
->type
)
1589 *mdt
->type
= MUIV_NList_DropType_Onto
;
1593 case MUIM_ContextMenuChoice
:
1595 struct MUIP_ContextMenuChoice
*cmc
= (struct MUIP_ContextMenuChoice
*) msg
;
1597 ULONG MenuHookIndex
= 0;
1598 struct Hook
*MenuHook
= NULL
;
1600 get(obj
, MUIA_NList_PrivateData
, &inst
);
1602 d1(kprintf(__FUNC__
"/%ld: MUIM_ContextMenuChoice item=%08lx\n", __LINE__
, cmc
->item
));
1604 MenuObj
= cmc
->item
;
1606 d1(kprintf(__FUNC__
"/%ld: MenuObj=%08lx\n", __LINE__
, MenuObj
));
1607 d1(kprintf(__FUNC__
"/%ld: msg=%08lx *msg=%08lx\n", __LINE__
, msg
, *((ULONG
*) msg
)));
1609 get(MenuObj
, MUIA_UserData
, &MenuHookIndex
);
1611 if (MenuHookIndex
> 0 && MenuHookIndex
< HOOKNDX_MAX
)
1612 MenuHook
= &inst
->ppb_Hooks
[MenuHookIndex
];
1614 d1(kprintf(__FUNC__
"/%ld: MenuHook=%08lx\n", __LINE__
, MenuHook
));
1616 DoMethod(inst
->ppb_Objects
[OBJNDX_Group_Main
], MUIM_CallHook
, MenuHook
, MenuObj
);
1623 Result
= DoSuperMethodA(cl
, obj
, msg
);
1631 //----------------------------------------------------------------------------
1633 static APTR
AllocatedPensListConstructFunc(struct Hook
*hook
, APTR memPool
,
1634 struct PensListEntry
*spleNew
)
1636 struct PensListEntry
*sple
= AllocPooled(memPool
, sizeof(struct PensListEntry
));
1640 // struct PalettePrefsInst *inst = (struct PalettePrefsInst *) hook->h_Data;
1648 static void AllocatedPensListDestructFunc(struct Hook
*hook
, APTR memPool
, APTR Entry
)
1652 FreePooled(memPool
, Entry
, sizeof(struct PensListEntry
));
1656 static ULONG
AllocatedPensListDisplayFunc(struct Hook
*hook
, Object
*obj
, struct NList_DisplayMessage
*ndm
)
1660 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
1661 struct PensListEntry
*sple
= (struct PensListEntry
*) ndm
->entry
;
1662 static char Buffer
[80];
1665 sprintf(lp
, "%ld", (long)sple
->sple_Index
);
1666 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: lp=<%s>\n", __LINE__
, lp
));
1667 ndm
->strings
[0] = lp
;
1668 lp
+= 1 + strlen(lp
);
1670 sprintf(lp
, "\033I[2:%08lx %08lx %08lx]",
1671 (long)sple
->sple_Red
, (long)sple
->sple_Green
, (long)sple
->sple_Blue
);
1672 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: lp=<%s>\n", __LINE__
, lp
));
1673 ndm
->strings
[1] = lp
;
1674 lp
+= 1 + strlen(lp
);
1677 sprintf(lp
, "%ld", (long)GetPenReferenceCount(inst
, sple
->sple_Index
));
1678 ndm
->strings
[2] = lp
;
1679 lp
+= 1 + strlen(lp
);
1681 sprintf(lp
, "%ld", (long)(sple
->sple_Red
>> 24));
1682 ndm
->strings
[3] = lp
;
1683 lp
+= 1 + strlen(lp
);
1685 sprintf(lp
, "%ld", (long)(sple
->sple_Green
>> 24));
1686 ndm
->strings
[4] = lp
;
1687 lp
+= 1 + strlen(lp
);
1689 sprintf(lp
, "%ld", (long)(sple
->sple_Blue
>> 24));
1690 ndm
->strings
[5] = lp
;
1695 ndm
->strings
[0] = GetLocString(MSGID_PEN
);
1696 ndm
->strings
[1] = "";
1697 ndm
->strings
[2] = GetLocString(MSGID_PEN_REFERENCE_COUNT
);
1698 ndm
->strings
[3] = GetLocString(MSGID_RED
);
1699 ndm
->strings
[4] = GetLocString(MSGID_GREEN
);
1700 ndm
->strings
[5] = GetLocString(MSGID_BLUE
);
1706 static LONG
AllocatedPensListCompareFunc(struct Hook
*hook
, Object
*obj
, struct NList_CompareMessage
*ncm
)
1708 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
1709 const struct PensListEntry
*sple1
= (const struct PensListEntry
*) ncm
->entry1
;
1710 const struct PensListEntry
*sple2
= (const struct PensListEntry
*) ncm
->entry2
;
1711 LONG col1
= ncm
->sort_type
& MUIV_NList_TitleMark_ColMask
;
1712 LONG col2
= ncm
->sort_type2
& MUIV_NList_TitleMark2_ColMask
;
1715 if (ncm
->sort_type
!= MUIV_NList_SortType_None
)
1720 case 0: // sort by index
1721 if (ncm
->sort_type
& MUIV_NList_TitleMark_TypeMask
)
1722 Result
= sple2
->sple_Index
- sple1
->sple_Index
;
1724 Result
= sple1
->sple_Index
- sple2
->sple_Index
;
1726 case 1: // sort by RGB
1727 if (ncm
->sort_type
& MUIV_NList_TitleMark_TypeMask
)
1728 Result
= RGBComp(sple2
, sple1
);
1730 Result
= RGBComp(sple1
, sple2
);
1732 case 2: // sort by reference count
1733 if (ncm
->sort_type
& MUIV_NList_TitleMark_TypeMask
)
1734 Result
= GetPenReferenceCount(inst
, sple2
->sple_Index
) - GetPenReferenceCount(inst
, sple1
->sple_Index
);
1736 Result
= GetPenReferenceCount(inst
, sple1
->sple_Index
) - GetPenReferenceCount(inst
, sple2
->sple_Index
);
1738 case 3: // sort by Red
1739 if (ncm
->sort_type
& MUIV_NList_TitleMark_TypeMask
)
1740 Result
= ColorComp(sple2
->sple_Red
, sple1
->sple_Red
);
1742 Result
= ColorComp(sple1
->sple_Red
, sple2
->sple_Red
);
1744 case 4: // sort by Green
1745 if (ncm
->sort_type
& MUIV_NList_TitleMark_TypeMask
)
1746 Result
= ColorComp(sple2
->sple_Green
, sple1
->sple_Green
);
1748 Result
= ColorComp(sple1
->sple_Green
, sple2
->sple_Green
);
1750 case 5: // sort by Blue
1751 if (ncm
->sort_type
& MUIV_NList_TitleMark_TypeMask
)
1752 Result
= ColorComp(sple2
->sple_Blue
, sple1
->sple_Blue
);
1754 Result
= ColorComp(sple1
->sple_Blue
, sple2
->sple_Blue
);
1760 if (0 == Result
&& col1
!= col2
)
1762 // Secondary sorting
1765 case 0: // sort by index
1766 if (ncm
->sort_type2
& MUIV_NList_TitleMark2_TypeMask
)
1767 Result
= sple2
->sple_Index
- sple1
->sple_Index
;
1769 Result
= sple1
->sple_Index
- sple2
->sple_Index
;
1771 case 1: // sort by RGB
1772 if (ncm
->sort_type2
& MUIV_NList_TitleMark2_TypeMask
)
1773 Result
= RGBComp(sple2
, sple1
);
1775 Result
= RGBComp(sple1
, sple2
);
1777 case 2: // sort by reference count
1778 if (ncm
->sort_type2
& MUIV_NList_TitleMark_TypeMask
)
1779 Result
= GetPenReferenceCount(inst
, sple2
->sple_Index
) - GetPenReferenceCount(inst
, sple1
->sple_Index
);
1781 Result
= GetPenReferenceCount(inst
, sple1
->sple_Index
) - GetPenReferenceCount(inst
, sple2
->sple_Index
);
1783 case 3: // sort by Red
1784 if (ncm
->sort_type2
& MUIV_NList_TitleMark_TypeMask
)
1785 Result
= ColorComp(sple2
->sple_Red
, sple1
->sple_Red
);
1787 Result
= ColorComp(sple1
->sple_Red
, sple2
->sple_Red
);
1789 case 4: // sort by Green
1790 if (ncm
->sort_type2
& MUIV_NList_TitleMark_TypeMask
)
1791 Result
= ColorComp(sple2
->sple_Green
, sple1
->sple_Green
);
1793 Result
= ColorComp(sple1
->sple_Green
, sple2
->sple_Green
);
1795 case 5: // sort by Blue
1796 if (ncm
->sort_type2
& MUIV_NList_TitleMark_TypeMask
)
1797 Result
= ColorComp(sple2
->sple_Blue
, sple1
->sple_Blue
);
1799 Result
= ColorComp(sple1
->sple_Blue
, sple2
->sple_Blue
);
1810 //----------------------------------------------------------------------------
1812 static APTR
WBPensListConstructFunc(struct Hook
*hook
, APTR memPool
,
1813 struct PensListEntry
*spleNew
)
1815 struct PensListEntry
*sple
= AllocPooled(memPool
, sizeof(struct PensListEntry
));
1825 static void WBPensListDestructFunc(struct Hook
*hook
, APTR memPool
, APTR Entry
)
1827 FreePooled(memPool
, Entry
, sizeof(struct PensListEntry
));
1830 static ULONG
WBPensListDisplayFunc(struct Hook
*hook
, Object
*obj
, struct NList_DisplayMessage
*ndm
)
1834 struct PensListEntry
*sple
= (struct PensListEntry
*) ndm
->entry
;
1835 static char Buffer
[80];
1838 sprintf(lp
, "%ld", (long)sple
->sple_Index
);
1839 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: lp=<%s>\n", __LINE__
, lp
));
1840 ndm
->strings
[0] = lp
;
1841 lp
+= 1 + strlen(lp
);
1843 sprintf(lp
, "\x1bI[2:%08lx %08lx %08lx]",
1844 (long)sple
->sple_Red
, (long)sple
->sple_Green
, (long)sple
->sple_Blue
);
1845 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: lp=<%s>\n", __LINE__
, lp
));
1846 ndm
->strings
[1] = lp
;
1847 lp
+= 1 + strlen(lp
);
1849 sprintf(lp
, "%ld", (long)(sple
->sple_Red
>> 24));
1850 ndm
->strings
[2] = lp
;
1851 lp
+= 1 + strlen(lp
);
1853 sprintf(lp
, "%ld", (long)(sple
->sple_Green
>> 24));
1854 ndm
->strings
[3] = lp
;
1855 lp
+= 1 + strlen(lp
);
1857 sprintf(lp
, "%ld", (long)(sple
->sple_Blue
>> 24));
1858 ndm
->strings
[4] = lp
;
1863 ndm
->strings
[0] = GetLocString(MSGID_PEN
);
1864 ndm
->strings
[1] = "";
1865 ndm
->strings
[2] = GetLocString(MSGID_RED
);
1866 ndm
->strings
[3] = GetLocString(MSGID_GREEN
);
1867 ndm
->strings
[4] = GetLocString(MSGID_BLUE
);
1873 static LONG
WBPensListCompareFunc(struct Hook
*hook
, Object
*obj
, struct NList_CompareMessage
*ncm
)
1875 // struct PalettePrefsInst *inst = (struct PalettePrefsInst *) hook->h_Data;
1876 const struct PensListEntry
*sple1
= (const struct PensListEntry
*) ncm
->entry1
;
1877 const struct PensListEntry
*sple2
= (const struct PensListEntry
*) ncm
->entry2
;
1878 LONG col1
= ncm
->sort_type
& MUIV_NList_TitleMark_ColMask
;
1879 LONG col2
= ncm
->sort_type2
& MUIV_NList_TitleMark2_ColMask
;
1882 if (ncm
->sort_type
!= MUIV_NList_SortType_None
)
1887 case 0: // sort by index
1888 if (ncm
->sort_type
& MUIV_NList_TitleMark_TypeMask
)
1889 Result
= sple2
->sple_Index
- sple1
->sple_Index
;
1891 Result
= sple1
->sple_Index
- sple2
->sple_Index
;
1893 case 1: // sort by RGB
1894 if (ncm
->sort_type
& MUIV_NList_TitleMark_TypeMask
)
1895 Result
= RGBComp(sple2
, sple1
);
1897 Result
= RGBComp(sple1
, sple2
);
1899 case 2: // sort by Red
1900 if (ncm
->sort_type
& MUIV_NList_TitleMark_TypeMask
)
1901 Result
= ColorComp(sple2
->sple_Red
, sple1
->sple_Red
);
1903 Result
= ColorComp(sple1
->sple_Red
, sple2
->sple_Red
);
1905 case 3: // sort by Green
1906 if (ncm
->sort_type
& MUIV_NList_TitleMark_TypeMask
)
1907 Result
= ColorComp(sple2
->sple_Green
, sple1
->sple_Green
);
1909 Result
= ColorComp(sple1
->sple_Green
, sple2
->sple_Green
);
1911 case 4: // sort by Blue
1912 if (ncm
->sort_type
& MUIV_NList_TitleMark_TypeMask
)
1913 Result
= ColorComp(sple2
->sple_Blue
, sple1
->sple_Blue
);
1915 Result
= ColorComp(sple1
->sple_Blue
, sple2
->sple_Blue
);
1921 if (0 == Result
&& col1
!= col2
)
1923 // Secondary sorting
1926 case 0: // sort by index
1927 if (ncm
->sort_type2
& MUIV_NList_TitleMark2_TypeMask
)
1928 Result
= sple2
->sple_Index
- sple1
->sple_Index
;
1930 Result
= sple1
->sple_Index
- sple2
->sple_Index
;
1932 case 1: // sort by RGB
1933 if (ncm
->sort_type2
& MUIV_NList_TitleMark2_TypeMask
)
1934 Result
= RGBComp(sple2
, sple1
);
1936 Result
= RGBComp(sple1
, sple2
);
1938 case 2: // sort by Red
1939 if (ncm
->sort_type2
& MUIV_NList_TitleMark_TypeMask
)
1940 Result
= ColorComp(sple2
->sple_Red
, sple1
->sple_Red
);
1942 Result
= ColorComp(sple1
->sple_Red
, sple2
->sple_Red
);
1944 case 3: // sort by Green
1945 if (ncm
->sort_type2
& MUIV_NList_TitleMark_TypeMask
)
1946 Result
= ColorComp(sple2
->sple_Green
, sple1
->sple_Green
);
1948 Result
= ColorComp(sple1
->sple_Green
, sple2
->sple_Green
);
1950 case 4: // sort by Blue
1951 if (ncm
->sort_type2
& MUIV_NList_TitleMark_TypeMask
)
1952 Result
= ColorComp(sple2
->sple_Blue
, sple1
->sple_Blue
);
1954 Result
= ColorComp(sple1
->sple_Blue
, sple2
->sple_Blue
);
1965 //----------------------------------------------------------------------------
1967 static APTR
ScalosPenListConstructFunc(struct Hook
*hook
, APTR memPool
, struct ScalosPenListEntry
*msg
)
1969 struct ScalosPenListEntry
*snle
= AllocPooled(memPool
, sizeof(struct ScalosPenListEntry
));
1979 static void ScalosPenListDestructFunc(struct Hook
*hook
, APTR memPool
, APTR Entry
)
1981 FreePooled(memPool
, Entry
, sizeof(struct ScalosPenListEntry
));
1984 static ULONG
ScalosPenListDisplayFunc(struct Hook
*hook
, Object
*obj
, struct NList_DisplayMessage
*ndm
)
1986 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
1990 struct PensListEntry
*sple
= NULL
;
1991 struct ScalosPenListEntry
*snle
= (struct ScalosPenListEntry
*) ndm
->entry
;
1992 static char Buffer
[80];
1996 if (PEN_UNDEFINED
!= snle
->snle_PenNr
)
1997 sprintf(lp
, "%d", snle
->snle_PenNr
);
2000 ndm
->strings
[0] = lp
;
2001 lp
+= 1 + strlen(lp
);
2003 if (PEN_UNDEFINED
!= snle
->snle_PenNr
)
2004 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_GetEntry
, snle
->snle_PenNr
, &sple
);
2008 sprintf(lp
, "\x1bI[2:%08lx %08lx %08lx]",
2009 (long)sple
->sple_Red
, (long)sple
->sple_Green
, (long)sple
->sple_Blue
);
2015 ndm
->strings
[1] = lp
;
2017 ndm
->strings
[2] = (STRPTR
) snle
->snle_PenName
;
2022 ndm
->strings
[0] = GetLocString(MSGID_PEN
);
2023 ndm
->strings
[1] = "";
2024 ndm
->strings
[2] = GetLocString(MSGID_PENNAMENAME
);
2030 static LONG
ScalosPenListCompareFunc(struct Hook
*hook
, Object
*obj
, struct NList_CompareMessage
*ncm
)
2032 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2033 const struct ScalosPenListEntry
*snle1
= (const struct ScalosPenListEntry
*) ncm
->entry1
;
2034 const struct ScalosPenListEntry
*snle2
= (const struct ScalosPenListEntry
*) ncm
->entry2
;
2035 LONG col1
= ncm
->sort_type
& MUIV_NList_TitleMark_ColMask
;
2036 LONG col2
= ncm
->sort_type2
& MUIV_NList_TitleMark2_ColMask
;
2039 if (ncm
->sort_type
!= MUIV_NList_SortType_None
)
2041 struct PensListEntry
*sple1
= NULL
;
2042 struct PensListEntry
*sple2
= NULL
;
2044 if (PEN_UNDEFINED
!= snle1
->snle_PenNr
)
2045 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_GetEntry
, snle1
->snle_PenNr
, &sple1
);
2046 if (PEN_UNDEFINED
!= snle2
->snle_PenNr
)
2047 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_GetEntry
, snle2
->snle_PenNr
, &sple2
);
2052 case 0: // sort by pen number
2053 if (ncm
->sort_type
& MUIV_NList_TitleMark_TypeMask
)
2054 Result
= snle2
->snle_PenNr
- snle1
->snle_PenNr
;
2056 Result
= snle1
->snle_PenNr
- snle2
->snle_PenNr
;
2058 case 1: // sort by RGB
2061 if (ncm
->sort_type
& MUIV_NList_TitleMark_TypeMask
)
2062 Result
= RGBComp(sple2
, sple1
);
2064 Result
= RGBComp(sple1
, sple2
);
2067 case 2: // sort by name
2068 if (ncm
->sort_type
& MUIV_NList_TitleMark_TypeMask
)
2069 Result
= Stricmp(snle2
->snle_PenName
, snle1
->snle_PenName
);
2071 Result
= Stricmp(snle1
->snle_PenName
, snle2
->snle_PenName
);
2077 if (0 == Result
&& col1
!= col2
)
2079 // Secondary sorting
2082 case 0: // sort by pen number
2083 if (ncm
->sort_type2
& MUIV_NList_TitleMark2_TypeMask
)
2084 Result
= snle1
->snle_PenNr
- snle2
->snle_PenNr
;
2086 Result
= snle2
->snle_PenNr
- snle1
->snle_PenNr
;
2088 case 1: // sort by RGB
2091 if (ncm
->sort_type2
& MUIV_NList_TitleMark2_TypeMask
)
2092 Result
= RGBComp(sple2
, sple1
);
2094 Result
= RGBComp(sple1
, sple2
);
2097 case 2: // sort by name
2098 if (ncm
->sort_type2
& MUIV_NList_TitleMark2_TypeMask
)
2099 Result
= Stricmp(snle2
->snle_PenName
, snle1
->snle_PenName
);
2101 Result
= Stricmp(snle1
->snle_PenName
, snle2
->snle_PenName
);
2112 //----------------------------------------------------------------------------
2114 static void GetWBColorsFunc(struct Hook
*hook
, Object
*pop
, Object
*win
)
2116 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2118 if (inst
->ppb_WBScreen
)
2120 ULONG nColors
= inst
->ppb_WBScreen
->BitMap
.Depth
;
2121 struct ColorMap
*cm
= inst
->ppb_WBScreen
->ViewPort
.ColorMap
;
2122 struct RGB
*RGBTable
;
2125 nColors
= cm
->Count
;
2127 nColors
= 1L << nColors
;
2129 DoMethod(inst
->ppb_Objects
[OBJNDX_WBColorsList
], MUIM_NList_Clear
);
2131 RGBTable
= AllocVec(nColors
* sizeof(struct RGB
), MEMF_PUBLIC
);
2136 GetRGB32(cm
, 0, nColors
, (ULONG
*) RGBTable
);
2138 for (n
=0; n
<nColors
; n
++)
2140 struct PensListEntry sple
;
2142 sple
.sple_Index
= n
;
2143 sple
.sple_Red
= RGBTable
[n
].rgb_Red
;
2144 sple
.sple_Green
= RGBTable
[n
].rgb_Green
;
2145 sple
.sple_Blue
= RGBTable
[n
].rgb_Blue
;
2147 DoMethod(inst
->ppb_Objects
[OBJNDX_WBColorsList
],
2148 MUIM_NList_InsertSingle
, &sple
, MUIV_NList_Insert_Sorted
);
2156 //----------------------------------------------------------------------------
2158 static APTR
AddPenFunc(struct Hook
*hook
, Object
*o
, Msg msg
)
2160 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2162 struct PensListEntry sple
;
2164 sple
.sple_Index
= 0;
2166 get(inst
->ppb_Objects
[OBJNDX_ColorAdjust
], MUIA_Coloradjust_RGB
, &rgb
);
2167 get(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIA_NList_Entries
, &sple
.sple_Index
);
2169 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: rgb=%08lx %08lx %08lx\n", __LINE__
, rgb
[0], rgb
[1], rgb
[2]));
2171 sple
.sple_Red
= rgb
[0];
2172 sple
.sple_Green
= rgb
[1];
2173 sple
.sple_Blue
= rgb
[2];
2175 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: \n", __LINE__
));
2176 SetChangedFlag(inst
, TRUE
);
2178 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
],
2179 MUIM_NList_InsertSingle
, &sple
, MUIV_NList_Insert_Bottom
);
2180 set(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIA_NList_Active
, MUIV_NList_Active_Bottom
);
2182 UpdatePalettePenCount(inst
);
2187 static APTR
SelectPalettePenFunc(struct Hook
*hook
, Object
*o
, Msg msg
)
2189 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2190 struct PensListEntry
*sple
;
2192 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_GetEntry
, MUIV_NList_GetEntry_Active
, &sple
);
2195 set(inst
->ppb_Objects
[OBJNDX_ColorAdjust
], MUIA_Coloradjust_RGB
, (ULONG
) sple
);
2197 set(inst
->ppb_Objects
[OBJNDX_DeleteButton
], MUIA_Disabled
, NULL
== sple
);
2198 set(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIA_NList_Active
, MUIV_NList_Active_Off
);
2203 static APTR
SelectScalosPenFunc(struct Hook
*hook
, Object
*o
, Msg msg
)
2205 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2206 struct ScalosPenListEntry
*snle
= NULL
;
2208 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_GetEntry
, MUIV_NList_GetEntry_Active
, &snle
);
2210 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: snle=%08lx\n", __LINE__
, snle
));
2214 set(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIA_NList_Active
, snle
->snle_PenNr
);
2220 static APTR
ChangePenColorFunc(struct Hook
*hook
, Object
*o
, ULONG
**msg
)
2222 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2223 struct PensListEntry
*sple
= NULL
;
2225 LONG ActiveEntryNr
= 0;
2227 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_GetEntry
, MUIV_NList_GetEntry_Active
, &sple
);
2228 get(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIA_NList_Active
, &ActiveEntryNr
);
2232 if (sple
->sple_Red
!= rgb
[0] || sple
->sple_Green
!= rgb
[1] || sple
->sple_Blue
!= rgb
[2])
2234 ULONG n
, nEntries
= 0;
2236 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: \n", __LINE__
));
2237 SetChangedFlag(inst
, TRUE
);
2239 sple
->sple_Red
= rgb
[0];
2240 sple
->sple_Green
= rgb
[1];
2241 sple
->sple_Blue
= rgb
[2];
2243 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_Redraw
, MUIV_NList_Redraw_Active
);
2245 get(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIA_NList_Entries
, &nEntries
);
2247 for (n
=0; n
<nEntries
; n
++)
2249 struct ScalosPenListEntry
*snle
;
2251 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_GetEntry
, n
, &snle
);
2253 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: snle_PenNr=%ld ActiveEntryNr=%ld\n", __LINE__
, snle
->snle_PenNr
, ActiveEntryNr
));
2255 if (snle
&& snle
->snle_PenNr
== ActiveEntryNr
)
2256 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_Redraw
, n
);
2264 static APTR
ResetToDefaultsFunc(struct Hook
*hook
, Object
*o
, Msg msg
)
2266 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2269 struct ScalosPenListEntry
*snle
;
2270 const struct PenListInit
*pli
;
2272 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_Clear
);
2274 for (n
=0; n
<sizeof(DefaultPaletteEntries
)/sizeof(DefaultPaletteEntries
[0]); n
++)
2276 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
],
2277 MUIM_NList_InsertSingle
, &DefaultPaletteEntries
[n
], MUIV_NList_Insert_Sorted
);
2280 for (pli
=PenListContents
, EntryNr
=0; pli
->pli_PenIndex
; pli
++, EntryNr
++)
2282 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_GetEntry
, EntryNr
, &snle
);
2287 snle
->snle_PenIndex
= pli
->pli_PenIndex
;
2288 snle
->snle_PenNr
= pli
->pli_PenNr
;
2289 snle
->snle_PenName
= GetLocString(pli
->pli_PenNameID
);
2292 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_Redraw
, MUIV_NList_Redraw_All
);
2294 SetChangedFlag(inst
, TRUE
);
2299 static APTR
AboutFunc(struct Hook
*hook
, Object
*o
, Msg msg
)
2301 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2303 MUI_Request(inst
->ppb_Objects
[OBJNDX_APP_Main
], inst
->ppb_Objects
[OBJNDX_WIN_Main
], 0, NULL
,
2304 GetLocString(MSGID_ABOUTREQOK
),
2305 GetLocString(MSGID_ABOUTREQFORMAT
),
2306 MajorVersion
, MinorVersion
, COMPILER_STRING
, CURRENTYEAR
);
2311 static APTR
OpenFunc(struct Hook
*hook
, Object
*o
, Msg msg
)
2313 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2315 if (NULL
== inst
->ppb_LoadReq
)
2317 inst
->ppb_LoadReq
= MUI_AllocAslRequestTags(ASL_FileRequest
,
2318 ASLFR_InitialFile
, "Palette.pre",
2319 ASLFR_Flags1
, FRF_DOPATTERNS
,
2320 ASLFR_InitialDrawer
, "SYS:Prefs/presets",
2321 ASLFR_InitialPattern
, "#?.(pre|prefs)",
2322 ASLFR_UserData
, inst
,
2323 ASLFR_IntuiMsgFunc
, &inst
->ppb_Hooks
[HOOKNDX_AslIntuiMsg
],
2326 if (inst
->ppb_LoadReq
)
2329 struct Window
*win
= NULL
;
2331 get(inst
->ppb_Objects
[OBJNDX_WIN_Main
], MUIA_Window_Window
, &win
);
2334 Result
= MUI_AslRequestTags(inst
->ppb_LoadReq
,
2336 ASLFR_SleepWindow
, TRUE
,
2337 ASLFR_TitleText
, GetLocString(MSGID_MENU_PROJECT_OPEN
),
2342 BPTR dirLock
= Lock(inst
->ppb_LoadReq
->fr_Drawer
, ACCESS_READ
);
2346 BPTR oldDir
= CurrentDir(dirLock
);
2348 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_Clear
);
2350 ReadPrefsFile(inst
, inst
->ppb_LoadReq
->fr_File
, FALSE
);
2361 static APTR
LastSavedFunc(struct Hook
*hook
, Object
*o
, Msg msg
)
2363 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2365 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_Clear
);
2367 ReadPrefsFile(inst
, "ENVARC:Scalos/Palette13.prefs", FALSE
);
2369 SetChangedFlag(inst
, TRUE
);
2374 static APTR
RestoreFunc(struct Hook
*hook
, Object
*o
, Msg msg
)
2376 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2378 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_Clear
);
2380 ReadPrefsFile(inst
, "ENV:Scalos/Palette13.prefs", FALSE
);
2382 SetChangedFlag(inst
, TRUE
);
2387 static APTR
SaveAsFunc(struct Hook
*hook
, Object
*o
, Msg msg
)
2389 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2391 if (NULL
== inst
->ppb_SaveReq
)
2393 inst
->ppb_SaveReq
= MUI_AllocAslRequestTags(ASL_FileRequest
,
2394 ASLFR_InitialFile
, "Palette.pre",
2395 ASLFR_DoSaveMode
, TRUE
,
2396 ASLFR_InitialDrawer
, "SYS:Prefs/presets",
2397 ASLFR_UserData
, inst
,
2398 ASLFR_IntuiMsgFunc
, &inst
->ppb_Hooks
[HOOKNDX_AslIntuiMsg
],
2401 if (inst
->ppb_SaveReq
)
2404 struct Window
*win
= NULL
;
2406 get(inst
->ppb_Objects
[OBJNDX_WIN_Main
], MUIA_Window_Window
, &win
);
2409 Result
= MUI_AslRequestTags(inst
->ppb_SaveReq
,
2410 ASLFR_TitleText
, GetLocString(MSGID_MENU_PROJECT_SAVEAS
),
2412 ASLFR_SleepWindow
, TRUE
,
2417 BPTR dirLock
= Lock(inst
->ppb_SaveReq
->fr_Drawer
, ACCESS_READ
);
2422 BPTR oldDir
= CurrentDir(dirLock
);
2424 Result
= WritePrefsFile(inst
, inst
->ppb_SaveReq
->fr_File
);
2426 if (RETURN_OK
== Result
)
2428 if (inst
->ppb_fCreateIcons
)
2429 SaveIcon(inst
, inst
->ppb_SaveReq
->fr_File
);
2441 static APTR
DeletePenFunc(struct Hook
*hook
, Object
*o
, Msg msg
)
2443 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2444 LONG ActiveEntryNr
= MUIV_NList_Active_Off
;
2447 get(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIA_NList_Active
, &ActiveEntryNr
);
2448 get(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIA_NList_Entries
, &PenCount
);
2450 if (MUIV_NList_Active_Off
!= ActiveEntryNr
)
2455 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: \n", __LINE__
));
2456 SetChangedFlag(inst
, TRUE
);
2458 get(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIA_NList_Entries
, &Entries
);
2460 // adjust all pen numbers in inst->ppb_Objects[OBJNDX_ScalosPenList]
2462 for (n
=0; n
<Entries
; n
++)
2464 struct ScalosPenListEntry
*snle
;
2466 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_GetEntry
, n
, &snle
);
2468 if (snle
->snle_PenNr
== ActiveEntryNr
)
2469 snle
->snle_PenNr
= PEN_UNDEFINED
;
2470 if (snle
->snle_PenNr
> ActiveEntryNr
)
2474 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_Remove
, MUIV_NList_Remove_Active
);
2475 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_Redraw
, MUIV_NList_Redraw_All
);
2478 UpdatePalettePenCount(inst
);
2484 static APTR
ContextMenuTriggerHookFunc(struct Hook
*hook
, Object
*o
, Msg msg
)
2486 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2487 Object
*MenuObj
= *((Object
**) msg
);
2488 ULONG MenuHookIndex
= 0;
2489 struct Hook
*MenuHook
= NULL
;
2491 d1(kprintf(__FUNC__
"/%ld: MenuObj=%08lx\n", __LINE__
, MenuObj
));
2492 d1(kprintf(__FUNC__
"/%ld: msg=%08lx *msg=%08lx\n", __LINE__
, msg
, *((ULONG
*) msg
)));
2494 get(MenuObj
, MUIA_UserData
, &MenuHookIndex
);
2496 if (MenuHookIndex
> 0 && MenuHookIndex
< HOOKNDX_MAX
)
2497 MenuHook
= &inst
->ppb_Hooks
[MenuHookIndex
];
2499 d1(kprintf(__FUNC__
"/%ld: MenuHook=%08lx\n", __LINE__
, MenuHook
));
2501 DoMethod(inst
->ppb_Objects
[OBJNDX_Group_Main
], MUIM_CallHook
, MenuHook
, MenuObj
);
2506 //----------------------------------------------------------------------------
2508 static void AslIntuiMsgHookFunc(struct Hook
*hook
, Object
*o
, Msg msg
)
2510 struct PalettePrefsInst
*inst
= (struct PalettePrefsInst
*) hook
->h_Data
;
2511 struct IntuiMessage
*iMsg
= (struct IntuiMessage
*) msg
;
2513 if (IDCMP_REFRESHWINDOW
== iMsg
->Class
)
2515 DoMethod(inst
->ppb_Objects
[OBJNDX_APP_Main
], MUIM_Application_CheckRefresh
);
2519 //----------------------------------------------------------------------------
2521 static void InitPenList(struct PalettePrefsInst
*inst
)
2523 const struct PenListInit
*pli
;
2525 for (pli
=PenListContents
; pli
->pli_PenIndex
; pli
++)
2527 struct ScalosPenListEntry snle
;
2529 snle
.snle_PenIndex
= pli
->pli_PenIndex
;
2530 snle
.snle_PenNr
= pli
->pli_PenNr
;
2531 snle
.snle_PenName
= GetLocString(pli
->pli_PenNameID
);
2533 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
],
2534 MUIM_NList_InsertSingle
, &snle
, MUIV_NList_Insert_Sorted
);
2539 static LONG
ReadPrefsFile(struct PalettePrefsInst
*inst
, CONST_STRPTR Filename
, BOOL Quiet
)
2542 struct IFFHandle
*iff
;
2543 BOOL iffOpened
= FALSE
;
2545 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_NList_Clear
);
2557 iff
->iff_Stream
= (IPTR
)Open(Filename
, MODE_OLDFILE
);
2558 if (0 == iff
->iff_Stream
)
2564 Result
= OpenIFF(iff
, IFFF_READ
);
2565 if (RETURN_OK
!= Result
)
2570 Result
= StopChunks(iff
, StopChunkList
, 2);
2571 if (RETURN_OK
!= Result
)
2574 while (RETURN_OK
== Result
)
2576 struct ContextNode
*cn
;
2578 Result
= ParseIFF(iff
, IFFPARSE_SCAN
);
2579 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: Result=%ld\n", __LINE__
, Result
));
2580 if (RETURN_OK
!= Result
)
2583 cn
= CurrentChunk(iff
);
2587 if (ID_PENS
== cn
->cn_ID
)
2592 Actual
= ReadChunkBytes(iff
, &PenCount
, sizeof(PenCount
));
2596 PenCount
= SCA_BE2WORD(PenCount
);
2598 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: PenCount=%ld\n", __LINE__
, PenCount
));
2603 for (Pen
=0; Pen
<PenCount
; Pen
++)
2605 struct ScalosPen sPen
;
2607 if (ReadChunkBytes(iff
, &sPen
, sizeof(sPen
)) >= 0)
2609 sPen
.sp_pentype
= SCA_BE2WORD(sPen
.sp_pentype
);
2610 sPen
.sp_pen
= SCA_BE2WORD(sPen
.sp_pen
);
2611 SearchAndSetPen(inst
, &sPen
);
2615 else if (ID_SPAL
== cn
->cn_ID
)
2617 LONG n
, ScreenColorListEntries
;
2620 Actual
= ReadChunkBytes(iff
, &ScreenColorListEntries
, sizeof(ScreenColorListEntries
));
2623 ScreenColorListEntries
= SCA_BE2LONG(ScreenColorListEntries
);
2624 ScreenColorListEntries
>>= 16;
2626 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: ScreenColorListEntries=%ld\n", __LINE__
, ScreenColorListEntries
));
2628 for (n
=0; n
<ScreenColorListEntries
; n
++)
2630 struct PensListConstruct splc
;
2631 struct PensListEntry sple
;
2633 Actual
= ReadChunkBytes(iff
, &splc
, sizeof(splc
));
2635 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: Read Palette Size=%ld Actual=%ld\n", __LINE__
, cn
->cn_Size
, Actual
));
2642 sple
.sple_Index
= n
;
2643 sple
.sple_Red
= SCA_BE2LONG(splc
.splc_Red
);
2644 sple
.sple_Green
= SCA_BE2LONG(splc
.splc_Green
);
2645 sple
.sple_Blue
= SCA_BE2LONG(splc
.splc_Blue
);
2647 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
],
2648 MUIM_NList_InsertSingle
, &sple
, MUIV_NList_Insert_Sorted
);
2653 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: Result=%ld\n", __LINE__
, Result
));
2654 if (IFFERR_EOF
== Result
)
2663 if (iff
->iff_Stream
)
2664 Close((BPTR
)iff
->iff_Stream
);
2669 if (RETURN_OK
!= Result
&& !Quiet
)
2673 Fault(Result
, "", Buffer
, sizeof(Buffer
) - 1);
2676 MUI_Request(inst
->ppb_Objects
[OBJNDX_APP_Main
], inst
->ppb_Objects
[OBJNDX_WIN_Main
], 0, NULL
,
2677 GetLocString(MSGID_ABOUTREQOK
),
2678 GetLocString(MSGID_REQTITLE_READERROR
),
2683 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_Redraw
, MUIV_NList_Redraw_All
);
2684 UpdatePalettePenCount(inst
);
2686 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: Result=%ld\n", __LINE__
, Result
));
2692 static void SearchAndSetPen(struct PalettePrefsInst
*inst
, const struct ScalosPen
*sPen
)
2698 struct ScalosPenListEntry
*snle
= NULL
;
2700 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_GetEntry
, n
, &snle
);
2704 if (snle
->snle_PenIndex
== sPen
->sp_pentype
)
2706 snle
->snle_PenNr
= sPen
->sp_pen
;
2714 static LONG
WritePrefsFile(struct PalettePrefsInst
*inst
, CONST_STRPTR Filename
)
2716 struct IFFHandle
*iff
;
2718 BOOL IffOpen
= FALSE
;
2721 static const struct PrefHeader prefHeader
= { 1, 0, 0L };
2734 iff
->iff_Stream
= (IPTR
)Open(Filename
, MODE_NEWFILE
);
2735 if (0 == iff
->iff_Stream
)
2737 // ... try to create missing directories here
2738 STRPTR FilenameCopy
;
2741 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: Result=%ld\n", __LINE__
, Result
));
2743 FilenameCopy
= AllocVec(1 + strlen(Filename
), MEMF_PUBLIC
);
2749 strcpy(FilenameCopy
, Filename
);
2751 lp
= PathPart(FilenameCopy
);
2757 dirLock
= CreateDir(FilenameCopy
);
2762 iff
->iff_Stream
= (IPTR
)Open(Filename
, MODE_NEWFILE
);
2763 if (0 == iff
->iff_Stream
)
2769 FreeVec(FilenameCopy
);
2772 d1(kprintf(__FILE__
"/" __FUNC__
"/%ld: Result=%ld\n", __LINE__
, Result
));
2773 if (RETURN_OK
!= Result
)
2777 Result
= OpenIFF(iff
, IFFF_WRITE
);
2778 if (RETURN_OK
!= Result
)
2783 Result
= PushChunk(iff
, ID_PREF
, ID_FORM
, IFFSIZE_UNKNOWN
);
2784 if (RETURN_OK
!= Result
)
2787 Result
= PushChunk(iff
, 0, ID_PRHD
, IFFSIZE_UNKNOWN
);
2788 if (RETURN_OK
!= Result
)
2791 if (WriteChunkBytes(iff
, (APTR
) &prefHeader
, sizeof(prefHeader
)) < 0)
2797 Result
= PopChunk(iff
);
2798 if (RETURN_OK
!= Result
)
2801 Result
= PushChunk(iff
, 0, ID_SPAL
, IFFSIZE_UNKNOWN
);
2802 if (RETURN_OK
!= Result
)
2805 get(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIA_List_Entries
, &Entries
);
2808 Entries
= SCA_LONG2BE(Entries
);
2810 if (WriteChunkBytes(iff
, &Entries
, sizeof(Entries
)) < 0)
2817 while (RETURN_OK
== Result
)
2819 struct PensListConstruct splc
;
2820 struct PensListEntry
*sple
= NULL
;
2822 DoMethod(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIM_List_GetEntry
, n
, &sple
);
2826 splc
.splc_Red
= SCA_LONG2BE(sple
->sple_Red
);
2827 splc
.splc_Green
= SCA_LONG2BE(sple
->sple_Green
);
2828 splc
.splc_Blue
= SCA_LONG2BE(sple
->sple_Blue
);
2830 if (WriteChunkBytes(iff
, &splc
, sizeof(struct PensListConstruct
)) < 0)
2837 if (RETURN_OK
!= Result
)
2840 Result
= PopChunk(iff
);
2841 if (RETURN_OK
!= Result
)
2844 Result
= PushChunk(iff
, 0, ID_PENS
, IFFSIZE_UNKNOWN
);
2845 if (RETURN_OK
!= Result
)
2848 get(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIA_List_Entries
, &Entries
);
2851 wEntries
= SCA_WORD2BE(wEntries
);
2853 if (WriteChunkBytes(iff
, &wEntries
, sizeof(wEntries
)) < 0)
2860 while (RETURN_OK
== Result
)
2862 struct ScalosPen sPen
;
2863 struct ScalosPenListEntry
*snle
= NULL
;
2865 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_List_GetEntry
, n
, &snle
);
2869 sPen
.sp_pentype
= SCA_WORD2BE(snle
->snle_PenIndex
);
2870 sPen
.sp_pen
= SCA_WORD2BE(snle
->snle_PenNr
);
2872 if (WriteChunkBytes(iff
, &sPen
, sizeof(sPen
)) < 0)
2879 if (RETURN_OK
!= Result
)
2882 Result
= PopChunk(iff
);
2883 if (RETURN_OK
!= Result
)
2886 Result
= PopChunk(iff
);
2887 if (RETURN_OK
!= Result
)
2897 if (iff
->iff_Stream
)
2899 Close((BPTR
)iff
->iff_Stream
);
2900 iff
->iff_Stream
= 0;
2906 if (RETURN_OK
!= Result
)
2910 Fault(Result
, "", Buffer
, sizeof(Buffer
) - 1);
2913 MUI_Request(inst
->ppb_Objects
[OBJNDX_APP_Main
], inst
->ppb_Objects
[OBJNDX_WIN_Main
], 0, NULL
,
2914 GetLocString(MSGID_ABOUTREQOK
),
2915 GetLocString(MSGID_REQTITLE_SAVEERROR
),
2924 static LONG
SaveIcon(struct PalettePrefsInst
*inst
, CONST_STRPTR IconName
)
2926 struct DiskObject
*icon
, *allocIcon
;
2928 static UBYTE ImageData
[] =
2930 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
2931 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x18, 0x00, 0x60, 0x00, 0x10, 0x00,
2932 0x00, 0x00, 0x20, 0xFC, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x41, 0x02, 0x08, 0x00, 0x0C, 0x00,
2933 0x00, 0x00, 0x40, 0x82, 0x08, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x40, 0x82, 0x08, 0x00, 0x0C, 0x00,
2934 0x00, 0x00, 0x21, 0x04, 0x08, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0x18, 0x10, 0x00, 0x0C, 0x00,
2935 0x00, 0x00, 0x00, 0x60, 0x20, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x00, 0x0C, 0x00,
2936 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x0C, 0x00,
2937 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0C, 0x00,
2938 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x0C, 0x00,
2939 0x40, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00,
2940 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
2941 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
2942 0xD5, 0x55, 0x55, 0x55, 0x55, 0x56, 0x00, 0x00, 0xD5, 0x55, 0x50, 0x00, 0x55, 0x55, 0x80, 0x00,
2943 0xD5, 0x55, 0x47, 0xFF, 0x95, 0x55, 0x60, 0x00, 0xD5, 0x55, 0x5F, 0x03, 0xE5, 0x55, 0x50, 0x00,
2944 0xD5, 0x55, 0x3E, 0x55, 0xF5, 0x55, 0x50, 0x00, 0xD5, 0x55, 0x3F, 0x55, 0xF5, 0x55, 0x50, 0x00,
2945 0xD5, 0x55, 0x3F, 0x55, 0xF5, 0x55, 0x50, 0x00, 0xD5, 0x55, 0x5E, 0x53, 0xF5, 0x55, 0x50, 0x00,
2946 0xD5, 0x55, 0x41, 0x47, 0xE5, 0x55, 0x50, 0x00, 0xD5, 0x55, 0x55, 0x1F, 0xD5, 0x55, 0x50, 0x00,
2947 0xD5, 0x55, 0x55, 0x7F, 0x15, 0x55, 0x50, 0x00, 0xD5, 0x55, 0x54, 0xFC, 0x55, 0x55, 0x50, 0x00,
2948 0xD5, 0x55, 0x55, 0xE1, 0x55, 0x55, 0x50, 0x00, 0xD5, 0x55, 0x54, 0xF5, 0x55, 0x55, 0x50, 0x00,
2949 0xD5, 0x55, 0x55, 0x05, 0x55, 0x55, 0x50, 0x00, 0xD5, 0x55, 0x54, 0xF5, 0x55, 0x55, 0x50, 0x00,
2950 0xD5, 0x55, 0x54, 0xF5, 0x55, 0x55, 0x50, 0x00, 0x35, 0x55, 0x55, 0x05, 0x55, 0x55, 0x50, 0x00,
2951 0x0D, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x03, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00,
2952 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2955 static struct Image NormalImage
=
2964 static STRPTR defToolTypes
[] =
2970 static struct DiskObject DefaultIcon
=
2972 WB_DISKMAGIC
, WB_DISKVERSION
,
2977 GFLG_GADGIMAGE
| GFLG_GADGHBOX
,
2978 GACT_RELVERIFY
| GACT_IMMEDIATE
,
2991 NO_ICON_POSITION
, NO_ICON_POSITION
,
2997 icon
= allocIcon
= GetDiskObject("ENV:sys/def_ScaPalettePrefs");
2999 icon
= allocIcon
= GetDiskObject("ENV:sys/def_pref");
3001 icon
= &DefaultIcon
;
3005 STRPTR oldDefaultTool
= icon
->do_DefaultTool
;
3007 icon
->do_DefaultTool
= (STRPTR
) inst
->ppb_ProgramName
;
3009 PutDiskObject((STRPTR
) IconName
, icon
);
3011 icon
->do_DefaultTool
= oldDefaultTool
;
3014 FreeDiskObject(allocIcon
);
3021 static void UpdatePalettePenCount(struct PalettePrefsInst
*inst
)
3023 ULONG allocatedPens
= 0;
3024 UWORD availablePens
;
3026 availablePens
= 1 + inst
->ppb_WBScreen
->ViewPort
.ColorMap
->PalExtra
->pe_SharableColors
;
3028 if (inst
->ppb_Objects
[OBJNDX_AllocatedPensList
])
3029 get(inst
->ppb_Objects
[OBJNDX_AllocatedPensList
], MUIA_List_Entries
, &allocatedPens
);
3033 sprintf(inst
->ppb_PalettePenListTitle
, GetLocString(MSGID_TITLE_PALETTEPENLIST
),
3034 allocatedPens
, availablePens
);
3036 if (inst
->ppb_Objects
[OBJNDX_AllocatedPensListTitleObj
])
3037 set(inst
->ppb_Objects
[OBJNDX_AllocatedPensListTitleObj
], MUIA_Text_Contents
, (ULONG
) inst
->ppb_PalettePenListTitle
);
3039 set(inst
->ppb_Objects
[OBJNDX_NewButton
], MUIA_Disabled
, allocatedPens
>= availablePens
);
3042 //----------------------------------------------------------------------------
3044 static ULONG
GetPenReferenceCount(struct PalettePrefsInst
*inst
, ULONG PenNr
)
3047 ULONG References
= 0;
3050 get(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIA_NList_Entries
, &Entries
);
3052 for (n
=0; n
<Entries
; n
++)
3054 const struct ScalosPenListEntry
*snle
= NULL
;
3056 DoMethod(inst
->ppb_Objects
[OBJNDX_ScalosPenList
], MUIM_NList_GetEntry
, n
, &snle
);
3059 if (snle
->snle_PenNr
== PenNr
)
3067 //----------------------------------------------------------------------------
3069 static void SetChangedFlag(struct PalettePrefsInst
*inst
, BOOL changed
)
3071 if (changed
!= inst
->ppb_Changed
)
3073 set(inst
->ppb_Objects
[OBJNDX_Lamp_Changed
],
3074 MUIA_Lamp_Color
, changed
? MUIV_Lamp_Color_Ok
: MUIV_Lamp_Color_Off
);
3075 inst
->ppb_Changed
= changed
;
3079 //---------------------------------------------------------------
3081 BOOL
initPlugin(struct PluginBase
*PluginBase
)
3083 MajorVersion
= PluginBase
->pl_LibNode
.lib_Version
;
3084 MinorVersion
= PluginBase
->pl_LibNode
.lib_Revision
;
3086 d1(kprintf("%s/%s/%ld: Signature=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, Signature
));
3088 if (0x4711 == Signature
++)
3090 d1(kprintf(__FUNC__
"/%ld: PluginBase=%08lx procName=<%s>\n", __LINE__
, \
3091 PluginPrefsBase
, FindTask(NULL
)->tc_Node
.ln_Name
));
3093 if (!OpenLibraries())
3096 #if !defined(__amigaos4__) && !defined(__AROS__)
3097 if (_STI_240_InitMemFunctions())
3101 PalettePrefsClass
= MUI_CreateCustomClass(&PluginBase
->pl_LibNode
, MUIC_Group
,
3102 NULL
, sizeof(struct PalettePrefsInst
), DISPATCHER_REF(PalettePrefs
));
3104 d1(kprintf(__FUNC__
"/%ld: PalettePrefsClass=%08lx\n", __LINE__
, PalettePrefsClass
));
3105 if (NULL
== PalettePrefsClass
)
3108 d1(kprintf(__FUNC__
"/%ld: PalettePrefsCatalog=%08lx\n", __LINE__
, PalettePrefsCatalog
));
3109 d1(kprintf(__FUNC__
"/%ld: LocaleBase=%08lx\n", __LINE__
, LocaleBase
));
3113 d1(kprintf(__FUNC__
"/%ld: PalettePrefsLocale=%08lx\n", __LINE__
, PalettePrefsLocale
));
3115 if (NULL
== PalettePrefsLocale
)
3116 PalettePrefsLocale
= OpenLocale(NULL
);
3118 d1(kprintf(__FUNC__
"/%ld: PalettePrefsLocale=%08lx\n", __LINE__
, PalettePrefsLocale
));
3120 if (PalettePrefsLocale
)
3122 d1(kprintf(__FUNC__
"/%ld: PalettePrefsCatalog=%08lx\n", __LINE__
, PalettePrefsCatalog
));
3124 if (NULL
== PalettePrefsCatalog
)
3126 PalettePrefsCatalog
= OpenCatalog(PalettePrefsLocale
,
3127 (STRPTR
) "Scalos/ScalosPalette.catalog", NULL
);
3129 d1(kprintf(__FUNC__
"/%ld: \n", __LINE__
));
3134 TranslateNewMenu(ContextMenus
);
3136 NewColorAdjustClass
= MUI_CreateCustomClass(NULL
, MUIC_Coloradjust
, NULL
,
3137 4, DISPATCHER_REF(NewColorAdjust
));
3138 d1(kprintf( "%s/%s/%ld: NewColorAdjustClass=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, NewColorAdjustClass
));
3139 if (NULL
== NewColorAdjustClass
)
3140 return FALSE
; // Failure
3142 NewPalettePenListClass
= MUI_CreateCustomClass(NULL
, MUIC_NList
, NULL
,
3143 4, DISPATCHER_REF(NewPalettePenList
));
3144 if (NULL
== NewPalettePenListClass
)
3145 return FALSE
; // Failure
3147 NewScalosPenListClass
= MUI_CreateCustomClass(NULL
, MUIC_NList
, NULL
,
3148 sizeof(struct NewScalosPenListInst
), DISPATCHER_REF(NewScalosPenList
));
3149 if (NULL
== NewScalosPenListClass
)
3150 return FALSE
; // Failure
3152 myNListClass
= MUI_CreateCustomClass(NULL
, MUIC_NList
,
3153 NULL
, 4, DISPATCHER_REF(myNList
));
3154 if (NULL
== myNListClass
)
3155 return FALSE
; // Failure
3157 DataTypesImageClass
= InitDtpicClass();
3158 d1(KPrintF(__FUNC__
"/%ld: DataTypesImageClass=%08lx\n", __LINE__
, DataTypesImageClass
));
3159 if (NULL
== DataTypesImageClass
)
3160 return FALSE
; // Failure
3163 d1(kprintf(__FUNC__
"/%ld: Success\n", __LINE__
));
3165 return TRUE
; // Success
3168 //----------------------------------------------------------------------------
3170 static LONG
ColorComp(ULONG Color1
, ULONG Color2
)
3172 if (Color1
== Color2
)
3174 if (Color1
> Color2
)
3180 static LONG
RGBComp(const struct PensListEntry
*sple1
, const struct PensListEntry
*sple2
)
3184 Result
= ColorComp(sple1
->sple_Red
, sple2
->sple_Red
);
3186 Result
= ColorComp(sple1
->sple_Green
, sple2
->sple_Green
);
3188 Result
= ColorComp(sple1
->sple_Blue
, sple2
->sple_Blue
);
3193 //----------------------------------------------------------------------------
3195 #if !defined(__SASC) && ! defined(__amigaos4__)
3206 #endif /* !__SASC && !__amigaos4__ */
3208 //----------------------------------------------------------------------------