File: clTreeCtrlPanel.h

package info (click to toggle)
codelite 12.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 95,112 kB
  • sloc: cpp: 424,040; ansic: 18,284; php: 9,569; lex: 4,186; yacc: 2,820; python: 2,294; sh: 312; makefile: 51; xml: 13
file content (167 lines) | stat: -rw-r--r-- 5,987 bytes parent folder | download
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
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// Copyright            : (C) 2015 Eran Ifrah
// File name            : clTreeCtrlPanel.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 CLTREECTRLPANEL_H
#define CLTREECTRLPANEL_H

#include "bitmap_loader.h"
#include "clFileViwerTreeCtrl.h"
#include "cl_command_event.h"
#include "cl_config.h"
#include "wxcrafter_plugin.h"
#include <imanager.h>

class clTreeCtrlPanelDefaultPage;
class WXDLLIMPEXP_SDK clTreeCtrlPanel : public clTreeCtrlPanelBase
{
protected:
    virtual void OnLinkEditor(wxCommandEvent& event);
    virtual void OnLinkEditorUI(wxUpdateUIEvent& event);
    BitmapLoader* m_bmpLoader;
    clConfig* m_config;
    wxString m_viewName;
    clTreeCtrlPanelDefaultPage* m_defaultView;
    wxString m_newfileTemplate;
    size_t m_newfileTemplateHighlightLen;
    int m_options;

public:
    enum {
        kShowHiddenFiles = (1 << 0),
        kShowHiddenFolders = (1 << 1),
        kLinkToEditor = (1 << 2),
    };

protected:
    void ToggleView();
    void RefreshNonTopLevelFolder(const wxTreeItemId& item);
    
public:
    clTreeCtrlPanel(wxWindow* parent);
    virtual ~clTreeCtrlPanel();

    /**
     * @brief set the tree options
     */
    void SetOptions(int options) { m_options = options; }

    /**
     * @brief set the new file template (default is "Untitled.txt")
     */
    void SetNewFileTemplate(const wxString& newfile, size_t charsToHighlight);

    void SetViewName(const wxString& viewName) { this->m_viewName = viewName; }
    const wxString& GetViewName() const { return m_viewName; }

    clConfig* GetConfig() { return m_config; }

    /**
     * @brief clear the view (i.e. close all top level folders)
     */
    void Clear();

    /**
     * @brief return the configuration tool used for storing information about
     * this tree. Override it to provide a custom configuration tool
     */
    void SetConfig(clConfig* config) { this->m_config = config; }

    /**
     * @brief add top level folder
     */
    void AddFolder(const wxString& path);

    /**
     * @brief return an info about the selected items in the tree
     * @return
     */
    TreeItemInfo GetSelectedItemInfo();

    /**
     * @brief return 2 arrays of the selected items
     * @param folders [output]
     * @param files [output]
     */
    void GetSelections(wxArrayString& folders, wxArrayString& files);

    /**
     * @brief select a given filename in the tree. Expand the tree if needed
     */
    bool ExpandToFile(const wxFileName& filename);
    
    /**
     * @brief return true if a folder is opened in this view
     */
    bool IsFolderOpened() const;
    
protected:
    void UpdateItemDeleted(const wxTreeItemId& item);
    void GetTopLevelFolders(wxArrayString& paths, wxArrayTreeItemIds& items) const;

    /**
     * @brief ensure that item is selected (single selection)
     */
    void SelectItem(const wxTreeItemId& item);
    /**
     * @brief return list of selected files and folders. In addition return the
     * tree ctrl items. You can always assume that the folders and the folderItems are of the same
     * size. Same for the file arrays
     */
    void GetSelections(wxArrayString& folders, wxArrayTreeItemIds& folderItems, wxArrayString& files,
                       wxArrayTreeItemIds& fileItems);

    // Make the event handler functions virtual
    // so any subclass could override them
    virtual void OnActiveEditorChanged(wxCommandEvent& event);
    virtual void OnFindInFilesShowing(clCommandEvent& event);
    virtual void OnInitDone(wxCommandEvent& event);
    virtual void OnContextMenu(wxTreeEvent& event);
    virtual void OnItemActivated(wxTreeEvent& event);
    virtual void OnItemExpanding(wxTreeEvent& event);
    virtual void OnCloseFolder(wxCommandEvent& event);
    virtual void OnNewFolder(wxCommandEvent& event);
    virtual void OnNewFile(wxCommandEvent& event);
    virtual void OnOpenFile(wxCommandEvent& event);
    virtual void OnOpenWithDefaultApplication(wxCommandEvent& event);
    virtual void OnRenameFile(wxCommandEvent& event);
    virtual void OnDeleteSelections(wxCommandEvent& event);
    virtual void OnFindInFilesFolder(wxCommandEvent& event);
    virtual void OnOpenContainingFolder(wxCommandEvent& event);
    virtual void OnOpenShellFolder(wxCommandEvent& event);
    virtual void OnFolderDropped(clCommandEvent& event);
    virtual void OnRefresh(wxCommandEvent& event);
    void OnOpenFolder(wxCommandEvent& event);
    // Helpers
    void DoExpandItem(const wxTreeItemId& parent, bool expand);
    void DoRenameItem(const wxTreeItemId& item, const wxString& oldname, const wxString& newname);

    bool IsTopLevelFolder(const wxTreeItemId& item);

    clTreeCtrlData* GetItemData(const wxTreeItemId& item) const;
    wxTreeItemId DoAddFolder(const wxTreeItemId& parent, const wxString& path);
    wxTreeItemId DoAddFile(const wxTreeItemId& parent, const wxString& path);
    void DoCloseFolder(const wxTreeItemId& item);
};
#endif // CLTREECTRLPANEL_H