Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

Aros/Developer/Scalos

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

Introduction This is an incomplete guide, please support #Plugins #Modules #Tools #Scalos Reference #See also #See also #Scalos #History scalos.library - This library is used as application interface for the Scalos Workbench replacement scalosgfx.library - This documentation gives you information about scalosgfx.library scalos API - This documentation gives you information on how to communicate with Scalos and its windowtasks Scalos devicelist - This class is used to generate a list of all currently available devices Scalos devicewindow - This class implements the main Workbench (= root) window, which shows the icons for the mounted devices and volumes Scalos filetrans - This class is used to display a progress window showing the user what is currently going on while copying or moving files/directories Scalos root - This class is used for some fundamental message and event handling Scalos window - This class implements all common window functionality used for icon windows, text windows and device windows Scalos iconwindow - This class implements the functionality for the common Workbench icon windows Scalos textwindow - This class implements the text-only Scalos windows Scalos title - This class implements the screen title and window title functionality preferences.library - This library provides a convenient way to store the preferences for your program iconobject.library - This library is an interface to the iconobject.datatype iconobject.datatype - The iconobject.datatype has a special API to work with icons. makes both images, tooltypes and many more AROS icon.library won't work on Scalos. Scalos uses its own iconobject.library and an iconobject datatype system enable the support for icon.library or other icons somewhere in the Scalos menu Developer Docs src from here Plugins src from here Source examples Prefs for any plugins // FileTypesPrefs.c // $Date$ // $Revision$ #ifdef __AROS__ #define MUIMASTER_YES_INLINE_STDARG #endif #include <stdlib.h> #include <string.h> #include <stdio.h> #include <stddef.h> #include <ctype.h> #include <time.h> #include <limits.h> #include <dos/dos.h> #include <exec/types.h> #include <exec/memory.h> #include <exec/ports.h> #include <exec/io.h> #include <exec/resident.h> #include <utility/utility.h> #include <libraries/dos.h> #include <libraries/dosextens.h> #include <libraries/gadtools.h> #include <libraries/asl.h> #include <libraries/mui.h> #include <libraries/iffparse.h> #include <libraries/ttengine.h> #include <devices/clipboard.h> #include <workbench/workbench.h> #include <workbench/icon.h> #include <intuition/intuition.h> #include <intuition/classusr.h> #include <graphics/gfxmacros.h> #include <prefs/prefhdr.h> #include <clib/alib_protos.h> #include <proto/exec.h> #include <proto/dos.h> #include <proto/icon.h> #include <proto/graphics.h> #include <proto/intuition.h> #include <proto/gadtools.h> #include <proto/utility.h> #include <proto/asl.h> #include <proto/locale.h> #include <proto/preferences.h> #include <proto/iconobject.h> #define USE_INLINE_STDARG #include <proto/ttengine.h> #undef USE_INLINE_STDARG #if !defined(__AROS__) #define NO_INLINE_STDARG #endif #include <proto/muimaster.h> #include <mui/NListview_mcc.h> #include <mui/NListtree_mcc.h> #include <mui/Lamp_mcc.h> #include <scalos/scalosprefsplugin.h> #include <scalos/preferences.h> #include <DefIcons.h> #include "defs.h" #include <Year.h> // +jmc+ #include <FontSampleMCC.h> #include "IconobjectMCC.h" #include "DataTypesMCC.h" #include "debug.h" #include "FileTypesPrefs.h" #include "FileTypesPrefs_proto.h" #define ScalosFileTypes_NUMBERS #define ScalosFileTypes_ARRAY #define ScalosFileTypes_CODE #include STR(SCALOSLOCALE) #include "plugin.h" //---------------------------------------------------------------------------- #define ID_MAIN MAKE_ID('M','A','I','N') #define PS_DATA(prefsstruct) ((STRPTR) (prefsstruct)) + sizeof((prefsstruct)->ps_Size) #define ENV_FILETYPES_DIR "ENV:Scalos/FileTypes" #define ENVARC_FILETYPES_DIR "ENVARC:Scalos/FileTypes" #define ENV_DEFICONS_PREFS "ENV:deficons.prefs" #define ENVARC_DEFICONS_PREFS "ENVARC:deficons.prefs" //---------------------------------------------------------------------------- #define IMG(prefix1,PREFIX2) \ BodychunkObject,\ MUIA_FixWidth , PREFIX2##_WIDTH ,\ MUIA_FixHeight , PREFIX2##_HEIGHT,\ MUIA_Bitmap_Width , PREFIX2##_WIDTH ,\ MUIA_Bitmap_Height , PREFIX2##_HEIGHT,\ MUIA_Bodychunk_Depth , PREFIX2##_DEPTH ,\ MUIA_Bodychunk_Body , (IPTR) prefix1##_body,\ MUIA_Bodychunk_Compression, PREFIX2##_COMPRESSION,\ MUIA_Bodychunk_Masking , PREFIX2##_MASKING,\ MUIA_Bitmap_SourceColors , (IPTR) prefix1##_colors,\ MUIA_Bitmap_Transparent , 0,\ End //---------------------------------------------------------------------------- // local data structures #define KeyButtonHelp(name,key,HelpText)\ TextObject,\ ButtonFrame,\ MUIA_CycleChain, TRUE, \ MUIA_Font, MUIV_Font_Button,\ MUIA_Text_Contents, (IPTR) GetLocString(name),\ MUIA_Text_PreParse, (IPTR)"\33c",\ MUIA_Text_HiChar , (IPTR)key,\ MUIA_ControlChar , (IPTR)key,\ MUIA_InputMode , MUIV_InputMode_RelVerify,\ MUIA_Background , MUII_ButtonBack,\ MUIA_ShortHelp , (IPTR) GetLocString(HelpText),\ End #define KeyButtonHelp2(name,key,HelpText,Weight)\ TextObject,\ ButtonFrame,\ MUIA_CycleChain, TRUE, \ MUIA_Font, MUIV_Font_Button,\ MUIA_Text_Contents, (IPTR) GetLocString(name),\ MUIA_Text_PreParse, (IPTR)"\33c",\ MUIA_Text_HiChar , (IPTR) *GetLocString(key),\ MUIA_ControlChar , (IPTR) *GetLocString(key),\ MUIA_InputMode , MUIV_InputMode_RelVerify,\ MUIA_Background , MUII_ButtonBack,\ MUIA_ShortHelp , (IPTR) GetLocString(HelpText),\ MUIA_Weight , (Weight), \ End #define CheckMarkHelp(selected, HelpTextID)\ ImageObject,\ ImageButtonFrame,\ MUIA_CycleChain , TRUE, \ MUIA_InputMode , MUIV_InputMode_Toggle,\ MUIA_Image_Spec , MUII_CheckMark,\ MUIA_Image_FreeVert , TRUE,\ MUIA_Selected , selected,\ MUIA_Background , MUII_ButtonBack,\ MUIA_ShowSelState , FALSE,\ MUIA_ShortHelp , (IPTR)GetLocString(HelpTextID),\ End struct AddEntryListEntry { enum FtEntryType ael_EntryType; }; struct AddAttrListEntry { enum ftAttributeType aal_EntryType; }; struct EditAttrListEntry { char eal_ValueString[MAX_ATTRVALUE]; struct FtAttribute eal_fta; }; enum AttrDefaultType { ATTRDEFTYPE_None, ATTRDEFTYPE_ULong, ATTRDEFTYPE_LocString, ATTRDEFTYPE_String, ATTRDEFTYPE_String2, ATTRDEFTYPE_PathName, ATTRDEFTYPE_FileName, ATTRDEFTYPE_FontString, ATTRDEFTYPE_TTFontString, }; struct AttrDefaultValue { enum AttrDefaultType avd_Type; ULONG avd_ULongValue; char *avd_StringValue; ULONG (*avd_ConvertValueFromString)(CONST_STRPTR DisplayString); }; struct AttributeDef { enum ftAttributeType atd_Type; BOOL atd_Required; ULONG atd_ExcludeCount; enum ftAttributeType atd_Exclude[10]; ULONG atd_MinValue; // Minimum ULONG value or minimal string length ULONG atd_MaxValue; // Maximum ULONG value or maximal string length struct AttrDefaultValue atd_DefaultContents; struct AttrDefaultValue *atd_PossibleContents; ULONG atd_NumberOfValues; }; struct EntryAttributes { enum FtEntryType eat_EntryType; const struct AttributeDef *eat_AttrArray; ULONG eat_AttrCount; // number of entries in eat_AttrArray }; enum FindDir { FINDDIR_First = 0, FINDDIR_Next, FINDDIR_Prev }; struct FoundNode { struct Node fdn_Node; Object *fdn_ListTree; struct MUI_NListtree_TreeNode *fdn_TreeNode; ULONG fdn_Index; }; //---------------------------------------------------------------------------- // aus mempools.lib #if !defined(__amigaos4__) && !defined(__AROS__) extern int _STI_240_InitMemFunctions(void); extern void _STD_240_TerminateMemFunctions(void); #endif //---------------------------------------------------------------------------- // local functions DISPATCHERPROTO(FileTypesPrefs); static Object *CreatePrefsGroup(struct FileTypesPrefsInst *inst); static Object **CreateSubWindows(Class *cl, Object *o); static Object *CreatePrefsImage(void); static void InitHooks(struct FileTypesPrefsInst *inst); static BOOL OpenLibraries(void); static void CloseLibraries(void); static void TranslateNewMenu(struct NewMenu *nm); static void TranslateStringArray(STRPTR *stringArray); static SAVEDS(APTR) INTERRUPT TreeConstructFunc(struct Hook *hook, APTR obj, struct MUIP_NListtree_ConstructMessage *ltcm); static SAVEDS(void) INTERRUPT TreeDestructFunc(struct Hook *hook, APTR obj, struct MUIP_NListtree_DestructMessage *ltdm); static SAVEDS(ULONG) INTERRUPT TreeDisplayFunc(struct Hook *hook, APTR obj, struct MUIP_NListtree_DisplayMessage *ltdm); static SAVEDS(APTR) INTERRUPT AttrConstructFunc(struct Hook *hook, APTR obj, struct NList_ConstructMessage *ltcm); static SAVEDS(void) INTERRUPT AttrDestructFunc(struct Hook *hook, APTR obj, struct NList_DestructMessage *ltdm); static SAVEDS(ULONG) INTERRUPT AttrDisplayFunc(struct Hook *hook, APTR obj, struct NList_DisplayMessage *ltdm); static SAVEDS(APTR) INTERRUPT AddEntryConstructFunc(struct Hook *hook, APTR obj, struct NList_ConstructMessage *ltcm); static SAVEDS(void) INTERRUPT AddEntryDestructFunc(struct Hook *hook, APTR obj, struct NList_DestructMessage *ltdm); static SAVEDS(ULONG) INTERRUPT AddEntryDisplayFunc(struct Hook *hook, APTR obj, struct NList_DisplayMessage *ltdm); static SAVEDS(APTR) INTERRUPT AddAttrConstructFunc(struct Hook *hook, APTR obj, struct NList_ConstructMessage *ltcm); static SAVEDS(void) INTERRUPT AddAttrDestructFunc(struct Hook *hook, APTR obj, struct NList_DestructMessage *ltdm); static SAVEDS(ULONG) INTERRUPT AddAttrDisplayFunc(struct Hook *hook, APTR obj, struct NList_DisplayMessage *ltdm); static SAVEDS(APTR) INTERRUPT EditAttrConstructFunc(struct Hook *hook, APTR obj, struct NList_ConstructMessage *ltcm); static SAVEDS(void) INTERRUPT EditAttrDestructFunc(struct Hook *hook, APTR obj, struct NList_DestructMessage *ltdm); static SAVEDS(ULONG) INTERRUPT EditAttrDisplayFunc(struct Hook *hook, APTR obj, struct NList_DisplayMessage *ltdm); static SAVEDS(ULONG) INTERRUPT EditAttrTTFontOpenHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(ULONG) INTERRUPT EditAttrTTFontCloseHookFunc(struct Hook *hook, Object *obj, Msg msg); static SAVEDS(APTR) INTERRUPT ResetToDefaultsHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT LastSavedHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT RestoreHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT HideEmptyEntriesHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT CollapseHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT ExpandHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT CollapseAllHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT ExpandAllHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT CollapseFileTypesHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT ExpandFileTypesHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT CollapseAllFileTypesHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT ExpandAllFileTypesHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT CopyHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT CutHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT PasteHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT CopyAttrHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT CutAttrHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT PasteAttrHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT SelectEntryHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT SelectAttributeHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT EditAttributeHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT AboutFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT ContextMenuTriggerHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT AddEntryHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT AddAttributeHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT RemoveEntryHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT RemoveAttributeHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT ChangeAttributeHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT SelectAttributeValueHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(ULONG) INTERRUPT EditAttributePopAslFileStartHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(ULONG) INTERRUPT EditAttributePopAslPathStartHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT OpenHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT SaveAsHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(void) INTERRUPT AslIntuiMsgHookFunc(struct Hook *hook, Object *o, Msg msg); static BOOL IncrementalSearchFileType(struct FileTypesPrefsInst *inst, CONST_STRPTR SearchString, enum FindDir dir); static void BuildFindTree(struct FileTypesPrefsInst *inst, Object *ListTree, struct MUI_NListtree_TreeNode *list, CONST_STRPTR pattern, struct MUI_NListtree_TreeNode *startnode, ULONG *dosearch, BOOL CaseSensitive); static SAVEDS(void) INTERRUPT ShowFindGroupHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(void) INTERRUPT HideFindGroupHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(void) INTERRUPT IncrementalFindFileTypeHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(void) INTERRUPT IncrementalFindNextFileTypeHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(void) INTERRUPT IncrementalFindPrevFileTypeHookFunc(struct Hook *hook, Object *o, Msg msg); static LONG ReadPrefs(struct FileTypesPrefsInst *inst, CONST_STRPTR LoadName, CONST_STRPTR DefIconPrefsName); static LONG WritePrefs(struct FileTypesPrefsInst *inst, CONST_STRPTR SaveName, CONST_STRPTR DefIconPrefsName, ULONG Flags); DISPATCHERPROTO(myNListTree); DISPATCHERPROTO(myFileTypesNListTree); DISPATCHERPROTO(myNList); DISPATCHERPROTO(myFileTypesActionsNList); static void DisposeAttribute(struct FtAttribute *fta); static void CleanupAttributes(struct List *AttributesList); static const struct FtAttribute *FindAttribute(const struct FileTypesListEntry *fte, enum FtEntryType AttrType); static void RemoveAttribute(struct FileTypesListEntry *fte, enum ftAttributeType AttrType); static struct FileTypesListEntry *FindChildByType(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tn, enum FtEntryType RequestedType); static BOOL HasChildren(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tn); static void AddDefaultAttributes(struct FileTypesPrefsInst *inst, struct FileTypesListEntry *fte); static void SetAddableAttributes(struct FileTypesPrefsInst *inst, struct FileTypesListEntry *fte); static void UpdateAttributes(struct FileTypesPrefsInst *inst, struct FileTypesListEntry *fte); static void AddNewAttribute(struct FileTypesPrefsInst *inst, struct FileTypesListEntry *fte, enum ftAttributeType AttrType); static void BeginSetMenuDefaultAction(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tn); static void SetMenuDefaultAction(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tnMenu, struct MUI_NListtree_TreeNode *tnNewDefault); static const struct AttributeDef *GetAttributeDef(enum ftAttributeType AttrType, enum FtEntryType fteEntryType); static void FillListOfAttributeValues(struct FileTypesPrefsInst *inst, const struct FileTypesListEntry *fte, const struct AttributeDef *atd, const struct AttrListEntry *Attr); static ULONG ConvertGroupOrientationFromString(CONST_STRPTR DisplayString); static struct MUI_NListtree_TreeNode *CopyFileTypesEntry(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tnToListNode, struct MUI_NListtree_TreeNode *tnToPrevNode, struct MUI_NListtree_TreeNode *tnFrom, ULONG destList, ULONG srcList); static BOOL MayPasteOnto(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tnTo, struct MUI_NListtree_TreeNode *tnFrom); static struct MUI_NListtree_TreeNode *MayPasteBelow(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tnTo, struct MUI_NListtree_TreeNode *tnFrom); static void EnablePasteMenuEntry(struct FileTypesPrefsInst *inst); static BOOL MayPasteAttr(struct FileTypesPrefsInst *inst, const struct FileTypesListEntry *fte, const struct AttrListEntry *Attr); static void EnablePasteAttrMenuEntry(struct FileTypesPrefsInst *inst); static BOOL IsAttrRequired(struct FileTypesListEntry *fte, const struct AttributeDef *atd); static void EntryHasChanged(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tn); static void SetChangedFlag(struct FileTypesPrefsInst *inst, BOOL changed); static void BuildTTDescFromAttrList(char *buffer, size_t length, struct TagItem *AttrList); static BOOL ParseTTFontFromDesc(CONST_STRPTR FontDesc, IPTR *FontStyle, IPTR *FontWeight, IPTR *FontSize, STRPTR FontName, size_t FontNameSize); static void ShowHiddenNodes(struct FileTypesPrefsInst *inst); static void ParseToolTypes(struct FileTypesPrefsInst *inst, struct MUIP_ScalosPrefs_ParseToolTypes *ptt); static LONG ReadScalosPrefs(struct FileTypesPrefsInst *inst, CONST_STRPTR PrefsFileName); static CONST_STRPTR GetPrefsConfigString(APTR prefsHandle, ULONG Id, CONST_STRPTR DefaultString); static ULONG DoDragDrop(Class *cl, Object *obj, Msg msg); static struct FoundNode *AddFoundNode(struct FileTypesPrefsInst *inst, Object *ListTree, struct MUI_NListtree_TreeNode *tn); static CONST_STRPTR FindString(CONST_STRPTR string, CONST_STRPTR pattern, BOOL CaseSensitive); #if !defined(__SASC) && !defined(__MORPHOS__) && !defined(__amigaos4__) && !defined(__AROS__) static size_t stccpy(char *dest, const char *src, size_t MaxLen); #endif /* !defined(__SASC) && !defined(__MORPHOS__) && !defined(__amigaos4__) */ //---------------------------------------------------------------------------- // local data items #ifndef __AROS__ struct Library *MUIMasterBase; T_LOCALEBASE LocaleBase; struct GfxBase *GfxBase; struct Library *IconBase; T_UTILITYBASE UtilityBase; struct IntuitionBase *IntuitionBase; #endif struct Library *TTEngineBase; struct Library *IconobjectBase; struct Library *WorkbenchBase; struct Library *IFFParseBase; struct Library *DiskfontBase; struct Library *PreferencesBase; struct Library *DataTypesBase; #ifdef __amigaos4__ struct Library *DOSBase; struct DOSIFace *IDOS; struct MUIMasterIFace *IMUIMaster; struct LocaleIFace *ILocale; struct GraphicsIFace *IGraphics; struct WorkbenchIFace *IWorkbench; struct IconIFace *IIcon; struct IFFParseIFace *IIFFParse; struct IconobjectIFace *IIconobject; struct UtilityIFace *IUtility; struct IntuitionIFace *IIntuition; struct TTEngineIFace *ITTEngine; struct DiskfontIFace *IDiskfont; struct PreferencesIFace *IPreferences; struct DataTypesIFace *IDataTypes; struct Library *NewlibBase; struct Interface *INewlib; #endif #ifdef __AROS__ struct DosLibrary *DOSBase; #endif struct MUI_CustomClass *FileTypesPrefsClass; struct MUI_CustomClass *myNListClass; struct MUI_CustomClass *myFileTypesActionsNListClass; struct MUI_CustomClass *myNListTreeClass; struct MUI_CustomClass *myFileTypesNListTreeClass; struct MUI_CustomClass *FontSampleClass; struct MUI_CustomClass *IconobjectClass; struct MUI_CustomClass *DataTypesImageClass; #ifdef __AROS__ #define myNListTreeObject BOOPSIOBJMACRO_START(myNListTreeClass->mcc_Class) #define myNListObject BOOPSIOBJMACRO_START(myNListClass->mcc_Class) #define myFileTypesNListTreeObject BOOPSIOBJMACRO_START(myFileTypesNListTreeClass->mcc_Class) #define myFileTypesActionsNListObject BOOPSIOBJMACRO_START(myFileTypesActionsNListClass->mcc_Class) #else #define myNListTreeObject NewObject(myNListTreeClass->mcc_Class, 0 #define myNListObject NewObject(myNListClass->mcc_Class, 0 #define myFileTypesNListTreeObject NewObject(myFileTypesNListTreeClass->mcc_Class, 0 #define myFileTypesActionsNListObject NewObject(myFileTypesActionsNListClass->mcc_Class, 0 #endif static struct Catalog *FileTypesPrefsCatalog; static struct Locale *FileTypesPrefsLocale; static BOOL StaticsTranslated; static const struct MUIP_ScalosPrefs_MCCList RequiredMccList[] = { { MUIC_NListtree, 18, 18 }, { MUIC_NList, 18, 0 }, { NULL, 0, 0 } }; static ULONG MajorVersion, MinorVersion; static const struct Hook FileTypesPrefsHooks[] = { { { NULL, NULL }, NULL, NULL, NULL }, { { NULL, NULL }, HOOKFUNC_DEF(OpenHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(SaveAsHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(TreeDisplayFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(TreeConstructFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(TreeDestructFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AttrDisplayFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AttrConstructFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AttrDestructFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AddEntryDisplayFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AddEntryConstructFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AddEntryDestructFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AddAttrDisplayFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AddAttrConstructFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AddAttrDestructFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(EditAttrDisplayFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(EditAttrConstructFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(EditAttrDestructFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(FileTypesDisplayFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(FileTypesConstructFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(FileTypesDestructFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(FileTypesActionDisplayFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(FileTypesActionConstructFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(FileTypesActionDestructFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(SelectEntryHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(SelectAttributeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(EditAttributeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AboutFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ContextMenuTriggerHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(CollapseHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ExpandHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(CollapseAllHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ExpandAllHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(CollapseFileTypesHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ExpandFileTypesHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(CollapseAllFileTypesHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ExpandAllFileTypesHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(CopyHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(CutHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(PasteHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(CopyAttrHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(CutAttrHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(PasteAttrHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AddEntryHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AddAttributeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(RemoveEntryHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(RemoveAttributeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangeAttributeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(SelectAttributeValueHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(EditAttributePopAslFileStartHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(EditAttributePopAslPathStartHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(EditAttrTTFontOpenHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(EditAttrTTFontCloseHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ResetToDefaultsHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(LastSavedHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(RestoreHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(HideEmptyEntriesHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(SelectFileTypesEntryHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(SelectFileTypesActionEntryHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(RenameFileTypeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AddFileTypeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(RemoveFileTypeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AddFileTypesMethodHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(RemoveFileTypesActionHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangedFileTypesActionMatchMatchHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangedFileTypesActionMatchCaseHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangedFileTypesActionMatchOffsetHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangedFileTypesActionSearchSearchHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangedFileTypesActionSearchCaseHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangedFileTypesActionSearchSkipSpacesHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangedFileTypesActionFilesizeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangedFileTypesActionPatternHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangedFileTypesActionProtectionHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangedFileTypesActionDosDeviceHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangedFileTypesActionDeviceNameHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangedFileTypesActionContentsHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangedFileTypesActionDosTypeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ChangedFileTypesActionMinSizeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(FileTypesActionDragDropSortHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ShowFindGroupHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(HideFindGroupHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(IncrementalFindFileTypeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(IncrementalFindNextFileTypeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(IncrementalFindPrevFileTypeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(LearnFileTypeHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(CreateNewFileTypesIconHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(EditFileTypesIconHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AslIntuiMsgHookFunc), NULL }, }; // Context menu in "filetypes" list static struct NewMenu ContextMenuFileTypes[] = { { NM_TITLE, (STRPTR) MSGID_TITLENAME, NULL, 0, 0, NULL }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_COLLAPSE, NULL, NM_ITEMDISABLED, 0, (APTR) HOOKNDX_CollapseFileTypes }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_EXPAND, NULL, NM_ITEMDISABLED, 0, (APTR) HOOKNDX_ExpandFileTypes }, { NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_COLLAPSEALL, NULL, 0, 0, (APTR) HOOKNDX_CollapseAllFileTypes }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_EXPANDALL, NULL, 0, 0, (APTR) HOOKNDX_ExpandAllFileTypes }, { NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_FIND, NULL, NM_ITEMDISABLED, 0, (APTR) HOOKNDX_ShowFindGroup }, { NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL }, { NM_ITEM, (STRPTR) MSGID_MENU_PROJECT_ABOUT, NULL, 0, 0, (APTR) HOOKNDX_About }, { NM_END, NULL, NULL, 0, 0, 0,}, }; // Context menu on "methods" list static struct NewMenu ContextMenuFileTypesActions[] = { { NM_TITLE, (STRPTR) MSGID_TITLENAME, NULL, 0, 0, NULL }, { NM_ITEM, (STRPTR) MSGID_MENU_PROJECT_OPEN, (STRPTR) MSGID_MENU_PROJECT_OPEN_SHORT, 0, 0, (APTR) HOOKNDX_Open }, { NM_ITEM, (STRPTR) MSGID_MENU_PROJECT_SAVEAS, (STRPTR) MSGID_MENU_PROJECT_SAVEAS_SHORT, 0, 0, (APTR) HOOKNDX_SaveAs }, { NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL }, { NM_ITEM, (STRPTR) MSGID_MENU_PROJECT_ABOUT, NULL, 0, 0, (APTR) HOOKNDX_About }, { NM_END, NULL, NULL, 0, 0, 0,}, }; static struct NewMenu ContextMenus[] = { { NM_TITLE, (STRPTR) MSGID_TITLENAME, NULL, 0, 0, NULL }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_COLLAPSE, NULL, NM_ITEMDISABLED, 0, (APTR) HOOKNDX_Collapse }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_EXPAND, NULL, NM_ITEMDISABLED, 0, (APTR) HOOKNDX_Expand }, { NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL }, { NM_ITEM, (STRPTR) MSGID_MENU_HIDE_EMPTY_ENTRIES, NULL, CHECKIT|MENUTOGGLE, 0, (APTR) HOOKNDX_HideEmptyEntries }, { NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_COPY, NULL, NM_ITEMDISABLED, 0, (APTR) HOOKNDX_Copy }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_CUT, NULL, NM_ITEMDISABLED, 0, (APTR) HOOKNDX_Cut }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_PASTE, NULL, NM_ITEMDISABLED, 0, (APTR) HOOKNDX_Paste }, { NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_COLLAPSEALL, NULL, 0, 0, (APTR) HOOKNDX_CollapseAll }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_EXPANDALL, NULL, 0, 0, (APTR) HOOKNDX_ExpandAll }, { NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL }, { NM_ITEM, (STRPTR) MSGID_MENU_PROJECT_ABOUT, NULL, 0, 0, (APTR) HOOKNDX_About }, { NM_END, NULL, NULL, 0, 0, 0,}, }; static struct NewMenu ContextMenusAttrList[] = { { NM_TITLE, (STRPTR) MSGID_TITLENAME, NULL, 0, 0, NULL }, { NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_COPY, NULL, NM_ITEMDISABLED, 0, (APTR) HOOKNDX_CopyAttr }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_CUT, NULL, NM_ITEMDISABLED, 0, (APTR) HOOKNDX_CutAttr }, { NM_ITEM, (STRPTR) MSGID_MENU_EDIT_PASTE, NULL, NM_ITEMDISABLED, 0, (APTR) HOOKNDX_PasteAttr }, { NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL }, { NM_ITEM, (STRPTR) MSGID_MENU_PROJECT_ABOUT, NULL, 0, 0, (APTR) HOOKNDX_About }, { NM_END, NULL, NULL, 0, 0, 0,}, }; static const BOOL MayPasteAfterMatrix[ENTRYTYPE_MAX][ENTRYTYPE_MAX] = { // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 /* 0 ENTRYTYPE_FileType */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 1 ENTRYTYPE_PopupMenu */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 2 ENTRYTYPE_PopupMenu_SubMenu */ { FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 3 ENTRYTYPE_PopupMenu_MenuItem */ { FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 4 ENTRYTYPE_PopupMenu_InternalCmd */ { FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 5 ENTRYTYPE_PopupMenu_WbCmd */ { FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 6 ENTRYTYPE_PopupMenu_ARexxCmd */ { FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 7 ENTRYTYPE_PopupMenu_CliCmd */ { FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 8 ENTRYTYPE_PopupMenu_PluginCmd */ { FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 9 ENTRYTYPE_PopupMenu_IconWindowCmd */ { FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 10 ENTRYTYPE_PopupMenu_MenuSeparator */ { FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 11 ENTRYTYPE_ToolTip */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 12 ENTRYTYPE_ToolTip_Group */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 13 ENTRYTYPE_ToolTip_Member */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE}, /* 14 ENTRYTYPE_ToolTip_HBar */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 15 ENTRYTYPE_ToolTip_String */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 16 ENTRYTYPE_ToolTip_Space */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 17 ENTRYTYPE_ToolTip_DtImage */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 }; static const BOOL MayPasteIntoMatrix[ENTRYTYPE_MAX][ENTRYTYPE_MAX] = { // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 /* 0 ENTRYTYPE_FileType */ { FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 1 ENTRYTYPE_PopupMenu */ { FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 2 ENTRYTYPE_PopupMenu_SubMenu */ { FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 3 ENTRYTYPE_PopupMenu_MenuItem */ { FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 4 ENTRYTYPE_PopupMenu_InternalCmd */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 5 ENTRYTYPE_PopupMenu_WbCmd */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 6 ENTRYTYPE_PopupMenu_ARexxCmd */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 7 ENTRYTYPE_PopupMenu_CliCmd */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 8 ENTRYTYPE_PopupMenu_PluginCmd */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 9 ENTRYTYPE_PopupMenu_IconWindowCmd */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 10 ENTRYTYPE_PopupMenu_MenuSeparator */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 11 ENTRYTYPE_ToolTip */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 12 ENTRYTYPE_ToolTip_Group */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE}, /* 13 ENTRYTYPE_ToolTip_Member */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE}, /* 14 ENTRYTYPE_ToolTip_HBar */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 15 ENTRYTYPE_ToolTip_String */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 16 ENTRYTYPE_ToolTip_Space */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, /* 17 ENTRYTYPE_ToolTip_DtImage */ { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 }; static const ULONG EntryTypeNames[] = { MSGID_ENTRYTYPE_FILETYPE, MSGID_ENTRYTYPE_POPUPMENU, MSGID_ENTRYTYPE_SUBMENU, MSGID_ENTRYTYPE_MENUITEM, MSGID_ENTRYTYPE_INTERNALCMD, MSGID_ENTRYTYPE_WBCMD, MSGID_ENTRYTYPE_AREXXCMD, MSGID_ENTRYTYPE_CLICMD, MSGID_ENTRYTYPE_PLUGINCMD, MSGID_ENTRYTYPE_ICONWINDOWCMD, MSGID_ENTRYTYPE_MENUSEPARATOR, MSGID_ENTRYTYPE_TOOLTIP, MSGID_ENTRYTYPE_GROUP, MSGID_ENTRYTYPE_MEMBER, MSGID_ENTRYTYPE_HBAR, MSGID_ENTRYTYPE_STRING, MSGID_ENTRYTYPE_SPACE, MSGID_ENTRYTYPE_DTIMAGE, }; static const ULONG AddFiletypeStringsPM[] = { ENTRYTYPE_PopupMenu, 0 }; static const ULONG AddFiletypeStringsTT[] = { ENTRYTYPE_ToolTip, 0 }; static const ULONG AddFiletypeStringsPMTT[] = { ENTRYTYPE_PopupMenu, ENTRYTYPE_ToolTip, 0 }; static const ULONG AddPopupMenuStrings[] = { ENTRYTYPE_PopupMenu_SubMenu, ENTRYTYPE_PopupMenu_MenuItem, ENTRYTYPE_PopupMenu_MenuSeparator, 0 }; static const ULONG AddSubMenuStrings[] = { ENTRYTYPE_PopupMenu_MenuItem, ENTRYTYPE_PopupMenu_MenuSeparator, 0 }; static const ULONG AddMenuItemStrings[] = { ENTRYTYPE_PopupMenu_InternalCmd, ENTRYTYPE_PopupMenu_WbCmd, ENTRYTYPE_PopupMenu_ARexxCmd, ENTRYTYPE_PopupMenu_CliCmd, ENTRYTYPE_PopupMenu_PluginCmd, ENTRYTYPE_PopupMenu_IconWindowCmd, 0 }; static const ULONG AddToolTipStrings[] = { ENTRYTYPE_ToolTip_Group, 0 }; static const ULONG AddGroupStrings[] = { ENTRYTYPE_ToolTip_Member, 0 }; static const ULONG AddMemberStrings[] = { ENTRYTYPE_ToolTip_Group, ENTRYTYPE_ToolTip_HBar, ENTRYTYPE_ToolTip_String, ENTRYTYPE_ToolTip_Space, ENTRYTYPE_ToolTip_DtImage, 0 }; static STRPTR RegisterTitles[] = { (STRPTR) MSGID_REGISTERTITLE_RECOGNITION, (STRPTR) MSGID_REGISTERTITLE_ACTIONS, NULL }; STRPTR AddFileTypeActionStrings[] = { (STRPTR) MSGID_FILETYPE_ADD_ACTION_MATCH, (STRPTR) MSGID_FILETYPE_ADD_ACTION_SEARCH, (STRPTR) MSGID_FILETYPE_ADD_ACTION_FILESIZE, (STRPTR) MSGID_FILETYPE_ADD_ACTION_PATTERN, (STRPTR) MSGID_FILETYPE_ADD_ACTION_PROTECTION, (STRPTR) MSGID_FILETYPE_ADD_ACTION_OR, (STRPTR) MSGID_FILETYPE_ADD_ACTION_ISASCII, (STRPTR) MSGID_FILETYPE_ADD_ACTION_DOSDEVICE, (STRPTR) MSGID_FILETYPE_ADD_ACTION_DEVICENAME, (STRPTR) MSGID_FILETYPE_ADD_ACTION_CONTENTS, (STRPTR) MSGID_FILETYPE_ADD_ACTION_DOSTYPE, (STRPTR) MSGID_FILETYPE_ADD_ACTION_MINSIZEMB, (STRPTR) MSGID_FILETYPE_ADD_ACTION_MACROCLASS, NULL }; STRPTR AddFileTypeActionStringsProject[] = { (STRPTR) MSGID_FILETYPE_ADD_ACTION_MATCH, (STRPTR) MSGID_FILETYPE_ADD_ACTION_SEARCH, (STRPTR) MSGID_FILETYPE_ADD_ACTION_FILESIZE, (STRPTR) MSGID_FILETYPE_ADD_ACTION_PATTERN, (STRPTR) MSGID_FILETYPE_ADD_ACTION_PROTECTION, (STRPTR) MSGID_FILETYPE_ADD_ACTION_OR, (STRPTR) MSGID_FILETYPE_ADD_ACTION_ISASCII, (STRPTR) MSGID_FILETYPE_ADD_ACTION_MACROCLASS, NULL }; STRPTR AddFileTypeActionStringsDisk[] = { (STRPTR) MSGID_FILETYPE_ADD_ACTION_OR, (STRPTR) MSGID_FILETYPE_ADD_ACTION_ISASCII, (STRPTR) MSGID_FILETYPE_ADD_ACTION_DOSDEVICE, (STRPTR) MSGID_FILETYPE_ADD_ACTION_DEVICENAME, (STRPTR) MSGID_FILETYPE_ADD_ACTION_CONTENTS, (STRPTR) MSGID_FILETYPE_ADD_ACTION_DOSTYPE, (STRPTR) MSGID_FILETYPE_ADD_ACTION_MINSIZEMB, (STRPTR) MSGID_FILETYPE_ADD_ACTION_MACROCLASS, NULL }; static STRPTR FileTypeActionProtectionStrings[] = { (STRPTR) MSGID_FILETYPE_PROTECTION_SET, (STRPTR) MSGID_FILETYPE_PROTECTION_UNSET, (STRPTR) MSGID_FILETYPE_PROTECTION_IGNORE, NULL, }; static struct AttrDefaultValue AttrDefStringStyleContents[] = { { ATTRDEFTYPE_String, 0, "normal" }, { ATTRDEFTYPE_String, 0, "bold" }, { ATTRDEFTYPE_String, 0, "italic" }, { ATTRDEFTYPE_String, MSGID_CHANGEME, "bolditalic" }, }; static struct AttrDefaultValue AttrDefStringHAlignContents[] = { { ATTRDEFTYPE_String, 0, "left" }, { ATTRDEFTYPE_String, 0, "center" }, { ATTRDEFTYPE_String, 0, "right" }, }; static struct AttrDefaultValue AttrDefStringVAlignContents[] = { { ATTRDEFTYPE_String, 0, "top" }, { ATTRDEFTYPE_String, 0, "center" }, { ATTRDEFTYPE_String, 0, "bottom" }, }; static struct AttrDefaultValue AttrDefStringPenContents[] = { { ATTRDEFTYPE_String, 0, "PENIDX_HSHINEPEN" }, { ATTRDEFTYPE_String, 0, "PENIDX_HSHADOWPEN" }, { ATTRDEFTYPE_String, 0, "PENIDX_ICONTEXTOUTLINEPEN", }, { ATTRDEFTYPE_String, 0, "PENIDX_DRAWERTEXT" }, { ATTRDEFTYPE_String, 0, "PENIDX_DRAWERTEXTSEL" }, { ATTRDEFTYPE_String, 0, "PENIDX_DRAWERBG", }, { ATTRDEFTYPE_String, 0, "PENIDX_FILETEXT" }, { ATTRDEFTYPE_String, 0, "PENIDX_FILETEXTSEL" }, { ATTRDEFTYPE_String, 0, "PENIDX_FILEBG" }, { ATTRDEFTYPE_String, 0, "PENIDX_BACKDROPDETAIL" }, { ATTRDEFTYPE_String, 0, "PENIDX_BACKDROPBLOCK" }, { ATTRDEFTYPE_String, 0, "PENIDX_TOOLTIP_TEXT" }, { ATTRDEFTYPE_String, 0, "PENIDX_TOOLTIP_BG" }, { ATTRDEFTYPE_String, 0, "PENIDX_DRAGINFOTEXT_TEXT" }, { ATTRDEFTYPE_String, 0, "PENIDX_DRAGINFOTEXT_BG" }, { ATTRDEFTYPE_String, 0, "PENIDX_STATUSBAR_BG" }, { ATTRDEFTYPE_String, 0, "PENIDX_STATUSBAR_TEXT" }, { ATTRDEFTYPE_String, 0, "PENIDX_ICONTEXTPEN" }, { ATTRDEFTYPE_String, 0, "PENIDX_ICONTEXTPENSEL" }, { ATTRDEFTYPE_String, 0, "PENIDX_ICONTEXTSHADOWPEN" }, }; static struct AttrDefaultValue AttrDefStringIDContents[] = { { ATTRDEFTYPE_String, 0, "MSGID_BYTENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_KBYTENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_MBYTENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_GBYTENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_TBYTENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_PBYTENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_HBYTENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_REQTITLE" }, { ATTRDEFTYPE_String, 0, "MSGID_OPENERRORNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_OPENERRORGADGETS" }, { ATTRDEFTYPE_String, 0, "MSGID_QUITERRORNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_GADGETSNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_WBLOADNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_WBLOAD_ASLTITLE" }, { ATTRDEFTYPE_String, 0, "MSGID_REPLACENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_REPLACEGNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_DOWAITERRNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_SCAERRORNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_CLOSEWBNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_ABOUTNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_OKNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_UPDATENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_SYSINFONAME" }, { ATTRDEFTYPE_String, 0, "MSGID_FLUSHNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_REBOOTNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_EXISTSNAME_COPY" }, { ATTRDEFTYPE_String, 0, "MSGID_EXISTSGNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_SUREREBOOTNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_OKCANCELNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_LIBERRORNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_SCALIBERRORNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_COLNAMENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_COLSIZENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_COLACCESSNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_COLDATENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_COLTIMENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_COLCOMNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_USEDLIBSNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_SCARUNNINGNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_PREVIEWNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_EMULATIONNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_FILETRANSTITLE_COPY" }, { ATTRDEFTYPE_String, 0, "MSGID_COPYINGNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_FROMNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_TONAME" }, { ATTRDEFTYPE_String, 0, "MSGID_PMTITLE1NAME" }, { ATTRDEFTYPE_String, 0, "MSGID_PMTITLE2NAME" }, { ATTRDEFTYPE_String, 0, "MSGID_PMTITLE3NAME" }, { ATTRDEFTYPE_String, 0, "MSGID_PMTITLE4NAME" }, { ATTRDEFTYPE_String, 0, "MSGID_PMTITLE5NAME" }, { ATTRDEFTYPE_String, 0, "MSGID_PMTITLE6NAME" }, { ATTRDEFTYPE_String, 0, "MSGID_COPYERRORNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_COPYERRORGNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_MOVEERRORNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_DELETEERRORNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_ABOUT_TESTTEXT" }, { ATTRDEFTYPE_String, 0, "MSGID_ABOUT_UNREGTEXT" }, { ATTRDEFTYPE_String, 0, "MSGID_ABOUT_REGTOTEXT" }, { ATTRDEFTYPE_String, 0, "MSGID_ABOUT_REGTEXT" }, { ATTRDEFTYPE_String, 0, "MSGID_ABOUT_COMREGINFO" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_SETUPSCREEN" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_SETUPSCRPATTERN" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_INITMENU" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_INITTIMER" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_STARTWINDOWPROC" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_INITNOTIFY" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_WBSTARTUP" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_WBSTARTUP_RUNPRG" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_READDEVICEICONS" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_INITDEVICEWINDOW" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_WBSTARTUPFINISHED" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_SCALOSVERSION" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_ROOTDIR" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_USERDIR" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_SOFTLINK" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_HARDLINKDIR" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_FILE" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_HARDLINKFILE" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_PIPEFILE" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_UNKNOWNTYPE" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_LASTCHANGE" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_SIZE" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_PROTECTION" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_STATE_WRITEPROTECT" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_STATE_VALIDATING" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_STATE_READWRITE" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_STATE_UNKNOWN" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_DISK" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_USEDCOUNTFMT" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_CREATED" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_STATE" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_USED" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_FILESIZEFMT" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_APPICON" }, { ATTRDEFTYPE_String, 0, "MSGID_ICON_WITHOUT_FILE" }, { ATTRDEFTYPE_String, 0, "MSGID_ICONIFIED_WINDOW" }, { ATTRDEFTYPE_String, 0, "MSGID_PMMENU_APPICON_OPEN" }, { ATTRDEFTYPE_String, 0, "MSGID_PMMENU_APPICON_COPY" }, { ATTRDEFTYPE_String, 0, "MSGID_PMMENU_APPICON_RENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_PMMENU_APPICON_INFO" }, { ATTRDEFTYPE_String, 0, "MSGID_PMMENU_APPICON_SNAPSHOT" }, { ATTRDEFTYPE_String, 0, "MSGID_PMMENU_APPICON_UNSNAPSHOT" }, { ATTRDEFTYPE_String, 0, "MSGID_PMMENU_APPICON_LEAVEOUT" }, { ATTRDEFTYPE_String, 0, "MSGID_PMMENU_APPICON_PUTAWAY" }, { ATTRDEFTYPE_String, 0, "MSGID_PMMENU_APPICON_DELETE" }, { ATTRDEFTYPE_String, 0, "MSGID_PMMENU_APPICON_FORMATDISK" }, { ATTRDEFTYPE_String, 0, "MSGID_PMMENU_APPICON_EMPTYTRASHCAN" }, { ATTRDEFTYPE_String, 0, "MSGID_EXISTSNAME_MOVE" }, { ATTRDEFTYPE_String, 0, "MSGID_MULTIDRAG" }, { ATTRDEFTYPE_String, 0, "MSGID_MULTIDRAG_DRAWER_1" }, { ATTRDEFTYPE_String, 0, "MSGID_MULTIDRAG_DRAWER_2" }, { ATTRDEFTYPE_String, 0, "MSGID_MULTIDRAG_FILE_1" }, { ATTRDEFTYPE_String, 0, "MSGID_MULTIDRAG_FILE_2" }, { ATTRDEFTYPE_String, 0, "MSGID_TEXTICON_DRAWER" }, { ATTRDEFTYPE_String, 0, "MSGID_TEXTICON_TRASHCAN" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_ENDREADDEVICEICONS" }, { ATTRDEFTYPE_String, 0, "MSGID_STATUSBARTEXT" }, { ATTRDEFTYPE_String, 0, "MSGID_MULTIDRAG_DEVICE_1" }, { ATTRDEFTYPE_String, 0, "MSGID_MULTIDRAG_DEVICE_2" }, { ATTRDEFTYPE_String, 0, "MSGID_CANCELBUTTON" }, { ATTRDEFTYPE_String, 0, "MSGID_PREPARING_COPY" }, { ATTRDEFTYPE_String, 0, "MSGID_PREPARING_MOVE" }, { ATTRDEFTYPE_String, 0, "MSGID_FILETRANSFER_REMAININGTIME" }, { ATTRDEFTYPE_String, 0, "MSGID_FILETRANSFER_MINUTES" }, { ATTRDEFTYPE_String, 0, "MSGID_FILETRANSFER_SECONDS" }, { ATTRDEFTYPE_String, 0, "MSGID_FILETRANSFER_SECOND" }, { ATTRDEFTYPE_String, 0, "MSGID_FILETRANSTITLE_MOVE" }, { ATTRDEFTYPE_String, 0, "MSGID_MOVINGNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_READINGPREFS" }, { ATTRDEFTYPE_String, 0, "MSGID_DISK_UNREADABLE" }, { ATTRDEFTYPE_String, 0, "MSGID_PROGRESS_MAINWINDOW" }, { ATTRDEFTYPE_String, 0, "MSGID_NEW_DRAWER_NAME" }, { ATTRDEFTYPE_String, 0, "MSGID_CANNOT_OPEN_DRAWER" }, { ATTRDEFTYPE_String, 0, "MSGID_ALLOCPENSREQ_CONTENTS" }, { ATTRDEFTYPE_String, 0, "MSGID_ALLOCPENSREQ_GADGETSNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_FILETYPE_WBGARBAGE" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_FILETYPE_WBPROJECT" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_FILETYPE_WBDEVICE" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_FILETYPE_WBKICK" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_FILETYPE_WBTOOL" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_FILETYPE_WBDISK" }, { ATTRDEFTYPE_String, 0, "MSGID_ERROR_NO_DEFAULTTOOL" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_GADGET_RIGHTSCROLLER" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_GADGET_BOTTOMSCROLLER" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_GADGET_UPARROW" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_GADGET_DOWNARROW" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_GADGET_RIGHTARROW" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_GADGET_LEFTARROW" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_GADGET_ICONIFY" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_GADGET_STATUSBAR_TEXT" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_GADGET_STATUSBAR_READONLY" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_GADGET_STATUSBAR_READING" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_GADGET_STATUSBAR_TYPING" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_GADGET_STATUSBAR_SHOWALL" }, { ATTRDEFTYPE_String, 0, "MSGID_EXISTSICON_COPY" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_USEDCOUNTFMT_FULL" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_USEDCOUNTFMT_FREE" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_USEDCOUNTFMT_INUSE" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_DRAWERS" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_FILES" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_LINKTO" }, { ATTRDEFTYPE_String, 0, "MSGID_TOOLTIP_KICKSTART" }, { ATTRDEFTYPE_String, 0, "MSGID_NODEFAULTTOOL_REQ" }, { ATTRDEFTYPE_String, 0, "MSGID_NODEFAULTTOOL_REQ_GADGETS" }, { ATTRDEFTYPE_String, 0, "MSGID_REQ_SELECTDEFTOOL" }, { ATTRDEFTYPE_String, 0, "MSGID_TEXTICON_SOLOICON" }, { ATTRDEFTYPE_String, 0, "MSGID_COLOWNERNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_COLGROUPNAME" }, { ATTRDEFTYPE_String, 0, "MSGID_COLFILETYPENAME" }, { ATTRDEFTYPE_String, 0, "MSGID_COLVERSIONNAME" }, }; static struct AttrDefaultValue AttrDefGroupOrientationContents[] = { { ATTRDEFTYPE_ULong, TTL_Horizontal, "", ConvertGroupOrientationFromString }, { ATTRDEFTYPE_ULong, TTL_Vertical, "", ConvertGroupOrientationFromString }, }; static struct AttrDefaultValue AttrDefGroupStringSrcContents[] = { { ATTRDEFTYPE_String, 0, "diskstate", }, { ATTRDEFTYPE_String, 0, "diskusage", }, { ATTRDEFTYPE_String, 0, "diskusagefree", }, { ATTRDEFTYPE_String, 0, "diskusageinuse", }, { ATTRDEFTYPE_String, 0, "diskusagepercent", }, { ATTRDEFTYPE_String, 0, "fibfilename", }, { ATTRDEFTYPE_String, 0, "filecomment", }, { ATTRDEFTYPE_String, 0, "filedate", }, { ATTRDEFTYPE_String, 0, "fileprotection", }, { ATTRDEFTYPE_String, 0, "filesize", }, { ATTRDEFTYPE_String, 0, "filetime", }, { ATTRDEFTYPE_String, 0, "filetypestring", }, { ATTRDEFTYPE_String, 0, "iconname", }, { ATTRDEFTYPE_String, 0, "linktarget", }, { ATTRDEFTYPE_String, 0, "plugin", }, { ATTRDEFTYPE_String, 0, "versionstring", }, { ATTRDEFTYPE_String, 0, "volumecreateddate", }, { ATTRDEFTYPE_String, 0, "volumecreatedtime", }, { ATTRDEFTYPE_String, 0, "volumeordevicename", }, }; static struct AttrDefaultValue AttrDefPopupMenuInternalCmds[] = { { ATTRDEFTYPE_String2, MSGID_COM5NAME, "about", }, { ATTRDEFTYPE_String2, MSGID_COM1NAME, "backdrop", }, { ATTRDEFTYPE_String2, MSGID_COM12NAME, "cleanup", }, { ATTRDEFTYPE_String2, MSGID_COM43NAME, "cleanupbyname", }, { ATTRDEFTYPE_String2, MSGID_COM44NAME, "cleanupbydate", }, { ATTRDEFTYPE_String2, MSGID_COM45NAME, "cleanupbysize", }, { ATTRDEFTYPE_String2, MSGID_COM46NAME, "cleanupbytype", }, { ATTRDEFTYPE_String2, MSGID_COM36NAME, "clearselection", }, { ATTRDEFTYPE_String2, MSGID_COM28NAME, "clone", }, { ATTRDEFTYPE_String2, MSGID_COM9NAME, "close", }, { ATTRDEFTYPE_String2, MSGID_COM39NAME, "copy", }, { ATTRDEFTYPE_String2, MSGID_COM51NAME, "createthumbnail", }, { ATTRDEFTYPE_String2, MSGID_COM40NAME, "cut", }, { ATTRDEFTYPE_String2, MSGID_COM49NAME, "copyto", }, { ATTRDEFTYPE_String2, MSGID_COM27NAME, "delete", }, { ATTRDEFTYPE_String2, MSGID_COM29NAME, "emptytrashcan", }, { ATTRDEFTYPE_String2, MSGID_COM2NAME, "executecommand", }, { ATTRDEFTYPE_String2, MSGID_COM_FIND, "find", }, { ATTRDEFTYPE_String2, MSGID_COM33NAME, "formatdisk", }, { ATTRDEFTYPE_String2, MSGID_COM32NAME, "iconify", }, { ATTRDEFTYPE_String2, MSGID_COM22NAME, "iconinfo", }, { ATTRDEFTYPE_String2, MSGID_COM_ICONPROPERTIES, "iconproperties", }, { ATTRDEFTYPE_String2, MSGID_COM30NAME, "lastmsg", }, { ATTRDEFTYPE_String2, MSGID_COM25NAME, "leaveout", }, { ATTRDEFTYPE_String2, MSGID_COM7NAME, "makedir", }, { ATTRDEFTYPE_String2, MSGID_COM50NAME, "moveto", }, { ATTRDEFTYPE_String2, MSGID_COM19NAME, "open", }, { ATTRDEFTYPE_String2, MSGID_COM_OPENBROWSERWINDOW, "openinbrowserwindow", }, { ATTRDEFTYPE_String2, MSGID_COM_OPENNEWWINDOW, "openinnewwindow", }, { ATTRDEFTYPE_String2, MSGID_COM8NAME, "parent", }, { ATTRDEFTYPE_String2, MSGID_COM41NAME, "paste", }, { ATTRDEFTYPE_String2, MSGID_COM26NAME, "putaway", }, { ATTRDEFTYPE_String2, MSGID_COM6NAME, "quit", }, { ATTRDEFTYPE_String2, MSGID_COM_REDO, "redo", }, { ATTRDEFTYPE_String2, MSGID_COM31NAME, "redraw", }, { ATTRDEFTYPE_String2, MSGID_COM3NAME, "redrawall", }, { ATTRDEFTYPE_String2, MSGID_COM21NAME, "rename", }, { ATTRDEFTYPE_String2, MSGID_COM20NAME, "reset", }, { ATTRDEFTYPE_String2, MSGID_COM11NAME, "selectall", }, { ATTRDEFTYPE_String2, MSGID_COM16NAME, "showallfiles", }, { ATTRDEFTYPE_String2, MSGID_COM15NAME, "showonlyicons", }, { ATTRDEFTYPE_String2, MSGID_COM48NAME, "showdefault", }, { ATTRDEFTYPE_String2, MSGID_COM34NAME, "shutdown", }, { ATTRDEFTYPE_String2, MSGID_COM35NAME, "sizetofit", }, { ATTRDEFTYPE_String2, MSGID_COM23NAME, "snapshot", }, { ATTRDEFTYPE_String2, MSGID_COM14NAME, "snapshotall", }, { ATTRDEFTYPE_String2, MSGID_COM13NAME, "snapshotwindow", }, { ATTRDEFTYPE_String2, MSGID_COM_THUMBNAILCACHECLEANUP, "thumbnailcachecleanup", }, { ATTRDEFTYPE_String2, MSGID_COM24NAME, "unsnapshot", }, { ATTRDEFTYPE_String2, MSGID_COM_UNDO, "undo", }, { ATTRDEFTYPE_String2, MSGID_COM10NAME, "update", }, { ATTRDEFTYPE_String2, MSGID_COM4NAME, "updateall", }, { ATTRDEFTYPE_String2, MSGID_COM47NAME, "viewbydefault", }, { ATTRDEFTYPE_String2, MSGID_COM38NAME, "viewbydate", }, { ATTRDEFTYPE_String2, MSGID_COM17NAME, "viewbyicon", }, { ATTRDEFTYPE_String2, MSGID_COM37NAME, "viewbysize", }, { ATTRDEFTYPE_String2, MSGID_COM42NAME, "viewbytype", }, { ATTRDEFTYPE_String2, MSGID_COM18NAME, "viewbytext", }, { ATTRDEFTYPE_String2, MSGID_COM_WINDOWPROPERTIES, "windowproperties", }, }; static struct AttrDefaultValue AttrDefGroupMemberHideContents[] = { { ATTRDEFTYPE_String, 0, "novolumenode", }, { ATTRDEFTYPE_String, 0, "isempty", }, }; static struct AttributeDef AttrDefFileType[] = { { ATTRTYPE_FtDescription, FALSE, 0, { ATTRTYPE_FtDescription }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_String, 0, "" }, NULL, 0, }, { ATTRTYPE_PvPluginName, FALSE, 0, { ATTRTYPE_PvPluginName }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_FileName, 0, "Scalos:Plugins/Preview/" }, NULL, 0, }, }; static struct AttributeDef AttrDefDtImage[] = { { ATTRTYPE_DtImageName, TRUE, 0, { ATTRTYPE_DtImageName }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_FileName, 0, "SYS:" }, NULL, 0, }, }; static struct AttributeDef AttrDefSubMenu[] = { { ATTRTYPE_MenuItemName, TRUE, 0, { ATTRTYPE_MenuItemName }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_LocString, MSGID_CHANGEME, "" }, NULL, 0, }, { ATTRTYPE_UnselIconName, FALSE, 0, { ATTRTYPE_UnselIconName }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_FileName, 0, "THEME:Filetypes/" }, NULL, 0, }, { ATTRTYPE_SelIconName, FALSE, 0, { ATTRTYPE_SelIconName }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_FileName, 0, "THEME:Filetypes/" }, NULL, 0, }, }; static struct AttributeDef AttrDefMenuItem[] = { { ATTRTYPE_MenuItemName, TRUE, 0, { ATTRTYPE_MenuItemName }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_LocString, MSGID_CHANGEME, "" }, NULL, 0, }, { ATTRTYPE_MenuCommKey, FALSE, 0, { ATTRTYPE_MenuCommKey }, 1, 1, { ATTRDEFTYPE_String, 0, "" }, NULL, 0, }, { ATTRTYPE_MenuDefaultAction, FALSE, 0, { ATTRTYPE_MenuDefaultAction }, 0, 0, { ATTRDEFTYPE_None, 0, "" }, NULL, 0, }, { ATTRTYPE_UnselIconName, FALSE, 0, { ATTRTYPE_UnselIconName }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_FileName, 0, "THEME:Filetypes/" }, NULL, 0, }, { ATTRTYPE_SelIconName, FALSE, 0, { ATTRTYPE_SelIconName }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_FileName, 0, "THEME:Filetypes/" }, NULL, 0, }, }; static struct AttributeDef AttrDefWBCmd[] = { { ATTRTYPE_CommandName, TRUE, 0, { ATTRDEFTYPE_FileName }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_FileName, 0, "SYS:" }, NULL, 0, }, { ATTRTYPE_CommandStacksize, FALSE, 0, { ATTRTYPE_CommandStacksize }, 4096, 4194304, { ATTRDEFTYPE_ULong, 16384, "", NULL }, NULL, 0, }, { ATTRTYPE_CommandPriority, FALSE, 0, { ATTRTYPE_CommandPriority }, SCHAR_MIN, SCHAR_MAX, { ATTRDEFTYPE_ULong, 0, "", NULL }, NULL, 0, }, { ATTRTYPE_CommandWbArgs, FALSE, 0, { ATTRTYPE_CommandWbArgs }, 0, 0, { ATTRDEFTYPE_None, 0, "" }, NULL, 0, }, }; static struct AttributeDef AttrDefCmd[] = { { ATTRTYPE_CommandName, TRUE, 0, { ATTRTYPE_CommandName }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_FileName, 0, "SYS:" }, NULL, 0, }, { ATTRTYPE_CommandStacksize, FALSE, 0, { ATTRTYPE_CommandStacksize }, 4096, 4194304, { ATTRDEFTYPE_ULong, 16384, "", NULL }, NULL, 0, }, { ATTRTYPE_CommandPriority, FALSE, 0, { ATTRTYPE_CommandPriority }, SCHAR_MIN, SCHAR_MAX, { ATTRDEFTYPE_ULong, 0, "", NULL }, NULL, 0, }, { ATTRTYPE_CommandWbArgs, FALSE, 0, { ATTRTYPE_CommandWbArgs }, 0, 0, { ATTRDEFTYPE_None, 0, "" }, NULL, 0, }, }; static struct AttributeDef AttrDefInternalCmd[] = { { ATTRTYPE_CommandName, TRUE, 0, { ATTRTYPE_CommandName }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_LocString, MSGID_CHANGEME, "" }, AttrDefPopupMenuInternalCmds, Sizeof(AttrDefPopupMenuInternalCmds), }, }; static struct AttributeDef AttrDefPluginCmd[] = { { ATTRTYPE_CommandName, TRUE, 0, { ATTRTYPE_CommandName }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_LocString, MSGID_CHANGEME, "" }, NULL, 0, }, }; static struct AttributeDef AttrDefIconWindowCmd[] = { { ATTRTYPE_CommandName, TRUE, 0, { ATTRTYPE_CommandName }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_PathName, 0, "SYS:" }, NULL, 0, }, }; static struct AttributeDef AttrDefGroup[] = { { ATTRTYPE_GroupOrientation, TRUE, 0, { ATTRTYPE_GroupOrientation }, TTL_Horizontal, TTL_Vertical, { ATTRDEFTYPE_ULong, TTL_Vertical, "", ConvertGroupOrientationFromString }, AttrDefGroupOrientationContents, Sizeof(AttrDefGroupOrientationContents), }, }; static struct AttributeDef AttrDefMember[] = { { ATTRTYPE_MemberHideString, FALSE, 0, { ATTRTYPE_MemberHideString }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_LocString, MSGID_CHANGEME, "" }, AttrDefGroupMemberHideContents, Sizeof(AttrDefGroupMemberHideContents), }, }; static struct AttributeDef AttrDefString[] = { { ATTRTYPE_StringText, TRUE, 2, { ATTRTYPE_StringSrc, ATTRTYPE_StringId }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_LocString, MSGID_CHANGEME, "" }, NULL, 0, }, { ATTRTYPE_StringSrc, TRUE, 2, { ATTRTYPE_StringText, ATTRTYPE_StringId }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_String, 0, "diskstate" }, AttrDefGroupStringSrcContents, Sizeof(AttrDefGroupStringSrcContents), }, { ATTRTYPE_StringId, TRUE, 2, { ATTRTYPE_StringText, ATTRTYPE_StringSrc }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_String, 0, "MSGID_BYTENAME" }, AttrDefStringIDContents, Sizeof(AttrDefStringIDContents), }, { ATTRTYPE_StringPen, FALSE, 0, { ATTRTYPE_StringPen }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_String, 0, "PENIDX_TOOLTIP_TEXT" }, AttrDefStringPenContents, Sizeof(AttrDefStringPenContents), }, { ATTRTYPE_StringFont, FALSE, 0, { ATTRTYPE_StringFont }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_FontString, 0, "" }, NULL, }, { ATTRTYPE_StringTTFont, FALSE, 0, { ATTRTYPE_StringTTFont }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_TTFontString, 0, "" }, NULL, }, { ATTRTYPE_StringStyle, FALSE, 0, { ATTRTYPE_StringStyle }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_String, 0, "normal" }, AttrDefStringStyleContents, Sizeof(AttrDefStringStyleContents), }, { ATTRTYPE_StringVAlign, FALSE, 0, { ATTRTYPE_StringVAlign }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_String, 0, "center" }, AttrDefStringVAlignContents, Sizeof(AttrDefStringVAlignContents), }, { ATTRTYPE_StringHAlign, FALSE, 0, { ATTRTYPE_StringHAlign }, 0, MAX_ATTRVALUE, { ATTRDEFTYPE_String, 0, "center" }, AttrDefStringHAlignContents, Sizeof(AttrDefStringHAlignContents), }, }; static struct AttributeDef AttrDefSpace[] = { { ATTRTYPE_SpaceSize, TRUE, 0, { ATTRTYPE_SpaceSize }, 1, 255, { ATTRDEFTYPE_ULong, 1, "", NULL }, NULL, 0, }, }; static const struct EntryAttributes AllEntryAttributes[] = { { ENTRYTYPE_FileType, AttrDefFileType, Sizeof(AttrDefFileType), }, { ENTRYTYPE_PopupMenu, NULL, 0, }, { ENTRYTYPE_PopupMenu_SubMenu, AttrDefSubMenu, Sizeof(AttrDefSubMenu), }, { ENTRYTYPE_PopupMenu_MenuItem, AttrDefMenuItem, Sizeof(AttrDefMenuItem), }, { ENTRYTYPE_PopupMenu_InternalCmd, AttrDefInternalCmd, Sizeof(AttrDefInternalCmd), }, { ENTRYTYPE_PopupMenu_WbCmd, AttrDefWBCmd, Sizeof(AttrDefWBCmd), }, { ENTRYTYPE_PopupMenu_ARexxCmd, AttrDefCmd, Sizeof(AttrDefCmd), }, { ENTRYTYPE_PopupMenu_CliCmd, AttrDefCmd, Sizeof(AttrDefCmd), }, { ENTRYTYPE_PopupMenu_PluginCmd, AttrDefPluginCmd, Sizeof(AttrDefPluginCmd), }, { ENTRYTYPE_PopupMenu_IconWindowCmd, AttrDefIconWindowCmd, Sizeof(AttrDefIconWindowCmd), }, { ENTRYTYPE_PopupMenu_MenuSeparator, NULL, 0, }, { ENTRYTYPE_ToolTip, NULL, 0, }, { ENTRYTYPE_ToolTip_Group, AttrDefGroup, Sizeof(AttrDefGroup), }, { ENTRYTYPE_ToolTip_Member, AttrDefMember, Sizeof(AttrDefMember), }, { ENTRYTYPE_ToolTip_HBar, NULL, 0, }, { ENTRYTYPE_ToolTip_String, AttrDefString, Sizeof(AttrDefString), }, { ENTRYTYPE_ToolTip_Space, AttrDefSpace, Sizeof(AttrDefSpace), }, { ENTRYTYPE_ToolTip_DtImage, AttrDefDtImage, Sizeof(AttrDefDtImage), } }; //--------------------------------------------------------------- BOOL closePlugin(struct PluginBase *PluginBase) { d1(kprintf(__FILE__ "/%s/%ld:\n", __FUNC__, __LINE__)); if (DataTypesImageClass) { CleanupDtpicClass(DataTypesImageClass); DataTypesImageClass = NULL; } if (FontSampleClass) { CleanupFontSampleClass(FontSampleClass); FontSampleClass = NULL; } if (IconobjectClass) { CleanupIconobjectClass(IconobjectClass); IconobjectClass = NULL; } if (myNListClass) { MUI_DeleteCustomClass(myNListClass); myNListClass = NULL; } if (myFileTypesActionsNListClass) { MUI_DeleteCustomClass(myFileTypesActionsNListClass); myFileTypesActionsNListClass = NULL; } if (myNListTreeClass) { MUI_DeleteCustomClass(myNListTreeClass); myNListTreeClass = NULL; } if (myFileTypesNListTreeClass) { MUI_DeleteCustomClass(myFileTypesNListTreeClass); myFileTypesNListTreeClass = NULL; } if (FileTypesPrefsCatalog) { CloseCatalog(FileTypesPrefsCatalog); FileTypesPrefsCatalog = NULL; } if (FileTypesPrefsLocale) { CloseLocale(FileTypesPrefsLocale); FileTypesPrefsLocale = NULL; } if (FileTypesPrefsClass) { MUI_DeleteCustomClass(FileTypesPrefsClass); FileTypesPrefsClass = NULL; } CloseLibraries(); #if !defined(__amigaos4__) && !defined(__AROS__) _STD_240_TerminateMemFunctions(); #endif return TRUE; } LIBFUNC_P2(IPTR, LIBSCAGetPrefsInfo, D0, ULONG, which, A6, struct PluginBase *, PluginBase, 5) { IPTR result; (void) PluginBase; d1(kprintf(__FILE__ "/%s/%ld: which=%ld\n", __FUNC__, __LINE__, which)); switch(which) { case SCAPREFSINFO_GetClass: result = (IPTR) FileTypesPrefsClass; break; case SCAPREFSINFO_GetTitle: result = (IPTR) GetLocString(MSGID_PLUGIN_LIST_TITLE); break; case SCAPREFSINFO_GetTitleImage: result = (IPTR) CreatePrefsImage(); break; default: result = (IPTR) NULL; break; } d1(kprintf(__FILE__ "/%s/%ld: Result=%08lx\n", __FUNC__, __LINE__, result)); return result; } LIBFUNC_END //---------------------------------------------------------------------------- DISPATCHER(FileTypesPrefs) { struct FileTypesPrefsInst *inst; ULONG n; IPTR result = 0; d1(kprintf("%s/%ld: START obj=%08lx\n", __FUNC__, __LINE__, obj)); switch(msg->MethodID) { case OM_NEW: obj = (Object *) DoSuperMethodA(cl, obj, msg); d1(kprintf(__FILE__ "/%s/%ld: OM_NEW obj=%08lx\n", __FUNC__, __LINE__, obj)); if (obj) { Object *prefsobject; struct opSet *ops = (struct opSet *) msg; inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); memset(inst, 0, sizeof(struct FileTypesPrefsInst)); inst->fpb_SaveFlags = FTWRITEFLAG_ONLY_SAVE_CHANGED | FTWRITEFLAG_CLEAR_CHANGE_FLAG; inst->fpb_Changed = FALSE; inst->fpb_HideEmptyNodes = FALSE; inst->fpb_FileTypesDirLock = (BPTR) NULL; inst->fpb_IncludeNesting = 0; inst->fpb_WBScreen = LockPubScreen("Workbench"); inst->fpb_MenuImageIndex = 0; inst->fpb_TTfAntialias = TT_Antialias_Auto; inst->fpb_TTfGamma = 2500; NewList(&inst->fpb_FoundList); inst->fpb_CurrentFound = (struct FoundNode *) &inst->fpb_FoundList.lh_Tail; InitHooks(inst); ReadScalosPrefs(inst, "ENV:scalos/scalos.prefs"); inst->fpb_fCreateIcons = GetTagData(MUIA_ScalosPrefs_CreateIcons, TRUE, ops->ops_AttrList); inst->fpb_ProgramName = (CONST_STRPTR) GetTagData(MUIA_ScalosPrefs_ProgramName, (IPTR) "", ops->ops_AttrList); inst->fpb_Objects[OBJNDX_WIN_Main] = (APTR) GetTagData(MUIA_ScalosPrefs_MainWindow, (IPTR) NULL, ops->ops_AttrList); inst->fpb_Objects[OBJNDX_APP_Main] = (APTR) GetTagData(MUIA_ScalosPrefs_Application, (IPTR) NULL, ops->ops_AttrList); prefsobject = CreatePrefsGroup(inst); d1(kprintf(__FILE__ "/%s/%ld: prefsobject=%08lx\n", __FUNC__, __LINE__, prefsobject)); if (prefsobject) { DoMethod(obj, OM_ADDMEMBER, prefsobject); result = (IPTR) obj; } else { CoerceMethod(cl, obj, OM_DISPOSE); } } break; case OM_DISPOSE: d1(kprintf(__FILE__ "/%s/%ld: OM_DISPOSE obj=%08lx\n", __FUNC__, __LINE__, obj)); inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); CleanupFoundNodes(inst); if (inst->fpb_WBScreen) { UnlockPubScreen(NULL, inst->fpb_WBScreen); inst->fpb_WBScreen = NULL; } for (n=0; n<Sizeof(inst->fpb_FileHandles); n++) { if (inst->fpb_FileHandles[n].ftfd_FileHandle) { Close(inst->fpb_FileHandles[n].ftfd_FileHandle); inst->fpb_FileHandles[n].ftfd_FileHandle = (BPTR) NULL; } } if (inst->fpb_LearnReq) { MUI_FreeAslRequest(inst->fpb_LearnReq); inst->fpb_LearnReq = NULL; } if (inst->fpb_LoadReq) { MUI_FreeAslRequest(inst->fpb_LoadReq); inst->fpb_LoadReq = NULL; } if (inst->fpb_SaveReq) { MUI_FreeAslRequest(inst->fpb_SaveReq); inst->fpb_SaveReq = NULL; } if (inst->fpb_FileTypesDirLock) { UnLock(inst->fpb_FileTypesDirLock); inst->fpb_FileTypesDirLock = (BPTR) NULL; } if (inst->fpb_Objects[OBJNDX_ContextMenuFileTypes]) { MUI_DisposeObject(inst->fpb_Objects[OBJNDX_ContextMenuFileTypes]); inst->fpb_Objects[OBJNDX_ContextMenuFileTypes] = NULL; } if (inst->fpb_Objects[OBJNDX_ContextMenuFileTypesActions]) { MUI_DisposeObject(inst->fpb_Objects[OBJNDX_ContextMenuFileTypesActions]); inst->fpb_Objects[OBJNDX_ContextMenuFileTypesActions] = NULL; } if (inst->fpb_Objects[OBJNDX_ContextMenu]) { MUI_DisposeObject(inst->fpb_Objects[OBJNDX_ContextMenu]); inst->fpb_Objects[OBJNDX_ContextMenu] = NULL; } if (inst->fpb_Objects[OBJNDX_ContextMenuAttrList]) { MUI_DisposeObject(inst->fpb_Objects[OBJNDX_ContextMenuAttrList]); inst->fpb_Objects[OBJNDX_ContextMenuAttrList] = NULL; } if (inst->fpb_IconObject) { DisposeIconObject(inst->fpb_IconObject); inst->fpb_IconObject = NULL; } CleanupDefIcons(inst); d1(kprintf("%s/%ld: FileTypesPrefsCatalog=%08lx\n", __FUNC__, __LINE__, FileTypesPrefsCatalog)); return DoSuperMethodA(cl, obj, msg); break; case OM_SET: { struct opSet *ops = (struct opSet *) msg; inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); d1(kprintf("%s/%ld: OM_SET createIcons=%ld\n", __FUNC__, __LINE__, inst->fpb_fCreateIcons)); inst->fpb_fCreateIcons = GetTagData(MUIA_ScalosPrefs_CreateIcons, inst->fpb_fCreateIcons, ops->ops_AttrList); inst->fpb_ProgramName = (CONST_STRPTR) GetTagData(MUIA_ScalosPrefs_ProgramName, (IPTR) inst->fpb_ProgramName, ops->ops_AttrList); inst->fpb_Objects[OBJNDX_WIN_Main] = (APTR) GetTagData(MUIA_ScalosPrefs_MainWindow, (IPTR) inst->fpb_Objects[OBJNDX_WIN_Main], ops->ops_AttrList); inst->fpb_Objects[OBJNDX_APP_Main] = (APTR) GetTagData(MUIA_ScalosPrefs_Application, (IPTR) inst->fpb_Objects[OBJNDX_APP_Main], ops->ops_AttrList); d1(kprintf("%s/%ld: OM_SET createIcons=%ld\n", __FUNC__, __LINE__, inst->fpb_fCreateIcons)); return DoSuperMethodA(cl, obj, msg); } break; case OM_GET: { struct opGet *opg = (struct opGet *) msg; d1(kprintf(__FILE__ "/%s/%ld: OM_GET obj=%08lx\n", __FUNC__, __LINE__, obj)); inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); switch (opg->opg_AttrID) { case MUIA_ScalosPrefs_CreateIcons: *opg->opg_Storage = inst->fpb_fCreateIcons; result = 0; break; default: result = DoSuperMethodA(cl, obj, msg); } } break; case MUIM_ScalosPrefs_ParseToolTypes: d1(kprintf(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_ParseToolTypes obj=%08lx\n", __FUNC__, __LINE__, obj)); inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); d1(kprintf(__FILE__ "/%s/%ld: before ParseToolTypes\n", __FUNC__, __LINE__)); ParseToolTypes(inst, (struct MUIP_ScalosPrefs_ParseToolTypes *) msg); d1(kprintf(__FILE__ "/%s/%ld: after ParseToolTypes\n", __FUNC__, __LINE__)); break; case MUIM_ScalosPrefs_LoadConfig: d1(kprintf(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_LoadConfig obj=%08lx\n", __FUNC__, __LINE__, obj)); inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); ReadPrefs(inst, ENV_FILETYPES_DIR, ENV_DEFICONS_PREFS); inst->fpb_SaveFlags = FTWRITEFLAG_ONLY_SAVE_CHANGED | FTWRITEFLAG_CLEAR_CHANGE_FLAG; SetChangedFlag(inst, FALSE); break; case MUIM_ScalosPrefs_UseConfig: d1(kprintf(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_UseConfig obj=%08lx\n", __FUNC__, __LINE__, obj)); inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); WritePrefs(inst, ENV_FILETYPES_DIR, ENV_DEFICONS_PREFS, inst->fpb_SaveFlags); SetChangedFlag(inst, FALSE); break; case MUIM_ScalosPrefs_UseConfigIfChanged: d1(kprintf(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_UseConfigIfChanged obj=%08lx\n", __FUNC__, __LINE__, obj)); inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); if (inst->fpb_Changed) { WritePrefs(inst, ENV_FILETYPES_DIR, ENV_DEFICONS_PREFS, inst->fpb_SaveFlags); SetChangedFlag(inst, FALSE); } break; case MUIM_ScalosPrefs_SaveConfig: d1(kprintf(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_SaveConfig obj=%08lx\n", __FUNC__, __LINE__, obj)); inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); WritePrefs(inst, ENV_FILETYPES_DIR, ENV_DEFICONS_PREFS, inst->fpb_SaveFlags & ~FTWRITEFLAG_CLEAR_CHANGE_FLAG); WritePrefs(inst, ENVARC_FILETYPES_DIR, ENVARC_DEFICONS_PREFS, inst->fpb_SaveFlags); SetChangedFlag(inst, FALSE); break; case MUIM_ScalosPrefs_SaveConfigIfChanged: d1(kprintf(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_SaveConfigIfChanged obj=%08lx\n", __FUNC__, __LINE__, obj)); inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); if (inst->fpb_Changed) { WritePrefs(inst, ENV_FILETYPES_DIR, ENV_DEFICONS_PREFS, inst->fpb_SaveFlags & ~FTWRITEFLAG_CLEAR_CHANGE_FLAG); WritePrefs(inst, ENVARC_FILETYPES_DIR, ENVARC_DEFICONS_PREFS, inst->fpb_SaveFlags); SetChangedFlag(inst, FALSE); } break; case MUIM_ScalosPrefs_RestoreConfig: inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); d1(KPrintF(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_RestoreConfig\n", __FUNC__, __LINE__)); DoMethod(obj, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_Restore], 0); break; case MUIM_ScalosPrefs_ResetToDefaults: inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); d1(KPrintF(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_ResetToDefaults", __FUNC__, __LINE__)); DoMethod(obj, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ResetToDefaults], 0); break; case MUIM_ScalosPrefs_LastSavedConfig: inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); d1(KPrintF(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_LastSavedConfig", __FUNC__, __LINE__)); DoMethod(obj, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_LastSaved], 0); break; case MUIM_ScalosPrefs_OpenConfig: d1(kprintf(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_OpenConfig obj=%08lx\n", __FUNC__, __LINE__, obj)); inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); DoMethod(obj, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_Open], 0); break; case MUIM_ScalosPrefs_SaveConfigAs: d1(kprintf(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_SaveConfigAs obj=%08lx\n", __FUNC__, __LINE__, obj)); inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); DoMethod(obj, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_SaveAs], 0); break; case MUIM_ScalosPrefs_About: d1(kprintf(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_About obj=%08lx\n", __FUNC__, __LINE__, obj)); inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); DoMethod(obj, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_About], 0); break; case MUIM_ScalosPrefs_LoadNamedConfig: { struct MUIP_ScalosPrefs_LoadNamedConfig *lnc = (struct MUIP_ScalosPrefs_LoadNamedConfig *) msg; d1(kprintf(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_LoadNamedConfig obj=%08lx\n", __FUNC__, __LINE__, obj)); inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); ReadPrefs(inst, lnc->ConfigFileName, ENV_DEFICONS_PREFS); inst->fpb_SaveFlags = FTWRITEFLAG_ONLY_SAVE_CHANGED | FTWRITEFLAG_CLEAR_CHANGE_FLAG; } break; case MUIM_ScalosPrefs_CreateSubWindows: d1(kprintf(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_CreateSubWindows obj=%08lx\n", __FUNC__, __LINE__, obj)); result = (IPTR) CreateSubWindows(cl, obj); break; case MUIM_ScalosPrefs_PageActive: { struct MUIP_ScalosPrefs_PageActive *spa = (struct MUIP_ScalosPrefs_PageActive *) msg; inst = (struct FileTypesPrefsInst *) INST_DATA(cl, obj); inst->fpb_PageIsActive = spa->isActive; d1(kprintf(__FILE__ "/%s/%ld: MUIM_ScalosPrefs_PageActive isActive=%08lx inst=%08lx\n", __FUNC__, __LINE__, spa->isActive, inst)); } break; case MUIM_ScalosPrefs_GetListOfMCCs: result = (IPTR) RequiredMccList; break; default: d1(kprintf(__FILE__ "/%s/%ld: MethodID=%08lx\n", __FUNC__, __LINE__, msg->MethodID)); result = DoSuperMethodA(cl, obj, msg); break; } d1(kprintf("%s/%ld: END inst=%08lx\n", __FUNC__, __LINE__, inst)); return result; } DISPATCHER_END //---------------------------------------------------------------------------- static Object *CreatePrefsGroup(struct FileTypesPrefsInst *inst) { d1(kprintf("%s/%ld: inst=%08lx\n", __FUNC__, __LINE__, inst)); inst->fpb_Objects[OBJNDX_ContextMenuFileTypes] = MUI_MakeObject(MUIO_MenustripNM, ContextMenuFileTypes, 0); if (NULL == inst->fpb_Objects[OBJNDX_ContextMenuFileTypes]) return NULL; inst->fpb_Objects[OBJNDX_ContextMenuFileTypesActions] = MUI_MakeObject(MUIO_MenustripNM, ContextMenuFileTypesActions, 0); if (NULL == inst->fpb_Objects[OBJNDX_ContextMenuFileTypesActions]) return NULL; inst->fpb_Objects[OBJNDX_Menu_ExpandFileTypes] = (Object *) DoMethod(inst->fpb_Objects[OBJNDX_ContextMenuFileTypes], MUIM_FindUData, HOOKNDX_ExpandFileTypes); inst->fpb_Objects[OBJNDX_Menu_CollapseFileTypes] = (Object *) DoMethod(inst->fpb_Objects[OBJNDX_ContextMenuFileTypes], MUIM_FindUData, HOOKNDX_CollapseFileTypes); inst->fpb_Objects[OBJNDX_Menu_Find] = (Object *) DoMethod(inst->fpb_Objects[OBJNDX_ContextMenuFileTypes], MUIM_FindUData, HOOKNDX_ShowFindGroup); inst->fpb_Objects[OBJNDX_ContextMenu] = MUI_MakeObject(MUIO_MenustripNM, ContextMenus, 0); if (NULL == inst->fpb_Objects[OBJNDX_ContextMenu]) return NULL; inst->fpb_Objects[OBJNDX_Menu_Expand] = (Object *) DoMethod(inst->fpb_Objects[OBJNDX_ContextMenu], MUIM_FindUData, HOOKNDX_Expand); inst->fpb_Objects[OBJNDX_Menu_Collapse] = (Object *) DoMethod(inst->fpb_Objects[OBJNDX_ContextMenu], MUIM_FindUData, HOOKNDX_Collapse); inst->fpb_Objects[OBJNDX_Menu_Copy] = (Object *) DoMethod(inst->fpb_Objects[OBJNDX_ContextMenu], MUIM_FindUData, HOOKNDX_Copy); inst->fpb_Objects[OBJNDX_Menu_Cut] = (Object *) DoMethod(inst->fpb_Objects[OBJNDX_ContextMenu], MUIM_FindUData, HOOKNDX_Cut); inst->fpb_Objects[OBJNDX_Menu_Paste] = (Object *) DoMethod(inst->fpb_Objects[OBJNDX_ContextMenu], MUIM_FindUData, HOOKNDX_Paste); inst->fpb_Objects[OBJNDX_Menu_HideEmptyEntries] = (Object *) DoMethod(inst->fpb_Objects[OBJNDX_ContextMenu], MUIM_FindUData, HOOKNDX_HideEmptyEntries); inst->fpb_Objects[OBJNDX_ContextMenuAttrList] = MUI_MakeObject(MUIO_MenustripNM, ContextMenusAttrList, 0); if (NULL == inst->fpb_Objects[OBJNDX_ContextMenuAttrList]) return NULL; inst->fpb_Objects[OBJNDX_Menu_CopyAttr] = (Object *) DoMethod(inst->fpb_Objects[OBJNDX_ContextMenuAttrList], MUIM_FindUData, HOOKNDX_CopyAttr); inst->fpb_Objects[OBJNDX_Menu_CutAttr] = (Object *) DoMethod(inst->fpb_Objects[OBJNDX_ContextMenuAttrList], MUIM_FindUData, HOOKNDX_CutAttr); inst->fpb_Objects[OBJNDX_Menu_PasteAttr] = (Object *) DoMethod(inst->fpb_Objects[OBJNDX_ContextMenuAttrList], MUIM_FindUData, HOOKNDX_PasteAttr); d1(kprintf("%s/%ld: inst=%08lx\n", __FUNC__, __LINE__, inst)); inst->fpb_Objects[OBJNDX_Group_Main] = VGroup, MUIA_Background, MUII_PageBack, // OBJNDX_ShadowListView is used as invisible storage // for copy and paste operations Child, (IPTR)(inst->fpb_Objects[OBJNDX_ShadowListView] = NListviewObject, MUIA_ShowMe, FALSE, MUIA_CycleChain, TRUE, MUIA_NListview_NList, (IPTR)(inst->fpb_Objects[OBJNDX_ShadowListTree] = myNListTreeObject, MUIA_NList_PrivateData, (IPTR)inst, MUIA_NList_Format, (IPTR)"", MUIA_NListtree_DisplayHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_TreeDisplay], MUIA_NListtree_ConstructHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_TreeConstruct], MUIA_NListtree_DestructHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_TreeDestruct], End), // myNListTreeClass End), // NListviewObject Child, (IPTR)(inst->fpb_Objects[OBJNDX_ShadowAttrListView] = NListviewObject, MUIA_ShowMe, FALSE, MUIA_CycleChain, TRUE, MUIA_NListview_NList, (IPTR)(inst->fpb_Objects[OBJNDX_ShadowAttrList] = myNListObject, MUIA_NList_PrivateData, (IPTR)inst, MUIA_NList_Format, (IPTR)",", InputListFrame, MUIA_Background, MUII_ListBack, MUIA_NList_DisplayHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_AttrDisplay], MUIA_NList_ConstructHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_AttrConstruct], MUIA_NList_DestructHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_AttrDestruct], MUIA_NList_DragSortable, FALSE, MUIA_NList_ShowDropMarks, FALSE, MUIA_NList_Title, TRUE, MUIA_NList_TitleSeparator, TRUE, End), // myNListTreeClass MUIA_Listview_DragType, MUIV_Listview_DragType_None, MUIA_Weight, 50, End), // NListviewObject Child, (IPTR)(RegisterObject, MUIA_Register_Titles, (IPTR)RegisterTitles, MUIA_CycleChain, TRUE, // --- filetypes Child, (IPTR)(VGroup, Child, (IPTR)(HGroup, MUIA_Weight, 200, Child, (IPTR)(VGroup, Child, (IPTR)(VGroup, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_GROUP_FILETYPES_FILETYPES), GroupFrame, Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_FindFiletype] = HGroup, GroupFrame, Child, (IPTR)(inst->fpb_Objects[OBJNDX_Button_HideFind] = TextObject, MUIA_Weight, 10, ButtonFrame, MUIA_CycleChain, TRUE, #if defined(MUII_Close) MUIA_Text_Contents, (IPTR)MUIX_C "\33I[6:" STR(MUII_Close) "]", #else MUIA_Text_Contents, (IPTR)MUIX_C "\33I[6:" STR(MUII_TapeStop) "]", #endif MUIA_InputMode, MUIV_InputMode_RelVerify, MUIA_Background, MUII_ButtonBack, MUIA_ShortHelp, (IPTR)GetLocString(MSGID_BUTTON_FIND_HIDE_SHORTHELP), End), Child, (IPTR)(inst->fpb_Objects[OBJNDX_String_FindFileType] = StringObject, MUIA_CycleChain, TRUE, StringFrame, MUIA_ShortHelp, (IPTR)GetLocString(MSGID_STRING_FIND_SHORTHELP), End), //StringObject Child, (IPTR)(inst->fpb_Objects[OBJNDX_Button_FindPrevFileType] = TextObject, MUIA_Weight, 10, ButtonFrame, MUIA_CycleChain, TRUE, MUIA_Text_Contents, (IPTR)MUIX_C "\33I[6:" STR(MUII_TapePlayBack) "]", MUIA_InputMode, MUIV_InputMode_RelVerify, MUIA_Background, MUII_ButtonBack, MUIA_ShortHelp, (IPTR)GetLocString(MSGID_BUTTON_FIND_PREV_SHORTHELP), End), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Button_FindNextFileType] = TextObject, MUIA_Weight, 10, ButtonFrame, MUIA_CycleChain, TRUE, MUIA_Text_Contents, (IPTR)MUIX_C "\33I[6:" STR(MUII_TapePlay) "]", MUIA_InputMode, MUIV_InputMode_RelVerify, MUIA_Background, MUII_ButtonBack, MUIA_ShortHelp, (IPTR)GetLocString(MSGID_BUTTON_FIND_NEXT_SHORTHELP), End), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Button_FindHitCount] = TextObject, MUIA_Weight, 10, MUIA_Text_Contents, (IPTR)"", End), //TextObject End), //HGroup Child, (IPTR)(inst->fpb_Objects[OBJNDX_NListview_FileTypes] = NListviewObject, MUIA_CycleChain, TRUE, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_LISTVIEW_FILETYPES), MUIA_NListview_NList, (IPTR)(inst->fpb_Objects[OBJNDX_NListtree_FileTypes] = myFileTypesNListTreeObject, MUIA_Background, MUII_ListBack, MUIA_NList_PrivateData, (IPTR)inst, MUIA_ContextMenu, (IPTR)inst->fpb_Objects[OBJNDX_ContextMenuFileTypes], MUIA_NListtree_DisplayHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_FileTypesDisplay], MUIA_NListtree_ConstructHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_FileTypesConstruct], MUIA_NListtree_DestructHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_FileTypesDestruct], MUIA_NListtree_DragDropSort, TRUE, MUIA_NList_ShowDropMarks, TRUE, MUIA_NListtree_EmptyNodes, TRUE, MUIA_NListtree_AutoVisible, MUIV_NListtree_AutoVisible_Expand, End), //myFileTypesNListTreeClass End), //NListtreeObject Child, (IPTR)(inst->fpb_Objects[OBJNDX_String_FileTypes_Name] = StringObject, MUIA_CycleChain, TRUE, MUIA_Disabled, TRUE, MUIA_String_AdvanceOnCR, TRUE, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPES), StringFrame, End), //StringObject Child, (IPTR)(ColGroup(2), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Button_FileTypes_Add] = KeyButtonHelp(MSGID_BUTTON_ADD_FILETYPE, 'a', MSGID_SHORTHELP_BUTTON_ADD_FILETYPE)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Button_FileTypes_Remove] = KeyButtonHelp(MSGID_BUTTON_DELETE_FILETYPE, 'r', MSGID_SHORTHELP_BUTTON_DELETE_FILETYPE)), End), //ColGroup End), //VGroup End), //VGroup Child, (IPTR)(VGroup, Child, (IPTR)HVSpace, MUIA_Weight, 10, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_DEFAULTICON), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Text_FileTypes_FileTypesName] = TextObject, MUIA_ShowMe, FALSE, MUIA_Text_Contents, (IPTR)"", MUIA_Text_PreParse, (IPTR)MUIX_B "\33c", End), //TextObject Child, (IPTR)HVSpace, Child, (IPTR)(inst->fpb_Objects[OBJNDX_Text_FileTypes_DefIconName] = TextObject, MUIA_Text_Contents, (IPTR)"", MUIA_Text_PreParse, (IPTR)"\33c", MUIA_Text_SetMin, TRUE, End), //TextObject Child, (IPTR)(inst->fpb_Objects[OBJNDX_IconObjectMCC_FileTypes_Icon] = IconobjectMCCObject, MUIA_InputMode, MUIV_InputMode_RelVerify, NoFrame, MUIA_ShowSelState, FALSE, End), //IconobjectMCCObject Child, (IPTR)HVSpace, Child, (IPTR)(inst->fpb_Objects[OBJNDX_Button_FileTypes_CreateIcon] = KeyButtonHelp(MSGID_BUTTON_CREATE_ICON, 'i', MSGID_SHORTHELP_BUTTON_CREATE_ICON)), Child, (IPTR)HVSpace, End), //VGroup End), //HGroup Child, (IPTR)(BalanceObject, End), // BalanceObject Child, (IPTR)(VGroup, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_GROUP_FILETYPES_METHODS), GroupFrame, MUIA_Weight, 50, Child, (IPTR)(inst->fpb_Objects[OBJNDX_NListview_FileTypes_Methods] = NListviewObject, MUIA_CycleChain, TRUE, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_LISTVIEW_FILETYPE_ACTION), MUIA_NListview_NList, (IPTR)(inst->fpb_Objects[OBJNDX_NList_FileTypes_Actions] = myFileTypesActionsNListObject, MUIA_NList_PrivateData, (IPTR)inst, MUIA_NList_Format, (IPTR)"BAR,", InputListFrame, MUIA_Background, MUII_ListBack, MUIA_ContextMenu, (IPTR)inst->fpb_Objects[OBJNDX_ContextMenuFileTypesActions], MUIA_NList_DragSortable, TRUE, MUIA_NList_DisplayHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_FileTypesActionDisplay], MUIA_NList_ConstructHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_FileTypesActionConstruct], MUIA_NList_DestructHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_FileTypesActionDestruct], End), //myFileTypesActionsNListClass End), //NListviewObject Child, (IPTR)(ColGroup(3), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Popobject_FileTypes_Methods_Add] = PopobjectObject, MUIA_Disabled, TRUE, MUIA_UserData, (IPTR)inst, MUIA_CycleChain, TRUE, MUIA_Popstring_Button, (IPTR)(KeyButtonHelp(MSGID_BUTTON_ADD_FILETYPEACTION, 'a', MSGID_SHORTHELP_BUTTON_ADD_FILETYPEACTION)), MUIA_Popobject_Object, (IPTR)(inst->fpb_Objects[OBJNDX_NListview_FileTypes_Methods_Add] = NListviewObject, MUIA_NListview_NList, (IPTR)(inst->fpb_Objects[OBJNDX_Nlist_FileTypes_Methods_Add] = NListObject, InputListFrame, MUIA_Background, MUII_ListBack, MUIA_NList_AdjustWidth, TRUE, End), //NListObject End), //NListviewObject MUIA_Popstring_CloseHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_AddFileTypesMethod], End), //PopobjectObject Child, (IPTR)(inst->fpb_Objects[OBJNDX_Button_FileTypes_Actions_Remove] = KeyButtonHelp(MSGID_BUTTON_REMOVE_FILETYPEACTION, 'r', MSGID_SHORTHELP_BUTTON_REMOVE_FILETYPEACTION)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Button_FileTypes_Actions_Learn] = KeyButtonHelp(MSGID_BUTTON_LEARN_FILETYPEACTION, 'l', MSGID_SHORTHELP_BUTTON_LEARN_FILETYPEACTION)), End), //ColGroup End), //VGroup Child, (IPTR)(BalanceObject, End), // BalanceObject Child, (IPTR)(ScrollgroupObject, MUIA_Weight, 25, MUIA_Scrollgroup_Contents, (IPTR)(VirtgroupObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_VIRTGROUP_FILETYPE_ACTION_ATTRIBUTES), // empty placeholder Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_Filetypes_Actions_Empty] = VGroup, MUIA_ShowMe, TRUE, Child, (IPTR)HVSpace, End), //VGroup // for MATCH Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_Filetypes_Actions_Match] = VGroup, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_GROUP_FILETYPESACTION_MATCH), GroupFrame, MUIA_ShowMe, FALSE, Child, (IPTR)(HGroup, Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_MATCH_OFFSET)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_String_Filetypes_Actions_Match_Offset] = StringObject, MUIA_CycleChain, TRUE, StringFrame, MUIA_String_Integer, 0, MUIA_String_AdvanceOnCR, TRUE, MUIA_String_Accept , (IPTR)"0123456879", MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_MATCH_OFFSET), End), //StringObject Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_MATCH_CASE_SENSITIVE)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Checkmark_FileTypes_Action_Match_Case] = KeyCheckMark(FALSE, (IPTR)"v")), End), //HGroup Child, (IPTR)(HGroup, Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_MATCH_MATCH)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_String_Filetypes_Actions_Match_Match] = StringObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_MATCH), MUIA_CycleChain, TRUE, MUIA_String_AdvanceOnCR, TRUE, StringFrame, End), //StringObject End), //HGroup Child, (IPTR)HVSpace, End), //VGroup // for SEARCH Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_Filetypes_Actions_Search] = VGroup, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_GROUP_FILETYPESACTION_SEARCH), GroupFrame, MUIA_ShowMe, FALSE, Child, (IPTR)(HGroup, Child, (IPTR)HVSpace, Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_SEARCH_SKIP_SPACES)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Checkmark_FileTypes_Action_Search_SkipSpaces] = KeyCheckMark(FALSE, (IPTR)"v")), Child, (IPTR)HVSpace, Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_SEARCH_CASE_SENSITIVE)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Checkmark_FileTypes_Action_Search_Case] = KeyCheckMark(FALSE, (IPTR)"v")), Child, (IPTR)HVSpace, End), //HGroup Child, (IPTR)(HGroup, Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_SEARCH_SEARCH)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_Search_Search] = StringObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_SEARCH), MUIA_CycleChain, TRUE, MUIA_String_AdvanceOnCR, TRUE, StringFrame, End), //StringObject End), //HGroup Child, (IPTR)HVSpace, End), //VGroup // for FILESIZE Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_Filetypes_Actions_Filesize] = VGroup, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_GROUP_FILETYPESACTION_FILESIZE), GroupFrame, MUIA_ShowMe, FALSE, Child, (IPTR)(HGroup, Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_FILESIZE_FILESIZE)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_Filesize_Filesize] = StringObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_FILESIZE), MUIA_CycleChain, TRUE, StringFrame, MUIA_String_Integer, 0, MUIA_String_Accept , (IPTR)"0123456879", MUIA_String_AdvanceOnCR, TRUE, End), //StringObject End), //HGroup Child, (IPTR)HVSpace, End), //VGroup // for MINSIZEMB Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_FileTypes_Action_MinSizeMB] = VGroup, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_GROUP_FILETYPESACTION_MINSIZEMB), GroupFrame, MUIA_ShowMe, FALSE, Child, (IPTR)(HGroup, Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_MINSIZEMB_SIZE)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_MinSizeMB_MinSize] = StringObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_MINSIZEMB), MUIA_CycleChain, TRUE, StringFrame, MUIA_String_Integer, 0, MUIA_String_Accept , (IPTR)"0123456879", MUIA_String_AdvanceOnCR, TRUE, End), //StringObject End), //HGroup Child, (IPTR)HVSpace, End), //VGroup // for PATTERN Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_Filetypes_Actions_Pattern] = VGroup, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_GROUP_FILETYPESACTION_PATTERN), GroupFrame, MUIA_ShowMe, FALSE, Child, (IPTR)(HGroup, Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_PATTERN_PATTERN)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_Pattern_Pattern] = StringObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_PATTERN), MUIA_CycleChain, TRUE, StringFrame, MUIA_String_AdvanceOnCR, TRUE, End), //StringObject End), //HGroup Child, (IPTR)HVSpace, End), //VGroup // for DOSDEVICE Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_Filetypes_Actions_DosDevice] = VGroup, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_GROUP_FILETYPESACTION_DOSDEVICE), GroupFrame, MUIA_ShowMe, FALSE, Child, (IPTR)(HGroup, Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_DOSDEVICE_PATTERN)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_DosDevice_Pattern] = StringObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_DOSDEVICE), MUIA_CycleChain, TRUE, StringFrame, MUIA_String_AdvanceOnCR, TRUE, End), //StringObject End), //HGroup Child, (IPTR)HVSpace, End), //VGroup // for DEVICENAME Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_Filetypes_Actions_DeviceName] = VGroup, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_GROUP_FILETYPESACTION_DEVICENAME), GroupFrame, MUIA_ShowMe, FALSE, Child, (IPTR)(HGroup, Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_DEVICENAME_PATTERN)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_DeviceName_Pattern] = StringObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_DEVICENAME), MUIA_CycleChain, TRUE, StringFrame, MUIA_String_AdvanceOnCR, TRUE, End), //StringObject End), //HGroup Child, (IPTR)HVSpace, End), //VGroup // for CONTENTS Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_Filetypes_Actions_Contents] = VGroup, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_GROUP_FILETYPESACTION_CONTENTS), GroupFrame, MUIA_ShowMe, FALSE, Child, (IPTR)(HGroup, Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_CONTENTS_PATTERN)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_Contents_Pattern] = StringObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_CONTENTS), MUIA_CycleChain, TRUE, StringFrame, MUIA_String_AdvanceOnCR, TRUE, End), //StringObject End), //HGroup Child, (IPTR)HVSpace, End), //VGroup // for DOSTYPE Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_Filetypes_Actions_DosType] = VGroup, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_GROUP_FILETYPESACTION_DOSTYPE), GroupFrame, MUIA_ShowMe, FALSE, Child, (IPTR)(HGroup, Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_DOSTYPE_PATTERN)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_DosType_Pattern] = StringObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_DOSTYPE), MUIA_CycleChain, TRUE, StringFrame, MUIA_String_AdvanceOnCR, TRUE, End), //StringObject End), //HGroup Child, (IPTR)HVSpace, End), //VGroup // for PROTECTION Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_Filetypes_Actions_Protection] = VGroup, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_GROUP_FILETYPESACTION_PROTECTION), GroupFrame, MUIA_ShowMe, FALSE, Child, (IPTR)(ColGroup(4), Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_PROTECTION_R)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_R] = CycleObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_PROTECTION_R), MUIA_CycleChain, TRUE, MUIA_Font, MUIV_Font_Button, MUIA_Cycle_Entries, (IPTR)FileTypeActionProtectionStrings, End), //CycleObject Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_PROTECTION_W)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_W] = CycleObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_PROTECTION_W), MUIA_CycleChain, TRUE, MUIA_Font, MUIV_Font_Button, MUIA_Cycle_Entries, (IPTR)FileTypeActionProtectionStrings, End), //CycleObject Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_PROTECTION_E)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_E] = CycleObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_PROTECTION_E), MUIA_CycleChain, TRUE, MUIA_Font, MUIV_Font_Button, MUIA_Cycle_Entries, (IPTR)FileTypeActionProtectionStrings, End), //CycleObject Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_PROTECTION_D)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_D] = CycleObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_PROTECTION_D), MUIA_CycleChain, TRUE, MUIA_Font, MUIV_Font_Button, MUIA_Cycle_Entries, (IPTR)FileTypeActionProtectionStrings, End), //CycleObject Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_PROTECTION_S)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_S] = CycleObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_PROTECTION_S), MUIA_CycleChain, TRUE, MUIA_Font, MUIV_Font_Button, MUIA_Cycle_Entries, (IPTR)FileTypeActionProtectionStrings, End), //CycleObject Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_PROTECTION_P)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_P] = CycleObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_PROTECTION_P), MUIA_CycleChain, TRUE, MUIA_Font, MUIV_Font_Button, MUIA_Cycle_Entries, (IPTR)FileTypeActionProtectionStrings, End), //CycleObject Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_PROTECTION_A)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_A] = CycleObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_PROTECTION_A), MUIA_CycleChain, TRUE, MUIA_Font, MUIV_Font_Button, MUIA_Cycle_Entries, (IPTR)FileTypeActionProtectionStrings, End), //CycleObject Child, (IPTR)Label2(GetLocString(MSGID_FILETYPEACTION_PROTECTION_H)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_H] = CycleObject, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_SHORTHELP_STRING_FILETYPEACTION_PROTECTION_H), MUIA_CycleChain, TRUE, MUIA_Font, MUIV_Font_Button, MUIA_Cycle_Entries, (IPTR)FileTypeActionProtectionStrings, End), //CycleObject End), //ColGroup Child, (IPTR)HVSpace, End), //VGroup End), //VirtualGroup End), //Scrollgroup End), //VGroup // --- filetype actions Child, (IPTR)(VGroup, Child, (IPTR)(inst->fpb_Objects[OBJNDX_MainListView] = NListviewObject, MUIA_CycleChain, TRUE, MUIA_NListview_NList, (IPTR)(inst->fpb_Objects[OBJNDX_MainListTree] = myNListTreeObject, MUIA_ContextMenu, (IPTR)inst->fpb_Objects[OBJNDX_ContextMenu], MUIA_NList_PrivateData, (IPTR)inst, MUIA_NList_Format, (IPTR)"", InputListFrame, MUIA_Background, MUII_ListBack, MUIA_NListtree_DisplayHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_TreeDisplay], MUIA_NListtree_ConstructHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_TreeConstruct], MUIA_NListtree_DestructHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_TreeDestruct], MUIA_NListtree_DragDropSort, TRUE, MUIA_NList_ShowDropMarks, TRUE, MUIA_NListtree_EmptyNodes, TRUE, MUIA_NListtree_AutoVisible, MUIV_NListtree_AutoVisible_Expand, End), // myNListTreeClass MUIA_Listview_DragType, MUIV_Listview_DragType_None, End), // NListviewObject Child, (IPTR)(inst->fpb_Objects[OBJNDX_HiddenListView] = NListviewObject, MUIA_ShowMe, FALSE, MUIA_CycleChain, TRUE, MUIA_NListview_NList, (IPTR)(inst->fpb_Objects[OBJNDX_HiddenListTree] = myNListTreeObject, MUIA_ContextMenu, (IPTR)inst->fpb_Objects[OBJNDX_ContextMenu], MUIA_NList_PrivateData, (IPTR)inst, MUIA_NList_Format, (IPTR)"", InputListFrame, MUIA_Background, MUII_ListBack, MUIA_NListtree_DisplayHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_TreeDisplay], MUIA_NListtree_ConstructHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_TreeConstruct], MUIA_NListtree_DestructHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_TreeDestruct], MUIA_NListtree_DragDropSort, TRUE, MUIA_NList_ShowDropMarks, TRUE, MUIA_NListtree_EmptyNodes, TRUE, MUIA_NListtree_AutoVisible, MUIV_NListtree_AutoVisible_Expand, End), // myNListTreeClass MUIA_Listview_DragType, MUIV_Listview_DragType_None, End), // NListviewObject Child, (IPTR)(HGroup, Child, (IPTR)(inst->fpb_Objects[OBJNDX_Lamp_Changed] = LampObject, MUIA_Lamp_Type, MUIV_Lamp_Type_Huge, MUIA_Lamp_Color, MUIV_Lamp_Color_Off, MUIA_ShortHelp, (IPTR)GetLocString(MSGID_SHORTHELP_LAMP_CHANGED), End), //LampObject Child, (IPTR)(ColGroup(2), Child, (IPTR)(inst->fpb_Objects[OBJNDX_AddEntryPopObject] = PopobjectObject, MUIA_Disabled, TRUE, MUIA_CycleChain, TRUE, MUIA_Popstring_Button, (IPTR)(inst->fpb_Objects[OBJNDX_ButtonAddEntry] = KeyButtonHelp(MSGID_BUTTON_ADD_ENTRY, 'a', MSGID_SHORTHELP_BUTTON_ADD_ENTRY)), MUIA_Popobject_Object, (IPTR)(inst->fpb_Objects[OBJNDX_AddEntryListView] = NListviewObject, MUIA_NListview_NList, (IPTR)(inst->fpb_Objects[OBJNDX_AddEntryList] = NListObject, InputListFrame, MUIA_Background, MUII_ListBack, MUIA_NList_ConstructHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_AddEntryListConstruct], MUIA_NList_DestructHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_AddEntryListDestruct], MUIA_NList_DisplayHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_AddEntryListDisplay], MUIA_NList_AdjustWidth, TRUE, End), //NListObject End), //NListviewObject End), //PopobjectObject Child, (IPTR)(inst->fpb_Objects[OBJNDX_ButtonRemoveEntry] = KeyButtonHelp(MSGID_BUTTON_DELETE_ENTRY, 'd', MSGID_SHORTHELP_BUTTON_DELETE_ENTRY)), End), //ColGroup End), //HGroup Child, (IPTR)(BalanceObject, End), // BalanceObject Child, (IPTR)(inst->fpb_Objects[OBJNDX_AttrListView] = NListviewObject, MUIA_CycleChain, TRUE, MUIA_NListview_NList, (IPTR)(inst->fpb_Objects[OBJNDX_AttrList] = myNListObject, MUIA_ContextMenu, (IPTR)inst->fpb_Objects[OBJNDX_ContextMenuAttrList], MUIA_NList_PrivateData, (IPTR)inst, MUIA_NList_Format, (IPTR)",", InputListFrame, MUIA_Background, MUII_ListBack, MUIA_NList_DisplayHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_AttrDisplay], MUIA_NList_ConstructHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_AttrConstruct], MUIA_NList_DestructHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_AttrDestruct], MUIA_NList_DragSortable, FALSE, MUIA_NList_ShowDropMarks, FALSE, MUIA_NList_Title, TRUE, MUIA_NList_TitleSeparator, TRUE, End), // myNListTreeClass MUIA_Listview_DragType, MUIV_Listview_DragType_None, MUIA_Weight, 50, End), // NListviewObject Child, (IPTR)(ColGroup(3), Child, (IPTR)(inst->fpb_Objects[OBJNDX_AddAttrPopObject] = PopobjectObject, MUIA_Disabled, TRUE, MUIA_CycleChain, TRUE, MUIA_Popstring_Button, (IPTR)(inst->fpb_Objects[OBJNDX_ButtonAddAttribute] = KeyButtonHelp(MSGID_BUTTON_ADD_ATTRIBUTE, ' ', MSGID_SHORTHELP_BUTTON_ADD_ATTRIBUTE)), MUIA_Popobject_Object, (IPTR)(inst->fpb_Objects[OBJNDX_AddAttrListView] = NListviewObject, MUIA_NListview_NList, (IPTR)(inst->fpb_Objects[OBJNDX_AddAttrList] = NListObject, InputListFrame, MUIA_Background, MUII_ListBack, MUIA_NList_ConstructHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_AddAttrListConstruct], MUIA_NList_DestructHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_AddAttrListDestruct], MUIA_NList_DisplayHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_AddAttrListDisplay], MUIA_NList_AdjustWidth, TRUE, End), //NListObject End), //NListviewObject End), //PopobjectObject Child, (IPTR)(inst->fpb_Objects[OBJNDX_ButtonEditAttribute] = KeyButtonHelp(MSGID_BUTTON_EDIT_ATTRIBUTE, 'e', MSGID_SHORTHELP_BUTTON_EDIT_ATTRIBUTE)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_ButtonRemoveAttribute] = KeyButtonHelp(MSGID_BUTTON_DELETE_ATTRIBUTE, 'r', MSGID_SHORTHELP_BUTTON_DELETE_ATTRIBUTE)), End), //ColGroup MUIA_ContextMenu, (IPTR)inst->fpb_Objects[OBJNDX_ContextMenu], End), //VGroup End), //RegisterObject End; //VGroup if (NULL == inst->fpb_Objects[OBJNDX_Group_Main]) return NULL; d1(kprintf("%s/%ld: inst=%08lx\n", __FUNC__, __LINE__, inst)); set(inst->fpb_Objects[OBJNDX_Menu_HideEmptyEntries], MUIA_Menuitem_Checked, inst->fpb_HideEmptyNodes); set(inst->fpb_Objects[OBJNDX_ButtonRemoveEntry], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_ButtonRemoveAttribute], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_ButtonEditAttribute], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Menu_CopyAttr], MUIA_Menuitem_Enabled, FALSE); set(inst->fpb_Objects[OBJNDX_Menu_CutAttr], MUIA_Menuitem_Enabled, FALSE); set(inst->fpb_Objects[OBJNDX_HiddenListView], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); set(inst->fpb_Objects[OBJNDX_Button_FindNextFileType], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Button_FindPrevFileType], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Button_FileTypes_Remove], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Button_FileTypes_Actions_Remove], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Button_FileTypes_Actions_Learn], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Popobject_FileTypes_Methods_Add], MUIA_Disabled, TRUE); DoMethod(inst->fpb_Objects[OBJNDX_Group_Main], MUIM_Notify, MUIA_ContextMenuTrigger, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Group_Main], 3, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ContextMenuTrigger], MUIV_TriggerValue ); DoMethod(inst->fpb_Objects[OBJNDX_AddEntryListView], MUIM_Notify, MUIA_Listview_DoubleClick, TRUE, inst->fpb_Objects[OBJNDX_AddEntryPopObject], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_AddEntry]); DoMethod(inst->fpb_Objects[OBJNDX_AddAttrListView], MUIM_Notify, MUIA_Listview_DoubleClick, TRUE, inst->fpb_Objects[OBJNDX_AddAttrPopObject], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_AddAttribute]); // Call hook when Find Filetype Hide button is clicked DoMethod(inst->fpb_Objects[OBJNDX_Button_HideFind], MUIM_Notify, MUIA_Pressed, FALSE, inst->fpb_Objects[OBJNDX_Button_HideFind], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_HideFindGroup]); // Call hook everytime the contents of StringFindFileType changes DoMethod(inst->fpb_Objects[OBJNDX_String_FindFileType], MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_String_FindFileType], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_IncrementalFindFileType]); // Call FindNextFileTypeHook when "Next" button is clicked DoMethod(inst->fpb_Objects[OBJNDX_Button_FindNextFileType], MUIM_Notify, MUIA_Pressed, FALSE, inst->fpb_Objects[OBJNDX_Button_FindNextFileType], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_IncrementalFindNextFileType]); // Call FindPrevFileTypeHook when "Prev" button is clicked DoMethod(inst->fpb_Objects[OBJNDX_Button_FindPrevFileType], MUIM_Notify, MUIA_Pressed, FALSE, inst->fpb_Objects[OBJNDX_Button_FindPrevFileType], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_IncrementalFindPrevFileType]); // call hook on double click into "Add Method" popup listview DoMethod(inst->fpb_Objects[OBJNDX_NListview_FileTypes_Methods_Add], MUIM_Notify, MUIA_Listview_DoubleClick, TRUE, inst->fpb_Objects[OBJNDX_Popobject_FileTypes_Methods_Add], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_AddFileTypesMethod]); // call hook when the "Learn" button is pressed DoMethod(inst->fpb_Objects[OBJNDX_Button_FileTypes_Actions_Learn], MUIM_Notify, MUIA_Pressed, FALSE, inst->fpb_Objects[OBJNDX_Button_FileTypes_Actions_Learn], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_Learn_FileType] ); // call hook everytime the filetype actions list is drag-drop sorted DoMethod(inst->fpb_Objects[OBJNDX_NList_FileTypes_Actions], MUIM_Notify, MUIA_NList_DragSortInsert, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_NList_FileTypes_Actions], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_DragDropSort_FileTypesAction] ); // call hook everytime a new filetype is added DoMethod(inst->fpb_Objects[OBJNDX_Button_FileTypes_Add], MUIM_Notify, MUIA_Pressed, FALSE, inst->fpb_Objects[OBJNDX_Button_FileTypes_Add], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_AddFileType] ); // call hook everytime a new filetype is removed DoMethod(inst->fpb_Objects[OBJNDX_Button_FileTypes_Remove], MUIM_Notify, MUIA_Pressed, FALSE, inst->fpb_Objects[OBJNDX_Button_FileTypes_Remove], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_RemoveFileType] ); // call hook everytime a new filetype is selected DoMethod(inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIM_Notify, MUIA_NListtree_Active, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_NListtree_FileTypes], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_SelectFileTypesEntry] ); // call hook everytime a new filetype is renamed DoMethod(inst->fpb_Objects[OBJNDX_String_FileTypes_Name], MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_String_FileTypes_Name], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_RenameFileType] ); // call hook everytime a new filetypes action is removed DoMethod(inst->fpb_Objects[OBJNDX_Button_FileTypes_Actions_Remove], MUIM_Notify, MUIA_Pressed, FALSE, inst->fpb_Objects[OBJNDX_Button_FileTypes_Actions_Remove], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_RemoveFileTypeAction] ); // setup hook if "create new" button is presseed for filetypes icon DoMethod(inst->fpb_Objects[OBJNDX_Button_FileTypes_CreateIcon], MUIM_Notify, MUIA_Pressed, FALSE, inst->fpb_Objects[OBJNDX_Button_FileTypes_CreateIcon], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_CreateNewFileTypesIcon] ); // setup hook if filetypes icon is clicked DoMethod(inst->fpb_Objects[OBJNDX_IconObjectMCC_FileTypes_Icon], MUIM_Notify, MUIA_Pressed, FALSE, inst->fpb_Objects[OBJNDX_IconObjectMCC_FileTypes_Icon], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_EditFileTypesIcon] ); // call hook if filetypes action MATCH attributes are changed DoMethod(inst->fpb_Objects[OBJNDX_String_Filetypes_Actions_Match_Offset], MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_String_Filetypes_Actions_Match_Match], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionMatchOffset] ); DoMethod(inst->fpb_Objects[OBJNDX_Checkmark_FileTypes_Action_Match_Case], MUIM_Notify, MUIA_Selected, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Checkmark_FileTypes_Action_Match_Case], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionMatchCase] ); DoMethod(inst->fpb_Objects[OBJNDX_String_Filetypes_Actions_Match_Match], MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_String_Filetypes_Actions_Match_Match], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionMatchMatch] ); // call hook if filetypes action SEARCH attributes are changed DoMethod(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_Search_Search], MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_String_FileTypes_Action_Search_Search], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionSearchSearch] ); DoMethod(inst->fpb_Objects[OBJNDX_Checkmark_FileTypes_Action_Search_Case], MUIM_Notify, MUIA_Selected, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Checkmark_FileTypes_Action_Search_Case], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionSearchCase] ); DoMethod(inst->fpb_Objects[OBJNDX_Checkmark_FileTypes_Action_Search_SkipSpaces], MUIM_Notify, MUIA_Selected, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Checkmark_FileTypes_Action_Search_SkipSpaces], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionSearchSkipSpaces] ); // call hook if filetypes action FILESIZE attributes are changed DoMethod(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_Filesize_Filesize], MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_String_FileTypes_Action_Filesize_Filesize], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionFilesize] ); // call hook if filetypes action PATTERN attributes are changed DoMethod(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_Pattern_Pattern], MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_String_FileTypes_Action_Pattern_Pattern], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionPattern] ); // call hook if filetypes action DOSDEVICE attributes are changed DoMethod(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_DosDevice_Pattern], MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_String_FileTypes_Action_DosDevice_Pattern], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionDosDevice] ); // call hook if filetypes action DEVICENAME attributes are changed DoMethod(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_DeviceName_Pattern], MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_String_FileTypes_Action_DeviceName_Pattern], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionDeviceName] ); // call hook if filetypes action CONTENTS attributes are changed DoMethod(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_Contents_Pattern], MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_String_FileTypes_Action_Contents_Pattern], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionContents] ); // call hook if filetypes action DOSTYPE attributes are changed DoMethod(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_DosType_Pattern], MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_String_FileTypes_Action_DosType_Pattern], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionDosType] ); // call hook if filetypes action MINSIZEMB attributes are changed DoMethod(inst->fpb_Objects[OBJNDX_String_FileTypes_Action_MinSizeMB_MinSize], MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_String_FileTypes_Action_MinSizeMB_MinSize], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionMinSize] ); // call hook if filetypes action PROTECTION attributes are changed DoMethod(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_R], MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_R], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionProtection] ); DoMethod(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_W], MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_W], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionProtection] ); DoMethod(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_E], MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_E], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionProtection] ); DoMethod(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_D], MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_D], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionProtection] ); DoMethod(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_S], MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_S], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionProtection] ); DoMethod(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_P], MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_P], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionProtection] ); DoMethod(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_A], MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_A], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionProtection] ); DoMethod(inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_H], MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Cycle_Filetypes_Protection_H], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangedFileTypesActionProtection] ); // call hook everytime a filetypes action entry is selected DoMethod(inst->fpb_Objects[OBJNDX_NListview_FileTypes_Methods], MUIM_Notify, MUIA_NList_Active, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Group_Main], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_SelectFileTypesActionEntry] ); DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_Notify, MUIA_NListtree_Active, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Group_Main], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_SelectEntry] ); DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_Notify, MUIA_NList_Active, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_Group_Main], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_SelectAttribute] ); DoMethod(inst->fpb_Objects[OBJNDX_ButtonRemoveEntry], MUIM_Notify, MUIA_Pressed, FALSE, inst->fpb_Objects[OBJNDX_Group_Main], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_RemoveEntry]); DoMethod(inst->fpb_Objects[OBJNDX_ButtonRemoveAttribute], MUIM_Notify, MUIA_Pressed, FALSE, inst->fpb_Objects[OBJNDX_Group_Main], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_RemoveAttribute]); // Edit Attribute by pressing "Edit" button of double-clicking attribute in list DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_Notify, MUIA_Listview_DoubleClick, TRUE, inst->fpb_Objects[OBJNDX_Group_Main], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_EditAttribute] ); DoMethod(inst->fpb_Objects[OBJNDX_ButtonEditAttribute], MUIM_Notify, MUIA_Pressed, FALSE, inst->fpb_Objects[OBJNDX_Group_Main], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_EditAttribute]); // initially display icon for "project" filetype // "Create new" icon is disabled if "def_project" icon is present set(inst->fpb_Objects[OBJNDX_Button_FileTypes_CreateIcon], MUIA_Disabled, DisplayFileTypesIcon(inst, "project")); return inst->fpb_Objects[OBJNDX_Group_Main]; } static Object **CreateSubWindows(Class *cl, Object *o) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) INST_DATA(cl, o); d1(KPrintF(__FILE__ "/%s/%ld: START\n", __FUNC__, __LINE__)); inst->fpb_SubWindows[0] = inst->fpb_Objects[OBJNDX_WIN_EditAttribute] = WindowObject, MUIA_Window_Title, (IPTR)GetLocString(MSGID_EDITATTRIBUTE_WINDOWTITLE), MUIA_Window_ID, MAKE_ID('F','T','P','R'), WindowContents, (IPTR)(VGroup, Child, (IPTR)(TextObject, MUIA_Text_PreParse, (IPTR)MUIX_C, MUIA_Text_Contents, (IPTR)GetLocString(MSGID_EDITATTRIBUTE_TITLE), End), // TextObject Child, (IPTR)(HGroup, TextFrame, Child, (IPTR)HVSpace, Child, (IPTR)(inst->fpb_Objects[OBJNDX_Text_AttributeName] = TextObject, MUIA_HorizWeight, 200, MUIA_Text_PreParse, (IPTR)MUIX_C, MUIA_Text_Contents, (IPTR)"xxxxxxxxxxxxxxxxxxxxxxxxxxx", MUIA_Text_SetMin, TRUE, End), // TextObject Child, (IPTR)HVSpace, End), //HGroup Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_AttributeValue] = VGroup, MUIA_ShowMe, FALSE, Child, (IPTR)(inst->fpb_Objects[OBJNDX_String_AttributeValue] = StringObject, MUIA_CycleChain, TRUE, StringFrame, MUIA_String_Contents, (IPTR)"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", MUIA_String_AdvanceOnCR, TRUE, MUIA_Text_SetMin, TRUE, End), // StringObject End), //VGroup Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_AttributeAslPath] = VGroup, MUIA_ShowMe, FALSE, Child, (IPTR)(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectAslPath] = PopaslObject, MUIA_CycleChain, TRUE, MUIA_Popasl_StartHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_EditAttributePopAslPathStartHook], MUIA_Popasl_Type, ASL_FileRequest, MUIA_String_AdvanceOnCR, TRUE, MUIA_Popstring_String, (IPTR)KeyString((IPTR)"", MAX_ATTRVALUE, '\0'), MUIA_Popstring_Button, (IPTR)PopButton(MUII_PopDrawer), End), //PopaslObject End), //VGroup Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_AttributeAslFile] = HGroup, MUIA_ShowMe, FALSE, Child, (IPTR)(inst->fpb_Objects[OBJNDX_DtPic_AttributeSelectAslFile] = DataTypesImageObject, MUIA_ScaDtpic_Name, (IPTR) "", MUIA_ScaDtpic_FailIfUnavailable, FALSE, End), //DataTypesMCCObject Child, (IPTR)(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectAslFile] = PopaslObject, MUIA_CycleChain, TRUE, MUIA_Popasl_StartHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_EditAttributePopAslFileStartHook], MUIA_Popasl_Type, ASL_FileRequest, MUIA_Popstring_String, (IPTR)KeyString((IPTR)"", MAX_ATTRVALUE, '\0'), MUIA_Popstring_Button, (IPTR)PopButton(MUII_PopFile), End), //PopaslObject End), //VGroup Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_AttributeAslFont] = VGroup, MUIA_ShowMe, FALSE, Child, (IPTR)(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectAslFont] = PopaslObject, MUIA_CycleChain, TRUE, TAG_IGNORE, 993, MUIA_Popasl_Type, ASL_FontRequest, MUIA_Popstring_String, (IPTR)KeyString((IPTR)"", MAX_ATTRVALUE, '\0'), MUIA_Popstring_Button, (IPTR)PopButton(MUII_PopUp), End), //PopaslObject Child, (IPTR)(inst->fpb_Objects[OBJNDX_AslFont_Sample] = FontSampleObject, TextFrame, MUIA_Background, MUII_TextBack, MUIA_FontSample_DemoString, (IPTR) GetLocString(MSGID_TTFONTSPAGE_SAMPLETEXT), MUIA_FontSample_Antialias, inst->fpb_TTfAntialias, MUIA_FontSample_Gamma, inst->fpb_TTfGamma, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_TTFONTSPAGE_SCREENFONT_SAMPLETEXT_SHORTHELP), End), //FontSampleMCCObject End), //VGroup Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_AttributeTTFont] = VGroup, MUIA_ShowMe, FALSE, Child, (IPTR)(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectTTFont] = PopstringObject, MUIA_CycleChain, TRUE, TAG_IGNORE, 994, MUIA_Popstring_String, (IPTR)KeyString((IPTR)"", MAX_ATTRVALUE, '\0'), MUIA_String_AdvanceOnCR, TRUE, MUIA_Popstring_Button, (IPTR)PopButton(MUII_PopUp), MUIA_Popstring_OpenHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_EditAttributeTTFontOpen], MUIA_Popstring_CloseHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_EditAttributeTTFontClose], End), //PopstringObject Child, (IPTR)(inst->fpb_Objects[OBJNDX_TTFont_Sample] = FontSampleObject, TextFrame, MUIA_Background, MUII_TextBack, MUIA_FontSample_Antialias, inst->fpb_TTfAntialias, MUIA_FontSample_Gamma, inst->fpb_TTfGamma, MUIA_FontSample_DemoString, (IPTR) GetLocString(MSGID_TTFONTSPAGE_SAMPLETEXT), MUIA_ShortHelp, (IPTR) GetLocString(MSGID_TTFONTSPAGE_SCREENFONT_SAMPLETEXT_SHORTHELP), End), //FontSampleMCCObject End), //VGroup Child, (IPTR)(inst->fpb_Objects[OBJNDX_Group_AttributeSelectValue] = VGroup, MUIA_ShowMe, FALSE, Child, (IPTR)(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectValue] = PopobjectObject, MUIA_CycleChain, TRUE, MUIA_Popstring_Button, (IPTR)PopButton(MUII_PopUp), MUIA_Popstring_String, (IPTR)KeyString((IPTR)"", MAX_ATTRVALUE, '\0'), MUIA_Popobject_Object, (IPTR)(inst->fpb_Objects[OBJNDX_Listview_AttributeSelectValue] = NListviewObject, MUIA_NListview_NList, (IPTR)(inst->fpb_Objects[OBJNDX_List_AttributeSelectValue] = NListObject, InputListFrame, MUIA_Background, MUII_ListBack, MUIA_NList_ConstructHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_EditAttributeListConstruct], MUIA_NList_DestructHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_EditAttributeListDestruct], MUIA_NList_DisplayHook2, (IPTR)&inst->fpb_Hooks[HOOKNDX_EditAttributeListDisplay], MUIA_NList_AdjustWidth, TRUE, End), //NListObject End), //NListviewObject End), //PopobjectObject End), //VGroup Child, (IPTR)(ColGroup(2), Child, (IPTR)(inst->fpb_Objects[OBJNDX_ButtonChangeAttribute] = KeyButtonHelp(MSGID_BUTTON_CHANGE_ATTRIBUTE, ' ', MSGID_SHORTHELP_BUTTON_CHANGE_ATTRIBUTE)), Child, (IPTR)(inst->fpb_Objects[OBJNDX_ButtonKeepAttribute] = KeyButtonHelp(MSGID_BUTTON_KEEP_ATTRIBUTE, ' ', MSGID_SHORTHELP_BUTTON_KEEP_ATTRIBUTE)), End), //ColGroup End), //VGroup End; d1(KPrintF(__FILE__ "/%s/%ld: fpb_SubWindows[0]=%08lx\n", __FUNC__, __LINE__, inst->fpb_SubWindows[0])); inst->fpb_SubWindows[1] = NULL; set(inst->fpb_Objects[OBJNDX_Group_AttributeTTFont], MUIA_Disabled, NULL == TTEngineBase); // Selecting a new ASL font updates Asl font sample DoMethod(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectAslFont], MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_AslFont_Sample], 3, MUIM_Set, MUIA_FontSample_StdFontDesc, MUIV_TriggerValue); // Pressing "change" button in "edit attribute" window calls hook DoMethod(inst->fpb_Objects[OBJNDX_ButtonChangeAttribute], MUIM_Notify, MUIA_Pressed, FALSE, inst->fpb_Objects[OBJNDX_Group_Main], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_ChangeAttribute]); // Pressing "cancel" button in "edit attribute" window closes window DoMethod(inst->fpb_Objects[OBJNDX_ButtonKeepAttribute], MUIM_Notify, MUIA_Pressed, FALSE, inst->fpb_Objects[OBJNDX_WIN_EditAttribute], 3, MUIM_Set, MUIA_Window_Open, FALSE); // Doubleclick in "edit attribute" selection listview calls hook DoMethod(inst->fpb_Objects[OBJNDX_Listview_AttributeSelectValue], MUIM_Notify, MUIA_Listview_DoubleClick, TRUE, inst->fpb_Objects[OBJNDX_Pop_AttributeSelectValue], 2, MUIM_CallHook, (IPTR)&inst->fpb_Hooks[HOOKNDX_SelectAttributeValue]); // Update sample image everytime the image file string changes DoMethod(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectAslFile], MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, inst->fpb_Objects[OBJNDX_DtPic_AttributeSelectAslFile], 3, MUIM_Set, MUIA_ScaDtpic_Name, MUIV_TriggerValue); return inst->fpb_SubWindows; } static Object *CreatePrefsImage(void) { #include "FileTypesPrefsImage.h" Object *img; // First try to load datatypes image from THEME: tree img = DataTypesImageObject, MUIA_ScaDtpic_Name, (IPTR) "THEME:prefs/plugins/filetypes", MUIA_ScaDtpic_FailIfUnavailable, TRUE, End; //DataTypesMCCObject if (NULL == img) img = IMG(FileTypes, FILETYPES); // use built-in fallback image return img; } static void InitHooks(struct FileTypesPrefsInst *inst) { ULONG n; for (n=0; n<HOOKNDX_MAX; n++) { inst->fpb_Hooks[n] = FileTypesPrefsHooks[n]; inst->fpb_Hooks[n].h_Data = inst; } } static BOOL OpenLibraries(void) { DOSBase = (APTR) OpenLibrary( "dos.library", 39 ); if (NULL == DOSBase) return FALSE; #ifdef __amigaos4__ IDOS = (struct DOSIFace *)GetInterface((struct Library *)DOSBase, "main", 1, NULL); if (NULL == IDOS) return FALSE; #endif DiskfontBase = OpenLibrary("diskfont.library", 39); if (NULL == DiskfontBase) return FALSE; #ifdef __amigaos4__ IDiskfont = (struct DiskfontIFace *)GetInterface((struct Library *)DiskfontBase, "main", 1, NULL); if (NULL == IDiskfont) return FALSE; #endif IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library", 39); if (NULL == IntuitionBase) return FALSE; #ifdef __amigaos4__ IIntuition = (struct IntuitionIFace *)GetInterface((struct Library *)IntuitionBase, "main", 1, NULL); if (NULL == IIntuition) return FALSE; #endif MUIMasterBase = OpenLibrary("zune.library", 0); if (NULL == MUIMasterBase) MUIMasterBase = OpenLibrary(MUIMASTER_NAME, MUIMASTER_VMIN-1); if (NULL == MUIMasterBase) return FALSE; #ifdef __amigaos4__ IMUIMaster = (struct MUIMasterIFace *)GetInterface((struct Library *)MUIMasterBase, "main", 1, NULL); if (NULL == IMUIMaster) return FALSE; #endif IFFParseBase = OpenLibrary("iffparse.library", 36); if (NULL == IFFParseBase) return FALSE; #ifdef __amigaos4__ IIFFParse = (struct IFFParseIFace *)GetInterface((struct Library *)IFFParseBase, "main", 1, NULL); if (NULL == IIFFParse) return FALSE; #endif IconBase = OpenLibrary("icon.library", 0); if (NULL == IconBase) return FALSE; #ifdef __amigaos4__ IIcon = (struct IconIFace *)GetInterface((struct Library *)IconBase, "main", 1, NULL); if (NULL == IIcon) return FALSE; #endif IconobjectBase = OpenLibrary("iconobject.library", 0); if (NULL == IconobjectBase) return FALSE; #ifdef __amigaos4__ IIconobject = (struct IconobjectIFace *)GetInterface((struct Library *)IconobjectBase, "main", 1, NULL); if (NULL == IIconobject) return FALSE; #endif GfxBase = (struct GfxBase *) OpenLibrary("graphics.library", 39); if (NULL == GfxBase) return FALSE; #ifdef __amigaos4__ IGraphics = (struct GraphicsIFace *)GetInterface((struct Library *)GfxBase, "main", 1, NULL); if (NULL == IGraphics) return FALSE; #endif WorkbenchBase = OpenLibrary("workbench.library", 39); if (NULL == WorkbenchBase) return FALSE; #ifdef __amigaos4__ IWorkbench = (struct WorkbenchIFace *)GetInterface((struct Library *)WorkbenchBase, "main", 1, NULL); if (NULL == IWorkbench) return FALSE; #endif UtilityBase = (T_UTILITYBASE) OpenLibrary(UTILITYNAME, 39); if (NULL == UtilityBase) return FALSE; #ifdef __amigaos4__ IUtility = (struct UtilityIFace *)GetInterface((struct Library *)UtilityBase, "main", 1, NULL); if (NULL == IUtility) return FALSE; #endif PreferencesBase = OpenLibrary("preferences.library", 39); if (NULL == PreferencesBase) return FALSE; #ifdef __amigaos4__ IPreferences = (struct PreferencesIFace *)GetInterface((struct Library *)PreferencesBase, "main", 1, NULL); if (NULL == IPreferences) return FALSE; #endif DataTypesBase = OpenLibrary("datatypes.library", 39); if (NULL == DataTypesBase) return FALSE; #ifdef __amigaos4__ IDataTypes = (struct DataTypesIFace *)GetInterface((struct Library *)DataTypesBase, "main", 1, NULL); if (NULL == IDataTypes) return FALSE; #endif // TTEngineBase is optional TTEngineBase = OpenLibrary(TTENGINENAME, 6); #ifdef __amigaos4__ if (TTEngineBase) ITTEngine = (struct TTEngineIFace *)GetInterface(TTEngineBase, "main", 1, NULL); #endif #ifdef __amigaos4__ NewlibBase = OpenLibrary("newlib.library", 0); if (NULL == NewlibBase) return FALSE; INewlib = GetInterface(NewlibBase, "main", 1, NULL); if (NULL == INewlib) return FALSE; #endif LocaleBase = (T_LOCALEBASE) OpenLibrary("locale.library", 39); #ifdef __amigaos4__ if (LocaleBase) ILocale = (struct LocaleIFace *)GetInterface((struct Library *)LocaleBase, "main", 1, NULL); #endif return TRUE; } static void CloseLibraries(void) { #ifdef __amigaos4__ if (INewlib) { DropInterface(INewlib); INewlib = NULL; } if (NewlibBase) { CloseLibrary(NewlibBase); NewlibBase = NULL; } if (IDataTypes) { DropInterface((struct Interface *)IDataTypes); IDataTypes = NULL; } #endif if (DataTypesBase) { CloseLibrary(DataTypesBase); DataTypesBase = NULL; } #ifdef __amigaos4__ if (ILocale) { DropInterface((struct Interface *)ILocale); ILocale = NULL; } #endif if (LocaleBase) { CloseLibrary((struct Library *) LocaleBase); LocaleBase = NULL; } #ifdef __amigaos4__ if (ITTEngine) { DropInterface((struct Interface *)ITTEngine); ITTEngine = NULL; } #endif if (TTEngineBase) { CloseLibrary(TTEngineBase); TTEngineBase = NULL; } #ifdef __amigaos4__ if (IPreferences) { DropInterface((struct Interface *)IPreferences); IPreferences = NULL; } #endif if (PreferencesBase) { CloseLibrary(PreferencesBase); PreferencesBase = NULL; } #ifdef __amigaos4__ if (IIconobject) { DropInterface((struct Interface *)IIconobject); IIconobject = NULL; } #endif if (IconobjectBase) { CloseLibrary(IconobjectBase); IconobjectBase = NULL; } #ifdef __amigaos4__ if (IUtility) { DropInterface((struct Interface *)IUtility); IUtility = NULL; } #endif if (UtilityBase) { CloseLibrary((struct Library *) UtilityBase); UtilityBase = NULL; } #ifdef __amigaos4__ if (IWorkbench) { DropInterface((struct Interface *)IWorkbench); IWorkbench = NULL; } #endif if (WorkbenchBase) { CloseLibrary(WorkbenchBase); WorkbenchBase = NULL; } #ifdef __amigaos4__ if (IGraphics) { DropInterface((struct Interface *)IGraphics); IGraphics = NULL; } #endif if (GfxBase) { CloseLibrary((struct Library *) GfxBase); GfxBase = NULL; } #ifdef __amigaos4__ if (IIcon) { DropInterface((struct Interface *)IIcon); IIcon = NULL; } #endif if (IconBase) { CloseLibrary(IconBase); IconBase = NULL; } #ifdef __amigaos4__ if (IIFFParse) { DropInterface((struct Interface *)IIFFParse); IIFFParse = NULL; } #endif if (IFFParseBase) { CloseLibrary(IFFParseBase); IFFParseBase = NULL; } #ifdef __amigaos4__ if (IMUIMaster) { DropInterface((struct Interface *)IMUIMaster); IMUIMaster = NULL; } #endif if (MUIMasterBase) { CloseLibrary(MUIMasterBase); MUIMasterBase = NULL; } #ifdef __amigaos4__ if (IIntuition) { DropInterface((struct Interface *)IIntuition); IIntuition = NULL; } #endif if (IntuitionBase) { CloseLibrary((struct Library *) IntuitionBase); IntuitionBase = NULL; } #ifdef __amigaos4__ if (IDiskfont) { DropInterface((struct Interface *)IDiskfont); IDiskfont = NULL; } #endif if (DiskfontBase) { CloseLibrary(DiskfontBase); DiskfontBase = NULL; } #ifdef __amigaos4__ if (IDOS) { DropInterface((struct Interface *)IDOS); IDOS = NULL; } #endif if (DOSBase) { CloseLibrary((struct Library *) DOSBase); DOSBase = NULL; } } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT TreeConstructFunc(struct Hook *hook, APTR obj, struct MUIP_NListtree_ConstructMessage *ltcm) { struct FileTypesListEntry *fte = AllocPooled(ltcm->MemPool, sizeof(struct FileTypesListEntry)); d1(kprintf(__FILE__ "/%s/%ld: obj=%08lx ltcm=%08lx memPool=%08lx UserData=%08lx\n", \ __FUNC__, __LINE__, obj, ltcm, ltcm->MemPool, ltcm->UserData)); d1(kprintf(__FILE__ "/%s/%ld: fte=%08lx\n", __FUNC__, __LINE__, fte)); if (fte) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; char UnSelIconName[MAX_ATTRVALUE]; NewList(&fte->ftle_AttributesList); fte->ftle_FileFound = FALSE; fte->ftle_Changed = FALSE; GetAttributeValueString(FindAttribute(fte, ATTRTYPE_UnselIconName), UnSelIconName, sizeof(UnSelIconName)); if (strlen(UnSelIconName) > 0) { fte->fte_ImageObject = DataTypesImageObject, 0, MUIA_ScaDtpic_Name, (IPTR) UnSelIconName, MUIA_ScaDtpic_FailIfUnavailable, TRUE, End; //DataTypesMCCObject if (fte->fte_ImageObject) { fte->fte_ImageIndex = ++inst->fpb_MenuImageIndex; DoMethod(obj, MUIM_NList_UseImage, fte->fte_ImageObject, fte->fte_ImageIndex, 0); } else { fte->fte_ImageIndex = 0; } } } return fte; } static SAVEDS(void) INTERRUPT TreeDestructFunc(struct Hook *hook, APTR obj, struct MUIP_NListtree_DestructMessage *ltdm) { struct FileTypesListEntry *fte = (struct FileTypesListEntry *) ltdm->UserData; d1(kprintf(__FILE__ "/%s/%ld: mle=%08lx\n", __FUNC__, __LINE__, ltdm->UserData)); if (fte) { CleanupAttributes(&fte->ftle_AttributesList); if (fte->fte_ImageObject) { DoMethod(obj, MUIM_NList_UseImage, NULL, fte->fte_ImageIndex, 0); MUI_DisposeObject(fte->fte_ImageObject); fte->fte_ImageObject = NULL; } } FreePooled(ltdm->MemPool, ltdm->UserData, sizeof(struct FileTypesListEntry)); ltdm->UserData = NULL; } static SAVEDS(ULONG) INTERRUPT TreeDisplayFunc(struct Hook *hook, APTR obj, struct MUIP_NListtree_DisplayMessage *ltdm) { struct FileTypesListEntry *fte = (struct FileTypesListEntry *) ltdm->TreeNode->tn_User; d1(kprintf(__FILE__ "/%s/%ld: <%s> fte=%08lx\n", __FUNC__, __LINE__, ltdm->TreeNode->tn_Name, fte)); if (fte) { const struct FtAttribute *fta; char Line[MAX_ATTRVALUE]; // indicate changed entries if (fte->ftle_Changed) ltdm->Preparse[0] = MUIX_PH; else ltdm->Preparse[0] = MUIX_PT; switch (fte->ftle_EntryType) { case ENTRYTYPE_ToolTip_Member: fta = FindAttribute(fte, ATTRTYPE_MemberHideString); if (fta) { GetAttributeValueString(fta, Line, sizeof(Line)); snprintf(fte->ftle_NameBuffer, sizeof(fte->ftle_NameBuffer), "%s" MUIX_I " %s %s" MUIX_N, ltdm->TreeNode->tn_Name, GetAttributeName(fta->fta_Type), Line); } else { snprintf(fte->ftle_NameBuffer, sizeof(fte->ftle_NameBuffer), "%s", ltdm->TreeNode->tn_Name); } ltdm->Array[0] = fte->ftle_NameBuffer; break; case ENTRYTYPE_ToolTip_String: fta = FindAttribute(fte, ATTRTYPE_StringId); if (NULL == fta) fta = FindAttribute(fte, ATTRTYPE_StringText); if (NULL == fta) fta = FindAttribute(fte, ATTRTYPE_StringSrc); GetAttributeValueString(fta, Line, sizeof(Line)); snprintf(fte->ftle_NameBuffer, sizeof(fte->ftle_NameBuffer), "%s" MUIX_I " %s %.*s" MUIX_N, ltdm->TreeNode->tn_Name, GetAttributeName(fta->fta_Type), MAX_FTE_NAME, Line); ltdm->Array[0] = fte->ftle_NameBuffer; break; case ENTRYTYPE_ToolTip_DtImage: GetAttributeValueString(FindAttribute(fte, ATTRTYPE_DtImageName), Line, sizeof(Line)); snprintf(fte->ftle_NameBuffer, sizeof(fte->ftle_NameBuffer), "%s" MUIX_I " FILENAME %.*s" MUIX_N, ltdm->TreeNode->tn_Name, MAX_FTE_NAME, Line); ltdm->Array[0] = fte->ftle_NameBuffer; break; case ENTRYTYPE_PopupMenu_InternalCmd: case ENTRYTYPE_PopupMenu_WbCmd: case ENTRYTYPE_PopupMenu_ARexxCmd: case ENTRYTYPE_PopupMenu_CliCmd: case ENTRYTYPE_PopupMenu_PluginCmd: case ENTRYTYPE_PopupMenu_IconWindowCmd: GetAttributeValueString(FindAttribute(fte, ATTRTYPE_CommandName), Line, sizeof(Line)); snprintf(fte->ftle_NameBuffer, sizeof(fte->ftle_NameBuffer), "%s" MUIX_I " NAME %.*s" MUIX_N, ltdm->TreeNode->tn_Name, MAX_FTE_NAME, Line); ltdm->Array[0] = fte->ftle_NameBuffer; break; case ENTRYTYPE_PopupMenu_SubMenu: GetAttributeValueString(FindAttribute(fte, ATTRTYPE_MenuItemName), Line, sizeof(Line)); if (fte->fte_ImageObject) { snprintf(fte->ftle_NameBuffer, sizeof(fte->ftle_NameBuffer), "\33o[%ld]" "%s" MUIX_I " NAME %.*s" MUIX_N, (long) fte->fte_ImageIndex, ltdm->TreeNode->tn_Name, MAX_FTE_NAME, Line); } else { snprintf(fte->ftle_NameBuffer, sizeof(fte->ftle_NameBuffer), "%s" MUIX_I " NAME %.*s" MUIX_N, ltdm->TreeNode->tn_Name, MAX_FTE_NAME, Line); } ltdm->Array[0] = fte->ftle_NameBuffer; break; case ENTRYTYPE_ToolTip_Group: GetAttributeValueString(FindAttribute(fte, ATTRTYPE_GroupOrientation), Line, sizeof(Line)); snprintf(fte->ftle_NameBuffer, sizeof(fte->ftle_NameBuffer), "%s" MUIX_I " ORIENTATION %.*s" MUIX_N, ltdm->TreeNode->tn_Name, MAX_FTE_NAME, Line); ltdm->Array[0] = fte->ftle_NameBuffer; break; case ENTRYTYPE_PopupMenu_MenuItem: GetAttributeValueString(FindAttribute(fte, ATTRTYPE_MenuItemName), Line, sizeof(Line)); if (FindAttribute(fte, ATTRTYPE_MenuDefaultAction)) { if (fte->fte_ImageObject) { snprintf(fte->ftle_NameBuffer, sizeof(fte->ftle_NameBuffer), "\33o[%ld]" MUIX_B "%s" MUIX_I " NAME %.*s" MUIX_N, (IPTR)fte->fte_ImageIndex, ltdm->TreeNode->tn_Name, MAX_FTE_NAME, Line); } else { snprintf(fte->ftle_NameBuffer, sizeof(fte->ftle_NameBuffer), MUIX_B "%s" MUIX_I " NAME %.*s" MUIX_N, ltdm->TreeNode->tn_Name, MAX_FTE_NAME, Line); } } else { if (fte->fte_ImageObject) { snprintf(fte->ftle_NameBuffer, sizeof(fte->ftle_NameBuffer), "\33o[%ld]%s" MUIX_I " NAME %.*s" MUIX_N, (IPTR)fte->fte_ImageIndex, ltdm->TreeNode->tn_Name, MAX_FTE_NAME, Line); } else { snprintf(fte->ftle_NameBuffer, sizeof(fte->ftle_NameBuffer), "%s" MUIX_I " NAME %.*s" MUIX_N, ltdm->TreeNode->tn_Name, MAX_FTE_NAME, Line); } } ltdm->Array[0] = fte->ftle_NameBuffer; break; default: ltdm->Array[0] = ltdm->TreeNode->tn_Name; break; } } return 0; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT AttrConstructFunc(struct Hook *hook, APTR obj, struct NList_ConstructMessage *ltcm) { const struct FtAttribute *fta = (const struct FtAttribute *) ltcm->entry; struct AttrListEntry *ale = (struct AttrListEntry *) AllocPooled(ltcm->pool, sizeof(struct AttrListEntry) + fta->fta_Length); d1(kprintf(__FILE__ "/%s/%ld: obj=%08lx ltcm=%08lx memPool=%08lx UserData=%08lx\n", \ __FUNC__, __LINE__, obj, ltcm, ltcm->MemPool, ltcm->entry)); d1(kprintf(__FILE__ "/%s/%ld: fta=%08lx\n", __FUNC__, __LINE__, ale)); if (ale) { memcpy(&ale->ale_Attribute, fta, sizeof(struct FtAttribute) + fta->fta_Length); } return ale; } static SAVEDS(void) INTERRUPT AttrDestructFunc(struct Hook *hook, APTR obj, struct NList_DestructMessage *ltdm) { struct AttrListEntry *ale = (struct AttrListEntry *) ltdm->entry; d1(kprintf(__FILE__ "/%s/%ld: START fta=%08lx\n", __FUNC__, __LINE__, ale)); if (ale) { FreePooled(ltdm->pool, ale, sizeof(struct AttrListEntry) + ale->ale_Attribute.fta_Length); ltdm->entry = NULL; } d1(kprintf(__FILE__ "/%s/%ld: END fta=%08lx\n", __FUNC__, __LINE__, ale)); } static SAVEDS(ULONG) INTERRUPT AttrDisplayFunc(struct Hook *hook, APTR obj, struct NList_DisplayMessage *ltdm) { struct AttrListEntry *ale = (struct AttrListEntry *) ltdm->entry; d1(kprintf(__FILE__ "/%s/%ld: <%s> fta=%08lx\n", __FUNC__, __LINE__, ltdm->TreeNode->tn_Name, fta)); if (ale) { ltdm->preparses[0] = ""; ltdm->preparses[1] = ""; ltdm->strings[0] = (STRPTR) GetAttributeName(ale->ale_Attribute.fta_Type); ltdm->strings[1] = (STRPTR) GetAttributeValueString(&ale->ale_Attribute, ale->ale_ValueString, sizeof(ale->ale_ValueString)); } else { // display titles ltdm->preparses[0] = "\033c"; ltdm->preparses[1] = "\033c"; ltdm->strings[0] = GetLocString(MSGID_ATTRCOLUMNTITLE_NAME); ltdm->strings[1] = GetLocString(MSGID_ATTRCOLUMNTITLE_VALUE); } return 0; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT AddEntryConstructFunc(struct Hook *hook, APTR obj, struct NList_ConstructMessage *ltcm) { struct AddEntryListEntry *ael = (struct AddEntryListEntry *) AllocPooled(ltcm->pool, sizeof(struct AddEntryListEntry)); d1(kprintf(__FILE__ "/%s/%ld: obj=%08lx ltcm=%08lx memPool=%08lx UserData=%08lx\n", \ __FUNC__, __LINE__, obj, ltcm, ltcm->pool, ltcm->entry)); d1(kprintf(__FILE__ "/%s/%ld: ael=%08lx\n", __FUNC__, __LINE__, ael)); if (ael) { ael->ael_EntryType = (enum FtEntryType) ltcm->entry; d1(kprintf(__FILE__ "/%s/%ld: ael_EntryType=%lu\n", __FUNC__, __LINE__, ael->ael_EntryType)); } return ael; } static SAVEDS(void) INTERRUPT AddEntryDestructFunc(struct Hook *hook, APTR obj, struct NList_DestructMessage *ltdm) { struct AddEntryListEntry *ael = (struct AddEntryListEntry *) ltdm->entry; d1(kprintf(__FILE__ "/%s/%ld: ael=%08lx\n", __FUNC__, __LINE__, ael)); if (ael) { FreePooled(ltdm->pool, ael, sizeof(struct AddEntryListEntry)); ltdm->entry = NULL; } } static SAVEDS(ULONG) INTERRUPT AddEntryDisplayFunc(struct Hook *hook, APTR obj, struct NList_DisplayMessage *ltdm) { struct AddEntryListEntry *ael = (struct AddEntryListEntry *) ltdm->entry; d1(kprintf(__FILE__ "/%s/%ld: ael=%08lx\n", __FUNC__, __LINE__, ael)); if (ael) { ltdm->preparses[0] = ""; ltdm->strings[0] = (STRPTR) GetNameFromEntryType(ael->ael_EntryType); } else { // display titles ltdm->preparses[0] = ""; ltdm->strings[0] = ""; } return 0; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT AddAttrConstructFunc(struct Hook *hook, APTR obj, struct NList_ConstructMessage *ltcm) { struct AddAttrListEntry *aal = (struct AddAttrListEntry *) AllocPooled(ltcm->pool, sizeof(struct AddAttrListEntry)); d1(kprintf(__FILE__ "/%s/%ld: obj=%08lx ltcm=%08lx memPool=%08lx UserData=%08lx\n", \ __FUNC__, __LINE__, obj, ltcm, ltcm->pool, ltcm->entry)); d1(kprintf(__FILE__ "/%s/%ld: aal=%08lx\n", __FUNC__, __LINE__, aal)); if (aal) { aal->aal_EntryType = (enum FtEntryType) ltcm->entry; d1(kprintf(__FILE__ "/%s/%ld: aal_EntryType=%lu\n", __FUNC__, __LINE__, aal->aal_EntryType)); } return aal; } static SAVEDS(void) INTERRUPT AddAttrDestructFunc(struct Hook *hook, APTR obj, struct NList_DestructMessage *ltdm) { struct AddAttrListEntry *aal = (struct AddAttrListEntry *) ltdm->entry; d1(kprintf(__FILE__ "/%s/%ld: aal=%08lx\n", __FUNC__, __LINE__, aal)); if (aal) { FreePooled(ltdm->pool, aal, sizeof(struct AddAttrListEntry)); ltdm->entry = NULL; } } static SAVEDS(ULONG) INTERRUPT AddAttrDisplayFunc(struct Hook *hook, APTR obj, struct NList_DisplayMessage *ltdm) { struct AddAttrListEntry *aal = (struct AddAttrListEntry *) ltdm->entry; d1(kprintf(__FILE__ "/%s/%ld: aal=%08lx\n", __FUNC__, __LINE__, aal)); if (aal) { ltdm->preparses[0] = ""; ltdm->strings[0] = (STRPTR) GetAttributeName(aal->aal_EntryType); } else { // display titles ltdm->preparses[0] = ""; ltdm->strings[0] = ""; } return 0; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT EditAttrConstructFunc(struct Hook *hook, APTR obj, struct NList_ConstructMessage *ltcm) { const struct EditAttrListEntry *newEntry = ltcm->entry; struct EditAttrListEntry *eal = (struct EditAttrListEntry *) AllocPooled(ltcm->pool, sizeof(struct EditAttrListEntry) + newEntry->eal_fta.fta_Length); d1(kprintf(__FILE__ "/%s/%ld: obj=%08lx ltcm=%08lx memPool=%08lx UserData=%08lx\n", \ __FUNC__, __LINE__, obj, ltcm, ltcm->pool, ltcm->entry)); d1(kprintf(__FILE__ "/%s/%ld: eal=%08lx\n", __FUNC__, __LINE__, eal)); if (eal) { memcpy(eal, newEntry, sizeof(struct EditAttrListEntry) + newEntry->eal_fta.fta_Length); } return eal; } static SAVEDS(void) INTERRUPT EditAttrDestructFunc(struct Hook *hook, APTR obj, struct NList_DestructMessage *ltdm) { struct EditAttrListEntry *eal = (struct EditAttrListEntry *) ltdm->entry; d1(kprintf(__FILE__ "/%s/%ld: START aal=%08lx\n", __FUNC__, __LINE__, eal)); if (eal) { FreePooled(ltdm->pool, eal, sizeof(struct EditAttrListEntry) + eal->eal_fta.fta_Length); ltdm->entry = NULL; } d1(kprintf(__FILE__ "/%s/%ld: END aal=%08lx\n", __FUNC__, __LINE__, eal)); } static SAVEDS(ULONG) INTERRUPT EditAttrDisplayFunc(struct Hook *hook, APTR obj, struct NList_DisplayMessage *ltdm) { struct EditAttrListEntry *eal = (struct EditAttrListEntry *) ltdm->entry; d1(kprintf(__FILE__ "/%s/%ld: eal=%08lx\n", __FUNC__, __LINE__, eal)); if (eal) { ltdm->preparses[0] = ""; GetAttributeValueString(&eal->eal_fta, eal->eal_ValueString, sizeof(eal->eal_ValueString)); if (eal->eal_fta.fta_Value2) { d1(KPrintF(__FILE__ "/%s/%ld: Type=%ld <%s>\n", __FUNC__, __LINE__, \ eal->eal_fta.fta_Type, eal->eal_ValueString)); ltdm->strings[0] = GetLocString(eal->eal_fta.fta_Value2); ltdm->strings[1] = eal->eal_ValueString; } else { d1(KPrintF(__FILE__ "/%s/%ld: Type=%ld <%s>\n", __FUNC__, __LINE__, \ eal->eal_fta.fta_Type, eal->eal_ValueString)); ltdm->strings[0] = eal->eal_ValueString; } } else { // display titles ltdm->preparses[0] = ""; ltdm->strings[0] = ""; if (eal->eal_fta.fta_Value2) { ltdm->preparses[1] = ""; ltdm->strings[1] = ""; } } return 0; } //---------------------------------------------------------------------------- STRPTR GetLocString(ULONG MsgId) { struct ScalosFileTypes_LocaleInfo li; li.li_Catalog = FileTypesPrefsCatalog; #ifndef __amigaos4__ li.li_LocaleBase = LocaleBase; #else li.li_ILocale = ILocale; #endif return (STRPTR) GetScalosFileTypesString(&li, MsgId); } static void TranslateNewMenu(struct NewMenu *nm) { while (nm && NM_END != nm->nm_Type) { if (NM_BARLABEL != nm->nm_Label) nm->nm_Label = GetLocString((IPTR) nm->nm_Label); if (nm->nm_CommKey) nm->nm_CommKey = GetLocString((IPTR) nm->nm_CommKey); nm++; } } static void TranslateStringArray(STRPTR *stringArray) { while (*stringArray) { *stringArray = GetLocString((IPTR) *stringArray); stringArray++; } } //---------------------------------------------------------------------------- void _XCEXIT(long x) { } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT AboutFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; MUI_Request(inst->fpb_Objects[OBJNDX_APP_Main], inst->fpb_Objects[OBJNDX_WIN_Main], 0, NULL, GetLocString(MSGID_ABOUTREQOK), GetLocString(MSGID_ABOUTREQFORMAT), MajorVersion, MinorVersion, COMPILER_STRING, CURRENTYEAR); return 0; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT ResetToDefaultsHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; set(inst->fpb_Objects[OBJNDX_WIN_Main], MUIA_Window_Sleep, TRUE); DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Clear, NULL, 0); set(inst->fpb_Objects[OBJNDX_MainListView], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); inst->fpb_SaveFlags = FTWRITEFLAG_CLEAR_CHANGE_FLAG; InitDefIcons(inst, NULL); set(inst->fpb_Objects[OBJNDX_MainListView], MUIA_NList_Quiet, MUIV_NList_Quiet_None); set(inst->fpb_Objects[OBJNDX_WIN_Main], MUIA_Window_Sleep, FALSE); return 0; } static SAVEDS(APTR) INTERRUPT LastSavedHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; d1(KPrintF(__FILE__ "/%s/%ld: \n", __FUNC__, __LINE__)); set(inst->fpb_Objects[OBJNDX_WIN_Main], MUIA_Window_Sleep, TRUE); ReadPrefs(inst, ENVARC_FILETYPES_DIR, ENVARC_DEFICONS_PREFS); set(inst->fpb_Objects[OBJNDX_WIN_Main], MUIA_Window_Sleep, FALSE); inst->fpb_SaveFlags = FTWRITEFLAG_CLEAR_CHANGE_FLAG; return 0; } static SAVEDS(APTR) INTERRUPT RestoreHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; set(inst->fpb_Objects[OBJNDX_WIN_Main], MUIA_Window_Sleep, TRUE); ReadPrefs(inst, ENV_FILETYPES_DIR, ENV_DEFICONS_PREFS); set(inst->fpb_Objects[OBJNDX_WIN_Main], MUIA_Window_Sleep, FALSE); inst->fpb_SaveFlags = FTWRITEFLAG_CLEAR_CHANGE_FLAG; return 0; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT HideEmptyEntriesHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; ULONG Checked = FALSE; get(inst->fpb_Objects[OBJNDX_Menu_HideEmptyEntries], MUIA_Menuitem_Checked, &Checked); inst->fpb_HideEmptyNodes = Checked; set(inst->fpb_Objects[OBJNDX_WIN_Main], MUIA_Window_Sleep, TRUE); set(inst->fpb_Objects[OBJNDX_MainListView], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); if (inst->fpb_HideEmptyNodes) HideEmptyNodes(inst); else ShowHiddenNodes(inst); set(inst->fpb_Objects[OBJNDX_MainListView], MUIA_NList_Quiet, MUIV_NList_Quiet_None); set(inst->fpb_Objects[OBJNDX_WIN_Main], MUIA_Window_Sleep, FALSE); return 0; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT CollapseHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; set(inst->fpb_Objects[OBJNDX_MainListTree], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); if (tn) { struct MUI_NListtree_TreeNode *tnChild; tnChild = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tn, MUIV_NListtree_GetEntry_Position_Head, 0); d1(kprintf("%s/%ld: Head tn=%08lx <%s>\n", __FUNC__, __LINE__, tnChild, tnChild ? tnChild->tn_Name : (STRPTR) "")); if (tnChild) { set(inst->fpb_Objects[OBJNDX_MainListTree], MUIA_NListtree_Active, (IPTR) tnChild); DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Close, MUIV_NListtree_Close_ListNode_Active, MUIV_NListtree_Close_TreeNode_All, 0); } set(inst->fpb_Objects[OBJNDX_MainListTree], MUIA_NListtree_Active, (IPTR) tn); } DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Close, MUIV_NListtree_Close_ListNode_Active, tn, 0); set(inst->fpb_Objects[OBJNDX_MainListTree], MUIA_NList_Quiet, MUIV_NList_Quiet_None); return NULL; } static SAVEDS(APTR) INTERRUPT ExpandHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; set(inst->fpb_Objects[OBJNDX_MainListTree], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Open, MUIV_NListtree_Open_ListNode_Active, MUIV_NListtree_Open_TreeNode_Active, 0); if (tn) { struct MUI_NListtree_TreeNode *tnChild; tnChild = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tn, MUIV_NListtree_GetEntry_Position_Head, 0); d1(kprintf("%s/%ld: Head tn=%08lx <%s>\n", __FUNC__, __LINE__, tnChild, tnChild ? tnChild->tn_Name : (STRPTR) "")); if (tnChild) { set(inst->fpb_Objects[OBJNDX_MainListTree], MUIA_NListtree_Active, (IPTR) tnChild); DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Open, MUIV_NListtree_Open_ListNode_Active, MUIV_NListtree_Open_TreeNode_All, 0); } set(inst->fpb_Objects[OBJNDX_MainListTree], MUIA_NListtree_Active, (IPTR) tn); } set(inst->fpb_Objects[OBJNDX_MainListTree], MUIA_NList_Quiet, MUIV_NList_Quiet_None); return NULL; } static SAVEDS(APTR) INTERRUPT CollapseAllHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Close, MUIV_NListtree_Close_ListNode_Root, MUIV_NListtree_Close_TreeNode_All, 0); return NULL; } static SAVEDS(APTR) INTERRUPT ExpandAllHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Open, MUIV_NListtree_Open_ListNode_Root, MUIV_NListtree_Open_TreeNode_All, 0); return NULL; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT CollapseFileTypesHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; DoMethod(inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIM_NListtree_Close, MUIV_NListtree_Close_ListNode_Active, MUIV_NListtree_Close_TreeNode_All, 0); return NULL; } static SAVEDS(APTR) INTERRUPT ExpandFileTypesHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; set(inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); DoMethod(inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIM_NListtree_Open, MUIV_NListtree_Open_ListNode_Active, MUIV_NListtree_Open_TreeNode_Active, 0); if (tn) { struct MUI_NListtree_TreeNode *tnChild; tnChild = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIM_NListtree_GetEntry, tn, MUIV_NListtree_GetEntry_Position_Head, 0); d1(kprintf("%s/%ld: Head tn=%08lx <%s>\n", __FUNC__, __LINE__, tnChild, tnChild ? tnChild->tn_Name : (STRPTR) "")); if (tnChild) { set(inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIA_NListtree_Active, (IPTR) tnChild); DoMethod(inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIM_NListtree_Open, MUIV_NListtree_Open_ListNode_Active, MUIV_NListtree_Open_TreeNode_All, 0); } set(inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIA_NListtree_Active, (IPTR) tn); } set(inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIA_NList_Quiet, MUIV_NList_Quiet_None); return NULL; } static SAVEDS(APTR) INTERRUPT CollapseAllFileTypesHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; DoMethod(inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIM_NListtree_Close, MUIV_NListtree_Close_ListNode_Root, MUIV_NListtree_Close_TreeNode_All, 0); return NULL; } static SAVEDS(APTR) INTERRUPT ExpandAllFileTypesHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; DoMethod(inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIM_NListtree_Open, MUIV_NListtree_Open_ListNode_Root, MUIV_NListtree_Open_TreeNode_All, 0); return NULL; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT CopyHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; DoMethod(inst->fpb_Objects[OBJNDX_ShadowListTree], MUIM_NListtree_Clear); tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); if (tn) { CopyFileTypesEntry(inst, (struct MUI_NListtree_TreeNode *) MUIV_NListtree_Insert_ListNode_Root, (struct MUI_NListtree_TreeNode *) MUIV_NListtree_Insert_PrevNode_Tail, tn, OBJNDX_ShadowListTree, OBJNDX_MainListTree); } EnablePasteMenuEntry(inst); return NULL; } static SAVEDS(APTR) INTERRUPT CutHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; DoMethod(inst->fpb_Objects[OBJNDX_ShadowListTree], MUIM_NListtree_Clear); tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); if (tn) { CopyFileTypesEntry(inst, (struct MUI_NListtree_TreeNode *) MUIV_NListtree_GetEntry_ListNode_Root, (struct MUI_NListtree_TreeNode *) MUIV_NListtree_Insert_PrevNode_Tail, tn, OBJNDX_ShadowListTree, OBJNDX_MainListTree); EntryHasChanged(inst, tn); DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Remove, MUIV_NListtree_Remove_ListNode_Active, MUIV_NListtree_Remove_TreeNode_Active, 0); } EnablePasteMenuEntry(inst); return NULL; } static SAVEDS(APTR) INTERRUPT PasteHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); if (tn) { struct MUI_NListtree_TreeNode *tnParent; struct MUI_NListtree_TreeNode *tnShadow; tnParent = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tn, MUIV_NListtree_GetEntry_Position_Parent, 0); tnShadow = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_ShadowListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_Insert_ListNode_Root, MUIV_NListtree_GetEntry_Position_Head, 0); set(inst->fpb_Objects[OBJNDX_MainListTree], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); if (MayPasteBelow(inst, tn, tnShadow)) { CopyFileTypesEntry(inst, tnParent, tn, tnShadow, OBJNDX_MainListTree, OBJNDX_ShadowListTree); EntryHasChanged(inst, tnParent); } else if (MayPasteOnto(inst, tn, tnShadow)) { CopyFileTypesEntry(inst, tn, (struct MUI_NListtree_TreeNode *) MUIV_NListtree_Insert_PrevNode_Tail, tnShadow, OBJNDX_MainListTree, OBJNDX_ShadowListTree); EntryHasChanged(inst, tn); } set(inst->fpb_Objects[OBJNDX_MainListTree], MUIA_NList_Quiet, MUIV_NList_Quiet_None); DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Redraw, tn, 0); } return NULL; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT CopyAttrHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; struct AttrListEntry *Attr = NULL; DoMethod(inst->fpb_Objects[OBJNDX_ShadowAttrList], MUIM_NList_Clear); tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); if (tn) { DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_NList_GetEntry, MUIV_NList_GetEntry_Active, &Attr); d1(kprintf("%s/%ld: Attr=%08lx\n", __FUNC__, __LINE__, Attr)); } if (Attr) { d1(kprintf("%s/%ld: Attr=%08lx\n", __FUNC__, __LINE__, Attr)); DoMethod(inst->fpb_Objects[OBJNDX_ShadowAttrList], MUIM_NList_InsertSingle, &Attr->ale_Attribute, MUIV_NList_Insert_Bottom); } EnablePasteAttrMenuEntry(inst); return NULL; } static SAVEDS(APTR) INTERRUPT CutAttrHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; struct AttrListEntry *Attr = NULL; DoMethod(inst->fpb_Objects[OBJNDX_ShadowAttrList], MUIM_NList_Clear); tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); if (tn) { DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_NList_GetEntry, MUIV_NList_GetEntry_Active, &Attr); } if (Attr) { struct FileTypesListEntry *fte = (struct FileTypesListEntry *) tn->tn_User; DoMethod(inst->fpb_Objects[OBJNDX_ShadowAttrList], MUIM_NList_InsertSingle, &Attr->ale_Attribute, MUIV_NList_Insert_Bottom); // Remove attribute from fte's list RemoveAttribute(fte, Attr->ale_Attribute.fta_Type); DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_NList_Remove, MUIV_NList_Remove_Active); EntryHasChanged(inst, tn); } EnablePasteAttrMenuEntry(inst); return NULL; } static SAVEDS(APTR) INTERRUPT PasteAttrHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); if (tn) { struct FileTypesListEntry *fte = (struct FileTypesListEntry *) tn->tn_User; struct AttrListEntry *Attr = NULL; DoMethod(inst->fpb_Objects[OBJNDX_ShadowAttrList], MUIM_NList_GetEntry, 0, &Attr); if (Attr) { set(inst->fpb_Objects[OBJNDX_AttrList], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); if (MayPasteAttr(inst, fte, Attr)) { struct FtAttribute *ftaNew; ftaNew = AddAttribute(fte, Attr->ale_Attribute.fta_Type, Attr->ale_Attribute.fta_Length, Attr->ale_Attribute.fta_Data); if (ftaNew) { DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_NList_InsertSingle, ftaNew, MUIV_NList_Insert_Bottom); } UpdateMenuImage(inst, OBJNDX_MainListTree, fte); EntryHasChanged(inst, tn); } set(inst->fpb_Objects[OBJNDX_AttrList], MUIA_NList_Quiet, MUIV_NList_Quiet_None); EnablePasteAttrMenuEntry(inst); } } return NULL; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT AddEntryHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct AddEntryListEntry *ael = NULL; DoMethod(inst->fpb_Objects[OBJNDX_AddEntryList], MUIM_NList_GetEntry, MUIV_NList_GetEntry_Active, &ael); d1(kprintf("%s/%ld: inst=%08lx ael=%08lx\n", __FUNC__, __LINE__, inst, ael)); DoMethod(inst->fpb_Objects[OBJNDX_AddEntryPopObject], MUIM_Popstring_Close, TRUE); if (ael) { struct MUI_NListtree_TreeNode *tn; d1(kprintf("%s/%ld: EntryType=%lu\n", __FUNC__, __LINE__, ael->ael_EntryType)); tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); if (tn) { struct FileTypesListEntry *fte; struct MUI_NListtree_TreeNode *tnNew; d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); set(inst->fpb_Objects[OBJNDX_MainListView], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); tnNew = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Insert, GetNameFromEntryType(ael->ael_EntryType), NULL, tn, MUIV_NListtree_Insert_PrevNode_Tail, TNF_LIST | TNF_OPEN); fte = (struct FileTypesListEntry *) tnNew->tn_User; fte->ftle_EntryType = ael->ael_EntryType; AddDefaultAttributes(inst, fte); set(inst->fpb_Objects[OBJNDX_MainListView], MUIA_NList_Quiet, MUIV_NList_Quiet_None); DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Redraw, tn, 0); UpdateAttributes(inst, (struct FileTypesListEntry *) tn->tn_User); // Make sure the new entry is the active one set(inst->fpb_Objects[OBJNDX_MainListTree], MUIA_NListtree_Active, (IPTR) tnNew); EntryHasChanged(inst, tnNew); } } return NULL; } static SAVEDS(APTR) INTERRUPT AddAttributeHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: inst=%08lx tn=%08lx\n", __FUNC__, __LINE__, inst, tn)); if (tn) { struct FileTypesListEntry *fte = (struct FileTypesListEntry *) tn->tn_User; struct AddAttrListEntry *aal = NULL; DoMethod(inst->fpb_Objects[OBJNDX_AddAttrList], MUIM_NList_GetEntry, MUIV_NList_GetEntry_Active, &aal); d1(kprintf("%s/%ld: inst=%08lx aal=%08lx\n", __FUNC__, __LINE__, inst, aal)); if (aal) { const struct AttributeDef *atd; ULONG n; atd = GetAttributeDef(aal->aal_EntryType, fte->ftle_EntryType); // remove all attributes which are excluded by the new one for (n = 0; atd && n < atd->atd_ExcludeCount; n++) { const struct FtAttribute *fta; fta = FindAttribute(fte, atd->atd_Exclude[n]); if (fta) { ULONG Entries = 0; ULONG pos; // Remove attribute from fte's list RemoveAttribute(fte, fta->fta_Type); get(inst->fpb_Objects[OBJNDX_AttrList], MUIA_NList_Entries, &Entries); // Remove Attribute from Attribute List for (pos = 0; pos < Entries; pos++) { struct AttrListEntry *Attr = NULL; DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_NList_GetEntry, pos, &Attr); if (Attr && Attr->ale_Attribute.fta_Type == atd->atd_Exclude[n]) { DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_NList_Remove, pos); } } } } AddNewAttribute(inst, fte, aal->aal_EntryType); SetAddableAttributes(inst, fte); UpdateMenuImage(inst, OBJNDX_MainListTree, fte); DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Redraw, tn, 0); if (ATTRTYPE_MenuDefaultAction == aal->aal_EntryType) BeginSetMenuDefaultAction(inst, tn); EntryHasChanged(inst, tn); } } DoMethod(inst->fpb_Objects[OBJNDX_AddAttrPopObject], MUIM_Popstring_Close, TRUE); return NULL; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT RemoveEntryHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; d1(kprintf("%s/%ld: inst=%08lx\n", __FUNC__, __LINE__, inst)); tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); if (tn) { EntryHasChanged(inst, tn); DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Remove, MUIV_NListtree_Remove_ListNode_Active, MUIV_NListtree_Remove_TreeNode_Active, 0); } return NULL; } static SAVEDS(APTR) INTERRUPT RemoveAttributeHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; struct AttrListEntry *Attr = NULL; d1(kprintf("%s/%ld: inst=%08lx\n", __FUNC__, __LINE__, inst)); tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: inst=%08lx tn=%08lx\n", __FUNC__, __LINE__, inst, tn)); if (tn) { DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_NList_GetEntry, MUIV_NList_GetEntry_Active, &Attr); } d1(kprintf("%s/%ld: active Attr=%08lx\n", __FUNC__, __LINE__, Attr)); if (Attr) { struct FileTypesListEntry *fte = (struct FileTypesListEntry *) tn->tn_User; // Remove attribute from fte's list RemoveAttribute(fte, Attr->ale_Attribute.fta_Type); DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_NList_Remove, MUIV_NList_Remove_Active); UpdateMenuImage(inst, OBJNDX_MainListTree, fte); DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Redraw, tn, 0); EntryHasChanged(inst, tn); set(inst->fpb_Objects[OBJNDX_ButtonRemoveAttribute], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_ButtonEditAttribute], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Menu_CopyAttr], MUIA_Menuitem_Enabled, FALSE); set(inst->fpb_Objects[OBJNDX_Menu_CutAttr], MUIA_Menuitem_Enabled, FALSE); EnablePasteAttrMenuEntry(inst); } return NULL; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT ChangeAttributeHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; struct AttrListEntry *Attr = NULL; tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); if (tn) { DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_NList_GetEntry, MUIV_NList_GetEntry_Active, &Attr); } d1(kprintf("%s/%ld: active Attr=%08lx\n", __FUNC__, __LINE__, Attr)); if (Attr) { struct FileTypesListEntry *fte = (struct FileTypesListEntry *) tn->tn_User; const struct AttributeDef *atd; d1(kprintf("%s/%ld: active fte=%08lx\n", __FUNC__, __LINE__, fte)); atd = GetAttributeDef(Attr->ale_Attribute.fta_Type, fte->ftle_EntryType); d1(kprintf("%s/%ld: atd=%08lx\n", __FUNC__, __LINE__, atd)); if (atd) { CONST_STRPTR ValueString = ""; ULONG ValueULong = 0; switch (atd->atd_DefaultContents.avd_Type) { case ATTRDEFTYPE_ULong: if (atd->atd_NumberOfValues > 0) { get(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectValue], MUIA_String_Contents, &ValueString); } else { get(inst->fpb_Objects[OBJNDX_String_AttributeValue], MUIA_String_Contents, &ValueString); } if (atd->atd_DefaultContents.avd_ConvertValueFromString) ValueULong = (atd->atd_DefaultContents.avd_ConvertValueFromString)(ValueString); else { unsigned long ulong1; sscanf(ValueString, "%lu", &ulong1); ValueULong = ulong1; } // Remove attribute from fte's list RemoveAttribute(fte, atd->atd_Type); AddAttribute(fte, atd->atd_Type, sizeof(ValueULong), &ValueULong); break; case ATTRDEFTYPE_FileName: get(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectAslFile], MUIA_String_Contents, &ValueString); // Remove attribute from fte's list RemoveAttribute(fte, atd->atd_Type); AddAttribute(fte, atd->atd_Type, 1 + strlen(ValueString), ValueString); break; case ATTRDEFTYPE_PathName: get(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectAslPath], MUIA_String_Contents, &ValueString); // Remove attribute from fte's list RemoveAttribute(fte, atd->atd_Type); AddAttribute(fte, atd->atd_Type, 1 + strlen(ValueString), ValueString); break; case ATTRDEFTYPE_FontString: get(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectAslFont], MUIA_String_Contents, &ValueString); // Remove attribute from fte's list RemoveAttribute(fte, atd->atd_Type); AddAttribute(fte, atd->atd_Type, 1 + strlen(ValueString), ValueString); break; case ATTRDEFTYPE_TTFontString: get(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectTTFont], MUIA_String_Contents, &ValueString); // Remove attribute from fte's list RemoveAttribute(fte, atd->atd_Type); AddAttribute(fte, atd->atd_Type, 1 + strlen(ValueString), ValueString); break; case ATTRDEFTYPE_LocString: case ATTRDEFTYPE_String: case ATTRDEFTYPE_String2: if (atd->atd_NumberOfValues > 0) { get(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectValue], MUIA_String_Contents, &ValueString); } else { get(inst->fpb_Objects[OBJNDX_String_AttributeValue], MUIA_String_Contents, &ValueString); } // Remove attribute from fte's list RemoveAttribute(fte, atd->atd_Type); AddAttribute(fte, atd->atd_Type, 1 + strlen(ValueString), ValueString); break; default: break; } d1(kprintf("%s/%ld:\n", __FUNC__, __LINE__)); UpdateAttributes(inst, fte); UpdateMenuImage(inst, OBJNDX_MainListTree, fte); DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Redraw, tn, 0); EntryHasChanged(inst, tn); } } // Close "Edit Attribute" window set(inst->fpb_Objects[OBJNDX_WIN_EditAttribute], MUIA_Window_Open, FALSE); return NULL; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT SelectAttributeValueHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct EditAttrListEntry *eal = NULL; DoMethod(inst->fpb_Objects[OBJNDX_List_AttributeSelectValue], MUIM_NList_GetEntry, MUIV_NList_GetEntry_Active, &eal); if (eal) { set(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectValue], MUIA_String_Contents, (IPTR) eal->eal_ValueString); } d1(kprintf("%s/%ld: eal=%08lx\n", __FUNC__, __LINE__, eal)); DoMethod(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectValue], MUIM_Popstring_Close, TRUE); return NULL; } //---------------------------------------------------------------------------- static SAVEDS(ULONG) INTERRUPT EditAttributePopAslFileStartHookFunc(struct Hook *hook, Object *o, Msg msg) { struct TagItem *TagList = (struct TagItem *) msg; struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; CONST_STRPTR ValueString = NULL; STRPTR lp; d1(KPrintF("%s/%ld: inst=%08lx\n", __FUNC__, __LINE__, inst)); get(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectAslFile], MUIA_String_Contents, &ValueString); d1(KPrintF("%s/%ld: ValueString=<%s>\n", __FUNC__, __LINE__, ValueString)); while (TAG_END != TagList->ti_Tag) TagList++; stccpy(inst->fpb_FileName, FilePart(ValueString), sizeof(inst->fpb_FileName)); stccpy(inst->fpb_Path, ValueString, sizeof(inst->fpb_Path)); lp = PathPart(inst->fpb_Path); *lp = '\0'; TagList->ti_Tag = ASLFR_DrawersOnly; TagList->ti_Data = FALSE; TagList++; TagList->ti_Tag = ASLFR_InitialFile; TagList->ti_Data = (IPTR) inst->fpb_FileName; TagList++; TagList->ti_Tag = ASLFR_InitialDrawer; TagList->ti_Data = (IPTR) inst->fpb_Path; TagList++; TagList->ti_Tag = TAG_END; d1(KPrintF("%s/%ld: ASLFR_InitialFile=<%s> ASLFR_InitialDrawer=<%s>\n", __FUNC__, __LINE__, inst->fpb_FileName, inst->fpb_Path)); return TRUE; } //---------------------------------------------------------------------------- static SAVEDS(ULONG) INTERRUPT EditAttributePopAslPathStartHookFunc(struct Hook *hook, Object *o, Msg msg) { struct TagItem *TagList = (struct TagItem *) msg; struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; CONST_STRPTR ValueString = NULL; STRPTR lp; d1(kprintf("%s/%ld: inst=%08lx\n", __FUNC__, __LINE__, inst)); get(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectAslPath], MUIA_String_Contents, &ValueString); while (TAG_END != TagList->ti_Tag) TagList++; stccpy(inst->fpb_FileName, FilePart(ValueString), sizeof(inst->fpb_FileName)); stccpy(inst->fpb_Path, ValueString, sizeof(inst->fpb_Path)); lp = PathPart(inst->fpb_Path); *lp = '\0'; TagList->ti_Tag = ASLFR_DrawersOnly; TagList->ti_Data = TRUE; TagList++; TagList->ti_Tag = ASLFR_InitialFile; TagList->ti_Data = (IPTR) inst->fpb_FileName; TagList++; TagList->ti_Tag = ASLFR_InitialDrawer; TagList->ti_Data = (IPTR) inst->fpb_Path; TagList++; TagList->ti_Tag = TAG_END; return TRUE; } //---------------------------------------------------------------------------- static SAVEDS(ULONG) INTERRUPT EditAttrTTFontOpenHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; APTR ttRequest; ULONG Success = 0; ttRequest = TT_AllocRequest(); if (ttRequest) { struct Window *PrefsWindow = NULL; struct TagItem *AttrList; char FontName[MAX_ATTRVALUE]; IPTR FontStyle, FontWeight, FontSize; STRPTR FontDesc = NULL; get(o, MUIA_String_Contents, &FontDesc); ParseTTFontFromDesc(FontDesc, &FontStyle, &FontWeight, &FontSize, FontName, sizeof(FontName)); // set(inst->fpb_Objects[OBJNDX_WIN_EditAttribute], MUIA_Window_Sleep, TRUE); get(inst->fpb_Objects[OBJNDX_WIN_EditAttribute], MUIA_Window_Window, &PrefsWindow); //TT_RequestA() AttrList = TT_Request(ttRequest, TTRQ_Window, (IPTR) PrefsWindow, TTRQ_TitleText, (IPTR) GetLocString(MSGID_EDITATTRIBUTE_TTFONT_ASLTITLE), TTRQ_PositiveText, (IPTR) GetLocString(MSGID_EDITATTRIBUTE_TTFONT_ASL_OKBUTTON), TTRQ_NegativeText, (IPTR) GetLocString(MSGID_EDITATTRIBUTE_TTFONT_ASL_CANCELBUTTON), TTRQ_DoSizes, TRUE, TTRQ_DoStyle, TRUE, TTRQ_DoWeight, TRUE, TTRQ_Activate, TRUE, TTRQ_DoPreview, TRUE, TTRQ_InitialName, (IPTR) FontName, TTRQ_InitialSize, FontSize, TTRQ_InitialStyle, FontStyle, TAG_END); d1(kprintf("%s/%ld: AttrList=%08lx\n", __FUNC__, __LINE__, AttrList)); if (AttrList) { char buffer[MAX_ATTRVALUE]; BuildTTDescFromAttrList(buffer, sizeof(buffer), AttrList); d1(kprintf("%s/%ld: FontDesc=<%s>\n", __FUNC__, __LINE__, buffer)); set(o, MUIA_String_Contents, (IPTR) buffer); set(inst->fpb_Objects[OBJNDX_TTFont_Sample], MUIA_FontSample_TTFontDesc, (IPTR) buffer); Success = 1; } TT_FreeRequest(ttRequest); } DoMethod(o, MUIM_Popstring_Close, Success); return 0; } //---------------------------------------------------------------------------- static SAVEDS(ULONG) INTERRUPT EditAttrTTFontCloseHookFunc(struct Hook *hook, Object *o, Msg msg) { // struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; // set(inst->fpb_Objects[OBJNDX_WIN_EditAttribute], MUIA_Window_Sleep, FALSE); return 0; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT SelectEntryHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; // struct MUI_NListtree_TreeNode *tn1; tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); #if 0 tn1 = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tn, MUIV_NListtree_GetEntry_Position_Head, 0); d1(kprintf("%s/%ld: Head tn=%08lx <%s>\n", __FUNC__, __LINE__, tn1, tn1 ? tn1->tn_Name : (STRPTR) "")); tn1 = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tn, MUIV_NListtree_GetEntry_Position_Tail, 0); d1(kprintf("%s/%ld: Tail tn=%08lx <%s>\n", __FUNC__, __LINE__, tn1, tn1 ? tn1->tn_Name : (STRPTR) "")); #endif if (tn) { struct FileTypesListEntry *fte = (struct FileTypesListEntry *) tn->tn_User; set(inst->fpb_Objects[OBJNDX_Menu_Expand], MUIA_Menuitem_Enabled, TRUE); set(inst->fpb_Objects[OBJNDX_Menu_Collapse], MUIA_Menuitem_Enabled, TRUE); switch (fte->ftle_EntryType) { case ENTRYTYPE_FileType: set(inst->fpb_Objects[OBJNDX_ButtonRemoveEntry], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Menu_Copy], MUIA_Menuitem_Enabled, FALSE); set(inst->fpb_Objects[OBJNDX_Menu_Cut], MUIA_Menuitem_Enabled, FALSE); break; case ENTRYTYPE_PopupMenu: case ENTRYTYPE_PopupMenu_SubMenu: case ENTRYTYPE_PopupMenu_MenuItem: case ENTRYTYPE_PopupMenu_InternalCmd: case ENTRYTYPE_PopupMenu_WbCmd: case ENTRYTYPE_PopupMenu_ARexxCmd: case ENTRYTYPE_PopupMenu_CliCmd: case ENTRYTYPE_PopupMenu_PluginCmd: case ENTRYTYPE_PopupMenu_IconWindowCmd: case ENTRYTYPE_PopupMenu_MenuSeparator: case ENTRYTYPE_ToolTip: case ENTRYTYPE_ToolTip_Group: case ENTRYTYPE_ToolTip_Member: case ENTRYTYPE_ToolTip_HBar: case ENTRYTYPE_ToolTip_String: case ENTRYTYPE_ToolTip_Space: case ENTRYTYPE_ToolTip_DtImage: default: set(inst->fpb_Objects[OBJNDX_Menu_Copy], MUIA_Menuitem_Enabled, TRUE); set(inst->fpb_Objects[OBJNDX_Menu_Cut], MUIA_Menuitem_Enabled, TRUE); set(inst->fpb_Objects[OBJNDX_ButtonRemoveEntry], MUIA_Disabled, FALSE); break; } UpdateAttributes(inst, fte); } else { DoMethod(inst->fpb_Objects[OBJNDX_AddAttrList], MUIM_NList_Clear); set(inst->fpb_Objects[OBJNDX_Menu_Expand], MUIA_Menuitem_Enabled, FALSE); set(inst->fpb_Objects[OBJNDX_Menu_Collapse], MUIA_Menuitem_Enabled, FALSE); set(inst->fpb_Objects[OBJNDX_Menu_Copy], MUIA_Menuitem_Enabled, FALSE); set(inst->fpb_Objects[OBJNDX_Menu_Cut], MUIA_Menuitem_Enabled, FALSE); set(inst->fpb_Objects[OBJNDX_ButtonRemoveEntry], MUIA_Disabled, TRUE); } EnablePasteMenuEntry(inst); EnablePasteAttrMenuEntry(inst); return NULL; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT SelectAttributeHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; struct AttrListEntry *Attr = NULL; tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); if (tn) { DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_NList_GetEntry, MUIV_NList_GetEntry_Active, &Attr); } d1(kprintf("%s/%ld: active Attr=%08lx\n", __FUNC__, __LINE__, Attr)); if (Attr) { struct FileTypesListEntry *fte = (struct FileTypesListEntry *) tn->tn_User; const struct AttributeDef *atd; d1(kprintf("%s/%ld: active fte=%08lx\n", __FUNC__, __LINE__, fte)); set(inst->fpb_Objects[OBJNDX_Menu_CopyAttr], MUIA_Menuitem_Enabled, TRUE); set(inst->fpb_Objects[OBJNDX_Menu_CutAttr], MUIA_Menuitem_Enabled, TRUE); atd = GetAttributeDef(Attr->ale_Attribute.fta_Type, fte->ftle_EntryType); d1(kprintf("%s/%ld: atd=%08lx\n", __FUNC__, __LINE__, atd)); if (atd) { set(inst->fpb_Objects[OBJNDX_ButtonRemoveAttribute], MUIA_Disabled, IsAttrRequired(fte, atd)); // "Edit Attribute" button stays disabled when attribute has type ATTRDEFTYPE_None set(inst->fpb_Objects[OBJNDX_ButtonEditAttribute], MUIA_Disabled, ATTRDEFTYPE_None == atd->atd_DefaultContents.avd_Type); } } else { set(inst->fpb_Objects[OBJNDX_Menu_CopyAttr], MUIA_Menuitem_Enabled, FALSE); set(inst->fpb_Objects[OBJNDX_Menu_CutAttr], MUIA_Menuitem_Enabled, FALSE); set(inst->fpb_Objects[OBJNDX_ButtonRemoveAttribute], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_ButtonEditAttribute], MUIA_Disabled, TRUE); } return NULL; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT EditAttributeHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct MUI_NListtree_TreeNode *tn; struct AttrListEntry *Attr = NULL; d1(KPrintF("%s/%ld: START\n", __FUNC__, __LINE__)); tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(KPrintF("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); if (tn) { DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_NList_GetEntry, MUIV_NList_GetEntry_Active, &Attr); } d1(KPrintF("%s/%ld: active Attr=%08lx\n", __FUNC__, __LINE__, Attr)); if (Attr) { struct FileTypesListEntry *fte = (struct FileTypesListEntry *) tn->tn_User; const struct AttributeDef *atd; atd = GetAttributeDef(Attr->ale_Attribute.fta_Type, fte->ftle_EntryType); d1(KPrintF("%s/%ld: atd=%08lx\n", __FUNC__, __LINE__, atd)); if (atd) { char ValueString[MAX_ATTRVALUE]; set(inst->fpb_Objects[OBJNDX_Text_AttributeName], MUIA_Text_Contents, (IPTR) GetAttributeName(atd->atd_Type)); GetAttributeValueString(&Attr->ale_Attribute, ValueString, sizeof(ValueString)); d1(KPrintF("%s/%ld: avd_Type=%ld\n", __FUNC__, __LINE__, atd->atd_DefaultContents.avd_Type)); switch (atd->atd_DefaultContents.avd_Type) { case ATTRDEFTYPE_None: // nothing to edit here... return NULL; break; case ATTRDEFTYPE_PathName: set(inst->fpb_Objects[OBJNDX_Group_AttributeSelectValue], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeValue], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeAslFile], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeAslPath], MUIA_ShowMe, TRUE); set(inst->fpb_Objects[OBJNDX_Group_AttributeAslFont], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeTTFont], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectAslPath], MUIA_String_Contents, (IPTR) ValueString); set(inst->fpb_Objects[OBJNDX_WIN_EditAttribute], MUIA_Window_ActiveObject, inst->fpb_Objects[OBJNDX_Group_AttributeAslPath]); break; case ATTRDEFTYPE_FileName: set(inst->fpb_Objects[OBJNDX_Group_AttributeSelectValue], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeValue], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeAslFile], MUIA_ShowMe, TRUE); set(inst->fpb_Objects[OBJNDX_Group_AttributeAslPath], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeAslFont], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeTTFont], MUIA_ShowMe, FALSE); switch (atd->atd_Type) { case ATTRTYPE_DtImageName: case ATTRTYPE_UnselIconName: case ATTRTYPE_SelIconName: d1(KPrintF("%s/%ld: OBJNDX_DtPic_AttributeSelectAslFile=%08lx ValueString=<%s>\n", \ __FUNC__, __LINE__, inst->fpb_Objects[OBJNDX_DtPic_AttributeSelectAslFile], ValueString)); set(inst->fpb_Objects[OBJNDX_DtPic_AttributeSelectAslFile], MUIA_ScaDtpic_Name, ValueString); break; default: set(inst->fpb_Objects[OBJNDX_DtPic_AttributeSelectAslFile], MUIA_ScaDtpic_Name, ""); break; } set(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectAslFile], MUIA_String_Contents, (IPTR) ValueString); set(inst->fpb_Objects[OBJNDX_WIN_EditAttribute], MUIA_Window_ActiveObject, inst->fpb_Objects[OBJNDX_Group_AttributeAslFile]); break; case ATTRDEFTYPE_FontString: set(inst->fpb_Objects[OBJNDX_Group_AttributeSelectValue], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeValue], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeAslPath], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeAslFile], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeAslFont], MUIA_ShowMe, TRUE); set(inst->fpb_Objects[OBJNDX_Group_AttributeTTFont], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectAslFont], MUIA_String_Contents, (IPTR) ValueString); set(inst->fpb_Objects[OBJNDX_AslFont_Sample], MUIA_FontSample_StdFontDesc, (IPTR) ValueString); set(inst->fpb_Objects[OBJNDX_WIN_EditAttribute], MUIA_Window_ActiveObject, inst->fpb_Objects[OBJNDX_Group_AttributeAslFont]); break; case ATTRDEFTYPE_TTFontString: set(inst->fpb_Objects[OBJNDX_Group_AttributeSelectValue], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeValue], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeAslPath], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeAslFile], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeAslFont], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeTTFont], MUIA_ShowMe, TRUE); set(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectTTFont], MUIA_String_Contents, (IPTR) ValueString); set(inst->fpb_Objects[OBJNDX_TTFont_Sample], MUIA_FontSample_TTFontDesc, (IPTR) ValueString); set(inst->fpb_Objects[OBJNDX_WIN_EditAttribute], MUIA_Window_ActiveObject, inst->fpb_Objects[OBJNDX_Group_AttributeTTFont]); break; case ATTRDEFTYPE_ULong: //... TBD case ATTRDEFTYPE_LocString: case ATTRDEFTYPE_String: case ATTRDEFTYPE_String2: set(inst->fpb_Objects[OBJNDX_Group_AttributeAslFile], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeAslPath], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeAslFont], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeTTFont], MUIA_ShowMe, FALSE); d1(KPrintF("%s/%ld: atd_NumberOfValues=%ld\n", __FUNC__, __LINE__, atd->atd_NumberOfValues)); if (atd->atd_NumberOfValues > 0) { set(inst->fpb_Objects[OBJNDX_Group_AttributeSelectValue], MUIA_ShowMe, TRUE); set(inst->fpb_Objects[OBJNDX_Group_AttributeValue], MUIA_ShowMe, FALSE); FillListOfAttributeValues(inst, fte, atd, Attr); set(inst->fpb_Objects[OBJNDX_Pop_AttributeSelectValue], MUIA_String_Contents, (IPTR) ValueString); set(inst->fpb_Objects[OBJNDX_WIN_EditAttribute], MUIA_Window_ActiveObject, inst->fpb_Objects[OBJNDX_Pop_AttributeSelectValue]); } else { set(inst->fpb_Objects[OBJNDX_Group_AttributeSelectValue], MUIA_ShowMe, FALSE); set(inst->fpb_Objects[OBJNDX_Group_AttributeValue], MUIA_ShowMe, TRUE); set(inst->fpb_Objects[OBJNDX_String_AttributeValue], MUIA_String_Contents, (IPTR) ValueString); set(inst->fpb_Objects[OBJNDX_WIN_EditAttribute], MUIA_Window_ActiveObject, inst->fpb_Objects[OBJNDX_String_AttributeValue]); } break; } DoMethod(inst->fpb_Objects[OBJNDX_WIN_EditAttribute], MUIM_Notify, MUIA_Window_Open, TRUE, inst->fpb_Objects[OBJNDX_WIN_Main], 3, MUIM_Set, MUIA_Window_Sleep, TRUE); DoMethod(inst->fpb_Objects[OBJNDX_WIN_EditAttribute], MUIM_Notify, MUIA_Window_Open, FALSE, inst->fpb_Objects[OBJNDX_WIN_Main], 3, MUIM_Set, MUIA_Window_Sleep, FALSE); d1(KPrintF("%s/%ld: atd=%08lx OBJNDX_WIN_EditAttribute=%08lx\n", __FUNC__, __LINE__, atd, inst->fpb_Objects[OBJNDX_WIN_EditAttribute])); set(inst->fpb_Objects[OBJNDX_WIN_EditAttribute], MUIA_Window_Open, TRUE); d1(KPrintF("%s/%ld: atd=%08lx\n", __FUNC__, __LINE__, atd)); } } d1(KPrintF("%s/%ld: END\n", __FUNC__, __LINE__)); return NULL; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT ContextMenuTriggerHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; Object *MenuObj = *((Object **) msg); ULONG MenuHookIndex = 0; struct Hook *MenuHook = NULL; d1(KPrintF("%s/%ld: MenuObj=%08lx\n", __FUNC__, __LINE__, MenuObj)); d1(KPrintF("%s/%ld: msg=%08lx *msg=%08lx\n", __FUNC__, __LINE__, msg, *((IPTR *) msg))); get(MenuObj, MUIA_UserData, &MenuHookIndex); if (MenuHookIndex > 0 && MenuHookIndex < HOOKNDX_MAX) MenuHook = &inst->fpb_Hooks[MenuHookIndex]; d1(KPrintF("%s/%ld: MenuHook=%08lx\n", __FUNC__, __LINE__, MenuHook)); if (MenuHook) DoMethod(inst->fpb_Objects[OBJNDX_Group_Main], MUIM_CallHook, MenuHook, MenuObj); return NULL; } //---------------------------------------------------------------------------- static LONG ReadPrefs(struct FileTypesPrefsInst *inst, CONST_STRPTR LoadFileName, CONST_STRPTR DefIconPrefsName) { d1(time_t now = time(NULL)); d1(KPrintF(__FILE__ "/%s/%ld: LoadFileName=<%s> DefIconPrefsName=<%s>\n", __FUNC__, __LINE__, LoadFileName, DefIconPrefsName)); ReadFileTypes(inst, LoadFileName, DefIconPrefsName); d1(kprintf(__FILE__ "/%s/%ld: \n", __FUNC__, __LINE__)); d1(kprintf(__FILE__ "/%s/%ld: ReadFileTypes took %lu s\n", __FUNC__, __LINE__, time(NULL) - now)); return RETURN_OK; } static LONG WritePrefs(struct FileTypesPrefsInst *inst, CONST_STRPTR SaveName, CONST_STRPTR DefIconPrefsName, ULONG Flags) { LONG Result; d1(time_t now = time(NULL)); WriteDefIconsPrefs(inst, DefIconPrefsName); Result = WriteFileTypes(inst, SaveName, Flags); d1(kprintf(__FILE__ "/%s/%ld: WriteFileTypes took %lu s\n", __FUNC__, __LINE__, time(NULL) - now)); if (RETURN_OK == Result) { } else { char Buffer[120]; Fault(Result, "", Buffer, sizeof(Buffer) - 1); // MUI_RequestA() MUI_Request(inst->fpb_Objects[OBJNDX_APP_Main], inst->fpb_Objects[OBJNDX_WIN_Main], 0, NULL, GetLocString(MSGID_ABOUTREQOK), GetLocString(MSGID_REQTITLE_SAVEERROR), SaveName, Buffer); } return Result; } //---------------------------------------------------------------------------- DISPATCHER(myNListTree) { struct FileTypesPrefsInst *inst = NULL; IPTR Result; d1(kprintf(__FILE__ "/%s/%ld: MethodID=%08lx\n", __FUNC__, __LINE__, msg->MethodID)); switch(msg->MethodID) { case MUIM_ContextMenuChoice: { struct MUIP_ContextMenuChoice *cmc = (struct MUIP_ContextMenuChoice *) msg; Object *MenuObj; ULONG MenuHookIndex = 0; struct Hook *MenuHook = NULL; get(obj, MUIA_NList_PrivateData, (IPTR *)&inst); d1(kprintf("%s/%ld: MUIM_ContextMenuChoice item=%08lx\n", __FUNC__, __LINE__, cmc->item)); MenuObj = cmc->item; d1(kprintf("%s/%ld: MenuObj=%08lx\n", __FUNC__, __LINE__, MenuObj)); d1(kprintf("%s/%ld: msg=%08lx *msg=%08lx\n", __FUNC__, __LINE__, msg, *((IPTR *) msg))); get(MenuObj, MUIA_UserData, &MenuHookIndex); if (MenuHookIndex > 0 && MenuHookIndex < HOOKNDX_MAX) MenuHook = &inst->fpb_Hooks[MenuHookIndex]; d1(kprintf("%s/%ld: MenuHook=%08lx\n", __FUNC__, __LINE__, MenuHook)); if (MenuHook) DoMethod(inst->fpb_Objects[OBJNDX_Group_Main], MUIM_CallHook, MenuHook, 0); Result = 0; } break; case MUIM_NList_TestPos: { struct TestPosArg { ULONG MethodID; LONG x, y; struct MUI_NList_TestPos_Result *res; }; struct TestPosArg *tpa = (struct TestPosArg *) msg; get(obj, MUIA_NList_PrivateData, (IPTR *)&inst); if (inst->fpb_PageIsActive) Result = DoSuperMethodA(cl, obj, msg); else { Result = 0; tpa->res->entry = tpa->res->column = -1; } d1(kprintf("%s/%ld: MUIM_NList_TestPos Result=%08lx x=%ld y=%ld tpr=%08lx entry=%ld column=%ld\n", \ __FUNC__, __LINE__, Result, tpa->x, tpa->y, tpa->res, tpa->res->entry, tpa->res->column)); } break; case MUIM_DragQuery: { struct MUIP_DragQuery *dq = (struct MUIP_DragQuery *) msg; get(obj, MUIA_NList_PrivateData, (IPTR *)&inst); d1(kprintf("%s/%ld: MUIM_DragQuery obj=%08lx\n", __FUNC__, __LINE__, dq->obj)); if (inst->fpb_Objects[OBJNDX_MainListTree] == dq->obj) Result = MUIV_DragQuery_Accept; else Result = MUIV_DragQuery_Refuse; } break; case MUIM_DragDrop: Result = DoDragDrop(cl, obj, msg); break; case MUIM_NList_DropType: { struct MUIP_NList_DropType *dr = (struct MUIP_NList_DropType *)msg; struct MUI_NListtree_TreeNode *tnTo, *tnFrom; struct MUI_NListtree_TestPos_Result res; get(obj, MUIA_NList_PrivateData, (IPTR *)&inst); inst->fpb_MenuTreeMayDrop = FALSE; Result = DoSuperMethodA(cl, obj, msg); d1(KPrintF("%s/%ld: DropType=%ld pos=%ld\n", __FUNC__, __LINE__, *(dr->type), *(dr->pos))); DoMethod(obj, MUIM_NListtree_TestPos, dr->mousex, dr->mousey, &res); tnTo = res.tpr_TreeNode; tnFrom = MUIV_NListtree_Active_Off; get(obj, MUIA_NListtree_Active, &tnFrom); d1(KPrintF("%s/%ld: tnFrom=%08lx tnTo=%08lx\n", __FUNC__, __LINE__, tnFrom, tnTo)); if (tnTo && tnFrom) { switch (*(dr->type)) { case MUIV_NListtree_DropType_None: case MUIV_NListtree_DropType_Sorted: default: break; case MUIV_NListtree_DropType_Above: case MUIV_NListtree_DropType_Below: if (MayPasteBelow(inst, tnTo, tnFrom)) inst->fpb_MenuTreeMayDrop = TRUE; break; case MUIV_NListtree_DropType_Onto: if (MayPasteOnto(inst, tnTo, tnFrom)) inst->fpb_MenuTreeMayDrop = TRUE; break; } d1(KPrintF("%s/%ld: DropType=%ld\n", __FUNC__, __LINE__, *(dr->type))); } } break; // we catch MUIM_DragReport because we want to restrict some dragging for some special objects case MUIM_DragReport: { get(obj, MUIA_NList_PrivateData, (IPTR *)&inst); d1(KPrintF("%s/%ld: MUIM_DragReport\n", __FUNC__, __LINE__)); Result = DoSuperMethodA(cl, obj, msg); if (!inst->fpb_MenuTreeMayDrop) Result = MUIV_DragReport_Abort; d1(KPrintF("%s/%ld: MUIM_DragReport\n", __FUNC__, __LINE__)); } break; default: Result = DoSuperMethodA(cl, obj, msg); } return Result; } DISPATCHER_END //---------------------------------------------------------------------------- DISPATCHER(myFileTypesNListTree) { struct FileTypesPrefsInst *inst = NULL; IPTR Result; d1(kprintf(__FILE__ "/%s/%ld: MethodID=%08lx\n", __FUNC__, __LINE__, msg->MethodID)); switch(msg->MethodID) { case MUIM_ContextMenuChoice: { struct MUIP_ContextMenuChoice *cmc = (struct MUIP_ContextMenuChoice *) msg; Object *MenuObj; ULONG MenuHookIndex = 0; struct Hook *MenuHook = NULL; get(obj, MUIA_NList_PrivateData, (IPTR *)&inst); d1(kprintf("%s/%ld: MUIM_ContextMenuChoice item=%08lx\n", __FUNC__, __LINE__, cmc->item)); MenuObj = cmc->item; d1(kprintf("%s/%ld: MenuObj=%08lx\n", __FUNC__, __LINE__, MenuObj)); d1(kprintf("%s/%ld: msg=%08lx *msg=%08lx\n", __FUNC__, __LINE__, msg, *((IPTR *) msg))); get(MenuObj, MUIA_UserData, &MenuHookIndex); if (MenuHookIndex > 0 && MenuHookIndex < HOOKNDX_MAX) MenuHook = &inst->fpb_Hooks[MenuHookIndex]; d1(kprintf("%s/%ld: MenuHook=%08lx\n", __FUNC__, __LINE__, MenuHook)); if (MenuHook) DoMethod(inst->fpb_Objects[OBJNDX_Group_Main], MUIM_CallHook, MenuHook, 0); Result = 0; } break; case MUIM_DragQuery: { struct MUIP_DragQuery *dq = (struct MUIP_DragQuery *) msg; d1(kprintf("%s/%ld: MUIM_DragQuery obj=%08lx\n", __FUNC__, __LINE__, dq->obj)); // only accept objects from ourselves if (obj == dq->obj) Result = MUIV_DragQuery_Accept; else Result = MUIV_DragQuery_Refuse; } break; case MUIM_DragDrop: { //struct MUIP_DragDrop *dq = (struct MUIP_DragDrop *) msg; struct MUI_NListtree_TreeNode *ln; get(obj, MUIA_NList_PrivateData, (IPTR *)&inst); d1(kprintf("%s/%ld: MUIP_DragDrop obj=%08lx\n", __FUNC__, __LINE__, obj)); Result = DoSuperMethodA(cl, obj, msg); ln = (struct MUI_NListtree_TreeNode *) DoMethod(obj, MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: ln=%08lx tn_User=%08lx\n", __FUNC__, __LINE__, ln, ln->tn_User)); if (ln) { SetFileTypesIcon(inst, ln); } } break; default: Result = DoSuperMethodA(cl, obj, msg); } return Result; } DISPATCHER_END //---------------------------------------------------------------------------- DISPATCHER(myNList) { struct FileTypesPrefsInst *inst = NULL; IPTR Result; d1(kprintf(__FILE__ "/%s/%ld: MethodID=%08lx\n", __FUNC__, __LINE__, msg->MethodID)); switch(msg->MethodID) { case MUIM_ContextMenuChoice: { struct MUIP_ContextMenuChoice *cmc = (struct MUIP_ContextMenuChoice *) msg; Object *MenuObj; ULONG MenuHookIndex = 0; struct Hook *MenuHook = NULL; get(obj, MUIA_NList_PrivateData, (IPTR *)&inst); d1(kprintf("%s/%ld: MUIM_ContextMenuChoice item=%08lx\n", __FUNC__, __LINE__, cmc->item)); MenuObj = cmc->item; d1(kprintf("%s/%ld: MenuObj=%08lx\n", __FUNC__, __LINE__, MenuObj)); d1(kprintf("%s/%ld: msg=%08lx *msg=%08lx\n", __FUNC__, __LINE__, msg, *((IPTR *) msg))); get(MenuObj, MUIA_UserData, &MenuHookIndex); if (MenuHookIndex > 0 && MenuHookIndex < HOOKNDX_MAX) MenuHook = &inst->fpb_Hooks[MenuHookIndex]; d1(kprintf("%s/%ld: MenuHook=%08lx\n", __FUNC__, __LINE__, MenuHook)); if (MenuHook) DoMethod(inst->fpb_Objects[OBJNDX_Group_Main], MUIM_CallHook, MenuHook, MenuObj); Result = 0; } break; default: Result = DoSuperMethodA(cl, obj, msg); } return Result; } DISPATCHER_END //---------------------------------------------------------------------------- DISPATCHER(myFileTypesActionsNList) { struct FileTypesPrefsInst *inst = NULL; IPTR Result; d1(kprintf(__FILE__ "/%s/%ld: MethodID=%08lx\n", __FUNC__, __LINE__, msg->MethodID)); switch(msg->MethodID) { case MUIM_DragDrop: Result = DoSuperMethodA(cl, obj, msg); get(obj, MUIA_NList_PrivateData, (IPTR *)&inst); CallHookPkt(&inst->fpb_Hooks[HOOKNDX_DragDropSort_FileTypesAction], obj, msg); break; case MUIM_ContextMenuChoice: { struct MUIP_ContextMenuChoice *cmc = (struct MUIP_ContextMenuChoice *) msg; Object *MenuObj; ULONG MenuHookIndex = 0; struct Hook *MenuHook = NULL; get(obj, MUIA_NList_PrivateData, (IPTR *)&inst); d1(kprintf("%s/%ld: MUIM_ContextMenuChoice item=%08lx\n", __FUNC__, __LINE__, cmc->item)); MenuObj = cmc->item; d1(kprintf("%s/%ld: MenuObj=%08lx\n", __FUNC__, __LINE__, MenuObj)); d1(kprintf("%s/%ld: msg=%08lx *msg=%08lx\n", __FUNC__, __LINE__, msg, *((IPTR *) msg))); get(MenuObj, MUIA_UserData, &MenuHookIndex); if (MenuHookIndex > 0 && MenuHookIndex < HOOKNDX_MAX) MenuHook = &inst->fpb_Hooks[MenuHookIndex]; d1(kprintf("%s/%ld: MenuHook=%08lx\n", __FUNC__, __LINE__, MenuHook)); if (MenuHook) DoMethod(inst->fpb_Objects[OBJNDX_Group_Main], MUIM_CallHook, MenuHook, MenuObj); Result = 0; } break; default: Result = DoSuperMethodA(cl, obj, msg); } return Result; } DISPATCHER_END //---------------------------------------------------------------------------- struct FtAttribute *AddAttribute(struct FileTypesListEntry *fte, enum ftAttributeType AttrType, ULONG DataLength, const void *AttrData) { struct FtAttribute *fta; fta = malloc(sizeof(struct FtAttribute) + DataLength); d1(kprintf(__FILE__ "/%s/%ld: fta=%08lx size=%lu\n", __FUNC__, __LINE__, \ fta, sizeof(struct FtAttribute) + DataLength)); if (fta) { AddTail(&fte->ftle_AttributesList, &fta->fta_Node); fta->fta_Type = AttrType; fta->fta_Length = DataLength; memcpy(fta->fta_Data, AttrData, DataLength); } return fta; } static void DisposeAttribute(struct FtAttribute *fta) { free(fta); } static void CleanupAttributes(struct List *AttributesList) { struct FtAttribute *fta; while ((fta = (struct FtAttribute *) RemHead(AttributesList))) { DisposeAttribute(fta); } } //---------------------------------------------------------------------------- CONST_STRPTR GetAttributeName(enum ftAttributeType Type) { CONST_STRPTR Name; switch (Type) { case ATTRTYPE_FtDescription: Name = "DESCRIPTION"; break; case ATTRTYPE_PvPluginName: Name = "PREVIEWPLUGIN"; break; case ATTRTYPE_GroupOrientation: Name = "ORIENTATION"; break; case ATTRTYPE_MemberHideString: Name = "HIDE"; break; case ATTRTYPE_StringHAlign: Name = "HALIGN"; break; case ATTRTYPE_StringVAlign: Name = "VALIGN"; break; case ATTRTYPE_StringStyle: Name = "STYLE"; break; case ATTRTYPE_StringFont: Name = "FONT"; break; case ATTRTYPE_StringTTFont: Name = "TTFONT"; break; case ATTRTYPE_StringPen: Name = "TEXTPEN"; break; case ATTRTYPE_StringId: Name = "ID"; break; case ATTRTYPE_StringText: Name = "TEXT"; break; case ATTRTYPE_StringSrc: Name = "SRC"; break; case ATTRTYPE_SpaceSize: Name = "SIZE"; break; case ATTRTYPE_DtImageName: Name = "FILENAME"; break; case ATTRTYPE_UnselIconName: Name = "UNSELECTEDICON"; break; case ATTRTYPE_SelIconName: Name = "SELECTEDICON"; break; case ATTRTYPE_MenuItemName: Name = "NAME"; break; case ATTRTYPE_MenuCommKey: Name = "KEY"; break; case ATTRTYPE_MenuDefaultAction: Name = "DEFAULTACTION"; break; case ATTRTYPE_CommandName: Name = "NAME"; break; case ATTRTYPE_CommandStacksize: Name = "STACK"; break; case ATTRTYPE_CommandPriority: Name = "PRIORITY"; break; case ATTRTYPE_CommandWbArgs: Name = "WBARGS"; break; default: Name = "??unknown_Name??"; break; } return Name; } STRPTR GetAttributeValueString(const struct FtAttribute *fta, char *Buffer, size_t BuffLen) { if (NULL == fta) strcpy(Buffer, ""); else { switch (fta->fta_Type) { case ATTRTYPE_FtDescription: case ATTRTYPE_PvPluginName: case ATTRTYPE_StringHAlign: case ATTRTYPE_StringVAlign: case ATTRTYPE_StringStyle: case ATTRTYPE_StringFont: case ATTRTYPE_StringTTFont: case ATTRTYPE_StringPen: case ATTRTYPE_StringId: case ATTRTYPE_StringText: case ATTRTYPE_StringSrc: case ATTRTYPE_DtImageName: case ATTRTYPE_UnselIconName: case ATTRTYPE_SelIconName: case ATTRTYPE_MenuItemName: case ATTRTYPE_MenuCommKey: case ATTRTYPE_CommandName: case ATTRTYPE_MemberHideString: stccpy(Buffer, (char *)fta->fta_Data, BuffLen); break; case ATTRTYPE_GroupOrientation: { enum TTLayoutMode *goEnum = (enum TTLayoutMode *)fta->fta_Data; switch (*goEnum) { case TTL_Horizontal: stccpy(Buffer, "horizontal", BuffLen); break; case TTL_Vertical: stccpy(Buffer, "vertical", BuffLen); break; default: sprintf(Buffer, "??unknown_Orientation??:%d", *goEnum); break; } } break; case ATTRTYPE_CommandStacksize: case ATTRTYPE_CommandPriority: case ATTRTYPE_SpaceSize: sprintf(Buffer, "%ld", *((ULONG *) fta->fta_Data)); break; case ATTRTYPE_CommandWbArgs: case ATTRTYPE_MenuDefaultAction: strcpy(Buffer, ""); break; default: stccpy(Buffer, "??unknown_AttrType??", BuffLen); break; } } return Buffer; } static const struct FtAttribute *FindAttribute(const struct FileTypesListEntry *fte, enum FtEntryType AttrType) { struct FtAttribute *fta; for (fta = (struct FtAttribute *) fte->ftle_AttributesList.lh_Head; fta != (struct FtAttribute *) &fte->ftle_AttributesList.lh_Tail; fta = (struct FtAttribute *) fta->fta_Node.ln_Succ) { if (AttrType == (enum FtEntryType)fta->fta_Type) return fta; } return NULL; } static void RemoveAttribute(struct FileTypesListEntry *fte, enum ftAttributeType AttrType) { struct FtAttribute *fta; for (fta = (struct FtAttribute *) fte->ftle_AttributesList.lh_Head; fta != (struct FtAttribute *) &fte->ftle_AttributesList.lh_Tail; fta = (struct FtAttribute *) fta->fta_Node.ln_Succ) { if (AttrType == fta->fta_Type) { Remove(&fta->fta_Node); free(fta); break; } } } static struct FileTypesListEntry *FindChildByType(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tn, enum FtEntryType RequestedType) { struct FileTypesListEntry *fte = NULL; d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); if (tn) { tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tn, MUIV_NListtree_GetEntry_Position_Head, 0); fte = tn ? ((struct FileTypesListEntry *) tn->tn_User) : NULL; while (fte && fte->ftle_EntryType != RequestedType) { tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tn, MUIV_NListtree_GetEntry_Position_Next, 0); fte = tn ? ((struct FileTypesListEntry *) tn->tn_User) : NULL; } } return fte; } static BOOL HasChildren(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tn) { BOOL HasChildren = FALSE; d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); if (tn) { tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tn, MUIV_NListtree_GetEntry_Position_Head, 0); if (tn) HasChildren = TRUE; } return HasChildren; } //---------------------------------------------------------------------------- CONST_STRPTR GetNameFromEntryType(enum ftAttributeType EntryType) { if (EntryType >= 0 && EntryType < Sizeof(EntryTypeNames)) return GetLocString(EntryTypeNames[EntryType]); else return "??unknown_EntryType??"; } //---------------------------------------------------------------------------- static void AddDefaultAttributes(struct FileTypesPrefsInst *inst, struct FileTypesListEntry *fte) { ULONG n; for (n = 0; n < Sizeof(AllEntryAttributes); n++) { if (AllEntryAttributes[n].eat_EntryType == fte->ftle_EntryType) { ULONG m; d1(kprintf("%s/%ld: EntryType=%lu\n", __FUNC__, __LINE__, AllEntryAttributes[n].eat_EntryType)); for (m = 0; m < AllEntryAttributes[n].eat_AttrCount; m++) { if (IsAttrRequired(fte, &AllEntryAttributes[n].eat_AttrArray[m])) { d1(kprintf("%s/%ld: Add AttrType=%lu\n", __FUNC__, __LINE__, \ AllEntryAttributes[n].eat_AttrArray[m].atd_Type)); AddNewAttribute(inst, fte, AllEntryAttributes[n].eat_AttrArray[m].atd_Type); } } break; } } } //---------------------------------------------------------------------------- static void SetAddableAttributes(struct FileTypesPrefsInst *inst, struct FileTypesListEntry *fte) { ULONG Added = 0; ULONG n; set(inst->fpb_Objects[OBJNDX_AddAttrList], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); DoMethod(inst->fpb_Objects[OBJNDX_AddAttrList], MUIM_NList_Clear); for (n = 0; n < Sizeof(AllEntryAttributes); n++) { if (AllEntryAttributes[n].eat_EntryType == fte->ftle_EntryType) { ULONG m; for (m = 0; m < AllEntryAttributes[n].eat_AttrCount; m++) { if (NULL == FindAttribute(fte, AllEntryAttributes[n].eat_AttrArray[m].atd_Type)) { Added++; DoMethod(inst->fpb_Objects[OBJNDX_AddAttrList], MUIM_NList_InsertSingle, AllEntryAttributes[n].eat_AttrArray[m].atd_Type, MUIV_NList_Insert_Sorted); } } break; } } d1(kprintf("%s/%ld: Added=%lu\n", __FUNC__, __LINE__, Added)); set(inst->fpb_Objects[OBJNDX_AddAttrPopObject], MUIA_Disabled, 0 == Added); set(inst->fpb_Objects[OBJNDX_AddAttrList], MUIA_NList_Quiet, MUIV_NList_Quiet_None); } //---------------------------------------------------------------------------- static void UpdateAttributes(struct FileTypesPrefsInst *inst, struct FileTypesListEntry *fte) { struct FtAttribute *fta; struct FileTypesListEntry *ftePopupMenu; struct FileTypesListEntry *fteToolTip; const ULONG *AddEntryList; struct MUI_NListtree_TreeNode *tn; tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); DoMethod(inst->fpb_Objects[OBJNDX_AddEntryPopObject], MUIM_Popstring_Close, FALSE); DoMethod(inst->fpb_Objects[OBJNDX_AddAttrPopObject], MUIM_Popstring_Close, FALSE); set(inst->fpb_Objects[OBJNDX_AttrList], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); set(inst->fpb_Objects[OBJNDX_AddEntryList], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_NList_Clear); DoMethod(inst->fpb_Objects[OBJNDX_AddEntryList], MUIM_NList_Clear); set(inst->fpb_Objects[OBJNDX_ButtonRemoveAttribute], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_ButtonEditAttribute], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Menu_CopyAttr], MUIA_Menuitem_Enabled, FALSE); set(inst->fpb_Objects[OBJNDX_Menu_CutAttr], MUIA_Menuitem_Enabled, FALSE); for (fta = (struct FtAttribute *) fte->ftle_AttributesList.lh_Head; fta != (struct FtAttribute *) &fte->ftle_AttributesList.lh_Tail; fta = (struct FtAttribute *) fta->fta_Node.ln_Succ) { DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_NList_InsertSingle, fta, MUIV_NList_Insert_Bottom); } switch (fte->ftle_EntryType) { case ENTRYTYPE_FileType: ftePopupMenu = FindChildByType(inst, tn, ENTRYTYPE_PopupMenu); fteToolTip = FindChildByType(inst, tn, ENTRYTYPE_ToolTip); if (ftePopupMenu) { if (fteToolTip) AddEntryList = NULL; else AddEntryList = AddFiletypeStringsTT; } else { if (fteToolTip) AddEntryList = AddFiletypeStringsPM; else AddEntryList = AddFiletypeStringsPMTT; } break; case ENTRYTYPE_PopupMenu: AddEntryList = AddPopupMenuStrings; break; case ENTRYTYPE_PopupMenu_SubMenu: AddEntryList = AddSubMenuStrings; break; case ENTRYTYPE_PopupMenu_MenuItem: AddEntryList = AddMenuItemStrings; break; case ENTRYTYPE_ToolTip: AddEntryList = AddToolTipStrings; break; case ENTRYTYPE_ToolTip_Group: AddEntryList = AddGroupStrings; break; case ENTRYTYPE_ToolTip_Member: // only 1 child allowed if (HasChildren(inst, tn)) AddEntryList = NULL; else AddEntryList = AddMemberStrings; break; default: AddEntryList = NULL; break; } SetAddableAttributes(inst, fte); if (AddEntryList) { DoMethod(inst->fpb_Objects[OBJNDX_AddEntryList], MUIM_NList_Insert, AddEntryList, -1, MUIV_NList_Insert_Sorted); } set(inst->fpb_Objects[OBJNDX_AddEntryList], MUIA_NList_Quiet, MUIV_NList_Quiet_None); set(inst->fpb_Objects[OBJNDX_AttrList], MUIA_NList_Quiet, MUIV_NList_Quiet_None); set(inst->fpb_Objects[OBJNDX_AddEntryPopObject], MUIA_Disabled, NULL == AddEntryList); } //---------------------------------------------------------------------------- static void AddNewAttribute(struct FileTypesPrefsInst *inst, struct FileTypesListEntry *fte, enum ftAttributeType AttrType) { ULONG n; d1(kprintf("%s/%ld: inst=%08lx EntryType=%ld AttrType=%ld\n", __FUNC__, __LINE__, inst, fte->ftle_EntryType, AttrType)); set(inst->fpb_Objects[OBJNDX_AttrList], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); for (n = 0; n < Sizeof(AllEntryAttributes); n++) { if (AllEntryAttributes[n].eat_EntryType == fte->ftle_EntryType) { ULONG m; d1(kprintf("%s/%ld: AttrCount=%lu\n", __FUNC__, __LINE__, AllEntryAttributes[n].eat_AttrCount)); for (m = 0; m < AllEntryAttributes[n].eat_AttrCount; m++) { const struct AttrDefaultValue *avd = &AllEntryAttributes[n].eat_AttrArray[m].atd_DefaultContents; d1(kprintf("%s/%ld: atd_Type=%lu\n", __FUNC__, __LINE__, AllEntryAttributes[n].eat_AttrArray[m].atd_Type)); if (AllEntryAttributes[n].eat_AttrArray[m].atd_Type == AttrType) { struct FtAttribute *ftaNew = NULL; switch (avd->avd_Type) { case ATTRDEFTYPE_None: ftaNew = AddAttribute(fte, AllEntryAttributes[n].eat_AttrArray[m].atd_Type, 0, NULL); break; case ATTRDEFTYPE_ULong: ftaNew = AddAttribute(fte, AllEntryAttributes[n].eat_AttrArray[m].atd_Type, sizeof(ULONG), &avd->avd_ULongValue); break; case ATTRDEFTYPE_LocString: ftaNew = AddAttribute(fte, AllEntryAttributes[n].eat_AttrArray[m].atd_Type, 1 + strlen(GetLocString(avd->avd_ULongValue)), GetLocString(avd->avd_ULongValue)); break; case ATTRDEFTYPE_String: case ATTRDEFTYPE_String2: case ATTRDEFTYPE_PathName: case ATTRDEFTYPE_FileName: case ATTRDEFTYPE_FontString: case ATTRDEFTYPE_TTFontString: ftaNew = AddAttribute(fte, AllEntryAttributes[n].eat_AttrArray[m].atd_Type, 1 + strlen(avd->avd_StringValue), avd->avd_StringValue); break; } if (ftaNew) { DoMethod(inst->fpb_Objects[OBJNDX_AttrList], MUIM_NList_InsertSingle, ftaNew, MUIV_NList_Insert_Bottom); } break; } } } } set(inst->fpb_Objects[OBJNDX_AttrList], MUIA_NList_Quiet, MUIV_NList_Quiet_None); EnablePasteAttrMenuEntry(inst); } //---------------------------------------------------------------------------- static void BeginSetMenuDefaultAction(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tnMenuItem) { struct MUI_NListtree_TreeNode *tn = tnMenuItem; struct FileTypesListEntry *fte = (struct FileTypesListEntry *) tn->tn_User; // Find root of PopupMenu while (tn && ENTRYTYPE_PopupMenu != fte->ftle_EntryType) { tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tn, MUIV_NListtree_GetEntry_Position_Parent, 0); if (tn) fte = (struct FileTypesListEntry *) tn->tn_User; } d1(kprintf("%s/%ld: Head tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); // Now walk through entire Menu and remove "DefaultAction" atrribute from every MenuItem // except <tnMenuItem> SetMenuDefaultAction(inst, tn, tnMenuItem); } static void SetMenuDefaultAction(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tnMenu, struct MUI_NListtree_TreeNode *tnNewDefault) { struct MUI_NListtree_TreeNode *tn; tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tnMenu, MUIV_NListtree_GetEntry_Position_Head, 0); d1(kprintf("%s/%ld: Head tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); while (tn) { struct FileTypesListEntry *fte = (struct FileTypesListEntry *) tn->tn_User; d1(kprintf("%s/%ld: tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); switch (fte->ftle_EntryType) { case ENTRYTYPE_PopupMenu_MenuItem: if (tn != tnNewDefault) { const struct FtAttribute *fta = FindAttribute(fte, ATTRTYPE_MenuDefaultAction); d1(kprintf("%s/%ld: fta=%08lx\n", __FUNC__, __LINE__, fta)); if (fta) { RemoveAttribute(fte, ATTRTYPE_MenuDefaultAction); DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Redraw, tn, 0); } } break; case ENTRYTYPE_PopupMenu_SubMenu: SetMenuDefaultAction(inst, tn, tnNewDefault); break; default: break; } tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tn, MUIV_NListtree_GetEntry_Position_Next, 0); } } //---------------------------------------------------------------------------- static const struct AttributeDef *GetAttributeDef(enum ftAttributeType AttrType, enum FtEntryType fteEntryType) { const struct EntryAttributes *eat; ULONG n; for (n = 0, eat = AllEntryAttributes; n < Sizeof(AllEntryAttributes); n++, eat++) { if (fteEntryType == eat->eat_EntryType) { const struct AttributeDef *atd = eat->eat_AttrArray; ULONG m; for (m = 0; m < eat->eat_AttrCount; m++, atd++) { if (atd->atd_Type == AttrType) return atd; } break; } } return NULL; } //---------------------------------------------------------------------------- static void FillListOfAttributeValues(struct FileTypesPrefsInst *inst, const struct FileTypesListEntry *fte, const struct AttributeDef *atd, const struct AttrListEntry *Attr) { ULONG n; set(inst->fpb_Objects[OBJNDX_List_AttributeSelectValue], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); DoMethod(inst->fpb_Objects[OBJNDX_List_AttributeSelectValue], MUIM_NList_Clear); d1(KPrintF("%s/%ld: atd_NumberOfValues=%ld\n", __FUNC__, __LINE__, atd->atd_NumberOfValues)); if (ATTRDEFTYPE_String2 == atd->atd_PossibleContents[0].avd_Type) { set(inst->fpb_Objects[OBJNDX_List_AttributeSelectValue], MUIA_NList_Format, ","); } else { set(inst->fpb_Objects[OBJNDX_List_AttributeSelectValue], MUIA_NList_Format, ""); } for (n = 0; n < atd->atd_NumberOfValues; n++) { size_t len; struct EditAttrListEntry *eal; len = sizeof(struct EditAttrListEntry); switch (atd->atd_PossibleContents[n].avd_Type) { case ATTRDEFTYPE_ULong: len += sizeof(atd->atd_PossibleContents[n].avd_ULongValue); break; case ATTRDEFTYPE_LocString: case ATTRDEFTYPE_String: case ATTRDEFTYPE_String2: case ATTRDEFTYPE_PathName: case ATTRDEFTYPE_FileName: case ATTRDEFTYPE_FontString: case ATTRDEFTYPE_TTFontString: len += 1 + strlen(atd->atd_PossibleContents[n].avd_StringValue); break; default: break; } eal = malloc(len); if (eal) { d1(KPrintF("%s/%ld: avd_Type=%ld\n", __FUNC__, __LINE__, atd->atd_PossibleContents[n].avd_Type)); eal->eal_fta = Attr->ale_Attribute; eal->eal_fta.fta_Value2 = 0; switch (atd->atd_PossibleContents[n].avd_Type) { case ATTRDEFTYPE_ULong: memcpy(eal->eal_fta.fta_Data, &atd->atd_PossibleContents[n].avd_ULongValue, sizeof(ULONG)); eal->eal_fta.fta_Length = sizeof(ULONG); break; case ATTRDEFTYPE_LocString: case ATTRDEFTYPE_String: case ATTRDEFTYPE_PathName: case ATTRDEFTYPE_FileName: case ATTRDEFTYPE_FontString: case ATTRDEFTYPE_TTFontString: strcpy((char *)eal->eal_fta.fta_Data, atd->atd_PossibleContents[n].avd_StringValue); eal->eal_fta.fta_Length = strlen(atd->atd_PossibleContents[n].avd_StringValue); break; case ATTRDEFTYPE_String2: eal->eal_fta.fta_Value2 = atd->atd_PossibleContents[n].avd_ULongValue; strcpy((char *)eal->eal_fta.fta_Data, atd->atd_PossibleContents[n].avd_StringValue); eal->eal_fta.fta_Length = strlen(atd->atd_PossibleContents[n].avd_StringValue); break; default: break; } DoMethod(inst->fpb_Objects[OBJNDX_List_AttributeSelectValue], MUIM_NList_InsertSingle, eal, MUIV_NList_Insert_Bottom); free(eal); } } set(inst->fpb_Objects[OBJNDX_List_AttributeSelectValue], MUIA_NList_Quiet, MUIV_NList_Quiet_None); } //---------------------------------------------------------------------------- static ULONG ConvertGroupOrientationFromString(CONST_STRPTR DisplayString) { ULONG Result = TTL_Horizontal; if (0 == Stricmp(DisplayString, "horizontal")) Result = TTL_Horizontal; else if (0 == Stricmp(DisplayString, "vertical")) Result = TTL_Vertical; return Result; } //---------------------------------------------------------------------------- static struct MUI_NListtree_TreeNode *CopyFileTypesEntry(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tnToListNode, struct MUI_NListtree_TreeNode *tnToPrevNode, struct MUI_NListtree_TreeNode *tnFrom, ULONG destList, ULONG srcList) { struct FileTypesListEntry *fteFrom = (struct FileTypesListEntry *) tnFrom->tn_User; struct FileTypesListEntry *fteTo; struct MUI_NListtree_TreeNode *tnNew; struct MUI_NListtree_TreeNode *tnChild; const struct FtAttribute *fta; if (NULL == tnFrom) return NULL; tnChild = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[srcList], MUIM_NListtree_GetEntry, tnFrom, MUIV_NListtree_GetEntry_Position_Head, 0); tnNew = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[destList], MUIM_NListtree_Insert, tnFrom->tn_Name, NULL, tnToListNode, tnToPrevNode, TNF_LIST | TNF_OPEN); fteTo = (struct FileTypesListEntry *) tnNew->tn_User; fteTo->ftle_EntryType = fteFrom->ftle_EntryType; fteTo->fte_ImageObject = NULL; // do not try to copy fte_ImageObject !! fteTo->fte_ImageIndex = 0; // Copy Attributes for (fta = (const struct FtAttribute *) fteFrom->ftle_AttributesList.lh_Head; fta != (const struct FtAttribute *) &fteFrom->ftle_AttributesList.lh_Tail; fta = (const struct FtAttribute *) fta->fta_Node.ln_Succ) { AddAttribute(fteTo, fta->fta_Type, fta->fta_Length, fta->fta_Data); } UpdateMenuImage(inst, destList, fteTo); // Copy Children while (tnChild) { d1(kprintf("%s/%ld: tnChild=%08lx <%s>\n", __FUNC__, __LINE__, tnChild, tnChild->tn_Name)); CopyFileTypesEntry(inst, tnNew, (struct MUI_NListtree_TreeNode *) MUIV_NListtree_Insert_PrevNode_Tail, tnChild, destList, srcList); tnChild = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[srcList], MUIM_NListtree_GetEntry, tnChild, MUIV_NListtree_GetEntry_Position_Next, 0); } return tnNew; } //---------------------------------------------------------------------------- static BOOL MayPasteOnto(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tnTo, struct MUI_NListtree_TreeNode *tnFrom) { const struct FileTypesListEntry *fteFrom = (const struct FileTypesListEntry *) tnFrom->tn_User; const struct FileTypesListEntry *fteTo = (const struct FileTypesListEntry *) tnTo->tn_User; BOOL MayPaste = FALSE; d1(kprintf("%s/%ld: fteTo=%08lx <%s> %ld fteFrom=%08lx <%s> %ld\n", __FUNC__, __LINE__, \ fteTo, tnTo->tn_Name, fteTo->ftle_EntryType, fteFrom, tnFrom->tn_Name, fteFrom->ftle_EntryType)); if (fteTo->ftle_EntryType >= ENTRYTYPE_MAX || fteFrom->ftle_EntryType >= ENTRYTYPE_MAX) return FALSE; d1(kprintf("%s/%ld: MayPaste=%ld\n", __FUNC__, __LINE__, \ MayPasteIntoMatrix[fteTo->ftle_EntryType][fteFrom->ftle_EntryType])); if (MayPasteIntoMatrix[fteTo->ftle_EntryType][fteFrom->ftle_EntryType]) { switch (fteTo->ftle_EntryType) { case ENTRYTYPE_FileType: // There is only one Popupmenu and one Tooltip allowed! switch (fteFrom->ftle_EntryType) { case ENTRYTYPE_PopupMenu: if (NULL == FindChildByType(inst, tnTo, ENTRYTYPE_PopupMenu)) MayPaste = TRUE; break; case ENTRYTYPE_ToolTip: if (NULL == FindChildByType(inst, tnTo, ENTRYTYPE_ToolTip)) MayPaste = TRUE; break; default: break; } break; case ENTRYTYPE_ToolTip_Member: // only 1 child allowed if (!HasChildren(inst, tnTo)) MayPaste = TRUE; break; default: MayPaste = TRUE; break; } } return MayPaste; } static struct MUI_NListtree_TreeNode *MayPasteBelow(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tnTo, struct MUI_NListtree_TreeNode *tnFrom) { const struct FileTypesListEntry *fteFrom = (const struct FileTypesListEntry *) tnFrom->tn_User; const struct FileTypesListEntry *fteTo = (const struct FileTypesListEntry *) tnTo->tn_User; struct MUI_NListtree_TreeNode *tn; BOOL Result = FALSE; d1(KPrintF("%s/%ld: START fteTo=%08lx <%s> %ld fteFrom=%08lx <%s> %ld\n", __FUNC__, __LINE__, \ fteTo, tnTo->tn_Name, fteTo->ftle_EntryType, fteFrom, tnFrom->tn_Name, fteFrom->ftle_EntryType)); do { if (fteTo->ftle_EntryType >= ENTRYTYPE_MAX || fteFrom->ftle_EntryType >= ENTRYTYPE_MAX) break; if (tnTo->tn_Flags & TNF_OPEN) { tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tnTo, MUIV_NListtree_GetEntry_Position_Head, MUIV_NListtree_GetEntry_Flag_Visible); d1(KPrintF("%s/%ld: tn=%08lx\n", __FUNC__, __LINE__, tn)); if (tn) break; } do { tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tnTo, MUIV_NListtree_GetEntry_Position_Next, MUIV_NListtree_GetEntry_Flag_SameLevel | MUIV_NListtree_GetEntry_Flag_Visible); d1(KPrintF("%s/%ld: tn=%08lx\n", __FUNC__, __LINE__, tn)); if (tn) break; tnTo = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tnTo, MUIV_NListtree_GetEntry_Position_Parent, MUIV_NListtree_GetEntry_Flag_Visible); d1(KPrintF("%s/%ld: tnTo=%08lx\n", __FUNC__, __LINE__, tnTo)); if (tnTo) { fteTo = (const struct FileTypesListEntry *) tnTo->tn_User; Result = MayPasteAfterMatrix[fteTo->ftle_EntryType][fteFrom->ftle_EntryType]; } } while (tnTo && !Result); if (NULL == tnTo) break; Result = MayPasteAfterMatrix[fteTo->ftle_EntryType][fteFrom->ftle_EntryType]; } while (0); d1(KPrintF("%s/%ld: END MayPaste=%ld\n", __FUNC__, __LINE__, Result)); return Result ? tnTo : NULL; } //---------------------------------------------------------------------------- static void EnablePasteMenuEntry(struct FileTypesPrefsInst *inst) { struct MUI_NListtree_TreeNode *tnMain; struct MUI_NListtree_TreeNode *tnShadow; tnMain = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); tnShadow = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_ShadowListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_Insert_ListNode_Root, MUIV_NListtree_GetEntry_Position_Head, 0); if (tnMain && tnShadow && ( MayPasteBelow(inst, tnMain, tnShadow) || MayPasteOnto(inst, tnMain, tnShadow) )) { set(inst->fpb_Objects[OBJNDX_Menu_Paste], MUIA_Menuitem_Enabled, TRUE); } else { set(inst->fpb_Objects[OBJNDX_Menu_Paste], MUIA_Menuitem_Enabled, FALSE); } } //---------------------------------------------------------------------------- static BOOL MayPasteAttr(struct FileTypesPrefsInst *inst, const struct FileTypesListEntry *fte, const struct AttrListEntry *Attr) { d1(kprintf("%s/%ld: \n", __FUNC__, __LINE__)); if (NULL == Attr) return FALSE; if (NULL == FindAttribute(fte, Attr->ale_Attribute.fta_Type)) { ULONG n; d1(kprintf("%s/%ld: Attr=%08lx Type=%ld\n", __FUNC__, __LINE__, Attr, Attr->ale_Attribute.fta_Type)); for (n = 0; n < Sizeof(AllEntryAttributes); n++) { if (AllEntryAttributes[n].eat_EntryType == fte->ftle_EntryType) { ULONG m; d1(kprintf("%s/%ld: AttrCount=%ld\n", __FUNC__, __LINE__, AllEntryAttributes[n].eat_AttrCount)); for (m = 0; m < AllEntryAttributes[n].eat_AttrCount; m++) { if (Attr->ale_Attribute.fta_Type == AllEntryAttributes[n].eat_AttrArray[m].atd_Type) { d1(kprintf("%s/%ld: Found!\n", __FUNC__, __LINE__)); return TRUE; } } break; } } } d1(kprintf("%s/%ld: May not paste!\n", __FUNC__, __LINE__)); return FALSE; } //---------------------------------------------------------------------------- static void EnablePasteAttrMenuEntry(struct FileTypesPrefsInst *inst) { struct MUI_NListtree_TreeNode *tn; struct AttrListEntry *Attr = NULL; set(inst->fpb_Objects[OBJNDX_Menu_PasteAttr], MUIA_Menuitem_Enabled, FALSE); tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Active, MUIV_NListtree_GetEntry_Position_Active, 0); d1(kprintf("%s/%ld: active tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn ? tn->tn_Name : (STRPTR) "")); if (tn) { DoMethod(inst->fpb_Objects[OBJNDX_ShadowAttrList], MUIM_NList_GetEntry, 0, &Attr); d1(kprintf("%s/%ld: Attr=%08lx\n", __FUNC__, __LINE__, Attr)); if (Attr) { struct FileTypesListEntry *fte = (struct FileTypesListEntry *) tn->tn_User; if (MayPasteAttr(inst, fte, Attr)) set(inst->fpb_Objects[OBJNDX_Menu_PasteAttr], MUIA_Menuitem_Enabled, TRUE); } } } //---------------------------------------------------------------------------- static BOOL IsAttrRequired(struct FileTypesListEntry *fte, const struct AttributeDef *atd) { ULONG n; if (!atd->atd_Required) return FALSE; for (n = 0; n < atd->atd_ExcludeCount; n++) { if (NULL != FindAttribute(fte, atd->atd_Exclude[n])) { // if one of the atd_Exclude[] members is already present // in the Attribute list, this Attribute is NOT required return FALSE; } } return TRUE; } //---------------------------------------------------------------------------- static void EntryHasChanged(struct FileTypesPrefsInst *inst, struct MUI_NListtree_TreeNode *tn) { struct FileTypesListEntry *fte = (struct FileTypesListEntry *) tn->tn_User; set(inst->fpb_Objects[OBJNDX_MainListView], MUIA_NList_Quiet, MUIV_NList_Quiet_Full); SetChangedFlag(inst, TRUE); fte->ftle_Changed = TRUE; DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Redraw, tn, 0); // set CHANGED flag for all parent entries up to the ENTRYTYPE_FileType while (tn && ENTRYTYPE_FileType != fte->ftle_EntryType) { tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tn, MUIV_NListtree_GetEntry_Position_Parent, 0); if (tn) { fte = (struct FileTypesListEntry *) tn->tn_User; fte->ftle_Changed = TRUE; DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Redraw, tn, 0); } } set(inst->fpb_Objects[OBJNDX_MainListView], MUIA_NList_Quiet, MUIV_NList_Quiet_None); } //---------------------------------------------------------------------------- static void SetChangedFlag(struct FileTypesPrefsInst *inst, BOOL changed) { if (changed != inst->fpb_Changed) { set(inst->fpb_Objects[OBJNDX_Lamp_Changed], MUIA_Lamp_Color, changed ? MUIV_Lamp_Color_Ok : MUIV_Lamp_Color_Off); inst->fpb_Changed = changed; } } //---------------------------------------------------------------------------- static void BuildTTDescFromAttrList(char *buffer, size_t length, struct TagItem *AttrList) { IPTR FontStyle; IPTR FontWeight; IPTR FontSize; const STRPTR *FontFamilyTable; FontStyle = GetTagData(TT_FontStyle, TT_FontStyle_Regular, AttrList); FontWeight = GetTagData(TT_FontWeight, TT_FontWeight_Normal, AttrList); FontSize = GetTagData(TT_FontSize, 12, AttrList); FontFamilyTable = (const STRPTR *) GetTagData(TT_FamilyTable, (IPTR) NULL, AttrList); sprintf(buffer, "%ld/%ld/%ld/%s", FontStyle, FontWeight, FontSize, FontFamilyTable[0]); } //----------------------------------------------------------------- static BOOL ParseTTFontFromDesc(CONST_STRPTR FontDesc, IPTR *FontStyle, IPTR *FontWeight, IPTR *FontSize, STRPTR FontName, size_t FontNameSize) { CONST_STRPTR lp; strcpy(FontName, ""); *FontStyle = 0; *FontWeight = 0; *FontSize = 0; // Font Desc format: // "style/weight/size/fontname" if (3 != sscanf(FontDesc, "%ld/%ld/%ld", FontStyle, FontWeight, FontSize)) return FALSE; lp = strchr(FontDesc, '/'); // Find "/" between style and weight if (NULL == lp) return FALSE; lp = strchr(lp + 1, '/'); // Find "/" between weight and size if (NULL == lp) return FALSE; lp = strchr(lp + 1, '/'); // Find "/" between size and name if (NULL == lp) return FALSE; // copy font name stccpy(FontName, 1 + lp, FontNameSize); return TRUE; } //----------------------------------------------------------------- void HideEmptyNodes(struct FileTypesPrefsInst *inst) { struct MUI_NListtree_TreeNode *tn; tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Root, MUIV_NListtree_GetEntry_Position_Head, 0); d1(kprintf("%s/%ld: tn=%08lx\n", __FUNC__, __LINE__, tn)); while (tn) { struct MUI_NListtree_TreeNode *tnNext; struct FileTypesListEntry *fte = (struct FileTypesListEntry *) tn->tn_User; d1(kprintf("%s/%ld: tn=%08lx <%s>\n", __FUNC__, __LINE__, tn, tn->tn_Name)); if (!HasChildren(inst, tn) && IsListEmpty(&fte->ftle_AttributesList)) { struct MUI_NListtree_TreeNode *tnNew; struct FileTypesListEntry *fteNew; d1(kprintf("%s/%ld: tn=%08lx\n", __FUNC__, __LINE__, tn)); d1(kprintf("%s/%ld: filetype <%s> \n", __FUNC__, __LINE__, tn->tn_Name)); tnNew = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_HiddenListTree], MUIM_NListtree_Insert, tn->tn_Name, NULL, MUIV_NListtree_Insert_ListNode_Root, MUIV_NListtree_Insert_PrevNode_Sorted, TNF_LIST); d1(kprintf("%s/%ld: tnNew=%08lx\n", __FUNC__, __LINE__, tnNew)); fteNew = (struct FileTypesListEntry *) tnNew->tn_User; fteNew->ftle_EntryType = ENTRYTYPE_FileType; } tnNext = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_GetEntry, tn, MUIV_NListtree_GetEntry_Position_Next, MUIV_NListtree_GetEntry_Flag_SameLevel); if (!HasChildren(inst, tn) && IsListEmpty(&fte->ftle_AttributesList)) { DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Remove, MUIV_NListtree_Remove_ListNode_Active, tn, 0); } tn = tnNext; } } //----------------------------------------------------------------- static void ShowHiddenNodes(struct FileTypesPrefsInst *inst) { struct MUI_NListtree_TreeNode *tn; tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_HiddenListTree], MUIM_NListtree_GetEntry, MUIV_NListtree_GetEntry_ListNode_Root, MUIV_NListtree_GetEntry_Position_Head, 0); d1(kprintf("%s/%ld: tn=%08lx\n", __FUNC__, __LINE__, tn)); while (tn) { struct MUI_NListtree_TreeNode *tnNew; struct FileTypesListEntry *fteNew; d1(kprintf("%s/%ld: tn=%08lx\n", __FUNC__, __LINE__, tn)); d1(kprintf("%s/%ld: filetype <%s> \n", __FUNC__, __LINE__, tn->tn_Name)); tnNew = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_MainListTree], MUIM_NListtree_Insert, tn->tn_Name, NULL, MUIV_NListtree_Insert_ListNode_Root, MUIV_NListtree_Insert_PrevNode_Sorted, TNF_LIST); d1(kprintf("%s/%ld: tnNew=%08lx\n", __FUNC__, __LINE__, tnNew)); fteNew = (struct FileTypesListEntry *) tnNew->tn_User; fteNew->ftle_EntryType = ENTRYTYPE_FileType; tn = (struct MUI_NListtree_TreeNode *) DoMethod(inst->fpb_Objects[OBJNDX_HiddenListTree], MUIM_NListtree_GetEntry, tn, MUIV_NListtree_GetEntry_Position_Next, MUIV_NListtree_GetEntry_Flag_SameLevel); } DoMethod(inst->fpb_Objects[OBJNDX_HiddenListTree], MUIM_NListtree_Remove, MUIV_NListtree_Remove_ListNode_Root, MUIV_NListtree_Remove_TreeNode_All, 0); } //----------------------------------------------------------------- static void ParseToolTypes(struct FileTypesPrefsInst *inst, struct MUIP_ScalosPrefs_ParseToolTypes *ptt) { STRPTR tt; d1(kprintf("%s/%ld: start ptt=%08lx tooltypes=%08lx\n", __FUNC__, __LINE__, ptt, ptt->ToolTypes)); d1(kprintf("%s/%ld: start tooltypes=%08lx %08lx %08lx\n", __FUNC__, __LINE__, ptt, ptt->ToolTypes[0], ptt->ToolTypes[1], ptt->ToolTypes[2])); tt = FindToolType(ptt->ToolTypes, "HIDEEMPTYENTRIES"); d1(kprintf("%s/%ld: tt=%08lx\n", __FUNC__, __LINE__, tt)); if (tt) { d1(kprintf("%s/%ld:\n", __FUNC__, __LINE__)); if (MatchToolValue(tt, "YES")) inst->fpb_HideEmptyNodes = TRUE; else if (MatchToolValue(tt, "NO")) inst->fpb_HideEmptyNodes = FALSE; d1(kprintf("%s/%ld:\n", __FUNC__, __LINE__)); } if (inst->fpb_Objects[OBJNDX_Menu_HideEmptyEntries]) set(inst->fpb_Objects[OBJNDX_Menu_HideEmptyEntries], MUIA_Menuitem_Checked, inst->fpb_HideEmptyNodes); d1(kprintf("%s/%ld: end\n", __FUNC__, __LINE__)); } //---------------------------------------------------------------------------- static LONG ReadScalosPrefs(struct FileTypesPrefsInst *inst, CONST_STRPTR PrefsFileName) { LONG lID; APTR p_MyPrefsHandle; p_MyPrefsHandle = AllocPrefsHandle("ScalosPrefs"); lID = ID_MAIN; if (p_MyPrefsHandle) { CONST_STRPTR prefDefIconPath; ReadPrefsHandle(p_MyPrefsHandle, PrefsFileName); GetPreferences(p_MyPrefsHandle, lID, SCP_TTfAntialiasing, (APTR)&inst->fpb_TTfAntialias, sizeof(inst->fpb_TTfAntialias) ); // BYTE GetPreferences(p_MyPrefsHandle, lID, SCP_TTfGamma, (APTR)&inst->fpb_TTfGamma, sizeof(inst->fpb_TTfGamma) ); inst->fpb_TTfGamma = SCA_BE2WORD(inst->fpb_TTfGamma); prefDefIconPath = GetPrefsConfigString(p_MyPrefsHandle, SCP_PathsDefIcons, "ENV:sys"); stccpy(inst->fpb_DefIconPath, prefDefIconPath, sizeof(inst->fpb_DefIconPath)); FreePrefsHandle(p_MyPrefsHandle); } return RETURN_OK; } //---------------------------------------------------------------------------- static CONST_STRPTR GetPrefsConfigString(APTR prefsHandle, ULONG Id, CONST_STRPTR DefaultString) { struct PrefsStruct *ps = FindPreferences(prefsHandle, ID_MAIN, Id); if (ps) return (CONST_STRPTR) PS_DATA(ps); return DefaultString; } //--------------------------------------------------------------- BOOL initPlugin(struct PluginBase *PluginBase) { MajorVersion = PluginBase->pl_LibNode.lib_Version; MinorVersion = PluginBase->pl_LibNode.lib_Revision; d1(kprintf("%s/%ld:\n", __FUNC__, __LINE__)); d1(kprintf("%s/%ld: PluginBase=%08lx procName=<%s>\n", __FUNC__, __LINE__, \ PluginBase, FindTask(NULL)->tc_Node.ln_Name)); d1(kprintf("%s/%ld:\n", __FUNC__, __LINE__)); if (!OpenLibraries()) return FALSE; #if !defined(__amigaos4__) && !defined(__AROS__) if (_STI_240_InitMemFunctions()) return FALSE; #endif FontSampleClass = InitFontSampleClass(); if (NULL == FontSampleClass) return FALSE; FileTypesPrefsClass = MUI_CreateCustomClass(&PluginBase->pl_LibNode, MUIC_Group, NULL, sizeof(struct FileTypesPrefsInst), DISPATCHER_REF(FileTypesPrefs)); d1(kprintf("%s/%ld: FileTypesPrefsClass=%08lx\n", __FUNC__, __LINE__, FileTypesPrefsClass)); if (NULL == FileTypesPrefsClass) return FALSE; d1(kprintf("%s/%ld: FileTypesPrefsCatalog=%08lx\n", __FUNC__, __LINE__, FileTypesPrefsCatalog)); d1(kprintf("%s/%ld: LocaleBase=%08lx\n", __FUNC__, __LINE__, LocaleBase)); if (LocaleBase) { d1(kprintf("%s/%ld: FileTypesPrefsLocale=%08lx\n", __FUNC__, __LINE__, FileTypesPrefsLocale)); if (NULL == FileTypesPrefsLocale) FileTypesPrefsLocale = OpenLocale(NULL); d1(kprintf("%s/%ld: FileTypesPrefsLocale=%08lx\n", __FUNC__, __LINE__, FileTypesPrefsLocale)); if (FileTypesPrefsLocale) { d1(kprintf("%s/%ld: FileTypesPrefsCatalog=%08lx\n", __FUNC__, __LINE__, FileTypesPrefsCatalog)); if (NULL == FileTypesPrefsCatalog) { FileTypesPrefsCatalog = OpenCatalog(FileTypesPrefsLocale, (STRPTR) "Scalos/ScalosFileTypes.catalog", NULL); d1(kprintf("%s/%ld: \n", __FUNC__, __LINE__)); } } } if (!StaticsTranslated) { StaticsTranslated = TRUE; TranslateNewMenu(ContextMenuFileTypes); TranslateNewMenu(ContextMenuFileTypesActions); TranslateNewMenu(ContextMenus); TranslateNewMenu(ContextMenusAttrList); TranslateStringArray(RegisterTitles); TranslateStringArray(AddFileTypeActionStrings); TranslateStringArray(AddFileTypeActionStringsProject); TranslateStringArray(AddFileTypeActionStringsDisk); TranslateStringArray(FileTypeActionProtectionStrings); } if (NULL == myFileTypesNListTreeClass) { myFileTypesNListTreeClass = MUI_CreateCustomClass(NULL, MUIC_NListtree, NULL, 0, DISPATCHER_REF(myFileTypesNListTree)); } if (NULL == myFileTypesNListTreeClass) return FALSE; // Failure if (NULL == myNListTreeClass) { myNListTreeClass = MUI_CreateCustomClass(NULL, MUIC_NListtree, NULL, 0, DISPATCHER_REF(myNListTree)); } if (NULL == myNListTreeClass) return FALSE; // Failure if (NULL == myFileTypesActionsNListClass) { myFileTypesActionsNListClass = MUI_CreateCustomClass(NULL, MUIC_NList, NULL, 0, DISPATCHER_REF(myFileTypesActionsNList)); } if (NULL == myFileTypesActionsNListClass) return FALSE; // Failure if (NULL == myNListClass) { myNListClass = MUI_CreateCustomClass(NULL, MUIC_NList, NULL, 0, DISPATCHER_REF(myNList)); } if (NULL == myNListClass) return FALSE; // Failure if (NULL == IconobjectClass) { IconobjectClass = InitIconobjectClass(); } if (NULL == IconobjectClass) return FALSE; // Failure if (NULL == DataTypesImageClass) DataTypesImageClass = InitDtpicClass(); d1(KPrintF(__FUNC__ "/%ld: DataTypesImageClass=%08lx\n", __LINE__, DataTypesImageClass)); if (NULL == DataTypesImageClass) return FALSE; // Failure d1(KPrintF("%s/%ld: Success\n", __FUNC__, __LINE__)); return TRUE; // Success } //---------------------------------------------------------------------------- static ULONG DoDragDrop(Class *cl, Object *obj, Msg msg) { struct FileTypesPrefsInst *inst = NULL; struct MUI_NListtree_TreeNode *tnTo = NULL, *tnFrom; get(obj, MUIA_NList_PrivateData, (IPTR *)&inst); get(obj, MUIA_NListtree_DropTarget, &tnTo); tnFrom = MUIV_NListtree_Active_Off; get(obj, MUIA_NListtree_Active, &tnFrom); d1(kprintf(__FILE__ "/%s/%ld: tnFrom=%08lx tnTo=%08lx\n", __FUNC__, __LINE__, tnFrom, tnTo)); if (tnTo && tnFrom && tnTo != tnFrom && MUIV_NListtree_Active_Off != tnFrom) { struct MUI_NListtree_TreeNode *oldListNode; oldListNode = (struct MUI_NListtree_TreeNode *) DoMethod(obj, MUIM_NListtree_GetEntry, tnFrom, MUIV_NListtree_GetEntry_Position_Parent, 0); if (MayPasteOnto(inst, tnTo, tnFrom)) { DoMethod(obj, MUIM_NListtree_Move, oldListNode, tnFrom, tnTo, MUIV_NListtree_Move_NewTreeNode_Tail, 0); EntryHasChanged(inst, tnFrom); EntryHasChanged(inst, tnTo); } else { tnTo = MayPasteBelow(inst, tnTo, tnFrom); if (tnTo) { struct MUI_NListtree_TreeNode *newListNode; newListNode = (struct MUI_NListtree_TreeNode *) DoMethod(obj, MUIM_NListtree_GetEntry, tnTo, MUIV_NListtree_GetEntry_Position_Parent, 0); DoMethod(obj, MUIM_NListtree_Move, oldListNode, tnFrom, newListNode, tnTo, 0); EntryHasChanged(inst, tnFrom); EntryHasChanged(inst, tnTo); } } } return 0; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT OpenHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; if (NULL == inst->fpb_LoadReq) { inst->fpb_LoadReq = MUI_AllocAslRequestTags(ASL_FileRequest, ASLFR_InitialFile, "deficons.prefs", ASLFR_Flags1, FRF_DOPATTERNS, ASLFR_InitialDrawer, "SYS:Prefs/presets", ASLFR_InitialPattern, "#?.(pre|prefs)", ASLFR_UserData, inst, ASLFR_IntuiMsgFunc, (IPTR)&inst->fpb_Hooks[HOOKNDX_AslIntuiMsg], TAG_END); } if (inst->fpb_LoadReq) { BOOL Result; struct Window *win = NULL; get(inst->fpb_Objects[OBJNDX_WIN_Main], MUIA_Window_Window, &win); //AslRequest( Result = MUI_AslRequestTags(inst->fpb_LoadReq, ASLFR_Window, win, ASLFR_SleepWindow, TRUE, ASLFR_TitleText, GetLocString(MSGID_MENU_PROJECT_OPEN), TAG_END); if (Result) { BPTR dirLock = Lock(inst->fpb_LoadReq->fr_Drawer, ACCESS_READ); if (dirLock) { BPTR oldDir = CurrentDir(dirLock); InitDefIcons(inst, inst->fpb_LoadReq->fr_File); CurrentDir(oldDir); UnLock(dirLock); } } } return 0; } //---------------------------------------------------------------------------- static SAVEDS(APTR) INTERRUPT SaveAsHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; if (NULL == inst->fpb_SaveReq) { inst->fpb_SaveReq = MUI_AllocAslRequestTags(ASL_FileRequest, ASLFR_InitialFile, (IPTR)"deficons.prefs", ASLFR_DoSaveMode, TRUE, ASLFR_InitialDrawer, (IPTR)"SYS:Prefs/presets", ASLFR_UserData, (IPTR)inst, ASLFR_IntuiMsgFunc, (IPTR)&inst->fpb_Hooks[HOOKNDX_AslIntuiMsg], TAG_END); } if (inst->fpb_SaveReq) { BOOL Result; struct Window *win = NULL; get(inst->fpb_Objects[OBJNDX_WIN_Main], MUIA_Window_Window, &win); //AslRequest( Result = MUI_AslRequestTags(inst->fpb_SaveReq, ASLFR_TitleText, (IPTR)GetLocString(MSGID_MENU_PROJECT_SAVEAS), ASLFR_Window, (IPTR)win, ASLFR_SleepWindow, TRUE, TAG_END); if (Result) { BPTR dirLock = Lock(inst->fpb_SaveReq->fr_Drawer, ACCESS_READ); if (dirLock) { BPTR oldDir = CurrentDir(dirLock); WriteDefIconsPrefs(inst, inst->fpb_SaveReq->fr_File); CurrentDir(oldDir); UnLock(dirLock); } } } return 0; } //---------------------------------------------------------------------------- static SAVEDS(void) INTERRUPT AslIntuiMsgHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; struct IntuiMessage *iMsg = (struct IntuiMessage *) msg; if (IDCMP_REFRESHWINDOW == iMsg->Class) { DoMethod(inst->fpb_Objects[OBJNDX_APP_Main], MUIM_Application_CheckRefresh); } } //---------------------------------------------------------------------------- static SAVEDS(void) INTERRUPT ShowFindGroupHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; (void) hook; (void) o; (void) msg; CleanupFoundNodes(inst); setstring(inst->fpb_Objects[OBJNDX_String_FindFileType], ""); set(inst->fpb_Objects[OBJNDX_Menu_Find], MUIA_Menuitem_Enabled, FALSE); set(inst->fpb_Objects[OBJNDX_Group_FindFiletype], MUIA_ShowMe, TRUE); set(inst->fpb_Objects[OBJNDX_WIN_Main], MUIA_Window_ActiveObject, inst->fpb_Objects[OBJNDX_String_FindFileType]); } //---------------------------------------------------------------------------- static SAVEDS(void) INTERRUPT HideFindGroupHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; (void) hook; (void) o; (void) msg; CleanupFoundNodes(inst); set(inst->fpb_Objects[OBJNDX_Menu_Find], MUIA_Menuitem_Enabled, TRUE); set(inst->fpb_Objects[OBJNDX_Group_FindFiletype], MUIA_ShowMe, FALSE); } //---------------------------------------------------------------------------- static SAVEDS(void) INTERRUPT IncrementalFindFileTypeHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; CONST_STRPTR FindString = NULL; (void) hook; (void) o; (void) msg; get(inst->fpb_Objects[OBJNDX_String_FindFileType], MUIA_String_Contents, &FindString); if (FindString && strlen(FindString) > 0) { set(inst->fpb_Objects[OBJNDX_Button_FindNextFileType], MUIA_Disabled, FALSE); set(inst->fpb_Objects[OBJNDX_Button_FindPrevFileType], MUIA_Disabled, FALSE); IncrementalSearchFileType(inst, FindString, FINDDIR_First); } else { CleanupFoundNodes(inst); set(inst->fpb_Objects[OBJNDX_Button_FindNextFileType], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Button_FindPrevFileType], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Button_FindHitCount], MUIA_Text_Contents, ""); } } //---------------------------------------------------------------------------- static SAVEDS(void) INTERRUPT IncrementalFindNextFileTypeHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; CONST_STRPTR FindString = NULL; (void) hook; (void) o; (void) msg; get(inst->fpb_Objects[OBJNDX_String_FindFileType], MUIA_String_Contents, &FindString); if (FindString && strlen(FindString) > 0) { IncrementalSearchFileType(inst, FindString, FINDDIR_Next); } } //---------------------------------------------------------------------------- static SAVEDS(void) INTERRUPT IncrementalFindPrevFileTypeHookFunc(struct Hook *hook, Object *o, Msg msg) { struct FileTypesPrefsInst *inst = (struct FileTypesPrefsInst *) hook->h_Data; CONST_STRPTR FindString = NULL; (void) hook; (void) o; (void) msg; get(inst->fpb_Objects[OBJNDX_String_FindFileType], MUIA_String_Contents, &FindString); if (FindString && strlen(FindString) > 0) { IncrementalSearchFileType(inst, FindString, FINDDIR_Prev); } } //---------------------------------------------------------------------------- static BOOL IncrementalSearchFileType(struct FileTypesPrefsInst *inst, CONST_STRPTR SearchString, enum FindDir dir) { BOOL Found = FALSE; BOOL CaseSensitive = FALSE; do { struct MUI_NListtree_TreeNode *tn = NULL; Object *ActiveObject; if (SearchString == NULL || strlen(SearchString) < 1) { CleanupFoundNodes(inst); break; } get(inst->fpb_Objects[OBJNDX_WIN_Main], MUIA_Window_ActiveObject, &ActiveObject); /* * When searching for next one, fetch selected one first. */ if (FINDDIR_Next == dir) { d1(kprintf(__FILE__ "/%s/%ld: fpb_CurrentFound=%08lx\n", __FUNC__, __LINE__, inst->fpb_CurrentFound)); if (inst->fpb_CurrentFound != (struct FoundNode *) &inst->fpb_FoundList.lh_Tail) inst->fpb_CurrentFound = (struct FoundNode *) inst->fpb_CurrentFound->fdn_Node.ln_Succ; if (inst->fpb_CurrentFound != (struct FoundNode *) &inst->fpb_FoundList.lh_Tail) tn = inst->fpb_CurrentFound->fdn_TreeNode; else tn = NULL; d1(kprintf(__FILE__ "/%s/%ld: fpb_CurrentFound=%08lx tn=%08lx\n", __FUNC__, __LINE__, inst->fpb_CurrentFound, tn)); } else if (FINDDIR_Prev == dir) { d1(kprintf(__FILE__ "/%s/%ld: fpb_CurrentFound=%08lx\n", __FUNC__, __LINE__, inst->fpb_CurrentFound)); if (inst->fpb_CurrentFound != (struct FoundNode *) &inst->fpb_FoundList.lh_Head) inst->fpb_CurrentFound = (struct FoundNode *) inst->fpb_CurrentFound->fdn_Node.ln_Pred; if (inst->fpb_CurrentFound != (struct FoundNode *) &inst->fpb_FoundList.lh_Head) tn = inst->fpb_CurrentFound->fdn_TreeNode; else tn = NULL; d1(kprintf(__FILE__ "/%s/%ld: fpb_CurrentFound=%08lx tn=%08lx\n", __FUNC__, __LINE__, inst->fpb_CurrentFound, tn)); } else { ULONG dosearch = TRUE; d1(kprintf(__FILE__ "/%s/%ld:\n", __FUNC__, __LINE__)); CleanupFoundNodes(inst); BuildFindTree(inst, inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIV_NListtree_GetEntry_ListNode_Root, SearchString, MUIV_NListtree_GetEntry_Position_Head, &dosearch, CaseSensitive); if (IsListEmpty(&inst->fpb_FoundList)) { d1(kprintf(__FILE__ "/%s/%ld:\n", __FUNC__, __LINE__)); tn = NULL; inst->fpb_CurrentFound = (struct FoundNode *) &inst->fpb_FoundList.lh_Tail; } else { d1(kprintf(__FILE__ "/%s/%ld:\n", __FUNC__, __LINE__)); inst->fpb_CurrentFound = (struct FoundNode *) inst->fpb_FoundList.lh_Head; tn = inst->fpb_CurrentFound->fdn_TreeNode; } d1(kprintf(__FILE__ "/%s/%ld: fpb_CurrentFound=%08lx tn=%08lx\n", __FUNC__, __LINE__, inst->fpb_CurrentFound, tn)); snprintf(inst->fpb_FindHitCount, sizeof(inst->fpb_FindHitCount), GetLocString(MSGID_FIND_HITCOUNT_FMT), inst->fpb_FoundCount); set(inst->fpb_Objects[OBJNDX_Button_FindHitCount], MUIA_Text_Contents, inst->fpb_FindHitCount); } if (NULL == tn) { // nothing found set(inst->fpb_Objects[OBJNDX_Button_FindNextFileType], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Button_FindPrevFileType], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Button_FindHitCount], MUIA_Text_Contents, ""); break; } Found = TRUE; /* * Open node if needed and select. */ DoMethod(inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIM_NListtree_Open, MUIV_NListtree_Open_ListNode_Parent, tn, 0); set(inst->fpb_Objects[OBJNDX_NListtree_FileTypes], MUIA_NListtree_Active, tn); set(inst->fpb_Objects[OBJNDX_WIN_Main], MUIA_Window_ActiveObject, ActiveObject); set(inst->fpb_Objects[OBJNDX_Button_FindNextFileType], MUIA_Disabled, inst->fpb_CurrentFound->fdn_Node.ln_Succ == (struct Node *) &inst->fpb_FoundList.lh_Tail); set(inst->fpb_Objects[OBJNDX_Button_FindPrevFileType], MUIA_Disabled, inst->fpb_CurrentFound->fdn_Node.ln_Pred == (struct Node *) &inst->fpb_FoundList.lh_Head); } while (0); return Found; } //---------------------------------------------------------------------------- static void BuildFindTree(struct FileTypesPrefsInst *inst, Object *ListTree, struct MUI_NListtree_TreeNode *list, CONST_STRPTR pattern, struct MUI_NListtree_TreeNode *startnode, ULONG *dosearch, BOOL CaseSensitive) { ULONG pos; for (pos = 0; ; pos++) { struct MUI_NListtree_TreeNode *tn; tn = (struct MUI_NListtree_TreeNode *) DoMethod(ListTree, MUIM_NListtree_GetEntry, list, pos, MUIV_NListtree_GetEntry_Flag_SameLevel); if (NULL == tn) break; if (tn->tn_Flags & TNF_LIST) { // Current node is a list if (*dosearch) { // Check if list node matches CONST_STRPTR Found; Found = FindString(tn->tn_Name, pattern, CaseSensitive); if (Found) { struct FileTypesEntry *fte = (struct FileTypesEntry *) tn->tn_User; fte->fte_FindLength = strlen(pattern); fte->fte_FindStart = Found - tn->tn_Name; DoMethod(ListTree, MUIM_NListtree_Redraw, tn, 0); AddFoundNode(inst, ListTree, tn); } } // check children for matches BuildFindTree(inst, ListTree, tn, pattern, startnode, dosearch, CaseSensitive); } if ( tn == startnode ) *dosearch = TRUE; } } //---------------------------------------------------------------------------- static CONST_STRPTR FindString(CONST_STRPTR string, CONST_STRPTR pattern, BOOL CaseSensitive) { while (*string) { size_t i; for(i = 0 ; ; i++) { char c = pattern[i]; /* End of substring? We got a match... */ if ('\0' == c) { return string; } if (CaseSensitive) { if (c != string[i]) break; } else { if (ToLower(c) != ToLower(string[i])) break; } } string++; } return NULL; } //---------------------------------------------------------------------------- static struct FoundNode *AddFoundNode(struct FileTypesPrefsInst *inst, Object *ListTree, struct MUI_NListtree_TreeNode *tn) { struct FoundNode *fdn; d1(kprintf(__FILE__ "/%s/%ld: <%s>\n", __FUNC__, __LINE__, tn->tn_Name)); fdn = malloc(sizeof(struct FoundNode)); if (fdn) { fdn->fdn_ListTree = ListTree; fdn->fdn_TreeNode = tn; fdn->fdn_Index = ++inst->fpb_FoundCount; AddTail(&inst->fpb_FoundList, &fdn->fdn_Node); } return fdn; } //---------------------------------------------------------------------------- void CleanupFoundNodes(struct FileTypesPrefsInst *inst) { struct FoundNode *fdn; d1(kprintf(__FILE__ "/%s/%ld:\n", __FUNC__, __LINE__)); while ( (fdn = (struct FoundNode *) RemHead(&inst->fpb_FoundList)) ) { struct FileTypesEntry *fte = (struct FileTypesEntry *) fdn->fdn_TreeNode->tn_User; fte->fte_FindLength = 0; fte->fte_FindStart = 0; DoMethod(fdn->fdn_ListTree, MUIM_NListtree_Redraw, fdn->fdn_TreeNode, 0); free(fdn); } inst->fpb_FoundCount = 0; set(inst->fpb_Objects[OBJNDX_Button_FindNextFileType], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Button_FindPrevFileType], MUIA_Disabled, TRUE); set(inst->fpb_Objects[OBJNDX_Button_FindHitCount], MUIA_Text_Contents, ""); } //---------------------------------------------------------------------------- void UpdateMenuImage(struct FileTypesPrefsInst *inst, ULONG ListTree, struct FileTypesListEntry *fte) { char UnSelIconName[MAX_ATTRVALUE]; if (fte->fte_ImageObject) { DoMethod(inst->fpb_Objects[ListTree], MUIM_NList_UseImage, NULL, fte->fte_ImageIndex, 0); MUI_DisposeObject(fte->fte_ImageObject); fte->fte_ImageObject = NULL; } GetAttributeValueString(FindAttribute(fte, ATTRTYPE_UnselIconName), UnSelIconName, sizeof(UnSelIconName)); if (strlen(UnSelIconName) > 0) { fte->fte_ImageObject = DataTypesImageObject, MUIA_ScaDtpic_Name, (IPTR) UnSelIconName, MUIA_ScaDtpic_FailIfUnavailable, TRUE, End; //DataTypesMCCObject if (fte->fte_ImageObject) { if (0 == fte->fte_ImageIndex) fte->fte_ImageIndex = ++inst->fpb_MenuImageIndex; DoMethod(inst->fpb_Objects[ListTree], MUIM_NList_UseImage, fte->fte_ImageObject, fte->fte_ImageIndex, 0); } } } //---------------------------------------------------------------------------- #if !defined(__SASC) && ! defined(__amigaos4__) // Replacement for SAS/C library functions #if !defined(__MORPHOS__) && !defined(__AROS__) static size_t stccpy(char *dest, const char *src, size_t MaxLen) { size_t Count = 0; while (*src && MaxLen > 1) { *dest++ = *src++; MaxLen--; Count++; } *dest = '\0'; Count++; return Count; } #endif /* __MORPHOS__ */ void exit(int x) { (void) x; while (1) ; } APTR _WBenchMsg; #endif /* !__SASC && !__amigaos4__ */ //---------------------------------------------------------------------------- #if defined(__AROS__) #include "aros/symbolsets.h" ADD2EXPUNGELIB(closePlugin, 0); ADD2OPENLIB(initPlugin, 0); #endif //---------------------------------------------------------------------------- Prefs ...to the top // PopupMenuPrefs.c // $Date$ // $Revision$ #ifdef __AROS__ #define MUIMASTER_YES_INLINE_STDARG #endif #include <stdlib.h> #include <string.h> #include <stdio.h> #include <stddef.h> #include <ctype.h> #include <dos/dos.h> #include <exec/types.h> #include <exec/memory.h> #include <exec/ports.h> #include <exec/io.h> #include <exec/resident.h> #include <libraries/dos.h> #include <libraries/dosextens.h> #include <libraries/gadtools.h> #include <libraries/asl.h> #include <libraries/mui.h> #include <libraries/iffparse.h> #include <libraries/pm.h> #include <devices/clipboard.h> #include <utility/utility.h> #include <workbench/workbench.h> #include <workbench/icon.h> #include <intuition/intuition.h> #include <intuition/classusr.h> #include <graphics/gfxbase.h> #include <graphics/gfxmacros.h> #include <prefs/prefhdr.h> #include <prefs/popupmenu.h> #include <clib/alib_protos.h> #define __USE_SYSBASE #include <proto/exec.h> #include <proto/dos.h> #include <proto/icon.h> #include <proto/graphics.h> #include <proto/intuition.h> #include <proto/gadtools.h> #include <proto/preferences.h> #include <proto/utility.h> #include <proto/asl.h> #ifdef __AROS__ #include <proto/popupmenu.h> #else #include <proto/pm.h> #endif #include <proto/locale.h> #include <proto/iffparse.h> #define NO_INLINE_STDARG #include <proto/muimaster.h> #include <mui/NListview_mcc.h> #include <mui/NListtree_mcc.h> #include <mui/Lamp_mcc.h> #include <scalos/scalosprefsplugin.h> #include <defs.h> #include <Year.h> #include "PopupMenuPrefs.h" #include "DataTypesMCC.h" #include "FrameButtonMCC.h" #define ScalosPopupMenu_NUMBERS #define ScalosPopupMenu_ARRAY #define ScalosPopupMenu_CODE #include STR(SCALOSLOCALE) #include "plugin.h" //---------------------------------------------------------------------------- // local data structures #define CheckMarkHelp(selected, HelpTextID)\ ImageObject,\ ImageButtonFrame,\ MUIA_InputMode , MUIV_InputMode_Toggle,\ MUIA_Image_Spec , MUII_CheckMark,\ MUIA_Image_FreeVert , TRUE,\ MUIA_Selected , selected,\ MUIA_Background , MUII_ButtonBack,\ MUIA_ShowSelState , FALSE,\ MUIA_CycleChain , TRUE,\ MUIA_ShortHelp , (IPTR)GetLocString(HelpTextID), \ End #define IMG(prefix1,PREFIX2) \ BodychunkObject,\ MUIA_FixWidth , PREFIX2##_WIDTH ,\ MUIA_FixHeight , PREFIX2##_HEIGHT,\ MUIA_Bitmap_Width , PREFIX2##_WIDTH ,\ MUIA_Bitmap_Height , PREFIX2##_HEIGHT,\ MUIA_Bodychunk_Depth , PREFIX2##_DEPTH ,\ MUIA_Bodychunk_Body , (IPTR) prefix1##_body,\ MUIA_Bodychunk_Compression, PREFIX2##_COMPRESSION,\ MUIA_Bodychunk_Masking , PREFIX2##_MASKING,\ MUIA_Bitmap_SourceColors , (IPTR) prefix1##_colors,\ MUIA_Bitmap_Transparent , 0,\ End #define KeyButtonHelp(name,key,HelpText)\ TextObject,\ ButtonFrame,\ MUIA_CycleChain, TRUE, \ MUIA_Font, MUIV_Font_Button,\ MUIA_Text_Contents, (IPTR)(name),\ MUIA_Text_PreParse, (IPTR)"\33c",\ MUIA_Text_HiChar , (IPTR)(key),\ MUIA_ControlChar , (IPTR)(key),\ MUIA_InputMode , MUIV_InputMode_RelVerify,\ MUIA_Background , MUII_ButtonBack,\ MUIA_ShortHelp, (IPTR)HelpText,\ End #define FrameButton(objindex, frame, text, selected, raised)\ VGroup, \ MUIA_ShowSelState, FALSE, \ Child, (IPTR)(FrameButtonObject, \ MUIA_Frame, MUIV_Frame_None, \ MUIA_Text_Contents, (IPTR)(text),\ MUIA_Text_PreParse, (IPTR)"\33c", \ MUIA_Font, MUIV_Font_Button,\ MUIA_InputMode, MUIV_InputMode_None,\ MUIA_Background, MUII_ButtonBack,\ MUIA_ScaFrameButton_FrameType, (frame),\ MUIA_ScaFrameButton_Selected, (selected), \ MUIA_ScaFrameButton_Raised, (raised), \ End), \ Child, (IPTR)(HGroup, \ Child, (IPTR)HVSpace, \ Child, (IPTR)(inst->mpb_Objects[objindex] = ImageObject,\ ImageButtonFrame,\ MUIA_InputMode , MUIV_InputMode_Immediate,\ MUIA_Image_Spec , MUII_CheckMark,\ MUIA_Image_FreeVert , TRUE,\ MUIA_Selected , FALSE,\ MUIA_Background , MUII_ButtonBack,\ MUIA_ShowSelState , FALSE,\ MUIA_CycleChain , TRUE,\ End), /* ImageObject */ \ Child, (IPTR)HVSpace, \ End), /* HGroup */ \ End /* VGroup */ #define Application_Return_EDIT 0 #define Application_Return_USE 1001 #define Application_Return_SAVE 1002 //---------------------------------------------------------------------------- // imported from mempools.lib extern int _STI_240_InitMemFunctions(void); extern void _STD_240_TerminateMemFunctions(void); //---------------------------------------------------------------------------- // local functions static BOOL OpenLibraries(void); static void CloseLibraries(void); DISPATCHERPROTO(PopupMenuPrefs); static Object *CreatePrefsGroup(struct PopupMenuPrefsInst *inst); static SAVEDS(ULONG) INTERRUPT ImagePopAslFileStartHookFunc(struct Hook *hook, Object *o, Msg msg); static STRPTR GetLocString(ULONG MsgId); static void TranslateStringArray(STRPTR *stringArray); static SAVEDS(APTR) INTERRUPT ResetToDefaultsHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT OpenHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT SaveAsHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT AboutHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT LastSavedHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT RestoreHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT AppMessageHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(APTR) INTERRUPT SettingsChangedHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(void) INTERRUPT AslIntuiMsgHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(void) INTERRUPT FrameTypeSelectHookFunc(struct Hook *hook, Object *o, Msg msg); static SAVEDS(void) INTERRUPT SelFrameTypeSelectHookFunc(struct Hook *hook, Object *o, Msg msg); static LONG ReadPrefsFile(struct PopupMenuPrefsInst *inst, CONST_STRPTR FilenameOld, CONST_STRPTR FilenameNew, BOOL Quiet); static LONG WritePrefsFile(struct PopupMenuPrefsInst *inst, CONST_STRPTR Filename); static LONG SaveIcon(struct PopupMenuPrefsInst *inst, CONST_STRPTR IconName); static Object *CreatePrefsImage(void); static void InitHooks(struct PopupMenuPrefsInst *inst); static void SetChangedFlag(struct PopupMenuPrefsInst *inst, BOOL changed); static void ParseToolTypes(struct PopupMenuPrefsInst *inst, struct MUIP_ScalosPrefs_ParseToolTypes *ptt); static void PrefsToGUI(struct PopupMenuPrefsInst *inst, const struct PopupMenuPrefs *pmPrefs); static void GUItoPrefs(struct PopupMenuPrefsInst *inst, struct PopupMenuPrefs *pmPrefs); static IPTR getv(APTR obj, ULONG attr); static LONG ReadOldPrefsFile(CONST_STRPTR Filename, struct oldPopupMenuPrefs *prefs, const struct oldPopupMenuPrefs *defaultPrefs); static void ConvertPmPrefs(CONST_STRPTR prefsFileOld, CONST_STRPTR prefsFileNew); #if !defined(__SASC) && !defined(__MORPHOS__) && !defined(__amigaos4__) && !defined(__AROS__) static size_t stccpy(char *dest, const char *src, size_t MaxLen); #endif /* !defined(__SASC) && !defined(__MORPHOS__) && !defined(__amigaos4__) */ //---------------------------------------------------------------------------- // local data items #ifndef __AROS__ struct Library *MUIMasterBase; T_LOCALEBASE LocaleBase; struct GfxBase *GfxBase; struct Library *IconBase; struct Library *IFFParseBase; T_UTILITYBASE UtilityBase; struct IntuitionBase *IntuitionBase; #endif struct PopupMenuBase *PopupMenuBase; struct Library *PreferencesBase; struct Library *DataTypesBase; #ifdef __amigaos4__ struct Library *DOSBase; struct DOSIFace *IDOS; struct MUIMasterIFace *IMUIMaster; struct LocaleIFace *ILocale; struct GraphicsIFace *IGraphics; struct IconIFace *IIcon; struct IFFParseIFace *IIFFParse; struct UtilityIFace *IUtility; struct IntuitionIFace *IIntuition; struct PopupMenuIFace *IPopupMenu; struct DataTypesIFace *IDataTypes; struct Library *NewlibBase; struct Interface *INewlib; struct PreferencesIFace *IPreferences; #endif #ifdef __AROS__ struct DosLibrary *DOSBase; #endif #include "PopupMenuPrefsImage.h" static ULONG SIgnature = 0x4711; static ULONG MajorVersion, MinorVersion; static const struct MUIP_ScalosPrefs_MCCList RequiredMccList[] = { { MUIC_Lamp, 11, 1 }, { MUIC_NListtree, 18, 18 }, { MUIC_NListview, 18, 0 }, { NULL, 0, 0 } }; static const struct Hook PopupMenuPrefsHooks[] = { { { NULL, NULL }, HOOKFUNC_DEF(ImagePopAslFileStartHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(ResetToDefaultsHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(OpenHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(LastSavedHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(RestoreHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(SaveAsHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AboutHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AppMessageHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(SettingsChangedHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(AslIntuiMsgHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(FrameTypeSelectHookFunc), NULL }, { { NULL, NULL }, HOOKFUNC_DEF(SelFrameTypeSelectHookFunc), NULL }, }; static struct Locale *PopupMenuPrefsLocale; static struct Catalog *PopupMenuPrefsCatalog; struct MUI_CustomClass *PopupMenuPrefsClass; struct MUI_CustomClass *FrameButtonClass; struct MUI_CustomClass *DataTypesImageClass; static const LONG StopChunkList[] = { ID_PREF, ID_PMNU, }; static STRPTR PrefsPageNames[] = { (STRPTR) MSGID_PREFSPAGES_MISC, (STRPTR) MSGID_PREFSPAGES_BORDERS, (STRPTR) MSGID_PREFSPAGES_SPACING, (STRPTR) MSGID_PREFSPAGES_TEXT, (STRPTR) MSGID_PREFSPAGES_TRANSPARENCY, NULL }; static STRPTR AnimationNames[] = { (STRPTR) MSGID_ANIMATION_NONE, (STRPTR) MSGID_ANIMATION_ZOOM, (STRPTR) MSGID_ANIMATION_FADE, (STRPTR) MSGID_ANIMATION_EXPLODE, NULL }; static const struct PopupMenuPrefs DefaultPMPrefs = { 1, /* pmp_Flags */ 0, /* pmp_SubMenuDelay */ PMP_ANIM_NONE, /* pmp_Animation */ PMP_PD_SCREENBAR, /* pmp_PulldownPos */ FALSE, /* pmp_Sticky */ 0, /* pmp_MenuBorder */ 0, /* pmp_SelItemBorder */ 0, /* pmp_SeparatorBar */ 0, /* pmp_MenuTitles */ 0, /* pmp_MenuItems */ 2, /* pmp_XOffset */ 2, /* pmp_YOffset */ 2, /* pmp_XSpace */ 2, /* pmp_YSpace */ 2, /* pmp_Intermediate */ 0, /* pmp_TextDisplace */ 0, /* pmp_TransparencyBlur */ }; //---------------------------------------------------------------------------- BOOL closePlugin(struct PluginBase *PluginBase) { d1(kprintf("%s/%s/%ld: start\n", __FILE__, __FUNC__, __LINE__)); if (DataTypesImageClass) { CleanupDtpicClass(DataTypesImageClass); DataTypesImageClass = NULL; } if (FrameButtonClass) { CleanupFrameButtonClass(FrameButtonClass); FrameButtonClass = NULL; } if (PopupMenuPrefsCatalog) { CloseCatalog(PopupMenuPrefsCatalog); PopupMenuPrefsCatalog = NULL; } if (PopupMenuPrefsLocale) { CloseLocale(PopupMenuPrefsLocale); PopupMenuPrefsLocale = NULL; } if (PopupMenuPrefsClass) { MUI_DeleteCustomClass(PopupMenuPrefsClass); PopupMenuPrefsClass = NULL; } CloseLibraries(); d1(kprintf("%s/%s/%ld:\n", __FILE__, __FUNC__, __LINE__)); #if !defined(__amigaos4__) && !defined(__AROS__) _STD_240_TerminateMemFunctions(); #endif d1(kprintf("%s/%s/%ld: endt\n", __FILE__, __FUNC__, __LINE__)); return TRUE; } LIBFUNC_P2(IPTR, LIBSCAGetPrefsInfo, D0, ULONG, which, A6, struct PluginBase *, PluginBase, 5); { IPTR result; d1(kprintf("%s/%s/%ld: which=%ld\n", __FILE__, __FUNC__, __LINE__, which)); (void) PluginBase; switch(which) { case SCAPREFSINFO_GetClass: result = (IPTR) PopupMenuPrefsClass; break; case SCAPREFSINFO_GetTitle: result = (IPTR) GetLocString(MSGID_PLUGIN_LIST_TITLE); break; case SCAPREFSINFO_GetTitleImage: result = (IPTR) CreatePrefsImage(); break; default: result = (IPTR) NULL; break; } d1(kprintf("%s/%s/%ld: result=%lu\n", __FILE__, __FUNC__, __LINE__, result)); return result; } LIBFUNC_END //---------------------------------------------------------------------------- DISPATCHER(PopupMenuPrefs) { struct PopupMenuPrefsInst *inst; IPTR result = 0; switch(msg->MethodID) { case OM_NEW: obj = (Object *) DoSuperMethodA(cl, obj, msg); d1(kprintf("%s/%s/%ld: OM_NEW obj=%08lx\n", __FILE__, __FUNC__, __LINE__, obj)); if (obj) { Object *prefsobject; struct opSet *ops = (struct opSet *) msg; inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); memset(inst, 0, sizeof(struct PopupMenuPrefsInst)); inst->mpb_Changed = FALSE; inst->mpb_PMPrefs = DefaultPMPrefs; inst->mpb_WBScreen = LockPubScreen("Workbench"); InitHooks(inst); inst->mpb_fCreateIcons = GetTagData(MUIA_ScalosPrefs_CreateIcons, TRUE, ops->ops_AttrList); inst->mpb_ProgramName = (CONST_STRPTR) GetTagData(MUIA_ScalosPrefs_ProgramName, (IPTR) "", ops->ops_AttrList); inst->mpb_Objects[OBJNDX_WIN_Main] = (APTR) GetTagData(MUIA_ScalosPrefs_MainWindow, (IPTR) NULL, ops->ops_AttrList); inst->mpb_Objects[OBJNDX_APP_Main] = (APTR) GetTagData(MUIA_ScalosPrefs_Application, (IPTR) NULL, ops->ops_AttrList); prefsobject = CreatePrefsGroup(inst); d1(kprintf("%s/%s/%ld: prefsobject=%08lx\n", __FILE__, __FUNC__, __LINE__, prefsobject)); if (prefsobject) { DoMethod(obj, OM_ADDMEMBER, prefsobject); result = (IPTR) obj; } else { CoerceMethod(cl, obj, OM_DISPOSE); } } break; case OM_DISPOSE: inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); d1(kprintf("%s/%s/%ld: OM_DISPOSE obj=%08lx\n", __FILE__, __FUNC__, __LINE__, obj)); if (inst->mpb_WBScreen) { UnlockPubScreen(NULL, inst->mpb_WBScreen); inst->mpb_WBScreen = NULL; } if (inst->mpb_SaveReq) { MUI_FreeAslRequest(inst->mpb_SaveReq); inst->mpb_SaveReq = NULL; } if (inst->mpb_LoadReq) { MUI_FreeAslRequest(inst->mpb_LoadReq); inst->mpb_LoadReq = NULL; } return DoSuperMethodA(cl, obj, msg); break; case OM_SET: { struct opSet *ops = (struct opSet *) msg; inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); inst->mpb_fCreateIcons = GetTagData(MUIA_ScalosPrefs_CreateIcons, inst->mpb_fCreateIcons, ops->ops_AttrList); inst->mpb_ProgramName = (CONST_STRPTR) GetTagData(MUIA_ScalosPrefs_ProgramName, (IPTR) inst->mpb_ProgramName, ops->ops_AttrList); inst->mpb_Objects[OBJNDX_WIN_Main] = (APTR) GetTagData(MUIA_ScalosPrefs_MainWindow, (IPTR) inst->mpb_Objects[OBJNDX_WIN_Main], ops->ops_AttrList); inst->mpb_Objects[OBJNDX_APP_Main] = (APTR) GetTagData(MUIA_ScalosPrefs_Application, (IPTR) inst->mpb_Objects[OBJNDX_APP_Main], ops->ops_AttrList); return DoSuperMethodA(cl, obj, msg); } break; case OM_GET: { struct opGet *opg = (struct opGet *) msg; inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); switch (opg->opg_AttrID) { case MUIA_ScalosPrefs_CreateIcons: *opg->opg_Storage = inst->mpb_fCreateIcons; result = 0; break; default: result = DoSuperMethodA(cl, obj, msg); } } break; case MUIM_ScalosPrefs_ParseToolTypes: inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); d1(kprintf(__FILE__ "/%s/%ld: before ParseToolTypes\n", __FUNC__, __LINE__)); ParseToolTypes(inst, (struct MUIP_ScalosPrefs_ParseToolTypes *) msg); d1(kprintf(__FILE__ "/%s/%ld: after ParseToolTypes\n", __FUNC__, __LINE__)); break; case MUIM_ScalosPrefs_LoadConfig: inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); ReadPrefsFile(inst, PMP_PATH_OLD, PMP_PATH_NEW, TRUE); PrefsToGUI(inst, &inst->mpb_PMPrefs); SetChangedFlag(inst, FALSE); break; case MUIM_ScalosPrefs_UseConfig: inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); WritePrefsFile(inst, PMP_PATH_NEW); PM_ReloadPrefs(); SetChangedFlag(inst, FALSE); break; case MUIM_ScalosPrefs_UseConfigIfChanged: inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); if (inst->mpb_Changed) { WritePrefsFile(inst, PMP_PATH_NEW); PM_ReloadPrefs(); SetChangedFlag(inst, FALSE); } break; case MUIM_ScalosPrefs_SaveConfig: inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); WritePrefsFile(inst, PMP_S_PATH_NEW); WritePrefsFile(inst, PMP_PATH_NEW); PM_ReloadPrefs(); SetChangedFlag(inst, FALSE); break; case MUIM_ScalosPrefs_SaveConfigIfChanged: inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); if (inst->mpb_Changed) { WritePrefsFile(inst, PMP_S_PATH_NEW); WritePrefsFile(inst, PMP_PATH_NEW); PM_ReloadPrefs(); SetChangedFlag(inst, FALSE); } break; case MUIM_ScalosPrefs_RestoreConfig: inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); DoMethod(obj, MUIM_CallHook, &inst->mpb_Hooks[HOOKNDX_Restore], 0); break; case MUIM_ScalosPrefs_ResetToDefaults: inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); DoMethod(obj, MUIM_CallHook, &inst->mpb_Hooks[HOOKNDX_ResetToDefaults], 0); break; case MUIM_ScalosPrefs_LastSavedConfig: inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); DoMethod(obj, MUIM_CallHook, &inst->mpb_Hooks[HOOKNDX_LastSaved], 0); break; case MUIM_ScalosPrefs_PageActive: { struct MUIP_ScalosPrefs_PageActive *spa = (struct MUIP_ScalosPrefs_PageActive *) msg; d1(kprintf("%s/%s/%ld: MUIM_ScalosPrefs_PageActive isActive=%08lx\n", __FILE__, __FUNC__, __LINE__, spa->isActive)); inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); inst->mpb_PageIsActive = spa->isActive; } break; case MUIM_ScalosPrefs_OpenConfig: inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); DoMethod(obj, MUIM_CallHook, &inst->mpb_Hooks[HOOKNDX_Open], 0); break; case MUIM_ScalosPrefs_SaveConfigAs: inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); DoMethod(obj, MUIM_CallHook, &inst->mpb_Hooks[HOOKNDX_SaveAs], 0); break; case MUIM_ScalosPrefs_About: inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); DoMethod(obj, MUIM_CallHook, &inst->mpb_Hooks[HOOKNDX_About], 0); break; case MUIM_ScalosPrefs_LoadNamedConfig: { struct MUIP_ScalosPrefs_LoadNamedConfig *lnc = (struct MUIP_ScalosPrefs_LoadNamedConfig *) msg; inst = (struct PopupMenuPrefsInst *) INST_DATA(cl, obj); ReadPrefsFile(inst, "", lnc->ConfigFileName, FALSE); PrefsToGUI(inst, &inst->mpb_PMPrefs); } break; case MUIM_ScalosPrefs_CreateSubWindows: result = (IPTR) NULL; break; case MUIM_ScalosPrefs_GetListOfMCCs: result = (IPTR) RequiredMccList; break; default: d1(kprintf("%s/%s/%ld: MethodID=%08lx\n", __FILE__, __FUNC__, __LINE__, msg->MethodID)); result = DoSuperMethodA(cl, obj, msg); break; } return result; } DISPATCHER_END //---------------------------------------------------------------------------- static Object *CreatePrefsGroup(struct PopupMenuPrefsInst *inst) { d1(kprintf("%s/%s/%ld: inst=%08lx\n", __FILE__, __FUNC__, __LINE__, inst)); inst->mpb_Objects[OBJNDX_Group_Main] = VGroup, MUIA_Background, MUII_PageBack, Child, (IPTR)(RegisterObject, MUIA_Register_Titles, (IPTR)PrefsPageNames, MUIA_CycleChain, TRUE, //------ Misc. ---------------------- Child, (IPTR)(VGroup, MUIA_Background, MUII_RegisterBack, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_MISCPAGE_TITLE), Child, (IPTR)HVSpace, Child, (IPTR)(HGroup, Child, (IPTR)Label1(GetLocString(MSGID_MISCPAGE_DELAY_SUBMENUS)), Child, (IPTR)(inst->mpb_Objects[OBJNDX_Slider_DelaySubMenus] = SliderObject, MUIA_CycleChain, TRUE, MUIA_Slider_Min, 0, MUIA_Slider_Max, 10, MUIA_Slider_Horiz, TRUE, MUIA_Numeric_Value, 0, End), //SliderObject MUIA_ShortHelp, (IPTR) GetLocString(MSGID_MISCPAGE_DELAY_SUBMENUS_SHORTHELP), End), //HGroup Child, (IPTR)HVSpace, Child, (IPTR)(VGroup, GroupFrame, MUIA_Background, MUII_GroupBack, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_MISCPAGE_ANIMATION), Child, (IPTR)(ColGroup(2), Child, (IPTR)Label1(GetLocString(MSGID_MISCPAGE_ANIMATION_TYPE)), Child, (IPTR)(inst->mpb_Objects[OBJNDX_Cycle_AnimationType] = CycleObject, MUIA_CycleChain, TRUE, MUIA_Cycle_Entries, (IPTR)AnimationNames, MUIA_ShortHelp, (IPTR) GetLocString(MSGID_MISCPAGE_ANIMATION_TYPE_SHORTHELP), End), //Cycle End), //ColGroup End), //VGroup Child, (IPTR)HVSpace, Child, (IPTR)HVSpace, Child, (IPTR)(ColGroup(4), GroupFrame, MUIA_Background, MUII_GroupBack, Child, (IPTR)HVSpace, Child, (IPTR)(inst->mpb_Objects[OBJNDX_CheckMark_MenuShadows] = CheckMarkHelp(TRUE, MSGID_MISCPAGE_MENUSHADOWS_SHORTHELP)), Child, (IPTR)LLabel1(GetLocString(MSGID_MISCPAGE_MENUSHADOWS)), Child, (IPTR)HVSpace, Child, (IPTR)HVSpace, Child, (IPTR)(inst->mpb_Objects[OBJNDX_CheckMark_RealShadows] = CheckMarkHelp(TRUE, MSGID_MISCPAGE_REALSHADOWS_SHORTHELP)), Child, (IPTR)LLabel1(GetLocString(MSGID_MISCPAGE_REALSHADOWS)), Child, (IPTR)HVSpace, Child, (IPTR)HVSpace, Child, (IPTR)(inst->mpb_Objects[OBJNDX_CheckMark_Sticky] = CheckMarkHelp(TRUE, MSGID_MISCPAGE_STICKY_SHORTHELP)), Child, (IPTR)LLabel1(GetLocString(MSGID_MISCPAGE_STICKY)), Child, (IPTR)HVSpace, End), //ColGroup Child, (IPTR)HVSpace, End), //VGroup //------ Borders ---------------------- Child, (IPTR)(VGroup, MUIA_Background, MUII_RegisterBack, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_BORDERSPAGE_TITLE), Child, (IPTR)HVSpace, Child, (IPTR)(HGroup, GroupFrame, MUIA_Background, MUII_GroupBack, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_BORDERSPAGE_MENUBORDER), Child, (IPTR)FrameButton(OBJNDX_Button_FrameThin, PMP_MENUBORDER_THIN, "", FALSE, FALSE), Child, (IPTR)FrameButton(OBJNDX_Button_FrameMM, PMP_MENUBORDER_MM, "", FALSE, FALSE), Child, (IPTR)FrameButton(OBJNDX_Button_FrameThick, PMP_MENUBORDER_THICK, "", FALSE, FALSE), Child, (IPTR)FrameButton(OBJNDX_Button_FrameRidge, PMP_MENUBORDER_RIDGE, "", FALSE, FALSE), Child, (IPTR)FrameButton(OBJNDX_Button_FrameDropBox, PMP_MENUBORDER_DROPBOX, "", FALSE, FALSE), Child, (IPTR)FrameButton(OBJNDX_Button_FrameOldStyle, PMP_MENUBORDER_OLDSTYLE, "", FALSE, FALSE), End), //HGroup Child, (IPTR)HVSpace, Child, (IPTR)(HGroup, GroupFrame, MUIA_Background, MUII_GroupBack, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_BORDERSPAGE_SELECTEDITEM), Child, (IPTR)FrameButton(OBJNDX_Button_Normal, PMP_MENUBORDER_NONE, GetLocString(MSGID_BORDERSPAGE_NORMAL), TRUE, FALSE), Child, (IPTR)FrameButton(OBJNDX_Button_Raised, PMP_MENUBORDER_THIN, GetLocString(MSGID_BORDERSPAGE_RAISED), TRUE, TRUE), Child, (IPTR)FrameButton(OBJNDX_Button_Recessed, PMP_MENUBORDER_THIN, GetLocString(MSGID_BORDERSPAGE_RECESSED), TRUE, FALSE), End), //HGroup Child, (IPTR)HVSpace, Child, (IPTR)(HGroup, GroupFrame, MUIA_Background, MUII_GroupBack, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_BORDERSPAGE_SEPARATORS), Child, (IPTR)HVSpace, Child, (IPTR)(ColGroup(4), Child, (IPTR)(HGroup, Child, (IPTR)HVSpace, Child, (IPTR)(IMG(NewStyle, NEWSTYLE)), Child, (IPTR)HVSpace, End), //HGroup Child, (IPTR)(inst->mpb_Objects[OBJNDX_CheckMark_NewLook] = ImageObject, ImageButtonFrame, MUIA_InputMode, MUIV_InputMode_Toggle, MUIA_Image_Spec, MUII_CheckMark, MUIA_Image_FreeVert, TRUE, MUIA_Background, MUII_ButtonBack, MUIA_ShowSelState, FALSE, MUIA_CycleChain, TRUE, End), //ImageObject Child, (IPTR)CLabel(GetLocString(MSGID_BORDERSPAGE_NEW_LOOK)), Child, (IPTR)HVSpace, Child, (IPTR)(HGroup, Child, (IPTR)HVSpace, Child, (IPTR)(IMG(OldStyle, OLDSTYLE)), Child, (IPTR)HVSpace, End), //HGroup Child, (IPTR)(inst->mpb_Objects[OBJNDX_CheckMark_OldLook] = ImageObject, ImageButtonFrame, MUIA_InputMode, MUIV_InputMode_Toggle, MUIA_Image_Spec, MUII_CheckMark, MUIA_Image_FreeVert, TRUE, MUIA_Background, MUII_ButtonBack, MUIA_ShowSelState, FALSE, MUIA_CycleChain, TRUE, End), //ImageObject Child, (IPTR)CLabel(GetLocString(MSGID_BORDERSPAGE_OLD_LOOK)), Child, (IPTR)HVSpace, End), //ColGroup Child, (IPTR)HVSpace, End), //HGroup Child, (IPTR)HVSpace, End), //VGroup //------ Spacing ---------------------- Child, (IPTR)(VGroup, MUIA_Background, MUII_RegisterBack, MUIA_FrameTitle, (IPTR) GetLocString(MSGID_SPACINGPAGE_TITLE), Child, (IPTR)HVSpace, Child, (IPTR)(ColGroup(5), Child, (IPTR)HVSpace, Child, (IPTR)(VGroup, GroupFrame, MUIA_Background, MUII_GroupBack, Child, (IPTR)HVSpace, Child, (IPTR)CLabel(GetLocString(MSGID_SPACINGPAGE_HORIZONTAL_SPACE)), Child, (IPTR)(IMG(Horizontal_Space, HORIZONTAL_SPACE)), Child, (IPTR)(inst->mpb_Objects[OBJNDX_Slider_HorizontalSpacing] = SliderObject, MUIA_CycleChain, TRUE, MUIA_Numeric_Min, 0, MUIA_Numeric_Max, 10, MUIA_Slider_Horiz, TRUE, MUIA_Numeric_Value, 2, End), //SliderObject Child, (IPTR)HVSpace, End), //VGroup Child, (IPTR)HVSpace, Child, (IPTR)(VGroup, GroupFrame, MUIA_Background, MUII_GroupBack, Child, (IPTR)HVSpace, Child, (IPTR)CLabel(GetLocString(MSGID_SPACINGPAGE_VERTICAL_SPACE)), Child, (IPTR)(IMG(Vertical_Space, VERTICAL_SPACE)), Child, (IPTR)(inst->mpb_Objects[OBJNDX_Slider_VerticalSpacing] = SliderObject, MUIA_CycleChain, TRUE, MUIA_Numeric_Min, 0, MUIA_Numeric_Max, 10, MUIA_Slider_Horiz, TRUE, MUIA_Numeric_Value, 1, End), //SliderObject Child, (IPTR)HVSpace, End), //VGroup Child, (IPTR)HVSpace, Child, (IPTR)HVSpace, Child, (IPTR)(VGroup, GroupFrame, MUIA_Background, MUII_GroupBack, Child, (IPTR)HVSpace, Child, (IPTR)CLabel(GetLocString(MSGID_SPACINGPAGE_HORIZONTAL)), Child, (IPTR)(IMG(Horizontal, HORIZONTAL)), Child, (IPTR)(inst->mpb_Objects[OBJNDX_Slider_Horizontal] = SliderObj

This display is an excerpt. Read the full source below.