1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
|
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// Copyright : (C) 2015 Eran Ifrah
// File name : php_workspace_view.h
//
// -------------------------------------------------------------------------
// A
// _____ _ _ _ _
// / __ \ | | | | (_) |
// | / \/ ___ __| | ___| | _| |_ ___
// | | / _ \ / _ |/ _ \ | | | __/ _ )
// | \__/\ (_) | (_| | __/ |___| | || __/
// \____/\___/ \__,_|\___\_____/_|\__\___|
//
// F i l e
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
#ifndef __php_workspace_view__
#define __php_workspace_view__
#include "clFileSystemEvent.h"
#include "php_event.h"
#include "php_ui.h"
#include "php_workspace.h"
#include "wxStringHash.h"
#include "wx_ordered_map.h"
#include <bitmap_loader.h>
#include <cl_command_event.h>
#include <set>
class IManager;
class ItemData;
class PHPWorkspaceView : public PHPWorkspaceViewBase
{
IManager* m_mgr;
std::unordered_map<wxString, wxTreeItemId> m_filesItems;
std::unordered_map<wxString, wxTreeItemId> m_foldersItems;
bool m_scanInProgress;
std::unordered_set<wxString> m_pendingSync;
wxArrayString m_draggedFiles;
bool m_fifFromContextMenu = false;
private:
enum {
ID_TOGGLE_AUTOMATIC_UPLOAD = wxID_HIGHEST + 1,
};
protected:
virtual void OnCollapse(wxCommandEvent& event);
void OnFolderDropped(clCommandEvent& event);
virtual void OnCollapseUI(wxUpdateUIEvent& event);
virtual void OnStartDebuggerListenerUI(wxUpdateUIEvent& event);
virtual void OnItemActivated(wxTreeEvent& event);
virtual void OnMenu(wxTreeEvent& event);
void OnWorkspaceLoaded(PHPEvent& event);
#if USE_SFTP
virtual void OnSetupRemoteUploadUI(wxUpdateUIEvent& event);
virtual void OnSetupRemoteUpload(wxCommandEvent& event);
virtual void OnSetupRemoteUploadMenu(wxCommandEvent& event);
#endif
virtual void OnWorkspaceOpenUI(wxUpdateUIEvent& event);
virtual void OnActiveProjectSettings(wxCommandEvent& event);
virtual void OnProjectSettings(wxCommandEvent& event);
virtual void OnActiveProjectSettingsUI(wxUpdateUIEvent& event);
void DoGetSelectedFiles(wxArrayString& files);
void DoGetSelectedFolders(wxArrayString& paths);
void DoSetStatusBarText(const wxString& text, int timeOut);
// Helpers
wxTreeItemId DoAddFolder(const wxString& project, const wxString& path);
wxTreeItemId DoCreateFile(const wxTreeItemId& parent, const wxString& fullpath, const wxString& content = "");
wxTreeItemId DoGetProject(const wxString& project);
PHPProject::Ptr_t DoGetProjectForItem(const wxTreeItemId& item);
wxTreeItemId DoGetSingleSelection();
void DoGetSelectedItems(wxArrayTreeItemIds& items);
wxString DoGetSelectedProject();
ItemData* DoGetItemData(const wxTreeItemId& item);
const ItemData* DoGetItemData(const wxTreeItemId& item) const;
bool IsFolderItem(const wxTreeItemId& item);
int DoGetItemImgIdx(const wxString& filename);
void DoDeleteSelectedFileItem();
#if USE_SFTP
void DoOpenSSHAccountManager();
#endif
/**
* @brief construct the project in the tree view
* @param projectItem
* @param project
*/
void DoBuildProjectNode(const wxTreeItemId& projectItem, PHPProject::Ptr_t project);
/**
* @brief return list of files and folders for a given project
*/
void DoGetFilesAndFolders(const wxString& projectName, wxArrayString& folders, wxArrayString& files);
void DoGetFilesAndFolders(const wxTreeItemId& parent, wxArrayString& folders, wxArrayString& files);
/**
* @brief open an item into an editor
*/
void DoOpenFile(const wxTreeItemId& item);
void DoSetProjectActive(const wxString& projectName);
/**
* @brief expand the tree view to highlight the active editor
*/
void DoExpandToActiveEditor();
protected:
// Handlers for PHPWorkspaceViewBase events.
// Menu handlers
DECLARE_EVENT_TABLE()
void OnCloseWorkspace(wxCommandEvent& e);
void OnReloadWorkspace(wxCommandEvent& e);
void OnNewFolder(wxCommandEvent& e);
void OnRenameFolder(wxCommandEvent& e);
void OnNewClass(wxCommandEvent& e);
void OnDeleteProject(wxCommandEvent& e);
void OnSetProjectActive(wxCommandEvent& e);
void OnNewFile(wxCommandEvent& e);
void OnDeleteFolder(wxCommandEvent& e);
void OnOpenInExplorer(wxCommandEvent& e);
void OnOpenShell(wxCommandEvent& e);
void OnRetagWorkspace(wxCommandEvent& e);
void OnAddExistingProject(wxCommandEvent& e);
void OnFindInFiles(wxCommandEvent& e);
void OnRemoveFile(wxCommandEvent& e);
void OnOpenFile(wxCommandEvent& e);
void OnRenameFile(wxCommandEvent& e);
void OnRenameWorkspace(wxCommandEvent& e);
void OnRunProject(wxCommandEvent& e);
void OnMakeIndexPHP(wxCommandEvent& e);
void OnSyncWorkspaceWithFileSystem(wxCommandEvent& e);
void OnSyncWorkspaceWithFileSystemUI(wxUpdateUIEvent& e);
void OnSyncProjectWithFileSystem(wxCommandEvent& e);
void OnSyncFolderWithFileSystem(wxCommandEvent& e);
void OnOpenWithDefaultApp(wxCommandEvent& e);
void OnRunActiveProject(clExecuteEvent& e);
void OnStopExecutedProgram(clExecuteEvent& e);
void OnIsProgramRunning(clExecuteEvent& e);
void OnEditorChanged(wxCommandEvent& e);
void OnFileRenamed(PHPEvent& e);
void OnWorkspaceRenamed(PHPEvent& e);
void OnFindInFilesShowing(clFindInFilesEvent& e);
void OnFindInFilesDismissed(clFindInFilesEvent& e);
void OnToggleAutoUpload(wxCommandEvent& e);
void OnStartDebuggerListener(wxCommandEvent& e);
void OnProjectSyncCompleted(clCommandEvent& event);
void OnFolderChanged(clFileSystemEvent& event);
void OnActiveProjectChanged(clProjectSettingsEvent& e);
// Php parser events
void OnPhpParserStarted(clParseEvent& event);
void OnPhpParserProgress(clParseEvent& event);
void OnPhpParserDone(clParseEvent& event);
// PHP Workspace events
void OnWorkspaceSyncStart(clCommandEvent& event);
void OnWorkspaceSyncEnd(clCommandEvent& event);
void OnFileSaveAs(clFileSystemEvent& event);
// DnD
void OnDragBegin(wxTreeEvent& event);
void OnDragEnd(wxTreeEvent& event);
public:
/** Constructor */
PHPWorkspaceView(wxWindow* parent, IManager* mgr);
virtual ~PHPWorkspaceView();
/**
* @brief create a new project
* @param name
*/
void CreateNewProject(PHPProject::CreateData cd);
void LoadWorkspaceView();
void UnLoadWorkspaceView();
void ReportParseThreadProgress(size_t curIndex, size_t total);
void ReportParseThreadDone();
void ReloadWorkspace(bool saveBeforeReload);
};
#endif // __php_workspace_view__
|