//////////////////////////////////////////////////////////////////////////
//
// pgAdmin III - PostgreSQL Tools
//
// Copyright (C) 2002 - 2016, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// dlgMainConfig.cpp - Configure setting
//
//////////////////////////////////////////////////////////////////////////



// App headers
#include "pgAdmin3.h"

#include "dlg/dlgMainConfig.h"


// Icons
#include "images/property.pngc"





BEGIN_EVENT_TABLE(dlgMainConfig, DialogWithHelp)
	EVT_BUTTON (wxID_OK,              dlgMainConfig::OnOK)
	EVT_BUTTON (wxID_CANCEL,          dlgMainConfig::OnCancel)
	EVT_TEXT(XRCID("txtValue"),       dlgMainConfig::OnChange)
	EVT_TEXT(XRCID("cbValue"),        dlgMainConfig::OnChange)
	EVT_CHECKBOX(XRCID("chkValue"),   dlgMainConfig::OnChange)
END_EVENT_TABLE()


#define chkEnabled          CTRL_CHECKBOX("chkEnabled")
#define cbValue             CTRL_COMBOBOX("cbValue")
#define txtValue            CTRL_TEXT("txtValue")
#define chkValue            CTRL_CHECKBOX("chkValue")
#define txtComment          CTRL_TEXT("txtComment")
#define stName              CTRL_STATIC("stName")
#define stDescription       CTRL_STATIC("stDescription")


static const wxChar *contextStrings[] =
{
	__("Internal - not externally settable"),
	__("Postmaster - set on server start"),
	__("SIGHUP - reloaded on SIGHUP signal"),
	__("Backend - overridable in individual backend"),
	__("Suset - may be overridden by superuser"),
	__("Userlimit - may be set by user"),
	__("Userset - may be set by user"),
	__("Unknown")
};


static const wxChar *sourceStrings[] =
{
	__("Variable has still its initial default value"),
	__("Set via environment variable"),
	__("Set in configuration file"),
	__("Set on command line"),
	__("Set by unprivileged command"),
	__("Set in database variables"),
	__("Set in user variables"),
	__("Set in client parameters"),
	__("set by Override"),
	__("Set interactively"),
	__("Set by test"),
	__("Set by session parameters")
};


dlgMainConfig::dlgMainConfig(pgFrame *parent, pgSettingItem *_item) :
	DialogWithHelp((frmMain *)parent)
{
	SetFont(settings->GetSystemFont());
	LoadResource((wxWindow *)parent, wxT("dlgMainConfig"));

	// Icon
	SetIcon(*property_png_ico);
	RestorePosition();

	item = _item;

	SetTitle(wxString::Format(_("Configuration setting \"%s\""), item->name.c_str()));

	// Setup the default values

	cbValue->Hide();
	chkValue->Hide();

	if (!item->newLine)
	{
		if (item->orgLine)
			item->newLine = new pgConfigLine(item->orgLine);
		else
		{
			item->newLine = new pgConfigLine();
			item->newLine->item = item;
		}
	}

	chkEnabled->SetValue(!item->newLine->isComment);
	txtValue->SetValue(item->newLine->value);
	txtComment->SetValue(item->newLine->comment);

	wxFont fntLabel = stName->GetFont();
	fntLabel.SetWeight(wxFONTWEIGHT_BOLD);
	stName->SetFont(fntLabel);
	stName->SetLabel(item->name);

	wxString str;
	str += _("Category") + wxString(wxT(": ")) + item->category + END_OF_LINE;
	str += _("Context") + wxString(wxT(": "));
	str += wxGetTranslation(contextStrings[item->context]);
	str += END_OF_LINE;

	if (item->source != pgSettingItem::PGC_UNKNOWNSOURCE)
	{
		str += _("Current value") + wxString(wxT(": "));

		if (item->value == wxT("unset") && item->source == pgSettingItem::PGC_DEFAULT)
			str += _("unset");
		else
			str += item->value + END_OF_LINE wxT("     ") + wxGetTranslation(sourceStrings[item->source]);

		str += END_OF_LINE;
	}

	stDescription->SetLabel(str + END_OF_LINE + item->short_desc + END_OF_LINE + item->extra_desc);
	btnOK->Enable();
}


dlgMainConfig::~dlgMainConfig()
{
	SavePosition();
}


wxString dlgMainConfig::GetValue()
{
	return txtValue->GetValue();
}


wxString dlgMainConfig::GetHelpPage() const
{
	return wxT("pg/runtime-config");
}


void dlgMainConfig::OnChange(wxCommandEvent &ev)
{
}


void dlgMainConfig::OnOK(wxCommandEvent &ev)
{
#ifdef __WXGTK__
	if (!btnOK->IsEnabled())
		return;
#endif
	item->newLine->value = GetValue();
	item->newLine->comment = txtComment->GetValue();
	item->newLine->isComment = !chkEnabled->GetValue();

	EndModal(wxID_OK);
}


void dlgMainConfig::OnCancel(wxCommandEvent &ev)
{
	EndModal(wxID_CANCEL);
}

int dlgMainConfig::Go()
{
	// Set focus on the Password textbox and show modal
	return ShowModal();
}
