diff --git a/components/synedit/languages/syneditstrconst.ca.po b/components/synedit/languages/syneditstrconst.ca.po index 65c02580d7..b27ce4fb16 100644 --- a/components/synedit/languages/syneditstrconst.ca.po +++ b/components/synedit/languages/syneditstrconst.ca.po @@ -523,6 +523,10 @@ msgstr "" msgid "Line Selection" msgstr "" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "" diff --git a/components/synedit/languages/syneditstrconst.cs.po b/components/synedit/languages/syneditstrconst.cs.po index 5f7fb57d4f..a9ef869182 100644 --- a/components/synedit/languages/syneditstrconst.cs.po +++ b/components/synedit/languages/syneditstrconst.cs.po @@ -523,6 +523,10 @@ msgstr "Uchop výběr" msgid "Line Selection" msgstr "Výběr řádky" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "Výběr" diff --git a/components/synedit/languages/syneditstrconst.de.po b/components/synedit/languages/syneditstrconst.de.po index bbfbc1c684..a89eda8422 100644 --- a/components/synedit/languages/syneditstrconst.de.po +++ b/components/synedit/languages/syneditstrconst.de.po @@ -526,6 +526,10 @@ msgstr "Auswahl verschieben" msgid "Line Selection" msgstr "Zeilenmodus" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "Auswahl" diff --git a/components/synedit/languages/syneditstrconst.es.po b/components/synedit/languages/syneditstrconst.es.po index cd73d0cdcf..253df40d94 100644 --- a/components/synedit/languages/syneditstrconst.es.po +++ b/components/synedit/languages/syneditstrconst.es.po @@ -521,6 +521,10 @@ msgstr "Arrastre la selección" msgid "Line Selection" msgstr "Selección de línea" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "Selección" diff --git a/components/synedit/languages/syneditstrconst.fi.po b/components/synedit/languages/syneditstrconst.fi.po index bf6727ef97..afc944610f 100644 --- a/components/synedit/languages/syneditstrconst.fi.po +++ b/components/synedit/languages/syneditstrconst.fi.po @@ -516,6 +516,10 @@ msgstr "Vedä valinta" msgid "Line Selection" msgstr "Rivivalinta" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "Valinta" diff --git a/components/synedit/languages/syneditstrconst.fr.po b/components/synedit/languages/syneditstrconst.fr.po index b399d79bd7..3e80f02065 100644 --- a/components/synedit/languages/syneditstrconst.fr.po +++ b/components/synedit/languages/syneditstrconst.fr.po @@ -522,6 +522,10 @@ msgstr "" msgid "Line Selection" msgstr "" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "" diff --git a/components/synedit/languages/syneditstrconst.he.po b/components/synedit/languages/syneditstrconst.he.po index 1a056c4881..d56f47060a 100644 --- a/components/synedit/languages/syneditstrconst.he.po +++ b/components/synedit/languages/syneditstrconst.he.po @@ -521,6 +521,10 @@ msgstr "גרור את הבחירה" msgid "Line Selection" msgstr "בחירת שורה" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "בחירה" diff --git a/components/synedit/languages/syneditstrconst.hu.po b/components/synedit/languages/syneditstrconst.hu.po index 421ba8ac92..5ce74a43f8 100644 --- a/components/synedit/languages/syneditstrconst.hu.po +++ b/components/synedit/languages/syneditstrconst.hu.po @@ -523,6 +523,10 @@ msgstr "Kijelölés húzása" msgid "Line Selection" msgstr "Sor kijelölés" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "Kijelölés" diff --git a/components/synedit/languages/syneditstrconst.id.po b/components/synedit/languages/syneditstrconst.id.po index 49bb92cdbd..456ce15f4d 100644 --- a/components/synedit/languages/syneditstrconst.id.po +++ b/components/synedit/languages/syneditstrconst.id.po @@ -526,6 +526,10 @@ msgstr "" msgid "Line Selection" msgstr "" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "" diff --git a/components/synedit/languages/syneditstrconst.it.po b/components/synedit/languages/syneditstrconst.it.po index 2c98591c6c..f484c85650 100644 --- a/components/synedit/languages/syneditstrconst.it.po +++ b/components/synedit/languages/syneditstrconst.it.po @@ -524,6 +524,10 @@ msgstr "Trascina la selezione" msgid "Line Selection" msgstr "Selezione riga" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "Selezione" diff --git a/components/synedit/languages/syneditstrconst.lt.po b/components/synedit/languages/syneditstrconst.lt.po index 5cb60b4be6..ffbf1af239 100644 --- a/components/synedit/languages/syneditstrconst.lt.po +++ b/components/synedit/languages/syneditstrconst.lt.po @@ -524,6 +524,10 @@ msgstr "Vilkti atranką" msgid "Line Selection" msgstr "Eilutės žymėjimas" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "Žymėjimas" diff --git a/components/synedit/languages/syneditstrconst.nl.po b/components/synedit/languages/syneditstrconst.nl.po index 86d10f81cf..5db5902d10 100644 --- a/components/synedit/languages/syneditstrconst.nl.po +++ b/components/synedit/languages/syneditstrconst.nl.po @@ -523,6 +523,10 @@ msgstr "" msgid "Line Selection" msgstr "" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "" diff --git a/components/synedit/languages/syneditstrconst.pl.po b/components/synedit/languages/syneditstrconst.pl.po index 8efb233a0b..47612b12f4 100644 --- a/components/synedit/languages/syneditstrconst.pl.po +++ b/components/synedit/languages/syneditstrconst.pl.po @@ -527,6 +527,10 @@ msgstr "" msgid "Line Selection" msgstr "Zaznaczenie wiersza" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "Zaznaczenie" diff --git a/components/synedit/languages/syneditstrconst.po b/components/synedit/languages/syneditstrconst.po index c2ccd0fefd..42382cf940 100644 --- a/components/synedit/languages/syneditstrconst.po +++ b/components/synedit/languages/syneditstrconst.po @@ -513,6 +513,10 @@ msgstr "" msgid "Line Selection" msgstr "" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "" diff --git a/components/synedit/languages/syneditstrconst.pt_BR.po b/components/synedit/languages/syneditstrconst.pt_BR.po index 5cfbe71169..553285f07b 100644 --- a/components/synedit/languages/syneditstrconst.pt_BR.po +++ b/components/synedit/languages/syneditstrconst.pt_BR.po @@ -522,6 +522,10 @@ msgstr "Arrastar Seleção" msgid "Line Selection" msgstr "Seleção Linha" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "Seleção" diff --git a/components/synedit/languages/syneditstrconst.ru.po b/components/synedit/languages/syneditstrconst.ru.po index 85984b2665..a427a75d88 100644 --- a/components/synedit/languages/syneditstrconst.ru.po +++ b/components/synedit/languages/syneditstrconst.ru.po @@ -522,6 +522,10 @@ msgstr "Перетаскивание выделенного" msgid "Line Selection" msgstr "Выбор строки" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "Выделение" diff --git a/components/synedit/languages/syneditstrconst.uk.po b/components/synedit/languages/syneditstrconst.uk.po index cc20eabec7..68eebfe888 100644 --- a/components/synedit/languages/syneditstrconst.uk.po +++ b/components/synedit/languages/syneditstrconst.uk.po @@ -524,6 +524,10 @@ msgstr "Вибір Перетягування" msgid "Line Selection" msgstr "Вибір Рядка" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "Вибір" diff --git a/components/synedit/languages/syneditstrconst.zh_CN.po b/components/synedit/languages/syneditstrconst.zh_CN.po index 574b47b31a..a50ce5099c 100644 --- a/components/synedit/languages/syneditstrconst.zh_CN.po +++ b/components/synedit/languages/syneditstrconst.zh_CN.po @@ -526,6 +526,10 @@ msgstr "" msgid "Line Selection" msgstr "" +#: syneditstrconst.syns_emcstartlineselectionsnoneempty +msgid "Line Selection (select immediate)" +msgstr "" + #: syneditstrconst.syns_emcstartselection msgid "Selection" msgstr "" diff --git a/components/synedit/synedit.pp b/components/synedit/synedit.pp index 084c354380..4b67fff274 100644 --- a/components/synedit/synedit.pp +++ b/components/synedit/synedit.pp @@ -3104,7 +3104,7 @@ begin case ACommand of emcNone: ; // do nothing, but result := true - emcStartSelections, emcStartColumnSelections, emcStartLineSelections, + emcStartSelections, emcStartColumnSelections, emcStartLineSelections, emcStartLineSelectionsNoneEmpty, emcStartSelectTokens, emcStartSelectWords, emcStartSelectLines: begin FMouseSelectionCmd := emcNone; @@ -3117,6 +3117,13 @@ begin FMouseSelectionMode := smColumn; emcStartLineSelections: FMouseSelectionMode := smLine; + emcStartLineSelectionsNoneEmpty: begin + FMouseSelectionMode := smLine; + if (AnAction.Option <> emcoSelectionContinue) or (not SelAvail) then + FBlockSelection.StartLineBytePos := FCaret.LineBytePos; + FBlockSelection.ActiveSelectionMode := smLine; + FBlockSelection.ForceSingleLineSelected := True; + end; emcStartSelectTokens, emcStartSelectWords, emcStartSelectLines: begin FMouseSelectionCmd := ACommand; AnInfo.NewCaret.LineCharPos := PixelsToRowColumn(Point(AnInfo.MouseX, AnInfo.MouseY), [scmLimitToLines, scmForceLeftSidePos]); @@ -3596,8 +3603,9 @@ begin if (sfMouseSelecting in fStateFlags) and ((fScrollDeltaX <> 0) or (fScrollDeltaY <> 0)) then Include(fStateFlags, sfMouseDoneSelecting); end; - if sfMouseDoneSelecting in fStateFlags then + if sfMouseDoneSelecting in fStateFlags then begin FBlockSelection.ActiveSelectionMode := FMouseSelectionMode; + end; if sfIsDragging in fStateFlags then FBlockSelection.DecPersistentLock; end diff --git a/components/synedit/syneditmousecmds.pp b/components/synedit/syneditmousecmds.pp index b58fd55f92..e248f76841 100644 --- a/components/synedit/syneditmousecmds.pp +++ b/components/synedit/syneditmousecmds.pp @@ -262,6 +262,7 @@ const emcStartSelections = TSynEditorMouseCommand(1); // Start BlockSelection (Default Left Mouse Btn) emcStartColumnSelections = TSynEditorMouseCommand(3); // Column BlockSelection (Default Alt - Left Mouse Btn) emcStartLineSelections = TSynEditorMouseCommand(4); // Line BlockSelection (Default Alt - Left Mouse Btn) + emcStartLineSelectionsNoneEmpty = TSynEditorMouseCommand(5); // Line BlockSelection (Default Alt - Left Mouse Btn) emcSelectWord = TSynEditorMouseCommand(6); emcSelectLine = TSynEditorMouseCommand(7); @@ -357,11 +358,12 @@ const implementation const - SynMouseCommandNames: array [0..27] of TIdentMapEntry = ( + SynMouseCommandNames: array [0..28] of TIdentMapEntry = ( (Value: emcNone; Name: 'emcNone'), (Value: emcStartSelections; Name: 'emcStartSelections'), (Value: emcStartColumnSelections; Name: 'emcStartColumnSelections'), (Value: emcStartLineSelections; Name: 'emcStartLineSelections'), + (Value: emcStartLineSelectionsNoneEmpty; Name: 'emcStartLineSelectionsNoneEmpty'), (Value: emcSelectWord; Name: 'emcSelectWord'), (Value: emcSelectLine; Name: 'emcSelectLine'), @@ -424,6 +426,7 @@ begin emcStartSelections: Result := SYNS_emcStartSelection; emcStartColumnSelections: Result := SYNS_emcStartColumnSelections; emcStartLineSelections: Result := SYNS_emcStartLineSelections; + emcStartLineSelectionsNoneEmpty: Result := SYNS_emcStartLineSelectionsNoneEmpty; emcSelectWord: Result := SYNS_emcSelectWord; emcSelectLine: Result := SYNS_emcSelectLine; emcSelectPara: Result := SYNS_emcSelectPara; @@ -473,7 +476,8 @@ begin case emc of emcStartSelections, emcStartColumnSelections, - emcStartLineSelections: Result := SYNS_emcSelection_opt; + emcStartLineSelections, + emcStartLineSelectionsNoneEmpty: Result := SYNS_emcSelection_opt; emcSelectLine: Result := SYNS_emcSelectLine_opt; emcMouseLink: Result := SYNS_emcMouseLink_opt; emcCodeFoldCollaps: Result := SYNS_emcCodeFoldCollaps_opt; diff --git a/components/synedit/syneditpointclasses.pas b/components/synedit/syneditpointclasses.pas index 3f00f63e7a..90539cffa3 100644 --- a/components/synedit/syneditpointclasses.pas +++ b/components/synedit/syneditpointclasses.pas @@ -103,6 +103,7 @@ type FEnabled: Boolean; FHookedLines: Boolean; FIsSettingText: Boolean; + FForceSingleLineSelected: Boolean; FActiveSelectionMode: TSynSelectionMode; FSelectionMode: TSynSelectionMode; FStartLinePos: Integer; // 1 based @@ -126,6 +127,7 @@ type procedure SetCaret(const AValue: TSynEditCaret); procedure SetEnabled(const Value : Boolean); procedure SetActiveSelectionMode(const Value: TSynSelectionMode); + procedure SetForceSingleLineSelected(AValue: Boolean); procedure SetHide(const AValue: Boolean); procedure SetPersistent(const AValue: Boolean); procedure SetSelectionMode (const AValue: TSynSelectionMode); @@ -163,6 +165,7 @@ type procedure AddBeforeSetSelTextHandler(AHandler: TSynBeforeSetSelTextEvent); procedure RemoveBeforeSetSelTextHandler(AHandler: TSynBeforeSetSelTextEvent); property Enabled: Boolean read FEnabled write SetEnabled; + property ForceSingleLineSelected: Boolean read FForceSingleLineSelected write SetForceSingleLineSelected; property ActiveSelectionMode: TSynSelectionMode read FActiveSelectionMode write SetActiveSelectionMode; property SelectionMode: TSynSelectionMode @@ -2159,6 +2162,7 @@ begin FInvalidateLinesMethod(nInval1, nInval2); end; FActiveSelectionMode := FSelectionMode; + FForceSingleLineSelected := False; FHide := False; FStartLinePos := Value.Y; FStartBytePos := Value.X; @@ -2261,6 +2265,18 @@ begin end; end; +procedure TSynEditSelection.SetForceSingleLineSelected(AValue: Boolean); +var + WasAvail: Boolean; +begin + if FForceSingleLineSelected = AValue then Exit; + WasAvail := SelAvail; + FForceSingleLineSelected := AValue; + + if WasAvail <> SelAvail then + fOnChangeList.CallNotifyEvents(self); +end; + procedure TSynEditSelection.SetHide(const AValue: Boolean); begin if FHide = AValue then exit; @@ -2337,7 +2353,8 @@ begin end; end else - Result := (FStartBytePos <> FEndBytePos) or (FStartLinePos <> FEndLinePos); + Result := (FStartBytePos <> FEndBytePos) or (FStartLinePos <> FEndLinePos) + or ( (FActiveSelectionMode = smLine) and FForceSingleLineSelected); end; function TSynEditSelection.SelCanContinue(ACaret: TSynEditCaret): Boolean; diff --git a/components/synedit/syneditstrconst.pp b/components/synedit/syneditstrconst.pp index b51a5a6aec..2ff8670510 100644 --- a/components/synedit/syneditstrconst.pp +++ b/components/synedit/syneditstrconst.pp @@ -401,6 +401,7 @@ resourcestring SYNS_emcStartSelection = 'Selection'; SYNS_emcStartColumnSelections = 'Column Selection'; SYNS_emcStartLineSelections = 'Line Selection'; + SYNS_emcStartLineSelectionsNoneEmpty = 'Line Selection (select immediate)'; SYNS_emcSelection_opt = 'Mode,Begin,Continue'; SYNS_emcSelectWord = 'Select Word'; SYNS_emcSelectLine = 'Select Line'; diff --git a/ide/editoroptions.pp b/ide/editoroptions.pp index 7752709f13..447fac970c 100644 --- a/ide/editoroptions.pp +++ b/ide/editoroptions.pp @@ -717,7 +717,11 @@ type end; TEditorOptions = class; - TMouseOptGutterLeftType = (moGLDownClick, moglUpClickAndSelect); + TMouseOptGutterLeftType = ( + moGLDownClick, + moglUpClickAndSelect, + moglUpClickAndSelectRighHalf // Changes and fold gutter (parts close to the text) + ); TMouseOptButtonActionOld = ( mbaNone, mbaSelect, mbaSelectColumn, mbaSelectLine, @@ -775,7 +779,9 @@ type FUserSchemes: TQuickStringlist; private FCustomSavedActions: Boolean; + FGutterActionsChanges: TSynEditMouseActions; FMainActions, FSelActions, FTextActions: TSynEditMouseActions; + FSelectOnLineNumbers: Boolean; FName: String; FGutterActions: TSynEditMouseActions; FGutterActionsFold, FGutterActionsFoldExp, FGutterActionsFoldCol: TSynEditMouseActions; @@ -887,9 +893,12 @@ type property GutterActionsFoldExp: TSynEditMouseActions read FGutterActionsFoldExp; property GutterActionsFoldCol: TSynEditMouseActions read FGutterActionsFoldCol; property GutterActionsLines: TSynEditMouseActions read FGutterActionsLines; + property GutterActionsChanges: TSynEditMouseActions read FGutterActionsChanges; published property GutterLeft: TMouseOptGutterLeftType read FGutterLeft write FGutterLeft default moglUpClickAndSelect; + property SelectOnLineNumbers: Boolean read FSelectOnLineNumbers write FSelectOnLineNumbers + default True; property TextDrag: Boolean read FTextDrag write FTextDrag default True; property TextRightMoveCaret: Boolean read FTextRightMoveCaret write FTextRightMoveCaret @@ -3234,6 +3243,7 @@ begin FGutterActionsFoldExp := TSynEditMouseActions.Create(nil); FGutterActionsFoldCol := TSynEditMouseActions.Create(nil); FGutterActionsLines := TSynEditMouseActions.Create(nil); + FGutterActionsChanges := TSynEditMouseActions.Create(nil); FUserSchemes := TQuickStringlist.Create; FVersion := 0; end; @@ -3250,6 +3260,7 @@ begin FGutterActionsFoldExp.Free; FGutterActionsFoldCol.Free; FGutterActionsLines.Free; + FGutterActionsChanges.Free; inherited Destroy; end; @@ -3321,9 +3332,17 @@ begin FTextRightMoveCaret := False; FTextDrag := True; + FSelectOnLineNumbers := True; end; procedure TEditorMouseOptions.ResetGutterToDefault; + procedure AddStartSel(List: TSynEditMouseActions); + begin + with List do begin + AddCommand(emcStartSelections, True, mbXLeft, ccAny, cdDown, [], [ssShift], emcoSelectionStart); + AddCommand(emcStartSelections, True, mbXLeft, ccAny, cdDown, [ssShift], [ssShift], emcoSelectionContinue); + end; + end; var CDir: TSynMAClickDir; R: TSynMAUpRestrictions; @@ -3333,6 +3352,7 @@ begin FGutterActionsFoldExp.Clear; FGutterActionsFoldCol.Clear; FGutterActionsLines.Clear; + FGutterActionsChanges.Clear; //TMouseOptGutterLeftType = (moGLDownClick, moglUpClickAndSelect); with FGutterActions do begin @@ -3342,19 +3362,48 @@ begin AddCommand(emcCodeFoldContextMenu, False, mbXRight, ccSingle, cdUp, [], []); end; + CDir := cdDown; R := []; if FGutterLeft = moglUpClickAndSelect then begin CDir := cdUp; R := crRestrictAll; - with FGutterActions do begin - AddCommand(emcStartSelections, True, mbXLeft, ccAny, cdDown, [], [ssShift], emcoSelectionStart); - AddCommand(emcStartSelections, True, mbXLeft, ccAny, cdDown, [ssShift], [ssShift], emcoSelectionContinue); - end; + AddStartSel(FGutterActions); end; + with FGutterActions do begin AddCommand(emcOnMainGutterClick, False, mbXLeft, ccAny, CDir, R, [], []); // breakpoint end; + + + if FGutterLeft in [moglUpClickAndSelect, moglUpClickAndSelectRighHalf] then begin + CDir := cdUp; + R := crRestrictAll; + AddStartSel(FGutterActionsChanges); + end; + + with FGutterActionsChanges do begin + if FGutterLeft = moGLDownClick then + AddCommand(emcNone, False, mbXLeft, ccAny, cdDown, [], []); + AddCommand(emcNone, False, mbXLeft, ccAny, cdUp, [], []); + end; + + + if FGutterLeft = moglUpClickAndSelectRighHalf then begin + if not FSelectOnLineNumbers then + AddStartSel(FGutterActionsLines); + AddStartSel(FGutterActionsFold); + end; + + + if FSelectOnLineNumbers then begin + with FGutterActionsLines do begin + AddCommand(emcStartLineSelectionsNoneEmpty, True, mbXLeft, ccAny, cdDown, [], [ssShift], emcoSelectionStart); + AddCommand(emcStartLineSelectionsNoneEmpty, True, mbXLeft, ccAny, cdDown, [ssShift], [ssShift], emcoSelectionContinue); + AddCommand(emcNone, False, mbXLeft, ccAny, cdUp, [], []); + end; + end; + with FGutterActionsFold do begin AddCommand(emcNone, False, mbXLeft, ccAny, CDir, R, [], []); end; @@ -3659,6 +3708,7 @@ begin FGutterActionsFoldExp.Assign(Src.GutterActionsFoldExp); FGutterActionsFoldCol.Assign(Src.GutterActionsFoldCol); FGutterActionsLines.Assign (Src.GutterActionsLines); + FGutterActionsChanges.Assign(Src.GutterActionsChanges); end; procedure TEditorMouseOptions.SetTextCtrlLeftClick(AValue: TMouseOptButtonActionOld); @@ -3686,6 +3736,7 @@ begin FName := Src.FName; FGutterLeft := Src.GutterLeft; + FSelectOnLineNumbers := Src.SelectOnLineNumbers; FTextDrag := Src.TextDrag; FTextRightMoveCaret := Src.TextRightMoveCaret; FSelectedUserScheme := Src.FSelectedUserScheme; @@ -3792,7 +3843,8 @@ begin Temp.GutterActionsFold.Equals (self.GutterActionsFold) and Temp.GutterActionsFoldCol.Equals(self.GutterActionsFoldCol) and Temp.GutterActionsFoldExp.Equals(self.GutterActionsFoldExp) and - Temp.GutterActionsLines.Equals (self.GutterActionsLines); + Temp.GutterActionsLines.Equals (self.GutterActionsLines) and + Temp.GutterActionsChanges.Equals(Self.GutterActionsChanges); Temp.Free; end; @@ -3897,6 +3949,7 @@ begin LoadMouseAct(aPath + 'GutterFoldExp/', GutterActionsFoldExp); LoadMouseAct(aPath + 'GutterFoldCol/', GutterActionsFoldCol); LoadMouseAct(aPath + 'GutterLineNum/', GutterActionsLines); + LoadMouseAct(aPath + 'GutterLineChange/', GutterActionsChanges); if Version < 1 then begin try @@ -3955,6 +4008,7 @@ begin SaveMouseAct(aPath + 'GutterFoldExp/', GutterActionsFoldExp); SaveMouseAct(aPath + 'GutterFoldCol/', GutterActionsFoldCol); SaveMouseAct(aPath + 'GutterLineNum/', GutterActionsLines); + SaveMouseAct(aPath + 'GutterLineChange/', GutterActionsChanges); end else begin // clear unused entries aXMLConfig.DeletePath(aPath + 'Main'); @@ -4007,6 +4061,7 @@ begin LoadMouseAct(aPath + 'GutterFoldExp/', GutterActionsFoldExp); LoadMouseAct(aPath + 'GutterFoldCol/', GutterActionsFoldCol); LoadMouseAct(aPath + 'GutterLineNum/', GutterActionsLines); + LoadMouseAct(aPath + 'GutterLineChange/', GutterActionsChanges); end; procedure TEditorMouseOptions.ExportToXml(aXMLConfig: TRttiXMLConfig; aPath: String); @@ -4037,6 +4092,7 @@ begin SaveMouseAct(aPath + 'GutterFoldExp/', GutterActionsFoldExp); SaveMouseAct(aPath + 'GutterFoldCol/', GutterActionsFoldCol); SaveMouseAct(aPath + 'GutterLineNum/', GutterActionsLines); + SaveMouseAct(aPath + 'GutterLineChange/', GutterActionsChanges); MAct.Free; end; @@ -5625,12 +5681,14 @@ begin if ASynEdit.Gutter.LineNumberPart <> nil then begin ASynEdit.Gutter.LineNumberPart.MouseActions.Assign(FUserMouseSettings.GutterActionsLines); end; - if ShowLineNumbers then begin // changes does the same as linenumbers - if ASynEdit.Gutter.ChangesPart<> nil then - ASynEdit.Gutter.ChangesPart.MouseActions.Assign(FUserMouseSettings.GutterActionsLines); - if (ASynEdit.Gutter.SeparatorPart <> nil) and (GutterSeparatorIndex = 2) then - ASynEdit.Gutter.SeparatorPart.MouseActions.Assign(FUserMouseSettings.GutterActionsLines); - end; + if ASynEdit.Gutter.ChangesPart<> nil then + ASynEdit.Gutter.ChangesPart.MouseActions.Assign(FUserMouseSettings.GutterActionsChanges); + + if (ASynEdit.Gutter.SeparatorPart <> nil) and (GutterSeparatorIndex = 2) and ShowLineNumbers then + ASynEdit.Gutter.SeparatorPart.MouseActions.Assign(FUserMouseSettings.GutterActionsLines) + else + if (ASynEdit.Gutter.SeparatorPart <> nil) and (GutterSeparatorIndex >= 2) then + ASynEdit.Gutter.SeparatorPart.MouseActions.Assign(FUserMouseSettings.GutterActionsChanges); finally ASynEdit.EndUpdate; end; diff --git a/ide/frames/editor_mouseaction_options.lfm b/ide/frames/editor_mouseaction_options.lfm index 20f5b7eeaf..a7af52f8e8 100644 --- a/ide/frames/editor_mouseaction_options.lfm +++ b/ide/frames/editor_mouseaction_options.lfm @@ -19,13 +19,13 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 - Height = 29 + Height = 23 Top = 0 Width = 636 Anchors = [akTop, akLeft, akRight] AutoSize = True BevelOuter = bvNone - ClientHeight = 29 + ClientHeight = 23 ClientWidth = 636 TabOrder = 0 Visible = False @@ -34,8 +34,8 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideTop.Control = dropUserSchemes AnchorSideTop.Side = asrCenter Left = 6 - Height = 23 - Top = 3 + Height = 19 + Top = 2 Width = 138 BorderSpacing.Left = 6 Caption = 'chkPredefinedScheme' @@ -49,13 +49,13 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = pnlUserSchemes AnchorSideRight.Side = asrBottom Left = 150 - Height = 29 + Height = 23 Top = 0 Width = 200 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 Constraints.MaxWidth = 200 - ItemHeight = 0 + ItemHeight = 15 OnChange = dropUserSchemesChange OnExit = dropUserSchemesChange OnKeyDown = dropUserSchemesKeyDown @@ -68,9 +68,9 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideTop.Control = GenericDividerLabel AnchorSideTop.Side = asrBottom Left = 6 - Height = 23 - Top = 58 - Width = 135 + Height = 19 + Top = 50 + Width = 133 BorderSpacing.Left = 6 Caption = 'HideMouseCheckBox' TabOrder = 1 @@ -82,13 +82,13 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 - Height = 81 - Top = 110 + Height = 107 + Top = 96 Width = 636 Anchors = [akTop, akLeft, akRight] AutoSize = True BevelOuter = bvNone - ClientHeight = 81 + ClientHeight = 107 ClientWidth = 636 TabOrder = 2 object PanelGutter: TPanel @@ -97,7 +97,7 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = pnlAllGutter AnchorSideRight.Side = asrBottom Left = 6 - Height = 46 + Height = 57 Top = 0 Width = 624 Anchors = [akTop, akLeft, akRight] @@ -105,7 +105,7 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame BorderSpacing.Left = 6 BorderSpacing.Right = 6 BevelOuter = bvNone - ClientHeight = 46 + ClientHeight = 57 ClientWidth = 624 TabOrder = 0 object GutterLeftRadio1: TRadioButton @@ -114,7 +114,7 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = PanelGutter AnchorSideRight.Side = asrBottom Left = 0 - Height = 23 + Height = 19 Top = 0 Width = 624 Anchors = [akTop, akLeft, akRight] @@ -131,24 +131,39 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = PanelGutter AnchorSideRight.Side = asrBottom Left = 0 - Height = 23 - Top = 23 + Height = 19 + Top = 19 Width = 624 Anchors = [akTop, akLeft, akRight] Caption = 'GutterLeftRadio2' OnChange = CheckOrRadioChange TabOrder = 1 end + object GutterLeftRadio3: TRadioButton + AnchorSideLeft.Control = PanelGutter + AnchorSideTop.Control = GutterLeftRadio2 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = PanelGutter + AnchorSideRight.Side = asrBottom + Left = 0 + Height = 19 + Top = 38 + Width = 624 + Anchors = [akTop, akLeft, akRight] + Caption = 'GutterLeftRadio3' + OnChange = CheckOrRadioChange + TabOrder = 2 + end end object ResetGutterButton: TButton - AnchorSideTop.Control = PanelGutter + AnchorSideTop.Control = chkGutterTextLines AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlAllGutter AnchorSideRight.Side = asrBottom - Left = 515 - Height = 29 - Top = 52 - Width = 115 + Left = 507 + Height = 25 + Top = 82 + Width = 123 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 6 @@ -157,6 +172,18 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame OnClick = ResetGutterButtonClick TabOrder = 1 end + object chkGutterTextLines: TCheckBox + AnchorSideLeft.Control = PanelGutter + AnchorSideTop.Control = PanelGutter + AnchorSideTop.Side = asrBottom + Left = 6 + Height = 19 + Top = 57 + Width = 121 + Caption = 'chkGutterTextLines' + OnChange = CheckOrRadioChange + TabOrder = 2 + end end object pnlAllText: TPanel AnchorSideLeft.Control = Owner @@ -166,13 +193,13 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlBottom Left = 0 - Height = 324 - Top = 220 + Height = 318 + Top = 230 Width = 636 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BevelOuter = bvNone - ClientHeight = 324 + ClientHeight = 318 ClientWidth = 636 TabOrder = 3 object PanelTextCheckBox: TPanel @@ -181,7 +208,7 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = pnlAllText AnchorSideRight.Side = asrBottom Left = 6 - Height = 46 + Height = 38 Top = 0 Width = 624 Anchors = [akTop, akLeft, akRight] @@ -191,15 +218,15 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame BorderSpacing.Bottom = 6 BevelOuter = bvNone ChildSizing.ControlsPerLine = 2 - ClientHeight = 46 + ClientHeight = 38 ClientWidth = 624 TabOrder = 0 object TextDrag: TCheckBox AnchorSideLeft.Control = PanelTextCheckBox Left = 0 - Height = 23 + Height = 19 Top = 0 - Width = 75 + Width = 67 Caption = 'TextDrag' OnChange = CheckOrRadioChange TabOrder = 0 @@ -209,9 +236,9 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideTop.Control = TextDrag AnchorSideTop.Side = asrBottom Left = 0 - Height = 23 - Top = 23 - Width = 111 + Height = 19 + Top = 19 + Width = 106 Caption = 'RightMoveCaret' OnChange = CheckOrRadioChange TabOrder = 1 @@ -225,7 +252,7 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Side = asrBottom Left = 0 Height = 26 - Top = 52 + Top = 44 Width = 636 Align = alNone Anchors = [akTop, akLeft, akRight] @@ -234,7 +261,7 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame TabOrder = 1 object ToolBtnMiddle: TToolButton Tag = 2 - Left = 196 + Left = 194 Top = 2 Caption = 'ToolBtnMiddle' Grouped = True @@ -243,7 +270,7 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame end object ToolBtnWheel: TToolButton Tag = 3 - Left = 283 + Left = 281 Top = 2 Caption = 'ToolBtnWheel' Grouped = True @@ -261,7 +288,7 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame end object ToolBtnLeftMulti: TToolButton Tag = 1 - Left = 97 + Left = 96 Top = 2 Caption = 'ToolBtnLeftMulti' Grouped = True @@ -270,7 +297,7 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame end object ToolBtnRight: TToolButton Tag = 4 - Left = 367 + Left = 364 Top = 2 Caption = 'ToolBtnRight' Grouped = True @@ -279,7 +306,7 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame end object ToolBtnExtra1: TToolButton Tag = 5 - Left = 444 + Left = 442 Top = 2 Caption = 'ToolBtnExtra1' Grouped = True @@ -288,7 +315,7 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame end object ToolBtnExtra2: TToolButton Tag = 6 - Left = 530 + Left = 523 Top = 2 Caption = 'ToolBtnExtra2' Grouped = True @@ -303,10 +330,10 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlAllText AnchorSideBottom.Side = asrBottom - Left = 526 - Height = 29 - Top = 295 - Width = 104 + Left = 518 + Height = 25 + Top = 293 + Width = 112 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Top = 6 @@ -323,8 +350,8 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = ResetTextButton Left = 0 - Height = 211 - Top = 78 + Height = 217 + Top = 70 Width = 636 PageIndex = 0 Anchors = [akTop, akLeft, akRight, akBottom] @@ -333,17 +360,17 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame object PageLeftMod: TPage object ScrollBoxLeftMod: TScrollBox Left = 0 - Height = 211 + Height = 217 Top = 0 Width = 636 - HorzScrollBar.Page = 623 + HorzScrollBar.Page = 246 HorzScrollBar.Tracking = True - VertScrollBar.Page = 211 + VertScrollBar.Page = 203 VertScrollBar.Tracking = True Align = alClient BorderStyle = bsNone - ClientHeight = 211 - ClientWidth = 623 + ClientHeight = 217 + ClientWidth = 636 TabOrder = 0 object dropCtrlLeft: TComboBox AnchorSideLeft.Control = dropAltLeft @@ -352,14 +379,14 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = ScrollBoxLeftMod AnchorSideRight.Side = asrBottom Left = 140 - Height = 29 - Top = 41 - Width = 477 + Height = 23 + Top = 35 + Width = 490 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 DropDownCount = 12 - ItemHeight = 0 + ItemHeight = 15 OnChange = CheckOrRadioChange Style = csDropDownList TabOrder = 0 @@ -369,9 +396,9 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideTop.Control = dropCtrlLeft AnchorSideTop.Side = asrCenter Left = 6 - Height = 17 - Top = 47 - Width = 73 + Height = 15 + Top = 39 + Width = 70 BorderSpacing.Left = 6 Caption = 'CtrLLeftLabel' ParentColor = False @@ -382,14 +409,14 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = ScrollBoxLeftMod AnchorSideRight.Side = asrBottom Left = 140 - Height = 29 + Height = 23 Top = 6 - Width = 477 + Width = 490 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 DropDownCount = 12 - ItemHeight = 0 + ItemHeight = 15 OnChange = CheckOrRadioChange Style = csDropDownList TabOrder = 1 @@ -399,9 +426,9 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideTop.Control = dropAltLeft AnchorSideTop.Side = asrCenter Left = 6 - Height = 17 - Top = 12 - Width = 65 + Height = 15 + Top = 10 + Width = 63 BorderSpacing.Left = 6 Caption = 'AltLeftLabel' ParentColor = False @@ -413,15 +440,15 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = ScrollBoxLeftMod AnchorSideRight.Side = asrBottom Left = 140 - Height = 29 - Top = 111 - Width = 477 + Height = 23 + Top = 93 + Width = 490 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 140 BorderSpacing.Top = 6 BorderSpacing.Right = 6 DropDownCount = 12 - ItemHeight = 0 + ItemHeight = 15 OnChange = CheckOrRadioChange Style = csDropDownList TabOrder = 2 @@ -433,14 +460,14 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = ScrollBoxLeftMod AnchorSideRight.Side = asrBottom Left = 140 - Height = 29 - Top = 76 - Width = 477 + Height = 23 + Top = 64 + Width = 490 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 DropDownCount = 12 - ItemHeight = 0 + ItemHeight = 15 OnChange = CheckOrRadioChange Style = csDropDownList TabOrder = 3 @@ -452,14 +479,14 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = ScrollBoxLeftMod AnchorSideRight.Side = asrBottom Left = 140 - Height = 29 - Top = 146 - Width = 477 + Height = 23 + Top = 122 + Width = 490 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 DropDownCount = 12 - ItemHeight = 0 + ItemHeight = 15 OnChange = CheckOrRadioChange Style = csDropDownList TabOrder = 4 @@ -471,14 +498,14 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = ScrollBoxLeftMod AnchorSideRight.Side = asrBottom Left = 140 - Height = 29 - Top = 181 - Width = 477 + Height = 23 + Top = 151 + Width = 490 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 DropDownCount = 12 - ItemHeight = 0 + ItemHeight = 15 OnChange = CheckOrRadioChange Style = csDropDownList TabOrder = 5 @@ -490,14 +517,14 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = ScrollBoxLeftMod AnchorSideRight.Side = asrBottom Left = 140 - Height = 29 - Top = 216 - Width = 477 + Height = 23 + Top = 180 + Width = 490 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 DropDownCount = 12 - ItemHeight = 0 + ItemHeight = 15 OnChange = CheckOrRadioChange Style = csDropDownList TabOrder = 6 @@ -507,9 +534,9 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideTop.Control = dropShiftLeft AnchorSideTop.Side = asrCenter Left = 6 - Height = 17 - Top = 117 - Width = 73 + Height = 15 + Top = 97 + Width = 72 BorderSpacing.Left = 6 Caption = 'ShiftLeftLabel' ParentColor = False @@ -519,9 +546,9 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideTop.Control = dropAltCtrlLeft AnchorSideTop.Side = asrCenter Left = 6 - Height = 17 - Top = 82 - Width = 87 + Height = 15 + Top = 68 + Width = 82 BorderSpacing.Left = 6 Caption = 'AltCtrlLeftLabel' ParentColor = False @@ -531,9 +558,9 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideTop.Control = dropShiftCtrlLeft AnchorSideTop.Side = asrCenter Left = 6 - Height = 17 - Top = 187 - Width = 95 + Height = 15 + Top = 155 + Width = 91 BorderSpacing.Left = 6 Caption = 'ShiftCtrlLeftLabel' ParentColor = False @@ -543,9 +570,9 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideTop.Control = dropShiftAltLeft AnchorSideTop.Side = asrCenter Left = 6 - Height = 17 - Top = 152 - Width = 89 + Height = 15 + Top = 126 + Width = 87 BorderSpacing.Left = 6 Caption = 'ShiftAltLeftLabel' ParentColor = False @@ -555,9 +582,9 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideTop.Control = dropShiftAltCtrlLeft AnchorSideTop.Side = asrCenter Left = 6 - Height = 17 - Top = 222 - Width = 111 + Height = 15 + Top = 184 + Width = 106 BorderSpacing.Left = 6 Caption = 'ShiftAltCtrlLeftLabel' ParentColor = False @@ -2181,13 +2208,13 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 0 - Height = 44 - Top = 544 + Height = 40 + Top = 548 Width = 636 Anchors = [akLeft, akRight, akBottom] AutoSize = True BevelOuter = bvNone - ClientHeight = 44 + ClientHeight = 40 ClientWidth = 636 TabOrder = 4 object BottomDivider: TBevel @@ -2210,9 +2237,9 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = ResetAllButton AnchorSideBottom.Side = asrBottom Left = 6 - Height = 17 + Height = 15 Top = 15 - Width = 523 + Width = 514 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Right = 6 @@ -2229,9 +2256,9 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = ResetAllButton AnchorSideBottom.Side = asrBottom Left = 6 - Height = 17 + Height = 15 Top = 15 - Width = 523 + Width = 514 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Right = 6 @@ -2247,10 +2274,10 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = pnlBottom AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom - Left = 535 - Height = 29 + Left = 526 + Height = 25 Top = 15 - Width = 95 + Width = 104 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 6 @@ -2267,8 +2294,8 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 - Height = 17 - Top = 35 + Height = 15 + Top = 29 Width = 624 Caption = 'GenericDividerLabel' Anchors = [akTop, akLeft, akRight] @@ -2283,8 +2310,8 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 - Height = 17 - Top = 87 + Height = 15 + Top = 75 Width = 624 Caption = 'GutterDividerLabel' Anchors = [akTop, akLeft, akRight] @@ -2299,8 +2326,8 @@ object EditorMouseOptionsFrame: TEditorMouseOptionsFrame AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 - Height = 17 - Top = 197 + Height = 15 + Top = 209 Width = 624 Caption = 'TextDividerLabel' Anchors = [akTop, akLeft, akRight] diff --git a/ide/frames/editor_mouseaction_options.pas b/ide/frames/editor_mouseaction_options.pas index 9fb3b36495..dc74aff385 100644 --- a/ide/frames/editor_mouseaction_options.pas +++ b/ide/frames/editor_mouseaction_options.pas @@ -33,6 +33,8 @@ type { TEditorMouseOptionsFrame } TEditorMouseOptionsFrame = class(TAbstractIDEOptionsEditor) + chkGutterTextLines: TCheckBox; + GutterLeftRadio3: TRadioButton; lblWheel: TLabel; lblWheelAlt: TLabel; lblWheelCtrl: TLabel; @@ -497,8 +499,12 @@ procedure TEditorMouseOptionsFrame.SaveGutterSettings; begin if GutterLeftRadio2.Checked then FTempMouseSettings.GutterLeft := moglUpClickAndSelect + else + if GutterLeftRadio3.Checked then + FTempMouseSettings.GutterLeft := moglUpClickAndSelectRighHalf else FTempMouseSettings.GutterLeft := moGLDownClick; + FTempMouseSettings.SelectOnLineNumbers := chkGutterTextLines.Checked; FTempMouseSettings.ResetGutterToDefault; if FDialog.FindEditor(TEditorMouseOptionsAdvFrame) <> nil then TEditorMouseOptionsAdvFrame(FDialog.FindEditor(TEditorMouseOptionsAdvFrame)).RefreshSettings; @@ -605,6 +611,8 @@ begin GutterDividerLabel.Caption := dlfMouseSimpleGutterSect; GutterLeftRadio1.Caption := dlfMouseSimpleGutterLeftDown; GutterLeftRadio2.Caption := dlfMouseSimpleGutterLeftUp; + GutterLeftRadio3.Caption := dlfMouseSimpleGutterLeftUpRight; + chkGutterTextLines.Caption := dlfMouseSimpleGutterLines; TextDividerLabel.Caption := dlfMouseSimpleTextSect; TextDrag.Caption := dlfMouseSimpleTextSectDrag; @@ -773,7 +781,9 @@ begin case FTempMouseSettings.GutterLeft of moGLDownClick: GutterLeftRadio1.Checked := True; moglUpClickAndSelect: GutterLeftRadio2.Checked := True; + moglUpClickAndSelectRighHalf: GutterLeftRadio3.Checked := True; end; + chkGutterTextLines.Checked := FTempMouseSettings.SelectOnLineNumbers; TextDrag.Checked := FTempMouseSettings.TextDrag; RightMoveCaret.Checked := FTempMouseSettings.TextRightMoveCaret; diff --git a/ide/frames/editor_mouseaction_options_advanced.pas b/ide/frames/editor_mouseaction_options_advanced.pas index d8895694e7..f8a465cd30 100644 --- a/ide/frames/editor_mouseaction_options_advanced.pas +++ b/ide/frames/editor_mouseaction_options_advanced.pas @@ -90,6 +90,7 @@ type FGutterNode: TTreeNode; FGutterFoldNode, FGutterFoldExpNode, FGutterFoldColNode: TTreeNode; FGutterLinesNode: TTreeNode; + FGutterChangeNode: TTreeNode; FCurNode: TTreeNode; FCurActions: TSynEditMouseActions; @@ -624,6 +625,9 @@ begin // LineNum FGutterLinesNode := ContextTree.Items.AddChild(FGutterNode, dlgMouseOptNodeGutterLines); FGutterLinesNode.Data := FTempMouseSettings.GutterActionsLines; + // Changes + FGutterChangeNode := ContextTree.Items.AddChild(FGutterNode, dlgMouseOptNodeGutterChanges); + FGutterChangeNode.Data := FTempMouseSettings.GutterActionsChanges; ActionGrid.Constraints.MinWidth := ActionGrid.ColCount * MinGridColSize; ActionGrid.Cells[0,0] := dlgMouseOptHeadDesc; diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index e15e65e72b..310d5db985 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -1543,6 +1543,8 @@ resourcestring dlfMouseSimpleGutterSect = 'Gutter'; dlfMouseSimpleGutterLeftDown = 'Standard, All actions (breakpoint, fold) on mouse down'; dlfMouseSimpleGutterLeftUp = 'Extended, Actions (breakpoint, fold) on mouse up. Selection on mouse down and move'; + dlfMouseSimpleGutterLeftUpRight = 'Extended, Actions, right gutter half only'; + dlfMouseSimpleGutterLines = 'Use line numers to select lines'; dlfMouseSimpleTextSect = 'Text'; dlfMouseSimpleTextSectDrag = 'Drag selection (copy/paste)'; dlfMouseSimpleRightMoveCaret = 'Right mouse includes caret move'; @@ -1636,6 +1638,7 @@ resourcestring dlgMouseOptNodeGutterFoldCol = 'Collapsed [+]'; dlgMouseOptNodeGutterFoldExp = 'Expanded [-]'; dlgMouseOptNodeGutterLines = 'Line Numbers'; + dlgMouseOptNodeGutterChanges = 'Line Changes'; dlgMouseOptHeadOrder = 'Order'; dlgMouseOptHeadContext = 'Context'; dlgMouseOptHeadDesc = 'Action';