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 201 202 203 204 205 206
|
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// copyright : (C) 2008 by Eran Ifrah
// file name : context_cpp.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 CONTEXT_CPP_H
#define CONTEXT_CPP_H
#include "context_base.h"
#include "cpptoken.h"
#include "ctags_manager.h"
#include <map>
#include "entry.h"
#include "cl_command_event.h"
class RefactorSource;
class ContextCpp : public ContextBase
{
std::map<wxString, int> m_propertyInt;
wxMenu *m_rclickMenu;
//images used by the C++ context
static wxBitmap m_classBmp;
static wxBitmap m_structBmp;
static wxBitmap m_namespaceBmp;
static wxBitmap m_variableBmp;
static wxBitmap m_tpyedefBmp;
static wxBitmap m_memberPrivateBmp;
static wxBitmap m_memberPublicBmp;
static wxBitmap m_memberProtectedeBmp;
static wxBitmap m_functionPrivateBmp;
static wxBitmap m_functionPublicBmp;
static wxBitmap m_functionProtectedeBmp;
static wxBitmap m_macroBmp;
static wxBitmap m_enumBmp;
static wxBitmap m_enumeratorBmp;
static wxBitmap m_cppFileBmp;
static wxBitmap m_hFileBmp;
static wxBitmap m_otherFileBmp;
protected:
void OnShowCodeNavMenu(clCodeCompletionEvent &e);
private:
bool TryOpenFile(const wxFileName &fileName, bool lookInEntireWorkspace = true);
bool IsJavaScript() const;
void DisplayCompletionBox(const std::vector<TagEntryPtr> &tags, const wxString &word, bool showFullDecl);
void DisplayFilesCompletionBox(const wxString &word);
bool DoGetFunctionBody(long curPos, long &blockStartPos, long &blockEndPos, wxString &content);
void Initialize();
void DoCodeComplete(long pos);
void DoCreateFile(const wxFileName &fn);
void DoUpdateCalltipHighlight();
public:
virtual void ColourContextTokens(const wxArrayString& workspaceTokens);
/**
* @brief
* @return
*/
virtual bool IsAtBlockComment() const;
/**
* @brief
* @return
*/
virtual bool IsAtLineComment() const;
ContextCpp(LEditor *container);
virtual bool IsDefaultContext() const;
virtual ~ContextCpp();
ContextCpp();
virtual ContextBase *NewInstance(LEditor *container);
virtual void CompleteWord();
virtual void CodeComplete(long pos = wxNOT_FOUND);
virtual void GotoDefinition();
virtual TagEntryPtr GetTagAtCaret(bool scoped, bool impl);
virtual wxString GetCurrentScopeName();
virtual void AutoIndent(const wxChar&);
virtual bool IsCommentOrString(long pos);
virtual bool IsComment(long pos);
virtual void AddMenuDynamicContent(wxMenu *menu);
virtual void RemoveMenuDynamicContent(wxMenu *menu);
virtual void ApplySettings();
virtual void RetagFile();
virtual wxString CallTipContent();
virtual void SetActive();
virtual void SemicolonShift();
// ctrl-click style navigation support
virtual int GetHyperlinkRange(int pos, int &start, int &end);
virtual void GoHyperlink(int start, int end, int type, bool alt);
//override swapfiles features
virtual void SwapFiles(const wxFileName &fileName);
//Event handlers
virtual void OnDwellEnd(wxStyledTextEvent &event);
virtual void OnDwellStart(wxStyledTextEvent &event);
virtual void OnDbgDwellEnd(wxStyledTextEvent &event);
virtual void OnDbgDwellStart(wxStyledTextEvent &event);
virtual void OnSciUpdateUI(wxStyledTextEvent &event);
virtual void OnFileSaved();
virtual void AutoAddComment();
//Capture menu events
//return this context specific right click menu
virtual wxMenu *GetMenu() {
return m_rclickMenu;
}
virtual void OnSwapFiles(wxCommandEvent &event);
virtual void OnInsertDoxyComment(wxCommandEvent &event);
virtual void OnCommentSelection(wxCommandEvent &event);
virtual void OnCommentLine(wxCommandEvent &event);
virtual void OnGenerateSettersGetters(wxCommandEvent &event);
virtual void OnFindImpl(wxCommandEvent &event);
virtual void OnFindDecl(wxCommandEvent &event);
virtual void OnGotoFunctionStart(wxCommandEvent &event);
virtual void OnGotoNextFunction(wxCommandEvent& event);
virtual void OnKeyDown(wxKeyEvent &event);
virtual void OnUpdateUI(wxUpdateUIEvent &event);
virtual void OnContextOpenDocument(wxCommandEvent &event);
virtual void OnAddIncludeFile(wxCommandEvent &e);
virtual void OnAddForwardDecl(wxCommandEvent &e);
virtual void OnMoveImpl(wxCommandEvent &e);
virtual void OnAddImpl(wxCommandEvent &e);
virtual void OnAddMultiImpl(wxCommandEvent &e);
virtual void OnOverrideParentVritualFunctions(wxCommandEvent &e);
virtual void OnRenameGlobalSymbol(wxCommandEvent &e);
virtual void OnRenameLocalSymbol (wxCommandEvent &e);
virtual void OnFindReferences (wxCommandEvent &e);
virtual void OnSyncSignatures(wxCommandEvent &e);
virtual void OnRetagFile(wxCommandEvent &e);
virtual void OnUserTypedXChars(const wxString &word);
virtual void OnCallTipClick(wxStyledTextEvent &e);
virtual void OnCalltipCancel();
DECLARE_EVENT_TABLE()
private:
wxString GetWordUnderCaret();
wxString GetFileImageString(const wxString &ext);
wxString GetImageString(const TagEntry &entry);
wxString GetExpression(long pos, bool onlyWord, LEditor *editor = NULL, bool forCC = true);
void DoGotoSymbol(TagEntryPtr tag);
bool IsIncludeStatement(const wxString &line, wxString *fileName = NULL, wxString *fileNameUpToCaret = NULL);
void RemoveDuplicates(std::vector<TagEntryPtr>& src, std::vector<TagEntryPtr>& target);
int FindLineToAddInclude();
void MakeCppKeywordsTags(const wxString &word, std::vector<TagEntryPtr> &tags);
void DoOpenWorkspaceFile();
void DoSetProjectPaths();
bool DoGetSingatureRange(int line, int &start, int &end, LEditor *ctrl);
public:
void DoMakeDoxyCommentString(DoxygenComment &dc);
private:
/**
* \brief try to find a swapped file for this rhs. The logic is based on the C++ coding conventions
* a swapped file for a.cpp will be a.h or a.hpp
* \param rhs input
* \param lhs output
* \return true if such sibling file exist, false otherwise
*/
bool FindSwappedFile(const wxFileName &rhs, wxString &lhs);
/**
* \brief replace list of tokens representd by li with 'word'
* \param li
* \return
*/
void ReplaceInFiles(const wxString &word, const std::list<CppToken> &li);
/**
* @brief format editor
* @param editor
*/
void DoFormatEditor(LEditor *editor);
/**
* @brief return position of the first C++ comment style on a line
* the line number is calculated from the 'from' value
* @return position or wxNOT_FOUND when not found
*/
int GetFirstCxxCommentPos(LEditor& editor, int from);
};
#endif // CONTEXT_CPP_H
|