/*
   *
   * $Id: about_win.c,v 1.3 1998/06/03 14:02:00 Giambattista_Bloisi Exp $
   *
 */

#define INTERFACE_HOOKS_C

#include "common/extern.h"
#include "common/asyncio.h"
#include "common/Grab_mcc.h"
#include "GiambynetGrabber_rev.h"

#include <workbench/startup.h>
#include <libraries/mui.h>
#include <MUI/NListview_mcc.h>

#include "images.h"

#define NAME_LEN    40

extern const struct BitMapHeader AnnaTeresa_header;
extern const ULONG AnnaTeresa_colors[];
extern const UBYTE AnnaTeresa_body[];


/* WinGrab MUI class */

/// "About text"
static const char *MainTextArray[] =
{
  //"", Spaces
  "\033cThis program is freeware",
  "\033cYou can distribute it under GNU Public License terms",
  "\033c(See Licence section in documentation for more details)",
  "\033C",
  "\033cGiambyNetGrabber uses the \033bMUI\033n object library",
  "\033cMUI is © 1992-99 by Stefan Stuntz",
  "",
  "\033cNList.MCC/NListView.MCC are © 1996-99 by Gilles Masson",
  "\033C",
  "\033c\033bTHANKS TO:",
  "",
  "Translators:",
  "\t· Marco De Vitis (English)",
  "\t· Alen Hadzihasanovic (Bosanski)",
  "",
  "Betatesters:",
  "\t· Alex Pagnoni",
  "\t· Antonio 'AntCer' Cervo",
  "\t· Diego 'Dx0' de Felice",
  "\t· Francesco 'Vanamonde' Ferrante",
  "\t· Gabriele 'Poing' Favrin",
  "\t· Paolo Stefanucci",
  "\t· Piergiorgio 'PJ' Ghezzo",
  "\t· Redaelli Paolo",
  "\033C",
  "",
  NULL
};


///

/// "New"
ULONG
mAboutWin_New (struct IClass *cl, Object * obj, struct opSet *msg)
{
  APTR BT_OK, LV_Text, LI_Text;
  char *userinfo;


  if ((userinfo = (char *) AllocVecPooled (gd.gd_pool, strlen (STRING (ABOUT_Info2, "\033cRegistered to: ")) +
                strlen (STRING (ABOUT_Info3, "\033c\033nSerial number: ")) +
                                           strlen (gd.username) +
                                           strlen (gd.sernum) +
                                           2    // "\n\0"
       )))
    {

      sprintf (userinfo, "%s%s\n%s%s", STRING (ABOUT_Info2, "\033cRegistered to: "), gd.username,
               STRING (ABOUT_Info3, "\033c\033nSerial number: "), gd.sernum);
// *INDENT-OFF*

  obj = (Object *) DoSuperNew(cl, obj,
                              MUIA_Window_Title, STRING (ABOUT_Wintitle, "About Window"),
                              MUIA_Window_ID, MAKE_ID('A','W','I','N'),
                              MUIA_Window_SizeGadget, TRUE,
                              MUIA_Window_NoMenus, TRUE,
                              WindowContents, GroupObject,
                                MUIA_Background, MUII_RequesterBack,

                                Child, VGroup,
                                    MUIA_Background, MUII_BACKGROUND,
                                    MUIA_Frame,      MUIV_Frame_Group,
#ifndef __DEMO__
                                    Child, Label2("\033c\033b\033u" VERS " (" DATE ")"),
#else
                                    Child, Label2("\033c\033b\033u" "GiambyNetGrabber V" __VER__),
#endif
                                  Child, HGroup,
#ifdef __DEMO__
                                      Child, BodychunkObject,
                                        MUIA_FixWidth             , ANNATERESA_WIDTH,
                                        MUIA_FixHeight            , ANNATERESA_HEIGHT,
                                        MUIA_Bitmap_Width         , ANNATERESA_WIDTH,
                                        MUIA_Bitmap_Height        , ANNATERESA_HEIGHT,
                                        MUIA_Bodychunk_Depth      , ANNATERESA_DEPTH,
                                        MUIA_Bodychunk_Body       , AnnaTeresa_body,
                                        MUIA_Bodychunk_Compression, ANNATERESA_COMPRESSION,
                                        MUIA_Bodychunk_Masking    , ANNATERESA_MASKING,
                                        MUIA_Bitmap_SourceColors  , AnnaTeresa_colors,
                                        MUIA_Bitmap_Transparent   , 0,
                                      End,
#else
                                      Child, ImageIFFObject,
                                        MUIA_ImageIFF_Filename, "PROGDIR:images/About.img",
                                        MUIA_ImageIFF_BitMapHeader, &AnnaTeresa_header,
                                        MUIA_ImageIFF_Body, AnnaTeresa_body,
                                        MUIA_ImageIFF_SourceColors, AnnaTeresa_colors,
                                      End,
#endif
                                    Child, VGroup,
                                      Child, Label2(STRING (ABOUT_Info1, "\033c©1997-1999 by \033iGiambattista Bloisi\033n, GiambySoft Int.\nAll Rights Reserved.\n\n\033be-mail\033n: giamby@geocities.com\n\033bHome page\033n: http://www.geocities.com/SiliconValley/Bay/1724/")),
                                      Child, Label2(userinfo),
                                    End,
                                  End,
                                End,

                                  Child, LV_Text = NListviewObject,
                                     MUIA_NListview_Horiz_ScrollBar, MUIV_NListview_HSB_None,
                                     MUIA_NListview_NList, LI_Text = NListObject,
                                       MUIA_NList_AdjustWidth, TRUE,
                                       MUIA_NList_Input, FALSE,
                                       MUIA_NList_DefaultObjectOnClick, TRUE,
                                       MUIA_NList_MultiSelect, MUIV_NList_MultiSelect_None,
                                       MUIA_NList_SourceArray, MainTextArray,
                                       MUIA_NList_AutoVisible, FALSE,
                                       MUIA_NList_Title, FALSE,
                                     End,
                                  End,

                                Child, BT_OK = SimpleButton(STRING (ABOUT_Closewin, "_Close this window")),

                                End,
                                TAG_MORE, msg->ops_AttrList);
// *INDENT-ON*








      if (obj)
        {
          register struct AboutWinData *data = (struct AboutWinData *) INST_DATA (cl, obj);

          //ergo, set data
          //data->self  = obj;
          data->userinfo = userinfo;
          oa->about_win = obj;

          DoMethod ((Object *) BT_OK, MUIM_Notify, MUIA_Pressed, FALSE,
                    obj, 3, MUIM_Set, MUIA_Window_CloseRequest, TRUE);

          set (obj, MUIA_Window_DefaultObject, BT_OK);

          DoMethod (obj, MUIM_Window_SetCycleChain, BT_OK, NULL);

          DoMethod ((Object *) oa->App, OM_ADDMEMBER, obj);
          set (obj, MUIA_Window_Open, TRUE);

          return ((ULONG) obj);

        }

      FreeVecPooled (gd.gd_pool, userinfo);
    }

  //CoerceMethod(cl,obj,OM_DISPOSE);
  error_req (STRING (MSG_OK, "*_OK"), "%s", STRING (ERR_NOMEM, "Out of Memory"));

  return (NULL);
}
///

