/////////////////////////////////////////////////////////////////////////////
// Name:        dbproject.cc
// Purpose:     Database Objects
// Author:      Daniel Horak
// Modified by:
// RCS-ID:      $Id: dbproject.cc,v 1.2 2003/12/28 18:53:10 horakdan Exp $
// Copyright:   (c) Daniel Horak
// Licence:     GPL
/////////////////////////////////////////////////////////////////////////////

// ============================================================================
// declarations
// ============================================================================

// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------

// For compilers that support precompilation, includes "wx/wx.h".
#include <wx/wxprec.h>

#ifdef __BORLANDC__
    #pragma hdrstop
#endif

// for all others, include the necessary headers (this file is usually all you
// need because it includes almost all "standard" wxWindows headers
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif

#include "config.h"
#include "xml.h"
#include "dbobject.h"
#include "dbproject.h"
#include "servers/dbserver.h"


DBProject::DBProject(DataDesignerProject *project)
	:DBObject(DBProjectType, "project", project, NULL)
{
}

wxDialog *DBProject::Editor(bool edit)
{
	return new DBProjectEditor(this, edit);
}

void DBProject::LoadXmlNode(wxXmlNode *node)
{
	if (node->GetName() == m_typestr) {
		DBObject::LoadXmlNode(node);
		
		m_author 	= node->GetPropVal("author", wxEmptyString);
		m_copyright 	= node->GetPropVal("copyright", wxEmptyString);
		m_dbserver 	= node->GetPropVal("dbserver", wxEmptyString);
		
		wxXmlNode *child = node->GetChildren();
		wxString name;
		
		while (child) {
			name = child->GetName();
			if (name == "author")
				LoadTextNode(child, "author", m_author);
			else if (name == "copyright")
				LoadTextNode(child, "copyright", m_copyright);
			else if (name == "dbserver")
				LoadTextNode(child, "dbserver", m_dbserver);
			child = child->GetNext();
		}
	} else {
		wxLogMessage("wrong type '%s'", node->GetName().c_str());
	}
}

wxXmlNode *DBProject::GetXmlNode()
{
	wxXmlNode *node = DBObject::GetXmlNode();
	
	node->AddChild(GetTextNode("author", m_author));
	node->AddChild(GetTextNode("copyright", m_copyright));
	node->AddChild(GetTextNode("dbserver", m_dbserver));
	
	return node;
}

/*
 * Editor
 */
DBProjectEditor::DBProjectEditor(DBObject *object, bool edit)
	: DBObjectEditor(_("Project"), wxSize(500,200), object, edit)
{
	wxString	*names;
	
	it4->Disable();

	names = GetServerNames();
	new wxStaticText(m_page_general, -1, _("Server"), wxPoint(10,60), wxSize(80,-1), wxALIGN_RIGHT);
	c1 = new wxComboBox(m_page_general, -1, wxEmptyString, wxPoint(100,60), wxSize(150,-1),
		GetServerCount(), names, wxCB_SORT | wxCB_READONLY);
	
	if (object->GetProject()->IsInitialized())
		c1->Disable();
}

DBProjectEditor::~DBProjectEditor()
{
}

bool DBProjectEditor::TransferDataFromWindow()
{
	DBProject	*object = (DBProject *)GetObject();

	DBObjectEditor::TransferDataFromWindow();
	
	object->m_dbserver = c1->GetValue();
	
	return TRUE;
}

bool DBProjectEditor::TransferDataToWindow()
{
	DBProject	*object = (DBProject *)GetObject();
	
	DBObjectEditor::TransferDataToWindow();

	c1->SetValue(object->m_dbserver);
	
	return TRUE;
}

bool DBProjectEditor::Validate()
{
	if (GetServerByName(c1->GetValue()) == NULL) {
		wxMessageBox(_("Unknown server"), _("Error"), wxOK | wxICON_ERROR);
		return FALSE;
	}
	
	return TRUE;
}


syntax highlighted by Code2HTML, v. 0.9.1