#ifndef TTPMENU_H
#define TTPMENU_H
#include "Forcelib.h"
#include <tchar.h>
/* ========================================================================
	Project  Name		: TeraTerm Menu
	Outline				: TeraTerm Menu Header
	Version				: 0.94
	Create				: 1998-11-22(Sun)
	Update				: 2001-11-01(Thu)
    Reference			: Copyright (C) S.Hayakawa 1997-2001
	======================================================================== */

#include	<windows.h>
// 各種定数
#define		WM_TMENU_NOTIFY			(WM_USER + 101)
#define		WM_MENUOPEN				(WM_USER + 102)
#define		ID_NOENTRY				49999
#define		ID_MENU_MIN				50000
#define		MAXJOBNUM				1024
#define		ICONSIZE_LARGE			32
#define		ICONSIZE_SMALL			16
#define		ICONSPACE_LARGE			40
#define		ICONSPACE_SMALL			24
#define		LISTBOX_HEIGHT			18
#define		LISTBOX_WIDTH			20
#define		TERATERM				_T("ttermpro.exe")
//#define		TTSSH					_T("ttssh.exe")
// ttssh.exeはUTF-8 TeraTermでは不要。TeraTerm本体と同じでよい。(2004.12.2 yutaka)
#define		TTSSH					TERATERM
#define		TTERM_KEY				_T("Software\\ShinpeiTools\\TTermMenu")
#define		LOGIN_PROMPT			_T("login:")
#define		PASSWORD_PROMPT			_T("Password:")
#define		TTPMENU_CLASS			_T("TMenuClass")

#define		DATA_NOENTRY			0xffffffff

#define		MODE_SMALLICON			0x0000
#define		MODE_LARGEICON			0x0001

#define		MODE_AUTOLOGIN			0x0000
#define		MODE_MACRO				0x0001
#define		MODE_DIRECT				0x0002

// レジストリの値名（一般設定）
#define		KEY_ICONMODE			_T("IconMode")
#define		KEY_LEFTBUTTONPOPUP		_T("LeftButtonPopup")
#define		KEY_MENUTEXTCOLOR		_T("MenuTextColor")
#define		KEY_LF_HEIGHT			_T("lfHeight")
#define		KEY_LF_WIDTH			_T("lfWidth")
#define		KEY_LF_ESCAPEMENT		_T("lfEscapement")
#define		KEY_LF_ORIENTATION		_T("lfOrientation")
#define		KEY_LF_WEIGHT			_T("lfWeight")
#define		KEY_LF_ITALIC			_T("lfItalic")
#define		KEY_LF_UNDERLINE		_T("lfUnderline")
#define		KEY_LF_STRIKEOUT		_T("lfStrikeOut")
#define		KEY_LF_CHARSET			_T("lfCharSet")
#define		KEY_LF_OUTPRECISION		_T("lfOutPrecision")
#define		KEY_LF_CLIPPRECISION	_T("lfClipPrecision")
#define		KEY_LF_QUALITY			_T("lfQuality")
#define		KEY_LF_PITCHANDFAMILY	_T("lfPitchAndFamily")
#define		KEY_LF_FACENAME			_T("lfFaceName")
#define		KEY_HOTKEY				_T("Hotkey")

// レジストリの値名（ジョブ設定）
#define		KEY_MODE				_T("Mode")
#define		KEY_HOSTNAME			_T("HostName")
#define		KEY_USERFLAG			_T("UserFlag")
#define		KEY_USERNAME			_T("UserName")
#define		KEY_PASSWDFLAG			_T("PasswdFlag")
#define		KEY_PASSWORD			_T("Password")
#define		KEY_INITFILE			_T("INI_File")
#define		KEY_TERATERM			_T("TeraTerm")
#define		KEY_OPTION				_T("Option")
#define		KEY_LOGIN_PROMPT		_T("LoginPrompt")
#define		KEY_PASSWORD_PROMPT		_T("PasswdPrompt")
#define		KEY_MACROFILE			_T("MacroFile")
#define		KEY_TTSSH				_T("TeraTerm Mode")
#define		KEY_LOG					_T("Log")
#define		KEY_STARTUP				_T("Startup")
#define		KEY_KEYFILE				_T("PrivateKeyFile")  // add (2005.1.27 yutaka)
#define		KEY_CHALLENGE			_T("Challenge")       // add (2007.11.14 yutaka)
#define		KEY_PAGEANT				_T("Pageant")         // add (2008.5.26 maya)

#define		STR_ICONMODE			_T("showing large icon")
#define		STR_LEFTBUTTONPOPUP		_T("showing list by left-click")
#define		STR_HOTKEY				_T("showing list hotkey(Ctl+Alt+M)")
#define		STR_NOENTRY				_T("(none)")

