mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-04 17:38:19 +02:00
IDE, SynEdit: add option to have bookmarks restore the scroll pos. Issue #40912
This commit is contained in:
parent
4696c84166
commit
77c4b7ceae
@ -132,7 +132,8 @@ type
|
||||
procedure CopyToClipboard; virtual; abstract;
|
||||
procedure CutToClipboard; virtual; abstract;
|
||||
function GetBookMark(BookMark: Integer; out X, Y: Integer): Boolean; virtual; abstract;
|
||||
procedure SetBookMark(BookMark: Integer; X, Y: Integer); virtual; abstract;
|
||||
function GetBookMark(BookMark: Integer; out X, Y, ALeft, ATop: Integer): Boolean; virtual; abstract;
|
||||
procedure SetBookMark(BookMark: Integer; X, Y: Integer; AnLeft: Integer = -1; AnTop: Integer = -1); virtual; abstract;
|
||||
|
||||
// screen and text position mapping
|
||||
function LineCount: Integer; virtual; abstract;
|
||||
|
@ -983,9 +983,10 @@ type
|
||||
// BoorMark
|
||||
procedure ClearBookMark(BookMark: Integer);
|
||||
function GetBookMark(BookMark: integer; var X, Y: integer): boolean;
|
||||
function GetBookMark(BookMark: integer; var X, Y, ALeft, ATop: integer): boolean;
|
||||
procedure GotoBookMark(BookMark: Integer);
|
||||
function IsBookmark(BookMark: integer): boolean;
|
||||
procedure SetBookMark(BookMark: Integer; X: Integer; Y: Integer);
|
||||
procedure SetBookMark(BookMark: Integer; X: Integer; Y: Integer; AnLeft: Integer = -1; AnTop: Integer = -1);
|
||||
property Marks: TSynEditMarkList read fMarkList;
|
||||
|
||||
// Undo/Redo
|
||||
@ -6451,11 +6452,19 @@ end;
|
||||
procedure TCustomSynEdit.GotoBookMark(BookMark: Integer);
|
||||
var
|
||||
LogCaret: TPoint;
|
||||
m: TSynEditBookMark;
|
||||
begin
|
||||
if (BookMark in [0..9]) and assigned(fBookMarks[BookMark])
|
||||
and (fBookMarks[BookMark].Line <= fLines.Count)
|
||||
then begin
|
||||
LogCaret:=Point(fBookMarks[BookMark].Column, fBookMarks[BookMark].Line);
|
||||
m := TSynEditBookMark(fBookMarks[BookMark]);
|
||||
if (eoBookmarkRestoresScroll in FOptions2) and (m.TopLeftMark <> nil) and
|
||||
(m.TopLeftMark.Line > 0)
|
||||
then begin
|
||||
TopLine := m.TopLeftMark.Line;
|
||||
LeftChar := m.TopLeftMark.Column;
|
||||
end;
|
||||
LogCaret:=Point(m.Column, m.Line);
|
||||
DoIncPaintLock(Self); // No editing is taking place
|
||||
FCaret.ChangeOnTouch;
|
||||
FCaret.LineBytePos := LogCaret;
|
||||
@ -6470,14 +6479,15 @@ begin
|
||||
FOnMouseLink(Self, X1, Y, Result);
|
||||
end;
|
||||
|
||||
procedure TCustomSynEdit.SetBookMark(BookMark: Integer; X: Integer; Y: Integer);
|
||||
procedure TCustomSynEdit.SetBookMark(BookMark: Integer; X: Integer; Y: Integer; AnLeft: Integer;
|
||||
AnTop: Integer);
|
||||
var
|
||||
i: Integer;
|
||||
mark: TSynEditMark;
|
||||
mark: TSynEditBookMark;
|
||||
begin
|
||||
if (BookMark in [0..9]) and (Y >= 1) and (Y <= Max(1, fLines.Count)) then
|
||||
begin
|
||||
mark := TSynEditMark.Create(self);
|
||||
mark := TSynEditBookMark.Create(self);
|
||||
X := PhysicalToLogicalPos(Point(X, Y)).x;
|
||||
with mark do begin
|
||||
Line := Y;
|
||||
@ -6486,6 +6496,8 @@ begin
|
||||
BookmarkNumber := Bookmark;
|
||||
Visible := true;
|
||||
InternalImage := (BookMarkOptions.BookmarkImages = nil);
|
||||
if AnLeft > 0 then
|
||||
mark.SetTopLeft(AnTop, AnLeft);
|
||||
end;
|
||||
for i := 0 to 9 do
|
||||
if assigned(fBookMarks[i]) and (fBookMarks[i].Line = Y) then
|
||||
@ -7448,9 +7460,10 @@ begin
|
||||
or (fBookMarks[CX].Line <> CaretY);
|
||||
ClearBookMark(CX);
|
||||
if moveBkm then
|
||||
SetBookMark(CX, CaretX, CaretY);
|
||||
SetBookMark(CX, CaretX, CaretY, LeftChar, TopLine);
|
||||
end else
|
||||
SetBookMark(CX, CaretX, CaretY);
|
||||
//SetBookMark(CX, CaretX, CaretY);
|
||||
SetBookMark(CX, CaretX, CaretY, LeftChar, TopLine);
|
||||
end; // if BookMarkOptions.EnableKeys
|
||||
end;
|
||||
ecCut:
|
||||
@ -8054,6 +8067,28 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TCustomSynEdit.GetBookMark(BookMark: integer; var X, Y, ALeft, ATop: integer): boolean;
|
||||
var
|
||||
i: integer;
|
||||
m: TSynEditMark;
|
||||
begin
|
||||
Result := false;
|
||||
if assigned(Marks) then
|
||||
for i := 0 to Marks.Count - 1 do
|
||||
if Marks[i].IsBookmark and (Marks[i].BookmarkNumber = BookMark) then begin
|
||||
m := Marks[i];
|
||||
X := m.Column;
|
||||
Y := m.Line;
|
||||
X := LogicalToPhysicalPos(Point(X, Y)).x;
|
||||
if (m is TSynEditBookMark) and (TSynEditBookMark(m).TopLeftMark <> nil) then begin
|
||||
ALeft := TSynEditBookMark(m).TopLeftMark.Column;
|
||||
ATop := TSynEditBookMark(m).TopLeftMark.Line;
|
||||
end;
|
||||
Result := true;
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TCustomSynEdit.IsBookmark(BookMark: integer): boolean;
|
||||
var
|
||||
x, y: integer;
|
||||
|
@ -57,8 +57,9 @@ type
|
||||
FOldLine: integer;
|
||||
FOwnerEdit: TSynEditBase;
|
||||
function GetLine: integer;
|
||||
procedure SetBookmarkNum(AValue: integer);
|
||||
procedure SetMarkLine(const AValue: TSynEditMarkLine);
|
||||
procedure SetMarkList(const AValue: TSynEditMarkList);
|
||||
procedure SetMarkList(const AValue: TSynEditMarkList); virtual;
|
||||
procedure SetOwnerEdit(const AValue: TSynEditBase);
|
||||
protected
|
||||
FColumn, FImage, FPriority: Integer;
|
||||
@ -73,7 +74,7 @@ type
|
||||
procedure SetPriority(const AValue: integer); virtual;
|
||||
procedure SetVisible(const Value: boolean); virtual;
|
||||
procedure SetInternalImage(const Value: boolean);
|
||||
function GetIsBookmark: boolean;
|
||||
function GetIsBookmark: boolean; virtual;
|
||||
|
||||
procedure DoChange(AChanges: TSynEditMarkChangeReasons); virtual;
|
||||
procedure ForceChange(AChanges: TSynEditMarkChangeReasons);
|
||||
@ -94,7 +95,7 @@ type
|
||||
property Priority: integer read FPriority write SetPriority;
|
||||
property Visible: boolean read FVisible write SetVisible;
|
||||
|
||||
property BookmarkNumber: integer read FBookmarkNum write fBookmarkNum;
|
||||
property BookmarkNumber: integer read FBookmarkNum write SetBookmarkNum;
|
||||
property IsBookmark: boolean read GetIsBookmark;
|
||||
|
||||
// InternalImage: Use Internal bookmark image 0..9;
|
||||
@ -107,6 +108,31 @@ type
|
||||
property ImageList: TCustomImageList read FImageList write FImageList;
|
||||
end;
|
||||
|
||||
{ TSynEditBookMark }
|
||||
|
||||
TSynEditBookMark = class(TSynEditMark)
|
||||
private type
|
||||
|
||||
{ TSynEditTopLeftMark }
|
||||
|
||||
TSynEditTopLeftMark = class(TSynEditMark)
|
||||
private
|
||||
FBookMark: TSynEditBookMark;
|
||||
public
|
||||
destructor Destroy; override;
|
||||
end;
|
||||
|
||||
private
|
||||
FTopLeftMark: TSynEditMark;
|
||||
procedure SetMarkList(const AValue: TSynEditMarkList); override;
|
||||
protected
|
||||
function GetIsBookmark: boolean; override;
|
||||
public
|
||||
destructor Destroy; override;
|
||||
procedure SetTopLeft(ATop, ALeft: integer);
|
||||
property TopLeftMark: TSynEditMark read FTopLeftMark;
|
||||
end;
|
||||
|
||||
{ TSynEditMarkLine }
|
||||
|
||||
TSynEditMarkLine = class(TSynSizedDifferentialAVLNode)
|
||||
@ -349,6 +375,12 @@ begin
|
||||
Result := FLine;
|
||||
end;
|
||||
|
||||
procedure TSynEditMark.SetBookmarkNum(AValue: integer);
|
||||
begin
|
||||
assert(Self is TSynEditBookMark, 'TSynEditMark.SetBookmarkNum: Self is TSynEditBookMark');
|
||||
FBookmarkNum := AValue;
|
||||
end;
|
||||
|
||||
procedure TSynEditMark.SetMarkLine(const AValue: TSynEditMarkLine);
|
||||
begin
|
||||
if FMarkLine = AValue then exit;
|
||||
@ -360,7 +392,7 @@ end;
|
||||
|
||||
function TSynEditMark.GetIsBookmark: boolean;
|
||||
begin
|
||||
Result := (fBookmarkNum >= 0);
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
procedure TSynEditMark.DoChange(AChanges: TSynEditMarkChangeReasons);
|
||||
@ -460,6 +492,51 @@ begin
|
||||
DoChange(FChanges);
|
||||
end;
|
||||
|
||||
{ TSynEditBookMark }
|
||||
|
||||
procedure TSynEditBookMark.SetMarkList(const AValue: TSynEditMarkList);
|
||||
begin
|
||||
inherited SetMarkList(AValue);
|
||||
if (FMarkList <> nil) and (FTopLeftMark <> nil) then
|
||||
FMarkList.Add(FTopLeftMark);
|
||||
end;
|
||||
|
||||
function TSynEditBookMark.GetIsBookmark: boolean;
|
||||
begin
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
destructor TSynEditBookMark.Destroy;
|
||||
begin
|
||||
if FTopLeftMark <> nil then begin
|
||||
TSynEditTopLeftMark(FTopLeftMark).FBookMark := nil;
|
||||
FTopLeftMark.Free;
|
||||
end;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TSynEditBookMark.SetTopLeft(ATop, ALeft: integer);
|
||||
begin
|
||||
if (ATop <= 0) or (ALeft <= 0) then
|
||||
exit;
|
||||
FTopLeftMark := TSynEditTopLeftMark.Create(OwnerEdit);
|
||||
TSynEditTopLeftMark(FTopLeftMark).FBookMark := Self;
|
||||
FTopLeftMark.Line := ATop;
|
||||
FTopLeftMark.Column := ALeft;
|
||||
|
||||
if (FMarkList <> nil) then
|
||||
FMarkList.Add(FTopLeftMark);
|
||||
end;
|
||||
|
||||
{ TSynEditBookMark.TSynEditTopLeftMark }
|
||||
|
||||
destructor TSynEditBookMark.TSynEditTopLeftMark.Destroy;
|
||||
begin
|
||||
if FBookMark <> nil then
|
||||
FBookMark.FTopLeftMark := nil;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
{ TSynEditMarkLine }
|
||||
|
||||
function TSynEditMarkLine.GetMark(Index: Integer): TSynEditMark;
|
||||
|
@ -196,8 +196,9 @@ type
|
||||
eoScrollPastEolAddPage, // Allows caret to go into empty space beyond end-of-line position
|
||||
// - Limit to length of longest line + width of one page
|
||||
// if eoScrollPastEol also is set, the bigger of the 2 limits is used
|
||||
eoScrollPastEolAutoCaret // Allows caret to go into empty space beyond end-of-line position
|
||||
eoScrollPastEolAutoCaret, // Allows caret to go into empty space beyond end-of-line position
|
||||
// Limit will follow the caret / scrollbar-range extends when caret goes further
|
||||
eoBookmarkRestoresScroll // Bookmarks also restore scroll pos
|
||||
);
|
||||
TSynEditorOptions2 = set of TSynEditorOption2;
|
||||
|
||||
|
@ -5636,7 +5636,8 @@ begin
|
||||
SynEditOptName := 'OverwriteBlock';
|
||||
eoAutoHideCursor:
|
||||
SynEditOptName := 'AutoHideCursor';
|
||||
eoCaretMoveEndsSelection, eoPersistentCaretStopBlink, eoNoScrollOnSelectRange:
|
||||
eoCaretMoveEndsSelection, eoPersistentCaretStopBlink, eoNoScrollOnSelectRange,
|
||||
eoBookmarkRestoresScroll:
|
||||
WriteStr(SynEditOptName, SynEditOpt2);
|
||||
else
|
||||
SynEditOptName := '';
|
||||
@ -5893,7 +5894,8 @@ begin
|
||||
SynEditOptName := 'OverwriteBlock';
|
||||
eoAutoHideCursor:
|
||||
SynEditOptName := 'AutoHideCursor';
|
||||
eoCaretMoveEndsSelection, eoPersistentCaretStopBlink, eoNoScrollOnSelectRange:
|
||||
eoCaretMoveEndsSelection, eoPersistentCaretStopBlink, eoNoScrollOnSelectRange,
|
||||
eoBookmarkRestoresScroll:
|
||||
WriteStr(SynEditOptName, SynEditOpt2);
|
||||
else
|
||||
SynEditOptName := '';
|
||||
|
@ -47,8 +47,8 @@ object EditorGeneralMiscOptionsFrame: TEditorGeneralMiscOptionsFrame
|
||||
ChildSizing.ControlsPerLine = 1
|
||||
ColumnLayout = clVerticalThenHorizontal
|
||||
Columns = 2
|
||||
OnItemClick = EditorOptionsGroupBoxItemClick
|
||||
TabOrder = 0
|
||||
OnItemClick = EditorOptionsGroupBoxItemClick
|
||||
end
|
||||
object EditorTrimSpaceTypeComboBox: TComboBox
|
||||
AnchorSideLeft.Control = Owner
|
||||
|
@ -122,9 +122,10 @@ begin
|
||||
Items.Add(dlgCopyWordAtCursorOnCopyNone); // 3
|
||||
Items.Add(dlgCopyPasteKeepFolds); // 4
|
||||
Items.Add(dlgEditExportBackColor); // 5
|
||||
Items.Add(dlgBookmarkSetScroll); // 6
|
||||
|
||||
{$IFDEF WinIME} // Keep last, or all subsequnt indexes will depend on it
|
||||
Items.Add(dlgUseMinimumIme); // 6
|
||||
Items.Add(dlgUseMinimumIme); // 7
|
||||
{$ENDIF}
|
||||
end;
|
||||
EditorTrimSpaceTypeComboBox.Items.Add(dlgTrimSpaceTypeLeaveLine);
|
||||
@ -160,8 +161,9 @@ begin
|
||||
Checked[3] := CopyWordAtCursorOnCopyNone;
|
||||
Checked[4] := eoFoldedCopyPaste in SynEditOptions2;
|
||||
Checked[5] := ExportHtmlWithBackground;
|
||||
Checked[6] := eoBookmarkRestoresScroll in SynEditOptions2;
|
||||
{$IFDEF WinIME}
|
||||
Checked[6] := UseMinimumIme;
|
||||
Checked[7] := UseMinimumIme;
|
||||
{$ENDIF}
|
||||
|
||||
with ScrollOnEditLeftOptions do begin
|
||||
@ -212,8 +214,12 @@ begin
|
||||
SynEditOptions2 := SynEditOptions2 - [eoFoldedCopyPaste];
|
||||
TrimSpaceType := TSynEditStringTrimmingType(EditorTrimSpaceTypeComboBox.ItemIndex);
|
||||
ExportHtmlWithBackground := EditorOptionsGroupBox.Checked[5];
|
||||
if EditorOptionsGroupBox.Checked[6] then
|
||||
SynEditOptions2 := SynEditOptions2 + [eoBookmarkRestoresScroll]
|
||||
else
|
||||
SynEditOptions2 := SynEditOptions2 - [eoBookmarkRestoresScroll];
|
||||
{$IFDEF WinIME}
|
||||
UseMinimumIme := EditorOptionsGroupBox.Checked[6];
|
||||
UseMinimumIme := EditorOptionsGroupBox.Checked[7];
|
||||
{$ENDIF}
|
||||
|
||||
with ScrollOnEditLeftOptions do begin
|
||||
|
@ -1833,6 +1833,7 @@ resourcestring
|
||||
dlgCopyPasteKeepFolds = 'Copy/Paste with fold info';
|
||||
dlgUseMinimumIme = 'IME handled by System';
|
||||
dlgEditExportBackColor = 'Use Background color in HTML export';
|
||||
dlgBookmarkSetScroll = 'Bookmarks restore scroll position';
|
||||
dlgUndoLimit = 'Undo limit';
|
||||
dlgTabWidths = 'Tab widths';
|
||||
dlgMarginGutter = 'Margin and gutter';
|
||||
|
@ -11240,7 +11240,11 @@ var
|
||||
UnitInfo: TUnitInfo;
|
||||
begin
|
||||
UnitInfo := Project1.UnitWithEditorComponent(TSourceEditor(Sender));
|
||||
UnitInfo.AddBookmark(Mark.Column, Mark.Line, Mark.BookmarkNumber);
|
||||
if (Mark is TSynEditBookMark) and (TSynEditBookMark(Mark).TopLeftMark <> nil) then
|
||||
UnitInfo.AddBookmark(Mark.Column, Mark.Line,
|
||||
TSynEditBookMark(Mark).Column, TSynEditBookMark(Mark).Line, Mark.BookmarkNumber)
|
||||
else
|
||||
UnitInfo.AddBookmark(Mark.Column, Mark.Line, Mark.BookmarkNumber);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.SrcNotebookEditorClearBookmark(Sender: TObject; var Mark: TSynEditMark);
|
||||
@ -11315,7 +11319,7 @@ Begin
|
||||
SetMark:=false;
|
||||
end;
|
||||
if SetMark then
|
||||
ActEdit.EditorComponent.SetBookMark(ID,NewXY.X,NewXY.Y);
|
||||
ActEdit.EditorComponent.SetBookMark(ID,NewXY.X,NewXY.Y, ActEdit.EditorComponent.LeftChar, ActEdit.EditorComponent.TopLine);
|
||||
|
||||
{$push}{$overflowchecks off}
|
||||
Inc(BookmarksStamp);
|
||||
|
@ -432,6 +432,7 @@ type
|
||||
procedure ClearUnitComponentDependencies(ClearTypes: TUnitCompDependencyTypes);
|
||||
// Bookmarks
|
||||
function AddBookmark(X, Y, ID: integer):integer;
|
||||
function AddBookmark(X, Y, ALeft, ATop, ID: integer):integer;
|
||||
procedure DeleteBookmark(ID: integer);
|
||||
// EditorInfo
|
||||
// At any time, any UnitInfo has at least one EditorInfo
|
||||
@ -1112,6 +1113,7 @@ type
|
||||
|
||||
// bookmarks
|
||||
function AddBookmark(X, Y, ID: Integer; AUnitInfo:TUnitInfo):integer;
|
||||
function AddBookmark(X, Y, ALeft, ATop, ID: Integer; AUnitInfo:TUnitInfo):integer;
|
||||
procedure DeleteBookmark(ID: Integer);
|
||||
public
|
||||
property ActiveBuildMode: TProjectBuildMode read FActiveBuildMode
|
||||
@ -1837,7 +1839,7 @@ procedure TUnitInfo.SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string;
|
||||
SaveData, SaveSession: boolean; UsePathDelim: TPathDelimSwitch);
|
||||
var
|
||||
AFilename: String;
|
||||
i, X, Y: Integer;
|
||||
i, X, Y, L, T: Integer;
|
||||
s: String;
|
||||
BM: TFileBookmark;
|
||||
begin
|
||||
@ -1894,8 +1896,11 @@ begin
|
||||
then
|
||||
Bookmarks.Delete(i)
|
||||
else
|
||||
if OpenEditorInfo[0].EditorComponent.GetBookMark(BM.ID, X, Y) then
|
||||
if OpenEditorInfo[0].EditorComponent.GetBookMark(BM.ID, X, Y, L, T) then begin
|
||||
BM.CursorPos := Point(X, Y);
|
||||
BM.Top := T;
|
||||
BM.Left := L;
|
||||
end;
|
||||
end;
|
||||
FBookmarks.SaveToXMLConfig(XMLConfig,Path+'Bookmarks/');
|
||||
XMLConfig.SetDeleteValue(Path+'Loaded/Value',Loaded,false);
|
||||
@ -2091,7 +2096,7 @@ begin
|
||||
BM := Bookmarks[i];
|
||||
j := Project1.Bookmarks.IndexOfID(BM.ID);
|
||||
if (j < 0) then
|
||||
OpenEditorInfo[0].EditorComponent.SetBookMark(BM.ID, BM.CursorPos.X, BM.CursorPos.Y);
|
||||
OpenEditorInfo[0].EditorComponent.SetBookMark(BM.ID, BM.CursorPos.X, BM.CursorPos.Y, BM.Left, BM.Top);
|
||||
end;
|
||||
finally
|
||||
dec(FSetBookmarLock);
|
||||
@ -2435,6 +2440,16 @@ begin
|
||||
Project1.AddBookmark(X, Y, ID, Self);
|
||||
end;
|
||||
|
||||
function TUnitInfo.AddBookmark(X, Y, ALeft, ATop, ID: integer): integer;
|
||||
begin
|
||||
if FSetBookmarLock = 0 then
|
||||
Result := Bookmarks.Add(X, Y, ALeft, ATop, ID)
|
||||
else
|
||||
Result := -1;
|
||||
SessionModified := True;
|
||||
Project1.AddBookmark(X, Y, ALeft, ATop, ID, Self);
|
||||
end;
|
||||
|
||||
procedure TUnitInfo.DeleteBookmark(ID: integer);
|
||||
var
|
||||
i: Integer;
|
||||
@ -5542,6 +5557,12 @@ begin
|
||||
SessionModified := true;
|
||||
end;
|
||||
|
||||
function TProject.AddBookmark(X, Y, ALeft, ATop, ID: Integer; AUnitInfo: TUnitInfo): integer;
|
||||
begin
|
||||
Result := Bookmarks.Add(X, Y, ALeft, ATop, ID, AUnitInfo);
|
||||
SessionModified := true;
|
||||
end;
|
||||
|
||||
procedure TProject.DeleteBookmark(ID: Integer);
|
||||
var
|
||||
i: Integer;
|
||||
|
@ -132,22 +132,32 @@ var
|
||||
type
|
||||
//---------------------------------------------------------------------------
|
||||
// bookmarks of a single file
|
||||
|
||||
{ TFileBookmark }
|
||||
|
||||
TFileBookmark = class
|
||||
private
|
||||
fCursorPos: TPoint;
|
||||
fID: integer;
|
||||
FLeft: integer;
|
||||
FTop: integer;
|
||||
public
|
||||
constructor Create;
|
||||
constructor Create(NewX,NewY,AnID: integer);
|
||||
constructor Create(NewX,NewY,NewLeft,NewTop,AnID: integer);
|
||||
procedure SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string);
|
||||
procedure LoadFromXMLConfig(XMLConfig: TXMLConfig; const Path: string);
|
||||
function X: integer;
|
||||
function Y: integer;
|
||||
property Top: integer read FTop write FTop;
|
||||
property Left: integer read FLeft write FLeft;
|
||||
public
|
||||
property CursorPos: TPoint read fCursorPos write fCursorPos;
|
||||
property ID: integer read fID write fID;
|
||||
end;
|
||||
|
||||
{ TFileBookmarks }
|
||||
|
||||
TFileBookmarks = class
|
||||
private
|
||||
FBookmarks:TList; // list of TFileBookmark
|
||||
@ -163,6 +173,7 @@ type
|
||||
procedure Clear;
|
||||
function Add(ABookmark: TFileBookmark):integer;
|
||||
function Add(X,Y,ID: integer):integer;
|
||||
function Add(X,Y,ALeft,ATop,ID: integer):integer;
|
||||
function IndexOfID(ID:integer):integer;
|
||||
procedure SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string);
|
||||
procedure LoadFromXMLConfig(XMLConfig: TXMLConfig; const Path: string);
|
||||
@ -176,11 +187,16 @@ type
|
||||
TProjectBookmark = class
|
||||
private
|
||||
fCursorPos: TPoint;
|
||||
FLeft: integer;
|
||||
FTop: integer;
|
||||
FUnitInfo: TObject;
|
||||
fID: integer;
|
||||
public
|
||||
constructor Create(X,Y, AnID: integer; AUnitInfo:TObject);
|
||||
constructor Create(X,Y, ALeft, ATop, AnID: integer; AUnitInfo:TObject);
|
||||
property CursorPos: TPoint read fCursorPos write fCursorPos;
|
||||
property Top: integer read FTop;
|
||||
property Left: integer read FLeft;
|
||||
property UnitInfo: TObject read FUnitInfo write FUnitInfo;
|
||||
property ID:integer read fID write fID;
|
||||
end;
|
||||
@ -202,6 +218,7 @@ type
|
||||
procedure Clear;
|
||||
function Add(ABookmark: TProjectBookmark):integer;
|
||||
function Add(X, Y, ID: integer; AUnitInfo: TObject):integer;
|
||||
function Add(X, Y, ALeft, ATop, ID: integer; AUnitInfo: TObject):integer;
|
||||
procedure DeleteAllWithUnitInfo(AUnitInfo:TObject);
|
||||
function IndexOfID(ID:integer):integer;
|
||||
function BookmarkWithID(ID: integer): TProjectBookmark;
|
||||
@ -300,10 +317,19 @@ begin
|
||||
inherited Create;
|
||||
fCursorPos.X := X;
|
||||
fCursorPos.Y := Y;
|
||||
FLeft := -1;
|
||||
FTop := -1;
|
||||
FUnitInfo := AUnitInfo;
|
||||
fID := AnID;
|
||||
end;
|
||||
|
||||
constructor TProjectBookmark.Create(X, Y, ALeft, ATop, AnID: integer; AUnitInfo: TObject);
|
||||
begin
|
||||
Create(X, Y, AnID, AUnitInfo);
|
||||
FLeft := ALeft;
|
||||
FTop := ATop;
|
||||
end;
|
||||
|
||||
{ TProjectBookmarkList }
|
||||
|
||||
constructor TProjectBookmarkList.Create;
|
||||
@ -401,6 +427,11 @@ begin
|
||||
Result:=Add(TProjectBookmark.Create(X, Y, ID, AUnitInfo));
|
||||
end;
|
||||
|
||||
function TProjectBookmarkList.Add(X, Y, ALeft, ATop, ID: integer; AUnitInfo: TObject): integer;
|
||||
begin
|
||||
Result:=Add(TProjectBookmark.Create(X, Y, ALeft, ATop, ID, AUnitInfo));
|
||||
end;
|
||||
|
||||
{ TProjectJumpHistoryPosition }
|
||||
|
||||
constructor TProjectJumpHistoryPosition.Create(const AFilename: string;
|
||||
@ -764,14 +795,25 @@ constructor TFileBookmark.Create(NewX, NewY, AnID: integer);
|
||||
begin
|
||||
fCursorPos.X:=NewX;
|
||||
fCursorPos.Y:=NewY;
|
||||
FLeft := -1;
|
||||
FTop := -1;
|
||||
fID:=AnID;
|
||||
end;
|
||||
|
||||
constructor TFileBookmark.Create(NewX, NewY, NewLeft, NewTop, AnID: integer);
|
||||
begin
|
||||
Create(NewX, NewY, AnID);
|
||||
FLeft := NewLeft;
|
||||
FTop := NewTop;
|
||||
end;
|
||||
|
||||
procedure TFileBookmark.SaveToXMLConfig(XMLConfig: TXMLConfig;
|
||||
const Path: string);
|
||||
begin
|
||||
XMLConfig.SetDeleteValue(Path+'X',fCursorPos.X,1);
|
||||
XMLConfig.SetDeleteValue(Path+'Y',fCursorPos.Y,1);
|
||||
XMLConfig.SetDeleteValue(Path+'Left',FLeft,-1);
|
||||
XMLConfig.SetDeleteValue(Path+'Top',FTop,-1);
|
||||
XMLConfig.SetDeleteValue(Path+'ID',fID,0);
|
||||
end;
|
||||
|
||||
@ -780,6 +822,8 @@ procedure TFileBookmark.LoadFromXMLConfig(XMLConfig: TXMLConfig;
|
||||
begin
|
||||
fCursorPos.X:=XMLConfig.GetValue(Path+'X',1);
|
||||
fCursorPos.Y:=XMLConfig.GetValue(Path+'Y',1);
|
||||
FLeft:=XMLConfig.GetValue(Path+'Left',-1);
|
||||
FTop :=XMLConfig.GetValue(Path+'Top',-1);
|
||||
fID:=XMLConfig.GetValue(Path+'ID',0);
|
||||
end;
|
||||
|
||||
@ -851,6 +895,11 @@ begin
|
||||
Result:=Add(TFileBookmark.Create(X,Y,ID));
|
||||
end;
|
||||
|
||||
function TFileBookmarks.Add(X, Y, ALeft, ATop, ID: integer): integer;
|
||||
begin
|
||||
Result:=Add(TFileBookmark.Create(X,Y,ALeft,ATop,ID));
|
||||
end;
|
||||
|
||||
function TFileBookmarks.IndexOfID(ID: integer): integer;
|
||||
begin
|
||||
Result:=Count-1;
|
||||
|
@ -460,7 +460,8 @@ type
|
||||
procedure CopyToClipboard; override;
|
||||
procedure CutToClipboard; override;
|
||||
function GetBookMark(BookMark: Integer; out X, Y: Integer): Boolean; override;
|
||||
procedure SetBookMark(BookMark: Integer; X, Y: Integer); override;
|
||||
function GetBookMark(BookMark: Integer; out X, Y, ALeft, ATop: Integer): Boolean; override;
|
||||
procedure SetBookMark(BookMark: Integer; X, Y: Integer; AnLeft: Integer = -1; AnTop: Integer = -1); override;
|
||||
|
||||
procedure ExportAsHtml(AFileName: String);
|
||||
|
||||
@ -4947,9 +4948,17 @@ begin
|
||||
Result := FEditor.GetBookMark(BookMark, X, Y);
|
||||
end;
|
||||
|
||||
procedure TSourceEditor.SetBookMark(BookMark: Integer; X, Y: Integer);
|
||||
function TSourceEditor.GetBookMark(BookMark: Integer; out X, Y, ALeft, ATop: Integer): Boolean;
|
||||
begin
|
||||
FEditor.SetBookMark(BookMark, X, Y);
|
||||
X := 0; Y := 0;
|
||||
ALeft := -1; ATop := -1;
|
||||
Result := FEditor.GetBookMark(BookMark, X, Y, ALeft, ATop);
|
||||
end;
|
||||
|
||||
procedure TSourceEditor.SetBookMark(BookMark: Integer; X, Y: Integer; AnLeft: Integer;
|
||||
AnTop: Integer);
|
||||
begin
|
||||
FEditor.SetBookMark(BookMark, X, Y, AnLeft, AnTop);
|
||||
end;
|
||||
|
||||
procedure TSourceEditor.ExportAsHtml(AFileName: String);
|
||||
|
Loading…
Reference in New Issue
Block a user