#ifndef __SITEMANAGER_H__
#define __SITEMANAGER_H__

class CSiteManagerItemData : public wxTreeItemData
{
public:
	CSiteManagerItemData(CServer server = CServer())
	{
		m_server = server;
	}

	virtual ~CSiteManagerItemData()
	{
	}

	CServer m_server;
	wxString m_comments;
	wxString m_localDir;
	CServerPath m_remoteDir;
	wxString m_name; // Only filled by CSiteManager::GetServer
};

#include "dialogex.h"

class TiXmlElement;
class CInterProcessMutex;
class CSiteManagerXmlHandler;
class CSiteManager: public wxDialogEx
{
	DECLARE_EVENT_TABLE();

public:
	/// Constructors
	CSiteManager();
	virtual ~CSiteManager();

	/// Creation
	bool Create(wxWindow* parent);

	/// Creates the controls and sizers
	void CreateControls();

	bool GetServer(CSiteManagerItemData& data);

	static wxMenu* GetSitesMenu();
	static void ClearIdMap();

	// This function also clears the Id map
	static CSiteManagerItemData* GetSiteById(int id);

protected:
	bool Verify();
	bool UpdateServer();
	bool Load();
	static bool Load(TiXmlElement *pElement, CSiteManagerXmlHandler* pHandler);
	bool Save(TiXmlElement *pElement = 0, wxTreeItemId treeId = wxTreeItemId());
	void SetCtrlState();
	bool LoadDefaultSites();

	// The map maps event id's to sites
	static wxMenu* GetSitesMenu_Predefied(std::map<int, CSiteManagerItemData*> &idMap);

	bool IsPredefinedItem(wxTreeItemId item);

	static CSiteManagerItemData* ReadServerElement(TiXmlElement *pElement);

	virtual void OnOK(wxCommandEvent& event);
	virtual void OnCancel(wxCommandEvent& event);
	virtual void OnConnect(wxCommandEvent& event);
	virtual void OnNewSite(wxCommandEvent& event);
	virtual void OnNewFolder(wxCommandEvent& event);
	virtual void OnRename(wxCommandEvent& event);
	virtual void OnDelete(wxCommandEvent& event);
	virtual void OnBeginLabelEdit(wxTreeEvent& event);
	virtual void OnEndLabelEdit(wxTreeEvent& event);
	virtual void OnSelChanging(wxTreeEvent& event);
	virtual void OnSelChanged(wxTreeEvent& event);
	virtual void OnLogontypeSelChanged(wxCommandEvent& event);
	virtual void OnRemoteDirBrowse(wxCommandEvent& event);
	virtual void OnItemActivated(wxTreeEvent& event);
	virtual void OnLimitMultipleConnectionsChanged(wxCommandEvent& event);
	virtual void OnCharsetChange(wxCommandEvent& event);
	virtual void OnProtocolSelChanged(wxCommandEvent& event);
	void OnCopySite(wxCommandEvent& event);

	CInterProcessMutex* m_pSiteManagerMutex;

	wxTreeItemId m_predefinedSites;
	wxTreeItemId m_ownSites;

	// Initialized by GetSitesMenu
	static std::map<int, CSiteManagerItemData*> m_idMap;

#ifdef __WXGTK__
	// wxSpinCtrl::SetValue(x); wxASSERT(wxSpinControl::GetValue() == x) failes on GTK
	bool m_timezoneOffsetHoursChanged;
	bool m_timezoneOffsetMinutesChanged;
	bool m_limitConnectionsChanged;
	void OnTimezoneOffsetChanged(wxSpinEvent& event);
#endif
};

#endif //__SITEMANAGER_H__


syntax highlighted by Code2HTML, v. 0.9.1