/*
Copyright (C) 2006-2007 Scott Ellis
Copyright (C) 2007-2011 Jan Holub

This is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.

This 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
Library General Public License for more details.

You should have received a copy of the GNU Library General Public
License along with this file; see the file license.txt.  If
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.  
*/

#ifndef _OPTIONS_INC
#define _OPTIONS_INC

#define WMU_ENABLE_LIST_BUTTONS			(WM_USER + 0x030)
#define WMU_ENABLE_MODULE_ENTRY			(WM_USER + 0x031)

#define LABEL_LEN			1024
#define VALUE_LEN			8192
#define MODULE_NAME_LEN		512
#define SETTING_NAME_LEN	512

// chekcbox icons
#define IDI_NOTICK          205
#define IDI_TICK            206
#define IDPRESETITEM		1000

#define MS_TOOLTIP_SHOWTIP	"mToolTip/ShowTip"

typedef struct {
	UINT id, uintCoreIconId, uintResIconId;
	TCHAR *swzTooltip;
} OPTBUTTON;

typedef struct {
	TCHAR swzLabel[LABEL_LEN];
	TCHAR swzValue[VALUE_LEN];
	bool bLineAbove, bValueNewline;
	bool bIsVisible;
	bool bParseTipperVarsFirst;
} DISPLAYITEM;

typedef enum {DVT_DB = 0, DVT_PROTODB = 1} DisplaySubstType;
typedef struct {
	TCHAR swzName[LABEL_LEN];
	DisplaySubstType type;
	char szModuleName[MODULE_NAME_LEN];
	char szSettingName[SETTING_NAME_LEN];
	int iTranslateFuncId;
} DISPLAYSUBST;

struct DSListNode {
	DISPLAYSUBST ds;
	DSListNode *next;
};

struct DIListNode {
	DISPLAYITEM di;
	DIListNode *next;
};

typedef struct {
	BYTE top;
	BYTE right;
	BYTE bottom;
	BYTE left;
} MARGINS;

// tray tooltip items
static TCHAR* trayTipItems[TRAYTIP_ITEMS_COUNT] = 
{
	LPGENT("Number of contacts"),
	LPGENT("Protocol lock status"),
	LPGENT("Logon time"),
	LPGENT("Unread emails"),
	LPGENT("Status"), 
	LPGENT("Status message"),
	LPGENT("Extra status"),
	LPGENT("Listening to"),
	LPGENT("Favourite contacts"),
	LPGENT("Miranda uptime"),
	LPGENT("Clist event")
};

// extra icons
static TCHAR* extraIconName[6] = 
{
	LPGENT("Status"),
	LPGENT("Extra status"), 
	LPGENT("Jabber activity"), 
	LPGENT("Gender"),
	LPGENT("Country flag"),
	LPGENT("Client")
};

typedef struct {
	bool bDragging;
	HTREEITEM hDragItem;
} EXTRAICONDATA;

typedef struct {
	BYTE order;
	BYTE vis;
} ICONSTATE;

typedef enum {PAV_NONE=0, PAV_LEFT=1, PAV_RIGHT=2} PopupAvLayout;
typedef enum {PTL_LEFTICON=0, PTL_RIGHTICON=1, PTL_NOICON=2, PTL_NOTITLE=3} PopupTitleLayout;
typedef enum {PP_BOTTOMRIGHT=0, PP_BOTTOMLEFT=1, PP_TOPRIGHT=2, PP_TOPLEFT=3} PopupPosition;
typedef enum {PSE_NONE=0, PSE_ANIMATE=1, PSE_FADE=2} PopupShowEffect;

typedef struct {
	int iWinWidth, iWinMaxHeight, iAvatarSize; //tweety
	PopupTitleLayout titleLayout;
	PopupAvLayout avatarLayout;
	int iTextIndent, iTitleIndent, iValueIndent;
	bool bShowNoFocus;
	DSListNode *dsList;
	int iDsCount;
	DIListNode *diList;
	int iDiCount;
	int iTimeIn;
	int iPadding, iOuterAvatarPadding, iInnerAvatarPadding, iTextPadding;
	PopupPosition pos;
	int iMinWidth, iMinHeight; // no UI for these
	int iMouseTollerance;
	bool bStatusBarTips;
	int iSidebarWidth;
	COLORREF colBg, colBorder, colAvatarBorder, colDivider, colBar, colTitle, colLabel, colValue, colTrayTitle, colSidebar;
	int iLabelValign, iLabelHalign, iValueValign, iValueHalign;
	bool bWaitForStatusMsg, bWaitForAvatar;
	
	// tooltip skin
	SkinMode skinMode;
	TCHAR szSkinName[256];
	TCHAR szPreviewFile[1024];
	TCHAR *szImgFile[SKIN_ITEMS_COUNT];
	MARGINS margins[SKIN_ITEMS_COUNT];
	TransformationMode transfMode[SKIN_ITEMS_COUNT];
	PopupShowEffect showEffect;
	bool bLoadFonts;
	bool bLoadProportions;
	int iEnableColoring;
	int iAnimateSpeed;
	int iOpacity;
	int iAvatarOpacity;
	bool bBorder;
	bool bRound, bAvatarRound;
	bool bDropShadow;
	bool bAeroGlass;

	// tray tooltip
	bool bTraytip;
	bool bHandleByTipper;
	bool bExpandTraytip;
	bool bHideOffline;
	int iExpandTime;
	int iFirstItems, iSecondItems;
	int iFavoriteContFlags;

	// extra setting
	bool bOriginalAvatarSize;
	bool bAvatarBorder;
	bool bWaitForContent;
	bool bGetNewStatusMsg;
	bool bDisableIfInvisible;
	bool bRetrieveXstatus;
	bool bLimitMsg;
	int iLimitCharCount;
	int iSmileyAddFlags;
	BYTE exIconsOrder[EXICONS_COUNT];
	BYTE exIconsVis[EXICONS_COUNT];	
} OPTIONS;


extern OPTIONS opt;

void InitOptions();
void LoadOptions();
void SaveOptions();
void DeinitOptions();

#endif