// 設定情報構造体
struct JobInfo {
	TCHAR	szName[MAX_PATH];			// ジョブ名
	BOOL	bStartup;					// 起動時にジョブを実行するかどうかのフラグ
	BOOL	bTtssh;						// ttsshを使用するかどうかのフラグ
	DWORD	dwMode;						// ジョブの種類

	// 自動ログイン用設定
	TCHAR	szHostName[MAX_PATH];		// ホスト名
	BOOL	bUsername;					// ユーザ名を入力するかどうかのフラグ
	TCHAR	szUsername[MAX_PATH];		// ユーザ名
	BOOL	bPassword;					// パスワードを入力するかどうかのフラグ
	TCHAR	szPassword[MAX_PATH];		// パスワード

	// マクロ実行用設定
	TCHAR	szMacroFile[MAX_PATH];		// 実行するマクロファイルのファイル名

	// 詳細設定
	TCHAR	szTeraTerm[MAX_PATH];		// 起動アプリ（TeraTerm）のファイル名
	TCHAR	szInitFile[MAX_PATH];		// TeraTermの設定ファイル（起動のみ意外）
	TCHAR	szOption[MAX_PATH];			// アプリケーションのオプション/引数
	TCHAR	szLog[MAX_PATH];			// ログファイル名（自動ログインのみ）
	TCHAR	szLoginPrompt[MAX_PATH];	// ログインプロンプト（自動ログインのみ）
	TCHAR	szPasswdPrompt[MAX_PATH];	// パスワードプロンプト（自動ログインのみ）

	TCHAR    PrivateKeyFile[MAX_PATH];   // 秘密鍵ファイル (2005.1.27 yutaka)
	BOOL    bChallenge;                 // keyboard-interative method(/challenge)
	BOOL    bPageant;                   // use Pageant(/pageant)
};

// 表示設定構造体
struct MenuData {
	TCHAR		szName[MAXJOBNUM][MAX_PATH];
	HICON		hLargeIcon[MAXJOBNUM];
	HICON		hSmallIcon[MAXJOBNUM];
	DWORD		dwMenuHeight;
	DWORD		dwIconMode;
	BOOL		bLeftButtonPopup;
	BOOL		bHotkey;
	HFONT		hFont;
	LOGFONT		lfFont;
	COLORREF	crMenuBg;
	COLORREF	crMenuTxt;
	COLORREF	crSelMenuBg;
	COLORREF	crSelMenuTxt;
};

// 関数一覧
void	PopupMenu(HWND hWnd);
void	PopupListMenu(HWND hWnd);
BOOL	AddTooltip(int idControl);
BOOL	ConnectHost(HWND hWnd, UINT idItem, TCHAR *szJobName = NULL);
BOOL	CreateTooltip(void);
BOOL	DeleteLoginHostInformation(HWND hWnd);
BOOL	ErrorMessage(HWND hWnd, LPTSTR msg,...);
BOOL	ExtractAssociatedIconEx(TCHAR *szPath, HICON *hLargeIcon, HICON *hSmallIcon);
BOOL	ExecStartup(HWND hWnd);
BOOL	GetApplicationFilename(TCHAR *szName, TCHAR *szPath);
BOOL	InitConfigDlg(HWND hWnd);
BOOL	InitEtcDlg(HWND hWnd);
BOOL	InitListMenu(HWND hWnd);
BOOL	InitMenu(void);
BOOL	InitVersionDlg(HWND hWnd);
BOOL	LoadConfig(void);
BOOL	LoadLoginHostInformation(HWND hWnd);
BOOL	MakeTTL(TCHAR *TTLName, JobInfo *jobInfo);
BOOL	ManageWMCommand_Config(HWND hWnd, WPARAM wParam);
BOOL	ManageWMCommand_Etc(HWND hWnd, WPARAM wParam);
BOOL	ManageWMCommand_Menu(HWND hWnd, WPARAM wParam);
BOOL	ManageWMCommand_Version(HWND hWnd, WPARAM wParam);
BOOL	ManageWMNotify_Config(LPARAM lParam);
BOOL	RedrawMenu(HWND hWnd);
BOOL	RegLoadLoginHostInformation(TCHAR *szName, JobInfo *jobInfo);
BOOL	RegSaveLoginHostInformation(JobInfo *jobInfo);
BOOL	SaveConfig(void);
BOOL	SaveEtcInformation(HWND hWnd);
BOOL	SaveLoginHostInformation(HWND hWnd);
BOOL	SetDefaultEtcDlg(HWND hWnd);
BOOL	SetMenuFont(HWND hWnd);
BOOL	SetTaskTray(HWND hWnd, DWORD dwMessage);
BOOL	CALLBACK DlgCallBack_Config(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL	CALLBACK DlgCallBack_Etc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL	CALLBACK DlgCallBack_Version(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
LRESULT	CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam);
LRESULT	CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

#endif
