/*
 *  Source generated with GadToolsBox V1.4
 *  which is (c) Copyright 1991,92 Jaba Development
 */

#include <exec/types.h>
#include <intuition/intuition.h>
#include <intuition/classes.h>
#include <intuition/classusr.h>
#include <intuition/imageclass.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <graphics/displayinfo.h>
#include <graphics/gfxbase.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/graphics_protos.h>
#include <clib/utility_protos.h>
#include <string.h>
#include <clib/diskfont_protos.h>

#include "Main.h"
#include "Window.h"

#define HEIGHT_NODATE 25
#define HEIGHT_DATE 40

struct Screen         *Scr = NULL;
APTR                   VisualInfo = NULL;
struct Window         *DClockWnd = NULL;
struct Menu           *DClockMenus = NULL;
struct TextFont       *Font       = NULL;
UWORD                  DClockLeft = 213;
UWORD                  DClockTop = 93;
UWORD                  DClockWidth = 84;
UWORD                  DClockHeight = 25;
UBYTE                 *DClockWdt;

struct TextAttr topaz8 = {
	 ( STRPTR )"topaz.font", 8, 0x00, 0x62 };

struct NewMenu DClockNewMenu[] = {
	 NM_TITLE, (STRPTR)"DClock ", NULL, 0, 0L, NULL,
	 NM_ITEM, (STRPTR)"Display seconds", (STRPTR)"S", CHECKIT|MENUTOGGLE, 0L, NULL,
	 NM_ITEM, (STRPTR)"24h", (STRPTR)"H", CHECKIT|MENUTOGGLE, 0L, NULL,
	 NM_ITEM, (STRPTR)"Date", (STRPTR)"D", CHECKIT|MENUTOGGLE, 0L, NULL,
	 NM_ITEM, (STRPTR)"dd-mm-yyyy", NULL, CHECKIT|MENUTOGGLE, 0L, NULL,
	 NM_ITEM, (STRPTR)"Alarm on", (STRPTR)"1", CHECKIT|MENUTOGGLE, 0L, NULL,
	 NM_ITEM, (STRPTR)"Timer on", (STRPTR)"2", NM_ITEMDISABLED|CHECKIT|MENUTOGGLE, 0L, NULL,
	 NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	 NM_ITEM, (STRPTR)"Set alarm clock...", (STRPTR)"A", 0, 0L, NULL,
	 NM_ITEM, (STRPTR)"Set timer...", (STRPTR)"T", 0, 0L, NULL,
	 NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	 NM_ITEM, (STRPTR)"Alarm command...", (STRPTR)"3", 0, 0L, NULL,
	 NM_ITEM, (STRPTR)"Timer command...", (STRPTR)"4", 0, 0L, NULL,
	 NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	 NM_ITEM, (STRPTR)"Save preferences", (STRPTR)"W", 0, 0L, NULL,
	 NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	 NM_ITEM, (STRPTR)"About...", NULL, 0, 0L, NULL,
	 NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	 NM_ITEM, (STRPTR)"Quit", (STRPTR)"Q", 0, 0L, NULL,
	 NM_TITLE, (STRPTR)"Window ", NULL, 0, 0L, NULL,
	 NM_ITEM, (STRPTR)"Foreground color", NULL, 0, 0L, NULL,
	 NM_SUB, (STRPTR)"0", NULL, CHECKIT|MENUTOGGLE, ~(1 << 4), NULL,
	 NM_SUB, (STRPTR)"1", NULL, CHECKIT|MENUTOGGLE, ~(1 << 4), NULL,
	 NM_SUB, (STRPTR)"2", NULL, CHECKIT|MENUTOGGLE, ~(1 << 4), NULL,
	 NM_SUB, (STRPTR)"3", NULL, CHECKIT|MENUTOGGLE, ~(1 << 4), NULL,
	 NM_ITEM, (STRPTR)"Background color", NULL, 0, 0L, NULL,
	 NM_SUB, (STRPTR)"0", NULL, CHECKIT|MENUTOGGLE, ~(1 << 4), NULL,
	 NM_SUB, (STRPTR)"1", NULL, CHECKIT|MENUTOGGLE, ~(1 << 4), NULL,
	 NM_SUB, (STRPTR)"2", NULL, CHECKIT|MENUTOGGLE, ~(1 << 4), NULL,
	 NM_SUB, (STRPTR)"3", NULL, CHECKIT|MENUTOGGLE, ~(1 << 4), NULL,
	 NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	 NM_ITEM, (STRPTR)"Dragbar", (STRPTR)"B", CHECKIT|MENUTOGGLE, 0L, NULL,
	 NM_ITEM, (STRPTR)"Activate", NULL, CHECKIT|MENUTOGGLE, 0L, NULL,
	 NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	 NM_ITEM, (STRPTR)"Iconify", (STRPTR)"I", 0, 0L, NULL,
	 NM_END, NULL, NULL, 0, 0L, NULL };

int SetupScreen( void )
{

	 if ( ! ( Scr = LockPubScreen((UBYTE * )PubScreenName)))
	 {
		  if (strcmp(PubScreenName, "Workbench"))
			  Scr = LockPubScreen((UBYTE * )"Workbench");
		  if (! Scr)
			  return( 1L );
	 }

	 if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
		  return( 2L );

	 return( 0L );
}

