jens-maus/yam

View on GitHub
src/mui/WriteConfigPage.c

Summary

Maintainability
Test Coverage
/***************************************************************************

 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: "Write" configuration page

***************************************************************************/

#include "WriteConfigPage_cl.h"

#include <proto/muimaster.h>
#include <mui/NList_mcc.h>
#include <mui/NListview_mcc.h>

#include "mui/AttachmentKeywordList.h"
#include "mui/CodesetPopup.h"
#include "mui/ConfigPage.h"
#include "mui/ConfigPageList.h"

#include "Config.h"
#include "Requesters.h"

#include "Debug.h"

/* CLASSDATA
struct Data
{
  Object *ST_HELLOTEXT;
  Object *ST_BYETEXT;
  Object *PO_DEFCODESET_WRITE;
  Object *ST_EDWRAP;
  Object *CY_EDWRAP;
  Object *NB_EMAILCACHE;
  Object *NB_AUTOSAVE;
  Object *CH_FIXEDFONT_WRITE;
  Object *CH_TEXTCOLORS_WRITE;
  Object *CH_TEXTSTYLES_WRITE;
  Object *CH_WARNSUBJECT;
  Object *CH_ATTACHMENTREMINDER;
  Object *LV_ATTACHMENTKEYWORDS;
  Object *NL_ATTACHMENTKEYWORDS;
  Object *ST_ATTACHMENTKEYWORD;
  Object *BT_KEYWORDADD;
  Object *BT_KEYWORDREMOVE;
  Object *CH_LAUNCH;
};
*/

