/*
 * MODULE: CATEGORY.C
 *
 *    Subroutines for CATEGORY (CAT).
 *
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

#define MODULE_CATEGORY
#include "common.h"


/*
 *             -------======= ROUTINES =======-------
 *
 * BOOL fnConstructCatWindow( void )
 * BOOL fnInitCatWindow( void )
 * BOOL fnDestructCatWindow( BOOL fOKorCANCEL )
 *
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
// ***********************************************************************
//
//    CATEGORY WINDOW
// struct CategoryWindow {
//    APTR  LIS_Categories,
//          STR_Category,
//          BUT_Select,
//          BUT_Cancel;
// } CAT;
//
// ***********************************************************************
//
BOOL fnConstructCatWindow( void )
{
   MG.WIN_Category = WindowObject,
      MUIA_Window_ID, MAKE_ID('C','A','T','E'),
      MUIA_Window_Title, "Category",
      MUIA_Window_Menu, MUIV_Window_Menu_NoMenu,
      WindowContents, VGroup,
         Child, VGroup,
            Child, CAT.LIS_Categories = ListviewObject,
               MUIA_Listview_Input, TRUE,
               MUIA_Listview_List, ListObject,
                  InputListFrame,
                  MUIA_List_ConstructHook, MUIV_List_ConstructHook_String,
                  MUIA_List_DestructHook,  MUIV_List_DestructHook_String,
                  End,
               End,
            Child, CAT.STR_Category = TextObject, TextFrame,
               MUIA_Background, MUII_TextBack,
//            Child, CAT.STR_Category = StringObject, StringFrame,
//               MUIA_String_AttachedList, CAT.LIS_Categories,
//               MUIA_String_Format, MUIV_String_Format_Left,
//               MUIA_String_MaxLen, 15+1,
               End,
            Child, HGroup,
               Child, CAT.BUT_Select = KeyButton("Select",'s'),
               Child, HSpace(0),
               Child, CAT.BUT_Cancel = SimpleButton("Cancel"),
               End,
            End,
         End,
      End;

   // window failed?
   if ( !MG.WIN_Category )
   {
      return( FAILURE );
   }
   else
   {
      // make gadget connections
      DoMethod( MG.WIN_Category, MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
                MG.App, 2, MUIM_Application_ReturnID, ID_WIN_CLOSE_CATEGORY );

      DoMethod( CAT.BUT_Select, MUIM_Notify, MUIA_Pressed, FALSE,
                MG.App, 2, MUIM_Application_ReturnID, ID_BUT_CATSELECT );
      DoMethod( CAT.BUT_Cancel, MUIM_Notify, MUIA_Pressed, FALSE,
                MG.App, 2, MUIM_Application_ReturnID, ID_BUT_CATCANCEL );
      DoMethod( CAT.STR_Category, MUIM_Notify, MUIA_String_Accept, TRUE,
                MG.WIN_Category, 3, MUIM_Set, MUIA_Window_ActiveObject, CAT.BUT_Select );

      DoMethod( CAT.LIS_Categories, MUIM_Notify, MUIA_Listview_DoubleClick, TRUE,
                MG.App, 2, MUIM_Application_ReturnID, ID_LIS_CATCATEGORIES );
      DoMethod( CAT.LIS_Categories, MUIM_Notify, MUIA_List_Active, MUIV_EveryTime,
                MG.App, 2, MUIM_Application_ReturnID, ID_LIS_CATLISTCHANGE );

      // set tab cycle chain
      DoMethod( MG.WIN_Category, MUIM_Window_SetCycleChain,
                CAT.LIS_Categories,
//                CAT.STR_Category,
                CAT.BUT_Select,
                CAT.BUT_Cancel,
                NULL );

      set( MG.WIN_Category, MUIA_Window_DefaultObject, CAT.LIS_Categories );

      // add window to Application object
      DoMethod( MG.App, OM_ADDMEMBER, MG.WIN_Category );

      return( SUCCESS );
   }
}

BOOL fnInitCatWindow( void )
{
   set( CAT.LIS_Categories, MUIA_List_Active, 0 );

   set( MG.WIN_Add, MUIA_Window_Sleep, TRUE );
   set( MG.WIN_Category, MUIA_Window_Open, TRUE );

   return( SUCCESS );
}

BOOL fnDestructCatWindow( BOOL fOKorCANCEL )
{
   BOOL  rc = SUCCESS;
   char *psz;


   switch( fOKorCANCEL )
   {
      case ENDWINDOW_OK:
         DoMethod( CAT.LIS_Categories, MUIM_List_GetEntry,
                   MUIV_List_GetEntry_Active, &psz );
         if ( *psz )
         {
            set( ADD.TXT_CurrentCategory, MUIA_Text_Contents, psz );
            set( FIND.POP_Category, MUIA_Text_Contents, psz );
         }
         break;
      case ENDWINDOW_CANCEL:
         break;
   }

   set( MG.WIN_Category, MUIA_Window_Open, FALSE );
   set( MG.WIN_Add, MUIA_Window_Sleep, FALSE );

   set( MG.WIN_Add, MUIA_Window_ActiveObject, ADD.STR_Source );

   return( rc );
}
