//-------------------------------------------------------------------------------
//
//	FILE: MenuCtl.h
//
//  main programとsubprogramsのHeader File	
//
//-------------------------------------------------------------------------------

#ifndef MENUCTL_H
#define MENUCTL_H

#include "AEEModGen.h"									// Module interface definitions
#include "AEEAppGen.h"									// Applet interface definitions
#include "AEEShell.h"									// Shell interface definitions
#include "AEEHtmlViewer.h"								// HTML Viewer interface definitions
#include "AEEStdLib.h"									// StdLib definitions
#include "AEEMenu.h"
#include "iautolog.h"
#include "kddi_emoji.h"

// size
#define		TEXT_BUF			128						// Stringを格納するBufferサイズ
#define		SIZE_ERRORLOG		0						// エラーログ用に確保する領
#define		MAX_LENGTH			128						// HTMLからパラメータとして受け取るデータの最大値
#define		TEST_FONT			AEE_FONT_NORMAL			// Font値
#define		RECT_SIZE			15						// 画面領域から引くサイズ
#define		BUFSIZE_HTML		8192					//HTMLにセットするデータサイズ  ←サイズは各アプリで調整してください
#define		LOGSIZE				BUFSIZE_HTML			//ログバッファサイズ
#define		BUF					256						//汎用バッファサイズ
#define		ERR_BUF				64						// エラーコード用バッファサイズ
#define		LOG_MAX				10						//最大ログ表示ページ

// color
#define		RGB_RED				MAKE_RGB(255, 0, 0)		// definition of RED color
#define		RGB_GREEN			MAKE_RGB(0, 255, 0)		// definition of GREEN color
#define		RGB_BLUE			MAKE_RGB(0, 0, 255)		// definition of BLUE color
#define		RGB_YELLOW			MAKE_RGB(0, 255, 255)	// definition of YELLOW color
#define		RGB_PURPLE			MAKE_RGB(255, 0, 255)	// definition of PURPLE color
#define		COL_R				8
#define		COL_G				16
#define		COL_B				24
#define		MASK_R				0x0000FF00
#define		MASK_G				0x00FF0000
#define		MASK_B				0xFF000000

// time
#define		TIME_24				24 * 60					// 24時間(分)
#define		DURATION			60						// Duration Time

// id
#define		MENU_ID				0						// メインメニューのID
#define		TEST_ID				50						// Test MenuのID
#define		SORT_ID				70						// Sort_MenuのID
#define		CON_ID				80						// Con_MenuのID
#define		PRO_ID				90						// Property_Menu ID
#define		TEST2_ID			110						// Test Menu ID

// str
#define		AUTOLOG_PATH		"come01"				//	AutoLog出力先ファイル名指定
#define		STR_MNG				"処理中･･･"				// 処理中･･･
#define		LOG_FILE			"log.txt"				//	表示用ログファイル名

#define		NEXT				TRUE					//次へ
#define		BEFORE				FALSE					//前へ

// menu count
#define		CNT_MENUITEM		14
#define		CNT_OTHERITEM		13
#define		CNT_PRO_MENU		7
#define		CNT_PRO_LIST		3
#define		CNT_PRO_ICON		8


enum CltType {											// IMenuCtlのClassID (AEECLSID)
	MENUCTL,
	LISTCTL,
	ICONVIEWCTL
};
enum FontType {											// Font値
	TEXT,
	IMAGE,
	DATA,
	FONT
};

enum ConMenu {
	CON_DEFAULT,
	CON_1,												// EnableCommand
	CON_2,												// active
	
	CON_MAX
};