/* Overloaded Methods */
/// OVERLOAD(OM_NEW)
OVERLOAD(OM_NEW)
{
  static const char *wrapmode[4];
  Object *ST_HELLOTEXT;
  Object *ST_BYETEXT;
  Object *PO_DEFCODESET_WRITE;
  Object *ST_EDWRAP;
  Object *CY_EDWRAP;
  Object *NB_EMAILCACHE;
  Object *NB_AUTOSAVE;
  Object *CH_FIXEDFONT_WRITE;
  Object *CH_TEXTCOLORS_WRITE;
  Object *CH_TEXTSTYLES_WRITE;
  Object *CH_WARNSUBJECT;
  Object *CH_ATTACHMENTREMINDER;
  Object *LV_ATTACHMENTKEYWORDS;
  Object *NL_ATTACHMENTKEYWORDS;
  Object *ST_ATTACHMENTKEYWORD;
  Object *BT_KEYWORDADD;
  Object *BT_KEYWORDREMOVE;
  Object *CH_LAUNCH;

  ENTER();

  wrapmode[0] = tr(MSG_CO_EWOff);
  wrapmode[1] = tr(MSG_CO_EWAsYouType);
  wrapmode[2] = NULL; //tr(MSG_CO_EWBeforeSend);
  wrapmode[3] = NULL;

  if((obj = DoSuperNew(cl, obj,
    MUIA_HelpNode, "Configuration#Write",
    MUIA_ConfigPage_Page, cp_Write,
    MUIA_ConfigPage_Contents, VGroup,
      Child, VGroup, GroupFrameT(tr(MSG_CO_MessageBody)),
        Child, ColGroup(2),
          Child, Label2(tr(MSG_CO_Welcome)),
          Child, ST_HELLOTEXT = MakeString(SIZE_INTRO,tr(MSG_CO_Welcome)),

          Child, Label2(tr(MSG_CO_Greetings)),
          Child, ST_BYETEXT = MakeString(SIZE_INTRO,tr(MSG_CO_Greetings)),

          Child, Label2(tr(MSG_CO_DEFAULTCODESET_WRITE)),
          Child, PO_DEFCODESET_WRITE = CodesetPopupObject,
            MUIA_CodesetPopup_ControlChar, tr(MSG_CO_DEFAULTCODESET_WRITE),
          End,
        End,
      End,

      Child, VGroup, GroupFrameT(tr(MSG_CO_Editor)),
        Child, ColGroup(2),

          Child, Label2(tr(MSG_CO_WordWrap)),
          Child, HGroup,
            Child, ST_EDWRAP = MakeInteger(3, tr(MSG_CO_WordWrap)),
            Child, CY_EDWRAP = MakeCycle(wrapmode, ""),
          End,

          Child, Label2(tr(MSG_CO_NB_EMAILCACHE)),
          Child, HGroup,
            Child, NB_EMAILCACHE = NumericbuttonObject,
              MUIA_CycleChain,      TRUE,
              MUIA_Numeric_Min,     0,
              MUIA_Numeric_Max,     100,
              MUIA_Numeric_Format,  tr(MSG_CO_NB_EMAILCACHEFMT),
            End,
            Child, HSpace(0),
          End,

          Child, Label2(tr(MSG_CO_NB_AUTOSAVE)),
          Child, HGroup,
            Child, NB_AUTOSAVE = NumericbuttonObject,
              MUIA_CycleChain,      TRUE,
              MUIA_Numeric_Min,     0,
              MUIA_Numeric_Max,     30,
              MUIA_Numeric_Format,  tr(MSG_CO_NB_AUTOSAVEFMT),
            End,
            Child, HSpace(0),
          End,

        End,

        Child, RectangleObject,
          MUIA_VertWeight,          0,
          MUIA_Rectangle_HBar,      TRUE,
          MUIA_Rectangle_BarTitle,  tr(MSG_CO_FONTSETTINGS),
        End,
        Child, MakeCheckGroup(&CH_FIXEDFONT_WRITE, tr(MSG_CO_FIXEDFONT_WRITE)),
        Child, MakeCheckGroup(&CH_TEXTCOLORS_WRITE, tr(MSG_CO_TEXTCOLORS_WRITE)),
        Child, MakeCheckGroup(&CH_TEXTSTYLES_WRITE, tr(MSG_CO_TEXTSTYLES_WRITE)),

      End,

      Child, ColGroup(2), GroupFrameT(tr(MSG_CO_OtherOptions)),

        Child, CH_WARNSUBJECT = MakeCheck(tr(MSG_CO_WARNSUBJECT)),
        Child, HGroup,
          Child, LLabel(tr(MSG_CO_WARNSUBJECT)),
          Child, HSpace(0),
        End,

        Child, CH_LAUNCH = MakeCheck(tr(MSG_CO_LAUNCH_EXTEDITOR)),
        Child, HGroup,
          Child, LLabel(tr(MSG_CO_LAUNCH_EXTEDITOR)),
          Child, HSpace(0),
        End,

        Child, CH_ATTACHMENTREMINDER = MakeCheck(tr(MSG_CO_CHECK_FOR_MISSING_ATTACHMENTS)),
        Child, HGroup,
          Child, LLabel(tr(MSG_CO_CHECK_FOR_MISSING_ATTACHMENTS)),
          Child, HSpace(0),
        End,

        Child, HSpace(1),
        Child, HGroup,
          Child, VGroup,
            Child, Label(tr(MSG_CO_ATTACHMENT_KEYWORDS)),
            Child, VSpace(0),
          End,
          Child, VGroup,
            MUIA_Group_Spacing, 0,
            Child, LV_ATTACHMENTKEYWORDS = NListviewObject,
              MUIA_CycleChain, TRUE,
              MUIA_FixHeightTxt, "\n\n\n\n",
              MUIA_NListview_NList, NL_ATTACHMENTKEYWORDS = AttachmentKeywordListObject,
              End,
            End,
            Child, HGroup,
              MUIA_Group_Spacing, 1,
              Child, ST_ATTACHMENTKEYWORD = MakeString(SIZE_DEFAULT, tr(MSG_CO_ATTACHMENT_KEYWORDS)),
              Child, HGroup,
                MUIA_Weight, 0,
                MUIA_Group_Spacing, 1,
                MUIA_Group_SameWidth, TRUE,
                Child, BT_KEYWORDADD = MakeButton(MUIX_B "+" MUIX_N),
                Child, BT_KEYWORDREMOVE = MakeButton(MUIX_B "-" MUIX_N),
              End,
            End,
          End,
        End,

      End,
    End,
  TAG_MORE, inittags(msg))) != NULL)
  {
    GETDATA;

    data->ST_HELLOTEXT =          ST_HELLOTEXT;
    data->ST_BYETEXT =            ST_BYETEXT;
    data->PO_DEFCODESET_WRITE =   PO_DEFCODESET_WRITE;
    data->ST_EDWRAP =             ST_EDWRAP;
    data->CY_EDWRAP =             CY_EDWRAP;
    data->NB_EMAILCACHE =         NB_EMAILCACHE;
    data->NB_AUTOSAVE =           NB_AUTOSAVE;
    data->CH_FIXEDFONT_WRITE =    CH_FIXEDFONT_WRITE;
    data->CH_TEXTCOLORS_WRITE =   CH_TEXTCOLORS_WRITE;
    data->CH_TEXTSTYLES_WRITE =   CH_TEXTSTYLES_WRITE;
    data->CH_WARNSUBJECT =        CH_WARNSUBJECT;
    data->CH_ATTACHMENTREMINDER = CH_ATTACHMENTREMINDER;
    data->LV_ATTACHMENTKEYWORDS = LV_ATTACHMENTKEYWORDS;
    data->NL_ATTACHMENTKEYWORDS = NL_ATTACHMENTKEYWORDS;
    data->ST_ATTACHMENTKEYWORD =  ST_ATTACHMENTKEYWORD;
    data->BT_KEYWORDADD =         BT_KEYWORDADD;
    data->BT_KEYWORDREMOVE =      BT_KEYWORDREMOVE;
    data->CH_LAUNCH =             CH_LAUNCH;

    SetHelp(ST_HELLOTEXT,          MSG_HELP_CO_ST_HELLOTEXT);
    SetHelp(ST_BYETEXT,            MSG_HELP_CO_ST_BYETEXT);
    SetHelp(ST_EDWRAP,             MSG_HELP_CO_ST_EDWRAP);
    SetHelp(CY_EDWRAP,             MSG_HELP_CO_CY_EDWRAP);
    SetHelp(CH_WARNSUBJECT,        MSG_HELP_CO_CH_WARNSUBJECT);
    SetHelp(CH_ATTACHMENTREMINDER, MSG_HELP_CO_CH_ATTACHMENTREMINDER);
    SetHelp(LV_ATTACHMENTKEYWORDS, MSG_HELP_CO_LV_ATTACHMENTKEYWORDS);
    SetHelp(CH_LAUNCH,             MSG_HELP_CO_CH_LAUNCH);
    SetHelp(NB_EMAILCACHE,         MSG_HELP_CO_NB_EMAILCACHE);
    SetHelp(NB_AUTOSAVE,           MSG_HELP_CO_NB_AUTOSAVE);
    SetHelp(PO_DEFCODESET_WRITE,   MSG_HELP_CO_TX_DEFCODESET_WRITE);
    SetHelp(CH_TEXTSTYLES_WRITE,   MSG_HELP_CO_CH_TEXTSTYLES_WRITE);
    SetHelp(CH_TEXTCOLORS_WRITE,   MSG_HELP_CO_CH_TEXTCOLORS_WRITE);

    DoMethod(CY_EDWRAP,             MUIM_Notify, MUIA_Cycle_Active,       MUIV_EveryTime, ST_EDWRAP,             3, MUIM_Set, MUIA_Disabled, MUIV_NotTriggerValue);
    DoMethod(CH_ATTACHMENTREMINDER, MUIM_Notify, MUIA_Selected,           MUIV_EveryTime, obj,                   3, METHOD(UpdateButtons), CH_ATTACHMENTREMINDER, MUIV_NotTriggerValue);
    DoMethod(NL_ATTACHMENTKEYWORDS, MUIM_Notify, MUIA_NList_Active,       MUIV_EveryTime, obj,                   3, METHOD(UpdateButtons), NL_ATTACHMENTKEYWORDS, FALSE);
    DoMethod(BT_KEYWORDADD,         MUIM_Notify, MUIA_Pressed,            FALSE,          obj,                   1, METHOD(AddAttachmentKeyword));
    DoMethod(BT_KEYWORDREMOVE,      MUIM_Notify, MUIA_Pressed,            FALSE,          NL_ATTACHMENTKEYWORDS, 2, MUIM_NList_Remove, MUIV_NList_Remove_Active);
    DoMethod(ST_ATTACHMENTKEYWORD,  MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, NL_ATTACHMENTKEYWORDS, 2, MUIM_AttachmentKeywordList_ModifyKeyword, MUIV_TriggerValue);
  }

  RETURN((IPTR)obj);
  return (IPTR)obj;
}

