xref: /MusicPlayer2/MusicPlayer2/ScintillaEditView.h (revision 0831e654c18161734f7e81999e58aeaeda9386f1)
18af74909SZhong Yang #pragma once
28af74909SZhong Yang 
38af74909SZhong Yang #include "../scintilla/include/SciLexer.h"
48af74909SZhong Yang #include "../scintilla/include/Scintilla.h"
5*0831e654SZhong Yang #include "ColorConvert.h"
68af74909SZhong Yang 
78af74909SZhong Yang // CScintillaEditView 视图
88af74909SZhong Yang 
98af74909SZhong Yang #define SCINTILLA_MARGIN_LINENUMBER 0
108af74909SZhong Yang #define MARGIN_FOLD_INDEX 1
118af74909SZhong Yang 
128af74909SZhong Yang class CScintillaEditView : public CView
138af74909SZhong Yang {
148af74909SZhong Yang 	DECLARE_DYNCREATE(CScintillaEditView)
158af74909SZhong Yang 
168af74909SZhong Yang protected:
178af74909SZhong Yang 	CScintillaEditView();           // 动态创建所使用的受保护的构造函数
188af74909SZhong Yang 	virtual ~CScintillaEditView();
198af74909SZhong Yang 
208af74909SZhong Yang public:
218af74909SZhong Yang     struct KeepCurrentLine
228af74909SZhong Yang     {
238af74909SZhong Yang         KeepCurrentLine(CScintillaEditView* view)
248af74909SZhong Yang             : m_view(view)
258af74909SZhong Yang         {
268af74909SZhong Yang             //保存当前行
278af74909SZhong Yang             current_line = m_view->GetFirstVisibleLine();
288af74909SZhong Yang         }
298af74909SZhong Yang         ~KeepCurrentLine()
308af74909SZhong Yang         {
318af74909SZhong Yang             //恢复当前行
328af74909SZhong Yang             m_view->SetFirstVisibleLine(current_line);
338af74909SZhong Yang         }
348af74909SZhong Yang 
358af74909SZhong Yang         CScintillaEditView* m_view{};
368af74909SZhong Yang         int current_line{};
378af74909SZhong Yang     };
388af74909SZhong Yang 
398af74909SZhong Yang 	virtual void OnDraw(CDC* pDC);      // 重写以绘制该视图
408af74909SZhong Yang #ifdef _DEBUG
418af74909SZhong Yang 	virtual void AssertValid() const;
428af74909SZhong Yang #ifndef _WIN32_WCE
438af74909SZhong Yang 	virtual void Dump(CDumpContext& dc) const;
448af74909SZhong Yang #endif
458af74909SZhong Yang #endif
468af74909SZhong Yang 
478af74909SZhong Yang     void SetText(const wstring& text);
488af74909SZhong Yang     void GetText(wstring& text);
498af74909SZhong Yang     const wchar_t* GetText(int& size);      //获取文本(返回字符串指针,需要自行释放内存)
508af74909SZhong Yang     const char* GetTextUtf8(int& size);      //获取UTF8格式文本(返回字符串指针,需要自行释放内存)
518af74909SZhong Yang     void SetFontFace(const wchar_t* font_face);
528af74909SZhong Yang     void SetFontSize(int font_size);
538af74909SZhong Yang     void SetTabSize(int tab_size);
548af74909SZhong Yang     void SetSel(int start, int end, const wstring& edit_str);        //设置选中范围(位置以字符为单位)
558af74909SZhong Yang     void GetSel(int& start, int& end);      //获取选中范围(位置以字符为单位)
568af74909SZhong Yang     void SetBackgroundColor(COLORREF color);
578af74909SZhong Yang     void SetReadOnly(bool read_only);
588af74909SZhong Yang     bool IsReadOnly();
598af74909SZhong Yang 
608af74909SZhong Yang     void Undo();
618af74909SZhong Yang     void Redo();
628af74909SZhong Yang     void Cut();
638af74909SZhong Yang     void Copy();
648af74909SZhong Yang     void Paste();
658af74909SZhong Yang     void SelectAll();
668af74909SZhong Yang     void EmptyUndoBuffer();     //清空撤销缓存
678af74909SZhong Yang 
688af74909SZhong Yang     void SetWordWrap(bool word_wrap);
698af74909SZhong Yang 
708af74909SZhong Yang     bool IsEditChangeNotificationEnable();
718af74909SZhong Yang 
728af74909SZhong Yang     bool CanUndo();
738af74909SZhong Yang     bool CanRedo();
748af74909SZhong Yang     bool CanPaste();
758af74909SZhong Yang     bool IsSelectionEmpty();
768af74909SZhong Yang     bool IsModified();
778af74909SZhong Yang     void SetSavePoint();
788af74909SZhong Yang 
798af74909SZhong Yang     void SetLineNumberWidth(int width);
808af74909SZhong Yang     void ShowLineNumber(bool show);
818af74909SZhong Yang     void SetLineNumberColor(COLORREF color);
828af74909SZhong Yang 
838af74909SZhong Yang     int GetZoom();
848af74909SZhong Yang     void SetZoom(int zoom);
858af74909SZhong Yang 
868af74909SZhong Yang     enum eEolMode
878af74909SZhong Yang     {
888af74909SZhong Yang         EOL_CRLF,
898af74909SZhong Yang         EOL_CR,
908af74909SZhong Yang         EOL_LF
918af74909SZhong Yang     };
928af74909SZhong Yang     void SetEolMode(eEolMode eolMode);
938af74909SZhong Yang     eEolMode GetEolMode();
948af74909SZhong Yang 
958af74909SZhong Yang     void ConvertEolMode(eEolMode eolMode);
968af74909SZhong Yang 
978af74909SZhong Yang     void SetViewEol(bool show);
988af74909SZhong Yang 
998af74909SZhong Yang     int GetFirstVisibleLine();
1008af74909SZhong Yang     void SetFirstVisibleLine(int line);
1018af74909SZhong Yang 
1028af74909SZhong Yang     //语法解析
1038af74909SZhong Yang     void SetLexer(int lexer);
1048af74909SZhong Yang     void SetKeywords(int id, const char* keywords);
1058af74909SZhong Yang     void SetSyntaxColor(int id, COLORREF color);
1068af74909SZhong Yang     void SetSyntaxFontStyle(int id, bool bold, bool italic);
1078af74909SZhong Yang     void SetLexerNormalText();
1088af74909SZhong Yang 
1098af74909SZhong Yang     static eEolMode JudgeEolMode(const wstring& str);
1108af74909SZhong Yang     static int CharactorPosToBytePos(int pos, const wchar_t* str, size_t size);     //将字符的位置转换成字节的位置(使用UTF8编码)
1118af74909SZhong Yang     static int BytePosToCharactorPos(int pos, const char* str, size_t size);     //将字节的位置转换成字符的位置(使用UTF8编码)
1128af74909SZhong Yang 
1138af74909SZhong Yang     void SetContextMenu(CMenu* pMenu, CWnd* pMenuOwner);
1148af74909SZhong Yang 
115*0831e654SZhong Yang     void SetLexerLyric(ColorTable theme_color);       //设置LRC语法解析
11661ef93eeSZhong Yang 
1178af74909SZhong Yang private:
1188af74909SZhong Yang 
1198af74909SZhong Yang private:
1208af74909SZhong Yang     bool m_change_notification_enable = true;      //如果为false,则不响应文本改变消息
1218af74909SZhong Yang     int m_line_number_width = 36;
1228af74909SZhong Yang     COLORREF m_line_number_color{};
1238af74909SZhong Yang     COLORREF m_background_color{ RGB(255,255,255) };
1248af74909SZhong Yang 
1258af74909SZhong Yang     CMenu* m_pMenu{};
1268af74909SZhong Yang     CWnd* m_pContextMenuOwner{};
1278af74909SZhong Yang 
1288af74909SZhong Yang protected:
1298af74909SZhong Yang 	DECLARE_MESSAGE_MAP()
1308af74909SZhong Yang     virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
1318af74909SZhong Yang public:
1328af74909SZhong Yang     afx_msg void OnPaint();
1338af74909SZhong Yang     virtual void PreSubclassWindow();
1348af74909SZhong Yang     virtual void OnInitialUpdate();
1358af74909SZhong Yang     afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
1368af74909SZhong Yang };
1378af74909SZhong Yang 
1388af74909SZhong Yang 
139