// アプリ状態
typedef enum {
	IDLE = 0,											// 初期状態
	
	MENU_MAIN = 1,										// メインメニュー
	MENU_CTLSEL,
	MENU_CTL,
	MENU_CTL_PRO,
	MENU_CTL_YN,
	MENU_CTL_SORT,
	MENU_RECT,											// Rect設定サブメニュー(Rect領域指定)
	MENU_DRAW,											// テキスト正常描画確認
	
	LOG_ADDREF_REL = 201,								// AddRef/Relログ
	LOG_SET_GET_PROPERTY,								// Set/GetPropertiesログ
	LOG_LINE,											// GoToLineログ
	LOG_RECT,											// SizeToFit、Set/GetRectログ
	LOG_ACTIVE,											// SetActive、IsActiveログ
	LOG_TEXT,											// IsScrollable、SetText、SetTextEx、Resetログ
	LOG_FONT,											// SetFontログ
	LOG_ALL_DISP,										// ログ表示
	LOG_ALL_CLEAR,										// ログクリア
	
	DRW_ITEM1 = 301,	// 
	DRW_ITEM2,			// 
	DRW_ITEM3,			// 
	DRW_ITEM4,			// 
	DRW_ITEM5,			// 
	DRW_ITEM6,
	DRW_ITEM7,
	DRW_END,			// 
	DRW_PRO,			// 
	DRW_DELI,			// 
	DRW_DELI1,
	DRW_DELA,			// 
	DRW_DELA1,
	DRW_ENA,			// 
	DRW_SETS1,			// 
	DRW_SETS2,			// 
	DRW_SELEX1,
	DRW_SELEX2,
	DRW_SELEX3,
	DRW_MOVE1,
	DRW_MOVE2,
	DRW_MOVE3,
	DRW_MOVE4,
	DRW_MOVE5,
	DRW_SETC1,
	DRW_SETC2,
	DRW_SORT,
	DRW_RESET1,
	DRW_RESET2,
	DRW_PRO_ENABLE_INACTIVE,							// プロパティ設定/取得(ST_ENABLEHIGHT 非アクティブ設定)
	DRW_PRO_SCROLL,										// プロパティ設定/取得(ST_NOSCROLL)
	DRW_LINE1,											// ライン移動(1設定)
	DRW_LINE0,											// ライン移動(0設定)
	DRW_LINE_1,											// ライン移動(-1設定)
	DRW_LINEOVER,										// ライン移動(表示テキストを超過した位置)
	DRW_RECT,											// Rect設定(指定値)(Set/GetRect)
	DRW_RECT_MIN,										// Rect設定(幅、高さ最小試験)	(Set/GetRect)
	DRW_RECT_AUTO,										// Rect設定(自動化)(SizeToFit)		
	DRW_ACTIVE,											// アクティブ/非アクティブ切替(SetActive)
	DRW_TEXT_HALF,										// テキスト表示(半角)
	DRW_TEXT_ALL,										// テキスト表示(全角)
	DRW_TEXT_PICTURE,									// テキスト表示(絵文字)
	DRW_TEXT_ADD_CHANGE,								// テキスト表示(テキスト追加/置換)
	DRW_TEXT_RESET,										// テキスト表示(IStatic初期化試験)(Reset)
	DRW_FONT1,											// 全フォント表示(0〜2)
	DRW_FONT2,											// 全フォント表示(3〜5)
	DRW_FONT3,											// 全フォント表示(6〜8)
	DRW_FONT4,											// 全フォント表示(9〜10)
	DRW_DISP,											// 文字列表示

	APL_STATE_CNT_MAX									// 最大値
} enAplState;

// ------ 構造体の宣言 ---------------------------------------- //
typedef struct tagAutoLogChain AutoLogChain;
typedef struct tagAutoLogChain{

	char						*pcLogPtr;			//文字列ポインタ
	int							nCharLen;			//文字列長
	AutoLogChain				*pBeforePtr;		//前のページ情報構造体のアドレス
	AutoLogChain				*pNextPtr;			//次のページ情報構造体のアドレス

} AutoLogChain;
typedef struct _MyApp
{
	AEEApplet			app;						// AEEApplet
	AEERect				arect;						// 表示用HTML作業領域
	IHtmlViewer			*m_pihv;					// 描画用IHTMLVIEWERインスタンス
	IMenuCtl			*pimc;						// IMenuCtlインスタンス
	enum CltType		ctype;						// IMenuCtlインスタンスのClassID
	enum FontType		ftype;						// Font値
	int					ncon;						// Con_Menuを使用する関数の切り分けフラグ
	int					npro;						// Property_Menuを使用する関数の切り分けフラグ
	
	boolean				bMyPage;
	char				m_szHtmlBuf[BUFSIZE_HTML] ;
	char				m_szHtmlBufWk[BUFSIZE_HTML] ;
	enAplState			apl_state;					// アプリ状態
	//	AUTOLOG関連
	IAutoLog			*m_piaLog;					//IAutoLog
	IFileMgr			*m_pifm;					//IFileMgr
	IFile				*m_pif_log;					//IFile(ログ用)
	char				*m_pcReadBuf;				//ログファイルのデータ
	int					m_nLogCount;				//ログの数
	int					m_nDisplayLogCount;			//画面表示ログの数
	boolean				m_bLogDispFlg;				//LOG表示中Flg
	
	AutoLogChain		*m_AutoLogChain;			//Log表示用先頭
	AutoLogChain		*m_AutoLogDispNow;			//Log表示用現在表示中

} MyApp;