///
/// OVERLOAD(MUIM_ConfigPage_ConfigToGUI)
OVERLOAD(MUIM_ConfigPage_ConfigToGUI)
{
  GETDATA;

  ENTER();

  setstring(data->ST_HELLOTEXT, CE->NewIntro);
  setstring(data->ST_BYETEXT, CE->Greetings);
  setcheckmark(data->CH_WARNSUBJECT, CE->WarnSubject);
  set(data->NL_ATTACHMENTKEYWORDS, MUIA_AttachmentKeywordList_Keywords, CE->AttachmentKeywords);
  xset(data->ST_EDWRAP,
    MUIA_String_Integer, CE->EdWrapCol,
    MUIA_Disabled, CE->EdWrapMode == EWM_OFF);
  setcycle(data->CY_EDWRAP, CE->EdWrapMode);
  setcheckmark(data->CH_LAUNCH, CE->LaunchAlways);
  setslider(data->NB_EMAILCACHE, CE->EmailCache);
  setslider(data->NB_AUTOSAVE, CE->AutoSave/60);
  nnset(data->PO_DEFCODESET_WRITE,  MUIA_CodesetPopup_Codeset, CE->DefaultWriteCodeset);
  setcheckmark(data->CH_FIXEDFONT_WRITE, CE->UseFixedFontWrite);
  setcheckmark(data->CH_TEXTSTYLES_WRITE, CE->UseTextStylesWrite);
  setcheckmark(data->CH_TEXTCOLORS_WRITE, CE->UseTextColorsWrite);
  setcheckmark(data->CH_ATTACHMENTREMINDER, CE->AttachmentReminder);

  RETURN(0);
  return 0;
}

