#include <CrashTickPrefs.h>

struct Hook PathsHelpHook = { {NULL}, HelpHookEntry,NULL,(APTR)HELP_PATHS};

struct path
{
   uchar *editstr;
   uchar *realstr;
   ulong maxlen;
   ulong localeid;
   short dir;
};

struct path paths[] = { { config2.cfg_Inbound,    config.cfg_Inbound,    39, PREFS_PATHS_INBOUND,   TRUE  },
                        { config2.cfg_Outbound,   config.cfg_Outbound,   39, PREFS_PATHS_OUTBOUND,  TRUE  },
                        { config2.cfg_Tickdir,    config.cfg_Tickdir,    39, PREFS_PATHS_TICKDIR,   TRUE  },
                        { config2.cfg_Filebase,   config.cfg_Filebase,   39, PREFS_PATHS_FILEBASE,  TRUE  },
                        { config2.cfg_BadTick,    config.cfg_BadTick,    39, PREFS_PATHS_BADTICK,   TRUE  },
                        { config2.cfg_AutoAddDir, config.cfg_AutoAddDir, 39, PREFS_PATHS_AUTOADD,   TRUE  },
                        { config2.cfg_StatsFile,  config.cfg_StatsFile,  39, PREFS_PATHS_STATSFILE, FALSE },
                        { config2.cfg_RaidHelp,   config.cfg_RaidHelp,   39, PREFS_PATHS_RAIDHELP,  FALSE } };

#define PATHS_NUM 8

void PartPaths(void)
{
   struct IntuiMessage *IntuiMessage;
   APTR iaddress;
   ULONG class,code,qualifier,c,gid;

   for(c=0;c<PATHS_NUM;c++)
      strcpy(paths[c].editstr,paths[c].realstr);

   parthandle = LT_CreateHandleTags(scr,LH_EditHook,     &StrEditHookNext,
                                        LH_RawKeyFilter, FALSE,
                                        LH_LocaleHook,   &LocaleHook,
                                        TAG_DONE);

   if(!parthandle)
      return;

   LT_New(parthandle,
      LA_Type, VERTICAL_KIND,
      TAG_DONE);

      LT_New(parthandle,
         LA_Type,      VERTICAL_KIND,
         LA_LabelID,   PREFS_PATHS_PATHS,
         TAG_DONE);

         for(c=0;c<PATHS_NUM;c++)
            LT_New(parthandle,
               LA_Type,      STRING_KIND,
               LA_LabelID,   paths[c].localeid,
               LA_Chars,     40,
               GTST_MaxChars,paths[c].maxlen,
               LA_STRPTR,    paths[c].editstr,
               LA_ID,        c+1,
               LAST_Picker,  TRUE,
               TAG_DONE);

      LT_EndGroup(parthandle);

   LT_EndGroup(parthandle);

   partwin=LT_Build(parthandle,LAWN_IDCMP,    IDCMP_CLOSEWINDOW|IDCMP_RAWKEY,
                               LAWN_Parent,   mainwin,
                               LAWN_HelpHook, &PathsHelpHook,
                               LAWN_Title,    getString(PREFS_BUTTON_PATHS),
                               WA_Flags,      WFLG_ACTIVATE|WFLG_CLOSEGADGET|WFLG_DEPTHGADGET|WFLG_DRAGBAR|WFLG_NEWLOOKMENUS,
                               TAG_END);

   if(!partwin)
   {
      LT_DeleteHandle(parthandle);
      DisplayBeep(NULL);
      return;
   }

   for(;;)
   {
      while(IntuiMessage=(struct IntuiMessage *)LT_GetIMsg(parthandle))
      {
         class=IntuiMessage->Class;
         code=IntuiMessage->Code;
         iaddress=IntuiMessage->IAddress;
         qualifier=IntuiMessage->Qualifier;

         LT_ReplyIMsg(IntuiMessage);

         switch(class)
         {
            case IDCMP_RAWKEY:        if(code == RAWKEY_TAB) LT_Activate(parthandle,1);
                                      break;

            case IDCMP_IDCMPUPDATE:   gid=((struct Gadget *)iaddress)->GadgetID;

                                      if(gid >= 1 && gid<=PATHS_NUM)
                                      {
                                         LT_UpdateStrings(parthandle);

                                         if(paths[gid-1].dir)
                                            OpenReqDir(paths[gid-1].editstr,paths[gid-1].maxlen,getString(PREFS_REQ_SELECT_DIR),partwin);

                                         else
                                            OpenReq(paths[gid-1].editstr,paths[gid-1].maxlen,getString(PREFS_REQ_SELECT_FILE),partwin,FALSE);

                                         LT_SetAttributes(parthandle,gid,GTST_String,paths[gid-1].editstr,TAG_END);
                                      }
                                      break;

            case IDCMP_CLOSEWINDOW:   LT_DeleteHandle(parthandle);
                                      parthandle=NULL;

                                      for(c=0;c<PATHS_NUM;c++)
                                         strcmpcpy(paths[c].realstr,paths[c].editstr);

                                      return;
         }
      }
      WaitPort(partwin->UserPort);
   }
}
