@@ -45,11 +45,17 @@ public class ScintillaControl : Control, IEventHandler
45
45
private ScrollBarEx vScrollBar ;
46
46
private ScrollBarEx hScrollBar ;
47
47
48
+ /// <summary>
49
+ /// Gets the custom vertical scroll bar.
50
+ /// </summary>
48
51
public ScrollBarEx VScrollBar
49
52
{
50
53
get { return this . vScrollBar ; }
51
54
}
52
55
56
+ /// <summary>
57
+ /// Gets the custom horizontal scroll bar.
58
+ /// </summary>
53
59
public ScrollBarEx HScrollBar
54
60
{
55
61
get { return this . hScrollBar ; }
@@ -96,15 +102,25 @@ public void HandleEvent(Object sender, NotifyEvent e, HandlingPriority priority)
96
102
{
97
103
if ( e . Type == EventType . ApplyTheme )
98
104
{
99
- vScrollBar . ValidateColors ( ) ;
100
- hScrollBar . ValidateColors ( ) ;
105
+ switch ( ScrollBarEx . SettingsMode )
106
+ {
107
+ case ScrollBarMode . Auto :
108
+ AutoAddRemoveScrollBars ( this ) ;
109
+ break ;
110
+ case ScrollBarMode . On :
111
+ this . vScrollBar . ValidateColors ( ) ;
112
+ this . hScrollBar . ValidateColors ( ) ;
113
+ break ;
114
+ case ScrollBarMode . Off :
115
+ break ;
116
+ }
101
117
}
102
118
}
103
119
104
120
/// <summary>
105
121
/// Init the custom scrollbars
106
122
/// </summary>
107
- private void InitScrollBars ( ScintillaControl sender )
123
+ private static void InitScrollBars ( ScintillaControl sender )
108
124
{
109
125
sender . vScrollBar = new ScrollBarEx ( ) ;
110
126
sender . vScrollBar . OverScroll = true ;
@@ -118,17 +134,35 @@ private void InitScrollBars(ScintillaControl sender)
118
134
sender . hScrollBar . Orientation = ScrollBarOrientation . Horizontal ;
119
135
sender . hScrollBar . ContextMenuStrip . Renderer = new DockPanelStripRenderer ( ) ;
120
136
sender . hScrollBar . Dock = DockStyle . Bottom ;
121
- //Color foreColor = PluginBase.MainForm.GetThemeColor("ScrollBar.ForeColor");
122
- /*if (foreColor != Color.Empty) */ sender . AddScrollBars ( sender ) ;
123
- PluginBase . MainForm . ThemeControls ( sender . vScrollBar ) ;
124
- PluginBase . MainForm . ThemeControls ( sender . hScrollBar ) ;
125
- EventManager . AddEventHandler ( this , EventType . ApplyTheme ) ;
137
+ sender . ScrollBarEx_SettingsChanged ( ScrollBarEx . SettingsMode ) ;
138
+ ScrollBarEx . SettingsChanged += sender . ScrollBarEx_SettingsChanged ;
139
+ EventManager . AddEventHandler ( sender , EventType . ApplyTheme ) ;
140
+ }
141
+
142
+ /// <summary>
143
+ /// Turn on/off the scroll bars according to the new settings value.
144
+ /// </summary>
145
+ /// <param name="value">A <see cref="ScrollBarMode"/> enum value.</param>
146
+ private void ScrollBarEx_SettingsChanged ( ScrollBarMode value )
147
+ {
148
+ switch ( value )
149
+ {
150
+ case ScrollBarMode . Off :
151
+ TurnOffScrollBars ( this ) ;
152
+ break ;
153
+ case ScrollBarMode . Auto :
154
+ AutoAddRemoveScrollBars ( this ) ;
155
+ break ;
156
+ case ScrollBarMode . On :
157
+ TurnOnScrollBars ( this ) ;
158
+ break ;
159
+ }
126
160
}
127
161
128
162
/// <summary>
129
163
/// Update the scrollbars on sci control ui update
130
164
/// </summary>
131
- private void OnScrollUpdate ( ScintillaControl sender )
165
+ private static void OnScrollUpdate ( ScintillaControl sender )
132
166
{
133
167
Int32 vMax = sender . LinesVisible ;
134
168
Int32 vPage = sender . LinesOnScreen ;
@@ -153,31 +187,73 @@ private void OnScrollUpdate(ScintillaControl sender)
153
187
/// </summary>
154
188
private void OnScrollBarScroll ( Object sender , ScrollEventArgs e )
155
189
{
156
- this . Painted -= this . OnScrollUpdate ;
190
+ this . Painted -= OnScrollUpdate ;
157
191
if ( e . ScrollOrientation == ScrollOrientation . VerticalScroll )
158
192
{
159
193
if ( e . OldValue != - 1 ) this . FirstVisibleLine = e . NewValue ;
160
194
}
161
195
else this . XOffset = this . hScrollBar . Value ;
162
- this . Painted += this . OnScrollUpdate ;
196
+ this . Painted += OnScrollUpdate ;
197
+ }
198
+
199
+ /// <summary>
200
+ /// Automatically add or remove scroll bars.
201
+ /// </summary>
202
+ /// <param name="sender">The <see cref="ScintillaControl"/> object.</param>
203
+ private static void AutoAddRemoveScrollBars ( ScintillaControl sender )
204
+ {
205
+ if ( PluginBase . MainForm . GetThemeColor ( "ScrollBar.ForeColor" ) . IsEmpty )
206
+ {
207
+ TurnOffScrollBars ( sender ) ;
208
+ }
209
+ else
210
+ {
211
+ TurnOnScrollBars ( sender ) ;
212
+ }
213
+ }
214
+
215
+ /// <summary>
216
+ /// Add scroll bars and theme them.
217
+ /// </summary>
218
+ /// <param name="sender">The <see cref="ScintillaControl"/> object.</param>
219
+ private static void TurnOnScrollBars ( ScintillaControl sender )
220
+ {
221
+ if ( ! sender . Controls . Contains ( sender . vScrollBar ) )
222
+ AddScrollBars ( sender ) ;
223
+
224
+ PluginBase . MainForm . ThemeControls ( sender . vScrollBar ) ;
225
+ PluginBase . MainForm . ThemeControls ( sender . hScrollBar ) ;
226
+ sender . vScrollBar . ValidateColors ( ) ;
227
+ sender . hScrollBar . ValidateColors ( ) ;
228
+ }
229
+
230
+ /// <summary>
231
+ /// Remove scroll bars from the container.
232
+ /// </summary>
233
+ /// <param name="sender">The <see cref="ScintillaControl"/> object.</param>
234
+ private static void TurnOffScrollBars ( ScintillaControl sender )
235
+ {
236
+ if ( sender . Controls . Contains ( sender . vScrollBar ) )
237
+ RemoveScrollBars ( sender ) ;
163
238
}
164
239
165
240
/// <summary>
166
241
/// Add controls to container
167
242
/// </summary>
168
- private void AddScrollBars ( ScintillaControl sender )
243
+ /// <param name="sender">The <see cref="ScintillaControl"/> object.</param>
244
+ private static void AddScrollBars ( ScintillaControl sender )
169
245
{
170
- Boolean vScroll = sender . IsVScrollBar ;
171
- Boolean hScroll = sender . IsHScrollBar ;
246
+ bool vScroll = sender . IsVScrollBar ;
247
+ bool hScroll = sender . IsHScrollBar ;
172
248
sender . IsVScrollBar = false ; // Hide builtin
173
249
sender . IsHScrollBar = false ; // Hide builtin
174
- sender . vScrollBar . VisibleChanged += OnResize ;
175
- sender . hScrollBar . VisibleChanged += OnResize ;
250
+ sender . vScrollBar . VisibleChanged += sender . OnResize ;
251
+ sender . hScrollBar . VisibleChanged += sender . OnResize ;
176
252
sender . vScrollBar . Scroll += sender . OnScrollBarScroll ;
177
253
sender . hScrollBar . Scroll += sender . OnScrollBarScroll ;
178
254
sender . Controls . Add ( sender . hScrollBar ) ;
179
255
sender . Controls . Add ( sender . vScrollBar ) ;
180
- sender . Painted += sender . OnScrollUpdate ;
256
+ sender . Painted += OnScrollUpdate ;
181
257
sender . IsVScrollBar = vScroll ;
182
258
sender . IsHScrollBar = hScroll ;
183
259
sender . OnResize ( null , null ) ;
@@ -186,17 +262,18 @@ private void AddScrollBars(ScintillaControl sender)
186
262
/// <summary>
187
263
/// Remove controls from container
188
264
/// </summary>
189
- private void RemoveScrollBars ( ScintillaControl sender )
265
+ /// <param name="sender">The <see cref="ScintillaControl"/> object.</param>
266
+ private static void RemoveScrollBars ( ScintillaControl sender )
190
267
{
191
- Boolean vScroll = sender . IsVScrollBar ;
192
- Boolean hScroll = sender . IsHScrollBar ;
193
- sender . vScrollBar . VisibleChanged -= OnResize ;
194
- sender . hScrollBar . VisibleChanged -= OnResize ;
268
+ bool vScroll = sender . IsVScrollBar ;
269
+ bool hScroll = sender . IsHScrollBar ;
270
+ sender . vScrollBar . VisibleChanged -= sender . OnResize ;
271
+ sender . hScrollBar . VisibleChanged -= sender . OnResize ;
195
272
sender . vScrollBar . Scroll -= sender . OnScrollBarScroll ;
196
273
sender . hScrollBar . Scroll -= sender . OnScrollBarScroll ;
197
274
sender . Controls . Remove ( sender . hScrollBar ) ;
198
275
sender . Controls . Remove ( sender . vScrollBar ) ;
199
- sender . Painted -= sender . OnScrollUpdate ;
276
+ sender . Painted -= OnScrollUpdate ;
200
277
sender . IsVScrollBar = vScroll ;
201
278
sender . IsHScrollBar = hScroll ;
202
279
sender . OnResize ( null , null ) ;
@@ -228,7 +305,7 @@ public ScintillaControl(string fullpath)
228
305
DoubleClick += new DoubleClickHandler ( OnBlockSelect ) ;
229
306
CharAdded += new CharAddedHandler ( OnSmartIndent ) ;
230
307
Resize += new EventHandler ( OnResize ) ;
231
- this . InitScrollBars ( this ) ;
308
+ InitScrollBars ( this ) ;
232
309
}
233
310
catch ( Exception ex )
234
311
{
0 commit comments