// Function Prototypes --- my_MenuCtl.c
int		AEEClsCreateInstance( AEECLSID ClsId,IShell *pIShell,IModule *po, void **ppObj );
boolean	initMyApp( MyApp *pApp );
void	myAppCleanup( MyApp *pApp );
uint32	ReleaseI( void **ppif );
void	MainHtml( MyApp *pApp );
void	ShowMainMenu( MyApp *pApp );
void	HtmlNotify_MENU( MyApp *pApp, HViewNotify *phvn, AEEEvent eCode, uint16 wParam, uint32 dwParam );
boolean	InitAutoLog( MyApp  *pApp );
boolean	EndAutoLog( MyApp  *pApp );
void	LogDisp( MyApp *pApp );
void	LogClear( MyApp *pApp );
void	LogDispChange( MyApp *pApp, boolean next );
boolean	LogOutMake(MyApp *pApp, boolean bDispFlag, boolean bTimeFlg, const char *pszFormat, ... );


// Function Prototypes --- HandleEvent.c
boolean	myHandleEvent( IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam );
boolean	on_KeyWork( MyApp *pApp, uint16 wParam, uint32 dwParam );
boolean	on_Command( MyApp *pApp, uint16 wParam, uint32 dwParam );


// Function Prototypes --- main_menu.c
boolean	CreateMenuCtl( MyApp *pApp );
void make_MenuItem( MyApp *pApp );
void make_OtherItem( MyApp *pApp );


// Function Prototypes --- menu.c
void	Property_Menu( MyApp *pApp );
boolean	Test_Menu( MyApp *pApp, uint32 flag );
void	Calendar_Menu( MyApp *pApp, uint32 flag );
void	Con_Menu( MyApp *pApp );
void	Sort_Menu( MyApp *pApp );



