mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 07:59:28 +02:00
SourceEditor, IDE: added configuration for Multi-Window
git-svn-id: trunk@24807 -
This commit is contained in:
parent
4661ccf52b
commit
e66ef81168
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -3433,6 +3433,8 @@ ide/frames/editor_mouseaction_options.lfm svneol=native#text/plain
|
|||||||
ide/frames/editor_mouseaction_options.pas svneol=native#text/pascal
|
ide/frames/editor_mouseaction_options.pas svneol=native#text/pascal
|
||||||
ide/frames/editor_mouseaction_options_advanced.lfm svneol=native#text/plain
|
ide/frames/editor_mouseaction_options_advanced.lfm svneol=native#text/plain
|
||||||
ide/frames/editor_mouseaction_options_advanced.pas svneol=native#text/pascal
|
ide/frames/editor_mouseaction_options_advanced.pas svneol=native#text/pascal
|
||||||
|
ide/frames/editor_multiwindow_options.lfm svneol=native#text/plain
|
||||||
|
ide/frames/editor_multiwindow_options.pas svneol=native#text/pascal
|
||||||
ide/frames/files_options.lfm svneol=native#text/plain
|
ide/frames/files_options.lfm svneol=native#text/plain
|
||||||
ide/frames/files_options.pas svneol=native#text/pascal
|
ide/frames/files_options.pas svneol=native#text/pascal
|
||||||
ide/frames/formed_options.lfm svneol=native#text/plain
|
ide/frames/formed_options.lfm svneol=native#text/plain
|
||||||
|
@ -891,6 +891,168 @@ type
|
|||||||
DefObject: TPersistent= nil; OnlyProperty: String= '');
|
DefObject: TPersistent= nil; OnlyProperty: String= '');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
TEditorOptionsEditAccessInViewState =
|
||||||
|
(eoeaIgnoreInView, // Find any editor
|
||||||
|
eoeaInViewOnly, // Only editors, with the jump-target in their current visible area
|
||||||
|
eoeaInViewSoftCenterOnly // Only editors, with the jump-target in their current visible soft center (exclude up to 5 lines top/bottom)
|
||||||
|
);
|
||||||
|
TEditorOptionsEditAccessLockedState =
|
||||||
|
(eoeaIgnoreLock, // Find any editor
|
||||||
|
eoeaLockedOnly, // Only use locked Editor (e.g for InView = eoeaInViewOnly)
|
||||||
|
eoeaUnlockedOnly, // Only use unlocked Editors (default)
|
||||||
|
eoeaLockedFirst, // Search locked Editors first (each group according to Order)
|
||||||
|
eoeaLockedLast // Search locked Editoes last
|
||||||
|
);
|
||||||
|
TEditorOptionsEditAccessOrder =
|
||||||
|
(eoeaOrderByEditFocus, // prefer the editors in the order they were last focused
|
||||||
|
eoeaOrderByWindowFocus, // prefer the editors in the order their window was last focused
|
||||||
|
eoeaOrderByOldestEditFocus, // Reverse order by last focused
|
||||||
|
eoeaOrderByOldestWindowFocus,
|
||||||
|
eoeaOnlyCurrentEdit, // search only the current-active editor (and only if it has the correct file)
|
||||||
|
eoeaOnlyCurrentWindow, // search only the current window (if it has an editor for the desired file)
|
||||||
|
eoeaOrderByListPref // follow global setting on the list
|
||||||
|
);
|
||||||
|
TEditorOptionsEditAccessOpenNew =
|
||||||
|
(eoeaNoNewTab, // Do not open a new tab, if none found
|
||||||
|
eoeaNewTabInExistingWindowOnly, // Open a new tab in existing (last focus) window, if possible
|
||||||
|
eoeaNewTabInNewWindowOnly, // Open a new tab in new window
|
||||||
|
eoeaNewTabInExistingOrNewWindow // Open a new tab in existing or new window
|
||||||
|
);
|
||||||
|
TEditorOptionsEditAccessDefaultEntry = record
|
||||||
|
SearchLocked: TEditorOptionsEditAccessLockedState;
|
||||||
|
SearchInView: TEditorOptionsEditAccessInViewState;
|
||||||
|
SearchOrder: TEditorOptionsEditAccessOrder;
|
||||||
|
SearchOpenNew: TEditorOptionsEditAccessOpenNew;
|
||||||
|
Enabled: Boolean;
|
||||||
|
ID: String;
|
||||||
|
Caption, Desc: String;
|
||||||
|
end;
|
||||||
|
TEditorOptionsEditAccessDefaults = Array [0..8] of TEditorOptionsEditAccessDefaultEntry;
|
||||||
|
|
||||||
|
const
|
||||||
|
// captions and desc are set in TEditorOptions.Create
|
||||||
|
EditorOptionsEditAccessDefaults: TEditorOptionsEditAccessDefaults =
|
||||||
|
( // Find locked - InView
|
||||||
|
(SearchLocked: eoeaLockedOnly; SearchInView: eoeaInViewOnly;
|
||||||
|
SearchOrder: eoeaOrderByListPref; SearchOpenNew: eoeaNoNewTab;
|
||||||
|
Enabled: True; ID: 'Locked_InView';
|
||||||
|
Caption: ''; Desc: '' ),
|
||||||
|
// Find unlocked
|
||||||
|
(SearchLocked: eoeaUnlockedOnly; SearchInView: eoeaInViewSoftCenterOnly;
|
||||||
|
SearchOrder: eoeaOrderByListPref; SearchOpenNew: eoeaNoNewTab;
|
||||||
|
Enabled: False; ID: 'UnLocked_InSoftView';
|
||||||
|
Caption: ''; Desc: '' ),
|
||||||
|
(SearchLocked: eoeaUnlockedOnly; SearchInView: eoeaIgnoreInView;
|
||||||
|
SearchOrder: eoeaOrderByListPref; SearchOpenNew: eoeaNoNewTab;
|
||||||
|
Enabled: True; ID: 'UnLocked';
|
||||||
|
Caption: ''; Desc: '' ),
|
||||||
|
// open new tab
|
||||||
|
(SearchLocked: eoeaUnlockedOnly; SearchInView: eoeaIgnoreInView;
|
||||||
|
SearchOrder: eoeaOrderByListPref; SearchOpenNew: eoeaNewTabInExistingWindowOnly;
|
||||||
|
Enabled: False; ID: 'UnLocked_OpenNewInOldWin';
|
||||||
|
Caption: ''; Desc: '' ),
|
||||||
|
(SearchLocked: eoeaUnlockedOnly; SearchInView: eoeaIgnoreInView;
|
||||||
|
SearchOrder: eoeaOrderByListPref; SearchOpenNew: eoeaNewTabInNewWindowOnly;
|
||||||
|
Enabled: False; ID: 'UnLocked_OpenNewInNewWin';
|
||||||
|
Caption: ''; Desc: '' ),
|
||||||
|
// Ignore locks
|
||||||
|
(SearchLocked: eoeaIgnoreLock; SearchInView: eoeaIgnoreInView;
|
||||||
|
SearchOrder: eoeaOrderByOldestEditFocus; SearchOpenNew: eoeaNoNewTab;
|
||||||
|
Enabled: False; ID: 'IgnLocked_OldEdit';
|
||||||
|
Caption: ''; Desc: '' ),
|
||||||
|
(SearchLocked: eoeaIgnoreLock; SearchInView: eoeaIgnoreInView;
|
||||||
|
SearchOrder: eoeaOnlyCurrentEdit; SearchOpenNew: eoeaNoNewTab;
|
||||||
|
Enabled: False; ID: 'IgnLocked_OnlyActEdit';
|
||||||
|
Caption: ''; Desc: '' ),
|
||||||
|
(SearchLocked: eoeaIgnoreLock; SearchInView: eoeaIgnoreInView;
|
||||||
|
SearchOrder: eoeaOnlyCurrentWindow; SearchOpenNew: eoeaNoNewTab;
|
||||||
|
Enabled: False; ID: 'IgnLocked_OnlyActWin';
|
||||||
|
Caption: ''; Desc: '' ),
|
||||||
|
// Fallback (must be last)
|
||||||
|
(SearchLocked: eoeaUnlockedOnly; SearchInView: eoeaIgnoreInView;
|
||||||
|
SearchOrder: eoeaOrderByListPref; SearchOpenNew: eoeaNewTabInExistingOrNewWindow;
|
||||||
|
Enabled: True; ID: 'UnLocked_OpenNewInAnyWin';
|
||||||
|
Caption: ''; Desc: '' )
|
||||||
|
);
|
||||||
|
EditorOptionsEditAccessUserDef: TEditorOptionsEditAccessDefaultEntry =
|
||||||
|
(SearchLocked: eoeaUnlockedOnly; SearchInView: eoeaIgnoreInView;
|
||||||
|
SearchOrder: eoeaOrderByListPref; SearchOpenNew: eoeaNoNewTab;
|
||||||
|
Enabled: True; ID: '';
|
||||||
|
Caption: ''; Desc: '' );
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
TEditorOptionsEditAccessOrderList = class;
|
||||||
|
|
||||||
|
{ TEditorOptionsEditAccessOrderEntry }
|
||||||
|
|
||||||
|
TEditorOptionsEditAccessOrderEntry = class(TPersistent)
|
||||||
|
private
|
||||||
|
FId: String;
|
||||||
|
FList: TEditorOptionsEditAccessOrderList;
|
||||||
|
FCaption: String;
|
||||||
|
FDesc: String;
|
||||||
|
FEnabled: Boolean;
|
||||||
|
FIsFallback: Boolean;
|
||||||
|
FDefaults: TEditorOptionsEditAccessOrderEntry;
|
||||||
|
FSearchInView: TEditorOptionsEditAccessInViewState;
|
||||||
|
FSearchLocked: TEditorOptionsEditAccessLockedState;
|
||||||
|
FSearchOpenNew: TEditorOptionsEditAccessOpenNew;
|
||||||
|
FSearchOrder: TEditorOptionsEditAccessOrder;
|
||||||
|
procedure AssignFrom(AValue: TEditorOptionsEditAccessDefaultEntry);
|
||||||
|
procedure SetEnabled(const AValue: Boolean);
|
||||||
|
public
|
||||||
|
constructor Create(AList: TEditorOptionsEditAccessOrderList);
|
||||||
|
destructor Destroy; override;
|
||||||
|
procedure Assign(Src: TEditorOptionsEditAccessOrderEntry); reintroduce;
|
||||||
|
procedure InitFrom(AValue: TEditorOptionsEditAccessDefaultEntry);
|
||||||
|
public
|
||||||
|
function RealSearchOrder: TEditorOptionsEditAccessOrder;
|
||||||
|
property Defaults: TEditorOptionsEditAccessOrderEntry read FDefaults;
|
||||||
|
property ID: String read FId write FId;
|
||||||
|
property IsFallback: Boolean read FIsFallback;
|
||||||
|
property Desc: String read FDesc write FDesc;
|
||||||
|
//published
|
||||||
|
property Caption: String
|
||||||
|
read FCaption write FCaption;
|
||||||
|
published
|
||||||
|
property Enabled: Boolean
|
||||||
|
read FEnabled write SetEnabled;
|
||||||
|
public
|
||||||
|
property SearchLocked: TEditorOptionsEditAccessLockedState
|
||||||
|
read FSearchLocked write FSearchLocked;
|
||||||
|
property SearchInView: TEditorOptionsEditAccessInViewState
|
||||||
|
read FSearchInView write FSearchInView;
|
||||||
|
property SearchOrder: TEditorOptionsEditAccessOrder
|
||||||
|
read FSearchOrder write FSearchOrder;
|
||||||
|
property SearchOpenNew: TEditorOptionsEditAccessOpenNew
|
||||||
|
read FSearchOpenNew write FSearchOpenNew;
|
||||||
|
//property IgnoreTopLineAdjustment;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TEditorOptionsEditAccessOrderList }
|
||||||
|
|
||||||
|
TEditorOptionsEditAccessOrderList = class(TPersistent)
|
||||||
|
private
|
||||||
|
FList: TFPList;
|
||||||
|
FSearchOrder: TEditorOptionsEditAccessOrder;
|
||||||
|
function GetItems(Index: Integer): TEditorOptionsEditAccessOrderEntry;
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
destructor Destroy; override;
|
||||||
|
procedure Clear;
|
||||||
|
procedure InitDefaults;
|
||||||
|
procedure Assign(Src: TEditorOptionsEditAccessOrderList); reintroduce;
|
||||||
|
procedure LoadFromXMLConfig(XMLConfig:TRttiXMLConfig; Path: String);
|
||||||
|
procedure SaveToXMLConfig(XMLConfig:TRttiXMLConfig; Path: String);
|
||||||
|
function Count: Integer;
|
||||||
|
property Items[Index: Integer]: TEditorOptionsEditAccessOrderEntry
|
||||||
|
read GetItems; default;
|
||||||
|
published
|
||||||
|
property SearchOrder: TEditorOptionsEditAccessOrder
|
||||||
|
read FSearchOrder write FSearchOrder;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
{ TEditorOptions - Editor Options object used to hold the editor options }
|
{ TEditorOptions - Editor Options object used to hold the editor options }
|
||||||
|
|
||||||
@ -969,6 +1131,9 @@ type
|
|||||||
// Code Folding
|
// Code Folding
|
||||||
FUseCodeFolding: Boolean;
|
FUseCodeFolding: Boolean;
|
||||||
|
|
||||||
|
// Multi window
|
||||||
|
FMultiWinEditAccessOrder: TEditorOptionsEditAccessOrderList;
|
||||||
|
|
||||||
function OldAdditionalAttributeName(NewAha:String): string;
|
function OldAdditionalAttributeName(NewAha:String): string;
|
||||||
public
|
public
|
||||||
class function GetGroupCaption:string; override;
|
class function GetGroupCaption:string; override;
|
||||||
@ -1139,6 +1304,10 @@ type
|
|||||||
// Code Folding
|
// Code Folding
|
||||||
property UseCodeFolding: Boolean
|
property UseCodeFolding: Boolean
|
||||||
read FUseCodeFolding write FUseCodeFolding default True;
|
read FUseCodeFolding write FUseCodeFolding default True;
|
||||||
|
|
||||||
|
// Multi window
|
||||||
|
property MultiWinEditAccessOrder: TEditorOptionsEditAccessOrderList
|
||||||
|
read FMultiWinEditAccessOrder write FMultiWinEditAccessOrder;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
const
|
const
|
||||||
@ -2427,6 +2596,161 @@ begin
|
|||||||
FCustomSavedActions := Result;
|
FCustomSavedActions := Result;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TEditorOptionsEditAccessOrderList }
|
||||||
|
|
||||||
|
function TEditorOptionsEditAccessOrderList.GetItems(Index: Integer): TEditorOptionsEditAccessOrderEntry;
|
||||||
|
begin
|
||||||
|
Result := TEditorOptionsEditAccessOrderEntry(FList[Index]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TEditorOptionsEditAccessOrderList.Create;
|
||||||
|
begin
|
||||||
|
Flist := TFPList.Create;
|
||||||
|
FSearchOrder := eoeaOrderByEditFocus;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TEditorOptionsEditAccessOrderList.Destroy;
|
||||||
|
begin
|
||||||
|
Clear;
|
||||||
|
FreeAndNil(FList);
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TEditorOptionsEditAccessOrderList.Clear;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
for i := 0 to Count - 1 do
|
||||||
|
Items[i].Free;
|
||||||
|
FList.Clear;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TEditorOptionsEditAccessOrderList.InitDefaults;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
Entry: TEditorOptionsEditAccessOrderEntry;
|
||||||
|
begin
|
||||||
|
for i := 0 to high(EditorOptionsEditAccessDefaults) do begin
|
||||||
|
Entry := TEditorOptionsEditAccessOrderEntry.Create(Self);
|
||||||
|
Entry.InitFrom(EditorOptionsEditAccessDefaults[i]);
|
||||||
|
FList.Add(Entry);
|
||||||
|
end;
|
||||||
|
Entry.FIsFallback := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TEditorOptionsEditAccessOrderList.Assign(Src: TEditorOptionsEditAccessOrderList);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
Entry: TEditorOptionsEditAccessOrderEntry;
|
||||||
|
begin
|
||||||
|
Clear;
|
||||||
|
FSearchOrder := Src.FSearchOrder;
|
||||||
|
for i := 0 to Src.Count - 1 do begin
|
||||||
|
Entry := TEditorOptionsEditAccessOrderEntry.Create(Self);
|
||||||
|
Entry.Assign(Src[i]);
|
||||||
|
FList.Add(Entry);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TEditorOptionsEditAccessOrderList.LoadFromXMLConfig(XMLConfig: TRttiXMLConfig;
|
||||||
|
Path: String);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
def: TEditorOptionsEditAccessOrderList;
|
||||||
|
begin
|
||||||
|
def := TEditorOptionsEditAccessOrderList.Create;
|
||||||
|
XMLConfig.ReadObject(Path + 'Main/', self, def);
|
||||||
|
def.Free;
|
||||||
|
Path := Path + 'Entry/';
|
||||||
|
for i := 0 to Count - 1 do
|
||||||
|
XMLConfig.ReadObject(Path + Items[i].ID + '/', Items[i], Items[i].FDefaults);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TEditorOptionsEditAccessOrderList.SaveToXMLConfig(XMLConfig: TRttiXMLConfig;
|
||||||
|
Path: String);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
def: TEditorOptionsEditAccessOrderList;
|
||||||
|
begin
|
||||||
|
def := TEditorOptionsEditAccessOrderList.Create;
|
||||||
|
XMLConfig.WriteObject(Path + 'Main/', Self, def);
|
||||||
|
def.Free;
|
||||||
|
Path := Path + 'Entry/';
|
||||||
|
for i := 0 to Count - 1 do
|
||||||
|
XMLConfig.WriteObject(Path + Items[i].ID + '/', Items[i], Items[i].FDefaults);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TEditorOptionsEditAccessOrderList.Count: Integer;
|
||||||
|
begin
|
||||||
|
Result := FList.Count;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TEditorOptionsEditAccessOrderEntry }
|
||||||
|
|
||||||
|
procedure TEditorOptionsEditAccessOrderEntry.AssignFrom(AValue: TEditorOptionsEditAccessDefaultEntry);
|
||||||
|
begin
|
||||||
|
FId := AValue.ID;
|
||||||
|
FCaption := AValue.Caption;
|
||||||
|
FDesc := AValue.Desc;
|
||||||
|
FEnabled := AValue.Enabled;
|
||||||
|
FSearchInView := AValue.SearchInView;
|
||||||
|
FSearchLocked := AValue.SearchLocked;
|
||||||
|
FSearchOpenNew := AValue.SearchOpenNew;
|
||||||
|
FSearchOrder := AValue.SearchOrder;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TEditorOptionsEditAccessOrderEntry.SetEnabled(const AValue: Boolean);
|
||||||
|
begin
|
||||||
|
FEnabled := AValue or FIsFallback;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TEditorOptionsEditAccessOrderEntry.Create(AList: TEditorOptionsEditAccessOrderList);
|
||||||
|
begin
|
||||||
|
inherited Create;
|
||||||
|
FList := AList;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TEditorOptionsEditAccessOrderEntry.Destroy;
|
||||||
|
begin
|
||||||
|
FreeAndNil(FDefaults);
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TEditorOptionsEditAccessOrderEntry.Assign(Src: TEditorOptionsEditAccessOrderEntry);
|
||||||
|
begin
|
||||||
|
FId := Src.FID;
|
||||||
|
FCaption := Src.FCaption;
|
||||||
|
FDesc := Src.FDesc;
|
||||||
|
FEnabled := Src.FEnabled;
|
||||||
|
FIsFallback := Src.FIsFallback;
|
||||||
|
FSearchInView := Src.FSearchInView;
|
||||||
|
FSearchLocked := Src.FSearchLocked;
|
||||||
|
FSearchOpenNew := Src.FSearchOpenNew;
|
||||||
|
FSearchOrder := Src.FSearchOrder;
|
||||||
|
FreeAndNil(FDefaults);
|
||||||
|
if Src.FDefaults <> nil then begin
|
||||||
|
FDefaults := TEditorOptionsEditAccessOrderEntry.Create(nil);
|
||||||
|
FDefaults.Assign(Src.FDefaults);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TEditorOptionsEditAccessOrderEntry.InitFrom(AValue: TEditorOptionsEditAccessDefaultEntry);
|
||||||
|
begin
|
||||||
|
AssignFrom(AValue);
|
||||||
|
FDefaults := TEditorOptionsEditAccessOrderEntry.Create(nil);
|
||||||
|
FDefaults.AssignFrom(AValue);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TEditorOptionsEditAccessOrderEntry.RealSearchOrder: TEditorOptionsEditAccessOrder;
|
||||||
|
begin
|
||||||
|
Result := SearchOrder;
|
||||||
|
if Result = eoeaOrderByListPref then begin
|
||||||
|
if FList = nil then Result := eoeaOrderByEditFocus;
|
||||||
|
Result := FList.SearchOrder;
|
||||||
|
if Result = eoeaOrderByListPref then Result := eoeaOrderByEditFocus;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TEditorOptions }
|
{ TEditorOptions }
|
||||||
|
|
||||||
constructor TEditorOptions.Create;
|
constructor TEditorOptions.Create;
|
||||||
@ -2529,6 +2853,28 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
EditorOptionsEditAccessDefaults[0].Caption := dlgEditAccessCaptionLockedInView;
|
||||||
|
EditorOptionsEditAccessDefaults[0].Desc := dlgEditAccessDescLockedInView;
|
||||||
|
EditorOptionsEditAccessDefaults[1].Caption := dlgEditAccessCaptionUnLockedInSoftView;
|
||||||
|
EditorOptionsEditAccessDefaults[1].Desc := dlgEditAccessDescUnLockedInSoftView;
|
||||||
|
EditorOptionsEditAccessDefaults[2].Caption := dlgEditAccessCaptionUnLocked;
|
||||||
|
EditorOptionsEditAccessDefaults[2].Desc := dlgEditAccessDescUnLocked;
|
||||||
|
EditorOptionsEditAccessDefaults[3].Caption := dlgEditAccessCaptionUnLockedOpenNewInOldWin ;
|
||||||
|
EditorOptionsEditAccessDefaults[3].Desc := dlgEditAccessDescUnLockedOpenNewInOldWin;
|
||||||
|
EditorOptionsEditAccessDefaults[4].Caption := dlgEditAccessCaptionUnLockedOpenNewInNewWin;
|
||||||
|
EditorOptionsEditAccessDefaults[4].Desc := dlgEditAccessDescUnLockedOpenNewInNewWin;
|
||||||
|
EditorOptionsEditAccessDefaults[5].Caption := dlgEditAccessCaptionIgnLockedOldEdit;
|
||||||
|
EditorOptionsEditAccessDefaults[5].Desc := dlgEditAccessDescIgnLockedOldEdit;
|
||||||
|
EditorOptionsEditAccessDefaults[6].Caption := dlgEditAccessCaptionIgnLockedOnlyActEdit;
|
||||||
|
EditorOptionsEditAccessDefaults[6].Desc := dlgEditAccessDescIgnLockedOnlyActEdit;
|
||||||
|
EditorOptionsEditAccessDefaults[7].Caption := dlgEditAccessCaptionIgnLockedOnlyActWin;
|
||||||
|
EditorOptionsEditAccessDefaults[7].Desc := dlgEditAccessDescIgnLockedOnlyActWin;
|
||||||
|
EditorOptionsEditAccessDefaults[8].Caption := dlgEditAccessCaptionUnLockedOpenNewInAnyWin;
|
||||||
|
EditorOptionsEditAccessDefaults[8].Desc := dlgEditAccessDescUnLockedOpenNewInAnyWin;
|
||||||
|
|
||||||
|
FMultiWinEditAccessOrder := TEditorOptionsEditAccessOrderList.Create;
|
||||||
|
FMultiWinEditAccessOrder.InitDefaults;
|
||||||
|
|
||||||
// update translation
|
// update translation
|
||||||
EditorOptionsFoldInfoPas[ 0].Name := dlgFoldPasProcedure;
|
EditorOptionsFoldInfoPas[ 0].Name := dlgFoldPasProcedure;
|
||||||
EditorOptionsFoldInfoPas[ 1].Name := dlgFoldLocalPasVarType;
|
EditorOptionsFoldInfoPas[ 1].Name := dlgFoldLocalPasVarType;
|
||||||
@ -2628,6 +2974,7 @@ begin
|
|||||||
FMouseGutterActionsFoldExp.Free;
|
FMouseGutterActionsFoldExp.Free;
|
||||||
FMouseGutterActionsLines.Free;
|
FMouseGutterActionsLines.Free;
|
||||||
fKeyMap.Free;
|
fKeyMap.Free;
|
||||||
|
FreeAndNil(FMultiWinEditAccessOrder);
|
||||||
XMLConfig.Free;
|
XMLConfig.Free;
|
||||||
FTempMouseSettings.Free;
|
FTempMouseSettings.Free;
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
@ -2896,6 +3243,8 @@ begin
|
|||||||
FTempMouseSettings.WriteBack;
|
FTempMouseSettings.WriteBack;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
FMultiWinEditAccessOrder.LoadFromXMLConfig(XMLConfig, 'EditorOptions/MultiWin/');
|
||||||
|
|
||||||
except
|
except
|
||||||
on E: Exception do
|
on E: Exception do
|
||||||
DebugLn('[TEditorOptions.Load] ERROR: ', e.Message);
|
DebugLn('[TEditorOptions.Load] ERROR: ', e.Message);
|
||||||
@ -3106,6 +3455,8 @@ begin
|
|||||||
XMLConfig.DeletePath('EditorOptions/Mouse/GutterLineNum');
|
XMLConfig.DeletePath('EditorOptions/Mouse/GutterLineNum');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
FMultiWinEditAccessOrder.SaveToXMLConfig(XMLConfig, 'EditorOptions/MultiWin/');
|
||||||
|
|
||||||
InvalidateFileStateCache;
|
InvalidateFileStateCache;
|
||||||
XMLConfig.Flush;
|
XMLConfig.Flush;
|
||||||
except
|
except
|
||||||
|
@ -82,7 +82,6 @@ begin
|
|||||||
Items.Add(dlgCopyWordAtCursorOnCopyNone);
|
Items.Add(dlgCopyWordAtCursorOnCopyNone);
|
||||||
Items.Add(dlgCopyPasteKeepFolds);
|
Items.Add(dlgCopyPasteKeepFolds);
|
||||||
Items.Add(dlgTabNumbersNotebook);
|
Items.Add(dlgTabNumbersNotebook);
|
||||||
Items.Add(dlgHideSingleTabInNotebook);
|
|
||||||
end;
|
end;
|
||||||
EditorTrimSpaceTypeCheckBox.Items.Add(dlgTrimSpaceTypeLeaveLine);
|
EditorTrimSpaceTypeCheckBox.Items.Add(dlgTrimSpaceTypeLeaveLine);
|
||||||
EditorTrimSpaceTypeCheckBox.Items.Add(dlgTrimSpaceTypeEditLine);
|
EditorTrimSpaceTypeCheckBox.Items.Add(dlgTrimSpaceTypeEditLine);
|
||||||
@ -112,7 +111,6 @@ begin
|
|||||||
Checked[4] := CopyWordAtCursorOnCopyNone;
|
Checked[4] := CopyWordAtCursorOnCopyNone;
|
||||||
Checked[5] := eoFoldedCopyPaste in SynEditOptions2;
|
Checked[5] := eoFoldedCopyPaste in SynEditOptions2;
|
||||||
Checked[6] := ShowTabNumbers;
|
Checked[6] := ShowTabNumbers;
|
||||||
Checked[7] := HideSingleTabInWindow; // dlgHideSingleTabInNotebook
|
|
||||||
end;
|
end;
|
||||||
EditorTrimSpaceTypeCheckBox.ItemIndex := ord(TrimSpaceType);
|
EditorTrimSpaceTypeCheckBox.ItemIndex := ord(TrimSpaceType);
|
||||||
EditorTabPositionCheckBox.ItemIndex := TabPosToIndex[TabPosition];
|
EditorTabPositionCheckBox.ItemIndex := TabPosToIndex[TabPosition];
|
||||||
@ -147,7 +145,6 @@ begin
|
|||||||
ShowTabNumbers := EditorOptionsGroupBox.Checked[6];
|
ShowTabNumbers := EditorOptionsGroupBox.Checked[6];
|
||||||
TrimSpaceType := TSynEditStringTrimmingType(EditorTrimSpaceTypeCheckBox.ItemIndex);
|
TrimSpaceType := TSynEditStringTrimmingType(EditorTrimSpaceTypeCheckBox.ItemIndex);
|
||||||
TabPosition := TabIndexToPos[EditorTabPositionCheckBox.ItemIndex];
|
TabPosition := TabIndexToPos[EditorTabPositionCheckBox.ItemIndex];
|
||||||
HideSingleTabInWindow := EditorOptionsGroupBox.Checked[7]; // dlgHideSingleTabInNotebook
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
255
ide/frames/editor_multiwindow_options.lfm
Normal file
255
ide/frames/editor_multiwindow_options.lfm
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
inherited EditorMultiWindowOptionsFrame: TEditorMultiWindowOptionsFrame
|
||||||
|
Height = 387
|
||||||
|
Width = 521
|
||||||
|
Anchors = [akTop]
|
||||||
|
AutoSize = False
|
||||||
|
ClientHeight = 387
|
||||||
|
ClientWidth = 521
|
||||||
|
Visible = False
|
||||||
|
DesignLeft = 2048
|
||||||
|
DesignTop = 143
|
||||||
|
object AccessTypePanel: TPanel[0]
|
||||||
|
AnchorSideLeft.Control = Owner
|
||||||
|
AnchorSideTop.Control = lblAccessType
|
||||||
|
AnchorSideTop.Side = asrBottom
|
||||||
|
AnchorSideRight.Control = Owner
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
AnchorSideBottom.Control = Owner
|
||||||
|
AnchorSideBottom.Side = asrBottom
|
||||||
|
Left = 6
|
||||||
|
Height = 224
|
||||||
|
Top = 163
|
||||||
|
Width = 509
|
||||||
|
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||||
|
BorderSpacing.Left = 6
|
||||||
|
BorderSpacing.Top = 6
|
||||||
|
BorderSpacing.Right = 6
|
||||||
|
BevelOuter = bvNone
|
||||||
|
ClientHeight = 224
|
||||||
|
ClientWidth = 509
|
||||||
|
TabOrder = 0
|
||||||
|
object listAccessType: TCheckListBox
|
||||||
|
AnchorSideLeft.Control = AccessTypePanel
|
||||||
|
AnchorSideTop.Control = AccessTypePanel
|
||||||
|
AnchorSideBottom.Control = AccessTypePanel
|
||||||
|
AnchorSideBottom.Side = asrBottom
|
||||||
|
Left = 0
|
||||||
|
Height = 224
|
||||||
|
Top = 0
|
||||||
|
Width = 200
|
||||||
|
Align = alLeft
|
||||||
|
Constraints.MinWidth = 120
|
||||||
|
ExtendedSelect = False
|
||||||
|
ItemHeight = 0
|
||||||
|
OnClick = listAccessTypeClickCheck
|
||||||
|
OnClickCheck = listAccessTypeClickCheck
|
||||||
|
OnExit = listAccessTypeClickCheck
|
||||||
|
OnKeyUp = listAccessTypeKeyUp
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object Splitter1: TSplitter
|
||||||
|
Left = 200
|
||||||
|
Height = 224
|
||||||
|
Top = 0
|
||||||
|
Width = 5
|
||||||
|
end
|
||||||
|
object Panel2: TPanel
|
||||||
|
Left = 205
|
||||||
|
Height = 224
|
||||||
|
Top = 0
|
||||||
|
Width = 304
|
||||||
|
Align = alClient
|
||||||
|
BevelOuter = bvNone
|
||||||
|
ClientHeight = 224
|
||||||
|
ClientWidth = 304
|
||||||
|
Constraints.MinWidth = 100
|
||||||
|
TabOrder = 2
|
||||||
|
object lblAccessTypeDesc: TLabel
|
||||||
|
Left = 0
|
||||||
|
Height = 16
|
||||||
|
Top = 0
|
||||||
|
Width = 304
|
||||||
|
Align = alTop
|
||||||
|
Caption = 'lblAccessTypeDesc'
|
||||||
|
ParentColor = False
|
||||||
|
WordWrap = True
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object Bevel1a: TBevel[1]
|
||||||
|
AnchorSideLeft.Control = Owner
|
||||||
|
AnchorSideTop.Control = lblEditActivationOrderSection
|
||||||
|
AnchorSideTop.Side = asrCenter
|
||||||
|
AnchorSideRight.Control = Owner
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
Left = 0
|
||||||
|
Height = 3
|
||||||
|
Top = 54
|
||||||
|
Width = 60
|
||||||
|
BorderSpacing.Bottom = 6
|
||||||
|
end
|
||||||
|
object lblEditActivationOrderSection: TLabel[2]
|
||||||
|
AnchorSideLeft.Control = Bevel1a
|
||||||
|
AnchorSideLeft.Side = asrBottom
|
||||||
|
AnchorSideTop.Control = chkHideSingleTab
|
||||||
|
AnchorSideTop.Side = asrBottom
|
||||||
|
Left = 70
|
||||||
|
Height = 16
|
||||||
|
Top = 47
|
||||||
|
Width = 167
|
||||||
|
BorderSpacing.Left = 10
|
||||||
|
BorderSpacing.Bottom = 6
|
||||||
|
Caption = 'lblEditActivationOrderSection'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
end
|
||||||
|
object Bevel1: TBevel[3]
|
||||||
|
AnchorSideLeft.Control = lblEditActivationOrderSection
|
||||||
|
AnchorSideLeft.Side = asrBottom
|
||||||
|
AnchorSideTop.Control = lblEditActivationOrderSection
|
||||||
|
AnchorSideTop.Side = asrCenter
|
||||||
|
AnchorSideRight.Control = Owner
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
Left = 247
|
||||||
|
Height = 3
|
||||||
|
Top = 54
|
||||||
|
Width = 274
|
||||||
|
Anchors = [akTop, akLeft, akRight]
|
||||||
|
BorderSpacing.Left = 10
|
||||||
|
end
|
||||||
|
object Panel1: TPanel[4]
|
||||||
|
AnchorSideLeft.Control = Owner
|
||||||
|
AnchorSideTop.Control = lblEditActivationOrderSection
|
||||||
|
AnchorSideTop.Side = asrBottom
|
||||||
|
AnchorSideRight.Control = Owner
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
Left = 6
|
||||||
|
Height = 66
|
||||||
|
Top = 69
|
||||||
|
Width = 509
|
||||||
|
Anchors = [akTop, akLeft, akRight]
|
||||||
|
AutoSize = True
|
||||||
|
BorderSpacing.Left = 6
|
||||||
|
BorderSpacing.Right = 6
|
||||||
|
BorderSpacing.Bottom = 6
|
||||||
|
BevelOuter = bvNone
|
||||||
|
ClientHeight = 66
|
||||||
|
ClientWidth = 509
|
||||||
|
TabOrder = 1
|
||||||
|
object lblAccessOrder: TLabel
|
||||||
|
Left = 0
|
||||||
|
Height = 16
|
||||||
|
Top = 0
|
||||||
|
Width = 509
|
||||||
|
Align = alTop
|
||||||
|
BorderSpacing.Bottom = 6
|
||||||
|
Caption = 'lblAccessOrder'
|
||||||
|
ParentColor = False
|
||||||
|
WordWrap = True
|
||||||
|
end
|
||||||
|
object radioAccessOrderEdit: TRadioButton
|
||||||
|
AnchorSideLeft.Control = Panel1
|
||||||
|
AnchorSideTop.Control = lblAccessOrder
|
||||||
|
AnchorSideTop.Side = asrBottom
|
||||||
|
AnchorSideRight.Control = Panel1
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
Left = 0
|
||||||
|
Height = 19
|
||||||
|
Top = 22
|
||||||
|
Width = 509
|
||||||
|
Anchors = [akTop, akLeft, akRight]
|
||||||
|
Caption = 'radioAccessOrderEdit'
|
||||||
|
OnChange = radioAccessOrderEditChange
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object radioAccessOrderWin: TRadioButton
|
||||||
|
AnchorSideLeft.Control = Panel1
|
||||||
|
AnchorSideTop.Control = radioAccessOrderEdit
|
||||||
|
AnchorSideTop.Side = asrBottom
|
||||||
|
AnchorSideRight.Control = Panel1
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
Left = 0
|
||||||
|
Height = 19
|
||||||
|
Top = 41
|
||||||
|
Width = 509
|
||||||
|
Anchors = [akTop, akLeft, akRight]
|
||||||
|
BorderSpacing.Bottom = 6
|
||||||
|
Caption = 'radioAccessOrderWin'
|
||||||
|
OnChange = radioAccessOrderEditChange
|
||||||
|
TabOrder = 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object lblAccessType: TLabel[5]
|
||||||
|
AnchorSideLeft.Control = Owner
|
||||||
|
AnchorSideTop.Control = Panel1
|
||||||
|
AnchorSideTop.Side = asrBottom
|
||||||
|
AnchorSideRight.Control = Owner
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
Left = 0
|
||||||
|
Height = 16
|
||||||
|
Top = 141
|
||||||
|
Width = 521
|
||||||
|
Anchors = [akTop, akLeft, akRight]
|
||||||
|
Caption = 'lblAccessType'
|
||||||
|
ParentColor = False
|
||||||
|
end
|
||||||
|
object Bevel2a: TBevel[6]
|
||||||
|
AnchorSideLeft.Control = Owner
|
||||||
|
AnchorSideTop.Control = lblMultiWinTabSection
|
||||||
|
AnchorSideTop.Side = asrCenter
|
||||||
|
AnchorSideRight.Control = Owner
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
Left = 0
|
||||||
|
Height = 3
|
||||||
|
Top = 7
|
||||||
|
Width = 60
|
||||||
|
BorderSpacing.Bottom = 6
|
||||||
|
end
|
||||||
|
object lblMultiWinTabSection: TLabel[7]
|
||||||
|
AnchorSideLeft.Control = Bevel1a
|
||||||
|
AnchorSideLeft.Side = asrBottom
|
||||||
|
AnchorSideTop.Control = Owner
|
||||||
|
Left = 70
|
||||||
|
Height = 16
|
||||||
|
Top = 0
|
||||||
|
Width = 127
|
||||||
|
BorderSpacing.Left = 10
|
||||||
|
BorderSpacing.Bottom = 6
|
||||||
|
Caption = 'lblMultiWinTabSection'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
end
|
||||||
|
object Bevel2: TBevel[8]
|
||||||
|
AnchorSideLeft.Control = lblEditActivationOrderSection
|
||||||
|
AnchorSideLeft.Side = asrBottom
|
||||||
|
AnchorSideTop.Control = lblMultiWinTabSection
|
||||||
|
AnchorSideTop.Side = asrCenter
|
||||||
|
AnchorSideRight.Control = Owner
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
Left = 247
|
||||||
|
Height = 3
|
||||||
|
Top = 7
|
||||||
|
Width = 274
|
||||||
|
Anchors = [akTop, akLeft, akRight]
|
||||||
|
BorderSpacing.Left = 10
|
||||||
|
end
|
||||||
|
object chkHideSingleTab: TCheckBox[9]
|
||||||
|
AnchorSideLeft.Control = Owner
|
||||||
|
AnchorSideTop.Control = lblMultiWinTabSection
|
||||||
|
AnchorSideTop.Side = asrBottom
|
||||||
|
AnchorSideRight.Control = Owner
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
Left = 6
|
||||||
|
Height = 19
|
||||||
|
Top = 22
|
||||||
|
Width = 509
|
||||||
|
Anchors = [akTop, akLeft, akRight]
|
||||||
|
BorderSpacing.Left = 6
|
||||||
|
BorderSpacing.Right = 6
|
||||||
|
BorderSpacing.Bottom = 6
|
||||||
|
Caption = 'chkHideSingleTab'
|
||||||
|
TabOrder = 2
|
||||||
|
end
|
||||||
|
end
|
169
ide/frames/editor_multiwindow_options.pas
Normal file
169
ide/frames/editor_multiwindow_options.pas
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
{
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* This source is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This code is distributed in the hope that it will be useful, but *
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
||||||
|
* General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* A copy of the GNU General Public License is available on the World *
|
||||||
|
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
|
||||||
|
* obtain it by writing to the Free Software Foundation, *
|
||||||
|
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
}
|
||||||
|
unit editor_multiwindow_options;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, FileUtil, Forms, StdCtrls, ExtCtrls, Graphics,
|
||||||
|
LCLType, EditorOptions, LazarusIDEStrConsts, IDEOptionsIntf, Controls,
|
||||||
|
SynEditHighlighter, SynEditHighlighterFoldBase, Spin, ComCtrls, ColorBox, CheckLst, Buttons;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TEditorMultiWindowOptionsFrame }
|
||||||
|
|
||||||
|
TEditorMultiWindowOptionsFrame = class(TAbstractIDEOptionsEditor)
|
||||||
|
Bevel1: TBevel;
|
||||||
|
Bevel1a: TBevel;
|
||||||
|
Bevel2a: TBevel;
|
||||||
|
Bevel2: TBevel;
|
||||||
|
chkHideSingleTab: TCheckBox;
|
||||||
|
lblAccessTypeDesc: TLabel;
|
||||||
|
lblMultiWinTabSection: TLabel;
|
||||||
|
listAccessType: TCheckListBox;
|
||||||
|
AccessTypePanel: TPanel;
|
||||||
|
lblEditActivationOrderSection: TLabel;
|
||||||
|
lblAccessOrder: TLabel;
|
||||||
|
lblAccessType: TLabel;
|
||||||
|
Panel1: TPanel;
|
||||||
|
radioAccessOrderEdit: TRadioButton;
|
||||||
|
radioAccessOrderWin: TRadioButton;
|
||||||
|
Panel2: TPanel;
|
||||||
|
Splitter1: TSplitter;
|
||||||
|
procedure listAccessTypeClickCheck(Sender: TObject);
|
||||||
|
procedure listAccessTypeKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
|
procedure radioAccessOrderEditChange(Sender: TObject);
|
||||||
|
private
|
||||||
|
{ private declarations }
|
||||||
|
FMultiWinEditAccessOrder: TEditorOptionsEditAccessOrderList;
|
||||||
|
public
|
||||||
|
constructor Create(AOwner: TComponent); override;
|
||||||
|
destructor Destroy; override;
|
||||||
|
function GetTitle: String; override;
|
||||||
|
procedure Setup(ADialog: TAbstractOptionsEditorDialog); override;
|
||||||
|
procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
|
||||||
|
procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
|
||||||
|
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$R *.lfm}
|
||||||
|
|
||||||
|
{ TEditorMultiWindowOptionsFrame }
|
||||||
|
|
||||||
|
procedure TEditorMultiWindowOptionsFrame.listAccessTypeClickCheck(Sender: TObject);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
i := listAccessType.ItemIndex;
|
||||||
|
lblAccessTypeDesc.Caption := FMultiWinEditAccessOrder[i].Desc;
|
||||||
|
for i := 0 to FMultiWinEditAccessOrder.Count - 1 do begin
|
||||||
|
if FMultiWinEditAccessOrder[i].IsFallback then
|
||||||
|
listAccessType.Checked[i] := True;
|
||||||
|
FMultiWinEditAccessOrder[i].Enabled := listAccessType.Checked[i];
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TEditorMultiWindowOptionsFrame.listAccessTypeKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
|
begin
|
||||||
|
listAccessTypeClickCheck(Sender);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TEditorMultiWindowOptionsFrame.radioAccessOrderEditChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if radioAccessOrderEdit.Checked then
|
||||||
|
FMultiWinEditAccessOrder.SearchOrder := eoeaOrderByEditFocus;
|
||||||
|
if radioAccessOrderWin.Checked then
|
||||||
|
FMultiWinEditAccessOrder.SearchOrder := eoeaOrderByWindowFocus;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TEditorMultiWindowOptionsFrame.Create(AOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
FMultiWinEditAccessOrder := TEditorOptionsEditAccessOrderList.Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TEditorMultiWindowOptionsFrame.Destroy;
|
||||||
|
begin
|
||||||
|
FreeAndNil(FMultiWinEditAccessOrder);
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TEditorMultiWindowOptionsFrame.GetTitle: String;
|
||||||
|
begin
|
||||||
|
Result := dlgMultiWinOptions;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TEditorMultiWindowOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
||||||
|
begin
|
||||||
|
lblMultiWinTabSection.Caption := dlgMultiWinTabGroup;
|
||||||
|
lblEditActivationOrderSection.Caption := dlgMultiWinAccessGroup;
|
||||||
|
lblAccessOrder.Caption := dlgMultiWinAccessOrder;
|
||||||
|
radioAccessOrderEdit.Caption := dlgMultiWinAccessOrderEdit;
|
||||||
|
radioAccessOrderWin.Caption := dlgMultiWinAccessOrderWin;
|
||||||
|
lblAccessType.Caption := dlgMultiWinAccessType;
|
||||||
|
chkHideSingleTab.Caption := dlgHideSingleTabInNotebook;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TEditorMultiWindowOptionsFrame.ReadSettings(
|
||||||
|
AOptions: TAbstractIDEOptions);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
with TEditorOptions(AOptions) do begin
|
||||||
|
chkHideSingleTab.Checked := HideSingleTabInWindow;
|
||||||
|
end;
|
||||||
|
FMultiWinEditAccessOrder.Assign(TEditorOptions(AOptions).MultiWinEditAccessOrder);
|
||||||
|
|
||||||
|
radioAccessOrderEdit.Checked := FMultiWinEditAccessOrder.SearchOrder = eoeaOrderByEditFocus;
|
||||||
|
radioAccessOrderWin.Checked := FMultiWinEditAccessOrder.SearchOrder = eoeaOrderByWindowFocus;
|
||||||
|
|
||||||
|
listAccessType.Clear;
|
||||||
|
for i := 0 to FMultiWinEditAccessOrder.Count - 1 do begin
|
||||||
|
listAccessType.Items.Add(FMultiWinEditAccessOrder[i].Caption);
|
||||||
|
listAccessType.Checked[i] := FMultiWinEditAccessOrder[i].Enabled;
|
||||||
|
end;
|
||||||
|
listAccessType.ItemIndex := 0;
|
||||||
|
listAccessTypeClickCheck(nil);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TEditorMultiWindowOptionsFrame.WriteSettings(
|
||||||
|
AOptions: TAbstractIDEOptions);
|
||||||
|
begin
|
||||||
|
TEditorOptions(AOptions).MultiWinEditAccessOrder.Assign(FMultiWinEditAccessOrder);
|
||||||
|
with TEditorOptions(AOptions) do begin
|
||||||
|
HideSingleTabInWindow := chkHideSingleTab.Checked;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
class function TEditorMultiWindowOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
||||||
|
begin
|
||||||
|
Result := TEditorOptions;
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
RegisterIDEOptionsEditor(GroupEditor, TEditorMultiWindowOptionsFrame, EdtOptionsMultiWindow);
|
||||||
|
end.
|
||||||
|
|
@ -1417,6 +1417,14 @@ resourcestring
|
|||||||
//dlgCodeToolsTab = 'Code Tools';
|
//dlgCodeToolsTab = 'Code Tools';
|
||||||
lisAutomaticFeatures = 'Automatic features';
|
lisAutomaticFeatures = 'Automatic features';
|
||||||
|
|
||||||
|
dlgMultiWinOptions = 'Multi Window';
|
||||||
|
dlgMultiWinTabGroup = 'Tabs:';
|
||||||
|
dlgMultiWinAccessGroup = 'Find jump target editor:';
|
||||||
|
dlgMultiWinAccessOrder = 'Order to use for editors matching the same criteria';
|
||||||
|
dlgMultiWinAccessOrderEdit = 'Most recent focused editor for this file';
|
||||||
|
dlgMultiWinAccessOrderWin = 'Editor (for file) in most recent focused window';
|
||||||
|
dlgMultiWinAccessType = 'Priority list of criteria to choose an editor:';
|
||||||
|
|
||||||
dlgDividerOnOff = 'Draw divider';
|
dlgDividerOnOff = 'Draw divider';
|
||||||
dlgDividerDrawDepth = 'Draw divider level';
|
dlgDividerDrawDepth = 'Draw divider level';
|
||||||
dlgDividerTopColor = 'Line color';
|
dlgDividerTopColor = 'Line color';
|
||||||
@ -1522,6 +1530,51 @@ resourcestring
|
|||||||
dlgAddHiAttrGroupGutter = 'Gutter';
|
dlgAddHiAttrGroupGutter = 'Gutter';
|
||||||
dlgAddHiAttrGroupSyncroEdit = 'Syncron Edit';
|
dlgAddHiAttrGroupSyncroEdit = 'Syncron Edit';
|
||||||
dlgAddHiAttrGroupTemplateEdit = 'Template Edit';
|
dlgAddHiAttrGroupTemplateEdit = 'Template Edit';
|
||||||
|
|
||||||
|
dlgEditAccessCaptionLockedInView = 'Locked, if text in view';
|
||||||
|
dlgEditAccessCaptionUnLockedInSoftView = 'Unlocked, if text in centered view';
|
||||||
|
dlgEditAccessCaptionUnLocked = 'Unlocked';
|
||||||
|
dlgEditAccessCaptionUnLockedOpenNewInOldWin = 'New tab in existing window';
|
||||||
|
dlgEditAccessCaptionUnLockedOpenNewInNewWin = 'New tab in new window';
|
||||||
|
dlgEditAccessCaptionIgnLockedOldEdit = 'Ignore Locks, longest unused editor';
|
||||||
|
dlgEditAccessCaptionIgnLockedOnlyActEdit = 'Ignore Locks, if editor is current';
|
||||||
|
dlgEditAccessCaptionIgnLockedOnlyActWin = 'Ignore Locks, if editor in current window';
|
||||||
|
dlgEditAccessCaptionUnLockedOpenNewInAnyWin = 'New tab, existing or new window';
|
||||||
|
|
||||||
|
dlgEditAccessDescLockedInView =
|
||||||
|
'This option will use a locked (and only a locked) Editor, '+
|
||||||
|
'which does not need to scroll in order to display the target jump point'+
|
||||||
|
'(target jump point is already in visible screen area)';
|
||||||
|
dlgEditAccessDescUnLockedInSoftView =
|
||||||
|
'This option will use a not locked Editor, '+
|
||||||
|
'which does not need to scroll in order to display the target jump point'+
|
||||||
|
'(target jump point is already in visible screen center area, excluding 2-5 lines at the top/bottom)';
|
||||||
|
dlgEditAccessDescUnLocked =
|
||||||
|
'This option will use any not locked Editor';
|
||||||
|
dlgEditAccessDescUnLockedOpenNewInOldWin =
|
||||||
|
'This option will open a new Tab in an existing (and only in an existing) Window, '+
|
||||||
|
'if no unlocked tab is found. '+
|
||||||
|
'A tab is only opened if a window exists, that has not yet an editor for the target file';
|
||||||
|
dlgEditAccessDescUnLockedOpenNewInNewWin =
|
||||||
|
'This option will open a new Tab in a new (and always in a new) Window, '+
|
||||||
|
'if no unlocked tab is found. '+
|
||||||
|
'This option will always succeed, further options are never tested';
|
||||||
|
dlgEditAccessDescIgnLockedOldEdit =
|
||||||
|
'This option will use the longest unused editor for the file, '+
|
||||||
|
'even if it is locked and/or needs scrolling. '+
|
||||||
|
'This always looks at the editor, never the window, to find the longest unused. ' +
|
||||||
|
'This option will always succeed, further options are never tested';
|
||||||
|
dlgEditAccessDescIgnLockedOnlyActEdit =
|
||||||
|
'This option will check if the current active editor has the target file '+
|
||||||
|
'and if it is, it will use the current editor, even if it is locked and/or needs scrolling.';
|
||||||
|
dlgEditAccessDescIgnLockedOnlyActWin =
|
||||||
|
'This option will check if there is an editorfor the target file in the current window'+
|
||||||
|
'and if there is, it will use this editor, even if it is locked and/or needs scrolling.';
|
||||||
|
dlgEditAccessDescUnLockedOpenNewInAnyWin =
|
||||||
|
'This option will open a new Tab in an existing or new Window, '+
|
||||||
|
'if no unlocked tab is found. '+
|
||||||
|
'This option will always succeed, further options are never tested';
|
||||||
|
|
||||||
|
|
||||||
lisClearKeyMapping = 'Clear Key Mapping';
|
lisClearKeyMapping = 'Clear Key Mapping';
|
||||||
|
|
||||||
|
182
ide/main.pp
182
ide/main.pp
@ -113,6 +113,7 @@ uses
|
|||||||
editor_mouseaction_options_advanced, editor_color_options,
|
editor_mouseaction_options_advanced, editor_color_options,
|
||||||
editor_codetools_options, editor_codefolding_options,
|
editor_codetools_options, editor_codefolding_options,
|
||||||
editor_general_misc_options, editor_dividerdraw_options,
|
editor_general_misc_options, editor_dividerdraw_options,
|
||||||
|
editor_multiwindow_options,
|
||||||
codetools_general_options, codetools_codecreation_options,
|
codetools_general_options, codetools_codecreation_options,
|
||||||
codetools_classcompletion_options, atom_checkboxes_options,
|
codetools_classcompletion_options, atom_checkboxes_options,
|
||||||
codetools_wordpolicy_options, codetools_linesplitting_options,
|
codetools_wordpolicy_options, codetools_linesplitting_options,
|
||||||
@ -9047,47 +9048,154 @@ end;
|
|||||||
|
|
||||||
function TMainIDE.GetAvailableUnitEditorInfo(AnUnitInfo: TUnitInfo;
|
function TMainIDE.GetAvailableUnitEditorInfo(AnUnitInfo: TUnitInfo;
|
||||||
ACaretPoint: TPoint; WantedTopLine: integer = -1): TUnitEditorInfo;
|
ACaretPoint: TPoint; WantedTopLine: integer = -1): TUnitEditorInfo;
|
||||||
|
|
||||||
|
function EditorMatches(AEditInfo: TUnitEditorInfo;
|
||||||
|
AAccess: TEditorOptionsEditAccessOrderEntry; ALockRun: Integer = 0): Boolean;
|
||||||
|
var
|
||||||
|
AEdit: TSourceEditor;
|
||||||
|
begin
|
||||||
|
AEdit := TSourceEditor(AEditInfo.EditorComponent);
|
||||||
|
Result := False;
|
||||||
|
case AAccess.SearchLocked of
|
||||||
|
eoeaIgnoreLock: ;
|
||||||
|
eoeaLockedOnly: if not AEdit.IsLocked then exit;
|
||||||
|
eoeaUnlockedOnly: if AEdit.IsLocked then exit;
|
||||||
|
eoeaLockedFirst: if (not AEdit.IsLocked) and (ALockRun = 0) then exit;
|
||||||
|
eoeaLockedLast: if (AEdit.IsLocked) and (ALockRun = 0) then exit;
|
||||||
|
end;
|
||||||
|
case AAccess.SearchInView of
|
||||||
|
eoeaIgnoreInView: ;
|
||||||
|
eoeaInViewOnly: if not AEdit.IsCaretOnScreen(ACaretPoint, False) then exit;
|
||||||
|
eoeaInViewSoftCenterOnly: if not AEdit.IsCaretOnScreen(ACaretPoint, True) then exit;
|
||||||
|
end;
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function AvailSrcWindowIndex: Integer;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
Result := -1;
|
||||||
|
i := 0;
|
||||||
|
if AnUnitInfo.OpenEditorInfoCount > 0 then
|
||||||
|
while (i < SourceEditorManager.SourceWindowCount) and
|
||||||
|
(SourceEditorManager.SourceWindowByLastFocused[i].IndexOfEditorInShareWith
|
||||||
|
(TSourceEditor(AnUnitInfo.OpenEditorInfo[0].EditorComponent)) >= 0)
|
||||||
|
do
|
||||||
|
inc(i);
|
||||||
|
if i < SourceEditorManager.SourceWindowCount then
|
||||||
|
Result := SourceEditorManager.IndexOfSourceWindow(SourceEditorManager.SourceWindowByLastFocused[i]);
|
||||||
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
i: Integer;
|
i, j, w, LockRun: Integer;
|
||||||
|
Access: TEditorOptionsEditAccessOrderEntry;
|
||||||
begin
|
begin
|
||||||
Result := nil;
|
Result := nil;
|
||||||
if AnUnitInfo.OpenEditorInfoCount = 0 then
|
if AnUnitInfo.OpenEditorInfoCount = 0 then exit;
|
||||||
exit;
|
for i := 0 to EditorOpts.MultiWinEditAccessOrder.Count - 1 do begin
|
||||||
// find caret on screen, rather than last focused
|
Access := EditorOpts.MultiWinEditAccessOrder[i];
|
||||||
i := 0;
|
if not Access.Enabled then continue;
|
||||||
while (i < AnUnitInfo.OpenEditorInfoCount) do begin
|
LockRun := 1;
|
||||||
Result := AnUnitInfo.OpenEditorInfo[i];
|
if Access.SearchLocked in [eoeaLockedFirst, eoeaLockedLast] then LockRun := 0;
|
||||||
if TSourceEditor(Result.EditorComponent).IsCaretOnScreen(ACaretPoint,
|
repeat
|
||||||
not TSourceEditor(Result.EditorComponent).IsLocked)
|
case Access.RealSearchOrder of
|
||||||
or (TSourceEditor(Result.EditorComponent).TopLine = WantedTopLine)
|
eoeaOrderByEditFocus, eoeaOrderByListPref:
|
||||||
then
|
begin
|
||||||
exit;
|
for j := 0 to AnUnitInfo.OpenEditorInfoCount - 1 do
|
||||||
inc(i);
|
if EditorMatches(AnUnitInfo.OpenEditorInfo[j], Access) then begin
|
||||||
|
Result := AnUnitInfo.OpenEditorInfo[j];
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
eoeaOrderByWindowFocus:
|
||||||
|
begin
|
||||||
|
for w := 0 to SourceEditorManager.SourceWindowCount - 1 do begin
|
||||||
|
for j := 0 to AnUnitInfo.OpenEditorInfoCount - 1 do
|
||||||
|
if (TSourceEditor(AnUnitInfo.OpenEditorInfo[j].EditorComponent).SourceNotebook
|
||||||
|
= SourceEditorManager.SourceWindowByLastFocused[w])
|
||||||
|
and EditorMatches(AnUnitInfo.OpenEditorInfo[j], Access) then begin
|
||||||
|
Result := AnUnitInfo.OpenEditorInfo[j];
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
if Result <> nil then break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
eoeaOrderByOldestEditFocus:
|
||||||
|
begin
|
||||||
|
for j := AnUnitInfo.OpenEditorInfoCount - 1 downto 0 do
|
||||||
|
if EditorMatches(AnUnitInfo.OpenEditorInfo[j], Access) then begin
|
||||||
|
Result := AnUnitInfo.OpenEditorInfo[j];
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
eoeaOrderByOldestWindowFocus:
|
||||||
|
begin
|
||||||
|
for w := SourceEditorManager.SourceWindowCount - 1 downto 0 do begin
|
||||||
|
for j := 0 to AnUnitInfo.OpenEditorInfoCount - 1 do
|
||||||
|
if (TSourceEditor(AnUnitInfo.OpenEditorInfo[j].EditorComponent).SourceNotebook
|
||||||
|
= SourceEditorManager.SourceWindowByLastFocused[w])
|
||||||
|
and EditorMatches(AnUnitInfo.OpenEditorInfo[j], Access) then begin
|
||||||
|
Result := AnUnitInfo.OpenEditorInfo[j];
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
if Result <> nil then break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
eoeaOnlyCurrentEdit:
|
||||||
|
begin
|
||||||
|
LockRun := 1;
|
||||||
|
for j := 0 to AnUnitInfo.OpenEditorInfoCount - 1 do
|
||||||
|
if (AnUnitInfo.OpenEditorInfo[j].EditorComponent = SourceEditorManager.ActiveEditor)
|
||||||
|
and EditorMatches(AnUnitInfo.OpenEditorInfo[j], Access) then begin
|
||||||
|
Result := AnUnitInfo.OpenEditorInfo[j];
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
eoeaOnlyCurrentWindow:
|
||||||
|
begin
|
||||||
|
LockRun := 1;
|
||||||
|
for j := 0 to AnUnitInfo.OpenEditorInfoCount - 1 do
|
||||||
|
if (TSourceEditor(AnUnitInfo.OpenEditorInfo[j].EditorComponent).SourceNotebook
|
||||||
|
= SourceEditorManager.ActiveSourceWindow)
|
||||||
|
and EditorMatches(AnUnitInfo.OpenEditorInfo[j], Access) then begin
|
||||||
|
Result := AnUnitInfo.OpenEditorInfo[j];
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
inc(LockRun);
|
||||||
|
until (LockRun > 1) or (Result <> nil);
|
||||||
|
if (Result = nil) then
|
||||||
|
case Access.SearchOpenNew of
|
||||||
|
eoeaNoNewTab: ;
|
||||||
|
eoeaNewTabInExistingWindowOnly:
|
||||||
|
begin
|
||||||
|
w := AvailSrcWindowIndex;
|
||||||
|
if w >= 0 then
|
||||||
|
if DoOpenFileInSourceEditor(AnUnitInfo.GetClosedOrNewEditorInfo, -1, w, []) = mrOk then
|
||||||
|
Result := AnUnitInfo.OpenEditorInfo[0]; // newly opened will be last focused
|
||||||
|
end;
|
||||||
|
eoeaNewTabInNewWindowOnly:
|
||||||
|
begin
|
||||||
|
if DoOpenFileInSourceEditor(AnUnitInfo.GetClosedOrNewEditorInfo,
|
||||||
|
-1, SourceEditorManager.SourceWindowCount, []) = mrOk
|
||||||
|
then
|
||||||
|
Result := AnUnitInfo.OpenEditorInfo[0]; // newly opened will be last focused
|
||||||
|
end;
|
||||||
|
eoeaNewTabInExistingOrNewWindow:
|
||||||
|
begin
|
||||||
|
w := AvailSrcWindowIndex;
|
||||||
|
if w < 0 then w := SourceEditorManager.SourceWindowCount;
|
||||||
|
if DoOpenFileInSourceEditor(AnUnitInfo.GetClosedOrNewEditorInfo, -1, w, []) = mrOk then
|
||||||
|
Result := AnUnitInfo.OpenEditorInfo[0]; // newly opened will be last focused
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if Result <> nil then
|
||||||
|
break;
|
||||||
end;
|
end;
|
||||||
// find unlocked
|
if Result = nil then // should never happen
|
||||||
i := 0;
|
Result := AnUnitInfo.OpenEditorInfo[0];
|
||||||
while (i < AnUnitInfo.OpenEditorInfoCount) do begin
|
|
||||||
Result := AnUnitInfo.OpenEditorInfo[i];
|
|
||||||
if (not TSourceEditor(Result.EditorComponent).IsLocked) or
|
|
||||||
TSourceEditor(Result.EditorComponent).IsCaretOnScreen(ACaretPoint)
|
|
||||||
then
|
|
||||||
exit;
|
|
||||||
inc(i);
|
|
||||||
end;
|
|
||||||
// open new copy
|
|
||||||
i := 0;
|
|
||||||
if AnUnitInfo.OpenEditorInfoCount > 0 then
|
|
||||||
while (i < SourceEditorManager.SourceWindowCount) and
|
|
||||||
(SourceEditorManager.SourceWindowByLastFocused[i].IndexOfEditorInShareWith
|
|
||||||
(TSourceEditor(AnUnitInfo.OpenEditorInfo[0].EditorComponent)) >= 0)
|
|
||||||
do
|
|
||||||
inc(i);
|
|
||||||
if i < SourceEditorManager.SourceWindowCount then
|
|
||||||
i := SourceEditorManager.IndexOfSourceWindow(SourceEditorManager.SourceWindowByLastFocused[i]);
|
|
||||||
if DoOpenFileInSourceEditor(AnUnitInfo.GetClosedOrNewEditorInfo, -1, i, []) = mrOk then
|
|
||||||
Result := AnUnitInfo.OpenEditorInfo[0]
|
|
||||||
else
|
|
||||||
Result := nil;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TMainIDE.LoadIDECodeBuffer(var ACodeBuffer: TCodeBuffer;
|
function TMainIDE.LoadIDECodeBuffer(var ACodeBuffer: TCodeBuffer;
|
||||||
|
@ -3897,7 +3897,7 @@ begin
|
|||||||
NewPageName:=Format('%s:%d', [FPageName, (p+1) mod 10])
|
NewPageName:=Format('%s:%d', [FPageName, (p+1) mod 10])
|
||||||
else
|
else
|
||||||
NewPageName:=FPageName;
|
NewPageName:=FPageName;
|
||||||
if IsLocked then NewPageName:='%'+NewPageName;
|
if IsLocked then NewPageName:='#'+NewPageName;
|
||||||
if Modified then NewPageName:='*'+NewPageName;
|
if Modified then NewPageName:='*'+NewPageName;
|
||||||
if SourceNotebook.NoteBookPages[p] <> NewPageName then begin
|
if SourceNotebook.NoteBookPages[p] <> NewPageName then begin
|
||||||
SourceNotebook.NoteBookPages[p] := NewPageName;
|
SourceNotebook.NoteBookPages[p] := NewPageName;
|
||||||
|
@ -180,6 +180,7 @@ const
|
|||||||
EdtOptionsCodeFolding = 700;
|
EdtOptionsCodeFolding = 700;
|
||||||
EdtOptionsCodeFoldingMouse = 701;
|
EdtOptionsCodeFoldingMouse = 701;
|
||||||
EdtOptionsDrawDivider = 800;
|
EdtOptionsDrawDivider = 800;
|
||||||
|
EdtOptionsMultiWindow = 900;
|
||||||
|
|
||||||
GroupCodetools = 300;
|
GroupCodetools = 300;
|
||||||
CdtOptionsGeneral = 100;
|
CdtOptionsGeneral = 100;
|
||||||
|
Loading…
Reference in New Issue
Block a user