/
ExampleCodeEditor.vb
197 lines (165 loc) · 8.01 KB
/
ExampleCodeEditor.vb
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
Imports DevExpress.Utils
Imports DevExpress.XtraRichEdit
Imports DevExpress.XtraRichEdit.Internal
Imports System
Namespace DXRichEditControlAPISample
Public Class ExampleCodeEditor
Private ReadOnly codeEditorCs As IRichEditControl
Private ReadOnly codeEditorVb As IRichEditControl
Private ReadOnly codeEditorCsClass As IRichEditControl
Private ReadOnly codeEditorVbClass As IRichEditControl
'public string codeCSClasses;
Private current As ExampleLanguage
Private forceTextChangesCounter As Integer
'INSTANT VB NOTE: The field richEditTextChanged was renamed since Visual Basic does not allow fields to have the same name as other class members:
Private richEditTextChanged_Conflict As Boolean = False
'INSTANT VB NOTE: The field lastExampleCodeModifiedTime was renamed since Visual Basic does not allow fields to have the same name as other class members:
Private lastExampleCodeModifiedTime_Conflict As DateTime = DateTime.Now
Public Sub New(ByVal codeEditorCs As IRichEditControl, ByVal codeEditorVb As IRichEditControl, ByVal codeEditorCsClass As IRichEditControl, ByVal codeEditorVbClass As IRichEditControl)
Me.codeEditorCs = codeEditorCs
Me.codeEditorVb = codeEditorVb
Me.codeEditorCsClass = codeEditorCsClass
Me.codeEditorVbClass = codeEditorVbClass
AddHandler codeEditorCs.InnerControl.InitializeDocument, AddressOf InitializeSyntaxHighlightForCs
AddHandler codeEditorVb.InnerControl.InitializeDocument, AddressOf InitializeSyntaxHighlightForVb
AddHandler codeEditorCsClass.InnerControl.InitializeDocument, AddressOf InitializeSyntaxHighlightForCsClass
AddHandler codeEditorVbClass.InnerControl.InitializeDocument, AddressOf InitializeSyntaxHighlightForVBClass
End Sub
Public ReadOnly Property CurrentCodeEditor() As InnerRichEditControl
Get
If CurrentExampleLanguage = ExampleLanguage.Csharp Then
Return codeEditorCs.InnerControl
Else
Return codeEditorVb.InnerControl
End If
End Get
End Property
Public ReadOnly Property CurrentCodeClassEditor() As InnerRichEditControl
Get
If CurrentExampleLanguage = ExampleLanguage.Csharp Then
Return codeEditorCsClass.InnerControl
Else
Return codeEditorVbClass.InnerControl
End If
End Get
End Property
Public ReadOnly Property LastExampleCodeModifiedTime() As DateTime
Get
Return lastExampleCodeModifiedTime_Conflict
End Get
End Property
Public ReadOnly Property RichEditTextChanged() As Boolean
Get
Return richEditTextChanged_Conflict
End Get
End Property
Public Property CurrentExampleLanguage() As ExampleLanguage
Get
Return current
End Get
Set(ByVal value As ExampleLanguage)
Try
UnsubscribeRichEditEvents()
current = value
Finally
SubscribeRichEditEvent()
forceTextChangesCounter = 0 ' no changes in that richEdit (CurrentCodeEditor)
richEditTextChanged_Conflict = True
End Try
End Set
End Property
Private Sub richEditControl_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
If forceTextChangesCounter <= 0 Then
richEditTextChanged_Conflict = True
lastExampleCodeModifiedTime_Conflict = DateTime.Now
Else
forceTextChangesCounter -= 1
End If
End Sub
Public Function ShowExample(ByVal oldExample As CodeExample, ByVal newExample As CodeExample) As String
Dim richEditControlCs As InnerRichEditControl = codeEditorCs.InnerControl
Dim richEditControlVb As InnerRichEditControl = codeEditorVb.InnerControl
Dim richEditControlCsClass As InnerRichEditControl = codeEditorCsClass.InnerControl
Dim richEditControlVbClass As InnerRichEditControl = codeEditorVbClass.InnerControl
If oldExample IsNot Nothing Then
'save edited example
oldExample.CodeCS = richEditControlCs.Text
oldExample.CodeVB = richEditControlVb.Text
oldExample.CodeCsHelper = richEditControlCsClass.Text
oldExample.CodeVbHelper = richEditControlVbClass.Text
End If
Dim exampleCode As String = String.Empty
If newExample IsNot Nothing Then
Try
forceTextChangesCounter = 2
exampleCode = If(CurrentExampleLanguage = ExampleLanguage.Csharp, newExample.CodeCS, newExample.CodeVB)
richEditControlCs.Text = newExample.CodeCS
richEditControlVb.Text = newExample.CodeVB
richEditControlCsClass.Text = newExample.CodeCsHelper
richEditControlVbClass.Text = newExample.CodeVbHelper
richEditTextChanged_Conflict = False
Finally
richEditTextChanged_Conflict = True
End Try
End If
Return exampleCode
End Function
Private Sub UpdatePageBackground(ByVal codeEvaluated As Boolean)
CurrentCodeEditor.Document.SetPageBackground(If(codeEvaluated, DXColor.Empty, DXColor.FromArgb(&HFF, &HBC, &HC8)), True)
CurrentCodeClassEditor.Document.SetPageBackground(If(codeEvaluated, DXColor.Empty, DXColor.FromArgb(&HFF, &HBC, &HC8)), True)
End Sub
Friend Sub BeforeCompile()
UnsubscribeRichEditEvents()
End Sub
Friend Sub AfterCompile(ByVal codeExecutedWithoutExceptions As Boolean)
UpdatePageBackground(codeExecutedWithoutExceptions)
richEditTextChanged_Conflict = False
ResetLastExampleModifiedTime()
SubscribeRichEditEvent()
End Sub
Public Sub ResetLastExampleModifiedTime()
lastExampleCodeModifiedTime_Conflict = DateTime.Now
End Sub
Private Sub UnsubscribeRichEditEvents()
RemoveHandler CurrentCodeEditor.ContentChanged, AddressOf richEditControl_TextChanged
RemoveHandler CurrentCodeClassEditor.ContentChanged, AddressOf richEditControl_TextChanged
End Sub
Private Sub SubscribeRichEditEvent()
AddHandler CurrentCodeEditor.ContentChanged, AddressOf richEditControl_TextChanged
AddHandler CurrentCodeClassEditor.ContentChanged, AddressOf richEditControl_TextChanged
End Sub
Private Sub InitializeSyntaxHighlightForCs(ByVal sender As Object, ByVal e As EventArgs)
Dim syntaxHightlightInitializator As New SyntaxHightlightInitializeHelper()
syntaxHightlightInitializator.Initialize(codeEditorCs, CodeExampleDemoUtils.GetCodeExampleFileExtension(ExampleLanguage.Csharp))
DisableRichEditFeatures(codeEditorCs)
End Sub
Private Sub InitializeSyntaxHighlightForVb(ByVal sender As Object, ByVal e As EventArgs)
Dim syntaxHightlightInitializator As New SyntaxHightlightInitializeHelper()
syntaxHightlightInitializator.Initialize(codeEditorVb, CodeExampleDemoUtils.GetCodeExampleFileExtension(ExampleLanguage.VB))
DisableRichEditFeatures(codeEditorVb)
End Sub
Private Sub InitializeSyntaxHighlightForCsClass(ByVal sender As Object, ByVal e As EventArgs)
Dim syntaxHightlightInitializator As New SyntaxHightlightInitializeHelper()
syntaxHightlightInitializator.Initialize(codeEditorCsClass, CodeExampleDemoUtils.GetCodeExampleFileExtension(ExampleLanguage.Csharp))
DisableRichEditFeatures(codeEditorCsClass)
End Sub
Private Sub InitializeSyntaxHighlightForVBClass(ByVal sender As Object, ByVal e As EventArgs)
Dim syntaxHightlightInitializator As New SyntaxHightlightInitializeHelper()
syntaxHightlightInitializator.Initialize(codeEditorVbClass, CodeExampleDemoUtils.GetCodeExampleFileExtension(ExampleLanguage.VB))
DisableRichEditFeatures(codeEditorVbClass)
End Sub
Private Sub DisableRichEditFeatures(ByVal codeEditor As IRichEditControl)
Dim options As RichEditControlOptionsBase = codeEditor.InnerDocumentServer.Options
options.DocumentCapabilities.Hyperlinks = DocumentCapability.Disabled
options.DocumentCapabilities.Numbering.Bulleted = DocumentCapability.Disabled
options.DocumentCapabilities.Numbering.Simple = DocumentCapability.Disabled
options.DocumentCapabilities.Numbering.MultiLevel = DocumentCapability.Disabled
options.DocumentCapabilities.Tables = DocumentCapability.Disabled
'options.DocumentCapabilities.CharacterFormatting = DocumentCapability.Disabled;
'options.DocumentCapabilities.ParagraphFormatting = DocumentCapability.Disabled;
options.DocumentCapabilities.Bookmarks = DocumentCapability.Disabled
options.DocumentCapabilities.CharacterStyle = DocumentCapability.Disabled
options.DocumentCapabilities.ParagraphStyle = DocumentCapability.Disabled
End Sub
End Class
End Namespace