/// "Dispose"
ULONG
mAboutWin_Dispose (struct IClass * cl, Object * obj, Msg msg)
{
  register struct AboutWinData *data = (struct AboutWinData *) INST_DATA (cl, obj);

  FreeVecPooled (gd.gd_pool, data->userinfo);

  DoMethod ((Object *) oa->App, OM_REMMEMBER, obj);

  return (DoSuperMethodA (cl, obj, msg));
}
///

/// "Set"
ULONG
mAboutWin_Set (struct IClass * cl, Object * obj, Msg msg)
{
  register struct AboutWinData *data = (struct AboutWinData *) INST_DATA (cl, obj);

  struct TagItem *tags, *tag;
  for (tags = ((struct opSet *) msg)->ops_AttrList; (tag = (struct TagItem *) NextTagItem (&tags));)
    {
      switch (tag->ti_Tag)
        {

        case MUIA_Window_CloseRequest:
          if (tag->ti_Data == TRUE)
            {
              oa->about_win = NULL;
              DoMethod ((Object *) oa->App, MUIM_Application_PushMethod, obj, 2, OM_DISPOSE, NULL);

              return (NULL);

            }
          break;

        }
    }

  return (DoSuperMethodA (cl, obj, msg));
}
///

/// "Dispatcher"
SAVEDS (ULONG)
AboutWin_Dispatcher (REG (a0, struct IClass * cl), REG (a2, Object * obj), REG (a1, Msg msg))
{
  switch (msg->MethodID)
    {
    case OM_NEW:
      return ((ULONG) mAboutWin_New (cl, obj, (struct opSet *) msg));

    case OM_DISPOSE:
      return ((ULONG) mAboutWin_Dispose (cl, obj, (Msg) msg));

    case OM_SET:
      return ((ULONG) mAboutWin_Set (cl, obj, (Msg) msg));
    }
  return (DoSuperMethodA (cl, obj, msg));
}
///
