home *** CD-ROM | disk | FTP | other *** search
Wrap
/// headers /* MUI */ #include <libraries/mui.h> /* System */ #include <dos/dos.h> #include <graphics/gfxmacros.h> #include <workbench/workbench.h> #include <exec/memory.h> #include <datatypes/pictureclass.h> #include <libraries/locale.h> /* Prototypes */ #include <clib/alib_protos.h> #include <clib/exec_protos.h> #include <clib/dos_protos.h> #include <clib/icon_protos.h> #include <clib/graphics_protos.h> #include <clib/intuition_protos.h> #include <clib/gadtools_protos.h> #include <clib/utility_protos.h> #include <clib/asl_protos.h> #ifndef __GNUC__ #include <clib/muimaster_protos.h> #else #include <inline/muimaster.h> #endif /* ANSI C */ #include <stdlib.h> #include <string.h> #include <stdio.h> #ifndef MAKE_ID #define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d)) #endif /// #define STRINGARRAY YES #include "TinyMeterPrefs.lh" #include "tinymeter.h" static struct MUI_CustomClass *CL_FieldsList; static struct MUI_CustomClass *CL_ChooseFields; static struct MUI_CustomClass *CL_MainWindow; static struct MUI_CustomClass *CL_Composer; static struct MUI_CustomClass *CL_Launcher; #define USE_ABOUT_COLORS YES #define USE_ABOUT_HEADER YES #define USE_ABOUT_BODY YES #define USE_LOGO_COLORS YES #define USE_LOGO_HEADER YES #define USE_LOGO_BODY YES #define USE_HEADER_LOGO_COLORS YES #define USE_HEADER_LOGO_HEADER YES #define USE_HEADER_LOGO_BODY YES #define USE_QUESTION_COLORS YES #define USE_QUESTION_HEADER YES #define USE_QUESTION_BODY YES enum { MEN_PROJECT=1,MEN_ABOUT,MEN_OPEN,MEN_SAVE,MEN_QUIT,CMP_LOAD, CMP_SAVE, CMP_CANCEL, CMP_PROJECT }; /*************************************************************************************************/ /* misc funcs */ /*************************************************************************************************/ /// ULONG DoSuperNew(struct IClass *cl,Object *obj,ULONG tag1,...) { return(DoSuperMethod(cl,obj,OM_NEW,&tag1,NULL)); } LONG xget(Object *obj,ULONG attribute) { LONG x; get(obj,attribute,&x); return(x); } initColor(struct GAU_Color *col,Object *obj) { struct MUI_PenSpec pspec; if(col->pen==TRUE) { sprintf(&pspec.buf[0],"p%d\0",col->red); set(obj,MUIA_Pendisplay_Spec,&pspec); } else { sprintf(&pspec.buf[0],"r%08lx,%08lx,%08lx\0",col->red,col->green,col->blue); set(obj,MUIA_Pendisplay_Spec,&pspec); } } getColor(struct GAU_Color *col,Object *obj) { struct MUI_PenSpec *pspec; char *buf; ULONG *dummy1,dummy2,dummy3; get(obj,MUIA_Pendisplay_Spec,&pspec); if(buf=(char *)AllocVec(256L,MEMF_CLEAR)) { strcpy(buf,&pspec->buf[0]); if(buf[0]) { switch (buf[0]) { case 'r': col->pen=(UWORD)FALSE; sscanf(buf+1,"%lx,%lx,%lx",&dummy1,&dummy2,&dummy3); col->red=(ULONG)dummy1; col->green=(ULONG)dummy2; col->blue=(ULONG)dummy3; break; case 'p': col->pen=(UWORD)TRUE; sscanf(buf+1,"%ld",&col->red); break; case 'm': MUI_RequestA(NULL,NULL,0,"TinyMeterPrefs","BAD LUCK!","Please do not use MUI colors.\nThey are not supported by TinyMeter!\n\nUse Colormap or a RBG color instead.",NULL); break; } } FreeVec(buf); } } __saveds __asm void IntuiMsgFunc(__a1 struct IntuiMessage *imsg,__a2 struct FileRequester *req) { if (imsg->Class==IDCMP_REFRESHWINDOW) DoMethod(req->fr_UserData,MUIM_Application_CheckRefresh); } char *getfilename(Object *win,char *title,char *pattern,BOOL save) { static char buf[512]; struct FileRequester *req; struct Window *w; static LONG left=-1,top=-1,width=-1,height=-1; Object *app = (Object *)xget(win,MUIA_ApplicationObject); char *res = NULL; static const struct Hook IntuiMsgHook = { { 0,0 },(VOID *)IntuiMsgFunc,NULL,NULL }; get(win,MUIA_Window_Window,&w); if (left==-1) { left = w->LeftEdge+w->BorderLeft+2; top = w->TopEdge+w->BorderTop+2; width = w->Width-w->BorderLeft-w->BorderRight-4; height = w->Height-w->BorderTop-w->BorderBottom-4; } if (req=MUI_AllocAslRequestTags(ASL_FileRequest, ASLFR_Window, w, ASLFR_TitleText, title, ASLFR_InitialLeftEdge, left, ASLFR_InitialTopEdge , top, ASLFR_InitialWidth , width, ASLFR_InitialHeight , height, ASLFR_InitialPattern , pattern, ASLFR_DoSaveMode , save, ASLFR_DoPatterns , TRUE, ASLFR_RejectIcons , TRUE, ASLFR_UserData , app, ASLFR_IntuiMsgFunc , &IntuiMsgHook, TAG_DONE)) { set(app,MUIA_Application_Sleep,TRUE); if (MUI_AslRequestTags(req,TAG_DONE)) { if (*req->fr_File) { res = buf; strcpy(buf,req->fr_Drawer); AddPart(buf,req->fr_File,sizeof(buf)); } left = req->fr_LeftEdge; top = req->fr_TopEdge; width = req->fr_Width; height = req->fr_Height; } MUI_FreeAslRequest(req); set(app,MUIA_Application_Sleep,FALSE); } return(res); } /// extern struct Library *SysBase, *IntuitionBase, *UtilityBase, *GfxBase, *DOSBase, *IconBase; struct Library *MUIMasterBase, *LocaleBase; struct tm_data *maindata; struct Catalog *Catalog; /*************************************************************************************************/ /* locale stuff */ /*************************************************************************************************/ /// char *GetStr(int num) { struct AppString *as = (struct AppString *)AppStrings; while (as->as_ID != num) as++; if (LocaleBase && Catalog) return(GetCatalogStr(Catalog,num,as->as_Str)); return((char *)as->as_Str); } VOID LocalizeStringArray(char **array) { char **x; for (x=array;*x;x++) *x = GetStr((int)*x); } VOID LocalizeNewMenu(struct NewMenu *nm) { for (;nm->nm_Type!=NM_END;nm++) if (nm->nm_Label != NM_BARLABEL) nm->nm_Label = GetStr((int)nm->nm_Label); } VOID InitLocale(VOID) { if (LocaleBase = OpenLibrary("locale.library",38L)) Catalog = (struct Catalog *)OpenCatalog(NULL,"TinyMeterPrefs.catalog",TAG_DONE); } VOID ExitLocale(VOID) { if (Catalog) { CloseCatalog(Catalog); Catalog =NULL; } if (LocaleBase) { CloseLibrary(LocaleBase); LocaleBase=NULL; } } Object *MakePen() { return(MUI_NewObject(MUIC_Poppen, MUIA_CycleChain, 1, MUIA_Window_Title, GetStr(MO_MakePen), MUIA_Weight, 0, TAG_DONE)); } /// /*************************************************/ /* some pics */ /*************************************************/ #include "about.c" #include "header_logo.c" #include "question.c" #include "logo.c" /*************************************************/ /* default settings */ /*************************************************/ /// struct tm_sys_set default_set= { "TM40", 1, 10, 10, 400, 2, "Workbench", "XHelvetica.font", 11, bg_file, "hd0:prefs/patterns/leather", -3, FALSE,0x55555555,0x55555555,0x55555555, 5, 1, 0, TRUE, win_normal, 0, 4, 4, 8, 8, bd_standard, FALSE,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF, FALSE,0x0,0x0,0x0, idle_own }; struct tm_gau_set g4= { typ_volume, typ_histmeter, 200, "Quill.font", 11, "ChipMem", "HD1: %kd kb,%p%% free", "HD1:", FALSE, ind_right, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE,2,0,0, TRUE,2,0,0, FALSE,0,0xFFFFFFFF,0, FALSE,0,0,0xFFFFFFFF, FALSE,0xFFFFFFFF,0,0, TRUE,2,0,0, TRUE,1,0,0, TRUE,1,0,0, NULL }; struct tm_gau_set g3= { typ_idle, typ_histmeter, 200, "Quill.font", 11, "ChipMem", "CPU %p%% free", "", FALSE, ind_right, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE,2,0,0, TRUE,2,0,0, FALSE,0,0xFFFFFFFF,0, FALSE,0,0,0xFFFFFFFF, FALSE,0xFFFFFFFF,0,0, TRUE,2,0,0, TRUE,1,0,0, TRUE,1,0,0, &g4 }; struct tm_gau_set g2= { typ_fast, typ_gauge, 20, "XHelvetica.font", 11, "FastMem", "%td Bytes free", "", FALSE, ind_right, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE,2,0,0, TRUE,2,0,0, FALSE,0,0xFFFFFFFF,0, FALSE,0,0,0xFFFFFFFF, FALSE,0xFFFFFFFF,0,0, TRUE,2,0,0, TRUE,1,0,0, TRUE,0,0,0, &g3, }; struct tm_gau_set g1= { typ_chip, typ_gauge, 20, "XHelvetica.font", 11, "ChipMem", "%td Bytes free", "", FALSE, ind_right, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE,2,0,0, TRUE,2,0,0, FALSE,0,0xFFFFFFFF,0, FALSE,0,0,0xFFFFFFFF, FALSE,0xFFFFFFFF,0,0, TRUE,2,0,0, TRUE,1,0,0, TRUE,0,0,0, &g2 }; struct tm_gau_set default_gauge= { NULL, typ_gauge, 80, "topaz.font", 8, "", "", "", FALSE, ind_right, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE,2,0,0, TRUE,2,0,0, FALSE,0,0xFFFFFFFF,0, FALSE,0,0,0xFFFFFFFF, FALSE,0xFFFFFFFF,0,0, TRUE,2,0,0, TRUE,1,0,0, TRUE,0,0,0, NULL }; struct tm_gau_set default_launcher= { NULL, typ_gauge, 80, "topaz.font", 8, "", "", "", FALSE, ind_right, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE,1,0,0, TRUE,1,0,0, FALSE,0,0xFFFFFFFF,0, TRUE,1,0,0, TRUE,3,0,0, TRUE,2,0,0, TRUE,1,0,0, TRUE,0,0,0, NULL }; /// /*************************************************/ /* Drag & Drop lists */ /*************************************************/ /******************************************/ /* some hooks */ /******************************************/ /// char *gau_types[]= { (STRPTR)MDL_typ_space, (STRPTR)MDL_typ_total, (STRPTR)MDL_typ_chip, (STRPTR)MDL_typ_fast, (STRPTR)MDL_typ_volume, (STRPTR)MDL_typ_cpu, (STRPTR)MDL_typ_retina, (STRPTR)MDL_typ_largest_chip, (STRPTR)MDL_typ_largest_fast, (STRPTR)MDL_typ_largest_total, (STRPTR)MDL_typ_largest_retina, (STRPTR)MDL_typ_clock, (STRPTR)MDL_typ_simplelauncher, (STRPTR)MDL_typ_iconlauncher, 0L, }; __geta4 ULONG gau_consfunc(__a1 struct tm_gau_set *src) { return(src); } __geta4 void gau_desfunc(__a1 struct tm_gau_set *src) { FreeVec(src); } __geta4 ULONG gau_dispfunc(__a2 char **array,__a1 struct tm_gau_set *src) { if(src->type!=0) { *array++ = gau_types[src->type]; if(src->type==typ_volume) { *array = &src->expansion[0]; } else *array = ""; } else { *array++ = "-----------------"; *array = ""; } return(0L); } static const struct Hook gau_ConstructHook = { { 0,0 }, (void *)gau_consfunc, NULL, NULL }; static const struct Hook gau_DestructHook = { { 0,0 }, (void *)gau_desfunc , NULL, NULL }; static const struct Hook gau_DisplayHook = { { 0,0 }, (void *)gau_dispfunc, NULL, NULL }; /// /******************************************/ /* FieldsList class */ /******************************************/ /// struct FieldsList_Data { LONG dummy; }; ULONG FieldsList_DragQuery(struct IClass *cl,Object *obj,struct MUIP_DragDrop *msg) { if (msg->obj==obj) return(DoSuperMethodA(cl,obj,msg)); else if (msg->obj==(Object *)muiUserData(obj)) return(MUIV_DragQuery_Accept); else return(MUIV_DragQuery_Refuse); } ULONG FieldsList_DragDrop(struct IClass *cl,Object *obj,struct MUIP_DragDrop *msg) { if (msg->obj==obj) return(DoSuperMethodA(cl,obj,msg)); else { struct tm_gau_set *entry; LONG dropmark; LONG sortable; LONG active; get(obj,MUIA_List_DragSortable,&sortable); if (sortable) { get(msg->obj,MUIA_List_Active,&active); if(entry=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),MEMF_CLEAR)) { if((active==typ_simplelauncher)||(active==typ_iconlauncher)) { CopyMem(&default_launcher,entry, sizeof(struct tm_gau_set)); strcpy(&entry->expansion[0],"Provide a filename!"); } else { CopyMem(&default_gauge,entry, sizeof(struct tm_gau_set)); } entry->type = (UWORD)active; if(active==typ_clock_) entry->gauge_type=typ_clock; get (obj, MUIA_List_DropMark, &dropmark); DoMethod(obj, MUIM_List_InsertSingle, entry,dropmark); set (obj, MUIA_List_Active, dropmark); set (msg->obj, MUIA_List_Active, MUIV_List_Active_Off); } } else { DoMethod(msg->obj,MUIM_List_Remove,MUIV_List_Remove_Active); } return(obj); } } __geta4 ULONG FieldsList_Dispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg) { switch (msg->MethodID) { case MUIM_DragQuery: return(FieldsList_DragQuery(cl,obj,(APTR)msg)); case MUIM_DragDrop : return(FieldsList_DragDrop (cl,obj,(APTR)msg)); } return(DoSuperMethodA(cl,obj,msg)); } /// /******************************************/ /* ChooseFields class */ /******************************************/ /// Object *available, *visible; struct ChooseFields_Data { ULONG dummy; }; struct ComposerMsg { ULONG MethodID; Object *listview; struct ChooseFields_Data *data; }; #define Dis_ID_DoubleClickComposer 1 #define Dis_ID_ComposerClose 2 #define Dis_ID_ComposerSave 3 #define Dis_ID_LauncherClose 4 #define Dis_ID_LauncherSave 5 #define Dis_ID_CloneEntry 6 #define Originator ( TAG_USER + 1 ) #define Gauge_Settings ( TAG_USER + 2 ) static ULONG DoubleClickComposer(struct IClass *cl,Object *obj, struct ComposerMsg *msg) { struct tm_gau_set *desc; Object *tmp; DoMethod(msg->listview,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&desc); if (desc) { set((Object *)xget(obj,MUIA_ApplicationObject),MUIA_Application_Sleep,TRUE); switch (desc->type) { case typ_none: break; case typ_iconlauncher: case typ_simplelauncher: if (tmp = (APTR)NewObject(CL_Launcher->mcc_Class,NULL, Originator, obj, Gauge_Settings, desc, TAG_DONE)) { DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_ADDMEMBER,tmp); set(tmp,MUIA_Window_Open,TRUE); } break; default: if (tmp = (APTR)NewObject(CL_Composer->mcc_Class,NULL, Originator, obj, Gauge_Settings, desc, TAG_DONE)) { DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_ADDMEMBER,tmp); set(tmp,MUIA_Window_Open,TRUE); } else DisplayBeep(0); break; } set((Object *)xget(obj,MUIA_ApplicationObject),MUIA_Application_Sleep,FALSE); } return((ULONG)0); } static ULONG Clone_Entry(struct IClass *cl,Object *obj, struct ComposerMsg *msg) { struct tm_gau_set *desc,*news; DoMethod(msg->listview,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&desc); if (desc) { if(news=AllocVec(sizeof(struct tm_gau_set),0L)) { CopyMem(desc,news,sizeof(struct tm_gau_set)); DoMethod(msg->listview,MUIM_List_InsertSingle,news,MUIV_List_Insert_Active); } } } static ULONG ChooseFields_New(struct IClass *cl,Object *obj,struct opSet *msg) { Object *BT_Clone; obj = (Object *)DoSuperNew(cl,obj, MUIA_Group_Columns, 2, MUIA_Group_VertSpacing, 1, Child, TextObject, MUIA_Text_Contents, GetStr(MDL_Available), End, Child, TextObject, MUIA_Text_Contents, GetStr(MDL_Selected ), End, Child, ListviewObject, MUIA_Listview_DragType, 1, MUIA_Listview_List, available = NewObject(CL_FieldsList->mcc_Class,NULL, InputListFrame, MUIA_List_SourceArray , gau_types, MUIA_List_ShowDropMarks, FALSE, TAG_DONE), End, Child,VGroup, Child, ListviewObject, MUIA_Listview_DragType, 1, MUIA_Listview_DoubleClick, TRUE, MUIA_Listview_List, visible = NewObject(CL_FieldsList->mcc_Class,NULL, InputListFrame, MUIA_List_ConstructHook, &gau_ConstructHook, MUIA_List_DestructHook , &gau_DestructHook, MUIA_List_DisplayHook , &gau_DisplayHook, MUIA_List_Format , "MIW=50 MAW=100 BAR,", MUIA_List_DragSortable , TRUE, TAG_DONE), End, Child, BT_Clone=SimpleButton(GetStr(MCO_Clone)), End, End; if (obj) { DoMethod(visible, MUIM_Notify,MUIA_Listview_DoubleClick,TRUE,obj,2,Dis_ID_DoubleClickComposer,visible); DoMethod(BT_Clone,MUIM_Notify,MUIA_Pressed,TRUE, obj,2,Dis_ID_CloneEntry ,visible); set(available,MUIA_UserData,visible); set(visible,MUIA_UserData,available); set(available,MUIA_ShortHelp,GetStr(MDH_Available)); set(visible,MUIA_ShortHelp,GetStr(MDH_Selected)); } return((ULONG)obj); } ULONG Composer_Close(struct IClass *cl, Object *obj, struct ComposerFinishMsg *msg); ULONG Launcher_Close(struct IClass *cl, Object *obj, struct LauncherFinishMsg *msg); static __saveds __asm ULONG ChooseFields_Dispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg) { switch (msg->MethodID) { case OM_NEW : return(ChooseFields_New (cl,obj,(APTR)msg)); case Dis_ID_DoubleClickComposer : return(DoubleClickComposer (cl,obj,(APTR)msg)); case Dis_ID_ComposerClose : return(Composer_Close (cl,obj,(APTR)msg)); case Dis_ID_LauncherClose : return(Launcher_Close (cl,obj,(APTR)msg)); case Dis_ID_CloneEntry : return(Clone_Entry (cl,obj,(APTR)msg)); } return(DoSuperMethodA(cl,obj,msg)); } /// /*************************************************/ /* Composer Class */ /*************************************************/ /******************************************/ /* Composer Menu */ /******************************************/ /// struct NewMenu CmpMenuData[] = { { NM_TITLE, (STRPTR)MCM_Gauge , 0 ,0 ,0 ,(APTR)CMP_PROJECT }, { NM_ITEM , (STRPTR)MCM_Open ,"O",0 ,0 ,(APTR)CMP_LOAD }, { NM_ITEM , (STRPTR)MCM_SaveAs ,"S",0 ,0 ,(APTR)CMP_SAVE }, { NM_ITEM , NM_BARLABEL , 0 ,0 ,0 ,(APTR)0 }, { NM_ITEM , (STRPTR)MCM_Cancel ,"C",0 ,0 ,(APTR)CMP_CANCEL }, { NM_END,NULL,0,0,0,(APTR)0 } }; /// /******************************************/ /* Composer class */ /******************************************/ /// #define Dis_ID_DoubleClickDevice 8 #define Dis_ID_SaveGauge 9 #define Dis_ID_LoadGauge 10 #define Dis_ID_ShowFormatHelp 11 struct Composer_Data { Object *ST_Label, *PO_Device, *ST_Device, *CY_Type, *NB_Height, *CS_Colors[16], *ST_Font, *ST_Format, *CM_3D, *CM_Border, *CM_Bg, *CM_Shadow, *CM_NoGauge, *CM_NoFmt, *CM_NoBase, *CY_Indent, *LV_Device, *VL_Device, *originator, *sub_win, *BT_Use, *BT_Cancel, *PO_Device, *CMP_Menu, *BT_Quest; struct tm_gau_set *gauge; }; static ULONG DoubleClickDev(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg) { char *my_ptr; struct Composer_Data *data = INST_DATA(cl,obj); DoMethod(data->VL_Device,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&my_ptr); if(my_ptr) { set(data->ST_Device,MUIA_String_Contents,my_ptr); DoMethod(data->PO_Device,MUIM_Popstring_Close,0L); return(DoSuperMethodA(cl,obj,msg)); } else return(0L); } struct ComposerFinishMsg { ULONG MethodID; Object *win; ULONG ok; }; ULONG Composer_Close(struct IClass *cl, Object *obj, struct ComposerFinishMsg *msg) { if(msg->ok) { DoMethod(msg->win,Dis_ID_ComposerSave,msg->win,TRUE); } set(msg->win,MUIA_Window_Open,FALSE); DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_REMMEMBER,msg->win); MUI_DisposeObject(msg->win); return((ULONG)0L); } ULONG Composer_Save(struct IClass *cl, Object *obj, struct ComposerFinishMsg *msg) { int i; ULONG dummy; struct Composer_Data *data = INST_DATA(cl,obj); for(i=0;i<8;i++) getColor(&data->gauge->Colors[i],data->CS_Colors[i]); get(data->ST_Label ,MUIA_String_Contents,&dummy); strcpy(&data->gauge->label[0] , dummy ? (char *)dummy : " " ); get(data->ST_Device ,MUIA_String_Contents,&dummy); strcpy(&data->gauge->expansion[0], dummy ? (char *)dummy : " " ); get(data->CY_Type ,MUIA_Cycle_Active ,&dummy); data->gauge->gauge_type =(UWORD)dummy; get(data->NB_Height ,MUIA_Numeric_Value ,&dummy); data->gauge->size_y =(UWORD)dummy-100; get(data->CM_3D ,MUIA_Selected ,&dummy); data->gauge->sty_3d =(UWORD)dummy; get(data->CM_Border ,MUIA_Selected ,&dummy); data->gauge->sty_border =(UWORD)dummy; get(data->CM_Bg ,MUIA_Selected ,&dummy); data->gauge->sty_bg =(UWORD)dummy; get(data->CM_Shadow ,MUIA_Selected ,&dummy); data->gauge->sty_shadow =(UWORD)dummy; get(data->CM_NoGauge,MUIA_Selected ,&dummy); data->gauge->sty_nogauge =(UWORD)dummy; get(data->CM_NoFmt ,MUIA_Selected ,&dummy); data->gauge->sty_noformat=(UWORD)dummy; get(data->CM_NoBase ,MUIA_Selected ,&dummy); data->gauge->sty_nobase =(UWORD)dummy; get(data->CY_Indent ,MUIA_Cycle_Active ,&dummy); data->gauge->indent =(UWORD)dummy; get(data->ST_Font ,MUIA_String_Contents,&dummy); sscanf((char *)dummy,"%[^/]/%d",&data->gauge->font[0],&i); strcat(&data->gauge->font[0],".font"); data->gauge->font_size=(WORD)i; get(data->ST_Format ,MUIA_String_Contents,&dummy); strcpy((char *)&data->gauge->format[0], dummy ? (char *)dummy : " " ); DoMethod(visible,MUIM_List_Redraw,MUIV_List_Redraw_All); } char *types[] ={(STRPTR)MCL_Normal,(STRPTR)MCL_Historymeter,0L}; char *indent[] ={(STRPTR)MCL_center,(STRPTR)MCL_left,(STRPTR)MCL_right,0L}; char *regcomposer[] ={(STRPTR)MCR_general,(STRPTR)MCR_flags,(STRPTR)MCR_colors,0L}; insertComposerSettings(struct tm_gau_set *gauge, struct Composer_Data *data) { int i; char dummy[256]; for(i=0;i<8;i++) { initColor(&gauge->Colors[i],data->CS_Colors[i]); if(gauge->type == typ_clock_) set(data->CS_Colors[i],MUIA_Disabled,TRUE); } set(data->NB_Height,MUIA_Numeric_Value,gauge->size_y+100); if(gauge->type != typ_volume) set(data->PO_Device, MUIA_Disabled,TRUE); if((gauge->gauge_type==typ_histmeter)||(gauge->type==typ_clock_)) { set(data->ST_Label, MUIA_Disabled,TRUE); set(data->CM_3D, MUIA_Disabled,TRUE); set(data->CM_Shadow, MUIA_Disabled,TRUE); if(gauge->type==typ_clock_) { set(data->CM_Bg, MUIA_Disabled,TRUE); set(data->CS_Colors[col_format] ,MUIA_Disabled,FALSE); set(data->CS_Colors[col_dark] ,MUIA_Disabled,FALSE); set(data->CM_Shadow ,MUIA_Disabled,FALSE); set(data->CM_Border ,MUIA_Disabled,TRUE); set(data->CM_NoGauge ,MUIA_Disabled,TRUE); set(data->CM_NoFmt ,MUIA_Disabled,TRUE); set(data->CM_NoBase ,MUIA_Disabled,TRUE); set(data->CY_Type ,MUIA_Disabled,TRUE); } } set(data->CM_3D ,MUIA_Selected,gauge->sty_3d); set(data->CM_Border ,MUIA_Selected,gauge->sty_border); set(data->CM_Bg ,MUIA_Selected,gauge->sty_bg); set(data->CM_Shadow ,MUIA_Selected,gauge->sty_shadow); set(data->CM_NoGauge,MUIA_Selected,gauge->sty_nogauge); set(data->CM_NoFmt ,MUIA_Selected,gauge->sty_noformat); set(data->CM_NoBase ,MUIA_Selected,gauge->sty_nobase); set(data->ST_Format ,MUIA_String_Contents,&gauge->format[0]); strcpy(&dummy[0],gauge->font); sprintf((char *)&dummy[strlen(&dummy[0])-5],"/%d",gauge->font_size); set(data->ST_Font ,MUIA_String_Contents,&dummy[0]); set(data->ST_Device ,MUIA_String_Contents,&gauge->expansion[0]); set(data->ST_Label ,MUIA_String_Contents,&gauge->label[0]); set(data->CY_Indent ,MUIA_Cycle_Active,gauge->indent); set(data->CY_Type ,MUIA_Cycle_Active,gauge->gauge_type); } LoadGaugeSet(struct IClass *cl,Object *obj) { struct Composer_Data *data=INST_DATA(cl,obj); char *file; ULONG my_file; ULONG buf; UWORD old_type; char old_expansion[128]; if(file=getfilename(obj,GetStr(MCM_LoadGauge),"#?.tmgauge",FALSE)) { if(my_file=(ULONG)Open(file,MODE_OLDFILE)) { Read(my_file,&buf,4L); if(buf==0x544D4731) { old_type=data->gauge->type; CopyMem(&data->gauge->expansion[0],&old_expansion[0],128L); Read(my_file,data->gauge,sizeof(struct tm_gau_set)); data->gauge->type=old_type; CopyMem(&old_expansion[0],&data->gauge->expansion[0],128L); insertComposerSettings(data->gauge,data); } else MUI_RequestA((Object *)xget(obj,MUIA_ApplicationObject),obj,0,"TinyMeterPrefs",GetStr(MCM_NotTmGauge_fmt),GetStr(MCM_NotTmGauge),NULL); Close(my_file); } } } SaveGaugeSet(struct IClass *cl,Object *obj) { struct Composer_Data *data=INST_DATA(cl,obj); char *file; ULONG buf,my_file; struct ComposerFinishMsg msg; msg.ok=TRUE; Composer_Save( cl,obj,&msg); buf=0x544D4731; if(file=getfilename(obj,GetStr(MCM_SaveGauge),"#?.tmgauge",TRUE)) { if(my_file=Open(file,MODE_NEWFILE)) { Write(my_file,&buf,4L); Write(my_file,data->gauge,sizeof(struct tm_gau_set)); Close(my_file); } } } Object *WI_HelpFmt, *WI_HelpClock; static ULONG Composer_New(struct IClass *cl,Object *obj,struct opSet *msg) { struct Composer_Data *data,*new_data; if(new_data=AllocVec(sizeof(struct Composer_Data),0L)) { if(new_data->gauge = (struct tm_gau_set *)GetTagData(Gauge_Settings,0,msg->ops_AttrList)) { if( obj = (Object *)DoSuperNew(cl,obj, MUIA_Window_Title , gau_types[new_data->gauge->type] , MUIA_Window_ID , MAKE_ID('T','M','C','O'), MUIA_Window_Menustrip , new_data->CMP_Menu = MUI_MakeObject(MUIO_MenustripNM,CmpMenuData,0), WindowContents, VGroup, ButtonFrame, Child, HGroup, Child, VGroup, MUIA_Background, MUII_SHADOW, Child, VSpace(0), Child, BodychunkObject, MUIA_FixWidth , HEADER_LOGO_WIDTH , MUIA_FixHeight , HEADER_LOGO_HEIGHT, MUIA_Bitmap_Width , HEADER_LOGO_WIDTH , MUIA_Bitmap_Height , HEADER_LOGO_HEIGHT, MUIA_Bodychunk_Depth , HEADER_LOGO_DEPTH , MUIA_Bodychunk_Body , (UBYTE *)header_logo_body, MUIA_Bodychunk_Compression, HEADER_LOGO_COMPRESSION, MUIA_Bodychunk_Masking , HEADER_LOGO_MASKING, MUIA_Bitmap_SourceColors , (ULONG *)header_logo_colors, MUIA_Bitmap_Transparent , 0, End, End, Child, RegisterGroup(regcomposer), MUIA_Register_Frame, TRUE, Child, ColGroup(2), Child, VSpace(0), Child, VSpace(0), Child, Label(GetStr(MCO_type)), Child, new_data->CY_Type=CycleObject, MUIA_Cycle_Entries, types, End, Child, Label(GetStr(MCO_label)), Child, new_data->ST_Label=String(0L,16), Child, Label(GetStr(MCO_height)), Child, ColGroup(2), Child, new_data->NB_Height=MUI_MakeObject(MUIO_NumericButton,NULL,100,1000,GetStr(MCO_height_fmt)), Child, HVSpace, End, Child, Label(GetStr(MCO_font)), Child, PopaslObject, MUIA_Popstring_String, new_data->ST_Font=(Object *)String(0L,80), MUIA_Popstring_Button, PopButton(MUII_PopUp), MUIA_Popasl_Type , ASL_FontRequest, ASLFO_TitleText , GetStr(MCO_sel_font), End, Child, Label(GetStr(MCO_device)), Child, new_data->PO_Device=PopobjectObject, MUIA_Popstring_String, new_data->ST_Device=String(0L,128), MUIA_Popstring_Button, PopButton(MUII_PopUp), MUIA_Popobject_Object, new_data->LV_Device=ListviewObject, MUIA_Weight, 20, MUIA_Listview_Input, TRUE, MUIA_Listview_DoubleClick, TRUE, MUIA_Listview_List, new_data->VL_Device=VolumelistObject, InputListFrame, MUIA_Dirlist_Directory, "ram:", End, End, End, Child, VSpace(0), Child, VSpace(0), End, Child, ColGroup(2), Child, VSpace(0), Child, VSpace(0), Child, Label(GetStr(MCO_3dlook)), Child, new_data->CM_3D=CheckMark(new_data->gauge->sty_3d), Child, Label(GetStr(MCO_border)), Child, new_data->CM_Border=CheckMark(new_data->gauge->sty_border), Child, Label(GetStr(MCO_nobgcol)), Child, new_data->CM_Bg=CheckMark(new_data->gauge->sty_bg), Child, Label(GetStr(MCO_shadow)), Child, new_data->CM_Shadow=CheckMark(new_data->gauge->sty_shadow), Child, Label(GetStr(MCO_disgaug)), Child, new_data->CM_NoGauge=CheckMark(new_data->gauge->sty_nogauge), Child, Label(GetStr(MCO_disfmt)), Child, new_data->CM_NoFmt=CheckMark(new_data->gauge->sty_noformat), Child, Label(GetStr(MCO_disbas)), Child, new_data->CM_NoBase=CheckMark(new_data->gauge->sty_nobase), Child, VSpace(0), Child, VSpace(0), End, Child, ColGroup(2), Child, ColGroup(2), Child, VSpace(0), Child, VSpace(0), Child, Label(GetStr(MCO_col_label)), Child, new_data->CS_Colors[col_label] =MakePen(), Child, Label(GetStr(MCO_col_fmt)), Child, new_data->CS_Colors[col_format] =MakePen(), Child, Label(GetStr(MCO_col_bas)), Child, new_data->CS_Colors[col_base] =MakePen(), Child, Label(GetStr(MCO_col_cur)), Child, new_data->CS_Colors[col_current] =MakePen(), Child, VSpace(0), Child, VSpace(0), End, Child, ColGroup(2), Child, VSpace(0), Child, VSpace(0), Child, Label(GetStr(MCO_col_neg)), Child, new_data->CS_Colors[col_negative] =MakePen(), Child, Label(GetStr(MCO_col_bright)), Child, new_data->CS_Colors[col_bright] =MakePen(), Child, Label(GetStr(MCO_col_dark)), Child, new_data->CS_Colors[col_dark] =MakePen(), Child, Label(GetStr(MCO_col_bg)), Child, new_data->CS_Colors[col_bg] =MakePen(), Child, VSpace(0), Child, VSpace(0), End, End, End, End, Child, HGroup, GroupFrameT(GetStr(MCO_fmt)), Child, new_data->ST_Format=(Object *)String(0L,128), Child, new_data->BT_Quest=BodychunkObject, ButtonFrame, MUIA_InputMode , MUIV_InputMode_RelVerify, MUIA_FixWidth , QUESTION_WIDTH , MUIA_FixHeight , QUESTION_HEIGHT, MUIA_Bitmap_Width , QUESTION_WIDTH , MUIA_Bitmap_Height , QUESTION_HEIGHT, MUIA_Bodychunk_Depth , QUESTION_DEPTH , MUIA_Bodychunk_Body , (UBYTE *)question_body, MUIA_Bodychunk_Compression, QUESTION_COMPRESSION, MUIA_Bodychunk_Masking , QUESTION_MASKING, MUIA_Bitmap_SourceColors , (ULONG *)question_colors, MUIA_Bitmap_Transparent , 0, End, Child, new_data->CY_Indent=CycleObject, MUIA_Weight, 0, MUIA_Cycle_Entries, indent, End, End, Child, HGroup, Child, new_data->BT_Use = (Object *)SimpleButton(GetStr(MCO_Use)), Child, new_data->BT_Cancel = (Object *)SimpleButton(GetStr(MCO_Cancel)), End, End, End) { data=INST_DATA(cl,obj); CopyMem(new_data,data,sizeof(struct Composer_Data)); FreeVec(new_data); set(data->ST_Label,MUIA_ShortHelp,GetStr(MOH_Label)); set(data->PO_Device,MUIA_ShortHelp,GetStr(MOH_Device)); set(data->CM_Border,MUIA_ShortHelp,GetStr(MOH_3d)); set(data->CM_Bg,MUIA_ShortHelp,GetStr(MOH_Bg)); set(data->CM_NoGauge,MUIA_ShortHelp,GetStr(MOH_NoGauge)); set(data->CM_NoFmt,MUIA_ShortHelp,GetStr(MOH_NoFmt)); set(data->CM_NoBase,MUIA_ShortHelp,GetStr(MOH_NoBase)); insertComposerSettings(data->gauge,data); data->originator = (Object *)GetTagData(Originator,0,msg->ops_AttrList); DoMethod(data->LV_Device, MUIM_Notify,MUIA_Listview_DoubleClick ,TRUE,obj,1,Dis_ID_DoubleClickDevice); DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_gauge ,data->ST_Label,3,MUIM_Set,MUIA_Disabled,FALSE); DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,data->ST_Label,3,MUIM_Set,MUIA_Disabled,TRUE); DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_gauge ,data->CM_3D,3,MUIM_Set,MUIA_Disabled,FALSE); DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,data->CM_3D,3,MUIM_Set,MUIA_Disabled,TRUE); DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_gauge ,data->CM_Shadow,3,MUIM_Set,MUIA_Disabled,FALSE); DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,data->CM_Shadow,3,MUIM_Set,MUIA_Disabled,TRUE); DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_gauge ,data->CM_Bg,3,MUIM_Set,MUIA_Disabled,FALSE); DoMethod(data->CY_Type, MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,data->CM_Bg,3,MUIM_Set,MUIA_Disabled,TRUE); if(data->gauge->type!=typ_clock_) DoMethod(data->BT_Quest, MUIM_Notify,MUIA_Pressed,FALSE, WI_HelpFmt ,3,MUIM_Set,MUIA_Window_Open,TRUE); else DoMethod(data->BT_Quest, MUIM_Notify,MUIA_Pressed,FALSE, WI_HelpClock ,3,MUIM_Set,MUIA_Window_Open,TRUE); DoMethod(obj, MUIM_Notify,MUIA_Window_CloseRequest,TRUE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,FALSE); DoMethod(data->BT_Cancel, MUIM_Notify,MUIA_Pressed,FALSE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,FALSE); DoMethod(data->BT_Use, MUIM_Notify,MUIA_Pressed,FALSE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,TRUE); DoMethod(obj, MUIM_Notify,MUIA_Window_MenuAction,CMP_SAVE,obj,1,Dis_ID_SaveGauge); DoMethod(obj, MUIM_Notify,MUIA_Window_MenuAction,CMP_LOAD,obj,1,Dis_ID_LoadGauge); return((ULONG)obj); } } } return(0L); } static __saveds __asm ULONG ComposerDispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg) { switch (msg->MethodID) { case OM_NEW : return(Composer_New (cl,obj,(APTR)msg)); case Dis_ID_ComposerSave : return(Composer_Save (cl,obj,(APTR)msg)); case Dis_ID_DoubleClickDevice : return(DoubleClickDev (cl,obj,(APTR)msg)); case Dis_ID_SaveGauge : return(SaveGaugeSet (cl,obj)); case Dis_ID_LoadGauge : return(LoadGaugeSet (cl,obj)); } return(DoSuperMethodA(cl,obj,msg)); } /// /*************************************************/ /* Launcher Class */ /*************************************************/ /******************************************/ /* Launcher Menu */ /******************************************/ /// struct NewMenu LauMenuData[] = { { NM_TITLE, (STRPTR)MCM_Gauge , 0 ,0 ,0 ,(APTR)CMP_PROJECT }, { NM_ITEM , (STRPTR)MCM_Open ,"O",0 ,0 ,(APTR)CMP_LOAD }, { NM_ITEM , (STRPTR)MCM_SaveAs ,"S",0 ,0 ,(APTR)CMP_SAVE }, { NM_ITEM , NM_BARLABEL , 0 ,0 ,0 ,(APTR)0 }, { NM_ITEM , (STRPTR)MCM_Cancel ,"C",0 ,0 ,(APTR)CMP_CANCEL }, { NM_END,NULL,0,0,0,(APTR)0 } }; /// /******************************************/ /* Launcher class */ /******************************************/ /// #define lind_realcenter 0 #define lind_center 1 #define lind_left 2 #define lind_right 3 #define launch_wb 0 #define launch_cli 1 #define Dis_ID_NewEntry 13 #define Dis_ID_RemoveEntry 14 #define Dis_ID_CloneEntry 15 #define Dis_ID_ChangeActive 16 #define Dis_ID_InsertActive 17 #define Dis_ID_LoadSet 19 #define Dis_ID_LoadStr 20 #define Dis_ID_SaveLauncher 21 #define Dis_ID_LoadLauncher 22 struct lau_entry { char lau_titl[32]; char lau_cmd[256]; UWORD lau_type; char lau_pth[256]; char lau_out[256]; char lau_img[256]; ULONG lau_stack; }; char *reglauncher[] ={(STRPTR)MCR_entries,(STRPTR)MCR_general,(STRPTR)MCR_colors,0L}; char *cyplace[] ={(STRPTR)MCR_up,(STRPTR)MCR_down,(STRPTR)MCR_over,0L}; char *cyindent[] ={(STRPTR)MCR_rightcenter,(STRPTR)MCR_center,(STRPTR)MCR_left,(STRPTR)MCR_right,0L}; char *lau_type[] ={"WB","CLI",0L}; __saveds __asm APTR lau_consfunc(__a1 struct lau_entry *src) { return(src); } __saveds __asm ULONG lau_desfunc(__a1 struct lau_entry *src) { return(FreeVec(src)); } __saveds __asm void lau_dispfunc(__a2 char **array,__a1 struct lau_entry *src) { *array++ = &src->lau_titl[0]; *array++ = &src->lau_cmd[0]; *array = lau_type[src->lau_type]; } static const struct Hook lau_ConstructHook = { { 0,0 }, (void *)lau_consfunc, NULL, NULL }; static const struct Hook lau_DestructHook = { { 0,0 }, (void *)lau_desfunc , NULL, NULL }; static const struct Hook lau_DisplayHook = { { 0,0 }, (void *)lau_dispfunc, NULL, NULL }; struct Launcher_Data { struct tm_gau_set *gauge; Object *originator, *BT_Cancel, *BT_Use, *CS_Colors[8], *LAU_Menu, *LV_Entries, *ST_listfile, *CM_Xen, *CM_Bg, *CM_Shadow, *CM_Border, *CM_Transparent, *BT_New, *BT_Remove, *BT_Clone, *BT_Save, *BT_Reload, *ST_File, *ST_Title, *ST_Stack, *ST_Path, *ST_Out, *CY_File, *CY_Place, *CY_Indent, *NB_Height, *ST_Font, *ST_Label, *ST_Img, *ST_MImg; }; struct LauncherFinishMsg { ULONG MethodID; Object *win; ULONG ok; }; ULONG Launcher_Close(struct IClass *cl, Object *obj, struct LauncherFinishMsg *msg) { if(msg->ok) { if(DoMethod(msg->win,Dis_ID_LauncherSave)) { set(msg->win,MUIA_Window_Open,FALSE); DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_REMMEMBER,msg->win); MUI_DisposeObject(msg->win); } } else { set(msg->win,MUIA_Window_Open,FALSE); DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_REMMEMBER,msg->win); MUI_DisposeObject(msg->win); } return((ULONG)0L); } insertLauncherSettings(struct tm_gau_set *gauge, struct Launcher_Data *data) { int i; char dummy[256]; for(i=0;i<8;i++) initColor(&gauge->Colors[i],data->CS_Colors[i]); set(data->CM_Xen ,MUIA_Selected, gauge->sty_3d); set(data->CM_Transparent,MUIA_Selected, gauge->sty_noformat); set(data->CM_Border ,MUIA_Selected, gauge->sty_border); set(data->CM_Bg ,MUIA_Selected, gauge->sty_bg); set(data->CM_Shadow ,MUIA_Selected, gauge->sty_shadow); set(data->CY_Place ,MUIA_Cycle_Active, gauge->sty_nogauge); set(data->CY_Indent ,MUIA_Cycle_Active, gauge->indent); set(data->ST_listfile,MUIA_String_Contents, gauge->expansion); set(data->NB_Height,MUIA_Numeric_Value,gauge->size_y+100); strcpy(&dummy[0],gauge->font); sprintf((char *)&dummy[strlen(&dummy[0])-5],"/%d",gauge->font_size); set(data->ST_Font ,MUIA_String_Contents,&dummy[0]); if(gauge->type==typ_iconlauncher) { set(data->ST_Font, MUIA_Disabled, TRUE); set(data->NB_Height, MUIA_Disabled, TRUE); set(data->CM_Xen, MUIA_Disabled, TRUE); set(data->CM_Border, MUIA_Disabled, TRUE); set(data->CM_Bg, MUIA_Disabled, TRUE); set(data->CM_Shadow, MUIA_Disabled, TRUE); set(data->CY_Place, MUIA_Disabled, TRUE); set(data->ST_Label, MUIA_Disabled, TRUE); set(data->ST_MImg, MUIA_Disabled, TRUE); for(i=0;i<8;i++) set(data->CS_Colors[i],MUIA_Disabled,TRUE); } } saveLauncherSettings(struct Launcher_Data *data) { int i; ULONG dummy; for(i=0;i<8;i++) getColor(&data->gauge->Colors[i],data->CS_Colors[i]); get(data->CM_Xen ,MUIA_Selected ,&dummy); data->gauge->sty_3d =(UWORD)dummy; get(data->CM_Transparent,MUIA_Selected ,&dummy); data->gauge->sty_noformat=(UWORD)dummy; get(data->CM_Border ,MUIA_Selected ,&dummy); data->gauge->sty_border =(UWORD)dummy; get(data->CM_Bg ,MUIA_Selected ,&dummy); data->gauge->sty_bg =(UWORD)dummy; get(data->CM_Shadow ,MUIA_Selected ,&dummy); data->gauge->sty_shadow =(UWORD)dummy; get(data->CY_Place ,MUIA_Cycle_Active ,&dummy); data->gauge->sty_nogauge =(UWORD)dummy; get(data->CY_Indent ,MUIA_Cycle_Active ,&dummy); data->gauge->indent =(UWORD)dummy; get(data->ST_listfile,MUIA_String_Contents,&dummy); strcpy((char *)&data->gauge->expansion[0], dummy ? (char *)dummy : " " ); get(data->NB_Height ,MUIA_Numeric_Value ,&dummy); data->gauge->size_y =(UWORD)dummy-100; get(data->ST_Font ,MUIA_String_Contents,&dummy); sscanf((char *)dummy,"%[^/]/%d",&data->gauge->font[0],&i); strcat(&data->gauge->font[0],".font"); data->gauge->font_size=(WORD)i; DoMethod(visible,MUIM_List_Redraw,MUIV_List_Redraw_All); } LoadLauncherSet(struct IClass *cl,Object *obj) { struct Launcher_Data *data=INST_DATA(cl,obj); char *file; ULONG my_file; ULONG buf; if(file=getfilename(obj,GetStr(MCM_LoadGauge),"#?.tmgauge",FALSE)) { if(my_file=(ULONG)Open(file,MODE_OLDFILE)) { Read(my_file,&buf,4L); if(buf==0x544D4732) { Read(my_file,data->gauge,sizeof(struct tm_gau_set)); insertLauncherSettings(data->gauge,data); DoMethod(obj,Dis_ID_LoadSet,0L); } else MUI_RequestA((Object *)xget(obj,MUIA_ApplicationObject),obj,0,"TinyMeterPrefs",GetStr(MCM_NotTmGauge_fmt),GetStr(MCM_NotTmGauge),NULL); Close(my_file); } } } SaveLauncherSet(struct IClass *cl,Object *obj) { struct Launcher_Data *data=INST_DATA(cl,obj); char *file; ULONG buf,my_file; saveLauncherSettings( data ); buf=0x544D4732; if(file=getfilename(obj,GetStr(MCM_SaveGauge),"#?.tmgauge",TRUE)) { if(my_file=Open(file,MODE_NEWFILE)) { Write(my_file,&buf,4L); Write(my_file,data->gauge,sizeof(struct tm_gau_set)); Close(my_file); } } } struct Launcher_Message { ULONG MethodID; }; static struct lau_entry lau_default= { "Empty", "", 0, "", "", "", 4096 }; Launcher_ChangeActive(struct IClass *cl,Object *obj,struct Launcher_Message *msg) { struct lau_entry *entry; struct Launcher_Data *data; data=INST_DATA(cl,obj); DoMethod(data->LV_Entries,MUIM_List_GetEntry,MUIV_List_GetEntry_Active, &entry); if(entry) { set(data->ST_File, MUIA_String_Contents, entry->lau_cmd); set(data->ST_Title, MUIA_String_Contents, entry->lau_titl); set(data->ST_Path, MUIA_String_Contents, entry->lau_pth); set(data->ST_Out, MUIA_String_Contents, entry->lau_out); set(data->ST_Img, MUIA_String_Contents, entry->lau_img); set(data->ST_Stack, MUIA_String_Integer, (ULONG)entry->lau_stack); // This MUST be the last! set(data->CY_File, MUIA_Cycle_Active , (ULONG)entry->lau_type); } } Launcher_InsertActive(struct IClass *cl,Object *obj,struct Launcher_Message *msg) { char *str,*foo,*dummy,*foobar,*klatuu; struct lau_entry *entry; ULONG active,stk; struct Launcher_Data *data; data=INST_DATA(cl,obj); get(data->ST_File ,MUIA_String_Contents, &str); get(data->ST_Title ,MUIA_String_Contents, &foo); get(data->ST_Path ,MUIA_String_Contents, &dummy); get(data->ST_Out ,MUIA_String_Contents, &foobar); get(data->ST_Img ,MUIA_String_Contents, &klatuu); get(data->ST_Img ,MUIA_String_Contents, &klatuu); get(data->ST_Stack ,MUIA_String_Integer, &stk); get(data->CY_File ,MUIA_Cycle_Active, &active); DoMethod(data->LV_Entries,MUIM_List_GetEntry,MUIV_List_GetEntry_Active, &entry); if(entry) { strcpy(entry->lau_titl,foo); strcpy(entry->lau_cmd, str); strcpy(entry->lau_pth, dummy); strcpy(entry->lau_out, foobar); strcpy(entry->lau_img, klatuu); entry->lau_stack = stk; entry->lau_type = (UWORD)active; DoMethod(data->LV_Entries,MUIM_List_Redraw,MUIV_List_Redraw_Active); } } __geta4 LONG AppMsgFunc(__A2 APTR obj, __A1 struct AppMessage **x) { struct WBArg *ap; ULONG active; struct lau_entry *entry; struct AppMessage *amsg = *x; int i; static char buf[256]; char *b=buf; for (ap=amsg->am_ArgList,i=0;i<amsg->am_NumArgs;i++,ap++) { get(obj,MUIA_List_Active,&active); if(entry=(struct lau_entry *)AllocVec(sizeof(struct lau_entry),MEMF_CLEAR)) { CopyMem(&lau_default,entry, sizeof(struct lau_entry)); NameFromLock(ap->wa_Lock,buf,sizeof(buf)); strcpy(entry->lau_pth, buf); strcpy(entry->lau_titl,ap->wa_Name); AddPart(buf,ap->wa_Name,sizeof(buf)); strcpy(entry->lau_cmd, buf); entry->lau_type=0L; DoMethod(obj, MUIM_List_InsertSingle, entry,active); set (obj, MUIA_List_Active, active); } } return(0); } static const struct Hook AppMsgHook = { { NULL,NULL },(void *)AppMsgFunc,NULL,NULL }; Launcher_NewEntry(struct IClass *cl,Object *obj,struct Launcher_Message *msg) { ULONG active; struct lau_entry *entry; struct Launcher_Data *data; data=INST_DATA(cl,obj); get(data->LV_Entries,MUIA_List_Active,&active); if(entry=(struct lau_entry *)AllocVec(sizeof(struct lau_entry),MEMF_CLEAR)) { CopyMem(&lau_default,entry, sizeof(struct lau_entry)); DoMethod(data->LV_Entries, MUIM_List_InsertSingle, entry,active); set (data->LV_Entries, MUIA_List_Active, active); } } Launcher_RemoveEntry(struct IClass *cl,Object *obj,struct Launcher_Message *msg) { struct Launcher_Data *data; data=INST_DATA(cl,obj); DoMethod(data->LV_Entries,MUIM_List_Remove,MUIV_List_Remove_Active); } Launcher_CloneEntry(struct IClass *cl,Object *obj,struct Launcher_Message *msg) { struct lau_entry *desc,*news; struct Launcher_Data *data; data=INST_DATA(cl,obj); DoMethod(data->LV_Entries,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&desc); if (desc) { if(news=AllocVec(sizeof(struct lau_entry),0L)) { CopyMem(desc,news,sizeof(struct lau_entry)); DoMethod(data->LV_Entries,MUIM_List_InsertSingle,news,MUIV_List_Insert_Active); } } } Launcher_CleanString(char *buffer) { int i; if((i=strlen(buffer))<1) { buffer[0]=0x00; } else { if(buffer[i-1]==0x0a) { buffer[i-1]=0x00; } } } Launcher_LoadFromSettings(struct IClass *cl,Object *obj,struct Launcher_Message *msg) { BPTR file; char buffer[256]; struct Launcher_Data *data; struct lau_entry *entry; data=INST_DATA(cl,obj); if(file=(BPTR)Open(&data->gauge->expansion[0],MODE_OLDFILE)) { if(FGets(file,&buffer[0],255)) { if(*((ULONG *)&buffer[0])==0x544D4C49) { if(FGets(file,&buffer[0],255)) { Launcher_CleanString(buffer); set(data->ST_Label,MUIA_String_Contents,&buffer[0]); if(FGets(file,&buffer[0],255)) { Launcher_CleanString(buffer); set(data->ST_MImg,MUIA_String_Contents,&buffer[0]); while(FGets(file,&buffer[0],32)) { if(entry=(struct lau_entry *)AllocVec(sizeof(struct lau_entry),MEMF_CLEAR)) { Launcher_CleanString(buffer); strcpy(entry->lau_titl,buffer); if(FGets(file,buffer,255)) { Launcher_CleanString(buffer); strcpy(entry->lau_cmd,buffer); if(FGets(file,buffer,4)) { entry->lau_type=*((UBYTE *)&buffer[0])-0x30; if(FGets(file,buffer,255)) { Launcher_CleanString(buffer); strcpy(entry->lau_pth,buffer); if(FGets(file,buffer,255)) { Launcher_CleanString(buffer); strcpy(entry->lau_out,buffer); if(FGets(file,buffer,16)) { Launcher_CleanString(buffer); sscanf(buffer,"%ld",&entry->lau_stack); if(FGets(file,buffer,255)) { Launcher_CleanString(buffer); strcpy(entry->lau_img,buffer); } else strcpy(entry->lau_out,""); } else entry->lau_stack=0; } else strcpy(entry->lau_out," "); } else strcpy(entry->lau_pth," "); } else entry->lau_type=0; } else strcpy(entry->lau_titl,"Empty"); DoMethod(data->LV_Entries, MUIM_List_InsertSingle, entry,MUIV_List_Insert_Bottom); } } } } } } Close(file); } } Launcher_LoadFromString(struct IClass *cl,Object *obj,struct Launcher_Message *msg) { BPTR file; char *filename; char buffer[256]; struct Launcher_Data *data; struct lau_entry *entry; data=INST_DATA(cl,obj);; get(data->ST_listfile,MUIA_String_Contents,&filename); if(filename) { if(file=(BPTR)Open(filename,MODE_OLDFILE)) { DoMethod(data->LV_Entries,MUIM_List_Clear,0L); if(FGets(file,&buffer[0],255)) { if(*((ULONG *)&buffer[0])==0x544D4C49) { if(FGets(file,&buffer[0],255)) { Launcher_CleanString(buffer); set(data->ST_Label,MUIA_String_Contents,&buffer[0]); if(FGets(file,&buffer[0],255)) { Launcher_CleanString(buffer); set(data->ST_MImg,MUIA_String_Contents,&buffer[0]); while(FGets(file,&buffer[0],32)) { if(entry=(struct lau_entry *)AllocVec(sizeof(struct lau_entry),MEMF_CLEAR)) { Launcher_CleanString(buffer); strcpy(entry->lau_titl,buffer); if(FGets(file,buffer,255)) { Launcher_CleanString(buffer); strcpy(entry->lau_cmd,buffer); if(FGets(file,buffer,4)) { entry->lau_type=*((UBYTE *)&buffer[0])-0x30; if(FGets(file,buffer,255)) { Launcher_CleanString(buffer); strcpy(entry->lau_pth,buffer); if(FGets(file,buffer,255)) { Launcher_CleanString(buffer); strcpy(entry->lau_out,buffer); if(FGets(file,buffer,16)) { Launcher_CleanString(buffer); sscanf(buffer,"%ld",&entry->lau_stack); if(FGets(file,buffer,255)) { Launcher_CleanString(buffer); strcpy(entry->lau_img,buffer); } else strcpy(entry->lau_out,""); } else entry->lau_stack=0; } else strcpy(entry->lau_out,""); } else strcpy(entry->lau_pth,""); } else entry->lau_type=0; } else strcpy(entry->lau_titl,"Empty"); DoMethod(data->LV_Entries, MUIM_List_InsertSingle, entry,MUIV_List_Insert_Bottom); } } } } } } Close(file); } } } ULONG Launcher_Save(struct IClass *cl,Object *obj,struct Launcher_Message *msg) { int i; struct lau_entry *entry; char *filename, *label, buffer[256]; BPTR file; struct Launcher_Data *data; data=INST_DATA(cl,obj); get(data->ST_listfile,MUIA_String_Contents,&filename); if(filename&&filename[0]) { if(strcmp(filename,"Provide a filename!")!=0) { if(file=(BPTR)Open(filename,MODE_NEWFILE)) { FPuts(file,"TMLI\n"); get(data->ST_Label,MUIA_String_Contents,&label); FPuts(file,label); FPutC(file,0x0a); get(data->ST_MImg,MUIA_String_Contents,&label); FPuts(file,label); FPutC(file,0x0a); for (i=0;;i++) { DoMethod(data->LV_Entries,MUIM_List_GetEntry,i,&entry); if (!entry) break; FPuts(file,entry->lau_titl); FPutC(file,0x0a); FPuts(file,entry->lau_cmd); FPutC(file,0x0a); FPutC(file,entry->lau_type+0x30); FPutC(file,0x0a); FPuts(file,entry->lau_pth); FPutC(file,0x0a); FPuts(file,entry->lau_out); FPutC(file,0x0a); sprintf(&buffer[0],"%0ld",entry->lau_stack); FPuts(file,&buffer[0]); FPutC(file,0x0a); FPuts(file,entry->lau_img); FPutC(file,0x0a); } Close(file); saveLauncherSettings(data); return(TRUE); } } } MUI_RequestA((Object *)xget(obj,MUIA_ApplicationObject),obj,0,"TinyMeterPrefs",GetStr(MOL_nofilename_fmt),GetStr(MOL_nofilename),NULL); return(FALSE); } static ULONG Launcher_New(struct IClass *cl,Object *obj,struct opSet *msg) { struct Launcher_Data *data,*new_data; if(new_data=AllocVec(sizeof(struct Launcher_Data),0L)) { if(new_data->gauge = (struct tm_gau_set *)GetTagData(Gauge_Settings,0,msg->ops_AttrList)) { if( obj = (Object *)DoSuperNew(cl,obj, MUIA_Window_Title , gau_types[new_data->gauge->type] , MUIA_Window_ID , MAKE_ID('T','M','L','A'), MUIA_Window_Menustrip , new_data->LAU_Menu = MUI_MakeObject(MUIO_MenustripNM,LauMenuData,0), MUIA_Window_AppWindow , TRUE, WindowContents, VGroup, ButtonFrame, Child, HGroup, Child, VGroup, MUIA_Background, MUII_SHADOW, Child, VSpace(0), Child, BodychunkObject, MUIA_FixWidth , HEADER_LOGO_WIDTH , MUIA_FixHeight , HEADER_LOGO_HEIGHT, MUIA_Bitmap_Width , HEADER_LOGO_WIDTH , MUIA_Bitmap_Height , HEADER_LOGO_HEIGHT, MUIA_Bodychunk_Depth , HEADER_LOGO_DEPTH , MUIA_Bodychunk_Body , (UBYTE *)header_logo_body, MUIA_Bodychunk_Compression, HEADER_LOGO_COMPRESSION, MUIA_Bodychunk_Masking , HEADER_LOGO_MASKING, MUIA_Bitmap_SourceColors , (ULONG *)header_logo_colors, MUIA_Bitmap_Transparent , 0, End, End, Child, RegisterGroup(reglauncher), MUIA_Register_Frame, TRUE, Child, VGroup, Child, VGroup, Child, new_data->LV_Entries=(Object *)ListviewObject, MUIA_Listview_Input, TRUE, MUIA_Listview_DragType, 1, MUIA_Dropable, FALSE, MUIA_Listview_List, ListObject, MUIA_Frame, MUIV_Frame_InputList, MUIA_List_DragSortable, TRUE, MUIA_List_ConstructHook, &lau_ConstructHook, MUIA_List_DestructHook , &lau_DestructHook, MUIA_List_DisplayHook , &lau_DisplayHook, MUIA_List_Format , "BAR,MIW=5 MAW=100 BAR,", MUIA_List_Active, MUIV_List_Active_Top, End, End, Child, HGroup, Child, Label(GetStr(MLO_Command)), Child, new_data->ST_File=PopaslObject, MUIA_Popstring_String, String(NULL,255), MUIA_Popstring_Button, PopButton(MUII_PopFile), ASLFO_TitleText , GetStr(MLO_sel_listfile), End, Child, new_data->CY_File=CycleObject, MUIA_Cycle_Entries, &lau_type[0], MUIA_Weight, 0, End, End, Child, ColGroup(4), Child, Label(GetStr(MLO_Title)), Child, new_data->ST_Title=String(0,32), Child, Label(GetStr(MLO_Pic)), Child, new_data->ST_Img=PopaslObject, MUIA_Popstring_String, String(NULL,255), MUIA_Popstring_Button, PopButton(MUII_PopFile), ASLFO_TitleText , GetStr(MLO_sel_listfile), End, Child, Label(GetStr(MLO_WorkDir)), Child, new_data->ST_Path=PopaslObject, MUIA_Popstring_String, String(NULL,255), MUIA_Popstring_Button, PopButton(MUII_PopFile), ASLFO_TitleText , GetStr(MLO_sel_listfile), End, Child, Label(GetStr(MLO_OutPut)), Child, new_data->ST_Out=String(NULL,32), Child, Label(GetStr(MLO_Stack)), Child, new_data->ST_Stack=StringObject, StringFrame, MUIA_String_Accept, "0123456789", MUIA_String_MaxLen, 32, MUIA_String_Contents, NULL, End, Child, HVSpace, Child, HVSpace, End, Child, ColGroup(3), Child, new_data->BT_New=SimpleButton(GetStr(MLO_New)), Child, new_data->BT_Remove=SimpleButton(GetStr(MLO_Remove)), Child, new_data->BT_Clone=SimpleButton(GetStr(MLO_Clone)), End, End, End, Child, VGroup, MUIA_Group_SameWidth,FALSE, Child, ColGroup(2), Child, Label(GetStr(MCO_xen)), Child, HGroup, Child, new_data->CM_Xen=CheckMark(new_data->gauge->sty_3d), Child, HVSpace, End, Child, Label(GetStr(MCO_transparent)), Child, HGroup, Child, new_data->CM_Transparent=CheckMark(new_data->gauge->sty_noformat), Child, HVSpace, End, Child, Label(GetStr(MCO_slabel)), Child, HGroup, Child, new_data->CM_Shadow=CheckMark(new_data->gauge->sty_shadow), Child, HVSpace, End, Child, Label(GetStr(MCO_background)), Child, HGroup, Child, new_data->CM_Bg=CheckMark(new_data->gauge->sty_bg), Child, HVSpace, End, Child, Label(GetStr(MCO_border)), Child, HGroup, Child, new_data->CM_Border=CheckMark(new_data->gauge->sty_border), Child, HVSpace, End, Child, Label(GetStr(MCO_place)), Child, HGroup, Child, new_data->CY_Place=CycleObject, MUIA_Cycle_Entries, &cyplace[0], End, Child, HVSpace, End, Child, Label(GetStr(MCR_poslabel)), Child, HGroup, Child, new_data->CY_Indent=CycleObject, MUIA_Cycle_Entries, &cyindent[0], End, Child, HVSpace, End, Child, Label(GetStr(MCO_height)), Child, ColGroup(2), Child, new_data->NB_Height=MUI_MakeObject(MUIO_NumericButton,NULL,100,1000,GetStr(MCO_height_fmt)), Child, HVSpace, End, Child, Label(GetStr(MCO_font)), Child, PopaslObject, MUIA_Popstring_String, new_data->ST_Font=(Object *)String(0L,80), MUIA_Popstring_Button, PopButton(MUII_PopUp), MUIA_Popasl_Type , ASL_FontRequest, ASLFO_TitleText , GetStr(MCO_sel_font), End, End, End, Child, ColGroup(2), Child, ColGroup(2), Child, VSpace(0), Child, VSpace(0), Child, Label(GetStr(MCO_col_label)), Child, new_data->CS_Colors[col_label] =MakePen(), Child, Label(GetStr(MCO_col_entry)), Child, new_data->CS_Colors[col_format] =MakePen(), Child, Label(GetStr(MCO_col_hbright)), Child, new_data->CS_Colors[col_base] =MakePen(), Child, Label(GetStr(MCO_col_hdark)), Child, new_data->CS_Colors[col_current] =MakePen(), Child, VSpace(0), Child, VSpace(0), End, Child, ColGroup(2), Child, VSpace(0), Child, VSpace(0), Child, Label(GetStr(MCO_col_cursor)), Child, new_data->CS_Colors[col_negative] =MakePen(), Child, Label(GetStr(MCO_col_bright)), Child, new_data->CS_Colors[col_bright] =MakePen(), Child, Label(GetStr(MCO_col_dark)), Child, new_data->CS_Colors[col_dark] =MakePen(), Child, Label(GetStr(MCO_col_bg)), Child, new_data->CS_Colors[col_bg] =MakePen(), Child, VSpace(0), Child, VSpace(0), End, End, End, End, Child, VGroup, Child, ColGroup(2), GroupFrame, Child, Label(GetStr(MCO_label)), Child, ColGroup(3), Child, new_data->ST_Label=String(0L,16), Child, Label(GetStr(MLO_Pic)), Child, new_data->ST_MImg=PopaslObject, MUIA_Popstring_String, String(NULL,255), MUIA_Popstring_Button, PopButton(MUII_PopFile), ASLFO_TitleText , GetStr(MLO_sel_picfile), End, End, Child, Label(GetStr(MLO_listfile)), Child, HGroup, Child, new_data->ST_listfile=PopaslObject, MUIA_Popstring_String, String(NULL,255), MUIA_Popstring_Button, PopButton(MUII_PopFile), ASLFO_TitleText , GetStr(MLO_sel_listfile), End, Child, new_data->BT_Reload=TextObject, ButtonFrame, MUIA_Text_Contents, GetStr(MLO_Load), MUIA_Text_PreParse, "\33c", MUIA_InputMode , MUIV_InputMode_RelVerify, MUIA_Background , MUII_ButtonBack, MUIA_Weight, 0, End, End, End, Child, HGroup, Child, new_data->BT_Save = (Object *)SimpleButton(GetStr(MLO_Save)), Child, new_data->BT_Cancel = (Object *)SimpleButton(GetStr(MCO_Cancel)), End, End, End, End) { data=INST_DATA(cl,obj); set(data->ST_Stack,MUIA_ShortHelp,GetStr(MOL_Stack)); set(data->ST_Out,MUIA_ShortHelp,GetStr(MOL_Out)); set(data->ST_listfile,MUIA_ShortHelp,GetStr(MOL_listfile)); CopyMem(new_data,data,sizeof(struct Launcher_Data)); FreeVec(new_data); data->originator = (Object *)GetTagData(Originator,0,msg->ops_AttrList); insertLauncherSettings(data->gauge,data); DoMethod(obj,Dis_ID_LoadSet,0L); DoMethod(obj, MUIM_Notify,MUIA_Window_CloseRequest,TRUE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,4,Dis_ID_LauncherClose,obj,FALSE,data->ST_listfile); DoMethod(data->BT_Cancel, MUIM_Notify,MUIA_Pressed,FALSE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,4,Dis_ID_LauncherClose,obj,FALSE,data->ST_listfile); DoMethod(data->BT_Save, MUIM_Notify,MUIA_Pressed,FALSE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,4,Dis_ID_LauncherClose,obj,TRUE, data->ST_listfile); DoMethod(data->BT_New, MUIM_Notify,MUIA_Pressed,FALSE, obj,1,Dis_ID_NewEntry); DoMethod(data->BT_Remove, MUIM_Notify,MUIA_Pressed,FALSE, obj,1,Dis_ID_RemoveEntry); DoMethod(data->BT_Clone, MUIM_Notify,MUIA_Pressed,FALSE, obj,1,Dis_ID_CloneEntry); DoMethod(data->BT_Reload, MUIM_Notify,MUIA_Pressed,FALSE, obj,1,Dis_ID_LoadStr); DoMethod(data->LV_Entries,MUIM_Notify,MUIA_List_Active,MUIV_EveryTime, obj,1,Dis_ID_ChangeActive); DoMethod(data->ST_File, MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime, obj,1,Dis_ID_InsertActive); DoMethod(data->ST_Title, MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime, obj,1,Dis_ID_InsertActive); DoMethod(data->ST_Stack, MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime, obj,1,Dis_ID_InsertActive); DoMethod(data->ST_Path, MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime, obj,1,Dis_ID_InsertActive); DoMethod(data->ST_Img, MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime, obj,1,Dis_ID_InsertActive); DoMethod(data->CY_File, MUIM_Notify,MUIA_Cycle_Active,MUIV_EveryTime, obj,1,Dis_ID_InsertActive); DoMethod(data->LV_Entries,MUIM_Notify,MUIA_AppMessage,MUIV_EveryTime,data->LV_Entries,3,MUIM_CallHook,&AppMsgHook,MUIV_TriggerValue); set(data->ST_Out,MUIA_Disabled,TRUE); DoMethod(data->CY_File, MUIM_Notify,MUIA_Cycle_Active,0,data->ST_Out,3,MUIM_Set,MUIA_Disabled,TRUE); DoMethod(data->CY_File, MUIM_Notify,MUIA_Cycle_Active,1,data->ST_Out,3,MUIM_Set,MUIA_Disabled,FALSE); DoMethod(obj, MUIM_Notify,MUIA_Window_MenuAction,CMP_SAVE,obj,1,Dis_ID_SaveLauncher); DoMethod(obj, MUIM_Notify,MUIA_Window_MenuAction,CMP_LOAD,obj,1,Dis_ID_LoadLauncher); return((ULONG)obj); } } } return(0L); } static __saveds __asm ULONG LauncherDispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg) { switch (msg->MethodID) { case OM_NEW : return(Launcher_New(cl,obj,(APTR)msg)); case Dis_ID_NewEntry : return(Launcher_NewEntry(cl,obj,(APTR)msg)); case Dis_ID_RemoveEntry : return(Launcher_RemoveEntry(cl,obj,(APTR)msg)); case Dis_ID_CloneEntry : return(Launcher_CloneEntry(cl,obj,(APTR)msg)); case Dis_ID_ChangeActive : return(Launcher_ChangeActive(cl,obj,(APTR)msg)); case Dis_ID_InsertActive : return(Launcher_InsertActive(cl,obj,(APTR)msg)); case Dis_ID_LauncherSave : return(Launcher_Save(cl,obj,(APTR)msg)); case Dis_ID_LoadStr : return(Launcher_LoadFromString(cl,obj,(APTR)msg)); case Dis_ID_LoadSet : return(Launcher_LoadFromSettings(cl,obj,(APTR)msg)); case Dis_ID_SaveLauncher : return(SaveLauncherSet(cl,obj)); case Dis_ID_LoadLauncher : return(LoadLauncherSet(cl,obj)); } return(DoSuperMethodA(cl,obj,msg)); } /// /*************************************************/ /* Main Window and his dispatcher */ /*************************************************/ /******************************************/ /* some vars */ /******************************************/ /// #define Dis_ID_DoubleClick1 1 #define Dis_ID_Finish 2 #define Dis_ID_DoubleClick2 3 #define Dis_ID_Save 4 #define Dis_ID_Snap 5 #define Dis_ID_Load 6 struct NewMenu MenuData1[] = { { NM_TITLE, (STRPTR)MM_Project , 0 ,0 ,0 ,(APTR)MEN_PROJECT }, { NM_ITEM , (STRPTR)MM_Open ,"O",0 ,0 ,(APTR)MEN_OPEN }, { NM_ITEM , (STRPTR)MM_SaveAs ,"S",0 ,0 ,(APTR)MEN_SAVE }, { NM_ITEM , (STRPTR)MM_About ,"?",0 ,0 ,(APTR)MEN_ABOUT }, { NM_ITEM , NM_BARLABEL , 0 ,0 ,0 ,(APTR)0 }, { NM_ITEM , (STRPTR)MM_Quit ,"Q",0 ,0 ,(APTR)MEN_QUIT }, { NM_END,NULL,0,0,0,(APTR)0 } }; struct ls_layout { char *entry_desc; BYTE entry_selected; BOOL entry_max; char *entry[6]; }; struct ls_layout switches[]= { {(STRPTR)ML_Window, 0,0,0,0,0,0,0,0}, {(STRPTR)ML_BgPic, 0,2,(STRPTR)ML_BgPic_None,(STRPTR)ML_BgPic_File,(STRPTR)ML_BgPic_Snap,0,0,0}, {(STRPTR)ML_WinBeh, 0,2,(STRPTR)ML_WinBeh_Normal,(STRPTR)ML_WinBeh_Front,(STRPTR)ML_WinBeh_Back,0,0,0}, {(STRPTR)ML_WinMov, 0,1,(STRPTR)ML_WinMov_Normal,(STRPTR)ML_WinMov_Fixed,0,0,0,0}, {(STRPTR)ML_Border, 0,3,(STRPTR)ML_Border_None,(STRPTR)ML_Border_Simple,(STRPTR)ML_Border_Standard,(STRPTR)ML_Border_Double,0,0}, {(STRPTR)ML_Startup, 0,0,0,0,0,0,0,0}, {(STRPTR)ML_ScrNot, 0,1,(STRPTR)ML_ScrNot_No,(STRPTR)ML_ScrNot_Yes,0,0,0,0}, {(STRPTR)ML_Cpu, 0,2,(STRPTR)ML_Cpu_None,(STRPTR)ML_Cpu_Executive,(STRPTR)ML_Cpu_Own,0,0,0}, NULL }; char *mainlister[]= { (STRPTR)MOL_General, (STRPTR)MOL_Compose, NULL }; char *sublister[]= { (STRPTR)MOL_sub_General, (STRPTR)MOL_sub_Flags, (STRPTR)MOL_sub_Window, NULL }; struct MainData { ULONG dummy; }; char *pubscr[256]; Object *BT_Save, *BT_Use, *BT_Test, *BT_Cancel, *ls_Switch, *ls_PubScr, *lv_Switch, *lv_PubScr, *ST_PubScr, *PO_PubScr, *MN_Main, *WI_About, *IN_posx, *IN_posy, *IN_sizx, *ST_bg, *NB_wait, *NB_mem, *NB_vol, *NB_bordx, *NB_bordy, *NB_spcx, *NB_spcy, *NB_col, *NB_pri, *MN_Colors[3], *CM_Falling, *BT_Snap, *LV_Composer; /// /******************************************/ /* some listview hooks */ /******************************************/ /// __saveds __asm APTR lay_consfunc(__a1 struct ls_layout *src) { return(src); } __saveds __asm ULONG lay_desfunc(__a1 struct ls_layout *src) { return(0L); } __saveds __asm void lay_dispfunc(__a2 char **array,__a1 struct ls_layout *src) { *array++ = src->entry_desc; *array = src->entry[src->entry_selected]; } static const struct Hook lay_ConstructHook = { { 0,0 }, (void *)lay_consfunc, NULL, NULL }; static const struct Hook lay_DestructHook = { { 0,0 }, (void *)lay_desfunc , NULL, NULL }; static const struct Hook lay_DisplayHook = { { 0,0 }, (void *)lay_dispfunc, NULL, NULL }; /// /******************************************/ /* load settings and a method */ /******************************************/ /// #define load_standard 0 #define load_file 1 struct LoadSetMsg { ULONG MethodID; ULONG what; }; insertSettings(struct tm_sys_set *set,struct tm_gau_set *list) { struct ls_layout *src; set(NB_col ,MUIA_Numeric_Value,set->colums); set(NB_bordx,MUIA_Numeric_Value,set->win_border_x); set(NB_bordy,MUIA_Numeric_Value,set->win_border_y); set(NB_spcx ,MUIA_Numeric_Value,set->win_space_x); set(NB_spcy ,MUIA_Numeric_Value,set->win_space_y); set(NB_wait ,MUIA_Numeric_Value,set->start_wait); set(NB_mem ,MUIA_Numeric_Value,set->mem_refresh); set(NB_vol ,MUIA_Numeric_Value,set->vol_refresh); set(NB_pri ,MUIA_Numeric_Value,set->pri); DoMethod(ls_Switch,MUIM_List_GetEntry,1,&src); src->entry_selected=set->bg_type; DoMethod(ls_Switch,MUIM_List_GetEntry,2,&src); src->entry_selected=set->win_backfront; DoMethod(ls_Switch,MUIM_List_GetEntry,3,&src); src->entry_selected=set->win_move; DoMethod(ls_Switch,MUIM_List_GetEntry,4,&src); src->entry_selected=set->bd_type; DoMethod(ls_Switch,MUIM_List_GetEntry,6,&src); src->entry_selected=set->start_usescreennotify; DoMethod(ls_Switch,MUIM_List_GetEntry,7,&src); src->entry_selected=set->Executive; initColor(&set->bg_color,MN_Colors[0]); initColor(&set->bright_color,MN_Colors[1]); initColor(&set->dark_color,MN_Colors[2]); set(ST_PubScr, MUIA_String_Contents ,&set->pub_name[0]); set(IN_posx, MUIA_String_Integer ,set->x_pos); set(IN_posy, MUIA_String_Integer ,set->y_pos); set(IN_sizx, MUIA_String_Integer ,set->x_siz); set(ST_bg, MUIA_String_Contents ,&set->bg_picture[0]); set(CM_Falling, MUIA_Selected ,set->lay_falling); DoMethod(visible,MUIM_List_Clear,0L); do { DoMethod(visible,MUIM_List_InsertSingle,list,MUIV_List_Insert_Bottom); } while(list=list->next); DoMethod(visible,MUIM_List_Redraw,MUIV_List_Redraw_All); DoMethod(ls_Switch,MUIM_List_Redraw,MUIV_List_Redraw_All); } int getNum(struct tm_gau_set *list) { int num=1; while(list=list->next)num++; return(num); } useDefault(struct tm_data *data) { struct tm_gau_set *many, *act, *old; CopyMem((char *)&default_set,data->set,sizeof(struct tm_sys_set)); if(act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),0L)) { many=&g1; data->list=act; CopyMem((char *)many,act,sizeof(struct tm_gau_set)); while(many=many->next) { old=act; if(act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),0L)) { old->next=act; CopyMem((char *)many,act,sizeof(struct tm_gau_set)); } else {act->next=0L;return;} } act->next=0L; } else data->list=0L; } BOOL loadSettings(Object *obj,struct tm_data *data, char *file) { ULONG my_file; struct tm_gau_set *many,*act; if(!maindata->set)maindata->set=AllocVec(sizeof(struct tm_sys_set),0L); if(my_file=(UBYTE *)Open(file,MODE_OLDFILE)) { if(!Read(my_file,data->set,(ULONG)sizeof(struct tm_sys_set))) { useDefault(data); } else { act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),NULL); data->list=act; many=act; while(Read(my_file,(char *)act,(ULONG)sizeof(struct tm_gau_set))) { many=act; act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),NULL); many->next=act; } many->next=NULL; FreeVec(act); act=NULL; } Close(my_file); } else useDefault(data); data->num_of_gaug=getNum(data->list); } ULONG loadManager(struct IClass *cl,Object *obj, struct LoadSetMsg *msg) { char *file; switch (msg->what) { case load_standard: loadSettings(obj,maindata,"ENV:TinyMeter"); insertSettings(maindata->set,maindata->list); break; case load_file: if(file=getfilename(obj,GetStr(MM_OpenTitle),"#?.tm",FALSE)) { loadSettings(obj,maindata,file); insertSettings(maindata->set,maindata->list); } break; } return((ULONG)DoSuperMethodA(cl,obj,msg)); } /// /******************************************/ /* test settings and window snapping */ /******************************************/ /// #include <exec/memory.h> #include <exec/ports.h> #include <exec/execbase.h> #define test_test 0 #define test_getwin 1 struct TestMessage { struct Message ts_Message; ULONG MethodID; struct tm_sys_set *set; struct tm_gau_set *list; ULONG posx, posy, sizx; }; struct TestMessage *ts_msg; struct MsgPort *p_port; struct MsgPort *p_reply; BOOL SafePutToPort(struct Message *message, char *portname) { struct MsgPort *port; Forbid(); port = (struct MsgPort *)FindPort(portname); if (port) PutMsg(port, (struct Message *) message); Permit(); return(port ? TRUE : FALSE); } ULONG InitTestSettings() { if( ( ts_msg =(struct TestMessage *)AllocMem (sizeof(struct TestMessage),MEMF_PUBLIC|MEMF_CLEAR)) && ( p_reply=(struct MsgPort *) CreatePort(0,0)) ) return (1L); else return (0L); } FreeTestSettings() { if(ts_msg) FreeMem (ts_msg,sizeof(struct TestMessage)); if(p_reply)DeletePort (p_reply); } struct TestMessage *TestSettings(ULONG type) { ULONG i,j; struct tm_gau_set *act, *all[64]; if( FindPort("TinyMeter") ) if( ts_msg && p_reply) { ts_msg->ts_Message.mn_Node.ln_Type = NT_MESSAGE; ts_msg->ts_Message.mn_ReplyPort = p_reply; ts_msg->ts_Message.mn_Length = sizeof ( struct TestMessage ); ts_msg->MethodID = type; switch (type) { case test_test: for(i=0;i<64;i++)all[i]=0L; for(i=0;;i++) { DoMethod(visible,MUIM_List_GetEntry,i,&act); if(!act) break; if(i==63) break; if(all[i]=AllocVec(sizeof(struct tm_gau_set),0L)) { CopyMem(act, all[i], sizeof(struct tm_gau_set)); } else return(0L); } for(j=0;j<i;j++) { all[j]->next=all[j+1]; } ts_msg->list=all[0]; if(ts_msg->set = AllocVec(sizeof(struct tm_sys_set),0L)) { CopyMem(maindata->set,ts_msg->set,sizeof(struct tm_sys_set)); } else return(0L); break; case test_getwin: ts_msg->list=0L; ts_msg->set =0L; break; } if (SafePutToPort((struct Message *)ts_msg,"TinyMeter")) { WaitPort(p_reply); return(GetMsg(p_reply)); } } return(0L); } /// /******************************************/ /* snapWindow method */ /******************************************/ /// snapWindow(struct IClass *cl,Object *obj, struct Msg *msg) { struct TestMessage *testMsg; testMsg=TestSettings(test_getwin); set(IN_posx, MUIA_String_Integer ,testMsg->posx); set(IN_posy, MUIA_String_Integer ,testMsg->posy); set(IN_sizx, MUIA_String_Integer ,testMsg->sizx); } /// /******************************************/ /* save settings and the method for it */ /******************************************/ /// #define save_save 0 #define save_use 1 #define save_test 2 #define save_file 3 #define save_cancel 4 struct SaveSetMsg { ULONG MethodID; ULONG what; }; getSettings(struct tm_sys_set *set) { ULONG dummy; struct ls_layout *src; get(NB_col ,MUIA_Numeric_Value,&dummy);set->colums =(UWORD)dummy; get(NB_bordx,MUIA_Numeric_Value,&dummy);set->win_border_x =(UWORD)dummy; get(NB_bordy,MUIA_Numeric_Value,&dummy);set->win_border_y =(UWORD)dummy; get(NB_spcx ,MUIA_Numeric_Value,&dummy);set->win_space_x =(UWORD)dummy; get(NB_spcy ,MUIA_Numeric_Value,&dummy);set->win_space_y =(UWORD)dummy; get(NB_wait ,MUIA_Numeric_Value,&dummy);set->start_wait =(UWORD)dummy; get(NB_mem ,MUIA_Numeric_Value,&dummy);set->mem_refresh =(UWORD)dummy; get(NB_vol ,MUIA_Numeric_Value,&dummy);set->vol_refresh =(UWORD)dummy; get(NB_pri ,MUIA_Numeric_Value,&dummy);set->pri =(BYTE) dummy; get(CM_Falling,MUIA_Selected, &dummy);set->lay_falling =(UBYTE)dummy; DoMethod(ls_Switch,MUIM_List_GetEntry,1,&src); set->bg_type =src->entry_selected; DoMethod(ls_Switch,MUIM_List_GetEntry,2,&src); set->win_backfront =src->entry_selected; DoMethod(ls_Switch,MUIM_List_GetEntry,3,&src); set->win_move =src->entry_selected; DoMethod(ls_Switch,MUIM_List_GetEntry,4,&src); set->bd_type =src->entry_selected; DoMethod(ls_Switch,MUIM_List_GetEntry,6,&src); set->start_usescreennotify=src->entry_selected; DoMethod(ls_Switch,MUIM_List_GetEntry,7,&src); set->Executive =src->entry_selected; getColor(&set->bg_color, MN_Colors[0]); getColor(&set->bright_color,MN_Colors[1]); getColor(&set->dark_color, MN_Colors[2]); get(ST_PubScr ,MUIA_String_Contents,&dummy); strcpy(&set->pub_name[0] ,(char *)dummy); get(ST_bg ,MUIA_String_Contents,&dummy); strcpy(&set->bg_picture[0] ,(char *)dummy); get(IN_sizx ,MUIA_String_Integer, &dummy); set->x_siz=(UWORD)dummy; get(IN_posx ,MUIA_String_Integer, &dummy); set->x_pos=(UWORD)dummy; get(IN_posy ,MUIA_String_Integer, &dummy); set->y_pos=(UWORD)dummy; } static saveSettings(Object *listv, struct tm_sys_set *set, char *file) { int i; ULONG my_file; struct tm_gau_set *act; if(my_file=(ULONG)Open(file,MODE_NEWFILE)) { Write(my_file,set,(ULONG)sizeof(struct tm_sys_set)); for (i=0;;i++) { DoMethod(listv,MUIM_List_GetEntry,i,&act); if(!act) break; if(i==63) break; Write(my_file,act,(ULONG)sizeof(struct tm_gau_set)); } Close(my_file); } } ULONG saveManager(struct IClass *cl,Object *obj, struct SaveSetMsg *msg) { int i=0; char *file; getSettings(maindata->set); switch (msg->what) { case save_save: saveSettings(visible,maindata->set,"ENVARC:TinyMeter"); case save_use: saveSettings(visible,maindata->set,"ENV:TinyMeter"); TestSettings(test_test); while(pubscr[i]) FreeVec(pubscr[i++]); DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit); return(0L); case save_test: TestSettings(test_test); return(obj); case save_file: if(file=getfilename(obj,GetStr(MM_SaveTitle),"#?.tm",TRUE)) saveSettings(visible,maindata->set,file); break; case save_cancel: loadSettings(obj,maindata,"ENV:TinyMeter"); insertSettings(maindata->set,maindata->list); TestSettings(test_test); DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit); break; } return((ULONG)DoSuperMethodA(cl,obj,msg)); } /// /******************************************/ /* other MainWindow methods */ /******************************************/ /// struct DoubleClkMsg { ULONG MethodID; struct MainData *data; }; static ULONG Dis_DoubleClick2(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg) { struct ls_layout *src; DoMethod(ls_Switch,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&src); if(src) { if(src->entry_max>0) { src->entry_selected++;if(src->entry_max<src->entry_selected)src->entry_selected=0; DoMethod(ls_Switch,MUIM_List_Redraw,MUIV_List_Redraw_Active); } return(DoSuperMethodA(cl,obj,msg)); } else return(0L); } static ULONG Dis_DoubleClick1(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg) { char *my_ptr; DoMethod(ls_PubScr,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&my_ptr); if(my_ptr) { set(ST_PubScr,MUIA_String_Contents,my_ptr); DoMethod(PO_PubScr,MUIM_Popstring_Close,0L); return(DoSuperMethodA(cl,obj,msg)); } else return(0L); } ULONG MainWindow_Finish(struct IClass *cl,Object *obj,Msg *msg) { int i=0; struct MainData *data; data=INST_DATA(cl,obj); while(pubscr[i++]) FreeVec(pubscr[i]); pubscr[i]=0; DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit); return((ULONG)0L); } static GetPubScreens() { struct List *PubScreenList; struct PubScreenNode *ScreenNode; int i=0; PubScreenList = LockPubScreenList(); for(ScreenNode=(struct PubScreenNode *)PubScreenList->lh_Head;ScreenNode->psn_Node.ln_Succ;ScreenNode=(struct PubScreenNode *)ScreenNode->psn_Node.ln_Succ) { pubscr[i]=(char *)AllocVec(256L,0L); strcpy(pubscr[i],ScreenNode->psn_Node.ln_Name); i++; } UnlockPubScreenList(); } static ULONG MainWindow_New(struct IClass *cl,Object *obj,Msg *msg) { struct MainData *data; int i; GetPubScreens(); if (obj = (Object *) DoSuperNew(cl,obj, MUIA_Window_Title, GetStr(MO_Title), MUIA_Window_ID , MAKE_ID('T','I','N','Y'), WindowContents, VGroup, ButtonFrame, Child, HGroup, Child, VGroup, MUIA_Background, MUII_SHADOW, Child, HVSpace, Child, BodychunkObject, MUIA_FixWidth , LOGO_WIDTH , MUIA_FixHeight , LOGO_HEIGHT, MUIA_Bitmap_Width , LOGO_WIDTH , MUIA_Bitmap_Height , LOGO_HEIGHT, MUIA_Bodychunk_Depth , LOGO_DEPTH , MUIA_Bodychunk_Body , (UBYTE *)logo_body, MUIA_Bodychunk_Compression, LOGO_COMPRESSION, MUIA_Bodychunk_Masking , LOGO_MASKING, MUIA_Bitmap_SourceColors , (ULONG *)logo_colors, MUIA_Bitmap_Transparent , 0, MUIA_ShortHelp, "Greets to: hANGKOK, pEPE, bEZZZERK, tRACER, rALPH...", End, End, Child, RegisterGroup(mainlister), MUIA_Register_Frame, TRUE, Child, HGroup, Child, RegisterGroup(sublister), MUIA_Register_Frame, TRUE, Child, HGroup, Child, ColGroup(2), GroupFrameT(GetStr(MOL_Handler)), Child, HVSpace, Child, HVSpace, Child, Label(GetStr(MO_MemRefresh)), Child, ColGroup(2), Child, NB_mem=MUI_MakeObject(MUIO_NumericButton,NULL,1,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End, Child, Label(GetStr(MO_VolRefresh)), Child, ColGroup(2), Child, NB_vol=MUI_MakeObject(MUIO_NumericButton,NULL,1,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End, Child, Label(GetStr(MO_Wait)), Child, ColGroup(2), Child, NB_wait=MUI_MakeObject(MUIO_NumericButton,NULL,0,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End, Child, Label(GetStr(MO_TaskPrio)), Child, ColGroup(2), Child, NB_pri=MUI_MakeObject(MUIO_NumericButton,NULL,-128,127,"%ld"), Child, HVSpace, End, Child, HVSpace, Child, HVSpace, End, Child, ColGroup(2), GroupFrameT(GetStr(MOL_sub_Layout)), Child, HVSpace, Child, HVSpace, Child, Label(GetStr(MO_Colums)), Child, ColGroup(2), Child, NB_col=MUI_MakeObject(MUIO_NumericButton,NULL,1,32,"%3ld"), Child, HVSpace, End, Child, Label(GetStr(MO_FallingCol)), Child, HGroup, Child, CM_Falling=CheckMark(NULL), Child, HVSpace, End, Child, Label(GetStr(MO_SpaceX)), Child, ColGroup(2), Child, NB_spcx=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End, Child, Label(GetStr(MO_SpaceY)), Child, ColGroup(2), Child, NB_spcy=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End, Child, Label(GetStr(MO_BordX)), Child, ColGroup(2), Child, NB_bordx=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End, Child, Label(GetStr(MO_BordY)), Child, ColGroup(2), Child, NB_bordy=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End, Child, HVSpace, Child, HVSpace, End, End, Child, lv_Switch=(Object *)ListviewObject, MUIA_Listview_Input, TRUE, MUIA_Listview_DoubleClick, TRUE, MUIA_Listview_List, ls_Switch=(Object *)ListObject, MUIA_Frame, MUIV_Frame_InputList, MUIA_List_ConstructHook, &lay_ConstructHook, MUIA_List_DestructHook , &lay_DestructHook, MUIA_List_DisplayHook , &lay_DisplayHook, MUIA_List_Format , "MIW=5 MAW=100 BAR,", MUIA_List_Active, MUIV_List_Active_Top, End, End, Child, ColGroup(2), Child, HVSpace, Child, HVSpace, Child, Label(GetStr(MO_Public)), Child, PO_PubScr=(Object *)PopobjectObject, MUIA_Popstring_String, ST_PubScr=(Object *)String(NULL,80), MUIA_Popstring_Button, PopButton(MUII_PopUp), MUIA_Popobject_Object, lv_PubScr=(Object *)ListviewObject, MUIA_Listview_Input, TRUE, MUIA_Listview_DoubleClick, TRUE, MUIA_Listview_List, ls_PubScr=(Object *)ListObject, MUIA_Frame, MUIV_Frame_InputList, MUIA_List_Active, MUIV_List_Active_Top, MUIA_List_SourceArray,&pubscr[0], End, End, End, Child, Label(GetStr(MO_WindowPos)), Child, ColGroup(2), Child, IN_posx=StringObject, StringFrame, MUIA_String_Accept , "0123456879", End, Child, IN_posy=StringObject, StringFrame, MUIA_String_Accept , "0123456879", End, End, Child, Label(GetStr(MO_WindowSiz)), Child, ColGroup(2), MUIA_Group_SameWidth, TRUE, Child, IN_sizx=StringObject, StringFrame, MUIA_String_Accept , "0123456879", End, Child, BT_Snap=SimpleButton(GetStr(MO_Snap)), End, Child, Label(GetStr(MO_BackgroundPic)), Child, ST_bg=PopaslObject, MUIA_Popstring_String, String(NULL,80), MUIA_Popstring_Button, PopButton(MUII_PopFile), ASLFO_TitleText , GetStr(MO_SelectBg), End, Child, Label(GetStr(MO_BackgroundCol)), Child, ColGroup(2),Child, MN_Colors[0]=MakePen(), Child, HVSpace, End, Child, Label(GetStr(MO_BrightCol)), Child, ColGroup(2),Child, MN_Colors[1]=MakePen(), Child, HVSpace, End, Child, Label(GetStr(MO_DarkCol)), Child, ColGroup(2),Child, MN_Colors[2]=MakePen(), Child, HVSpace, End, Child, HVSpace, Child, HVSpace, End, End, End, Child, VGroup, Child, NewObject(CL_ChooseFields->mcc_Class,NULL,TAG_DONE), End, End, End, Child, HGroup, Child, BT_Save = (Object *)SimpleButton(GetStr(MO_Save)), Child, BT_Use = (Object *)SimpleButton(GetStr(MO_Use)), Child, BT_Test = (Object *)SimpleButton(GetStr(MO_Test)), Child, BT_Cancel = (Object *)SimpleButton(GetStr(MO_Cancel)), End, End, End) { data=INST_DATA(cl,obj); set(BT_Save ,MUIA_ShortHelp,GetStr(MH_Save)); set(BT_Use ,MUIA_ShortHelp,GetStr(MH_Use)); set(BT_Test ,MUIA_ShortHelp,GetStr(MH_Test)); set(BT_Cancel ,MUIA_ShortHelp,GetStr(MH_Cancel)); set(NB_mem ,MUIA_ShortHelp,GetStr(MH_MemRefresh)); set(NB_vol ,MUIA_ShortHelp,GetStr(MH_VolRefresh)); set(NB_wait ,MUIA_ShortHelp,GetStr(MH_Wait)); set(lv_Switch ,MUIA_ShortHelp,GetStr(MH_Flags)); set(PO_PubScr ,MUIA_ShortHelp,GetStr(MH_Public)); set(IN_posx ,MUIA_ShortHelp,GetStr(MH_PosX)); set(IN_posy ,MUIA_ShortHelp,GetStr(MH_PosY)); set(IN_sizx ,MUIA_ShortHelp,GetStr(MH_SizX)); set(BT_Snap ,MUIA_ShortHelp,GetStr(MH_Snap)); set(ST_bg ,MUIA_ShortHelp,GetStr(MH_BackgroundPic)); set(MN_Colors[0],MUIA_ShortHelp,GetStr(MH_BackgroundCol)); set(MN_Colors[1],MUIA_ShortHelp,GetStr(MH_BrightCol)); set(MN_Colors[2],MUIA_ShortHelp,GetStr(MH_DarkCol)); set(NB_col ,MUIA_ShortHelp,GetStr(MH_Colums)); set(NB_spcx ,MUIA_ShortHelp,GetStr(MH_SpaceX)); set(NB_spcy ,MUIA_ShortHelp,GetStr(MH_SpaceX)); set(NB_bordx ,MUIA_ShortHelp,GetStr(MH_BordX)); set(NB_bordy ,MUIA_ShortHelp,GetStr(MH_BordY)); DoMethod(BT_Snap ,MUIM_Notify,MUIA_Pressed ,FALSE ,obj,1,Dis_ID_Snap); DoMethod(BT_Save ,MUIM_Notify,MUIA_Pressed ,FALSE ,obj,2,Dis_ID_Save,save_save); DoMethod(BT_Use ,MUIM_Notify,MUIA_Pressed ,FALSE ,obj,2,Dis_ID_Save,save_use ); DoMethod(BT_Test ,MUIM_Notify,MUIA_Pressed ,FALSE ,obj,2,Dis_ID_Save,save_test); DoMethod(lv_PubScr,MUIM_Notify,MUIA_Listview_DoubleClick ,TRUE ,obj,2,Dis_ID_DoubleClick1,data); DoMethod(lv_Switch,MUIM_Notify,MUIA_Listview_DoubleClick ,TRUE ,obj,1,Dis_ID_DoubleClick2); DoMethod(obj ,MUIM_Notify,MUIA_Window_MenuAction ,MEN_SAVE,obj,2,Dis_ID_Save,save_file); DoMethod(obj ,MUIM_Notify,MUIA_Window_MenuAction ,MEN_OPEN,obj,2,Dis_ID_Load,load_file); DoMethod(BT_Cancel,MUIM_Notify,MUIA_Pressed ,FALSE ,obj,2,Dis_ID_Save,save_cancel); for(i=0;i<8;i++)DoMethod(ls_Switch,MUIM_List_InsertSingle,&switches[i],MUIV_List_Insert_Bottom); DoMethod(obj ,Dis_ID_Load,load_standard); } return((ULONG)obj); } /// static __saveds __asm ULONG MainWindowDispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg) { switch (msg->MethodID) { case OM_NEW : return (MainWindow_New (cl,obj,(APTR)msg)); case Dis_ID_Finish : return (MainWindow_Finish (cl,obj,(APTR)msg)); case Dis_ID_DoubleClick1 : return (Dis_DoubleClick1 (cl,obj,(APTR)msg)); case Dis_ID_DoubleClick2 : return (Dis_DoubleClick2 (cl,obj,(APTR)msg)); case Dis_ID_Save : return (saveManager (cl,obj,(APTR)msg)); case Dis_ID_Snap : return (snapWindow (cl,obj,(APTR)msg)); case Dis_ID_Load : return (loadManager (cl,obj,(APTR)msg)); } return (DoSuperMethodA (cl,obj,(APTR)msg)); } /*************************************************/ /* Init all classes */ /*************************************************/ /// VOID ExitClasses(VOID) { if (CL_FieldsList ) MUI_DeleteCustomClass(CL_FieldsList); if (CL_ChooseFields) MUI_DeleteCustomClass(CL_ChooseFields); if (CL_MainWindow) MUI_DeleteCustomClass(CL_MainWindow); if (CL_Composer) MUI_DeleteCustomClass(CL_Composer); if (CL_Launcher) MUI_DeleteCustomClass(CL_Launcher); } BOOL InitClasses(VOID) { CL_MainWindow = MUI_CreateCustomClass(NULL,MUIC_Window ,NULL, sizeof(struct MainData) ,MainWindowDispatcher); CL_FieldsList = MUI_CreateCustomClass(NULL,MUIC_List ,NULL, sizeof(struct FieldsList_Data) ,FieldsList_Dispatcher); CL_ChooseFields = MUI_CreateCustomClass(NULL,MUIC_Group ,NULL, sizeof(struct ChooseFields_Data) ,ChooseFields_Dispatcher); CL_Composer = MUI_CreateCustomClass(NULL,MUIC_Window ,NULL, sizeof(struct Composer_Data) ,ComposerDispatcher); CL_Launcher = MUI_CreateCustomClass(NULL,MUIC_Window ,NULL, sizeof(struct Launcher_Data) ,LauncherDispatcher); if ( CL_FieldsList && CL_ChooseFields && CL_MainWindow && CL_Composer && CL_Launcher ) return(TRUE); ExitClasses(); return(FALSE); } /// /*************************************************/ /* Main: MUIApplication and Aboutwindow */ /*************************************************/ /// #include <exec/tasks.h> #ifdef _DCC int brkfunc(void) { return(0); } #endif void LocalizeSwitches(struct ls_layout *ll) { int i; for (;ll->entry_desc!=NULL;ll++) { ll->entry_desc=GetStr((int)ll->entry_desc); for(i=0;i<6;i++) { if (ll->entry[i]!=NULL) ll->entry[i]=GetStr((int)ll->entry[i]); else ll->entry[i]=" "; } } } int main(int argc, char *argv[]) { Object *app, *window; struct Task *me; if (MUIMasterBase = OpenLibrary(MUIMASTER_NAME,MUIMASTER_VMIN)) { if(me=FindTask(NULL)) { if((me->tc_SPUpper-me->tc_SPLower)>8000) { if(maindata=(struct tm_data *)AllocVec(sizeof(struct tm_data),MEMF_CLEAR)) { if(InitTestSettings()) { InitClasses(); InitLocale(); LocalizeNewMenu(MenuData1); LocalizeNewMenu(CmpMenuData); LocalizeNewMenu(LauMenuData); LocalizeSwitches(switches); LocalizeStringArray(gau_types); LocalizeStringArray(types); LocalizeStringArray(indent); LocalizeStringArray(mainlister); LocalizeStringArray(sublister); LocalizeStringArray(regcomposer); LocalizeStringArray(reglauncher); LocalizeStringArray(cyplace); LocalizeStringArray(cyindent); strcpy(&default_gauge.label[0],GetStr(MDef_Label)); strcpy(&default_gauge.format[0],GetStr(MDef_fmt)); strcpy(&default_gauge.expansion[0],GetStr(MDef_Device)); app = ApplicationObject, MUIA_Application_Title , "TinyMeterPrefs V4.20", MUIA_Application_Version , "$VER: TinyMeterPrefs V4.20 (14.5.96)", MUIA_Application_Copyright , "©1994-96, Tinic Urou", MUIA_Application_Author , "Tinic Urou", MUIA_Application_Description, GetStr(MA_Description), MUIA_Application_Base , "TMPREFS", MUIA_Application_HelpFile , "HELP:TinyMeter.guide", MUIA_Application_Menustrip , MN_Main = MUI_MakeObject(MUIO_MenustripNM,MenuData1,0), SubWindow , window = (Object *)NewObject(CL_MainWindow->mcc_Class,NULL,TAG_DONE), SubWindow , WI_About = WindowObject, MUIA_Window_Title, GetStr(MA_About_Title), MUIA_Window_ID , MAKE_ID('T','M','A','B'), WindowContents, VGroup, ButtonFrame, Child, BodychunkObject, MUIA_FixWidth , ABOUT_WIDTH , MUIA_FixHeight , ABOUT_HEIGHT, MUIA_Bitmap_Width , ABOUT_WIDTH , MUIA_Bitmap_Height , ABOUT_HEIGHT, MUIA_Bodychunk_Depth , ABOUT_DEPTH , MUIA_Bodychunk_Body , (UBYTE *)about_body, MUIA_Bodychunk_Compression, ABOUT_COMPRESSION, MUIA_Bodychunk_Masking , ABOUT_MASKING, MUIA_Bitmap_SourceColors , (ULONG *)about_colors, MUIA_Bitmap_Transparent , 0, End, End, End, SubWindow , WI_HelpFmt = WindowObject, MUIA_Window_Title, GetStr(MH_FormatHelp), MUIA_Window_ID , MAKE_ID('T','H','L','P'), MUIA_Window_UseRightBorderScroller, TRUE, MUIA_Window_UseBottomBorderScroller, TRUE, WindowContents, VGroup, Child, ScrollgroupObject, MUIA_Scrollgroup_UseWinBorder, TRUE, MUIA_Scrollgroup_Contents, VirtgroupObject,TextFrame, Child, TextObject, MUIA_Text_Contents, GetStr(MOH_Format), End, End, End, End, End, SubWindow , WI_HelpClock = WindowObject, MUIA_Window_Title, GetStr(MH_ClockHelp), MUIA_Window_ID , MAKE_ID('T','H','L','P'), MUIA_Window_UseRightBorderScroller, TRUE, MUIA_Window_UseBottomBorderScroller, TRUE, WindowContents, VGroup, Child, ScrollgroupObject, MUIA_Scrollgroup_UseWinBorder, TRUE, MUIA_Scrollgroup_Contents, VirtgroupObject,TextFrame, Child, TextObject, MUIA_Text_Contents, GetStr(MOH_Clock), End, End, End, End, End, End; if(app) { DoMethod(app ,MUIM_Notify,MUIA_Application_MenuAction,MEN_QUIT ,app , 2,MUIM_Application_ReturnID ,MUIV_Application_ReturnID_Quit); DoMethod(app ,MUIM_Notify,MUIA_Application_MenuAction,MEN_ABOUT,WI_About, 3,MUIM_Set ,MUIA_Window_Open,TRUE); DoMethod(WI_About ,MUIM_Notify,MUIA_Window_CloseRequest ,TRUE ,WI_About, 3,MUIM_Set ,MUIA_Window_Open,FALSE); DoMethod(WI_HelpFmt ,MUIM_Notify,MUIA_Window_CloseRequest ,TRUE ,WI_HelpFmt, 3,MUIM_Set ,MUIA_Window_Open,FALSE); DoMethod(WI_HelpClock,MUIM_Notify,MUIA_Window_CloseRequest ,TRUE ,WI_HelpClock,3,MUIM_Set ,MUIA_Window_Open,FALSE); DoMethod(window, MUIM_Notify,MUIA_Window_CloseRequest ,TRUE ,app, 2,MUIM_Application_ReturnID ,MUIV_Application_ReturnID_Quit); set(window,MUIA_Window_Open,TRUE); { ULONG sigs = 0; while (DoMethod(app,MUIM_Application_NewInput,&sigs) != MUIV_Application_ReturnID_Quit) { if (sigs) { sigs = Wait(sigs | SIGBREAKF_CTRL_C); if (sigs & SIGBREAKF_CTRL_C) break; } } } MUI_DisposeObject(app); } ExitLocale(); ExitClasses(); FreeTestSettings(); } if(maindata->set)FreeVec(maindata->set); FreeVec(maindata); } } else MUI_RequestA(NULL,NULL,0,"Early Startup","OK","Stacksize too small!\n\nA minimum of 8192 bytes is needed.",NULL); } CloseLibrary(MUIMasterBase); } return(0); } int wbmain(struct WBStartup *wb_startup) { return(main(0, (char **)wb_startup)); } ///