///
/// OVERLOAD(MUIM_ConfigPage_GUIToConfig)
OVERLOAD(MUIM_ConfigPage_GUIToConfig)
{
  GETDATA;

  ENTER();

  GetMUIString(CE->NewIntro, data->ST_HELLOTEXT, sizeof(CE->NewIntro));
  GetMUIString(CE->Greetings, data->ST_BYETEXT, sizeof(CE->Greetings));
  CE->WarnSubject       = GetMUICheck  (data->CH_WARNSUBJECT);
  DoMethod(data->NL_ATTACHMENTKEYWORDS, MUIM_AttachmentKeywordList_GetKeywords, CE->AttachmentKeywords, sizeof(CE->AttachmentKeywords));
  CE->EdWrapCol         = GetMUIInteger(data->ST_EDWRAP);
  CE->EdWrapMode        = GetMUICycle  (data->CY_EDWRAP);
  CE->LaunchAlways      = GetMUICheck  (data->CH_LAUNCH);
  CE->EmailCache        = GetMUINumer  (data->NB_EMAILCACHE);
  CE->AutoSave          = GetMUINumer  (data->NB_AUTOSAVE)*60; // in seconds
  strlcpy(CE->DefaultWriteCodeset, (char *)xget(data->PO_DEFCODESET_WRITE, MUIA_CodesetPopup_Codeset), sizeof(CE->DefaultWriteCodeset));
  CE->UseFixedFontWrite  = GetMUICheck(data->CH_FIXEDFONT_WRITE);
  CE->UseTextStylesWrite = GetMUICheck(data->CH_TEXTSTYLES_WRITE);
  CE->UseTextColorsWrite = GetMUICheck(data->CH_TEXTCOLORS_WRITE);
  CE->AttachmentReminder = GetMUICheck(data->CH_ATTACHMENTREMINDER);

  RETURN(0);
  return 0;
}

///

/* Public Methods */
/// DECLARE(UpdateButtons)
DECLARE(UpdateButtons) // Object *sender, ULONG state
{
  GETDATA;
  char *activeKeyword;

  ENTER();

  if(msg->sender == data->CH_ATTACHMENTREMINDER)
  {
    DoMethod(obj, MUIM_MultiSet, MUIA_Disabled, msg->state,
      data->LV_ATTACHMENTKEYWORDS,
      data->ST_ATTACHMENTKEYWORD,
      data->BT_KEYWORDADD,
      NULL);
  }

  DoMethod(data->NL_ATTACHMENTKEYWORDS, MUIM_NList_GetEntry, MUIV_NList_GetEntry_Active, &activeKeyword);
  set(data->ST_ATTACHMENTKEYWORD, MUIA_String_Contents, activeKeyword);
  set(data->BT_KEYWORDREMOVE, MUIA_Disabled, msg->state || activeKeyword == NULL);

  RETURN(0);
  return 0;
}

///
/// DECLARE(AddAttachmentKeyword)
DECLARE(AddAttachmentKeyword)
{
  GETDATA;
  char *newKeyword;
  ENTER();

  newKeyword = (char *)xget(data->ST_ATTACHMENTKEYWORD, MUIA_String_Contents);
  if(IsStrEmpty(newKeyword) == FALSE)
    DoMethod(data->NL_ATTACHMENTKEYWORDS, MUIM_AttachmentKeywordList_AddKeyword, newKeyword);
  else
    set(_win(obj), MUIA_Window_ActiveObject, data->ST_ATTACHMENTKEYWORD);

  RETURN(0);
  return 0;
}

///