home *** CD-ROM | disk | FTP | other *** search
- /*
- ** OpenURL - MUI preferences for openurl.library
- ** Written by Troels Walsted Hansen <troels@thule.no>
- ** Placed in the public domain.
- **
- ** This module contains the code to the PrefsWin Window.mui subclass.
- */
-
- #include "prefs_common.h"
- #include "prefs_main.h"
- #include "prefs_app.h"
- #include "prefs_prefswin.h"
- #include "prefs_applist.h"
- #include "prefs_browsereditwin.h"
- #include "prefs_mailereditwin.h"
-
- /**************************************************************************/
-
- static ULONG mNew (struct IClass *cl, Object *obj, struct opSet *msg);
- static ULONG mGetPrefs (struct IClass *cl, Object *obj, struct MUIP_PrefsWin_GetPrefs *msg);
- static ULONG mStorePrefs(struct IClass *cl, Object *obj, struct MUIP_PrefsWin_StorePrefs *msg);
- static ULONG mAbout (struct IClass *cl, Object *obj, struct MUIP_PrefsWin_About *msg);
-
- /**************************************************************************/
-
- enum { MEN_ABOUT=1,MEN_ABOUTMUI,MEN_DEFAULTS,MEN_HIDE,MEN_QUIT,
- MEN_MUISETTINGS,MEN_SNAPSHOT,MEN_UNSNAPSHOT };
-
- struct NewMenu PrefsWinMenu[] =
- {
- { NM_TITLE, "Project" , 0 ,0,0,(APTR)0 },
- { NM_ITEM , "About..." ,"?",0,0,(APTR)MEN_ABOUT },
- { NM_ITEM , "About MUI..." ,"¿",0,0,(APTR)MEN_ABOUTMUI },
- { NM_ITEM , (STRPTR)NM_BARLABEL , 0 ,0,0,(APTR)0 },
- { NM_ITEM , "Restore defaults" ,"R",0,0,(APTR)MEN_DEFAULTS },
- { NM_ITEM , (STRPTR)NM_BARLABEL , 0 ,0,0,(APTR)0 },
- { NM_ITEM , "Hide" ,"H",0,0,(APTR)MEN_HIDE },
- { NM_ITEM , (STRPTR)NM_BARLABEL , 0 ,0,0,(APTR)0 },
- { NM_ITEM , "Quit" ,"Q",0,0,(APTR)MEN_QUIT },
-
- { NM_TITLE, "Settings" , 0 ,0,0,(APTR)0 },
- { NM_ITEM , "MUI..." ,"M",0,0,(APTR)MEN_MUISETTINGS },
- { NM_ITEM , (STRPTR)NM_BARLABEL , 0 ,0,0,(APTR)0 },
- { NM_ITEM , "Snapshot window" ,"W",0,0,(APTR)MEN_SNAPSHOT },
- { NM_ITEM , "Unsnapshot window" ,"U",0,0,(APTR)MEN_UNSNAPSHOT },
-
- { NM_END,NULL,0,0,0,(APTR)0 },
- };
-
- /**************************************************************************/
-
- static ULONG mNew(struct IClass *cl, Object *obj, struct opSet *msg)
- {
- static const STRPTR tabs[] = { "Information", "Browsers", "Mailers", "Miscellaneous", NULL };
-
- Object *strip, *registerg, *browserl, *mailerl, *prehttpc, *mailtoc, *showc,
- *bringtofrontc, *newwindowc, *launchc, *saveb, *useb, *cancelb;
-
- obj = (Object *)DoSuperNew(cl, obj,
- MUIA_Window_ID, MAKE_ID('U', 'R', 'L', 'P'),
- MUIA_Window_Title, APPNAME " Library Preferences",
- MUIA_Window_ScreenTitle, APPNAME " " APPVER "." APPREV " " __AMIGADATE__ " · " APPAUTHOR " · " APPEMAIL,
- MUIA_Window_Menustrip, strip = MUI_MakeObject(MUIO_MenustripNM, PrefsWinMenu, 0),
- WindowContents, VGroup,
- Child, registerg = RegisterObject,
- MUIA_Background, MUII_RegisterBack,
- MUIA_CycleChain, TRUE,
- MUIA_Register_Titles, tabs,
-
- /* Information */
-
- Child, VGroup,
- Child, MUI_NewObject("Listview.mui",
- MUIA_CycleChain, TRUE,
- MUIA_Listview_Input, FALSE,
- MUIA_Listview_List, FloattextObject,
- TextFrame,
- MUIA_Background, MUII_TextBack,
- MUIA_Floattext_Text,
- "Welcome to the OpenURL preferences program. OpenURL is a shared library for "
- "easily sending URLs from applications to browsers. Follow the below steps to "
- "configure OpenURL to suit you."
- "\n\n"
- "1. Go to the \"Browsers\" tab of this window."
- "\n\n"
- "2. Delete any browsers you don't have installed, and add any that are "
- "missing from the defaults."
- "\n\n"
- "3. Make sure all your browsers are configured with full path."
- "\n\n"
- "4. Arrange the browsers according to your preference by dragging and "
- "dropping them in the list. Browsers are given preference from top to "
- "bottom, if one isn't found or doesn't start, the library will use the "
- "next one. (Note, the library first searches for any running browser "
- "before it launches a new one.)"
- "\n\n"
- "5. Do the same for the Mailers, if you wish to use OpenURL's special "
- "mailto support."
- "\n\n"
- "6. Go to the \"Miscellaneous\" tab set the checkmarks the way you prefer."
- "\n\n"
- "7. Press \"Save\"."
- "\n\n"
- "8. Enjoy troublefree operation, and lobby the authors of your favourite "
- "applications to support OpenURL. :)",
- End,
- End,
- End,
-
- /* Browsers */
-
- Child, browserl = AppListObject,
- MUIA_AppList_NodeNameOffset, sizeof(struct MinNode) + sizeof(LONGBITS),
- MUIA_AppList_NodePathOffset, sizeof(struct MinNode) + sizeof(LONGBITS) + UBN_NAME_LEN,
- MUIA_AppList_NodeSize, sizeof(struct URL_BrowserNode),
- MUIA_AppList_NodeEditWinClass, BrowserEditWinClass->mcc_Class,
- MUIA_AppList_NodeEditWinIDAttr, MUIA_BrowserEditWin_Browser,
- MUIA_AppList_NodeEditWinLstAttr, MUIA_BrowserEditWin_ListObj,
- MUIA_AppList_NewNodeName, "«New browser»",
- End,
-
- /* Mailers */
-
- Child, mailerl = AppListObject,
- MUIA_AppList_NodeNameOffset, sizeof(struct MinNode) + sizeof(LONGBITS),
- MUIA_AppList_NodePathOffset, sizeof(struct MinNode) + sizeof(LONGBITS) + UMN_NAME_LEN,
- MUIA_AppList_NodeSize, sizeof(struct URL_MailerNode),
- MUIA_AppList_NodeEditWinClass, MailerEditWinClass->mcc_Class,
- MUIA_AppList_NodeEditWinIDAttr, MUIA_MailerEditWin_Mailer,
- MUIA_AppList_NodeEditWinLstAttr, MUIA_MailerEditWin_ListObj,
- MUIA_AppList_NewNodeName, "«New mailer»",
- End,
-
- /* Miscellaneous */
-
- Child, VGroup,
- Child, VGroup,
- GroupFrameT("Options"),
- Child, HGroup,
- Child, prehttpc = myKeyCheckMark(FALSE, 'p'),
- Child, KeyLabel2("Prepend \"http://\" to URLs without a scheme.", 'p'),
- Child, RectangleObject, End,
- End,
- Child, HGroup,
- Child, mailtoc = myKeyCheckMark(FALSE, 'm'),
- Child, KeyLabel2("Send mailto: URLs to email application.", 'm'),
- Child, RectangleObject, End,
- End,
- End,
-
- Child, VGroup,
- GroupFrameT("Defaults"),
- Child, HGroup,
- Child, showc = myKeyCheckMark(FALSE, 'i'),
- Child, KeyLabel2("Show/Uniconify browser.", 'i'),
- Child, RectangleObject, End,
- End,
- Child, HGroup,
- Child, bringtofrontc = myKeyCheckMark(FALSE, 'f'),
- Child, KeyLabel2("Bring browser screen to front.", 'f'),
- Child, RectangleObject, End,
- End,
- Child, HGroup,
- Child, newwindowc = myKeyCheckMark(FALSE, 'w'),
- Child, KeyLabel2("Open URL in new browser window.", 'w'),
- Child, RectangleObject, End,
- End,
- Child, HGroup,
- Child, launchc = myKeyCheckMark(FALSE, 'l'),
- Child, KeyLabel2("Launch browser if one isn't running.", 'l'),
- Child, RectangleObject, End,
- End,
-
- Child, MUI_NewObject("Listview.mui",
- MUIA_CycleChain, TRUE,
- MUIA_Listview_Input, FALSE,
- MUIA_Listview_List, FloattextObject,
- TextFrame,
- MUIA_Background, MUII_TextBack,
- MUIA_Floattext_Text,
- "These settings are the global defaults that will be used if the applications "
- "don't override them when opening URLs."
- "\n\n"
- "For instance, if you prefer to have all URLs opened in a new browser window, "
- "simply check the corresponding setting.",
- End,
- End,
- End,
- End,
- End,
-
- Child, ColGroup(3),
- Child, saveb = SimpleButton("_Save"),
- Child, useb = SimpleButton("_Use"),
- Child, cancelb = SimpleButton("_Cancel"),
- End,
- End,
- TAG_MORE, msg->ops_AttrList);
-
- if(obj)
- {
- struct PrefsWin_Data *data = INST_DATA(cl, obj);
- memset(data, '\0', sizeof(struct PrefsWin_Data));
-
- /* init instance data */
-
- data->RegisterGrpObj = registerg;
- get(browserl, MUIA_AppList_ListObj, &data->BrowserLstObj);
- get(mailerl, MUIA_AppList_ListObj, &data->MailerLstObj);
-
- data->PreHTTPChkObj = prehttpc;
- data->MailtoChkObj = mailtoc;
- data->ShowChkObj = showc;
- data->BringToFrontChkObj = bringtofrontc;
- data->NewWindowChkObj = newwindowc;
- data->LaunchChkObj = launchc;
-
- data->SaveButObj = saveb;
- data->UseButObj = useb;
- data->CancelButObj = cancelb;
-
- /* buttons */
-
- DoMethod(obj, MUIM_MultiSet, MUIA_CycleChain, TRUE,
- saveb, useb, cancelb, NULL);
-
- set(obj, MUIA_Window_DefaultObject, data->BrowserLstObj);
-
- /* Project menu */
-
- DoMethod((Object *)DoMethod(strip,MUIM_FindUData,MEN_ABOUT ),MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,obj,1,MUIM_PrefsWin_About);
- DoMethod((Object *)DoMethod(strip,MUIM_FindUData,MEN_ABOUTMUI ),MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,MUIV_Notify_Application,2,MUIM_Application_AboutMUI,obj);
- DoMethod((Object *)DoMethod(strip,MUIM_FindUData,MEN_DEFAULTS ),MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,obj,2,MUIM_PrefsWin_GetPrefs,TRUE);
- DoMethod((Object *)DoMethod(strip,MUIM_FindUData,MEN_HIDE ),MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,MUIV_Notify_Application,3,MUIM_Set,MUIA_Application_Iconified,TRUE);
- DoMethod((Object *)DoMethod(strip,MUIM_FindUData,MEN_QUIT ),MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,MUIV_Notify_Application,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
-
- /* Settings menu */
-
- DoMethod((Object *)DoMethod(strip,MUIM_FindUData,MEN_MUISETTINGS),MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,MUIV_Notify_Application,2,MUIM_Application_OpenConfigWindow,0);
- DoMethod((Object *)DoMethod(strip,MUIM_FindUData,MEN_SNAPSHOT ),MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,obj,2,MUIM_Window_Snapshot,1);
- DoMethod((Object *)DoMethod(strip,MUIM_FindUData,MEN_UNSNAPSHOT ),MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,obj,2,MUIM_Window_Snapshot,0);
-
- /* window notifies */
-
- DoMethod(obj, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, MUIV_Notify_Application, 2, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);
-
- /* window buttons */
-
- DoMethod(data->SaveButObj, MUIM_Notify, MUIA_Pressed, FALSE, obj, 2, MUIM_PrefsWin_StorePrefs, MUIV_PrefsWin_StorePrefs_Save);
- DoMethod(data->UseButObj, MUIM_Notify, MUIA_Pressed, FALSE, obj, 2, MUIM_PrefsWin_StorePrefs, MUIV_PrefsWin_StorePrefs_Use);
- DoMethod(data->CancelButObj, MUIM_Notify, MUIA_Pressed, FALSE, MUIV_Notify_Application, 2, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);
- }
-
- return((ULONG)obj);
- }
-
- /**************************************************************************/
-
- static ULONG mGetPrefs(struct IClass *cl, Object *obj, struct MUIP_PrefsWin_GetPrefs *msg)
- {
- struct PrefsWin_Data *data = INST_DATA(cl,obj);
- struct URL_Prefs *up;
- STRPTR error = NULL;
- struct URL_BrowserNode *bn;
- struct URL_MailerNode *mn;
-
- if(msg->Defaults)
- up = URL_GetDefaultPrefs();
- else
- up = URL_GetPrefs();
-
- /* get the openurl.library prefs */
-
- if(!up) error = "Couldn't get prefs from openurl.library.";
- else if(up->up_Version != PREFS_VERSION)
- error = "This version of this program doesn't know how\n"
- "to handle openurl.library prefs version %ld.";
-
- if(error)
- {
- MUI_Request(_app(obj), NULL, 0, "Error", "Abort", error, up ? up->up_Version : 0);
- if(up) URL_FreePrefs(up);
- return(FALSE);
- }
-
- /* Browsers */
-
- set(data->BrowserLstObj, MUIA_List_Quiet, TRUE);
- DoMethod(data->BrowserLstObj, MUIM_List_Clear);
-
- for(bn = (struct URL_BrowserNode *)up->up_BrowserList.mlh_Head;
- bn->ubn_Node.mln_Succ;
- bn = (struct URL_BrowserNode *)bn->ubn_Node.mln_Succ)
- {
- DoMethod(data->BrowserLstObj, MUIM_List_InsertSingle, bn, MUIV_List_Insert_Bottom);
- }
-
- set(data->BrowserLstObj, MUIA_List_Quiet, FALSE);
-
- /* Mailers */
-
- set(data->MailerLstObj, MUIA_List_Quiet, TRUE);
- DoMethod(data->MailerLstObj, MUIM_List_Clear);
-
- for(mn = (struct URL_MailerNode *)up->up_MailerList.mlh_Head;
- mn->umn_Node.mln_Succ;
- mn = (struct URL_MailerNode *)mn->umn_Node.mln_Succ)
- {
- DoMethod(data->MailerLstObj, MUIM_List_InsertSingle, mn, MUIV_List_Insert_Bottom);
- }
-
- set(data->MailerLstObj, MUIA_List_Quiet, FALSE);
-
- /* Miscellaneous */
-
- set(data->PreHTTPChkObj, MUIA_Selected, up->up_Flags & UPF_PREPENDHTTP);
- set(data->MailtoChkObj, MUIA_Selected, up->up_Flags & UPF_DOMAILTO);
-
- set(data->ShowChkObj, MUIA_Selected, up->up_DefShow);
- set(data->BringToFrontChkObj, MUIA_Selected, up->up_DefBringToFront);
- set(data->NewWindowChkObj, MUIA_Selected, up->up_DefNewWindow);
- set(data->LaunchChkObj, MUIA_Selected, up->up_DefLaunch);
-
- /* set the first entry active */
-
- set(data->BrowserLstObj, MUIA_List_Active, MUIV_List_Active_Top);
- set(data->MailerLstObj, MUIA_List_Active, MUIV_List_Active_Top);
-
- /* if the prefs are not the defaults, show the "Browsers" tab */
-
- if(!msg->Defaults && !(up->up_Flags & UPF_ISDEFAULTS))
- set(data->RegisterGrpObj, MUIA_Group_ActivePage, 1);
-
- URL_FreePrefs(up);
-
- return(TRUE);
- }
-
- /**************************************************************************/
-
- static ULONG mStorePrefs(struct IClass *cl, Object *obj, struct MUIP_PrefsWin_StorePrefs *msg)
- {
- struct PrefsWin_Data *data = INST_DATA(cl,obj);
- struct URL_Prefs up;
- ULONG i;
-
- set(_app(obj), MUIA_Application_Sleep, TRUE);
-
- /* copy settings from gadgets into structure */
-
- up.up_Version = PREFS_VERSION;
- NewList((struct List *)&up.up_BrowserList);
- NewList((struct List *)&up.up_MailerList);
-
- /* Browsers */
-
- for(i = 0;; i++)
- {
- struct URL_BrowserNode *bn;
-
- DoMethod(data->BrowserLstObj, MUIM_List_GetEntry, i, &bn);
- if(!bn) break;
-
- AddTail((struct List *)&up.up_BrowserList, (struct Node *)bn);
- }
-
- /* Mailers */
-
- for(i = 0;; i++)
- {
- struct URL_MailerNode *mn;
-
- DoMethod(data->MailerLstObj, MUIM_List_GetEntry, i, &mn);
- if(!mn) break;
-
- AddTail((struct List *)&up.up_MailerList, (struct Node *)mn);
- }
-
- /* Miscellaneous */
-
- if(xget(data->PreHTTPChkObj, MUIA_Selected)) up.up_Flags |= UPF_PREPENDHTTP;
- else up.up_Flags &= ~UPF_PREPENDHTTP;
-
- if(xget(data->MailtoChkObj, MUIA_Selected)) up.up_Flags |= UPF_DOMAILTO;
- else up.up_Flags &= ~UPF_DOMAILTO;
-
- up.up_DefShow = (BOOL)xget(data->ShowChkObj, MUIA_Selected);
- up.up_DefBringToFront = (BOOL)xget(data->BringToFrontChkObj, MUIA_Selected);
- up.up_DefNewWindow = (BOOL)xget(data->NewWindowChkObj, MUIA_Selected);
- up.up_DefLaunch = (BOOL)xget(data->LaunchChkObj, MUIA_Selected);
-
- /* save to disk */
-
- if(!URL_SetPrefs(&up, (msg->How == MUIV_PrefsWin_StorePrefs_Save)))
- MUI_RequestA(_app(obj), obj, 0, "Error", "Abort", "Failed to save prefs", NULL);
-
- /* quit */
-
- set(_app(obj), MUIA_Application_Sleep, FALSE);
- DoMethod(_app(obj), MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);
-
- return(TRUE);
- }
-
- /**************************************************************************/
-
- static ULONG mAbout(struct IClass *cl, Object *obj, struct MUIP_PrefsWin_About *msg)
- {
- STRPTR version, author, copyright;
-
- get(_app(obj), MUIA_Application_Version, &version);
- get(_app(obj), MUIA_Application_Author, &author);
- get(_app(obj), MUIA_Application_Copyright, ©right);
-
- MUI_Request(_app(obj), obj, 0, APPNAME, "Ok",
- "\33c\33b%s\33n\n\n%s\n\nWritten by\n%s\n%s",
- &version[6], copyright, author, APPEMAIL);
-
- return(TRUE);
- }
-
- /**************************************************************************/
-
- SAVEDS ASM ULONG PrefsWin_Dispatcher(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) Msg msg)
- {
- switch(msg->MethodID)
- {
- case OM_NEW : return(mNew (cl,obj,(APTR)msg));
- case MUIM_PrefsWin_GetPrefs : return(mGetPrefs (cl,obj,(APTR)msg));
- case MUIM_PrefsWin_StorePrefs: return(mStorePrefs (cl,obj,(APTR)msg));
- case MUIM_PrefsWin_About : return(mAbout (cl,obj,(APTR)msg));
- }
-
- return(DoSuperMethodA(cl,obj,msg));
- }
-