/*
** Amster - Panel
** Copyright © 1999-2000 by Gürer Özen
**
** Maintained by Jacob Laursen <laursen@myself.com>
**
** 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
*/

#include "include/config.h"

#include "include/gui.h"
#include "include/panel.h"
#include "include/download.h"
#include "include/info.h"
#include "include/share.h"
#include "include/msg.h"
#include "include/chat.h"
#include "include/about.h"
#include "include/prefs.h"
#include "pix/logo.h"
#include "pix/infoicon.h"
#include "pix/msgicon.h"
#include "pix/chaticon.h"
#include "pix/dlicon.h"
#include "pix/shareicon.h"
#include "pix/prficon.h"
#include "amster_Cat.h"

ULONG panel_new(struct IClass *cl, Object *obj, struct opSet *msg);
extern struct Hook handleHook;


MUIF panel_dispatch(REG(a0) struct IClass *cl,REG(a2) Object *obj,REG(a1) Msg msg)
{
	u_long tmp;
	struct paneldata *data;

	switch(msg->MethodID) {
		case OM_NEW:
			return(panel_new(cl,obj,(APTR)msg));
		case PANEL_OPENABOUT:
			data = INST_DATA(cl, obj);
			set(data->logo,MUIA_Selected,FALSE);
			set(gui->awin,MUIA_Window_Open,TRUE);
			return NULL;
		case PANEL_OPENDEBUG:
			data = INST_DATA(cl, obj);
			GetAttr(MUIA_Selected,data->infoicon,&tmp);
			if(tmp!=TRUE) set(data->infoicon,MUIA_Selected,TRUE);
			set(gui->iwin,MUIA_Window_Open,TRUE);
			return NULL;
		case PANEL_CLOSEDEBUG:
			data = INST_DATA(cl, obj);
			GetAttr(MUIA_Selected,data->infoicon,&tmp);
			if(tmp!=FALSE) set(data->infoicon,MUIA_Selected,FALSE);
			set(gui->iwin,MUIA_Window_Open,FALSE);
			return NULL;
		case PANEL_OPENDL:
			data = INST_DATA(cl, obj);
			GetAttr(MUIA_Selected,data->dlicon,&tmp);
			if(tmp!=TRUE) set(data->dlicon,MUIA_Selected,TRUE);
			set(gui->dwin,MUIA_Window_Open,TRUE);
			return NULL;
		case PANEL_CLOSEDL:
			data = INST_DATA(cl, obj);
			GetAttr(MUIA_Selected,data->dlicon,&tmp);
			if(tmp!=FALSE) set(data->dlicon,MUIA_Selected,FALSE);
			set(gui->dwin,MUIA_Window_Open,FALSE);
			return NULL;
		case PANEL_OPENSHARE:
			data = INST_DATA(cl, obj);
			GetAttr(MUIA_Selected,data->shareicon,&tmp);
			if(tmp!=TRUE) set(data->shareicon,MUIA_Selected,TRUE);
			DoMethod(gui->shwin,SHARE_OPEN);
			return NULL;
		case PANEL_CLOSESHARE:
			data = INST_DATA(cl, obj);
			GetAttr(MUIA_Selected,data->shareicon,&tmp);
			if(tmp!=FALSE) set(data->shareicon,MUIA_Selected,FALSE);
			DoMethod(gui->shwin,SHARE_CLOSE);
			return NULL;
		case PANEL_OPENPRF:
			data = INST_DATA(cl, obj);
			GetAttr(MUIA_Selected,data->prficon,&tmp);
			if(tmp!=TRUE) set(data->prficon,MUIA_Selected,TRUE);
			DoMethod(gui->swin,PRF_OPEN);
			return NULL;
		case PANEL_CLOSEPRF:
			data = INST_DATA(cl, obj);
			GetAttr(MUIA_Selected,data->prficon,&tmp);
			if (tmp!=FALSE) set(data->prficon,MUIA_Selected,FALSE);
			DoMethod(gui->swin, (ULONG)(((muimsg)msg)->arg1));
			return NULL;
		case PANEL_OPENMSG:
			DoMethod(gui->mwin, MSG_OPEN);
			return NULL;
		case PANEL_NEWCHAT:
			{
			Object *win;
			win = NewObject(gui->chat_mcc->mcc_Class,NULL,TAG_DONE);
			if (!win) return(0);
			DoMethod(gui->app, OM_ADDMEMBER, win);
			set(win, MUIA_Window_Open, TRUE);
			return NULL;
			}
		case PANEL_DISPOSECHAT:
			{
			Object *win;
			win = (Object *)(((muimsg)msg)->arg1);
			if (!win) return(0);
			set(win, MUIA_Window_Open, FALSE);
			DoMethod(gui->app, OM_REMMEMBER, win);
			MUI_DisposeObject(win);
			return NULL;
			}

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


ULONG panel_new(struct IClass *cl, Object *obj, struct opSet *msg)
{
	struct paneldata *data;
	Object *logo,*infoicon,*msgicon,*chaticon,*dlicon,*shareicon,*prficon;

	if (obj = (Object *)DoSuperNew(cl,obj,
		Child, VGroup,
			Child, logo = BodychunkObject,
				MUIA_FixWidth, LOGO_WIDTH,
				MUIA_FixHeight, LOGO_HEIGHT,
				MUIA_Bitmap_Width, LOGO_WIDTH,
				MUIA_Bitmap_Height, LOGO_HEIGHT,
				MUIA_Bodychunk_Depth, LOGO_DEPTH,
				MUIA_Bodychunk_Body, (ULONG *)logo_body,
				MUIA_Bodychunk_Compression, LOGO_COMPRESSION,
				MUIA_Bodychunk_Masking, LOGO_MASKING,
				MUIA_Bitmap_SourceColors, (ULONG *)logo_colors,
				MUIA_Bitmap_Transparent, 0,
				MUIA_InputMode, MUIV_InputMode_Immediate,
				MUIA_ShowSelState, FALSE,
			End,
			Child, VSpace(0),
			Child, infoicon = BodychunkObject,
				ImageButtonFrame,
				MUIA_Background, MUII_ButtonBack,
				MUIA_FixWidth, INFOICON_WIDTH,
				MUIA_FixHeight, INFOICON_HEIGHT,
				MUIA_Bitmap_Width, INFOICON_WIDTH,
				MUIA_Bitmap_Height, INFOICON_HEIGHT,
				MUIA_Bodychunk_Depth, INFOICON_DEPTH,
				MUIA_Bodychunk_Body, (ULONG *)infoicon_body,
				MUIA_Bodychunk_Compression, INFOICON_COMPRESSION,
				MUIA_Bodychunk_Masking, INFOICON_MASKING,
				MUIA_Bitmap_SourceColors, (ULONG *)infoicon_colors,
				MUIA_Bitmap_Transparent, 0,
				MUIA_InputMode, MUIV_InputMode_Toggle,
			End,
			Child, VSpace(0),
			Child, msgicon = BodychunkObject,
				ImageButtonFrame,
				MUIA_Background, MUII_ButtonBack,
				MUIA_FixWidth, MSGICON_WIDTH,
				MUIA_FixHeight, MSGICON_HEIGHT,
				MUIA_Bitmap_Width, MSGICON_WIDTH,
				MUIA_Bitmap_Height, MSGICON_HEIGHT,
				MUIA_Bodychunk_Depth, MSGICON_DEPTH,
				MUIA_Bodychunk_Body, (ULONG *)msgicon_body,
				MUIA_Bodychunk_Compression, MSGICON_COMPRESSION,
				MUIA_Bodychunk_Masking, MSGICON_MASKING,
				MUIA_Bitmap_SourceColors, (ULONG *)msgicon_colors,
				MUIA_Bitmap_Transparent, 0,
				MUIA_InputMode, MUIV_InputMode_RelVerify,
			End,
			Child, chaticon = BodychunkObject,
				ImageButtonFrame,
				MUIA_Background, MUII_ButtonBack,
				MUIA_FixWidth, CHATICON_WIDTH,
				MUIA_FixHeight, CHATICON_HEIGHT,
				MUIA_Bitmap_Width, CHATICON_WIDTH,
				MUIA_Bitmap_Height, CHATICON_HEIGHT,
				MUIA_Bodychunk_Depth, CHATICON_DEPTH,
				MUIA_Bodychunk_Body, (ULONG *)chaticon_body,
				MUIA_Bodychunk_Compression, CHATICON_COMPRESSION,
				MUIA_Bodychunk_Masking, CHATICON_MASKING,
				MUIA_Bitmap_SourceColors, (ULONG *)chaticon_colors,
				MUIA_Bitmap_Transparent, 0,
				MUIA_InputMode, MUIV_InputMode_RelVerify,
			End,
			Child, VSpace(0),
			Child, dlicon = BodychunkObject,
				ImageButtonFrame,
				MUIA_Background, MUII_ButtonBack,
				MUIA_FixWidth, DLICON_WIDTH,
				MUIA_FixHeight, DLICON_HEIGHT,
				MUIA_Bitmap_Width, DLICON_WIDTH,
				MUIA_Bitmap_Height, DLICON_HEIGHT,
				MUIA_Bodychunk_Depth, DLICON_DEPTH,
				MUIA_Bodychunk_Body, (ULONG *)dlicon_body,
				MUIA_Bodychunk_Compression, DLICON_COMPRESSION,
				MUIA_Bodychunk_Masking, DLICON_MASKING,
				MUIA_Bitmap_SourceColors, (ULONG *)dlicon_colors,
				MUIA_Bitmap_Transparent, 0,
				MUIA_InputMode, MUIV_InputMode_Toggle,
			End,
			Child, shareicon = BodychunkObject,
				ImageButtonFrame,
				MUIA_Background, MUII_ButtonBack,
				MUIA_FixWidth, SHAREICON_WIDTH,
				MUIA_FixHeight, SHAREICON_HEIGHT,
				MUIA_Bitmap_Width, SHAREICON_WIDTH,
				MUIA_Bitmap_Height, SHAREICON_HEIGHT,
				MUIA_Bodychunk_Depth, SHAREICON_DEPTH,
				MUIA_Bodychunk_Body, (ULONG *)shareicon_body,
				MUIA_Bodychunk_Compression, SHAREICON_COMPRESSION,
				MUIA_Bodychunk_Masking, SHAREICON_MASKING,
				MUIA_Bitmap_SourceColors, (ULONG *)shareicon_colors,
				MUIA_Bitmap_Transparent, 0,
				MUIA_InputMode, MUIV_InputMode_Toggle,
			End,
			Child, VSpace(0),
			Child, prficon = BodychunkObject,
				ImageButtonFrame,
				MUIA_Background, MUII_ButtonBack,
				MUIA_FixWidth, PRFICON_WIDTH,
				MUIA_FixHeight, PRFICON_HEIGHT,
				MUIA_Bitmap_Width, PRFICON_WIDTH,
				MUIA_Bitmap_Height, PRFICON_HEIGHT,
				MUIA_Bodychunk_Depth, PRFICON_DEPTH,
				MUIA_Bodychunk_Body, (ULONG *)prficon_body,
				MUIA_Bodychunk_Compression, PRFICON_COMPRESSION,
				MUIA_Bodychunk_Masking, PRFICON_MASKING,
				MUIA_Bitmap_SourceColors, (ULONG *)prficon_colors,
				MUIA_Bitmap_Transparent, 0,
				MUIA_InputMode, MUIV_InputMode_Toggle,
			End,
			Child, VSpace(0),
		End,
		TAG_MORE, msg->ops_AttrList))
	{
		data = INST_DATA(cl,obj);
		data->logo = logo;
		data->infoicon = infoicon;
		data->dlicon = dlicon;
		data->shareicon = shareicon;
		data->prficon = prficon;

		DoMethod(logo,MUIM_Notify,MUIA_Selected,TRUE,obj,1,PANEL_OPENABOUT);

		DoMethod(infoicon,MUIM_Notify,MUIA_Selected,TRUE,obj,1,PANEL_OPENDEBUG);
		DoMethod(infoicon,MUIM_Notify,MUIA_Selected,FALSE,obj,1,PANEL_CLOSEDEBUG);
		DoMethod(dlicon,MUIM_Notify,MUIA_Selected,TRUE,obj,1,PANEL_OPENDL);
		DoMethod(dlicon,MUIM_Notify,MUIA_Selected,FALSE,obj,1,PANEL_CLOSEDL);
		DoMethod(shareicon,MUIM_Notify,MUIA_Selected,TRUE,obj,1,PANEL_OPENSHARE);
		DoMethod(shareicon,MUIM_Notify,MUIA_Selected,FALSE,obj,1,PANEL_CLOSESHARE);
		DoMethod(prficon,MUIM_Notify,MUIA_Selected,TRUE,obj,1,PANEL_OPENPRF);
		DoMethod(prficon,MUIM_Notify,MUIA_Selected,FALSE,obj,2,PANEL_CLOSEPRF,PRF_CANCEL);

		DoMethod(msgicon,MUIM_Notify,MUIA_Pressed,FALSE,obj,1,PANEL_OPENMSG);
		DoMethod(chaticon,MUIM_Notify,MUIA_Pressed,FALSE,obj,1,PANEL_NEWCHAT);

		return((ULONG)obj);
	}
	return(0);
}
