// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010  Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

// display_details_dlg.cpp : implementation file
//

#include "stdafx.h"
#include "base_dialog.h"
#include "client_config.h"
#include "database.h"
#include "cfg_file.h"
#include "display_details_dlg.h"

// ***************************************************************************
// CDisplayDetailsDlg dialog
// ***************************************************************************

CDisplayDetailsDlg::CDisplayDetailsDlg(CWnd* pParent /*=NULL*/)
	: CBaseDialog(CDisplayDetailsDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDisplayDetailsDlg)
	CharacterQualityInt = 0;
	FXQualityInt = 0;
	LandscapeQualityInt = 0;
	TextureQualityInt = 0;
	//}}AFX_DATA_INIT

	MaxTextureQuality= 1;
}

// ***************************************************************************

void CDisplayDetailsDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDisplayDetailsDlg)
	DDX_Control(pDX, IDC_LANDSCAPE_QUALITY, LandscapeQuality);
	DDX_Control(pDX, IDC_FX_QUALITY, FXQuality);
	DDX_Control(pDX, IDC_CHARACTER_QUALITY, CharacterQuality);
	DDX_Control(pDX, IDC_TEXTURE_QUALITY, TextureQuality);
	DDX_Control(pDX, IDC_CHARACTER_QUALITY_VALUE, CharacterQualityValue);
	DDX_Control(pDX, IDC_FX_QUALITY_VALUE, FXQualityValue);
	DDX_Control(pDX, IDC_LANDSCAPE_QUALITY_VALUE, LandscapeQualityValue);
	DDX_Control(pDX, IDC_TEXTURE_QUALITY_VALUE, TextureQualityValue);
	DDX_Slider(pDX, IDC_CHARACTER_QUALITY, CharacterQualityInt);
	DDX_Slider(pDX, IDC_FX_QUALITY, FXQualityInt);
	DDX_Slider(pDX, IDC_LANDSCAPE_QUALITY, LandscapeQualityInt);
	DDX_Slider(pDX, IDC_TEXTURE_QUALITY, TextureQualityInt);
	//}}AFX_DATA_MAP
}

// ***************************************************************************

BEGIN_MESSAGE_MAP(CDisplayDetailsDlg, CDialog)
	//{{AFX_MSG_MAP(CDisplayDetailsDlg)
	ON_WM_HSCROLL()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

// ***************************************************************************
// CDisplayDetailsDlg message handlers
// ***************************************************************************

void InitQuality (CSliderCtrl &slider)
{
	slider.SetRange (0, QUALITY_STEP-1);
}

// ***************************************************************************

BOOL CDisplayDetailsDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	InitQuality (LandscapeQuality);
	InitQuality (CharacterQuality);
	InitQuality (FXQuality);
	TextureQuality.SetRange(0, MaxTextureQuality);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

// ***************************************************************************

void UpdateQuality (int quality, HWND hwnd)
{
	static const char *qualityString[QUALITY_STEP] = { "uiConfigPoor", "uiConfigMedium", "uiConfigNormal", "uiConfigSuper"};
	setWindowText(hwnd, (WCHAR*)NLMISC::CI18N::get (qualityString[quality]).c_str());
}

// ***************************************************************************

void CDisplayDetailsDlg::updateState ()
{
	UpdateQuality (LandscapeQualityInt, LandscapeQualityValue);
	UpdateQuality (FXQualityInt, FXQualityValue);
	UpdateQuality (CharacterQualityInt, CharacterQualityValue);

	// If control has bad range, reset
	int		rMin, rMax;
	TextureQuality.GetRange(rMin, rMax);
	if(rMin!=0 || rMax!=MaxTextureQuality)
		TextureQuality.SetRange(0, MaxTextureQuality);
	
	// update texture quality text
	static const char *textureString[QUALITY_TEXTURE_STEP] = { "uiConfigTexturePoor", "uiConfigTextureNormal", "uiConfigTextureSuper"};
	setWindowText(TextureQualityValue, (WCHAR*)NLMISC::CI18N::get (textureString[TextureQualityInt]).c_str());
}

// ***************************************************************************

void CDisplayDetailsDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	UpdateData ();
	updateState ();
	UpdateData (FALSE);
	InvalidateConfig ();
	
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}