1 {
2  ***************************************************************************
3  *                                                                         *
4  *   This source is free software; you can redistribute it and/or modify   *
5  *   it under the terms of the GNU General Public License as published by  *
6  *   the Free Software Foundation; either version 2 of the License, or     *
7  *   (at your option) any later version.                                   *
8  *                                                                         *
9  *   This code is distributed in the hope that it will be useful, but      *
10  *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
11  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
12  *   General Public License for more details.                              *
13  *                                                                         *
14  *   A copy of the GNU General Public License is available on the World    *
15  *   Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also      *
16  *   obtain it by writing to the Free Software Foundation,                 *
17  *   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA.   *
18  *                                                                         *
19  ***************************************************************************
20 }
21 unit editor_mouseaction_options;
22 
23 {$mode objfpc}{$H+}
24 
25 interface
26 
27 uses
28   sysutils, math,
29   // LCL
30   LCLProc, StdCtrls, ExtCtrls, Classes, Forms, ComCtrls,
31   // LazControls
32   DividerBevel,
33   // SynEdit
34   SynEdit, SynEditTypes,
35   // IdeIntf
36   IDEOptionsIntf, IDEOptEditorIntf,
37   // IDE
38   EditorOptions, LazarusIDEStrConsts, editor_mouseaction_options_advanced;
39 
40 type
41 
42   { TEditorMouseOptionsFrame }
43 
44   TEditorMouseOptionsFrame = class(TAbstractIDEOptionsEditor)
45     chkGutterTextLines: TCheckBox;
46     dropWheelHoriz: TComboBox;
47     dropWheelAltHoriz: TComboBox;
48     dropWheelAltCtrlHoriz: TComboBox;
49     dropWheelCtrlHoriz: TComboBox;
50     dropWheelShiftHoriz: TComboBox;
51     dropWheelShiftAltHoriz: TComboBox;
52     dropWheelShiftAltCtrlHoriz: TComboBox;
53     dropWheelShiftCtrlHoriz: TComboBox;
54     GutterLeftRadio3: TRadioButton;
55     lblWheel: TLabel;
56     lblWheelHoriz: TLabel;
57     lblWheelAlt: TLabel;
58     lblWheelAltHoriz: TLabel;
59     lblWheelAltCtrlHoriz: TLabel;
60     lblWheelCtrl: TLabel;
61     lblWheelCtrlHoriz: TLabel;
62     lblWheelShift: TLabel;
63     lblWheelAltCtrl: TLabel;
64     lblWheelShiftHoriz: TLabel;
65     lblWheelShiftAlt: TLabel;
66     lblWheelShiftAltHoriz: TLabel;
67     lblWheelShiftAltCtrlHoriz: TLabel;
68     lblWheelShiftCtrl: TLabel;
69     lblWheelShiftAltCtrl: TLabel;
70     dropWheel: TComboBox;
71     dropWheelAlt: TComboBox;
72     dropWheelCtrl: TComboBox;
73     dropWheelShift: TComboBox;
74     dropWheelAltCtrl: TComboBox;
75     dropWheelShiftAlt: TComboBox;
76     dropWheelShiftCtrl: TComboBox;
77     dropWheelShiftAltCtrl: TComboBox;
78     lblMiddle: TLabel;
79     lblMiddleAlt: TLabel;
80     lblMiddleCtrl: TLabel;
81     lblMiddleShift: TLabel;
82     lblMiddleAltCtrl: TLabel;
83     lblMiddleShiftAlt: TLabel;
84     lblMiddleShiftCtrl: TLabel;
85     lblMiddleShiftAltCtrl: TLabel;
86     dropMiddle: TComboBox;
87     dropMiddleAlt: TComboBox;
88     dropMiddleCtrl: TComboBox;
89     dropMiddleShift: TComboBox;
90     dropMiddleAltCtrl: TComboBox;
91     dropMiddleShiftAlt: TComboBox;
92     dropMiddleShiftCtrl: TComboBox;
93     dropMiddleShiftAltCtrl: TComboBox;
94     lblRight: TLabel;
95     lblRightAlt: TLabel;
96     lblRightCtrl: TLabel;
97     lblRightShift: TLabel;
98     lblRightAltCtrl: TLabel;
99     lblRightShiftAlt: TLabel;
100     lblRightShiftCtrl: TLabel;
101     lblRightShiftAltCtrl: TLabel;
102     dropRight: TComboBox;
103     dropRightAlt: TComboBox;
104     dropRightCtrl: TComboBox;
105     dropRightShift: TComboBox;
106     dropRightAltCtrl: TComboBox;
107     dropRightShiftAlt: TComboBox;
108     dropRightShiftCtrl: TComboBox;
109     dropRightShiftAltCtrl: TComboBox;
110     lblExtra1: TLabel;
111     lblExtra1Alt: TLabel;
112     lblExtra1Ctrl: TLabel;
113     lblExtra1Shift: TLabel;
114     lblExtra1AltCtrl: TLabel;
115     lblExtra1ShiftAlt: TLabel;
116     lblExtra1ShiftCtrl: TLabel;
117     lblExtra1ShiftAltCtrl: TLabel;
118     dropExtra1: TComboBox;
119     dropExtra1Alt: TComboBox;
120     dropExtra1Ctrl: TComboBox;
121     dropExtra1Shift: TComboBox;
122     dropExtra1AltCtrl: TComboBox;
123     dropExtra1ShiftAlt: TComboBox;
124     dropExtra1ShiftCtrl: TComboBox;
125     dropExtra1ShiftAltCtrl: TComboBox;
126     lblExtra2: TLabel;
127     lblExtra2Alt: TLabel;
128     lblExtra2Ctrl: TLabel;
129     lblExtra2Shift: TLabel;
130     lblExtra2AltCtrl: TLabel;
131     lblExtra2ShiftAlt: TLabel;
132     lblExtra2ShiftCtrl: TLabel;
133     lblExtra2ShiftAltCtrl: TLabel;
134     dropExtra2: TComboBox;
135     dropExtra2Alt: TComboBox;
136     dropExtra2Ctrl: TComboBox;
137     dropExtra2Shift: TComboBox;
138     dropExtra2AltCtrl: TComboBox;
139     dropExtra2ShiftAlt: TComboBox;
140     dropExtra2ShiftCtrl: TComboBox;
141     dropExtra2ShiftAltCtrl: TComboBox;
142     lblLeftDouble: TLabel;
143     lblLeftTriple: TLabel;
144     lblLeftQuad: TLabel;
145     lblLeftDoubleShift: TLabel;
146     lblLeftDoubleAlt: TLabel;
147     lblLeftDoubleCtrl: TLabel;
148     dropLeftDouble: TComboBox;
149     dropLeftTriple: TComboBox;
150     dropLeftQuad: TComboBox;
151     dropLeftShiftDouble: TComboBox;
152     dropLeftAltDouble: TComboBox;
153     dropLeftCtrlDouble: TComboBox;
154     lblWheelShiftCtrlHoriz: TLabel;
155     PageHorizWheel: TPage;
156     PageExtra2: TPage;
157     PageExtra1: TPage;
158     PageRight: TPage;
159     ScrollBoxExtra2: TScrollBox;
160     ScrollBoxExtra1: TScrollBox;
161     ScrollBoxRight: TScrollBox;
162     ScrollBoxWheelHoriz: TScrollBox;
163     ShiftLeftLabel: TLabel;
164     AltCtrlLeftLabel: TLabel;
165     CtrLLeftLabel: TLabel;
166     ShiftCtrlLeftLabel: TLabel;
167     ShiftAltLeftLabel: TLabel;
168     ShiftAltCtrlLeftLabel: TLabel;
169     BottomDivider: TBevel;
170     chkPredefinedScheme: TCheckBox;
171     AltLeftLabel: TLabel;
172     dropAltLeft: TComboBox;
173     dropAltCtrlLeft: TComboBox;
174     dropShiftAltLeft: TComboBox;
175     dropShiftCtrlLeft: TComboBox;
176     dropShiftAltCtrlLeft: TComboBox;
177     dropShiftLeft: TComboBox;
178     PageLeftDbl: TPage;
179     PageLeftMod: TPage;
180     ScrollBoxMiddle: TScrollBox;
181     ScrollBoxWheel: TScrollBox;
182     ScrollBoxLeftMod: TScrollBox;
183     ScrollBoxLeftDbl: TScrollBox;
184     TextDividerLabel: TDividerBevel;
185     GutterDividerLabel: TDividerBevel;
186     GenericDividerLabel: TDividerBevel;
187     dropCtrlLeft: TComboBox;
188     DiffLabel: TLabel;
189     dropUserSchemes: TComboBox;
190     GutterLeftRadio1: TRadioButton;
191     GutterLeftRadio2: TRadioButton;
192     HideMouseCheckBox: TCheckBox;
193     Notebook1: TNotebook;
194     PageMiddle: TPage;
195     PageWheel: TPage;
196     ToolBar1: TToolBar;
197     ToolBtnRight: TToolButton;
198     ToolBtnExtra1: TToolButton;
199     ToolBtnExtra2: TToolButton;
200     ToolBtnMiddle: TToolButton;
201     ToolBtnWheel: TToolButton;
202     ToolBtnLeftMod: TToolButton;
203     ToolBtnLeftMulti: TToolButton;
204     pnlBottom: TPanel;
205     PanelGutter: TPanel;
206     PanelTextCheckBox: TPanel;
207     pnlAllGutter: TPanel;
208     pnlAllText: TPanel;
209     pnlUserSchemes: TPanel;
210     ResetAllButton: TButton;
211     ResetGutterButton: TButton;
212     ResetTextButton: TButton;
213     RightMoveCaret: TCheckBox;
214     TextDrag: TCheckBox;
215     RadioGroup1: TRadioGroup;
216     TextLeft: TCheckGroup;
217     TextMiddle: TRadioGroup;
218     GutterLeft: TRadioGroup;
219     ToolBtnHorizWheel: TToolButton;
220     WarnLabel: TLabel;
221     procedure CheckOrRadioChange(Sender: TObject);
222     procedure chkPredefinedSchemeChange(Sender: TObject);
223     procedure dropUserSchemesChange(Sender: TObject);
224     procedure dropUserSchemesKeyDown(Sender: TObject; var {%H-}Key: Word; {%H-}Shift: TShiftState);
225     procedure ResetGutterButtonClick(Sender: TObject);
226     procedure ResetTextButtonClick(Sender: TObject);
227     procedure ResetAllButtonClick(Sender: TObject);
228     procedure ToolBtnMiddleClick(Sender: TObject);
229   private
230     FDialog: TAbstractOptionsEditorDialog;
231     FOptions: TAbstractIDEOptions;
232     FTempMouseSettings: TEditorMouseOptions;
233     FInClickHandler: Integer;
234     procedure UpdateButtons;
IsUserSchemeChangednull235     function  IsUserSchemeChanged: Boolean;
IsTextSettingsChangednull236     function  IsTextSettingsChanged: Boolean;
IsGutterSettingsChangednull237     function  IsGutterSettingsChanged: Boolean;
238     procedure SaveUserScheme;
239     procedure SaveTextSettings;
240     procedure SaveGutterSettings;
241   protected
242     procedure SetVisible(Value: Boolean); override;
IdxToDoubleMouseOptButtonActionnull243     function IdxToDoubleMouseOptButtonAction(AIdx: integer): TMouseOptButtonAction;
244     procedure CheckForShiftChange(Sender: TObject);
245   public
246     //constructor Create(AOwner: TComponent); override;
247     //destructor Destroy; override;
GetTitlenull248     function GetTitle: String; override;
249     procedure Setup(ADialog: TAbstractOptionsEditorDialog); override;
250     procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
251     procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
SupportedOptionsClassnull252     class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
DefaultCollapseChildNodesnull253     class function DefaultCollapseChildNodes: Boolean; override;
254   end;
255 
256 implementation
257 
258 {$R *.lfm}
259 
260 { TEditorMouseOptionsFrame }
261 
262 procedure TEditorMouseOptionsFrame.CheckOrRadioChange(Sender: TObject);
263 begin
264   if FInClickHandler > 0 then exit;
265   Inc(FInClickHandler);
266   try
267     if FTempMouseSettings.IsPresetEqualToMouseActions then begin
268       // write settings to conf (and reset conf to settings)
269       SaveGutterSettings;
270       SaveTextSettings;
271     end;
272     UpdateButtons;
273   finally
274     Dec(FInClickHandler);
275   end;
276   if Sender <> nil then
277     CheckForShiftChange(Sender);
278 end;
279 
280 procedure TEditorMouseOptionsFrame.UpdateButtons;
281 begin
282     if FTempMouseSettings.IsPresetEqualToMouseActions then begin
283       ResetTextButton.Visible   := False;
284       ResetGutterButton.Visible := False;
285       ResetAllButton.Visible    := False;
286       WarnLabel.Visible := False;
287       DiffLabel.Visible := False;
288       BottomDivider.Visible := False;
289     end
290     else begin
291       ResetTextButton.Visible   := (FTempMouseSettings.SelectedUserScheme = '') and IsTextSettingsChanged;
292       ResetGutterButton.Visible := (FTempMouseSettings.SelectedUserScheme = '') and IsGutterSettingsChanged;
293       ResetAllButton.Visible    := True; // ResetTextButton.Enabled or ResetGutterButton.Enabled;
294       WarnLabel.Visible := (IsTextSettingsChanged or IsGutterSettingsChanged) and
295                            ( (FTempMouseSettings.SelectedUserScheme = '') or
296                              IsUserSchemeChanged );
297       DiffLabel.Visible := (not WarnLabel.Visible);
298       BottomDivider.Visible := True;
299     end;
300 end;
301 
302 procedure TEditorMouseOptionsFrame.dropUserSchemesChange(Sender: TObject);
303 begin
304   if Sender <> nil then begin;
305     chkPredefinedScheme.Checked := dropUserSchemes.ItemIndex > 0;
306     if dropUserSchemes.ItemIndex > 0 then
307       dropUserSchemes.tag := dropUserSchemes.ItemIndex;
308   end;
309   pnlAllGutter.Enabled := dropUserSchemes.ItemIndex = 0;
310   pnlAllText.Enabled   := dropUserSchemes.ItemIndex = 0;
311   if FTempMouseSettings.IsPresetEqualToMouseActions then
312     SaveUserScheme;
313   UpdateButtons;
314 end;
315 
316 procedure TEditorMouseOptionsFrame.dropUserSchemesKeyDown(Sender: TObject; var Key: Word;
317   Shift: TShiftState);
318 begin
319   dropUserSchemesChange(Sender);
320 end;
321 
322 procedure TEditorMouseOptionsFrame.chkPredefinedSchemeChange(Sender: TObject);
323 begin
324   if chkPredefinedScheme.Checked then
325     dropUserSchemes.ItemIndex := Max(dropUserSchemes.Tag, 1)
326   else
327     dropUserSchemes.ItemIndex := 0;
328   dropUserSchemesChange(nil);
329 end;
330 
331 procedure TEditorMouseOptionsFrame.ResetGutterButtonClick(Sender: TObject);
332 begin
333   SaveGutterSettings;
334   UpdateButtons;
335 end;
336 
337 procedure TEditorMouseOptionsFrame.ResetTextButtonClick(Sender: TObject);
338 begin
339   SaveTextSettings;
340   UpdateButtons;
341 end;
342 
343 procedure TEditorMouseOptionsFrame.ResetAllButtonClick(Sender: TObject);
344 begin
345   SaveGutterSettings;
346   SaveTextSettings;
347   SaveUserScheme; // must be last
348   UpdateButtons;
349 end;
350 
351 procedure TEditorMouseOptionsFrame.ToolBtnMiddleClick(Sender: TObject);
352 begin
353   if not(Sender is TToolButton) then exit;
354   Notebook1.PageIndex := TToolButton(Sender).Tag;
355 end;
356 
TEditorMouseOptionsFrame.IsUserSchemeChangednull357 function TEditorMouseOptionsFrame.IsUserSchemeChanged: Boolean;
358 begin
359   Result := FTempMouseSettings.SelectedUserSchemeIndex <>
360     PtrInt(dropUserSchemes.Items.Objects[dropUserSchemes.ItemIndex]);
361 end;
362 
TEditorMouseOptionsFrame.IsTextSettingsChangednull363 function TEditorMouseOptionsFrame.IsTextSettingsChanged: Boolean;
364 begin
365   Result := not (
366     (FTempMouseSettings.TextDrag      = TextDrag.Checked) and
367     (FTempMouseSettings.TextRightMoveCaret = RightMoveCaret.Checked) and
368 
369     (FTempMouseSettings.TextAltLeftClick          = TMouseOptButtonAction(dropAltLeft.ItemIndex)) and
370     (FTempMouseSettings.TextCtrlLeftClick         = TMouseOptButtonAction(dropCtrlLeft.ItemIndex)) and
371     (FTempMouseSettings.TextAltCtrlLeftClick      = TMouseOptButtonAction(dropAltCtrlLeft.ItemIndex)) and
372     (FTempMouseSettings.TextShiftLeftClick        = TMouseOptButtonAction(dropShiftLeft.ItemIndex)) and
373     (FTempMouseSettings.TextShiftAltLeftClick     = TMouseOptButtonAction(dropShiftAltLeft.ItemIndex)) and
374     (FTempMouseSettings.TextShiftCtrlLeftClick    = TMouseOptButtonAction(dropShiftCtrlLeft.ItemIndex)) and
375     (FTempMouseSettings.TextShiftAltCtrlLeftClick = TMouseOptButtonAction(dropShiftAltCtrlLeft.ItemIndex)) and
376 
377     (FTempMouseSettings.TextDoubleLeftClick      = IdxToDoubleMouseOptButtonAction(dropLeftDouble.ItemIndex)) and
378     (FTempMouseSettings.TextTripleLeftClick      = IdxToDoubleMouseOptButtonAction(dropLeftTriple.ItemIndex)) and
379     (FTempMouseSettings.TextQuadLeftClick        = IdxToDoubleMouseOptButtonAction(dropLeftQuad.ItemIndex)) and
380     (FTempMouseSettings.TextShiftDoubleLeftClick = IdxToDoubleMouseOptButtonAction(dropLeftShiftDouble.ItemIndex)) and
381     (FTempMouseSettings.TextAltDoubleLeftClick   = IdxToDoubleMouseOptButtonAction(dropLeftAltDouble.ItemIndex)) and
382     (FTempMouseSettings.TextCtrlDoubleLeftClick  = IdxToDoubleMouseOptButtonAction(dropLeftCtrlDouble.ItemIndex)) and
383 
384     (FTempMouseSettings.TextMiddleClick      = TMouseOptButtonAction(dropMiddle.ItemIndex)) and
385     (FTempMouseSettings.TextShiftMiddleClick = TMouseOptButtonAction(dropMiddleShift.ItemIndex)) and
386     (FTempMouseSettings.TextAltMiddleClick   = TMouseOptButtonAction(dropMiddleAlt.ItemIndex)) and
387     (FTempMouseSettings.TextCtrlMiddleClick  = TMouseOptButtonAction(dropMiddleCtrl.ItemIndex)) and
388     (FTempMouseSettings.TextAltCtrlMiddleClick      = TMouseOptButtonAction(dropMiddleAltCtrl.ItemIndex)) and
389     (FTempMouseSettings.TextShiftAltMiddleClick     = TMouseOptButtonAction(dropMiddleShiftAlt.ItemIndex)) and
390     (FTempMouseSettings.TextShiftCtrlMiddleClick    = TMouseOptButtonAction(dropMiddleShiftCtrl.ItemIndex)) and
391     (FTempMouseSettings.TextShiftAltCtrlMiddleClick = TMouseOptButtonAction(dropMiddleShiftAltCtrl.ItemIndex)) and
392 
393     (FTempMouseSettings.TextRightClick      = TMouseOptButtonAction(dropRight.ItemIndex)) and
394     (FTempMouseSettings.TextShiftRightClick = TMouseOptButtonAction(dropRightShift.ItemIndex)) and
395     (FTempMouseSettings.TextAltRightClick   = TMouseOptButtonAction(dropRightAlt.ItemIndex)) and
396     (FTempMouseSettings.TextCtrlRightClick  = TMouseOptButtonAction(dropRightCtrl.ItemIndex)) and
397     (FTempMouseSettings.TextAltCtrlRightClick      = TMouseOptButtonAction(dropRightAltCtrl.ItemIndex)) and
398     (FTempMouseSettings.TextShiftAltRightClick     = TMouseOptButtonAction(dropRightShiftAlt.ItemIndex)) and
399     (FTempMouseSettings.TextShiftCtrlRightClick    = TMouseOptButtonAction(dropRightShiftCtrl.ItemIndex)) and
400     (FTempMouseSettings.TextShiftAltCtrlRightClick = TMouseOptButtonAction(dropRightShiftAltCtrl.ItemIndex)) and
401 
402     (FTempMouseSettings.TextExtra1Click      = TMouseOptButtonAction(dropExtra1.ItemIndex)) and
403     (FTempMouseSettings.TextShiftExtra1Click = TMouseOptButtonAction(dropExtra1Shift.ItemIndex)) and
404     (FTempMouseSettings.TextAltExtra1Click   = TMouseOptButtonAction(dropExtra1Alt.ItemIndex)) and
405     (FTempMouseSettings.TextCtrlExtra1Click  = TMouseOptButtonAction(dropExtra1Ctrl.ItemIndex)) and
406     (FTempMouseSettings.TextAltCtrlExtra1Click      = TMouseOptButtonAction(dropExtra1AltCtrl.ItemIndex)) and
407     (FTempMouseSettings.TextShiftAltExtra1Click     = TMouseOptButtonAction(dropExtra1ShiftAlt.ItemIndex)) and
408     (FTempMouseSettings.TextShiftCtrlExtra1Click    = TMouseOptButtonAction(dropExtra1ShiftCtrl.ItemIndex)) and
409     (FTempMouseSettings.TextShiftAltCtrlExtra1Click = TMouseOptButtonAction(dropExtra1ShiftAltCtrl.ItemIndex)) and
410 
411     (FTempMouseSettings.TextExtra2Click      = TMouseOptButtonAction(dropExtra2.ItemIndex)) and
412     (FTempMouseSettings.TextShiftExtra2Click = TMouseOptButtonAction(dropExtra2Shift.ItemIndex)) and
413     (FTempMouseSettings.TextAltExtra2Click   = TMouseOptButtonAction(dropExtra2Alt.ItemIndex)) and
414     (FTempMouseSettings.TextCtrlExtra2Click  = TMouseOptButtonAction(dropExtra2Ctrl.ItemIndex)) and
415     (FTempMouseSettings.TextAltCtrlExtra2Click      = TMouseOptButtonAction(dropExtra2AltCtrl.ItemIndex)) and
416     (FTempMouseSettings.TextShiftAltExtra2Click     = TMouseOptButtonAction(dropExtra2ShiftAlt.ItemIndex)) and
417     (FTempMouseSettings.TextShiftCtrlExtra2Click    = TMouseOptButtonAction(dropExtra2ShiftCtrl.ItemIndex)) and
418     (FTempMouseSettings.TextShiftAltCtrlExtra2Click = TMouseOptButtonAction(dropExtra2ShiftAltCtrl.ItemIndex)) and
419 
420     (FTempMouseSettings.Wheel      = TMouseOptWheelAction(dropWheel.ItemIndex)) and
421     (FTempMouseSettings.CtrlWheel  = TMouseOptWheelAction(dropWheelCtrl.ItemIndex)) and
422     (FTempMouseSettings.AltWheel   = TMouseOptWheelAction(dropWheelAlt.ItemIndex)) and
423     (FTempMouseSettings.ShiftWheel = TMouseOptWheelAction(dropWheelShift.ItemIndex)) and
424     (FTempMouseSettings.AltCtrlWheel        = TMouseOptWheelAction(dropWheelAltCtrl.ItemIndex)) and
425     (FTempMouseSettings.ShiftAltWheel       = TMouseOptWheelAction(dropWheelShiftAlt.ItemIndex)) and
426     (FTempMouseSettings.ShiftCtrlWheel      = TMouseOptWheelAction(dropWheelShiftCtrl.ItemIndex)) and
427     (FTempMouseSettings.ShiftAltCtrlWheel   = TMouseOptWheelAction(dropWheelShiftAltCtrl.ItemIndex)) and
428 
429     (FTempMouseSettings.HorizWheel      = TMouseOptWheelAction(dropWheelHoriz.ItemIndex)) and
430     (FTempMouseSettings.CtrlHorizWheel  = TMouseOptWheelAction(dropWheelCtrlHoriz.ItemIndex)) and
431     (FTempMouseSettings.AltHorizWheel   = TMouseOptWheelAction(dropWheelAltHoriz.ItemIndex)) and
432     (FTempMouseSettings.ShiftHorizWheel = TMouseOptWheelAction(dropWheelShiftHoriz.ItemIndex)) and
433     (FTempMouseSettings.AltCtrlHorizWheel        = TMouseOptWheelAction(dropWheelAltCtrlHoriz.ItemIndex)) and
434     (FTempMouseSettings.ShiftAltHorizWheel       = TMouseOptWheelAction(dropWheelShiftAltHoriz.ItemIndex)) and
435     (FTempMouseSettings.ShiftCtrlHorizWheel      = TMouseOptWheelAction(dropWheelShiftCtrlHoriz.ItemIndex)) and
436     (FTempMouseSettings.ShiftAltCtrlHorizWheel   = TMouseOptWheelAction(dropWheelShiftAltCtrlHoriz.ItemIndex))
437   );
438 end;
439 
IsGutterSettingsChangednull440 function TEditorMouseOptionsFrame.IsGutterSettingsChanged: Boolean;
441 begin
442   Result := not (
443     ( (GutterLeftRadio1.Checked and (FTempMouseSettings.GutterLeft = moGLDownClick)) or
444       (GutterLeftRadio2.Checked and (FTempMouseSettings.GutterLeft = moglUpClickAndSelect))
445     )
446   );
447 end;
448 
449 procedure TEditorMouseOptionsFrame.SaveUserScheme;
450 var
451   i: Integer;
452 begin
453   i := PtrInt(dropUserSchemes.Items.Objects[dropUserSchemes.ItemIndex]);
454   FTempMouseSettings.SelectedUserSchemeIndex := i;
455   if i >= 0 then
456     FTempMouseSettings.ResetToUserScheme
457   else begin
458     FTempMouseSettings.ResetTextToDefault;
459     FTempMouseSettings.ResetGutterToDefault;
460   end;
461   if FDialog.FindEditor(TEditorMouseOptionsAdvFrame) <> nil then
462     TEditorMouseOptionsAdvFrame(FDialog.FindEditor(TEditorMouseOptionsAdvFrame)).RefreshSettings;
463 end;
464 
465 procedure TEditorMouseOptionsFrame.SaveTextSettings;
466 begin
467   FTempMouseSettings.TextDrag := TextDrag.Checked;
468   FTempMouseSettings.TextRightMoveCaret := RightMoveCaret.Checked;
469 
470   FTempMouseSettings.TextAltLeftClick          := TMouseOptButtonAction(dropAltLeft.ItemIndex);
471   FTempMouseSettings.TextCtrlLeftClick         := TMouseOptButtonAction(dropCtrlLeft.ItemIndex);
472   FTempMouseSettings.TextAltCtrlLeftClick      := TMouseOptButtonAction(dropAltCtrlLeft.ItemIndex);
473   FTempMouseSettings.TextShiftLeftClick        := TMouseOptButtonAction(dropShiftLeft.ItemIndex);
474   FTempMouseSettings.TextShiftAltLeftClick     := TMouseOptButtonAction(dropShiftAltLeft.ItemIndex);
475   FTempMouseSettings.TextShiftCtrlLeftClick    := TMouseOptButtonAction(dropShiftCtrlLeft.ItemIndex);
476   FTempMouseSettings.TextShiftAltCtrlLeftClick := TMouseOptButtonAction(dropShiftAltCtrlLeft.ItemIndex);
477 
478   FTempMouseSettings.TextDoubleLeftClick      := IdxToDoubleMouseOptButtonAction(dropLeftDouble.ItemIndex);
479   FTempMouseSettings.TextTripleLeftClick      := IdxToDoubleMouseOptButtonAction(dropLeftTriple.ItemIndex);
480   FTempMouseSettings.TextQuadLeftClick        := IdxToDoubleMouseOptButtonAction(dropLeftQuad.ItemIndex);
481   FTempMouseSettings.TextShiftDoubleLeftClick := IdxToDoubleMouseOptButtonAction(dropLeftShiftDouble.ItemIndex);
482   FTempMouseSettings.TextAltDoubleLeftClick   := IdxToDoubleMouseOptButtonAction(dropLeftAltDouble.ItemIndex);
483   FTempMouseSettings.TextCtrlDoubleLeftClick  := IdxToDoubleMouseOptButtonAction(dropLeftCtrlDouble.ItemIndex);
484 
485   FTempMouseSettings.TextMiddleClick      := TMouseOptButtonAction(dropMiddle.ItemIndex);
486   FTempMouseSettings.TextShiftMiddleClick := TMouseOptButtonAction(dropMiddleShift.ItemIndex);
487   FTempMouseSettings.TextAltMiddleClick   := TMouseOptButtonAction(dropMiddleAlt.ItemIndex);
488   FTempMouseSettings.TextCtrlMiddleClick  := TMouseOptButtonAction(dropMiddleCtrl.ItemIndex);
489   FTempMouseSettings.TextAltCtrlMiddleClick      := TMouseOptButtonAction(dropMiddleAltCtrl.ItemIndex);
490   FTempMouseSettings.TextShiftAltMiddleClick     := TMouseOptButtonAction(dropMiddleShiftAlt.ItemIndex);
491   FTempMouseSettings.TextShiftCtrlMiddleClick    := TMouseOptButtonAction(dropMiddleShiftCtrl.ItemIndex);
492   FTempMouseSettings.TextShiftAltCtrlMiddleClick := TMouseOptButtonAction(dropMiddleShiftAltCtrl.ItemIndex);
493 
494   FTempMouseSettings.TextRightClick      := TMouseOptButtonAction(dropRight.ItemIndex);
495   FTempMouseSettings.TextShiftRightClick := TMouseOptButtonAction(dropRightShift.ItemIndex);
496   FTempMouseSettings.TextAltRightClick   := TMouseOptButtonAction(dropRightAlt.ItemIndex);
497   FTempMouseSettings.TextCtrlRightClick  := TMouseOptButtonAction(dropRightCtrl.ItemIndex);
498   FTempMouseSettings.TextAltCtrlRightClick      := TMouseOptButtonAction(dropRightAltCtrl.ItemIndex);
499   FTempMouseSettings.TextShiftAltRightClick     := TMouseOptButtonAction(dropRightShiftAlt.ItemIndex);
500   FTempMouseSettings.TextShiftCtrlRightClick    := TMouseOptButtonAction(dropRightShiftCtrl.ItemIndex);
501   FTempMouseSettings.TextShiftAltCtrlRightClick := TMouseOptButtonAction(dropRightShiftAltCtrl.ItemIndex);
502 
503   FTempMouseSettings.TextExtra1Click      := TMouseOptButtonAction(dropExtra1.ItemIndex);
504   FTempMouseSettings.TextShiftExtra1Click := TMouseOptButtonAction(dropExtra1Shift.ItemIndex);
505   FTempMouseSettings.TextAltExtra1Click   := TMouseOptButtonAction(dropExtra1Alt.ItemIndex);
506   FTempMouseSettings.TextCtrlExtra1Click  := TMouseOptButtonAction(dropExtra1Ctrl.ItemIndex);
507   FTempMouseSettings.TextAltCtrlExtra1Click      := TMouseOptButtonAction(dropExtra1AltCtrl.ItemIndex);
508   FTempMouseSettings.TextShiftAltExtra1Click     := TMouseOptButtonAction(dropExtra1ShiftAlt.ItemIndex);
509   FTempMouseSettings.TextShiftCtrlExtra1Click    := TMouseOptButtonAction(dropExtra1ShiftCtrl.ItemIndex);
510   FTempMouseSettings.TextShiftAltCtrlExtra1Click := TMouseOptButtonAction(dropExtra1ShiftAltCtrl.ItemIndex);
511 
512   FTempMouseSettings.TextExtra2Click      := TMouseOptButtonAction(dropExtra2.ItemIndex);
513   FTempMouseSettings.TextShiftExtra2Click := TMouseOptButtonAction(dropExtra2Shift.ItemIndex);
514   FTempMouseSettings.TextAltExtra2Click   := TMouseOptButtonAction(dropExtra2Alt.ItemIndex);
515   FTempMouseSettings.TextCtrlExtra2Click  := TMouseOptButtonAction(dropExtra2Ctrl.ItemIndex);
516   FTempMouseSettings.TextAltCtrlExtra2Click      := TMouseOptButtonAction(dropExtra2AltCtrl.ItemIndex);
517   FTempMouseSettings.TextShiftAltExtra2Click     := TMouseOptButtonAction(dropExtra2ShiftAlt.ItemIndex);
518   FTempMouseSettings.TextShiftCtrlExtra2Click    := TMouseOptButtonAction(dropExtra2ShiftCtrl.ItemIndex);
519   FTempMouseSettings.TextShiftAltCtrlExtra2Click := TMouseOptButtonAction(dropExtra2ShiftAltCtrl.ItemIndex);
520 
521   FTempMouseSettings.Wheel               := TMouseOptWheelAction(dropWheel.ItemIndex);
522   FTempMouseSettings.CtrlWheel           := TMouseOptWheelAction(dropWheelCtrl.ItemIndex);
523   FTempMouseSettings.AltWheel            := TMouseOptWheelAction(dropWheelAlt.ItemIndex);
524   FTempMouseSettings.ShiftWheel          := TMouseOptWheelAction(dropWheelShift.ItemIndex);
525   FTempMouseSettings.AltCtrlWheel        := TMouseOptWheelAction(dropWheelAltCtrl.ItemIndex);
526   FTempMouseSettings.ShiftAltWheel       := TMouseOptWheelAction(dropWheelShiftAlt.ItemIndex);
527   FTempMouseSettings.ShiftCtrlWheel      := TMouseOptWheelAction(dropWheelShiftCtrl.ItemIndex);
528   FTempMouseSettings.ShiftAltCtrlWheel   := TMouseOptWheelAction(dropWheelShiftAltCtrl.ItemIndex);
529 
530   FTempMouseSettings.HorizWheel               := TMouseOptWheelAction(dropWheelHoriz.ItemIndex);
531   FTempMouseSettings.CtrlHorizWheel           := TMouseOptWheelAction(dropWheelCtrlHoriz.ItemIndex);
532   FTempMouseSettings.AltHorizWheel            := TMouseOptWheelAction(dropWheelAltHoriz.ItemIndex);
533   FTempMouseSettings.ShiftHorizWheel          := TMouseOptWheelAction(dropWheelShiftHoriz.ItemIndex);
534   FTempMouseSettings.AltCtrlHorizWheel        := TMouseOptWheelAction(dropWheelAltCtrlHoriz.ItemIndex);
535   FTempMouseSettings.ShiftAltHorizWheel       := TMouseOptWheelAction(dropWheelShiftAltHoriz.ItemIndex);
536   FTempMouseSettings.ShiftCtrlHorizWheel      := TMouseOptWheelAction(dropWheelShiftCtrlHoriz.ItemIndex);
537   FTempMouseSettings.ShiftAltCtrlHorizWheel   := TMouseOptWheelAction(dropWheelShiftAltCtrlHoriz.ItemIndex);
538 
539   FTempMouseSettings.ResetTextToDefault;
540   if FDialog.FindEditor(TEditorMouseOptionsAdvFrame) <> nil then
541     TEditorMouseOptionsAdvFrame(FDialog.FindEditor(TEditorMouseOptionsAdvFrame)).RefreshSettings;
542 end;
543 
544 procedure TEditorMouseOptionsFrame.SaveGutterSettings;
545 begin
546   if GutterLeftRadio2.Checked then
547     FTempMouseSettings.GutterLeft := moglUpClickAndSelect
548   else
549   if GutterLeftRadio3.Checked then
550     FTempMouseSettings.GutterLeft := moglUpClickAndSelectRighHalf
551   else
552     FTempMouseSettings.GutterLeft := moGLDownClick;
553   FTempMouseSettings.SelectOnLineNumbers := chkGutterTextLines.Checked;
554   FTempMouseSettings.ResetGutterToDefault;
555   if FDialog.FindEditor(TEditorMouseOptionsAdvFrame) <> nil then
556     TEditorMouseOptionsAdvFrame(FDialog.FindEditor(TEditorMouseOptionsAdvFrame)).RefreshSettings;
557 end;
558 
559 procedure TEditorMouseOptionsFrame.SetVisible(Value: Boolean);
560 begin
561   inherited SetVisible(Value);
562   if Value and (FTempMouseSettings <> nil) then
563     UpdateButtons;
564 end;
565 
IdxToDoubleMouseOptButtonActionnull566 function TEditorMouseOptionsFrame.IdxToDoubleMouseOptButtonAction(AIdx: integer): TMouseOptButtonAction;
567 begin
568   if AIdx <> 0 then AIdx := AIdx + 3;
569   Result := TMouseOptButtonAction(AIdx);
570 end;
571 
572 procedure TEditorMouseOptionsFrame.CheckForShiftChange(Sender: TObject);
573 begin
574   if (Sender = nil) then begin
575     dropShiftLeft.Items[0] := Format(dlfMouseSimpleButtonSelContinuePlain, [dlfMouseSimpleButtonSelect]);
576   end;
577   if (Sender = dropAltLeft) or (Sender = nil) then begin
578     if TMouseOptButtonAction(dropAltLeft.ItemIndex) in [mbaSelect..mbaSelectLine]
579     then dropShiftAltLeft.Items[0] := Format(dlfMouseSimpleButtonSelContinue,
580                                              [dropAltLeft.Items[dropAltLeft.ItemIndex], AltLeftLabel.Caption])
581     else dropShiftAltLeft.Items[0] := dlfMouseSimpleButtonNothing;
582   end;
583   if (Sender = dropCtrlLeft) or (Sender = nil) then begin
584     if TMouseOptButtonAction(dropCtrlLeft.ItemIndex) in [mbaSelect..mbaSelectLine]
585     then dropShiftCtrlLeft.Items[0] := Format(dlfMouseSimpleButtonSelContinue,
586                                              [dropCtrlLeft.Items[dropCtrlLeft.ItemIndex], CtrLLeftLabel.Caption])
587     else dropShiftCtrlLeft.Items[0] := dlfMouseSimpleButtonNothing;
588   end;
589   if (Sender = dropAltCtrlLeft) or (Sender = nil) then begin
590     if TMouseOptButtonAction(dropAltCtrlLeft.ItemIndex) in [mbaSelect..mbaSelectLine]
591     then dropShiftAltCtrlLeft.Items[0] := Format(dlfMouseSimpleButtonSelContinue,
592                                              [dropAltCtrlLeft.Items[dropAltCtrlLeft.ItemIndex], AltCtrlLeftLabel.Caption])
593     else dropShiftAltCtrlLeft.Items[0] := dlfMouseSimpleButtonNothing;
594   end;
595 end;
596 
TEditorMouseOptionsFrame.GetTitlenull597 function TEditorMouseOptionsFrame.GetTitle: String;
598 begin
599   Result := dlgMouseOptions;
600 end;
601 
602 procedure TEditorMouseOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
603 
604   procedure SetupButtonCombo(ACombo: TComboBox; ASkipSel: Boolean = False);
605   begin
606     // must be in the order in which the mba* are declared
607     ACombo.Clear;
608     ACombo.Items.Add(dlfMouseSimpleButtonNothing);           // mbaNone,
609     if not ASkipSel then begin
610       ACombo.Items.Add(dlfMouseSimpleButtonSelect);            // mbaSelect,
611       ACombo.Items.Add(dlfMouseSimpleButtonSelectColumn);      // mbaSelectColumn,
612       ACombo.Items.Add(dlfMouseSimpleButtonSelectLine);        // mbaSelectLine,
613     end;
614     //ACombo.Items.Add(dlfMouseSimpleButtonSelectByToken);     // mbaSelectTokens,
615     ACombo.Items.Add(dlfMouseSimpleButtonSelectByWord);      // mbaSelectWords,
616     //ACombo.Items.Add(dlfMouseSimpleButtonSelectByLine);      // mbaSelectLines,
617     ACombo.Items.Add(dlfMouseSimpleButtonSetWord);           // mbaSelectSetWord,
618     ACombo.Items.Add(dlfMouseSimpleButtonSetLineSmart);      // mbaSelectSetLineSmart,
619     ACombo.Items.Add(dlfMouseSimpleButtonSetLineFull);       // mbaSelectSetLineFull,
620     ACombo.Items.Add(dlfMouseSimpleButtonSetPara);           // mbaSelectSetPara,
621     ACombo.Items.Add(dlfMouseSimpleButtonPaste);             // mbaPaste,
622     ACombo.Items.Add(dlfMouseSimpleButtonDeclaration);       // mbaDeclarationJump,
623     ACombo.Items.Add(dlfMouseSimpleButtonDeclarationBlock);  // mbaDeclarationOrBlockJump,
624     ACombo.Items.Add(dlfMouseSimpleButtonAddHistoryPoint);   // mbaAddHistoryPoint,
625     ACombo.Items.Add(dlfMouseSimpleButtonHistBack);          // mbaHistoryBack,
626     ACombo.Items.Add(dlfMouseSimpleButtonHistForw);          // mbaHistoryForw,
627     ACombo.Items.Add(dlfMouseSimpleButtonSetFreeBookmark);   // mbaSetFreeBookmark,
628     ACombo.Items.Add(dlfMouseSimpleButtonZoomReset);         // mbaZoomReset
629     ACombo.Items.Add(dlfMouseSimpleButtonContextMenu);       // mbaContextMenu
630     ACombo.Items.Add(dlfMouseSimpleButtonContextMenuDbg);    // mbaContextMenuDebug;
631     ACombo.Items.Add(dlfMouseSimpleButtonContextMenuTab);    // mbaContextMenuTab;
632     ACombo.Items.Add(dlfMouseSimpleButtonMultiCaretToggle);  // mbaMultiCaretToggle;
633   end;
634 
635   procedure SetupWheelCombo(ACombo: TComboBox);
636   begin
637     ACombo.Clear;
638     ACombo.Items.Add(dlfMouseSimpleWheelNothing);        //mwaNone,
639     ACombo.Items.Add(dlfMouseSimpleWheelSrollDef);       //mwaScroll,
640     ACombo.Items.Add(dlfMouseSimpleWheelSrollLine);      //mwaScrollSingleLine,
641     ACombo.Items.Add(dlfMouseSimpleWheelSrollPage);      //mwaScrollPage,
642     ACombo.Items.Add(dlfMouseSimpleWheelSrollPageLess);  //mwaScrollPageLessOne,
643     ACombo.Items.Add(dlfMouseSimpleWheelSrollPageHalf);  //mwaScrollHalfPage,
644     ACombo.Items.Add(dlfMouseSimpleWheelHSrollDef);      //mwaScrollHoriz,
645     ACombo.Items.Add(dlfMouseSimpleWheelHSrollLine);     //mwaScrollHorizSingleLine,
646     ACombo.Items.Add(dlfMouseSimpleWheelHSrollPage);     //mwaScrollHorizPage,
647     ACombo.Items.Add(dlfMouseSimpleWheelHSrollPageLess); //mwaScrollHorizPageLessOne
648     ACombo.Items.Add(dlfMouseSimpleWheelHSrollPageHalf); //mwaScrollHorizHalfPage
649     ACombo.Items.Add(dlfMouseSimpleWheelZoom);
650   end;
651 
652 begin
653   FDialog := ADialog;
654   chkPredefinedScheme.Caption := dlfMousePredefinedScheme;
655   GenericDividerLabel.Caption := dlfMouseSimpleGenericSect;
656 
657   GutterDividerLabel.Caption := dlfMouseSimpleGutterSect;
658   GutterLeftRadio1.Caption := dlfMouseSimpleGutterLeftDown;
659   GutterLeftRadio2.Caption := dlfMouseSimpleGutterLeftUp;
660   GutterLeftRadio3.Caption := dlfMouseSimpleGutterLeftUpRight;
661   chkGutterTextLines.Caption := dlfMouseSimpleGutterLines;
662 
663   TextDividerLabel.Caption := dlfMouseSimpleTextSect;
664   TextDrag.Caption := dlfMouseSimpleTextSectDrag;
665   RightMoveCaret.Caption := dlfMouseSimpleRightMoveCaret;
666 
667   ToolBtnLeftMod.Caption := dlfMouseSimpleTextSectPageLMod;
668   ToolBtnLeftMulti.Caption := dlfMouseSimpleTextSectPageLMulti;
669   ToolBtnMiddle.Caption := dlfMouseSimpleTextSectPageBtn;
670   ToolBtnWheel.Caption := dlfMouseSimpleTextSectPageWheel;
671   ToolBtnHorizWheel.Caption := dlfMouseSimpleTextSectPageHorizWheel;
672   ToolBtnRight.Caption := dlfMouseSimpleTextSectPageRight;
673   ToolBtnExtra1.Caption := dlfMouseSimpleTextSectPageExtra1;
674   ToolBtnExtra2.Caption := dlfMouseSimpleTextSectPageExtra2;
675 
676     // left multi click
677   lblLeftDouble.Caption        := dlfMouseSimpleTextSectLDoubleLabel;
678   lblLeftTriple.Caption        := dlfMouseSimpleTextSectLTripleLabel;
679   lblLeftQuad.Caption          := dlfMouseSimpleTextSectLQuadLabel;
680   lblLeftDoubleShift.Caption   := dlfMouseSimpleTextSectLDoubleShiftLabel;
681   lblLeftDoubleCtrl.Caption    := dlfMouseSimpleTextSectLDoubleCtrlLabel;
682   lblLeftDoubleAlt.Caption     := dlfMouseSimpleTextSectLDoubleAltLabel;
683     // left + modifier click
684   AltLeftLabel.Caption          := dlfMouseSimpleTextSectAltLabel;
685   CtrLLeftLabel.Caption         := dlfMouseSimpleTextSectCtrlLabel;
686   AltCtrlLeftLabel.Caption      := dlfMouseSimpleTextSectAltCtrlLabel;
687   ShiftLeftLabel.Caption        := dlfMouseSimpleTextSectShiftLabel;
688   ShiftAltLeftLabel.Caption     := dlfMouseSimpleTextSectShiftAltLabel;
689   ShiftCtrlLeftLabel.Caption    := dlfMouseSimpleTextSectShiftCtrlLabel;
690   ShiftAltCtrlLeftLabel.Caption := dlfMouseSimpleTextSectShiftAltCtrlLabel;
691     // middle click
692   lblMiddle.Caption     := dlfMouseSimpleTextSectMidLabel;
693   lblMiddleShift.Caption   := dlfMouseSimpleTextSectShiftLabel;
694   lblMiddleAlt.Caption  := dlfMouseSimpleTextSectAltLabel;
695   lblMiddleCtrl.Caption := dlfMouseSimpleTextSectCtrlLabel;
696   lblMiddleAltCtrl.Caption      := dlfMouseSimpleTextSectAltCtrlLabel;
697   lblMiddleShiftAlt.Caption     := dlfMouseSimpleTextSectShiftAltLabel;
698   lblMiddleShiftCtrl.Caption    := dlfMouseSimpleTextSectShiftCtrlLabel;
699   lblMiddleShiftAltCtrl.Caption := dlfMouseSimpleTextSectShiftAltCtrlLabel;
700     // Right click
701   lblRight.Caption     := dlfMouseSimpleTextSectRightLabel;
702   lblRightShift.Caption   := dlfMouseSimpleTextSectShiftLabel;
703   lblRightAlt.Caption  := dlfMouseSimpleTextSectAltLabel;
704   lblRightCtrl.Caption := dlfMouseSimpleTextSectCtrlLabel;
705   lblRightAltCtrl.Caption      := dlfMouseSimpleTextSectAltCtrlLabel;
706   lblRightShiftAlt.Caption     := dlfMouseSimpleTextSectShiftAltLabel;
707   lblRightShiftCtrl.Caption    := dlfMouseSimpleTextSectShiftCtrlLabel;
708   lblRightShiftAltCtrl.Caption := dlfMouseSimpleTextSectShiftAltCtrlLabel;
709     // Extra1 click
710   lblExtra1.Caption     := dlfMouseSimpleTextSectExtra1Label;
711   lblExtra1Shift.Caption   := dlfMouseSimpleTextSectShiftLabel;
712   lblExtra1Alt.Caption  := dlfMouseSimpleTextSectAltLabel;
713   lblExtra1Ctrl.Caption := dlfMouseSimpleTextSectCtrlLabel;
714   lblExtra1AltCtrl.Caption      := dlfMouseSimpleTextSectAltCtrlLabel;
715   lblExtra1ShiftAlt.Caption     := dlfMouseSimpleTextSectShiftAltLabel;
716   lblExtra1ShiftCtrl.Caption    := dlfMouseSimpleTextSectShiftCtrlLabel;
717   lblExtra1ShiftAltCtrl.Caption := dlfMouseSimpleTextSectShiftAltCtrlLabel;
718     // Extra2 click
719   lblExtra2.Caption     := dlfMouseSimpleTextSectExtra2Label;
720   lblExtra2Shift.Caption   := dlfMouseSimpleTextSectShiftLabel;
721   lblExtra2Alt.Caption  := dlfMouseSimpleTextSectAltLabel;
722   lblExtra2Ctrl.Caption := dlfMouseSimpleTextSectCtrlLabel;
723   lblExtra2AltCtrl.Caption      := dlfMouseSimpleTextSectAltCtrlLabel;
724   lblExtra2ShiftAlt.Caption     := dlfMouseSimpleTextSectShiftAltLabel;
725   lblExtra2ShiftCtrl.Caption    := dlfMouseSimpleTextSectShiftCtrlLabel;
726   lblExtra2ShiftAltCtrl.Caption := dlfMouseSimpleTextSectShiftAltCtrlLabel;
727     // wheel
728   lblWheel.Caption      := dlfMouseSimpleTextSectWheelLabel;
729   lblWheelCtrl.Caption  := dlfMouseSimpleTextSectCtrlWheelLabel;
730   lblWheelAlt.Caption   := dlfMouseSimpleTextSectAltWheelLabel;
731   lblWheelShift.Caption := dlfMouseSimpleTextShiftSectWheelLabel;
732   lblWheelAltCtrl.Caption      := dlfMouseSimpleTextSectAltCtrlWheelLabel;
733   lblWheelShiftAlt.Caption     := dlfMouseSimpleTextSectShiftAltWheelLabel;
734   lblWheelShiftCtrl.Caption    := dlfMouseSimpleTextSectShiftCtrlWheelLabel;
735   lblWheelShiftAltCtrl.Caption := dlfMouseSimpleTextSectShiftAltCtrlWheelLabel;
736     // Horiz wheel
737   lblWheelHoriz.Caption      := dlfMouseSimpleTextSectWheelLabel;
738   lblWheelCtrlHoriz.Caption  := dlfMouseSimpleTextSectCtrlWheelLabel;
739   lblWheelAltHoriz.Caption   := dlfMouseSimpleTextSectAltWheelLabel;
740   lblWheelShiftHoriz.Caption := dlfMouseSimpleTextShiftSectWheelLabel;
741   lblWheelAltCtrlHoriz.Caption      := dlfMouseSimpleTextSectAltCtrlWheelLabel;
742   lblWheelShiftAltHoriz.Caption     := dlfMouseSimpleTextSectShiftAltWheelLabel;
743   lblWheelShiftCtrlHoriz.Caption    := dlfMouseSimpleTextSectShiftCtrlWheelLabel;
744   lblWheelShiftAltCtrlHoriz.Caption := dlfMouseSimpleTextSectShiftAltCtrlWheelLabel;
745 
746     // left multi click
747   SetupButtonCombo(dropLeftDouble, True);
748   SetupButtonCombo(dropLeftTriple, True);
749   SetupButtonCombo(dropLeftQuad, True);
750   SetupButtonCombo(dropLeftShiftDouble, True);
751   SetupButtonCombo(dropLeftAltDouble, True);
752   SetupButtonCombo(dropLeftCtrlDouble, True);
753     // left + modifier click
754   SetupButtonCombo(dropShiftLeft);
755   SetupButtonCombo(dropAltLeft);
756   SetupButtonCombo(dropCtrlLeft);
757   SetupButtonCombo(dropAltCtrlLeft);
758   SetupButtonCombo(dropShiftAltLeft);
759   SetupButtonCombo(dropShiftCtrlLeft);
760   SetupButtonCombo(dropShiftAltCtrlLeft);
761     // middle click
762   SetupButtonCombo(dropMiddle);
763   SetupButtonCombo(dropMiddleShift);
764   SetupButtonCombo(dropMiddleAlt);
765   SetupButtonCombo(dropMiddleCtrl);
766   SetupButtonCombo(dropMiddleAltCtrl);
767   SetupButtonCombo(dropMiddleShiftCtrl);
768   SetupButtonCombo(dropMiddleShiftAlt);
769   SetupButtonCombo(dropMiddleShiftAltCtrl);
770     // Right click
771   SetupButtonCombo(dropRight);
772   SetupButtonCombo(dropRightShift);
773   SetupButtonCombo(dropRightAlt);
774   SetupButtonCombo(dropRightCtrl);
775   SetupButtonCombo(dropRightAltCtrl);
776   SetupButtonCombo(dropRightShiftCtrl);
777   SetupButtonCombo(dropRightShiftAlt);
778   SetupButtonCombo(dropRightShiftAltCtrl);
779     // Extra1 click
780   SetupButtonCombo(dropExtra1);
781   SetupButtonCombo(dropExtra1Shift);
782   SetupButtonCombo(dropExtra1Alt);
783   SetupButtonCombo(dropExtra1Ctrl);
784   SetupButtonCombo(dropExtra1AltCtrl);
785   SetupButtonCombo(dropExtra1ShiftCtrl);
786   SetupButtonCombo(dropExtra1ShiftAlt);
787   SetupButtonCombo(dropExtra1ShiftAltCtrl);
788     // extra2 click
789   SetupButtonCombo(dropExtra2);
790   SetupButtonCombo(dropExtra2Shift);
791   SetupButtonCombo(dropExtra2Alt);
792   SetupButtonCombo(dropExtra2Ctrl);
793   SetupButtonCombo(dropExtra2AltCtrl);
794   SetupButtonCombo(dropExtra2ShiftCtrl);
795   SetupButtonCombo(dropExtra2ShiftAlt);
796   SetupButtonCombo(dropExtra2ShiftAltCtrl);
797     // wheel
798   SetupWheelCombo(dropWheel);
799   SetupWheelCombo(dropWheelCtrl);
800   SetupWheelCombo(dropWheelAlt);
801   SetupWheelCombo(dropWheelShift);
802   SetupWheelCombo(dropWheelAltCtrl);
803   SetupWheelCombo(dropWheelShiftAlt);
804   SetupWheelCombo(dropWheelShiftCtrl);
805   SetupWheelCombo(dropWheelShiftAltCtrl);
806     // Horiz wheel
807   SetupWheelCombo(dropWheelHoriz);
808   SetupWheelCombo(dropWheelCtrlHoriz);
809   SetupWheelCombo(dropWheelAltHoriz);
810   SetupWheelCombo(dropWheelShiftHoriz);
811   SetupWheelCombo(dropWheelAltCtrlHoriz);
812   SetupWheelCombo(dropWheelShiftAltHoriz);
813   SetupWheelCombo(dropWheelShiftCtrlHoriz);
814   SetupWheelCombo(dropWheelShiftAltCtrlHoriz);
815 
816   WarnLabel.Caption := dlfMouseSimpleWarning;
817   DiffLabel.Caption := dlfMouseSimpleDiff;
818   ResetAllButton.Caption := dlfMouseResetAll;
819   ResetGutterButton.Caption := dlfMouseResetGutter;
820   ResetTextButton.Caption := dlfMouseResetText;
821   HideMouseCheckBox.Caption := dlgAutoHideCursor;
822 end;
823 
824 procedure TEditorMouseOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
825 var
826   i: Integer;
827 begin
828   Inc(FInClickHandler);
829   FOptions := AOptions;
830   FTempMouseSettings := TEditorOptions(AOptions).TempMouseSettings;
831   FTempMouseSettings.Assign(TEditorOptions(AOptions).UserMouseSettings);
832 
833   pnlUserSchemes.Visible := FTempMouseSettings.UserSchemeCount > 0;
834   dropUserSchemes.Clear;
835   for i := 0 to FTempMouseSettings.UserSchemeCount - 1 do begin
836     dropUserSchemes.Items.AddObject(FTempMouseSettings.UserSchemeNames[i],
837                                     TObject(PtrUInt(i)) );
838   end;
839   dropUserSchemes.Sorted := True;
840   dropUserSchemes.Sorted := False;
841   dropUserSchemes.Items.InsertObject(0, dlfNoPredefinedScheme, TObject(PtrUInt(-1)));
842   dropUserSchemes.ItemIndex := dropUserSchemes.Items.IndexOfObject
843     ( TObject(PtrUInt(FTempMouseSettings.SelectedUserSchemeIndex)) );
844   dropUserSchemesChange(Self);
845 
846   case FTempMouseSettings.GutterLeft of
847     moGLDownClick: GutterLeftRadio1.Checked := True;
848     moglUpClickAndSelect: GutterLeftRadio2.Checked := True;
849     moglUpClickAndSelectRighHalf: GutterLeftRadio3.Checked := True;
850   end;
851   chkGutterTextLines.Checked := FTempMouseSettings.SelectOnLineNumbers;
852   TextDrag.Checked    := FTempMouseSettings.TextDrag;
853   RightMoveCaret.Checked := FTempMouseSettings.TextRightMoveCaret;
854 
855   dropAltLeft.ItemIndex          := ord(FTempMouseSettings.TextAltLeftClick);
856   dropCtrlLeft.ItemIndex         := ord(FTempMouseSettings.TextCtrlLeftClick);
857   dropAltCtrlLeft.ItemIndex      := ord(FTempMouseSettings.TextAltCtrlLeftClick);
858   dropShiftLeft.ItemIndex        := ord(FTempMouseSettings.TextShiftLeftClick);
859   dropShiftAltLeft.ItemIndex     := ord(FTempMouseSettings.TextShiftAltLeftClick);
860   dropShiftCtrlLeft.ItemIndex    := ord(FTempMouseSettings.TextShiftCtrlLeftClick);
861   dropShiftAltCtrlLeft.ItemIndex := ord(FTempMouseSettings.TextShiftAltCtrlLeftClick);
862 
863   // 1,2&3 are mouse selection, and not avail for double clicks
864   dropLeftDouble.ItemIndex      := Max(ord(FTempMouseSettings.TextDoubleLeftClick)-3,0);
865   dropLeftTriple.ItemIndex      := Max(ord(FTempMouseSettings.TextTripleLeftClick)-3,0);
866   dropLeftQuad.ItemIndex        := Max(ord(FTempMouseSettings.TextQuadLeftClick)-3,0);
867   dropLeftShiftDouble.ItemIndex := Max(ord(FTempMouseSettings.TextShiftDoubleLeftClick)-3,0);
868   dropLeftAltDouble.ItemIndex   := Max(ord(FTempMouseSettings.TextAltDoubleLeftClick)-3,0);
869   dropLeftCtrlDouble.ItemIndex  := Max(ord(FTempMouseSettings.TextCtrlDoubleLeftClick)-3,0);
870 
871   dropMiddle.ItemIndex      := ord(FTempMouseSettings.TextMiddleClick);
872   dropMiddleShift.ItemIndex := ord(FTempMouseSettings.TextShiftMiddleClick);
873   dropMiddleAlt.ItemIndex   := ord(FTempMouseSettings.TextAltMiddleClick);
874   dropMiddleCtrl.ItemIndex  := ord(FTempMouseSettings.TextCtrlMiddleClick);
875   dropMiddleAltCtrl.ItemIndex      := ord(FTempMouseSettings.TextAltCtrlMiddleClick);
876   dropMiddleShiftCtrl.ItemIndex    := ord(FTempMouseSettings.TextShiftCtrlMiddleClick);
877   dropMiddleShiftAlt.ItemIndex     := ord(FTempMouseSettings.TextShiftAltMiddleClick);
878   dropMiddleShiftAltCtrl.ItemIndex := ord(FTempMouseSettings.TextShiftAltCtrlMiddleClick);
879 
880   dropRight.ItemIndex      := ord(FTempMouseSettings.TextRightClick);
881   dropRightShift.ItemIndex := ord(FTempMouseSettings.TextShiftRightClick);
882   dropRightAlt.ItemIndex   := ord(FTempMouseSettings.TextAltRightClick);
883   dropRightCtrl.ItemIndex  := ord(FTempMouseSettings.TextCtrlRightClick);
884   dropRightAltCtrl.ItemIndex      := ord(FTempMouseSettings.TextAltCtrlRightClick);
885   dropRightShiftCtrl.ItemIndex    := ord(FTempMouseSettings.TextShiftCtrlRightClick);
886   dropRightShiftAlt.ItemIndex     := ord(FTempMouseSettings.TextShiftAltRightClick);
887   dropRightShiftAltCtrl.ItemIndex := ord(FTempMouseSettings.TextShiftAltCtrlRightClick);
888 
889   dropExtra1.ItemIndex      := ord(FTempMouseSettings.TextExtra1Click);
890   dropExtra1Shift.ItemIndex := ord(FTempMouseSettings.TextShiftExtra1Click);
891   dropExtra1Alt.ItemIndex   := ord(FTempMouseSettings.TextAltExtra1Click);
892   dropExtra1Ctrl.ItemIndex  := ord(FTempMouseSettings.TextCtrlExtra1Click);
893   dropExtra1AltCtrl.ItemIndex      := ord(FTempMouseSettings.TextAltCtrlExtra1Click);
894   dropExtra1ShiftCtrl.ItemIndex    := ord(FTempMouseSettings.TextShiftCtrlExtra1Click);
895   dropExtra1ShiftAlt.ItemIndex     := ord(FTempMouseSettings.TextShiftAltExtra1Click);
896   dropExtra1ShiftAltCtrl.ItemIndex := ord(FTempMouseSettings.TextShiftAltCtrlExtra1Click);
897 
898   dropExtra2.ItemIndex      := ord(FTempMouseSettings.TextExtra2Click);
899   dropExtra2Shift.ItemIndex := ord(FTempMouseSettings.TextShiftExtra2Click);
900   dropExtra2Alt.ItemIndex   := ord(FTempMouseSettings.TextAltExtra2Click);
901   dropExtra2Ctrl.ItemIndex  := ord(FTempMouseSettings.TextCtrlExtra2Click);
902   dropExtra2AltCtrl.ItemIndex      := ord(FTempMouseSettings.TextAltCtrlExtra2Click);
903   dropExtra2ShiftCtrl.ItemIndex    := ord(FTempMouseSettings.TextShiftCtrlExtra2Click);
904   dropExtra2ShiftAlt.ItemIndex     := ord(FTempMouseSettings.TextShiftAltExtra2Click);
905   dropExtra2ShiftAltCtrl.ItemIndex := ord(FTempMouseSettings.TextShiftAltCtrlExtra2Click);
906 
907   dropWheel.ItemIndex      := ord(FTempMouseSettings.Wheel);
908   dropWheelCtrl.ItemIndex  := ord(FTempMouseSettings.CtrlWheel);
909   dropWheelAlt.ItemIndex   := ord(FTempMouseSettings.AltWheel);
910   dropWheelShift.ItemIndex := ord(FTempMouseSettings.ShiftWheel);
911   dropWheelAltCtrl.ItemIndex      := ord(FTempMouseSettings.AltWheel);
912   dropWheelShiftAlt.ItemIndex     := ord(FTempMouseSettings.ShiftAltWheel);
913   dropWheelShiftCtrl.ItemIndex    := ord(FTempMouseSettings.ShiftCtrlWheel);
914   dropWheelShiftAltCtrl.ItemIndex := ord(FTempMouseSettings.ShiftAltCtrlWheel);
915 
916   dropWheelHoriz.ItemIndex      := ord(FTempMouseSettings.HorizWheel);
917   dropWheelCtrlHoriz.ItemIndex  := ord(FTempMouseSettings.CtrlHorizWheel);
918   dropWheelAltHoriz.ItemIndex   := ord(FTempMouseSettings.AltHorizWheel);
919   dropWheelShiftHoriz.ItemIndex := ord(FTempMouseSettings.ShiftHorizWheel);
920   dropWheelAltCtrlHoriz.ItemIndex      := ord(FTempMouseSettings.AltHorizWheel);
921   dropWheelShiftAltHoriz.ItemIndex     := ord(FTempMouseSettings.ShiftAltHorizWheel);
922   dropWheelShiftCtrlHoriz.ItemIndex    := ord(FTempMouseSettings.ShiftCtrlHorizWheel);
923   dropWheelShiftAltCtrlHoriz.ItemIndex := ord(FTempMouseSettings.ShiftAltCtrlHorizWheel);
924 
925   Dec(FInClickHandler);
926   UpdateButtons;
927 
928   HideMouseCheckBox.Checked := eoAutoHideCursor in TEditorOptions(AOptions).SynEditOptions2;
929   CheckForShiftChange(nil);
930 end;
931 
932 procedure TEditorMouseOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
933 begin
934   TEditorOptions(AOptions).UserMouseSettings.Assign(FTempMouseSettings);
935   with TEditorOptions(AOptions) do begin
936     if HideMouseCheckBox.Checked then
937       SynEditOptions2 := SynEditOptions2 + [eoAutoHideCursor]
938     else
939       SynEditOptions2 := SynEditOptions2 - [eoAutoHideCursor]
940   end;
941 end;
942 
TEditorMouseOptionsFrame.SupportedOptionsClassnull943 class function TEditorMouseOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
944 begin
945   Result := TEditorOptions;
946 end;
947 
TEditorMouseOptionsFrame.DefaultCollapseChildNodesnull948 class function TEditorMouseOptionsFrame.DefaultCollapseChildNodes: Boolean;
949 begin
950   Result := True;
951 end;
952 
953 initialization
954   RegisterIDEOptionsEditor(GroupEditor, TEditorMouseOptionsFrame, EdtOptionsMouse);
955 end.
956 
957