File: php_workspace_view.h

package info (click to toggle)
codelite 17.0.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 136,244 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (200 lines) | stat: -rw-r--r-- 7,556 bytes parent folder | download | duplicates (3)
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__