src/mui/IdentitiesConfigPage.c
/***************************************************************************
YAM - Yet Another Mailer
Copyright (C) 1995-2000 Marcel Beck
Copyright (C) 2000-2022 YAM Open Source Team
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
YAM Official Support Site : http://www.yam.ch
YAM OpenSource project : http://sourceforge.net/projects/yamos/
$Id$
Superclass: MUIC_ConfigPage
Description: "Identities" configuration page
***************************************************************************/
#include "IdentitiesConfigPage_cl.h"
#include <proto/muimaster.h>
#include <mui/BetterString_mcc.h>
#include <mui/NBalance_mcc.h>
#include <mui/NList_mcc.h>
#include <mui/NListview_mcc.h>
#include "YAM.h"
#include "mui/AddressBookWindow.h"
#include "mui/AddressField.h"
#include "mui/ConfigPage.h"
#include "mui/ConfigPageList.h"
#include "mui/FolderRequestPopup.h"
#include "mui/IdentityList.h"
#include "mui/MailServerChooser.h"
#include "mui/PGPKeyPopup.h"
#include "mui/SignatureChooser.h"
#include "Config.h"
#include "MailServers.h"
#include "MUIObjects.h"
#include "Signature.h"
#include "UserIdentity.h"
#include "Debug.h"
/* CLASSDATA
struct Data
{
Object *LV_IDENTITY;
Object *BT_IADD;
Object *BT_IDEL;
Object *BT_IDENTITYUP;
Object *BT_IDENTITYDOWN;
Object *CH_IDENTITY_ENABLED;
Object *ST_IDENTITY_DESCRIPTION;
Object *ST_IDENTITY_REALNAME;
Object *ST_IDENTITY_EMAIL;
Object *ST_IDENTITY_ORGANIZATION;
Object *CY_IDENTITY_MAILSERVER;
Object *CY_IDENTITY_SIGNATURE;
Object *ST_IDENTITY_CC;
Object *ST_IDENTITY_BCC;
Object *ST_IDENTITY_REPLYTO;
Object *ST_IDENTITY_EXTRAHEADER;
Object *ST_IDENTITY_PHOTOURL;
Object *CH_IDENTITY_SAVESENTMAIL;
Object *CH_IDENTITY_ALTSENTFOLDER;
Object *PO_IDENTITY_ALTSENTFOLDER;
Object *CH_IDENTITY_QUOTEMAILS;
Object *CY_IDENTITY_QUOTEPOS;
Object *CY_IDENTITY_SIGPOS;
Object *CH_IDENTITY_SIGREPLY;
Object *CH_IDENTITY_SIGFORWARD;
Object *CH_IDENTITY_ADDINFO;
Object *CH_IDENTITY_REQUESTMDN;
Object *CH_IDENTITY_USEPGP;
Object *PO_IDENTITY_PGPID;
Object *ST_IDENTITY_PGPURL;
Object *CH_IDENTITY_PGPSIGN_UNENC;
Object *CH_IDENTITY_PGPSIGN_ENC;
Object *CH_IDENTITY_PGPENC_ALL;
Object *CH_IDENTITY_PGPENC_SELF;
};
*/
/* Overloaded Methods */
/// OVERLOAD(OM_NEW)
OVERLOAD(OM_NEW)
{
static const char *rtitles[5];
static const char *quotePosition[3];
static const char *signaturePosition[3];
Object *LV_IDENTITY;
Object *BT_IADD;
Object *BT_IDEL;
Object *BT_IDENTITYUP;
Object *BT_IDENTITYDOWN;
Object *CH_IDENTITY_ENABLED;
Object *ST_IDENTITY_DESCRIPTION;
Object *ST_IDENTITY_REALNAME;
Object *ST_IDENTITY_EMAIL;
Object *ST_IDENTITY_ORGANIZATION;
Object *CY_IDENTITY_MAILSERVER;
Object *CY_IDENTITY_SIGNATURE;
Object *ST_IDENTITY_CC;
Object *ST_IDENTITY_BCC;
Object *ST_IDENTITY_REPLYTO;
Object *ST_IDENTITY_EXTRAHEADER;
Object *ST_IDENTITY_PHOTOURL;
Object *CH_IDENTITY_SAVESENTMAIL;
Object *CH_IDENTITY_ALTSENTFOLDER;
Object *PO_IDENTITY_ALTSENTFOLDER;
Object *CH_IDENTITY_QUOTEMAILS;
Object *CY_IDENTITY_QUOTEPOS;
Object *CY_IDENTITY_SIGPOS;
Object *CH_IDENTITY_SIGREPLY;
Object *CH_IDENTITY_SIGFORWARD;
Object *CH_IDENTITY_ADDINFO;
Object *CH_IDENTITY_REQUESTMDN;
Object *CH_IDENTITY_USEPGP;
Object *PO_IDENTITY_PGPID;
Object *ST_IDENTITY_PGPURL;
Object *CH_IDENTITY_PGPSIGN_UNENC;
Object *CH_IDENTITY_PGPSIGN_ENC;
Object *CH_IDENTITY_PGPENC_ALL;
Object *CH_IDENTITY_PGPENC_SELF;
ENTER();
rtitles[0] = tr(MSG_CO_IDENTITY_REGISTER_SETTINGS);
rtitles[1] = tr(MSG_CO_IDENTITY_REGISTER_COMPOSE);
rtitles[2] = tr(MSG_CO_IDENTITY_REGISTER_PGPSEC);
rtitles[3] = NULL;
quotePosition[0] = tr(MSG_CO_IDENTITY_BELOWQUOTE);
quotePosition[1] = tr(MSG_CO_IDENTITY_ABOVEQUOTE);
quotePosition[2] = NULL;
signaturePosition[0] = tr(MSG_CO_IDENTITY_BELOWQUOTE);
signaturePosition[1] = tr(MSG_CO_IDENTITY_ABOVEQUOTE);
signaturePosition[2] = NULL;
if((obj = DoSuperNew(cl, obj,
MUIA_HelpNode, "Configuration#Identities",
MUIA_ConfigPage_Page, cp_Identities,
MUIA_ConfigPage_UseScrollgroup, FALSE,
MUIA_ConfigPage_AddSpacer, FALSE,
MUIA_ConfigPage_Contents, HGroup,
GroupSpacing(0),
Child, VGroup,
MUIA_HorizWeight, 30,
Child, HBarT(tr(MSG_CO_IDENTITY_LIST)), End,
Child, NListviewObject,
MUIA_CycleChain, TRUE,
MUIA_NListview_NList, LV_IDENTITY = IdentityListObject,
End,
End,
Child, HGroup,
Child, ColGroup(2),
MUIA_Group_Spacing, 1,
MUIA_Group_SameWidth, TRUE,
MUIA_Weight, 1,
Child, BT_IADD = MakeButton(MUIX_B "+" MUIX_N),
Child, BT_IDEL = MakeButton(MUIX_B "-" MUIX_N),
End,
Child, HSpace(0),
Child, ColGroup(2),
MUIA_Group_Spacing, 1,
MUIA_Group_SameWidth, TRUE,
Child, BT_IDENTITYUP = PopButton(MUII_ArrowUp),
Child, BT_IDENTITYDOWN = PopButton(MUII_ArrowDown),
End,
End,
End,
Child, NBalanceObject,
MUIA_Balance_Quiet, TRUE,
End,
Child, RegisterGroup(rtitles),
MUIA_CycleChain, TRUE,
MUIA_HorizWeight, 70,
// General Settings
Child, ScrollgroupObject,
MUIA_Scrollgroup_FreeHoriz, FALSE,
MUIA_Scrollgroup_AutoBars, TRUE,
MUIA_Scrollgroup_Contents, VGroupV,
Child, ColGroup(2), GroupFrameT(tr(MSG_CO_IDENTITY_SETTINGS)),
Child, HSpace(1),
Child, MakeCheckGroup(&CH_IDENTITY_ENABLED, tr(MSG_CO_IdentityActive)),
Child, Label2(tr(MSG_CO_IDENTITY_DESCRIPTION)),
Child, ST_IDENTITY_DESCRIPTION = MakeString(SIZE_DEFAULT, tr(MSG_CO_IDENTITY_DESCRIPTION)),
Child, Label2(tr(MSG_CO_RealName)),
Child, ST_IDENTITY_REALNAME = MakeString(SIZE_REALNAME, tr(MSG_CO_RealName)),
Child, Label2(tr(MSG_CO_EmailAddress)),
Child, MakeAddressField(&ST_IDENTITY_EMAIL, tr(MSG_CO_EmailAddress), MSG_HELP_CO_ST_IDENTITY_EMAIL, ABM_CONFIG, -1, AFF_NOFULLNAME|AFF_NOCACHE|AFF_NOVALID|AFF_RESOLVEINACTIVE),
Child, Label2(tr(MSG_CO_Organization)),
Child, ST_IDENTITY_ORGANIZATION = MakeString(SIZE_DEFAULT, tr(MSG_CO_Organization)),
Child, Label2(tr(MSG_CO_IDENTITY_MAILSERVER)),
Child, CY_IDENTITY_MAILSERVER = MailServerChooserObject,
MUIA_MailServerChooser_MailServerList, &CE->smtpServerList,
MUIA_ControlChar, ShortCut(tr(MSG_CO_IDENTITY_MAILSERVER)),
End,
Child, Label2(tr(MSG_CO_IDENTITY_SIGNATURE)),
Child, CY_IDENTITY_SIGNATURE = SignatureChooserObject,
MUIA_SignatureChooser_SignatureList, &CE->signatureList,
MUIA_ControlChar, ShortCut(tr(MSG_CO_IDENTITY_SIGNATURE)),
End,
Child, HVSpace,
Child, HVSpace,
End,
End,
End,
// Compose Mail Settings
Child, ScrollgroupObject,
MUIA_Scrollgroup_FreeHoriz, FALSE,
MUIA_Scrollgroup_AutoBars, TRUE,
MUIA_Scrollgroup_Contents, VGroupV,
Child, ColGroup(2), GroupFrameT(tr(MSG_CO_IDENTITY_COMPOSE)),
Child, Label2(tr(MSG_CO_IDENTITY_CC)),
Child, MakeAddressField(&ST_IDENTITY_CC, tr(MSG_CO_IDENTITY_CC), MSG_HELP_CO_ST_IDENTITY_CC, ABM_CONFIG, -1, AFF_ALLOW_MULTI),
Child, Label2(tr(MSG_CO_IDENTITY_BCC)),
Child, MakeAddressField(&ST_IDENTITY_BCC, tr(MSG_CO_IDENTITY_BCC), MSG_HELP_CO_ST_IDENTITY_BCC, ABM_CONFIG, -1, AFF_ALLOW_MULTI),
Child, Label2(tr(MSG_CO_IDENTITY_REPLYTO)),
Child, MakeAddressField(&ST_IDENTITY_REPLYTO, tr(MSG_CO_IDENTITY_REPLYTO), MSG_HELP_CO_ST_IDENTITY_REPLYTO, ABM_CONFIG, -1, AFF_ALLOW_MULTI),
Child, Label2(tr(MSG_CO_ExtraHeaders)),
Child, ST_IDENTITY_EXTRAHEADER = MakeString(SIZE_LARGE, tr(MSG_CO_ExtraHeaders)),
Child, Label2(tr(MSG_CO_IDENTITY_PHOTOURL)),
Child, ST_IDENTITY_PHOTOURL = MakeString(SIZE_URL, tr(MSG_CO_IDENTITY_PHOTOURL)),
Child, HSpace(1),
Child, HBarT(tr(MSG_CO_IDENTITY_COMPOSE_OPTIONS)), End,
Child, HSpace(1),
Child, VGroup,
Child, ColGroup(2),
Child, CH_IDENTITY_SAVESENTMAIL = MakeCheck(tr(MSG_CO_IDENTITY_SAVESENTMAIL)),
Child, LLabel1(tr(MSG_CO_IDENTITY_SAVESENTMAIL)),
Child, HSpace(0),
Child, ColGroup(2),
Child, CH_IDENTITY_ALTSENTFOLDER = MakeCheck(tr(MSG_CO_IDENTITY_ALTSENTFOLDER)),
Child, LLabel1(tr(MSG_CO_IDENTITY_ALTSENTFOLDER)),
Child, HSpace(1),
Child, PO_IDENTITY_ALTSENTFOLDER = FolderRequestPopupObject, End,
End,
Child, CH_IDENTITY_QUOTEMAILS = MakeCheck(tr(MSG_CO_IDENTITY_COMPOSE_QUOTE)),
Child, LLabel1(tr(MSG_CO_IDENTITY_COMPOSE_QUOTE)),
Child, HSpace(0),
Child, ColGroup(2),
Child, LLabel1(tr(MSG_CO_IDENTITY_COMPOSE_ANSWER)),
Child, CY_IDENTITY_QUOTEPOS = MakeCycle(quotePosition, tr(MSG_CO_IDENTITY_COMPOSE_ANSWER)),
Child, LLabel1(tr(MSG_CO_IDENTITY_COMPOSE_SIGNATURE)),
Child, CY_IDENTITY_SIGPOS = MakeCycle(signaturePosition, tr(MSG_CO_IDENTITY_COMPOSE_SIGNATURE)),
End,
End,
End,
Child, HSpace(1),
Child, HGroup,
Child, CH_IDENTITY_SIGREPLY = MakeCheck(tr(MSG_CO_IDENTITY_USESIG_REPLY)),
Child, LLabel1(tr(MSG_CO_IDENTITY_USESIG_REPLY)),
Child, HSpace(0),
End,
Child, HSpace(1),
Child, HGroup,
Child, CH_IDENTITY_SIGFORWARD = MakeCheck(tr(MSG_CO_IDENTITY_USESIG_FORWARD)),
Child, LLabel1(tr(MSG_CO_IDENTITY_USESIG_FORWARD)),
Child, HSpace(0),
End,
Child, HSpace(1),
Child, HGroup,
Child, CH_IDENTITY_ADDINFO = MakeCheck(tr(MSG_CO_IDENTITY_ADDINFO)),
Child, LLabel1(tr(MSG_CO_IDENTITY_ADDINFO)),
Child, HSpace(0),
End,
Child, HSpace(1),
Child, HGroup,
Child, CH_IDENTITY_REQUESTMDN = MakeCheck(tr(MSG_CO_IDENTITY_REQUESTMDN)),
Child, LLabel1(tr(MSG_CO_IDENTITY_REQUESTMDN)),
Child, HSpace(0),
End,
Child, HVSpace,
Child, HVSpace,
End,
End,
End,
// PGP security settings
Child, ScrollgroupObject,
MUIA_Scrollgroup_FreeHoriz, FALSE,
MUIA_Scrollgroup_AutoBars, TRUE,
MUIA_Scrollgroup_Contents, VGroupV,
Child, ColGroup(2), GroupFrameT(tr(MSG_CO_IDENTITY_PGPSETTINGS)),
Child, HSpace(1),
Child, HGroup,
Child, CH_IDENTITY_USEPGP = MakeCheck(tr(MSG_CO_IDENTITY_USEPGP)),
Child, LLabel1(tr(MSG_CO_IDENTITY_USEPGP)),
Child, HSpace(0),
End,
Child, Label2(tr(MSG_CO_IDENTITY_PGPKEY_ID)),
Child, PO_IDENTITY_PGPID = PGPKeyPopupObject,
MUIA_PGPKeyPopup_Secret, TRUE,
MUIA_PGPKeyPopup_Label, tr(MSG_CO_IDENTITY_PGPKEY_ID),
End,
Child, Label2(tr(MSG_CO_IDENTITY_PGPKEY_URL)),
Child, ST_IDENTITY_PGPURL = MakeString(SIZE_URL, tr(MSG_CO_IDENTITY_PGPKEY_URL)),
Child, HSpace(1),
Child, HBarT(tr(MSG_CO_IDENTITY_PGP_OPTIONS)), End,
Child, HSpace(1),
Child, HGroup,
Child, CH_IDENTITY_PGPSIGN_UNENC = MakeCheck(tr(MSG_CO_IDENTITY_PGP_SIGN_UNENC)),
Child, LLabel1(tr(MSG_CO_IDENTITY_PGP_SIGN_UNENC)),
Child, HSpace(0),
End,
Child, HSpace(1),
Child, HGroup,
Child, CH_IDENTITY_PGPSIGN_ENC = MakeCheck(tr(MSG_CO_IDENTITY_PGP_SIGN_ENC)),
Child, LLabel1(tr(MSG_CO_IDENTITY_PGP_SIGN_ENC)),
Child, HSpace(0),
End,
Child, HSpace(1),
Child, HGroup,
Child, CH_IDENTITY_PGPENC_ALL = MakeCheck(tr(MSG_CO_IDENTITY_PGP_ENCRYPTALL)),
Child, LLabel1(tr(MSG_CO_IDENTITY_PGP_ENCRYPTALL)),
Child, HSpace(0),
End,
Child, HSpace(1),
Child, HGroup,
Child, CH_IDENTITY_PGPENC_SELF = MakeCheck(tr(MSG_CO_IDENTITY_PGP_ADDOWN)),
Child, LLabel1(tr(MSG_CO_IDENTITY_PGP_ADDOWN)),
Child, HSpace(0),
End,
Child, HVSpace,
Child, HVSpace,
End,
End,
End,
End,
End,
TAG_MORE, inittags(msg))) != NULL)
{
GETDATA;
data->LV_IDENTITY = LV_IDENTITY;
data->BT_IADD = BT_IADD;
data->BT_IDEL = BT_IDEL;
data->BT_IDENTITYUP = BT_IDENTITYUP;
data->BT_IDENTITYDOWN = BT_IDENTITYDOWN;
data->CH_IDENTITY_ENABLED = CH_IDENTITY_ENABLED;
data->ST_IDENTITY_DESCRIPTION = ST_IDENTITY_DESCRIPTION;
data->ST_IDENTITY_REALNAME = ST_IDENTITY_REALNAME;
data->ST_IDENTITY_EMAIL = ST_IDENTITY_EMAIL;
data->ST_IDENTITY_ORGANIZATION = ST_IDENTITY_ORGANIZATION;
data->CY_IDENTITY_MAILSERVER = CY_IDENTITY_MAILSERVER;
data->CY_IDENTITY_SIGNATURE = CY_IDENTITY_SIGNATURE;
data->ST_IDENTITY_CC = ST_IDENTITY_CC;
data->ST_IDENTITY_BCC = ST_IDENTITY_BCC;
data->ST_IDENTITY_REPLYTO = ST_IDENTITY_REPLYTO;
data->ST_IDENTITY_EXTRAHEADER = ST_IDENTITY_EXTRAHEADER;
data->ST_IDENTITY_PHOTOURL = ST_IDENTITY_PHOTOURL;
data->CH_IDENTITY_SAVESENTMAIL = CH_IDENTITY_SAVESENTMAIL;
data->CH_IDENTITY_ALTSENTFOLDER = CH_IDENTITY_ALTSENTFOLDER;
data->PO_IDENTITY_ALTSENTFOLDER = PO_IDENTITY_ALTSENTFOLDER;
data->CH_IDENTITY_QUOTEMAILS = CH_IDENTITY_QUOTEMAILS;
data->CY_IDENTITY_QUOTEPOS = CY_IDENTITY_QUOTEPOS;
data->CY_IDENTITY_SIGPOS = CY_IDENTITY_SIGPOS;
data->CH_IDENTITY_SIGREPLY = CH_IDENTITY_SIGREPLY;
data->CH_IDENTITY_SIGFORWARD = CH_IDENTITY_SIGFORWARD;
data->CH_IDENTITY_ADDINFO = CH_IDENTITY_ADDINFO;
data->CH_IDENTITY_REQUESTMDN = CH_IDENTITY_REQUESTMDN;
data->CH_IDENTITY_USEPGP = CH_IDENTITY_USEPGP;
data->PO_IDENTITY_PGPID = PO_IDENTITY_PGPID;
data->ST_IDENTITY_PGPURL = ST_IDENTITY_PGPURL;
data->CH_IDENTITY_PGPSIGN_UNENC = CH_IDENTITY_PGPSIGN_UNENC;
data->CH_IDENTITY_PGPSIGN_ENC = CH_IDENTITY_PGPSIGN_ENC;
data->CH_IDENTITY_PGPENC_ALL = CH_IDENTITY_PGPENC_ALL;
data->CH_IDENTITY_PGPENC_SELF = CH_IDENTITY_PGPENC_SELF;
// enhance the CycleChain
set(BT_IDENTITYUP, MUIA_CycleChain, TRUE);
set(BT_IDENTITYDOWN, MUIA_CycleChain, TRUE);
// set help text to objects
SetHelp(CH_IDENTITY_ENABLED, MSG_HELP_CO_CH_IDENTITY_ENABLED);
SetHelp(ST_IDENTITY_DESCRIPTION, MSG_HELP_CO_ST_IDENTITY_DESCRIPTION);
SetHelp(ST_IDENTITY_REALNAME, MSG_HELP_CO_ST_IDENTITY_REALNAME);
SetHelp(ST_IDENTITY_EMAIL, MSG_HELP_CO_ST_IDENTITY_EMAIL);
SetHelp(ST_IDENTITY_ORGANIZATION, MSG_HELP_CO_ST_IDENTITY_ORGANIZATION);
SetHelp(CY_IDENTITY_MAILSERVER, MSG_HELP_CO_CY_IDENTITY_MAILSERVER);
SetHelp(CY_IDENTITY_SIGNATURE, MSG_HELP_CO_CY_IDENTITY_SIGNATURE);
SetHelp(ST_IDENTITY_CC, MSG_HELP_CO_ST_IDENTITY_CC);
SetHelp(ST_IDENTITY_BCC, MSG_HELP_CO_ST_IDENTITY_BCC);
SetHelp(ST_IDENTITY_REPLYTO, MSG_HELP_CO_ST_IDENTITY_REPLYTO);
SetHelp(ST_IDENTITY_EXTRAHEADER, MSG_HELP_CO_ST_IDENTITY_EXTRAHEADER);
SetHelp(ST_IDENTITY_PHOTOURL, MSG_HELP_CO_ST_IDENTITY_PHOTOURL);
SetHelp(CH_IDENTITY_SAVESENTMAIL, MSG_HELP_CO_CH_IDENTITY_SAVESENTMAIL);
SetHelp(CH_IDENTITY_ALTSENTFOLDER, MSG_HELP_CO_CH_IDENTITY_ALTSENTFOLDER);
SetHelp(PO_IDENTITY_ALTSENTFOLDER, MSG_HELP_CO_TX_IDENTITY_ALTSENTFOLDER);
SetHelp(CH_IDENTITY_QUOTEMAILS, MSG_HELP_CO_CH_IDENTITY_QUOTEMAILS);
SetHelp(CY_IDENTITY_QUOTEPOS, MSG_HELP_CO_CH_IDENTITY_QUOTEPOS);
SetHelp(CY_IDENTITY_SIGPOS, MSG_HELP_CO_CH_IDENTITY_SIGPOS);
SetHelp(CH_IDENTITY_SIGREPLY, MSG_HELP_CO_CH_IDENTITY_SIGREPLY);
SetHelp(CH_IDENTITY_SIGFORWARD, MSG_HELP_CO_CH_IDENTITY_SIGFORWARD);
SetHelp(CH_IDENTITY_ADDINFO, MSG_HELP_CO_CH_IDENTITY_ADDINFO);
SetHelp(CH_IDENTITY_REQUESTMDN, MSG_HELP_CO_CH_IDENTITY_REQUESTMDN);
SetHelp(CH_IDENTITY_USEPGP, MSG_HELP_CO_CH_IDENTITY_USEPGP);
SetHelp(PO_IDENTITY_PGPID, MSG_HELP_CO_ST_IDENTITY_PGPID);
SetHelp(ST_IDENTITY_PGPURL, MSG_HELP_CO_ST_IDENTITY_PGPURL);
SetHelp(CH_IDENTITY_PGPSIGN_UNENC, MSG_HELP_CO_CH_IDENTITY_PGPSIGN_UNENC);
SetHelp(CH_IDENTITY_PGPSIGN_ENC, MSG_HELP_CO_CH_IDENTITY_PGPSIGN_ENC);
SetHelp(CH_IDENTITY_PGPENC_ALL, MSG_HELP_CO_CH_IDENTITY_PGPENC_ALL);
SetHelp(CH_IDENTITY_PGPENC_SELF, MSG_HELP_CO_CH_IDENTITY_PGPENC_SELF);
// connect a notify if the user selects a different identity in the list
DoMethod(LV_IDENTITY, MUIM_Notify, MUIA_NList_Active, MUIV_EveryTime, obj, 1, METHOD(IdentityToGUI));
// connect notifies to update the UserIdentityNode according to the latest
// settings in this config page
DoMethod(CH_IDENTITY_ENABLED, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(ST_IDENTITY_DESCRIPTION, MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(ST_IDENTITY_REALNAME, MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(ST_IDENTITY_EMAIL, MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(ST_IDENTITY_ORGANIZATION, MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CY_IDENTITY_MAILSERVER, MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CY_IDENTITY_SIGNATURE, MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(ST_IDENTITY_CC, MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(ST_IDENTITY_BCC, MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(ST_IDENTITY_REPLYTO, MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(ST_IDENTITY_EXTRAHEADER, MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(ST_IDENTITY_PHOTOURL, MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CH_IDENTITY_SAVESENTMAIL, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CH_IDENTITY_ALTSENTFOLDER, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(PO_IDENTITY_ALTSENTFOLDER, MUIM_Notify, MUIA_FolderRequestPopup_FolderChanged, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CH_IDENTITY_QUOTEMAILS, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CY_IDENTITY_QUOTEPOS, MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CY_IDENTITY_SIGPOS, MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CH_IDENTITY_SIGREPLY, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CH_IDENTITY_SIGFORWARD, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CH_IDENTITY_ADDINFO, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CH_IDENTITY_REQUESTMDN, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CH_IDENTITY_USEPGP, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(PO_IDENTITY_PGPID, MUIM_Notify, MUIA_PGPKeyPopup_PGPKeyChanged, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(ST_IDENTITY_PGPURL, MUIM_Notify, MUIA_String_Contents, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CH_IDENTITY_PGPSIGN_UNENC, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CH_IDENTITY_PGPSIGN_ENC, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CH_IDENTITY_PGPENC_ALL, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(CH_IDENTITY_PGPENC_SELF, MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, METHOD(GUIToIdentity));
DoMethod(BT_IADD, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, METHOD(AddIdentityEntry));
DoMethod(BT_IDEL, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, METHOD(DeleteIdentityEntry));
DoMethod(BT_IDENTITYUP, MUIM_Notify, MUIA_Pressed, FALSE, LV_IDENTITY, 3, MUIM_NList_Move, MUIV_NList_Move_Selected, MUIV_NList_Move_Previous);
DoMethod(BT_IDENTITYDOWN, MUIM_Notify, MUIA_Pressed, FALSE, LV_IDENTITY, 3, MUIM_NList_Move, MUIV_NList_Move_Selected, MUIV_NList_Move_Next);
}
RETURN((IPTR)obj);
return (IPTR)obj;
}
///
/// OVERLOAD(MUIM_ConfigPage_ConfigToGUI)
OVERLOAD(MUIM_ConfigPage_ConfigToGUI)
{
GETDATA;
int numIdentities = 0;
struct UserIdentityNode *uin;
ENTER();
// clear the lists first
set(data->LV_IDENTITY, MUIA_NList_Quiet, TRUE);
DoMethod(data->LV_IDENTITY, MUIM_NList_Clear);
// we iterate through our user identity list and make sure to populate
// out NList object correctly.
IterateList(&CE->userIdentityList, struct UserIdentityNode *, uin)
{
// if the description is empty we use the mail address instead
if(uin->description[0] == '\0')
strlcpy(uin->description, uin->address, sizeof(uin->description));
DoMethod(data->LV_IDENTITY, MUIM_NList_InsertSingle, uin, MUIV_NList_Insert_Bottom);
numIdentities++;
}
// make sure the first entry is selected per default
xset(data->LV_IDENTITY,
MUIA_NList_Quiet, FALSE,
MUIA_NList_Active, MUIV_NList_Active_Top);
// set the enabled stated of the del button according to the number of available identities
set(data->BT_IDEL, MUIA_Disabled, numIdentities < 2);
RETURN(0);
return 0;
}
///
/// OVERLOAD(MUIM_ConfigPage_GUIToConfig)
OVERLOAD(MUIM_ConfigPage_GUIToConfig)
{
GETDATA;
ENTER();
// bring NList elements and Exec list elements into sync
SortNListToExecList(data->LV_IDENTITY, &CE->userIdentityList);
RETURN(0);
return 0;
}
///
/// OVERLOAD(MUIM_ConfigPage_ConfigUpdate)
OVERLOAD(MUIM_ConfigPage_ConfigUpdate)
{
GETDATA;
enum ConfigPage sourcePage = ((struct MUIP_ConfigPage_ConfigUpdate *)msg)->sourcePage;
ENTER();
switch(sourcePage)
{
case cp_TCPIP:
{
DoMethod(data->CY_IDENTITY_MAILSERVER, MUIM_MailServerChooser_UpdateMailServers);
}
break;
case cp_Signature:
{
DoMethod(data->CY_IDENTITY_SIGNATURE, MUIM_SignatureChooser_UpdateSignatures);
}
break;
default:
{
// ignore all other pages for the moment
}
break;
}
RETURN(0);
return 0;
}
///
/// DECLARE(IdentityToGUI)
// fills form with data from selected list entry
DECLARE(IdentityToGUI)
{
GETDATA;
struct UserIdentityNode *uin = NULL;
LONG pos = MUIV_NList_GetPos_Start;
ENTER();
// get the currently selected user identity
DoMethod(data->LV_IDENTITY, MUIM_NList_GetEntry, MUIV_NList_GetEntry_Active, &uin);
// make sure to disable GUI elements
if(uin == NULL || xget(data->LV_IDENTITY, MUIA_NList_Entries) < 2)
set(data->BT_IDEL, MUIA_Disabled, TRUE);
else
set(data->BT_IDEL, MUIA_Disabled, FALSE);
if(uin != NULL)
DoMethod(data->LV_IDENTITY, MUIM_NList_GetPos, uin, &pos);
else
pos = 0;
set(data->BT_IDENTITYUP, MUIA_Disabled, pos == 0);
set(data->BT_IDENTITYDOWN, MUIA_Disabled, pos == (LONG)xget(data->LV_IDENTITY, MUIA_NList_Entries) - 1);
if(uin != NULL)
{
// all notifies here are nnset() notifies so that we don't trigger any additional
// notify or otherwise we would run into problems.
nnset(data->CH_IDENTITY_ENABLED, MUIA_Selected, uin->active);
nnset(data->ST_IDENTITY_DESCRIPTION, MUIA_String_Contents, uin->description);
nnset(data->ST_IDENTITY_REALNAME, MUIA_String_Contents, uin->realname);
nnset(data->ST_IDENTITY_EMAIL, MUIA_String_Contents, uin->address);
nnset(data->ST_IDENTITY_ORGANIZATION, MUIA_String_Contents, uin->organization);
nnset(data->ST_IDENTITY_CC, MUIA_String_Contents, uin->mailCC);
nnset(data->ST_IDENTITY_BCC, MUIA_String_Contents, uin->mailBCC);
nnset(data->ST_IDENTITY_REPLYTO, MUIA_String_Contents, uin->mailReplyTo);
nnset(data->ST_IDENTITY_EXTRAHEADER, MUIA_String_Contents, uin->extraHeaders);
nnset(data->ST_IDENTITY_PHOTOURL, MUIA_String_Contents, uin->photoURL);
nnset(data->CH_IDENTITY_SAVESENTMAIL, MUIA_Selected, uin->saveSentMail);
nnset(data->CH_IDENTITY_ALTSENTFOLDER, MUIA_Selected, uin->sentFolderID != 0);
nnset(data->PO_IDENTITY_ALTSENTFOLDER, MUIA_FolderRequestPopup_FolderID, uin->sentFolderID);
nnset(data->CH_IDENTITY_QUOTEMAILS, MUIA_Selected, uin->quoteMails);
nnset(data->CY_IDENTITY_QUOTEPOS, MUIA_Cycle_Active, uin->quotePosition);
nnset(data->CY_IDENTITY_SIGPOS, MUIA_Cycle_Active, uin->signaturePosition);
nnset(data->CH_IDENTITY_SIGREPLY, MUIA_Selected, uin->sigReply);
nnset(data->CH_IDENTITY_SIGFORWARD, MUIA_Selected, uin->sigForwarding);
nnset(data->CH_IDENTITY_ADDINFO, MUIA_Selected, uin->addPersonalInfo);
nnset(data->CH_IDENTITY_REQUESTMDN, MUIA_Selected, uin->requestMDN);
nnset(data->CH_IDENTITY_USEPGP, MUIA_Selected, uin->usePGP);
nnset(data->PO_IDENTITY_PGPID, MUIA_PGPKeyPopup_PGPKey, uin->pgpKeyID);
nnset(data->ST_IDENTITY_PGPURL, MUIA_String_Contents, uin->pgpKeyURL);
nnset(data->CH_IDENTITY_PGPSIGN_UNENC, MUIA_Selected, uin->pgpSignUnencrypted);
nnset(data->CH_IDENTITY_PGPSIGN_ENC, MUIA_Selected, uin->pgpSignEncrypted);
nnset(data->CH_IDENTITY_PGPENC_ALL, MUIA_Selected, uin->pgpEncryptAll);
nnset(data->CH_IDENTITY_PGPENC_SELF, MUIA_Selected, uin->pgpSelfEncrypt);
// we have to set the correct mail server in the GUI so we browse through
// the SMTP server list and match the ids
if(uin->smtpServer != NULL)
{
struct MailServerNode *msn;
// we match the ids because the pointers may be different
if((msn = FindMailServer(&CE->smtpServerList, uin->smtpServer->id)) != NULL)
nnset(data->CY_IDENTITY_MAILSERVER, MUIA_MailServerChooser_MailServer, msn);
}
// we have to set the correct signature in the GUI so we browse through
// the signature list and match the ids
if(uin->signature != NULL)
{
struct SignatureNode *sn;
// we match the ids because the pointers may be different
if((sn = FindSignatureByID(&CE->signatureList, uin->signature->id)) != NULL)
nnset(data->CY_IDENTITY_SIGNATURE, MUIA_SignatureChooser_Signature, sn);
}
else
nnset(data->CY_IDENTITY_SIGNATURE, MUIA_SignatureChooser_Signature, NULL);
}
set(data->CY_IDENTITY_QUOTEPOS, MUIA_Disabled, uin == NULL || uin->quoteMails == FALSE);
set(data->CY_IDENTITY_SIGPOS, MUIA_Disabled, uin == NULL || uin->quotePosition == QPOS_BELOW || uin->quoteMails == FALSE);
DoMethod(_win(obj), MUIM_MultiSet, MUIA_Disabled, uin == NULL || uin->usePGP == FALSE,
data->PO_IDENTITY_PGPID,
data->ST_IDENTITY_PGPURL,
data->CH_IDENTITY_PGPSIGN_UNENC,
data->CH_IDENTITY_PGPSIGN_ENC,
data->CH_IDENTITY_PGPENC_ALL,
data->CH_IDENTITY_PGPENC_SELF,
NULL);
DoMethod(_win(obj), MUIM_MultiSet, MUIA_Disabled, uin == NULL || uin->saveSentMail == FALSE,
data->CH_IDENTITY_ALTSENTFOLDER,
NULL);
DoMethod(_win(obj), MUIM_MultiSet, MUIA_Disabled, uin == NULL || uin->saveSentMail == FALSE || uin->sentFolderID == 0,
data->PO_IDENTITY_ALTSENTFOLDER,
NULL);
RETURN(0);
return 0;
}
///
/// DECLARE(GUIToIdentity)
// fills form data into selected list entry
DECLARE(GUIToIdentity)
{
GETDATA;
int p;
ENTER();
p = xget(data->LV_IDENTITY, MUIA_NList_Active);
if(p != MUIV_NList_Active_Off)
{
struct UserIdentityNode *uin = NULL;
DoMethod(data->LV_IDENTITY, MUIM_NList_GetEntry, p, &uin);
if(uin != NULL)
{
uin->active = GetMUICheck(data->CH_IDENTITY_ENABLED);
GetMUIString(uin->description, data->ST_IDENTITY_DESCRIPTION, sizeof(uin->description));
GetMUIString(uin->realname, data->ST_IDENTITY_REALNAME, sizeof(uin->realname));
GetMUIString(uin->address, data->ST_IDENTITY_EMAIL, sizeof(uin->address));
GetMUIString(uin->organization, data->ST_IDENTITY_ORGANIZATION,sizeof(uin->organization));
uin->smtpServer = (struct MailServerNode *)xget(data->CY_IDENTITY_MAILSERVER, MUIA_MailServerChooser_MailServer);
uin->signature = (struct SignatureNode *)xget(data->CY_IDENTITY_SIGNATURE, MUIA_SignatureChooser_Signature);
GetMUIString(uin->mailCC, data->ST_IDENTITY_CC, sizeof(uin->mailCC));
GetMUIString(uin->mailBCC, data->ST_IDENTITY_BCC, sizeof(uin->mailBCC));
GetMUIString(uin->mailReplyTo, data->ST_IDENTITY_REPLYTO, sizeof(uin->mailReplyTo));
GetMUIString(uin->extraHeaders, data->ST_IDENTITY_EXTRAHEADER, sizeof(uin->extraHeaders));
GetMUIString(uin->photoURL, data->ST_IDENTITY_PHOTOURL, sizeof(uin->photoURL));
if(GetMUICheck(data->CH_IDENTITY_ALTSENTFOLDER))
{
uin->sentFolderID = xget(data->PO_IDENTITY_ALTSENTFOLDER, MUIA_FolderRequestPopup_FolderID);
strlcpy(uin->sentFolderName, (char *)xget(data->PO_IDENTITY_ALTSENTFOLDER, MUIA_FolderRequestPopup_FolderName), sizeof(uin->sentFolderName));
}
else
{
uin->sentFolderID = 0;
uin->sentFolderName[0] = '\0';
}
uin->saveSentMail = GetMUICheck(data->CH_IDENTITY_SAVESENTMAIL);
uin->quoteMails = GetMUICheck(data->CH_IDENTITY_QUOTEMAILS);
uin->quotePosition = GetMUICycle(data->CY_IDENTITY_QUOTEPOS);
uin->signaturePosition = GetMUICycle(data->CY_IDENTITY_SIGPOS);
uin->sigReply = GetMUICheck(data->CH_IDENTITY_SIGREPLY);
uin->sigForwarding = GetMUICheck(data->CH_IDENTITY_SIGFORWARD);
uin->addPersonalInfo = GetMUICheck(data->CH_IDENTITY_ADDINFO);
uin->requestMDN = GetMUICheck(data->CH_IDENTITY_REQUESTMDN);
uin->usePGP = GetMUICheck(data->CH_IDENTITY_USEPGP);
strlcpy(uin->pgpKeyID, (char *)xget(data->PO_IDENTITY_PGPID, MUIA_PGPKeyPopup_PGPKey), sizeof(uin->pgpKeyID));
GetMUIString(uin->pgpKeyURL, data->ST_IDENTITY_PGPURL, sizeof(uin->pgpKeyURL));
uin->pgpSignUnencrypted = GetMUICheck(data->CH_IDENTITY_PGPSIGN_UNENC);
uin->pgpSignEncrypted = GetMUICheck(data->CH_IDENTITY_PGPSIGN_ENC);
uin->pgpEncryptAll = GetMUICheck(data->CH_IDENTITY_PGPENC_ALL);
uin->pgpSelfEncrypt = GetMUICheck(data->CH_IDENTITY_PGPENC_SELF);
set(data->CY_IDENTITY_QUOTEPOS, MUIA_Disabled, uin->quoteMails == FALSE);
set(data->CY_IDENTITY_SIGPOS, MUIA_Disabled, uin->quotePosition == QPOS_BELOW || uin->quoteMails == FALSE);
DoMethod(_win(obj), MUIM_MultiSet, MUIA_Disabled, uin->usePGP == FALSE,
data->PO_IDENTITY_PGPID,
data->ST_IDENTITY_PGPURL,
data->CH_IDENTITY_PGPSIGN_UNENC,
data->CH_IDENTITY_PGPSIGN_ENC,
data->CH_IDENTITY_PGPENC_ALL,
data->CH_IDENTITY_PGPENC_SELF,
NULL);
DoMethod(_win(obj), MUIM_MultiSet, MUIA_Disabled, uin->saveSentMail == FALSE,
data->CH_IDENTITY_ALTSENTFOLDER,
NULL);
DoMethod(_win(obj), MUIM_MultiSet, MUIA_Disabled, uin->saveSentMail == FALSE || GetMUICheck(data->CH_IDENTITY_ALTSENTFOLDER) == FALSE,
data->PO_IDENTITY_ALTSENTFOLDER,
NULL);
// if the user hasn't yet entered an own account name or the default
// account name is still present we go and set an automatic generated one
if(uin->description[0] == '\0' || strcmp(uin->description, tr(MSG_NewEntry)) == 0)
strlcpy(uin->description, uin->address, sizeof(uin->description));
// redraw the list
DoMethod(data->LV_IDENTITY, MUIM_NList_Redraw, p);
}
}
RETURN(0);
return 0;
}
///
/// DECLARE(AddIdentityEntry)
// adds a new entry to the user identity list
DECLARE(AddIdentityEntry)
{
GETDATA;
struct UserIdentityNode *uin;
ENTER();
if((uin = CreateNewUserIdentity(CE)) != NULL)
{
if(IsMinListEmpty(&CE->userIdentityList) == FALSE)
strlcpy(uin->description, tr(MSG_NewEntry), sizeof(uin->description));
DoMethod(data->LV_IDENTITY, MUIM_NList_InsertSingle, uin, MUIV_NList_Insert_Bottom);
// add the server to the list
AddTail((struct List *)&CE->userIdentityList, (struct Node *)uin);
// set the new entry active and make sure that the email gadget will be
// set as the new active object of the window as that gadget will be used
// to automatically set the account name.
set(data->LV_IDENTITY, MUIA_NList_Active, MUIV_List_Active_Bottom);
set(_win(obj), MUIA_Window_ActiveObject, data->ST_IDENTITY_EMAIL);
}
RETURN(0);
return 0;
}
///
/// DECLARE(DeleteIdentityEntry)
// deletes an entry from the user identity list
DECLARE(DeleteIdentityEntry)
{
GETDATA;
struct UserIdentityNode *uin = NULL;
ENTER();
DoMethod(data->LV_IDENTITY, MUIM_NList_GetEntry, MUIV_NList_GetEntry_Active, &uin);
if(uin != NULL &&
xget(data->LV_IDENTITY, MUIA_NList_Entries) > 1)
{
DoMethod(data->LV_IDENTITY, MUIM_NList_Remove, MUIV_NList_Remove_Active);
// remove it from the internal user identity list as well.
Remove((struct Node *)uin);
FreeSysObject(ASOT_NODE, uin);
}
RETURN(0);
return 0;
}
///