// Function Prototypes --- testcode.c
void	SetItem_Test1( MyApp *pApp );
void	SetItem_Test2( MyApp *pApp );
void	SetItem_Test3( MyApp *pApp );
void	SetItem_Test4( MyApp *pApp );
void	SetItem_Test5( MyApp *pApp );
void	SetItem_Test6( MyApp *pApp );
void	SetItem_Test7( MyApp *pApp );
void	Active_TEST( MyApp *pApp, boolean Flag );
void	Move_Test( MyApp *pApp );
void	Move_Test1( MyApp *pApp ,boolean Flag);
boolean test_MoveItem( MyApp *pApp, uint16 unId, int nDir );
void	GetCDI_Test( MyApp *pApp );
void	SetColors_Test(MyApp *pApp);
int		CustomSort( void *pUser, uint32 dwData1, uint32 dwData2 );
boolean	menuMain_item1( MyApp* pApp );
boolean	menuMain_item9( MyApp* pApp );
boolean	menuMain_item10( MyApp* pApp );
boolean	test_Add_Rele( MyApp* pApp );
boolean test_Addref( MyApp* pApp, IMenuCtl *pIm );
boolean test_Release( MyApp* pApp, IMenuCtl *pIm );
void	LogDispUpdate( MyApp*  pApp );
boolean	MoveState( MyApp* pApp, enAplState apiSt );
void	Dispclsid( MyApp* pApp );
void	test_Reset( MyApp *pApp );
boolean	test_SetTitle( MyApp *pApp, const char* pszResFile, uint16 wResID, char* pText );
void	test_SetRect( MyApp *pApp, const AEERect *pARect );
void	test_GetRect( MyApp *pApp );
boolean	test_AddItem( MyApp *pApp, const char* pszResFile, uint16 wResID, uint16 nItemID, char* pText, uint32 lData );
boolean	test_AddItemEx( MyApp *pApp, CtlAddItem *pCai );
boolean	test_GetItem( MyApp *pApp, uint16 nIndexID );
boolean	test_Redraw( MyApp *pApp );
boolean	test_SetItemTXT( MyApp *pApp, uint16 Index, char *pszBuf );
boolean	test_SetItemDATA( MyApp *pApp, uint16 Index );
boolean	test_SetItemIMG( MyApp *pApp, uint16 Index );
boolean	test_SetItemFNT( MyApp *pApp, uint16 Index );
boolean	test_SetItem( MyApp *pApp, uint16 Index, uint16 uFlag, CtlAddItem *pCai );
boolean	test_SetActive( MyApp *pApp, boolean bActive );
void	disp_mng( MyApp *pApp );
boolean	test_SetProperties( MyApp *pApp, uint32 flag );
boolean	test_GetProperties( MyApp *pApp, uint32 *punProp );
void	SetDelItem_Test1( MyApp *pApp );
void	SetDelItem_Test2( MyApp *pApp );
boolean	test_DelItem( MyApp *pApp, uint16 nItemID );
void	SetDelAll_Test1( MyApp *pApp );
void	SetDelAll_Test2( MyApp *pApp );
boolean	test_DelAll( MyApp *pApp );
boolean	test_SetItemTime( MyApp *pApp, CtlAddItem *pCai, uint16 unStartTime, uint16 unDuration, uint32 unFlag );
boolean	test_GetItemTime( MyApp *pApp, uint16 nIndex );
boolean	set_ProMenuMENU( MyApp *pApp, CtlAddItem *pCai );
boolean	set_ProMenuLIST( MyApp *pApp, CtlAddItem *pCai );
boolean	set_ProMenuICON( MyApp *pApp, CtlAddItem *pCai );
boolean	test_SetSelEx1( MyApp *pApp, uint16 unIndex );
boolean	test_SetSelEx2( MyApp *pApp, uint16 unIndex );
boolean	test_SetSelEx( MyApp *pApp, uint16 unId, boolean bSelected );
boolean	Disp_NoArraws( MyApp *pApp );
void	EnableCommand_Test( MyApp *pApp, boolean bFlg );
boolean	test_EnableCommand( MyApp *pApp, boolean bFlg );
boolean	test_Enum( MyApp *pApp );
boolean	test_EnumInit( MyApp *pApp );
boolean	test_EnumNextSel( MyApp *pApp );
boolean	test_GetItemCount( MyApp *pApp, int *pCnt );
boolean	test_GetItemData( MyApp *pApp, uint16 unIndex );
boolean	test_GetItemID( MyApp *pApp, uint16 unIndex );
boolean	test_SetFocus( MyApp *pApp, uint16 unIndex );
boolean	test_GetFocus( MyApp *pApp );
boolean	test_SetItemText( MyApp *pApp, uint16 unIndex, const char* pszResFile, uint16 wResID, char *pBuf );
boolean	test_SetStyle( MyApp *pApp, AEEItemStyle *paisNormal, AEEItemStyle *paisSel );
boolean	test_GetStyle( MyApp *pApp );
boolean	test_SetColor( MyApp *pApp, AEEMenuColors *pamc );
boolean	test_GetColor( MyApp *pApp );
void	Reset_Test( MyApp *pApp );
void	Sort_Test( MyApp *pApp, AEEMenuSortType aSortType );
void	set_SortType( AEEMenuSortType aSortType, char *pBuf );
boolean	test_IsActive( MyApp *pApp );
void	SetSel_Test1( MyApp *pApp );
void	SetSel_Test2( MyApp *pApp );
void	test_makeSetSel( MyApp *pApp, boolean bFlg );
boolean	test_SetSel( MyApp *pApp, uint16 unIndex );
boolean	test_GetSel( MyApp *pApp );
void	SortCustom_Test( MyApp *pApp );
boolean	test_SortCustom( MyApp *pApp );
void	SetProp_Test_NoCenter( MyApp *pApp );
boolean	test_HandleEvent( MyApp *pApp, AEEEvent eCode, uint16 wParam, uint32 dwParam );


#endif