mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-21 20:29:35 +01:00
EditorOptions: user defined mouse schemes
git-svn-id: trunk@25818 -
This commit is contained in:
parent
9e6de7a287
commit
1b77293eb8
@ -685,28 +685,48 @@ type
|
||||
FTextDoubleSelLine: Boolean;
|
||||
FTextDrag: Boolean;
|
||||
FTextRightMoveCaret: Boolean;
|
||||
FUserSchemes: TQuickStringlist;
|
||||
private
|
||||
FCustomSavedActions: Boolean;
|
||||
FOptions: TEditorOptions;
|
||||
FMainActions, FSelActions: TSynEditMouseActions;
|
||||
FName: String;
|
||||
FGutterActions: TSynEditMouseActions;
|
||||
FGutterActionsFold, FGutterActionsFoldExp, FGutterActionsFoldCol: TSynEditMouseActions;
|
||||
FGutterActionsLines: TSynEditMouseActions;
|
||||
FSelectedUserScheme: String;
|
||||
procedure ClearUserSchemes;
|
||||
function GetUserSchemeNames(Index: Integer): String;
|
||||
function GetUserSchemes(Index: String): TEditorMouseOptions;
|
||||
function GetUserSchemesAtPos(Index: Integer): TEditorMouseOptions;
|
||||
function GetSelectedUserSchemeIndex: Integer;
|
||||
procedure SetSelectedUserScheme(const AValue: String);
|
||||
procedure SetSelectedUserSchemeIndex(const AValue: Integer);
|
||||
procedure AssignActions(Src: TEditorMouseOptions);
|
||||
public
|
||||
constructor Create(AOptions: TEditorOptions);
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
procedure Reset;
|
||||
procedure Read;
|
||||
procedure WriteBack;
|
||||
procedure ResetGutterToDefault;
|
||||
procedure ResetTextToDefault;
|
||||
procedure ResetToUserScheme;
|
||||
procedure AssignEx(Src: TEditorMouseOptions; WithUserSchemes: Boolean);
|
||||
procedure Assign(Src: TEditorMouseOptions); reintroduce;
|
||||
function IsPresetEqualToMouseActions: Boolean;
|
||||
function CalcCustomSavedActions: Boolean;
|
||||
function IsPresetEqualToMouseActions: Boolean;
|
||||
function CalcCustomSavedActions: Boolean;
|
||||
procedure LoadFromXml(aXMLConfig: TRttiXMLConfig; aPath: String; aOldPath: String = '');
|
||||
procedure SaveToXml(aXMLConfig: TRttiXMLConfig; aPath: String);
|
||||
procedure ImportFromXml(aXMLConfig: TRttiXMLConfig; aPath: String);
|
||||
procedure ExportToXml(aXMLConfig: TRttiXMLConfig; aPath: String);
|
||||
procedure LoadUserSchemes;
|
||||
function UserSchemeCount: Integer;
|
||||
function IndexOfUserScheme(SchemeName: String): Integer;
|
||||
|
||||
property Name: String read FName;
|
||||
property UserSchemes[Index: String]: TEditorMouseOptions read GetUserSchemes;
|
||||
property UserSchemesAtPos[Index: Integer]: TEditorMouseOptions read GetUserSchemesAtPos;
|
||||
property UserSchemeNames[Index: Integer]: String read GetUserSchemeNames;
|
||||
property SelectedUserSchemeIndex: Integer
|
||||
read GetSelectedUserSchemeIndex write SetSelectedUserSchemeIndex;
|
||||
|
||||
property MainActions: TSynEditMouseActions read FMainActions;
|
||||
property SelActions: TSynEditMouseActions read FSelActions;
|
||||
@ -725,6 +745,7 @@ type
|
||||
property TextCtrlLeftClick: TMouseOptTextCtrlLeft read FTextCtrlLeftClick write FTextCtrlLeftClick;
|
||||
// the flag below is set by CalcCustomSavedActions
|
||||
property CustomSavedActions: Boolean read FCustomSavedActions write FCustomSavedActions;
|
||||
property SelectedUserScheme: String read FSelectedUserScheme write SetSelectedUserScheme;
|
||||
end;
|
||||
|
||||
{ TEditorMouseOptionPresets }
|
||||
@ -945,13 +966,7 @@ type
|
||||
fKeyMap: TKeyCommandRelationList;
|
||||
|
||||
// Mouse Mappings options
|
||||
fMouseMap: TSynEditMouseActions;
|
||||
fMouseSelMap: TSynEditMouseActions;
|
||||
FMouseGutterActions: TSynEditMouseActions;
|
||||
FMouseGutterActionsFold: TSynEditMouseActions;
|
||||
FMouseGutterActionsFoldCol: TSynEditMouseActions;
|
||||
FMouseGutterActionsFoldExp: TSynEditMouseActions;
|
||||
FMouseGutterActionsLines: TSynEditMouseActions;
|
||||
FUserMouseSettings: TEditorMouseOptions;
|
||||
FTempMouseSettings: TEditorMouseOptions;
|
||||
|
||||
// Color options
|
||||
@ -1088,15 +1103,10 @@ type
|
||||
property KeyMap: TKeyCommandRelationList read fKeyMap;
|
||||
|
||||
// Mouse Mappings
|
||||
property MouseMap: TSynEditMouseActions read fMouseMap;
|
||||
property MouseSelMap: TSynEditMouseActions read fMouseSelMap;
|
||||
property MouseGutterActions: TSynEditMouseActions read FMouseGutterActions;
|
||||
property MouseGutterActionsFold: TSynEditMouseActions read FMouseGutterActionsFold;
|
||||
property MouseGutterActionsFoldExp: TSynEditMouseActions read FMouseGutterActionsFoldExp;
|
||||
property MouseGutterActionsFoldCol: TSynEditMouseActions read FMouseGutterActionsFoldCol;
|
||||
property MouseGutterActionsLines: TSynEditMouseActions read FMouseGutterActionsLines;
|
||||
// Used by the 2 Mouse-option pages, so they share data
|
||||
property TempMouseSettings: TEditorMouseOptions read FTempMouseSettings write FTempMouseSettings;
|
||||
// Current saved config
|
||||
property UserMouseSettings: TEditorMouseOptions read FUserMouseSettings;
|
||||
// Used by the 2 Mouse-option pages, so they share data (un-saved)
|
||||
property TempMouseSettings: TEditorMouseOptions read FTempMouseSettings;
|
||||
|
||||
// Color options
|
||||
property HighlighterList: TEditOptLangList read fHighlighterList;
|
||||
@ -2396,22 +2406,53 @@ end;
|
||||
|
||||
{ TEditorMouseOptions }
|
||||
|
||||
constructor TEditorMouseOptions.Create(AOptions: TEditorOptions);
|
||||
procedure TEditorMouseOptions.ClearUserSchemes;
|
||||
begin
|
||||
while FUserSchemes.Count > 0 do begin
|
||||
FUserSchemes.Objects[0].Free;
|
||||
FUserSchemes.Delete(0);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TEditorMouseOptions.GetUserSchemeNames(Index: Integer): String;
|
||||
begin
|
||||
Result := TEditorMouseOptions(FUserSchemes.Objects[Index]).Name;
|
||||
end;
|
||||
|
||||
function TEditorMouseOptions.GetUserSchemes(Index: String): TEditorMouseOptions;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
i := IndexOfUserScheme(Index);
|
||||
if i >= 0 then
|
||||
Result := UserSchemesAtPos[i]
|
||||
else
|
||||
Result := nil;
|
||||
end;
|
||||
|
||||
function TEditorMouseOptions.GetUserSchemesAtPos(Index: Integer): TEditorMouseOptions;
|
||||
begin
|
||||
Result := TEditorMouseOptions(FUserSchemes.Objects[Index]);
|
||||
end;
|
||||
|
||||
constructor TEditorMouseOptions.Create;
|
||||
begin
|
||||
inherited Create;
|
||||
Reset;
|
||||
FOptions := AOptions;
|
||||
FMainActions := TSynEditMouseActions.Create(nil);
|
||||
FSelActions := TSynEditMouseActions.Create(nil);
|
||||
FGutterActions := TSynEditMouseActions.Create(nil);
|
||||
FGutterActionsFold := TSynEditMouseActions.Create(nil);
|
||||
FMainActions := TSynEditMouseActions.Create(nil);
|
||||
FSelActions := TSynEditMouseActions.Create(nil);
|
||||
FGutterActions := TSynEditMouseActions.Create(nil);
|
||||
FGutterActionsFold := TSynEditMouseActions.Create(nil);
|
||||
FGutterActionsFoldExp := TSynEditMouseActions.Create(nil);
|
||||
FGutterActionsFoldCol := TSynEditMouseActions.Create(nil);
|
||||
FGutterActionsLines := TSynEditMouseActions.Create(nil);
|
||||
FGutterActionsLines := TSynEditMouseActions.Create(nil);
|
||||
FUserSchemes := TQuickStringlist.Create;
|
||||
end;
|
||||
|
||||
destructor TEditorMouseOptions.Destroy;
|
||||
begin
|
||||
ClearUserSchemes;
|
||||
FUserSchemes.Free;
|
||||
FMainActions.Free;
|
||||
FSelActions.Free;
|
||||
FGutterActions.Free;
|
||||
@ -2425,35 +2466,13 @@ end;
|
||||
procedure TEditorMouseOptions.Reset;
|
||||
begin
|
||||
FCustomSavedActions := False;
|
||||
FGutterLeft := moGLDownClick;
|
||||
FTextMiddleClick := moTMPaste;
|
||||
FTextCtrlLeftClick := moTCLJump;
|
||||
FTextDoubleSelLine := False;
|
||||
FGutterLeft := moGLDownClick;
|
||||
FTextMiddleClick := moTMPaste;
|
||||
FTextCtrlLeftClick := moTCLJump;
|
||||
FTextDoubleSelLine := False;
|
||||
FTextRightMoveCaret := False;
|
||||
FAltColumnMode := True;
|
||||
FTextDrag := True;
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptions.Read;
|
||||
begin
|
||||
FMainActions.Assign(FOptions.MouseMap);
|
||||
FSelActions.Assign(FOptions.MouseSelMap);
|
||||
FGutterActions.Assign(FOptions.MouseGutterActions);
|
||||
FGutterActionsFold.Assign(FOptions.MouseGutterActionsFold);
|
||||
FGutterActionsFoldExp.Assign(FOptions.MouseGutterActionsFoldExp);
|
||||
FGutterActionsFoldCol.Assign(FOptions.MouseGutterActionsFoldCol);
|
||||
FGutterActionsLines.Assign(FOptions.MouseGutterActionsLines);
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptions.WriteBack;
|
||||
begin
|
||||
FOptions.MouseMap.Assign(FMainActions);
|
||||
FOptions.MouseSelMap.Assign(FSelActions);
|
||||
FOptions.MouseGutterActions.Assign(FGutterActions);
|
||||
FOptions.MouseGutterActionsFold.Assign(FGutterActionsFold);
|
||||
FOptions.MouseGutterActionsFoldExp.Assign(FGutterActionsFoldExp);
|
||||
FOptions.MouseGutterActionsFoldCol.Assign(FGutterActionsFoldCol);
|
||||
FOptions.MouseGutterActionsLines.Assign(FGutterActionsLines);
|
||||
FAltColumnMode := True;
|
||||
FTextDrag := True;
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptions.ResetGutterToDefault;
|
||||
@ -2571,16 +2590,17 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptions.Assign(Src: TEditorMouseOptions);
|
||||
procedure TEditorMouseOptions.ResetToUserScheme;
|
||||
var
|
||||
i: LongInt;
|
||||
begin
|
||||
FAltColumnMode := Src.AltColumnMode;
|
||||
FGutterLeft := Src.GutterLeft;
|
||||
FTextMiddleClick := Src.TextMiddleClick;
|
||||
FTextCtrlLeftClick := Src.TextCtrlLeftClick;
|
||||
FTextDoubleSelLine := Src.TextDoubleSelLine;
|
||||
FTextDrag := Src.TextDrag;
|
||||
FTextRightMoveCaret := Src.TextRightMoveCaret;
|
||||
i := SelectedUserSchemeIndex;
|
||||
if i < 0 then exit;
|
||||
AssignActions(UserSchemesAtPos[i]);
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptions.AssignActions(Src: TEditorMouseOptions);
|
||||
begin
|
||||
FMainActions.Assign (Src.MainActions);
|
||||
FSelActions.Assign (Src.SelActions);
|
||||
FGutterActions.Assign (Src.GutterActions);
|
||||
@ -2590,14 +2610,52 @@ begin
|
||||
FGutterActionsLines.Assign (Src.GutterActionsLines);
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptions.AssignEx(Src: TEditorMouseOptions; WithUserSchemes: Boolean);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
FName := Src.FName;
|
||||
|
||||
FAltColumnMode := Src.AltColumnMode;
|
||||
FGutterLeft := Src.GutterLeft;
|
||||
FTextMiddleClick := Src.TextMiddleClick;
|
||||
FTextCtrlLeftClick := Src.TextCtrlLeftClick;
|
||||
FTextDoubleSelLine := Src.TextDoubleSelLine;
|
||||
FTextDrag := Src.TextDrag;
|
||||
FTextRightMoveCaret := Src.TextRightMoveCaret;
|
||||
FSelectedUserScheme := Src.FSelectedUserScheme;
|
||||
|
||||
AssignActions(Src);
|
||||
|
||||
if WithUserSchemes then begin
|
||||
ClearUserSchemes;
|
||||
for i := 0 to Src.FUserSchemes.Count - 1 do begin
|
||||
FUserSchemes.AddObject(Src.FUserSchemes[i], TEditorMouseOptions.Create);
|
||||
TEditorMouseOptions(FUserSchemes.Objects[i]).Assign
|
||||
( TEditorMouseOptions(Src.FUserSchemes.Objects[i]) );
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptions.Assign(Src: TEditorMouseOptions);
|
||||
begin
|
||||
AssignEx(Src, True);
|
||||
end;
|
||||
|
||||
function TEditorMouseOptions.IsPresetEqualToMouseActions: Boolean;
|
||||
var
|
||||
Temp: TEditorMouseOptions;
|
||||
i: Integer;
|
||||
begin
|
||||
Temp := TEditorMouseOptions.Create(nil);
|
||||
Temp.Assign(self);
|
||||
Temp.ResetTextToDefault;
|
||||
Temp.ResetGutterToDefault;
|
||||
i := SelectedUserSchemeIndex;
|
||||
Temp := TEditorMouseOptions.Create;
|
||||
Temp.AssignEx(self, i >= 0);
|
||||
if i >= 0 then begin
|
||||
Temp.ResetToUserScheme;
|
||||
end else begin
|
||||
Temp.ResetTextToDefault;
|
||||
Temp.ResetGutterToDefault;
|
||||
end;
|
||||
Result :=
|
||||
Temp.MainActions.Equals(self.MainActions) and
|
||||
Temp.SelActions.Equals (self.SelActions) and
|
||||
@ -2610,14 +2668,8 @@ begin
|
||||
end;
|
||||
|
||||
function TEditorMouseOptions.CalcCustomSavedActions: Boolean;
|
||||
var
|
||||
Temp: TEditorMouseOptions;
|
||||
begin
|
||||
Temp := TEditorMouseOptions.Create(FOptions);
|
||||
Temp.Assign(self);
|
||||
Temp.Read;
|
||||
Result := not Temp.IsPresetEqualToMouseActions;
|
||||
Temp.Free;
|
||||
Result := not IsPresetEqualToMouseActions;
|
||||
FCustomSavedActions := Result;
|
||||
end;
|
||||
|
||||
@ -2681,22 +2733,27 @@ begin
|
||||
|
||||
CustomSavedActions := False;
|
||||
aXMLConfig.ReadObject(aPath + 'Default/', Self);
|
||||
|
||||
if (FSelectedUserScheme <> '') and (UserSchemes[FSelectedUserScheme] = nil) then
|
||||
FSelectedUserScheme := '';
|
||||
|
||||
if CustomSavedActions then begin
|
||||
// Load
|
||||
LoadMouseAct(aPath + 'Main/', FOptions.MouseMap);
|
||||
LoadMouseAct(aPath + 'MainSelection/', FOptions.MouseSelMap);
|
||||
LoadMouseAct(aPath + 'Gutter/', FOptions.MouseGutterActions);
|
||||
LoadMouseAct(aPath + 'GutterFold/', FOptions.MouseGutterActionsFold);
|
||||
LoadMouseAct(aPath + 'GutterFoldExp/', FOptions.MouseGutterActionsFoldExp);
|
||||
LoadMouseAct(aPath + 'GutterFoldCol/', FOptions.MouseGutterActionsFoldCol);
|
||||
LoadMouseAct(aPath + 'GutterLineNum/', FOptions.MouseGutterActionsLines);
|
||||
LoadMouseAct(aPath + 'Main/', MainActions);
|
||||
LoadMouseAct(aPath + 'MainSelection/', SelActions);
|
||||
LoadMouseAct(aPath + 'Gutter/', GutterActions);
|
||||
LoadMouseAct(aPath + 'GutterFold/', GutterActionsFold);
|
||||
LoadMouseAct(aPath + 'GutterFoldExp/', GutterActionsFoldExp);
|
||||
LoadMouseAct(aPath + 'GutterFoldCol/', GutterActionsFoldCol);
|
||||
LoadMouseAct(aPath + 'GutterLineNum/', GutterActionsLines);
|
||||
end
|
||||
else begin
|
||||
else
|
||||
if (FSelectedUserScheme <> '') then begin
|
||||
ResetToUserScheme;
|
||||
end else begin
|
||||
ResetTextToDefault;
|
||||
ResetGutterToDefault;
|
||||
WriteBack;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptions.SaveToXml(aXMLConfig: TRttiXMLConfig; aPath: String);
|
||||
@ -2724,30 +2781,29 @@ procedure TEditorMouseOptions.SaveToXml(aXMLConfig: TRttiXMLConfig; aPath: Strin
|
||||
var
|
||||
DefMouseSettings: TEditorMouseOptions;
|
||||
begin
|
||||
DefMouseSettings := TEditorMouseOptions.Create(FOptions);
|
||||
DefMouseSettings := TEditorMouseOptions.Create;
|
||||
CalcCustomSavedActions;
|
||||
aXMLConfig.WriteObject('EditorOptions/Mouse/Default/', Self, DefMouseSettings);
|
||||
aXMLConfig.WriteObject(aPath + 'Default/', Self, DefMouseSettings);
|
||||
DefMouseSettings.Free;
|
||||
if CustomSavedActions then begin
|
||||
// Save full settings / based on empty
|
||||
SaveMouseAct('EditorOptions/Mouse/Main/', FOptions.MouseMap);
|
||||
SaveMouseAct('EditorOptions/Mouse/MainSelection/', FOptions.MouseSelMap);
|
||||
SaveMouseAct('EditorOptions/Mouse/Gutter/', FOptions.MouseGutterActions);
|
||||
SaveMouseAct('EditorOptions/Mouse/GutterFold/', FOptions.MouseGutterActionsFold);
|
||||
SaveMouseAct('EditorOptions/Mouse/GutterFoldExp/', FOptions.MouseGutterActionsFoldExp);
|
||||
SaveMouseAct('EditorOptions/Mouse/GutterFoldCol/', FOptions.MouseGutterActionsFoldCol);
|
||||
SaveMouseAct('EditorOptions/Mouse/GutterLineNum/', FOptions.MouseGutterActionsLines);
|
||||
SaveMouseAct(aPath + 'Main/', MainActions);
|
||||
SaveMouseAct(aPath + 'MainSelection/', SelActions);
|
||||
SaveMouseAct(aPath + 'Gutter/', GutterActions);
|
||||
SaveMouseAct(aPath + 'GutterFold/', GutterActionsFold);
|
||||
SaveMouseAct(aPath + 'GutterFoldExp/', GutterActionsFoldExp);
|
||||
SaveMouseAct(aPath + 'GutterFoldCol/', GutterActionsFoldCol);
|
||||
SaveMouseAct(aPath + 'GutterLineNum/', GutterActionsLines);
|
||||
end else begin
|
||||
// clear unused entries
|
||||
aXMLConfig.DeletePath('EditorOptions/Mouse/Main');
|
||||
aXMLConfig.DeletePath('EditorOptions/Mouse/MainSelection');
|
||||
aXMLConfig.DeletePath('EditorOptions/Mouse/Gutter');
|
||||
aXMLConfig.DeletePath('EditorOptions/Mouse/GutterFold');
|
||||
aXMLConfig.DeletePath('EditorOptions/Mouse/GutterFoldExp');
|
||||
aXMLConfig.DeletePath('EditorOptions/Mouse/GutterFoldCol');
|
||||
aXMLConfig.DeletePath('EditorOptions/Mouse/GutterLineNum');
|
||||
aXMLConfig.DeletePath(aPath + 'Main');
|
||||
aXMLConfig.DeletePath(aPath + 'MainSelection');
|
||||
aXMLConfig.DeletePath(aPath + 'Gutter');
|
||||
aXMLConfig.DeletePath(aPath + 'GutterFold');
|
||||
aXMLConfig.DeletePath(aPath + 'GutterFoldExp');
|
||||
aXMLConfig.DeletePath(aPath + 'GutterFoldCol');
|
||||
aXMLConfig.DeletePath(aPath + 'GutterLineNum');
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptions.ImportFromXml(aXMLConfig: TRttiXMLConfig; aPath: String);
|
||||
@ -2821,6 +2877,72 @@ begin
|
||||
MAct.Free;
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptions.LoadUserSchemes;
|
||||
var
|
||||
i, j, k, c: Integer;
|
||||
FileList: TStringList;
|
||||
XMLConfig: TRttiXMLConfig;
|
||||
n: String;
|
||||
begin
|
||||
ClearUserSchemes;
|
||||
if DirectoryExistsUTF8(UserSchemeDirectory(False)) then begin
|
||||
FileList := FindAllFiles(UserSchemeDirectory(False), '*.xml', False);
|
||||
for i := 0 to FileList.Count - 1 do begin
|
||||
XMLConfig := nil;
|
||||
try
|
||||
XMLConfig := TRttiXMLConfig.Create(FileList[i]);
|
||||
c := XMLConfig.GetValue('Lazarus/MouseSchemes/Names/Count', 0);
|
||||
for j := 0 to c-1 do begin
|
||||
n := XMLConfig.GetValue('Lazarus/MouseSchemes/Names/Item'+IntToStr(j+1)+'/Value', '');
|
||||
if n <> '' then begin
|
||||
k := FUserSchemes.AddObject(UTF8UpperCase(n), TEditorMouseOptions.Create);
|
||||
TEditorMouseOptions(FUserSchemes.Objects[k]).FName := n;
|
||||
TEditorMouseOptions(FUserSchemes.Objects[k]).ImportFromXml
|
||||
(XMLConfig, 'Lazarus/MouseSchemes/Scheme' + n + '/');
|
||||
end;
|
||||
end;
|
||||
except
|
||||
ShowMessage(Format(dlgUserSchemeError, [FileList[i]]));
|
||||
end;
|
||||
XMLConfig.Free;
|
||||
end;
|
||||
FileList.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TEditorMouseOptions.UserSchemeCount: Integer;
|
||||
begin
|
||||
Result := FUserSchemes.Count;
|
||||
end;
|
||||
|
||||
function TEditorMouseOptions.IndexOfUserScheme(SchemeName: String): Integer;
|
||||
begin
|
||||
Result := FUserSchemes.IndexOf(UTF8UpperCase(SchemeName));
|
||||
end;
|
||||
|
||||
function TEditorMouseOptions.GetSelectedUserSchemeIndex: Integer;
|
||||
begin
|
||||
if FSelectedUserScheme = '' then
|
||||
Result := -1
|
||||
else
|
||||
Result := IndexOfUserScheme(FSelectedUserScheme);
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptions.SetSelectedUserScheme(const AValue: String);
|
||||
begin
|
||||
if FSelectedUserScheme = AValue then exit;
|
||||
FSelectedUserScheme := AValue;
|
||||
ResetToUserScheme;
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptions.SetSelectedUserSchemeIndex(const AValue: Integer);
|
||||
begin
|
||||
if AValue < 0 then
|
||||
SelectedUserScheme := ''
|
||||
else
|
||||
SelectedUserScheme := TEditorMouseOptions(FUserSchemes.Objects[AValue]).Name;
|
||||
end;
|
||||
|
||||
{ TEditorMouseOptionPresets }
|
||||
|
||||
constructor TEditorMouseOptionPresets.Create;
|
||||
@ -3030,7 +3152,6 @@ begin
|
||||
inherited Create;
|
||||
InitLocale;
|
||||
|
||||
FTempMouseSettings := TEditorMouseOptions.Create(self);
|
||||
ConfFileName := SetDirSeparators(GetPrimaryConfigPath + '/' +
|
||||
EditOptsConfFileName);
|
||||
CopySecondaryConfigFile(EditOptsConfFileName);
|
||||
@ -3076,20 +3197,10 @@ begin
|
||||
fKeyMap := TKeyCommandRelationList.Create;
|
||||
|
||||
// Mouse Mappings
|
||||
fMouseMap := TSynEditMouseTextActions.Create(nil);
|
||||
fMouseMap.ResetDefaults;
|
||||
fMouseSelMap := TSynEditMouseSelActions.Create(nil);
|
||||
fMouseSelMap.ResetDefaults;
|
||||
FMouseGutterActions := TSynEditMouseActionsGutter.Create(nil);
|
||||
FMouseGutterActions.ResetDefaults;
|
||||
FMouseGutterActionsFold := TSynEditMouseActionsGutterFold.Create(nil);
|
||||
FMouseGutterActionsFold.ResetDefaults;
|
||||
FMouseGutterActionsFoldCol := TSynEditMouseActionsGutterFoldCollapsed.Create(nil);
|
||||
FMouseGutterActionsFoldCol.ResetDefaults;
|
||||
FMouseGutterActionsFoldExp := TSynEditMouseActionsGutterFoldExpanded.Create(nil);
|
||||
FMouseGutterActionsFoldExp.ResetDefaults;
|
||||
FMouseGutterActionsLines := TSynEditMouseActionsLineNum.Create(nil);
|
||||
FMouseGutterActionsLines.ResetDefaults;
|
||||
FUserMouseSettings := TEditorMouseOptions.Create;
|
||||
FTempMouseSettings := TEditorMouseOptions.Create;
|
||||
FUserMouseSettings.LoadUserSchemes;
|
||||
|
||||
// Color options
|
||||
fHighlighterList := HighlighterListSingleton;
|
||||
FUserColorSchemeSettings := TColorSchemeFactory.Create;
|
||||
@ -3132,16 +3243,10 @@ end;
|
||||
destructor TEditorOptions.Destroy;
|
||||
begin
|
||||
FreeAndNil(FUserColorSchemeSettings);
|
||||
fMouseMap.Free;
|
||||
fMouseSelMap.Free;
|
||||
FMouseGutterActions.Free;
|
||||
FMouseGutterActionsFold.Free;
|
||||
FMouseGutterActionsFoldCol.Free;
|
||||
FMouseGutterActionsFoldExp.Free;
|
||||
FMouseGutterActionsLines.Free;
|
||||
fKeyMap.Free;
|
||||
FreeAndNil(FMultiWinEditAccessOrder);
|
||||
XMLConfig.Free;
|
||||
FUserMouseSettings.Free;
|
||||
FTempMouseSettings.Free;
|
||||
inherited Destroy;
|
||||
end;
|
||||
@ -3339,7 +3444,7 @@ begin
|
||||
XMLConfig.GetValue(
|
||||
'EditorOptions/CodeFolding/UseCodeFolding', True);
|
||||
|
||||
FTempMouseSettings.LoadFromXml(XMLConfig, 'EditorOptions/Mouse/',
|
||||
FUserMouseSettings.LoadFromXml(XMLConfig, 'EditorOptions/Mouse/',
|
||||
'EditorOptions/General/Editor/');
|
||||
|
||||
FMultiWinEditAccessOrder.LoadFromXMLConfig(XMLConfig, 'EditorOptions/MultiWin/');
|
||||
@ -3511,7 +3616,7 @@ begin
|
||||
XMLConfig.SetDeleteValue('EditorOptions/CodeFolding/UseCodeFolding',
|
||||
FUseCodeFolding, True);
|
||||
|
||||
FTempMouseSettings.SaveToXml(XMLConfig, 'EditorOptions/Mouse/');
|
||||
FUserMouseSettings.SaveToXml(XMLConfig, 'EditorOptions/Mouse/');
|
||||
|
||||
FMultiWinEditAccessOrder.SaveToXMLConfig(XMLConfig, 'EditorOptions/MultiWin/');
|
||||
UserColorSchemeGroup.SaveToXml(XMLConfig, 'EditorOptions/Color/', ColorSchemeFactory);
|
||||
@ -4046,16 +4151,16 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
ASynEdit.MouseActions.Assign(MouseMap);
|
||||
ASynEdit.MouseSelActions.Assign(MouseSelMap);
|
||||
ASynEdit.Gutter.MouseActions.Assign(MouseGutterActions);
|
||||
ASynEdit.MouseActions.Assign(FUserMouseSettings.MainActions);
|
||||
ASynEdit.MouseSelActions.Assign(FUserMouseSettings.SelActions);
|
||||
ASynEdit.Gutter.MouseActions.Assign(FUserMouseSettings.GutterActions);
|
||||
if ASynEdit.Gutter.CodeFoldPart <> nil then begin
|
||||
ASynEdit.Gutter.CodeFoldPart.MouseActions.Assign(MouseGutterActionsFold);
|
||||
ASynEdit.Gutter.CodeFoldPart.MouseActionsCollapsed.Assign(MouseGutterActionsFoldCol);
|
||||
ASynEdit.Gutter.CodeFoldPart.MouseActionsExpanded.Assign(MouseGutterActionsFoldExp);
|
||||
ASynEdit.Gutter.CodeFoldPart.MouseActions.Assign(FUserMouseSettings.GutterActionsFold);
|
||||
ASynEdit.Gutter.CodeFoldPart.MouseActionsCollapsed.Assign(FUserMouseSettings.GutterActionsFoldCol);
|
||||
ASynEdit.Gutter.CodeFoldPart.MouseActionsExpanded.Assign(FUserMouseSettings.GutterActionsFoldExp);
|
||||
end;
|
||||
if ASynEdit.Gutter.LineNumberPart <> nil then begin
|
||||
ASynEdit.Gutter.LineNumberPart.MouseActions.Assign(MouseGutterActionsLines);
|
||||
ASynEdit.Gutter.LineNumberPart.MouseActions.Assign(FUserMouseSettings.GutterActionsLines);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -25,63 +25,78 @@ unit editor_mouseaction_options;
|
||||
interface
|
||||
|
||||
uses
|
||||
EditorOptions, LazarusIDEStrConsts, IDEOptionsIntf, SynEdit,
|
||||
StdCtrls, ExtCtrls, Classes, LCLProc, editor_mouseaction_options_advanced;
|
||||
math, EditorOptions, LazarusIDEStrConsts, IDEOptionsIntf, SynEdit,
|
||||
StdCtrls, ExtCtrls, Classes, LCLProc, editor_mouseaction_options_advanced, Controls, Forms;
|
||||
|
||||
type
|
||||
|
||||
{ TEditorMouseOptionsFrame }
|
||||
|
||||
TEditorMouseOptionsFrame = class(TAbstractIDEOptionsEditor)
|
||||
HideMouseCheckBox: TCheckBox;
|
||||
DiffLabel: TLabel;
|
||||
GenericDividerLeft: TBevel;
|
||||
GenericDividerLabel: TLabel;
|
||||
GenericDividerRight: TBevel;
|
||||
TextDoubleSelLine: TCheckBox;
|
||||
BottomDivider: TBevel;
|
||||
chkPredefinedScheme: TCheckBox;
|
||||
CtrLLeftLabel: TLabel;
|
||||
MiddleBtnLabel: TLabel;
|
||||
PanelTextCtrlLeft: TPanel;
|
||||
CtrlLeftRadio1: TRadioButton;
|
||||
CtrlLeftRadio2: TRadioButton;
|
||||
CtrlLeftRadio3: TRadioButton;
|
||||
RightMoveCaret: TCheckBox;
|
||||
TextDrag : TCheckBox;
|
||||
PanelTextCheckBox : TPanel;
|
||||
TextAltMode: TCheckBox;
|
||||
WarnLabel: TLabel;
|
||||
ResetTextButton: TButton;
|
||||
ResetGutterButton: TButton;
|
||||
DiffLabel: TLabel;
|
||||
dropUserSchemes: TComboBox;
|
||||
GenericDividerLabel: TLabel;
|
||||
GenericDividerLeft: TBevel;
|
||||
GenericDividerRight: TBevel;
|
||||
GutterDividerLabel: TLabel;
|
||||
GutterDividerLeft: TBevel;
|
||||
GutterDividerRight: TBevel;
|
||||
GutterLeftRadio1: TRadioButton;
|
||||
GutterLeftRadio2: TRadioButton;
|
||||
HideMouseCheckBox: TCheckBox;
|
||||
MiddleBtnLabel: TLabel;
|
||||
pnlBottom: TPanel;
|
||||
PanelGutter: TPanel;
|
||||
PanelTextCheckBox: TPanel;
|
||||
PanelTextCtrlLeft: TPanel;
|
||||
PanelTextMiddle: TPanel;
|
||||
pnlAllGutter: TPanel;
|
||||
pnlAllText: TPanel;
|
||||
pnlUserSchemes: TPanel;
|
||||
ResetAllButton: TButton;
|
||||
ResetGutterButton: TButton;
|
||||
ResetTextButton: TButton;
|
||||
RightMoveCaret: TCheckBox;
|
||||
ScrollBox1: TScrollBox;
|
||||
TextAltMode: TCheckBox;
|
||||
TextDividerLabel: TLabel;
|
||||
TextDividerLeft: TBevel;
|
||||
TextDividerRight: TBevel;
|
||||
TextDoubleSelLine: TCheckBox;
|
||||
TextDrag: TCheckBox;
|
||||
TextMidRadio1: TRadioButton;
|
||||
TextMidRadio2: TRadioButton;
|
||||
TextMidRadio3: TRadioButton;
|
||||
GutterDividerLabel: TLabel;
|
||||
BottomDivider: TBevel;
|
||||
GutterLeftRadio1: TRadioButton;
|
||||
GutterLeftRadio2: TRadioButton;
|
||||
TextDividerLabel: TLabel;
|
||||
GutterDividerLeft: TBevel;
|
||||
TextDividerLeft: TBevel;
|
||||
GutterDividerRight: TBevel;
|
||||
TextDividerRight: TBevel;
|
||||
RadioGroup1: TRadioGroup;
|
||||
TextLeft: TCheckGroup;
|
||||
TextMiddle: TRadioGroup;
|
||||
GutterLeft: TRadioGroup;
|
||||
ResetAllButton: TButton;
|
||||
procedure ResetGutterButtonClick(Sender: TObject);
|
||||
procedure ResetAllButtonClick(Sender: TObject);
|
||||
procedure ResetTextButtonClick(Sender: TObject);
|
||||
WarnLabel: TLabel;
|
||||
procedure CheckOrRadioChange(Sender: TObject);
|
||||
procedure chkPredefinedSchemeChange(Sender: TObject);
|
||||
procedure dropUserSchemesChange(Sender: TObject);
|
||||
procedure dropUserSchemesKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
procedure ResetGutterButtonClick(Sender: TObject);
|
||||
procedure ResetTextButtonClick(Sender: TObject);
|
||||
procedure ResetAllButtonClick(Sender: TObject);
|
||||
private
|
||||
FDialog: TAbstractOptionsEditorDialog;
|
||||
FOptions: TAbstractIDEOptions;
|
||||
FTempMouseSettings: TEditorMouseOptions;
|
||||
FInClickHandler: Integer;
|
||||
function IsTextSettingsChanged: Boolean;
|
||||
function IsGutterSettingsChanged: Boolean;
|
||||
procedure UpdateButtons;
|
||||
function IsUserSchemeChanged: Boolean;
|
||||
function IsTextSettingsChanged: Boolean;
|
||||
function IsGutterSettingsChanged: Boolean;
|
||||
procedure SaveUserScheme;
|
||||
procedure SaveTextSettings;
|
||||
procedure SaveGutterSettings;
|
||||
protected
|
||||
procedure SetVisible(Value: Boolean); override;
|
||||
public
|
||||
@ -101,45 +116,142 @@ implementation
|
||||
{ TEditorMouseOptionsFrame }
|
||||
|
||||
procedure TEditorMouseOptionsFrame.CheckOrRadioChange(Sender: TObject);
|
||||
var
|
||||
MouseDiff: Boolean;
|
||||
begin
|
||||
if FInClickHandler > 0 then exit;
|
||||
Inc(FInClickHandler);
|
||||
try
|
||||
MouseDiff := not FTempMouseSettings.IsPresetEqualToMouseActions;
|
||||
if not MouseDiff then begin
|
||||
ResetAllButtonClick(nil);
|
||||
ResetTextButton.Visible := False;
|
||||
ResetGutterButton.Visible := False;
|
||||
ResetAllButton.Visible := False;
|
||||
WarnLabel.Visible := False;
|
||||
DiffLabel.Visible := False;
|
||||
exit;
|
||||
if FTempMouseSettings.IsPresetEqualToMouseActions then begin
|
||||
// write settings to conf (and reset conf to settings)
|
||||
SaveGutterSettings;
|
||||
SaveTextSettings;
|
||||
end;
|
||||
ResetTextButton.Visible := True; // MouseDiff or IsTextSettingsChanged;
|
||||
ResetGutterButton.Visible := True; // MouseDiff or IsGutterSettingsChanged;
|
||||
ResetAllButton.Visible := True; // ResetTextButton.Enabled or ResetGutterButton.Enabled;
|
||||
WarnLabel.Visible := IsTextSettingsChanged or IsGutterSettingsChanged;
|
||||
DiffLabel.Visible := (not WarnLabel.Visible) and MouseDiff;
|
||||
UpdateButtons;
|
||||
finally
|
||||
Dec(FInClickHandler);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptionsFrame.UpdateButtons;
|
||||
begin
|
||||
if FTempMouseSettings.IsPresetEqualToMouseActions then begin
|
||||
ResetTextButton.Visible := False;
|
||||
ResetGutterButton.Visible := False;
|
||||
ResetAllButton.Visible := False;
|
||||
WarnLabel.Visible := False;
|
||||
DiffLabel.Visible := False;
|
||||
BottomDivider.Visible := False;
|
||||
end
|
||||
else begin
|
||||
ResetTextButton.Visible := (FTempMouseSettings.SelectedUserScheme = '') and IsTextSettingsChanged;
|
||||
ResetGutterButton.Visible := (FTempMouseSettings.SelectedUserScheme = '') and IsGutterSettingsChanged;
|
||||
ResetAllButton.Visible := True; // ResetTextButton.Enabled or ResetGutterButton.Enabled;
|
||||
WarnLabel.Visible := (IsTextSettingsChanged or IsGutterSettingsChanged) and
|
||||
( (FTempMouseSettings.SelectedUserScheme = '') or
|
||||
IsUserSchemeChanged );
|
||||
DiffLabel.Visible := (not WarnLabel.Visible);
|
||||
BottomDivider.Visible := True;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptionsFrame.dropUserSchemesChange(Sender: TObject);
|
||||
begin
|
||||
if Sender <> nil then begin;
|
||||
chkPredefinedScheme.Checked := dropUserSchemes.ItemIndex > 0;
|
||||
if dropUserSchemes.ItemIndex > 0 then
|
||||
dropUserSchemes.tag := dropUserSchemes.ItemIndex;
|
||||
end;
|
||||
pnlAllGutter.Enabled := dropUserSchemes.ItemIndex = 0;
|
||||
pnlAllText.Enabled := dropUserSchemes.ItemIndex = 0;
|
||||
if FTempMouseSettings.IsPresetEqualToMouseActions then
|
||||
SaveUserScheme;
|
||||
UpdateButtons;
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptionsFrame.dropUserSchemesKeyDown(Sender: TObject; var Key: Word;
|
||||
Shift: TShiftState);
|
||||
begin
|
||||
dropUserSchemesChange(Sender);
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptionsFrame.chkPredefinedSchemeChange(Sender: TObject);
|
||||
begin
|
||||
if chkPredefinedScheme.Checked then
|
||||
dropUserSchemes.ItemIndex := Max(dropUserSchemes.Tag, 1)
|
||||
else
|
||||
dropUserSchemes.ItemIndex := 0;
|
||||
dropUserSchemesChange(nil);
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptionsFrame.ResetGutterButtonClick(Sender: TObject);
|
||||
begin
|
||||
if GutterLeftRadio2.Checked then
|
||||
FTempMouseSettings.GutterLeft := moglUpClickAndSelect
|
||||
else
|
||||
FTempMouseSettings.GutterLeft := moGLDownClick;
|
||||
FTempMouseSettings.ResetGutterToDefault;
|
||||
if FDialog.FindEditor(TEditorMouseOptionsAdvFrame) <> nil then
|
||||
TEditorMouseOptionsAdvFrame(FDialog.FindEditor(TEditorMouseOptionsAdvFrame)).RefreshSettings;
|
||||
CheckOrRadioChange(nil);
|
||||
SaveGutterSettings;
|
||||
UpdateButtons;
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptionsFrame.ResetTextButtonClick(Sender: TObject);
|
||||
begin
|
||||
SaveTextSettings;
|
||||
UpdateButtons;
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptionsFrame.ResetAllButtonClick(Sender: TObject);
|
||||
begin
|
||||
SaveGutterSettings;
|
||||
SaveTextSettings;
|
||||
SaveUserScheme; // must be last
|
||||
UpdateButtons;
|
||||
end;
|
||||
|
||||
function TEditorMouseOptionsFrame.IsUserSchemeChanged: Boolean;
|
||||
begin
|
||||
Result := FTempMouseSettings.SelectedUserSchemeIndex <>
|
||||
PtrInt(dropUserSchemes.Items.Objects[dropUserSchemes.ItemIndex]);
|
||||
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
|
||||
( (TextMidRadio1.Checked and (FTempMouseSettings.TextMiddleClick = moTMPaste)) or
|
||||
(TextMidRadio2.Checked and (FTempMouseSettings.TextMiddleClick = moTMIgnore)) or
|
||||
(TextMidRadio3.Checked and (FTempMouseSettings.TextMiddleClick = moTMDeclarationJump))
|
||||
) and
|
||||
( (CtrlLeftRadio1.Checked and (FTempMouseSettings.TextCtrlLeftClick = moTCLJump)) or
|
||||
(CtrlLeftRadio2.Checked and (FTempMouseSettings.TextCtrlLeftClick = moTCLNone)) or
|
||||
(CtrlLeftRadio3.Checked and (FTempMouseSettings.TextCtrlLeftClick = moTCLJumpOrBlock))
|
||||
)
|
||||
);
|
||||
end;
|
||||
|
||||
function TEditorMouseOptionsFrame.IsGutterSettingsChanged: Boolean;
|
||||
begin
|
||||
Result := not (
|
||||
( (GutterLeftRadio1.Checked and (FTempMouseSettings.GutterLeft = moGLDownClick)) or
|
||||
(GutterLeftRadio2.Checked and (FTempMouseSettings.GutterLeft = moglUpClickAndSelect))
|
||||
)
|
||||
);
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptionsFrame.SaveUserScheme;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
i := PtrInt(dropUserSchemes.Items.Objects[dropUserSchemes.ItemIndex]);
|
||||
FTempMouseSettings.SelectedUserSchemeIndex := i;
|
||||
if i >= 0 then
|
||||
FTempMouseSettings.ResetToUserScheme
|
||||
else begin
|
||||
FTempMouseSettings.ResetTextToDefault;
|
||||
FTempMouseSettings.ResetGutterToDefault;
|
||||
end;
|
||||
if FDialog.FindEditor(TEditorMouseOptionsAdvFrame) <> nil then
|
||||
TEditorMouseOptionsAdvFrame(FDialog.FindEditor(TEditorMouseOptionsAdvFrame)).RefreshSettings;
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptionsFrame.SaveTextSettings;
|
||||
begin
|
||||
FTempMouseSettings.AltColumnMode := TextAltMode.Checked;
|
||||
FTempMouseSettings.TextDrag := TextDrag.Checked;
|
||||
@ -163,48 +275,24 @@ begin
|
||||
FTempMouseSettings.ResetTextToDefault;
|
||||
if FDialog.FindEditor(TEditorMouseOptionsAdvFrame) <> nil then
|
||||
TEditorMouseOptionsAdvFrame(FDialog.FindEditor(TEditorMouseOptionsAdvFrame)).RefreshSettings;
|
||||
CheckOrRadioChange(nil);
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptionsFrame.ResetAllButtonClick(Sender: TObject);
|
||||
procedure TEditorMouseOptionsFrame.SaveGutterSettings;
|
||||
begin
|
||||
ResetTextButtonClick(nil);
|
||||
ResetGutterButtonClick(nil);
|
||||
end;
|
||||
|
||||
function TEditorMouseOptionsFrame.IsGutterSettingsChanged: Boolean;
|
||||
begin
|
||||
Result := not (
|
||||
( (GutterLeftRadio1.Checked and (FTempMouseSettings.GutterLeft = moGLDownClick)) or
|
||||
(GutterLeftRadio2.Checked and (FTempMouseSettings.GutterLeft = moglUpClickAndSelect))
|
||||
)
|
||||
);
|
||||
|
||||
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
|
||||
( (TextMidRadio1.Checked and (FTempMouseSettings.TextMiddleClick = moTMPaste)) or
|
||||
(TextMidRadio2.Checked and (FTempMouseSettings.TextMiddleClick = moTMIgnore)) or
|
||||
(TextMidRadio3.Checked and (FTempMouseSettings.TextMiddleClick = moTMDeclarationJump))
|
||||
) and
|
||||
( (CtrlLeftRadio1.Checked and (FTempMouseSettings.TextCtrlLeftClick = moTCLJump)) or
|
||||
(CtrlLeftRadio2.Checked and (FTempMouseSettings.TextCtrlLeftClick = moTCLNone)) or
|
||||
(CtrlLeftRadio3.Checked and (FTempMouseSettings.TextCtrlLeftClick = moTCLJumpOrBlock))
|
||||
)
|
||||
);
|
||||
if GutterLeftRadio2.Checked then
|
||||
FTempMouseSettings.GutterLeft := moglUpClickAndSelect
|
||||
else
|
||||
FTempMouseSettings.GutterLeft := moGLDownClick;
|
||||
FTempMouseSettings.ResetGutterToDefault;
|
||||
if FDialog.FindEditor(TEditorMouseOptionsAdvFrame) <> nil then
|
||||
TEditorMouseOptionsAdvFrame(FDialog.FindEditor(TEditorMouseOptionsAdvFrame)).RefreshSettings;
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptionsFrame.SetVisible(Value: Boolean);
|
||||
begin
|
||||
inherited SetVisible(Value);
|
||||
if Value and (FTempMouseSettings <> nil) then
|
||||
CheckOrRadioChange(nil);
|
||||
UpdateButtons;
|
||||
end;
|
||||
|
||||
function TEditorMouseOptionsFrame.GetTitle: String;
|
||||
@ -215,6 +303,7 @@ end;
|
||||
procedure TEditorMouseOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
||||
begin
|
||||
FDialog := ADialog;
|
||||
chkPredefinedScheme.Caption := dlfMousePredefinedScheme;
|
||||
GenericDividerLabel.Caption := dlfMouseSimpleGenericSect;
|
||||
GutterDividerLabel.Caption := dlfMouseSimpleGutterSect;
|
||||
GutterLeftRadio1.Caption := dlfMouseSimpleGutterLeftDown;
|
||||
@ -242,11 +331,27 @@ end;
|
||||
|
||||
procedure TEditorMouseOptionsFrame.ReadSettings(
|
||||
AOptions: TAbstractIDEOptions);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
Inc(FInClickHandler);
|
||||
FOptions := AOptions;
|
||||
FTempMouseSettings := TEditorOptions(AOptions).TempMouseSettings;
|
||||
FTempMouseSettings.Read;
|
||||
FTempMouseSettings.Assign(TEditorOptions(AOptions).UserMouseSettings);
|
||||
|
||||
pnlUserSchemes.Visible := FTempMouseSettings.UserSchemeCount > 0;
|
||||
dropUserSchemes.Clear;
|
||||
for i := 0 to FTempMouseSettings.UserSchemeCount - 1 do begin
|
||||
dropUserSchemes.Items.AddObject(FTempMouseSettings.UserSchemeNames[i],
|
||||
TObject(PtrUInt(i)) );
|
||||
end;
|
||||
dropUserSchemes.Sorted := True;
|
||||
dropUserSchemes.Sorted := False;
|
||||
dropUserSchemes.Items.InsertObject(0, dlfNoPredefinedScheme, TObject(PtrUInt(-1)));
|
||||
dropUserSchemes.ItemIndex := dropUserSchemes.Items.IndexOfObject
|
||||
( TObject(PtrUInt(FTempMouseSettings.SelectedUserSchemeIndex)) );
|
||||
dropUserSchemesChange(Self);
|
||||
|
||||
case FTempMouseSettings.GutterLeft of
|
||||
moGLDownClick: GutterLeftRadio1.Checked := True;
|
||||
moglUpClickAndSelect: GutterLeftRadio2.Checked := True;
|
||||
@ -266,7 +371,7 @@ begin
|
||||
moTCLJumpOrBlock: CtrlLeftRadio3.Checked := True;
|
||||
end;
|
||||
Dec(FInClickHandler);
|
||||
CheckOrRadioChange(nil);
|
||||
UpdateButtons;
|
||||
|
||||
HideMouseCheckBox.Checked := eoAutoHideCursor in TEditorOptions(AOptions).SynEditOptions2;
|
||||
end;
|
||||
@ -274,7 +379,7 @@ end;
|
||||
procedure TEditorMouseOptionsFrame.WriteSettings(
|
||||
AOptions: TAbstractIDEOptions);
|
||||
begin
|
||||
FTempMouseSettings.WriteBack;
|
||||
TEditorOptions(AOptions).UserMouseSettings.Assign(FTempMouseSettings);
|
||||
with TEditorOptions(AOptions) do begin
|
||||
if HideMouseCheckBox.Checked then
|
||||
SynEditOptions2 := SynEditOptions2 + [eoAutoHideCursor]
|
||||
|
||||
@ -4,7 +4,6 @@ inherited EditorMouseOptionsAdvFrame: TEditorMouseOptionsAdvFrame
|
||||
Anchors = [akTop]
|
||||
ClientHeight = 420
|
||||
ClientWidth = 610
|
||||
TabOrder = 0
|
||||
Visible = False
|
||||
DesignLeft = 246
|
||||
DesignTop = 209
|
||||
@ -41,13 +40,13 @@ inherited EditorMouseOptionsAdvFrame: TEditorMouseOptionsAdvFrame
|
||||
Align = alLeft
|
||||
AutoExpand = True
|
||||
Constraints.MinWidth = 50
|
||||
DefaultItemHeight = 15
|
||||
DefaultItemHeight = 17
|
||||
ReadOnly = True
|
||||
ShowButtons = False
|
||||
ShowRoot = False
|
||||
TabOrder = 1
|
||||
OnChange = ContextTreeChange
|
||||
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowLines, tvoToolTips, tvoThemedDraw, tvoNoDoubleClickExpand]
|
||||
Options = [tvoAutoExpand, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowLines, tvoToolTips, tvoNoDoubleClickExpand, tvoThemedDraw]
|
||||
end
|
||||
object Splitter1: TSplitter[2]
|
||||
Left = 130
|
||||
@ -74,32 +73,32 @@ inherited EditorMouseOptionsAdvFrame: TEditorMouseOptionsAdvFrame
|
||||
OnClick = BtnImportClick
|
||||
end
|
||||
object BtnExport: TToolButton
|
||||
Left = 57
|
||||
Left = 63
|
||||
Top = 0
|
||||
Caption = 'BtnExport'
|
||||
OnClick = BtnExportClick
|
||||
end
|
||||
object ToolButton3: TToolButton
|
||||
Left = 113
|
||||
Left = 122
|
||||
Top = 0
|
||||
Width = 3
|
||||
Width = 4
|
||||
Caption = 'ToolButton3'
|
||||
Style = tbsDivider
|
||||
end
|
||||
object UpdateButton: TToolButton
|
||||
Left = 116
|
||||
Left = 126
|
||||
Top = 0
|
||||
Caption = 'UpdateButton'
|
||||
OnClick = UpdateButtonClick
|
||||
end
|
||||
object AddNewButton: TToolButton
|
||||
Left = 191
|
||||
Left = 208
|
||||
Top = 0
|
||||
Caption = 'AddNewButton'
|
||||
OnClick = AddNewButtonClick
|
||||
end
|
||||
object DelButton: TToolButton
|
||||
Left = 271
|
||||
Left = 298
|
||||
Top = 0
|
||||
Caption = 'DelButton'
|
||||
OnClick = DelButtonClick
|
||||
@ -116,19 +115,19 @@ inherited EditorMouseOptionsAdvFrame: TEditorMouseOptionsAdvFrame
|
||||
TabOrder = 4
|
||||
object Panel1: TPanel
|
||||
Left = 1
|
||||
Height = 17
|
||||
Height = 20
|
||||
Top = 1
|
||||
Width = 608
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
ClientHeight = 17
|
||||
ClientHeight = 20
|
||||
ClientWidth = 608
|
||||
TabOrder = 0
|
||||
object OtherActionLabel: TLabel
|
||||
Left = 1
|
||||
Height = 15
|
||||
Height = 18
|
||||
Top = 1
|
||||
Width = 84
|
||||
Width = 94
|
||||
Align = alLeft
|
||||
Caption = 'OtherActionLabel'
|
||||
ParentColor = False
|
||||
@ -138,10 +137,10 @@ inherited EditorMouseOptionsAdvFrame: TEditorMouseOptionsAdvFrame
|
||||
object OtherActToggleBox: TToggleBox
|
||||
AnchorSideRight.Control = Panel1
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 496
|
||||
Height = 17
|
||||
Left = 483
|
||||
Height = 19
|
||||
Top = 0
|
||||
Width = 112
|
||||
Width = 124
|
||||
Anchors = [akTop, akRight]
|
||||
AutoSize = True
|
||||
Caption = 'OtherActToggleBox'
|
||||
@ -153,8 +152,8 @@ inherited EditorMouseOptionsAdvFrame: TEditorMouseOptionsAdvFrame
|
||||
end
|
||||
object OtherActionGrid: TStringGrid
|
||||
Left = 1
|
||||
Height = 107
|
||||
Top = 18
|
||||
Height = 104
|
||||
Top = 21
|
||||
Width = 608
|
||||
Align = alClient
|
||||
AutoEdit = False
|
||||
|
||||
@ -711,7 +711,8 @@ procedure TEditorMouseOptionsAdvFrame.ReadSettings(
|
||||
AOptions: TAbstractIDEOptions);
|
||||
begin
|
||||
FTempMouseSettings := TEditorOptions(AOptions).TempMouseSettings;
|
||||
FTempMouseSettings.Read;
|
||||
FTempMouseSettings.Assign(TEditorOptions(AOptions).UserMouseSettings);
|
||||
|
||||
with AOptions as TEditorOptions do
|
||||
begin
|
||||
FKeyMap := KeyMap;
|
||||
@ -723,7 +724,7 @@ end;
|
||||
procedure TEditorMouseOptionsAdvFrame.WriteSettings(
|
||||
AOptions: TAbstractIDEOptions);
|
||||
begin
|
||||
FTempMouseSettings.WriteBack;
|
||||
TEditorOptions(AOptions).UserMouseSettings.Assign(FTempMouseSettings);
|
||||
end;
|
||||
|
||||
procedure TEditorMouseOptionsAdvFrame.RefreshSettings;
|
||||
|
||||
@ -1257,6 +1257,8 @@ resourcestring
|
||||
dlgUseSyntaxHighlight = 'Use syntax highlight';
|
||||
dlgUseCodeFolding = 'Code folding';
|
||||
dlgCodeFoldingMouse = 'Mouse';
|
||||
dlfMousePredefinedScheme = 'Use predefined scheme';
|
||||
dlfNoPredefinedScheme = '< None >';
|
||||
dlfMouseSimpleGenericSect = 'General';
|
||||
dlfMouseSimpleGutterSect = 'Gutter';
|
||||
dlfMouseSimpleGutterLeftDown = 'Standard, All actions (breakpoint, fold) on Mouse down';
|
||||
|
||||
Loading…
Reference in New Issue
Block a user