// This file is part of WLangLexer.
// A plugin for Notepad++
// Copyright (C)2008-2010 Tanguy Pruvot ( tanguy.pruvot@gmail.com )
#include "OptionsDlg.h"
#include "../vcbuild/resource.h"
#include "NppFunctions.h"
void OptionsDlg::Create()
{
	if (created) {
		display(true);
		return;
	}
	created = TRUE;
	StaticDialog::init(_hInst, _hSelf);
	create(IDD_OPTIONS,false);
	display(true);
}
BOOL CALLBACK OptionsDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lParam)
{
	switch (Message) 
	{
		case WM_INITDIALOG :
		{
			_hBtnClose = ::GetDlgItem(_hSelf, IDC_BUTTON_CLOSE);
			_hFold = ::GetDlgItem(_hSelf, IDC_FOLD);
			_hFoldComment     = ::GetDlgItem(_hSelf, IDC_FOLD_COMMENT);
			_hFoldCommentBloc = ::GetDlgItem(_hSelf, IDC_FOLD_COMMENTBLOC);
			_hFoldHereStrings = ::GetDlgItem(_hSelf, IDC_FOLD_HERESTRINGS);
			_hFoldJavaScript  = ::GetDlgItem(_hSelf, IDC_FOLD_JAVASCRIPT);
			_hCaseSensFunc   = ::GetDlgItem(_hSelf, IDC_LEXER_CASE_FUNC);
			_hCaseSensConst  = ::GetDlgItem(_hSelf, IDC_LEXER_CASE_CONST);
			_hLangOnlyEN     = ::GetDlgItem(_hSelf, IDC_LEXER_ENGLISH);
			OptionsToDialog();
			return TRUE;
		}
		case WM_KEYUP : 
		{
			if (wParam == VK_ESCAPE) {
				display(false);
				return FALSE;
			}
			return false;
		}
		case WM_SYSCOMMAND : 
		case WM_COMMAND : 
		{
			switch (wParam)
			{
				case SC_CLOSE :
				case IDC_BUTTON_CLOSE :
					DialogToOptions();
					display(false);
					ReLexAll(_nppData);
					return TRUE;
					
				default :
					return ::SendMessage(_hParent, WM_COMMAND, wParam, lParam);
					//return FALSE;
			}
		}
	}
	return FALSE;
}
void OptionsDlg::initOptions(void * ptrOptionsData){
	optLexer = ptrOptionsData;
}
void OptionsDlg::OptionsToDialog()
{
	if (optLexer)
		memcpy(&options.fold, optLexer, sizeof(options));
	SendMessage(_hFold,				BM_SETCHECK, options.fold * BST_CHECKED, 0);
	SendMessage(_hFoldComment,		BM_SETCHECK, options.foldComment * BST_CHECKED, 0);
	SendMessage(_hFoldCommentBloc,	BM_SETCHECK, options.foldCommentBloc * BST_CHECKED, 0);
	SendMessage(_hFoldHereStrings,	BM_SETCHECK, options.foldHereString * BST_CHECKED, 0);
	SendMessage(_hFoldJavaScript,	BM_SETCHECK, options.foldJavaScript * BST_CHECKED, 0);
	SendMessage(_hCaseSensFunc,		BM_SETCHECK, options.caseFunc * BST_CHECKED, 0);
	SendMessage(_hCaseSensConst,	BM_SETCHECK, options.caseConst * BST_CHECKED, 0);
	SendMessage(_hLangOnlyEN,		BM_SETCHECK, (!options.langFuncFR) * BST_CHECKED, 0);
}
void OptionsDlg::DialogToOptions()
{
	options.fold			= (BST_CHECKED == SendMessage(_hFold,			BM_GETCHECK, 0, 0));
	options.foldComment		= (BST_CHECKED == SendMessage(_hFoldComment,	BM_GETCHECK, 0, 0));
	options.foldCommentBloc	= (BST_CHECKED == SendMessage(_hFoldCommentBloc,BM_GETCHECK, 0, 0));
	options.foldHereString	= (BST_CHECKED == SendMessage(_hFoldHereStrings,BM_GETCHECK, 0, 0));
	options.foldJavaScript	= (BST_CHECKED == SendMessage(_hFoldJavaScript,	BM_GETCHECK, 0, 0));
	options.caseFunc		= (BST_CHECKED == SendMessage(_hCaseSensFunc,	BM_GETCHECK, 0, 0));
	options.caseConst		= (BST_CHECKED == SendMessage(_hCaseSensConst,	BM_GETCHECK, 0, 0));
	options.langFuncFR		= !(BST_CHECKED == SendMessage(_hLangOnlyEN,		BM_GETCHECK, 0, 0));
	options.langConstFR		= options.langFuncFR;
	//options.langFuncEN		= true;
	//options.langConstEN		= true;
	if (optLexer) {
		memcpy(optLexer, &options.fold, sizeof(options));
	}
}
//To save options
bool OptionsDlg::OptionsToConfig()
{
	//Need a link to WLang::writeSettings
	return TRUE;
}
bool OptionsDlg::ConfigToOptions()
{
	//Need a link to WLang::readSettings
	return TRUE;
}