IDE: mouse options, make alt left config more flexible

git-svn-id: trunk@34055 -
This commit is contained in:
martin 2011-12-08 21:52:19 +00:00
parent 821277f0c9
commit b16c791477
4 changed files with 115 additions and 72 deletions

View File

@ -678,6 +678,7 @@ type
TMouseOptGutterLeftType = (moGLDownClick, moglUpClickAndSelect);
TMouseOptButtonActionOld = (
mbaNone,
mbaSelect, mbaSelectColumn, mbaSelectLine,
mbaPaste,
mbaDeclarationJump,
mbaDeclarationOrBlockJump,
@ -714,7 +715,6 @@ type
TEditorMouseOptions = class(TPersistent)
private
FAltColumnMode: Boolean;
FGutterLeft: TMouseOptGutterLeftType;
FTextMiddleClick: TMouseOptButtonActionOld;
FTextCtrlLeftClick: TMouseOptButtonActionOld;
@ -733,6 +733,7 @@ type
FGutterActionsFold, FGutterActionsFoldExp, FGutterActionsFoldCol: TSynEditMouseActions;
FGutterActionsLines: TSynEditMouseActions;
FSelectedUserScheme: String;
FTextAltLeftClick: TMouseOptButtonActionOld;
FTextCtrlMiddleClick: TMouseOptButtonAction;
FWheel: TMouseOptWheelAction;
procedure ClearUserSchemes;
@ -782,8 +783,8 @@ type
published
property GutterLeft: TMouseOptGutterLeftType read FGutterLeft write FGutterLeft
default moGLDownClick;
property AltColumnMode: Boolean read FAltColumnMode write FAltColumnMode
default True;
//property AltColumnMode: Boolean read FAltColumnMode write FAltColumnMode
// default True;
property TextDrag: Boolean read FTextDrag write FTextDrag
default True;
property TextDoubleSelLine: Boolean read FTextDoubleSelLine write FTextDoubleSelLine
@ -791,10 +792,13 @@ type
property TextRightMoveCaret: Boolean read FTextRightMoveCaret write FTextRightMoveCaret
default False;
property TextMiddleClick: TMouseOptButtonActionOld read FTextMiddleClick write SetTextMiddleClick
default mbaPaste;
property TextCtrlLeftClick: TMouseOptButtonActionOld read FTextCtrlLeftClick write SetTextCtrlLeftClick
default mbaDeclarationJump;
property TextAltLeftClick: TMouseOptButtonActionOld read FTextAltLeftClick write FTextAltLeftClick
default mbaSelectColumn;
property TextMiddleClick: TMouseOptButtonActionOld read FTextMiddleClick write SetTextMiddleClick
default mbaPaste;
property TextCtrlMiddleClick: TMouseOptButtonAction read FTextCtrlMiddleClick write FTextCtrlMiddleClick
default mbaZoomReset;
@ -2360,8 +2364,9 @@ procedure TEditorMouseOptions.Reset;
begin
FCustomSavedActions := False;
FGutterLeft := moGLDownClick;
FTextMiddleClick := mbaPaste;
FTextCtrlLeftClick := mbaDeclarationJump;
FTextAltLeftClick := mbaSelectColumn;
FTextMiddleClick := mbaPaste;
FTextCtrlMiddleClick := mbaZoomReset;
FWheel := mwaScroll;
FCtrlWheel := mwaZoom;
@ -2369,7 +2374,6 @@ begin
FShiftWheel := mwaScrollSingleLine;
FTextDoubleSelLine := False;
FTextRightMoveCaret := False;
FAltColumnMode := True;
FTextDrag := True;
end;
@ -2395,15 +2399,8 @@ begin
if FGutterLeft = moglUpClickAndSelect then begin
CDir := cdUp;
with FGutterActions do begin
if FAltColumnMode then begin
AddCommand(emcStartSelections, True, mbLeft, ccAny, cdDown, [], [ssShift, ssAlt], emcoSelectionStart);
AddCommand(emcStartSelections, True, mbLeft, ccAny, cdDown, [ssShift], [ssShift, ssAlt], emcoSelectionContinue);
AddCommand(emcStartColumnSelections, True, mbLeft, ccAny, cdDown, [ssAlt], [ssShift, ssAlt], emcoSelectionStart);
AddCommand(emcStartColumnSelections, True, mbLeft, ccAny, cdDown, [ssAlt, ssShift], [ssShift, ssAlt], emcoSelectionContinue);
end else begin
AddCommand(emcStartSelections, True, mbLeft, ccAny, cdDown, [], [ssShift], emcoSelectionStart);
AddCommand(emcStartSelections, True, mbLeft, ccAny, cdDown, [ssShift], [ssShift], emcoSelectionContinue);
end;
AddCommand(emcStartSelections, True, mbLeft, ccAny, cdDown, [], [ssShift], emcoSelectionStart);
AddCommand(emcStartSelections, True, mbLeft, ccAny, cdDown, [ssShift], [ssShift], emcoSelectionContinue);
end;
end;
with FGutterActions do begin
@ -2437,11 +2434,23 @@ end;
procedure TEditorMouseOptions.ResetTextToDefault;
procedure AddBtnClick(AnAction: TMouseOptButtonAction; const AButton: TSynMouseButton;
const AShift, AShiftMask: TShiftState; AddLinkDummy: Boolean = False);
AShift, AShiftMask: TShiftState; AddLinkDummy: Boolean = False; ASelContShift: TShiftState = []);
procedure AddSelCommand(const ACmd: TSynEditorMouseCommand);
begin
AShiftMask := AShiftMask + ASelContShift;
FTextActions.AddCommand( ACmd, True, AButton, ccSingle, cdDown, AShift, AShiftMask, emcoSelectionStart);
if ASelContShift <> [] then
FTextActions.AddCommand(ACmd, True, AButton, ccSingle, cdDown, AShift+ASelContShift, AShiftMask, emcoSelectionContinue);
end;
begin
with FTextActions do begin
case AnAction of
mbaNone: {nothing};
mbaSelect: AddSelCommand(emcStartSelections);
mbaSelectColumn: AddSelCommand(emcStartColumnSelections);
mbaSelectLine: AddSelCommand(emcStartLineSelections);
mbaPaste: // TODOS act on up? but needs to prevent selection on down
AddCommand(emcPasteSelection, True, AButton, ccSingle, cdDown, AShift, AShiftMask);
mbaDeclarationJump,
@ -2511,18 +2520,20 @@ begin
FTextActions.Clear;
with FTextActions do begin
// Left Btn
ModKeys := [ssShift];
if FTextCtrlLeftClick <> mbaNone then ModKeys := [ssShift, ssCtrl];
if FAltColumnMode then begin
ModKeys := ModKeys + [ssAlt];
AddCommand(emcStartSelections, True, mbLeft, ccSingle, cdDown, [], ModKeys, emcoSelectionStart);
AddCommand(emcStartSelections, True, mbLeft, ccSingle, cdDown, [ssShift], ModKeys, emcoSelectionContinue);
AddCommand(emcStartColumnSelections, True, mbLeft, ccSingle, cdDown, [ssAlt], ModKeys, emcoSelectionStart);
AddCommand(emcStartColumnSelections, True, mbLeft, ccSingle, cdDown, [ssShift, ssAlt], ModKeys, emcoSelectionContinue);
end else begin
AddCommand(emcStartSelections, True, mbLeft, ccSingle, cdDown, [], ModKeys, emcoSelectionStart);
AddCommand(emcStartSelections, True, mbLeft, ccSingle, cdDown, [ssShift], ModKeys, emcoSelectionContinue);
end;
if FTextCtrlLeftClick <> mbaNone then ModKeys := ModKeys + [ssCtrl];
if FTextAltLeftClick <> mbaNone then ModKeys := ModKeys + [ssAlt];
AddBtnClick(mbaSelect, mbLeft, [], ModKeys, False, [ssShift]);
AddBtnClick(FTextCtrlLeftClick, mbLeft, [SYNEDIT_LINK_MODIFIER], ModKeys, False, [ssShift]);
AddBtnClick(FTextAltLeftClick, mbLeft, [ssAlt], ModKeys, False, [ssShift]);
AddBtnClick(FTextMiddleClick, mbMiddle, [], [], FTextCtrlMiddleClick = mbaNone);
AddBtnClick(FTextCtrlMiddleClick, mbMiddle, [SYNEDIT_LINK_MODIFIER], [ssShift, ssAlt, ssCtrl]);
AddCommand(emcContextMenu, FTextRightMoveCaret, mbRight, ccSingle, cdUp, [], [], emcoSelectionCaretMoveNever);
if FTextDoubleSelLine then begin
AddCommand(emcSelectLine, True, mbLeft, ccDouble, cdDown, [], [], emcoSelectLineSmart);
@ -2532,12 +2543,6 @@ begin
AddCommand(emcSelectLine, True, mbLeft, ccTriple, cdDown, [], []);
end;
AddCommand(emcSelectPara, True, mbLeft, ccQuad, cdDown, [], []);
AddBtnClick(FTextCtrlLeftClick, mbLeft, [SYNEDIT_LINK_MODIFIER], [ssShift, ssAlt, ssCtrl]);
AddBtnClick(FTextMiddleClick, mbMiddle, [], [], FTextCtrlMiddleClick = mbaNone);
AddBtnClick(FTextCtrlMiddleClick, mbMiddle, [SYNEDIT_LINK_MODIFIER], [ssShift, ssAlt, ssCtrl]);
AddCommand(emcContextMenu, FTextRightMoveCaret, mbRight, ccSingle, cdUp, [], [], emcoSelectionCaretMoveNever);
end;
AddWheelAct(FWheel, [], []);
@ -2601,9 +2606,9 @@ var
begin
FName := Src.FName;
FAltColumnMode := Src.AltColumnMode;
FGutterLeft := Src.GutterLeft;
FTextCtrlLeftClick := Src.TextCtrlLeftClick;
fTextAltLeftClick := Src.TextAltLeftClick;
FTextMiddleClick := Src.TextMiddleClick;
FTextCtrlMiddleClick := Src.TextCtrlMiddleClick;
FWheel := Src.Wheel;
@ -2700,8 +2705,11 @@ procedure TEditorMouseOptions.LoadFromXml(aXMLConfig: TRttiXMLConfig;
MAct.Free;
end;
var
AltColumnMode: Boolean;
begin
Reset;
AltColumnMode := False;
if aOldPath <> '' then begin
// Read deprecated value
// It is on by default, so only if a user switched it off, actions is required
@ -2722,6 +2730,14 @@ begin
aXMLConfig.DeleteValue(aOldPath + 'DoubleClickSelectsLine');
end;
//AltColumnMode, before TextAltLeftClick
if (not AltColumnMode) then
AltColumnMode := aXMLConfig.GetValue(aPath + 'Default/AltColumnMode', True);
aXMLConfig.DeleteValue(aPath + 'Default/AltColumnMode');
if (not AltColumnMode) then
TextAltLeftClick := mbaNone;
CustomSavedActions := False;
aXMLConfig.ReadObject(aPath + 'Default/', Self);

View File

@ -180,7 +180,7 @@ inherited EditorMouseOptionsFrame: TEditorMouseOptionsFrame
AnchorSideRight.Control = pnlAllText
AnchorSideRight.Side = asrBottom
Left = 6
Height = 76
Height = 57
Top = 0
Width = 624
Anchors = [akTop, akLeft, akRight]
@ -190,31 +190,18 @@ inherited EditorMouseOptionsFrame: TEditorMouseOptionsFrame
BorderSpacing.Bottom = 6
BevelOuter = bvNone
ChildSizing.ControlsPerLine = 2
ClientHeight = 76
ClientHeight = 57
ClientWidth = 624
TabOrder = 0
object TextAltMode: TCheckBox
object TextDrag: TCheckBox
AnchorSideLeft.Control = PanelTextCheckBox
AnchorSideTop.Control = PanelTextCheckBox
Left = 0
Height = 19
Top = 0
Width = 88
Caption = 'TextAltMode'
OnChange = CheckOrRadioChange
TabOrder = 0
end
object TextDrag: TCheckBox
AnchorSideLeft.Control = PanelTextCheckBox
AnchorSideTop.Control = TextAltMode
AnchorSideTop.Side = asrBottom
Left = 0
Height = 19
Top = 19
Width = 67
Caption = 'TextDrag'
OnChange = CheckOrRadioChange
TabOrder = 1
TabOrder = 0
end
object RightMoveCaret: TCheckBox
AnchorSideLeft.Control = PanelTextCheckBox
@ -222,11 +209,11 @@ inherited EditorMouseOptionsFrame: TEditorMouseOptionsFrame
AnchorSideTop.Side = asrBottom
Left = 0
Height = 19
Top = 38
Top = 19
Width = 106
Caption = 'RightMoveCaret'
OnChange = CheckOrRadioChange
TabOrder = 2
TabOrder = 1
end
object TextDoubleSelLine: TCheckBox
AnchorSideLeft.Control = RightMoveCaret
@ -234,11 +221,11 @@ inherited EditorMouseOptionsFrame: TEditorMouseOptionsFrame
AnchorSideTop.Side = asrBottom
Left = 0
Height = 19
Top = 57
Top = 38
Width = 117
Caption = 'TextDoubleSelLine'
OnChange = CheckOrRadioChange
TabOrder = 3
TabOrder = 2
end
end
object ToolBar1: TToolBar
@ -328,7 +315,7 @@ inherited EditorMouseOptionsFrame: TEditorMouseOptionsFrame
AnchorSideTop.Side = asrCenter
Left = 6
Height = 16
Top = 9
Top = 38
Width = 71
BorderSpacing.Left = 6
Caption = 'CtrLLeftLabel'
@ -336,12 +323,13 @@ inherited EditorMouseOptionsFrame: TEditorMouseOptionsFrame
end
object dropCtrlLeft: TComboBox
AnchorSideLeft.Control = ScrollBox1
AnchorSideTop.Control = ScrollBox1
AnchorSideTop.Control = dropAltLeft
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ScrollBox1
AnchorSideRight.Side = asrBottom
Left = 140
Height = 23
Top = 6
Top = 35
Width = 490
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 140
@ -360,7 +348,7 @@ inherited EditorMouseOptionsFrame: TEditorMouseOptionsFrame
AnchorSideRight.Side = asrBottom
Left = 6
Height = 16
Top = 38
Top = 67
Width = 84
BorderSpacing.Left = 6
Caption = 'MiddleBtnLabel'
@ -374,7 +362,7 @@ inherited EditorMouseOptionsFrame: TEditorMouseOptionsFrame
AnchorSideRight.Side = asrBottom
Left = 140
Height = 23
Top = 35
Top = 64
Width = 490
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
@ -392,7 +380,7 @@ inherited EditorMouseOptionsFrame: TEditorMouseOptionsFrame
AnchorSideRight.Side = asrBottom
Left = 6
Height = 16
Top = 67
Top = 96
Width = 103
BorderSpacing.Left = 6
Caption = 'CtrlMiddleBtnLabel'
@ -406,7 +394,7 @@ inherited EditorMouseOptionsFrame: TEditorMouseOptionsFrame
AnchorSideRight.Side = asrBottom
Left = 140
Height = 23
Top = 64
Top = 93
Width = 490
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
@ -416,6 +404,36 @@ inherited EditorMouseOptionsFrame: TEditorMouseOptionsFrame
Style = csDropDownList
TabOrder = 1
end
object dropAltLeft: TComboBox
AnchorSideLeft.Control = ScrollBox1
AnchorSideTop.Control = ScrollBox1
AnchorSideRight.Control = ScrollBox1
AnchorSideRight.Side = asrBottom
Left = 140
Height = 23
Top = 6
Width = 490
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 140
BorderSpacing.Top = 6
BorderSpacing.Right = 6
ItemHeight = 15
OnChange = CheckOrRadioChange
Style = csDropDownList
TabOrder = 3
end
object AltLeftLabel: TLabel
AnchorSideLeft.Control = ScrollBox1
AnchorSideTop.Control = dropAltLeft
AnchorSideTop.Side = asrCenter
Left = 6
Height = 16
Top = 9
Width = 64
BorderSpacing.Left = 6
Caption = 'AltLeftLabel'
ParentColor = False
end
end
end
object Page2: TPage

View File

@ -35,6 +35,8 @@ type
TEditorMouseOptionsFrame = class(TAbstractIDEOptionsEditor)
BottomDivider: TBevel;
chkPredefinedScheme: TCheckBox;
AltLeftLabel: TLabel;
dropAltLeft: TComboBox;
ScrollBox1: TScrollBox;
ScrollBox2: TScrollBox;
TextDividerLabel: TDividerBevel;
@ -75,7 +77,6 @@ type
ResetGutterButton: TButton;
ResetTextButton: TButton;
RightMoveCaret: TCheckBox;
TextAltMode: TCheckBox;
TextDoubleSelLine: TCheckBox;
TextDrag: TCheckBox;
RadioGroup1: TRadioGroup;
@ -224,10 +225,10 @@ end;
function TEditorMouseOptionsFrame.IsTextSettingsChanged: Boolean;
begin
Result := not (
(FTempMouseSettings.AltColumnMode = TextAltMode.Checked) and
(FTempMouseSettings.TextDrag = TextDrag.Checked) and
(FTempMouseSettings.TextRightMoveCaret = RightMoveCaret.Checked) and
(FTempMouseSettings.TextDoubleSelLine = TextDoubleSelLine.Checked) and
(FTempMouseSettings.TextAltLeftClick = TMouseOptButtonAction(dropAltLeft.ItemIndex)) and
(FTempMouseSettings.TextCtrlLeftClick = TMouseOptButtonAction(dropCtrlLeft.ItemIndex)) and
(FTempMouseSettings.TextMiddleClick = TMouseOptButtonAction(dropMiddle.ItemIndex)) and
(FTempMouseSettings.TextCtrlMiddleClick = TMouseOptButtonAction(dropCtrlMiddle.ItemIndex)) and
@ -265,11 +266,11 @@ end;
procedure TEditorMouseOptionsFrame.SaveTextSettings;
begin
FTempMouseSettings.AltColumnMode := TextAltMode.Checked;
FTempMouseSettings.TextDrag := TextDrag.Checked;
FTempMouseSettings.TextRightMoveCaret := RightMoveCaret.Checked;
FTempMouseSettings.TextDoubleSelLine := TextDoubleSelLine.Checked;
FTempMouseSettings.TextAltLeftClick := TMouseOptButtonAction(dropAltLeft.ItemIndex);
FTempMouseSettings.TextCtrlLeftClick := TMouseOptButtonAction(dropCtrlLeft.ItemIndex);
FTempMouseSettings.TextMiddleClick := TMouseOptButtonAction(dropMiddle.ItemIndex);
FTempMouseSettings.TextCtrlMiddleClick := TMouseOptButtonAction(dropCtrlMiddle.ItemIndex);
@ -311,11 +312,14 @@ procedure TEditorMouseOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
procedure SetupButtonCombo(ACombo: TComboBox);
begin
ACombo.Clear;
ACombo.Items.Add(dlfMouseSimpleButtonNothing); // mbaNone,
ACombo.Items.Add(dlfMouseSimpleButtonPaste); // mbaPaste,
ACombo.Items.Add(dlfMouseSimpleButtonDeclaration); // mbaDeclarationJump,
ACombo.Items.Add(dlfMouseSimpleButtonNothing); // mbaNone,
ACombo.Items.Add(dlfMouseSimpleButtonSelect); // mbaSelect,
ACombo.Items.Add(dlfMouseSimpleButtonSelectColumn); // mbaSelectColumn,
ACombo.Items.Add(dlfMouseSimpleButtonSelectLine); // mbaSelectLine,
ACombo.Items.Add(dlfMouseSimpleButtonPaste); // mbaPaste,
ACombo.Items.Add(dlfMouseSimpleButtonDeclaration); // mbaDeclarationJump,
ACombo.Items.Add(dlfMouseSimpleButtonDeclarationBlock); // mbaDeclarationOrBlockJump,
ACombo.Items.Add(dlfMouseSimpleButtonZoomReset); // mbaZoomReset
ACombo.Items.Add(dlfMouseSimpleButtonZoomReset); // mbaZoomReset
end;
procedure SetupWheelCombo(ACombo: TComboBox);
@ -345,7 +349,6 @@ begin
GutterLeftRadio2.Caption := dlfMouseSimpleGutterLeftUp;
TextDividerLabel.Caption := dlfMouseSimpleTextSect;
TextAltMode.Caption := dlfMouseSimpleTextSectAlt;
TextDrag.Caption := dlfMouseSimpleTextSectDrag;
TextDoubleSelLine.Caption := dlfMouseSimpleTextSectDoubleSelLine;
RightMoveCaret.Caption := dlfMouseSimpleRightMoveCaret;
@ -354,6 +357,7 @@ begin
ToolButton2.Caption := dlfMouseSimpleTextSectPageWheel;
ToolBar1.AnchorSide[akTop].Side := asrBottom;
AltLeftLabel.Caption := dlfMouseSimpleTextSectAltLeftLabel;
CtrLLeftLabel.Caption := dlfMouseSimpleTextSectCtrlLeftLabel;
MiddleBtnLabel.Caption := dlfMouseSimpleTextSectMidLabel;
CtrlMiddleBtnLabel.Caption := dlfMouseSimpleTextSectCtrlMidLabel;
@ -362,6 +366,7 @@ begin
AltWheelBtnLabel.Caption := dlfMouseSimpleTextSectAltWheelLabel;
ShiftWheelBtnLabel.Caption := dlfMouseSimpleTextShiftSectWheelLabel;
SetupButtonCombo(dropAltLeft);
SetupButtonCombo(dropCtrlLeft);
SetupButtonCombo(dropMiddle);
SetupButtonCombo(dropCtrlMiddle);
@ -405,11 +410,11 @@ begin
moGLDownClick: GutterLeftRadio1.Checked := True;
moglUpClickAndSelect: GutterLeftRadio2.Checked := True;
end;
TextAltMode.Checked := FTempMouseSettings.AltColumnMode;
TextDrag.Checked := FTempMouseSettings.TextDrag;
RightMoveCaret.Checked := FTempMouseSettings.TextRightMoveCaret;
TextDoubleSelLine.Checked := FTempMouseSettings.TextDoubleSelLine;
dropAltLeft.ItemIndex := ord(FTempMouseSettings.TextAltLeftClick);
dropCtrlLeft.ItemIndex := ord(FTempMouseSettings.TextCtrlLeftClick);
dropMiddle.ItemIndex := ord(FTempMouseSettings.TextMiddleClick);
dropCtrlMiddle.ItemIndex := ord(FTempMouseSettings.TextCtrlMiddleClick);

View File

@ -1332,8 +1332,12 @@ resourcestring
dlfMouseSimpleTextSectPageBtn = 'Buttons';
dlfMouseSimpleTextSectPageWheel = 'Wheel';
dlfMouseSimpleTextSectAltLeftLabel = 'Alt Left Button';
dlfMouseSimpleTextSectCtrlLeftLabel = 'Ctrl Left Button';
dlfMouseSimpleButtonNothing = 'Nothing/Default';
dlfMouseSimpleButtonSelect = 'Select text';
dlfMouseSimpleButtonSelectColumn = 'Select text (Columns)';
dlfMouseSimpleButtonSelectLine = 'Select text (Lines)';
dlfMouseSimpleButtonPaste = 'Paste';
dlfMouseSimpleButtonDeclaration = 'Jumps to implementation';
dlfMouseSimpleButtonDeclarationBlock = 'Jumps to implementation/other block end';