#ifndef __SITEMANAGER_H__ #define __SITEMANAGER_H__ class CSiteManagerItemData : public wxTreeItemData { public: enum type { SITE, BOOKMARK }; CSiteManagerItemData(enum type item_type) : m_type(item_type) { m_sync = false; } virtual ~CSiteManagerItemData() { } wxString m_localDir; CServerPath m_remoteDir; enum type m_type; bool m_sync; }; class CSiteManagerItemData_Site : public CSiteManagerItemData { public: CSiteManagerItemData_Site(const CServer& server = CServer()) : CSiteManagerItemData(SITE), m_server(server) { connected_item = -1; } CServer m_server; wxString m_comments; // Needed to keep track of currently connected sites so that // bookmarks and bookmark path can be updated in response to // changes done here int connected_item; }; #include "dialogex.h" class TiXmlElement; class CInterProcessMutex; class CSiteManagerXmlHandler; class CWindowStateManager; class CSiteManagerDropTarget; class CSiteManager: public wxDialogEx { friend class CSiteManagerDropTarget; DECLARE_EVENT_TABLE(); public: struct _connected_site { CServer server; wxString old_path; wxString new_path; }; /// Constructors CSiteManager(); virtual ~CSiteManager(); // Creation. If pServer is set, it will cause a new item to be created. bool Create(wxWindow* parent, std::vector<_connected_site> *connected_sites, const CServer* pServer = 0); bool GetServer(CSiteManagerItemData_Site& data); wxString GetSitePath(); static bool GetBookmarks(wxString sitePath, std::list<wxString> &bookmarks); static wxString AddServer(CServer server); static bool AddBookmark(wxString sitePath, const wxString& name, const wxString &local_dir, const CServerPath &remote_dir, bool sync); static bool ClearBookmarks(wxString sitePath); static wxMenu* GetSitesMenu(); static void ClearIdMap(); // This function also clears the Id map static CSiteManagerItemData_Site* GetSiteById(int id, wxString &path); static CSiteManagerItemData_Site* GetSiteByPath(wxString sitePath); static bool UnescapeSitePath(wxString path, std::list<wxString>& result); protected: // Creates the controls and sizers void CreateControls(wxWindow* parent); bool Verify(); bool UpdateItem(); bool UpdateServer(CSiteManagerItemData_Site &server, const wxString& name); bool UpdateBookmark(CSiteManagerItemData &bookmark, const CServer& server); bool Load(); static bool Load(TiXmlElement *pElement, CSiteManagerXmlHandler* pHandler); bool Save(TiXmlElement *pElement = 0, wxTreeItemId treeId = wxTreeItemId()); bool SaveChild(TiXmlElement *pElement, wxTreeItemId child); void SetCtrlState(); bool LoadDefaultSites(); bool IsPredefinedItem(wxTreeItemId item); static CSiteManagerItemData_Site* ReadServerElement(TiXmlElement *pElement); wxString FindFirstFreeName(const wxTreeItemId &parent, const wxString& name); void AddNewSite(wxTreeItemId parent, const CServer& server, bool connected = false); void CopyAddServer(const CServer& server); void AddNewBookmark(wxTreeItemId parent); void RememberLastSelected(); wxString GetSitePath(wxTreeItemId item); void MarkConnectedSites(); void MarkConnectedSite(int connected_site); void OnOK(wxCommandEvent& event); void OnCancel(wxCommandEvent& event); void OnConnect(wxCommandEvent& event); void OnNewSite(wxCommandEvent& event); void OnNewFolder(wxCommandEvent& event); void OnRename(wxCommandEvent& event); void OnDelete(wxCommandEvent& event); void OnBeginLabelEdit(wxTreeEvent& event); void OnEndLabelEdit(wxTreeEvent& event); void OnSelChanging(wxTreeEvent& event); void OnSelChanged(wxTreeEvent& event); void OnLogontypeSelChanged(wxCommandEvent& event); void OnRemoteDirBrowse(wxCommandEvent& event); void OnItemActivated(wxTreeEvent& event); void OnLimitMultipleConnectionsChanged(wxCommandEvent& event); void OnCharsetChange(wxCommandEvent& event); void OnProtocolSelChanged(wxCommandEvent& event); void OnBeginDrag(wxTreeEvent& event); void OnChar(wxKeyEvent& event); void OnCopySite(wxCommandEvent& event); void OnContextMenu(wxTreeEvent& event); void OnExportSelected(wxCommandEvent& event); void OnNewBookmark(wxCommandEvent& event); void OnBookmarkBrowse(wxCommandEvent& event); CInterProcessMutex* m_pSiteManagerMutex; wxTreeItemId m_predefinedSites; wxTreeItemId m_ownSites; wxTreeItemId m_dropSource; wxTreeItemId m_contextMenuItem; bool MoveItems(wxTreeItemId source, wxTreeItemId target, bool copy); static TiXmlElement* GetElementByPath(TiXmlElement* pNode, std::list<wxString> &segments); // Initialized by GetSitesMenu public: struct _menu_data { wxString path; CSiteManagerItemData_Site* data; }; protected: static std::map<int, struct _menu_data> m_idMap; // The map maps event id's to sites static wxMenu* GetSitesMenu_Predefied(std::map<int, struct _menu_data> &idMap); CWindowStateManager* m_pWindowStateManager; wxNotebook *m_pNotebook_Site; wxNotebook *m_pNotebook_Bookmark; std::vector<_connected_site> *m_connected_sites; bool m_is_deleting; }; #endif //__SITEMANAGER_H__