void CloseDownScreen( void )
{
	 if ( VisualInfo ) {
		  FreeVisualInfo( VisualInfo );
		  VisualInfo = NULL;
	 }

	 if ( Scr        ) {
		  UnlockPubScreen( NULL, Scr );
		  Scr = NULL;
	 }
}

int OpenDClockWindow(struct AppPrefs *prefs)
{
	 UWORD                offx = Scr->WBorLeft,offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
	 int                  fg = prefs->foreground;
	 int                  bg = prefs->background;
	 int                  windowflags;
	 int fpen = 0;

	 DClockLeft = prefs->windowX;  // Set top left corner of the window
	 DClockTop = prefs->windowY;
	 DClockHeight = prefs->date ? HEIGHT_DATE : HEIGHT_NODATE;

	 if (prefs->dragbar)
	 {
		 windowflags = WFLG_DRAGBAR|WFLG_SMART_REFRESH;
		 DClockNewMenu[31].nm_Flags = CHECKIT|CHECKED|MENUTOGGLE;
		 DClockWdt = (UBYTE *)"DClock";
	 }
	 else
	 {
		 windowflags = WFLG_SMART_REFRESH;
		 DClockNewMenu[31].nm_Flags = CHECKIT|MENUTOGGLE;
		 DClockWdt = NULL;
	 }
	 if (((struct Library *)IntuitionBase)->lib_Version >= 39)
	 {
		 windowflags |= WFLG_NEWLOOKMENUS;
		 fpen = 1;
	 }

	 if (prefs->activate)
	 {
		 windowflags |= WFLG_ACTIVATE;
		 DClockNewMenu[32].nm_Flags = CHECKIT|CHECKED|MENUTOGGLE;
	 }
	 else
	 {
		 windowflags &= (~WFLG_ACTIVATE);
		 DClockNewMenu[32].nm_Flags = CHECKIT|MENUTOGGLE;
	 }


	 DClockNewMenu[21 + fg].nm_Flags = CHECKIT|CHECKED|MENUTOGGLE;
	 DClockNewMenu[26 + bg].nm_Flags = CHECKIT|CHECKED|MENUTOGGLE;

	 if (prefs->seconds)
		 DClockNewMenu[1].nm_Flags = CHECKIT|CHECKED|MENUTOGGLE;
	 else
		 DClockNewMenu[1].nm_Flags = CHECKIT|MENUTOGGLE;

	 if (prefs->twentyfour)
		 DClockNewMenu[2].nm_Flags = CHECKIT|CHECKED|MENUTOGGLE;
	 else
		 DClockNewMenu[2].nm_Flags = CHECKIT|MENUTOGGLE;

	 if (prefs->date)
		 DClockNewMenu[3].nm_Flags = CHECKIT|CHECKED|MENUTOGGLE;
	 else
		 DClockNewMenu[3].nm_Flags = CHECKIT|MENUTOGGLE;

	 if (prefs->ddmmyy)
		 DClockNewMenu[4].nm_Flags = CHECKIT|CHECKED|MENUTOGGLE;
	 else
		 DClockNewMenu[4].nm_Flags = CHECKIT|MENUTOGGLE;


	 if (prefs->alarm)
		 DClockNewMenu[5].nm_Flags = CHECKIT|CHECKED|MENUTOGGLE;
	 else
		 DClockNewMenu[5].nm_Flags = CHECKIT|MENUTOGGLE;

	 if (prefs->timer)
		 DClockNewMenu[6].nm_Flags = CHECKIT|CHECKED|MENUTOGGLE;
	 else if (prefs->timerval)
		 DClockNewMenu[6].nm_Flags = CHECKIT|MENUTOGGLE;
	 else
		 DClockNewMenu[6].nm_Flags = NM_ITEMDISABLED|CHECKIT|MENUTOGGLE;

	 if ( ! ( DClockMenus = CreateMenus( DClockNewMenu, GTMN_FrontPen, fpen, TAG_DONE )))
		  return( 3L );

	 LayoutMenus( DClockMenus, VisualInfo, TAG_DONE );

	 if ( ! ( DClockWnd = OpenWindowTags( NULL,
						  WA_Left,          DClockLeft,
						  WA_Top,           DClockTop,
						  WA_InnerWidth,    DClockWidth,
						  WA_InnerHeight,   DClockHeight,
						  WA_IDCMP,         IDCMP_MENUPICK|IDCMP_REFRESHWINDOW|IDCMP_CLOSEWINDOW,
						  WA_Flags,         windowflags,
						  WA_Title,         DClockWdt,
						  WA_ScreenTitle,   "DClock V1.6 © 1995",
						  WA_PubScreen,     Scr,
						  TAG_DONE )))
		  return( 4L );

	 SetMenuStrip( DClockWnd, DClockMenus );
	 GT_RefreshWindow( DClockWnd, NULL );


	 return( 0L );
}

void CloseDClockWindow( void )
{
	 if ( DClockMenus      ) {
		  ClearMenuStrip( DClockWnd );
		  FreeMenus( DClockMenus );
		  DClockMenus = NULL;    }

	 if ( DClockWnd        ) {
		  CloseWindow( DClockWnd );
		  DClockWnd = NULL;
	 }
}

