mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-07 22:58:14 +02:00
IDE: codeexplorer: save active page
git-svn-id: trunk@41549 -
This commit is contained in:
parent
fc09ab4f53
commit
125b3d57ba
@ -43,6 +43,12 @@ uses
|
||||
type
|
||||
{ TCodeExplorerOptions }
|
||||
|
||||
TCodeExplorerPage = (
|
||||
cepNone,
|
||||
cepCode,
|
||||
cepDirectives
|
||||
);
|
||||
|
||||
TCodeExplorerRefresh = (
|
||||
cerManual, // only via refresh button
|
||||
cerSwitchEditorPage,// everytime the source editor switches to another page
|
||||
@ -90,6 +96,7 @@ const
|
||||
DefaultCodeExplorerCategories = [cecUses,
|
||||
cecTypes,cecVariables,cecConstants,cecProcedures];
|
||||
cefcAll = [low(TCEObserverCategory)..high(TCEObserverCategory)];
|
||||
DefaultCodeExplorerPage = cepCode;
|
||||
DefaultCodeObserverCategories = [
|
||||
cefcLongProcs,
|
||||
cefcEmptyProcs,
|
||||
@ -143,15 +150,20 @@ type
|
||||
FMode : TCodeExplorerMode;
|
||||
FObserverIgnoreConstants: TAvgLvlTree;// tree of AnsiString
|
||||
FOptionsFilename: string;
|
||||
FPage: TCodeExplorerPage;
|
||||
FRefresh: TCodeExplorerRefresh;
|
||||
FSavedChangeStep: integer;
|
||||
function GetModified: boolean;
|
||||
procedure SetCategories(const AValue: TCodeExplorerCategories);
|
||||
procedure SetFollowCursor(const AValue: boolean);
|
||||
procedure SetLongParamListCount(const AValue: integer);
|
||||
procedure SetLongProcLineCount(const AValue: integer);
|
||||
procedure SetMode(const AValue: TCodeExplorerMode);
|
||||
procedure SetModified(AValue: boolean);
|
||||
procedure SetNestedProcCount(const AValue: integer);
|
||||
procedure SetObserveCharConst(const AValue: boolean);
|
||||
procedure SetObserverCategories(const AValue: TCEObserverCategories);
|
||||
procedure SetPage(AValue: TCodeExplorerPage);
|
||||
procedure SetRefresh(const AValue: TCodeExplorerRefresh);
|
||||
public
|
||||
class function GetGroupCaption:string; override;
|
||||
@ -167,6 +179,7 @@ type
|
||||
procedure LoadFromXMLConfig(XMLConfig: TXMLConfig; const Path: string);
|
||||
procedure SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string);
|
||||
procedure IncreaseChangeStep;
|
||||
property Modified: boolean read GetModified write SetModified;
|
||||
public
|
||||
// observer: ignore constants
|
||||
function CreateListOfCOIgnoreConstants: TStrings;
|
||||
@ -193,6 +206,7 @@ type
|
||||
property OptionsFilename: string read FOptionsFilename write FOptionsFilename;
|
||||
property FollowCursor: boolean read FFollowCursor write SetFollowCursor default true;
|
||||
property Categories: TCodeExplorerCategories read FCategories write SetCategories default DefaultCodeExplorerCategories;
|
||||
property Page: TCodeExplorerPage read FPage write SetPage default DefaultCodeExplorerPage;
|
||||
property ChangeStep: integer read FChangeStep write FChangeStep;
|
||||
public
|
||||
// Observer
|
||||
@ -210,6 +224,11 @@ const
|
||||
|
||||
cerDefault = cerSwitchEditorPage;
|
||||
|
||||
CodeExplorerPageNames: array[TCodeExplorerPage] of string = (
|
||||
'?',
|
||||
'Code',
|
||||
'Directives'
|
||||
);
|
||||
CodeExplorerRefreshNames: array[TCodeExplorerRefresh] of string = (
|
||||
'Manual',
|
||||
'SwitchEditorPage',
|
||||
@ -248,6 +267,7 @@ const
|
||||
var
|
||||
CodeExplorerOptions: TCodeExplorerOptions = nil; // set by the IDE
|
||||
|
||||
function CodeExplorerPageNameToEnum(const s: string): TCodeExplorerPage;
|
||||
function CodeExplorerRefreshNameToEnum(const s: string): TCodeExplorerRefresh;
|
||||
function CodeExplorerModeNameToEnum(const s: string): TCodeExplorerMode;
|
||||
function CodeExplorerCategoryNameToEnum(const s: string): TCodeExplorerCategory;
|
||||
@ -258,6 +278,12 @@ function dbgs(c: TCodeExplorerCategory): string; overload;
|
||||
|
||||
implementation
|
||||
|
||||
function CodeExplorerPageNameToEnum(const s: string): TCodeExplorerPage;
|
||||
begin
|
||||
for Result:=Low(TCodeExplorerPage) to High(TCodeExplorerPage) do
|
||||
if SysUtils.CompareText(CodeExplorerPageNames[Result],s)=0 then exit;
|
||||
Result:=DefaultCodeExplorerPage;
|
||||
end;
|
||||
|
||||
function CodeExplorerRefreshNameToEnum(const s: string): TCodeExplorerRefresh;
|
||||
begin
|
||||
@ -342,6 +368,14 @@ begin
|
||||
IncreaseChangeStep;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerOptions.SetModified(AValue: boolean);
|
||||
begin
|
||||
if AValue then
|
||||
IncreaseChangeStep
|
||||
else
|
||||
FSavedChangeStep:=FChangeStep;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerOptions.SetNestedProcCount(const AValue: integer);
|
||||
begin
|
||||
if FNestedProcCount=AValue then exit;
|
||||
@ -364,6 +398,13 @@ begin
|
||||
IncreaseChangeStep;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerOptions.SetPage(AValue: TCodeExplorerPage);
|
||||
begin
|
||||
if FPage=AValue then Exit;
|
||||
FPage:=AValue;
|
||||
IncreaseChangeStep;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerOptions.SetFollowCursor(const AValue: boolean);
|
||||
begin
|
||||
if FFollowCursor=AValue then exit;
|
||||
@ -393,6 +434,11 @@ begin
|
||||
IncreaseChangeStep;
|
||||
end;
|
||||
|
||||
function TCodeExplorerOptions.GetModified: boolean;
|
||||
begin
|
||||
Result:=FSavedChangeStep<>FChangeStep;
|
||||
end;
|
||||
|
||||
constructor TCodeExplorerOptions.Create;
|
||||
begin
|
||||
FOptionsFilename:=
|
||||
@ -434,6 +480,7 @@ begin
|
||||
FMode:=cemCategory;
|
||||
FRefresh:=cerDefault;
|
||||
FFollowCursor:=true;
|
||||
FPage:=DefaultCodeExplorerPage;
|
||||
FCategories:=DefaultCodeExplorerCategories;
|
||||
FObserverCategories:=DefaultCodeObserverCategories;
|
||||
FLongProcLineCount:=DefaultCOLongProcLineCount;
|
||||
@ -455,6 +502,7 @@ begin
|
||||
FRefresh:=Src.Refresh;
|
||||
FMode:=Src.Mode;
|
||||
FFollowCursor:=Src.FollowCursor;
|
||||
FPage:=Src.Page;
|
||||
FCategories:=Src.Categories;
|
||||
FObserverCategories:=Src.ObserverCategories;
|
||||
FLongProcLineCount:=Src.LongProcLineCount;
|
||||
@ -505,6 +553,7 @@ procedure TCodeExplorerOptions.Save;
|
||||
var
|
||||
XMLConfig: TXMLConfig;
|
||||
begin
|
||||
if FileExistsCached(FOptionsFilename) and not Modified then exit;
|
||||
try
|
||||
InvalidateFileStateCache;
|
||||
XMLConfig:=TXMLConfig.CreateClean(FOptionsFilename);
|
||||
@ -513,6 +562,7 @@ begin
|
||||
SaveToXMLConfig(XMLConfig,'CodeExplorer/');
|
||||
XMLConfig.Flush;
|
||||
XMLConfig.Free;
|
||||
Modified:=false;
|
||||
except
|
||||
on E: Exception do begin
|
||||
DebugLn('[TCodeExplorerOptions.Save] error writing "',FOptionsFilename,'" ',E.Message);
|
||||
@ -535,7 +585,8 @@ begin
|
||||
FMode:=CodeExplorerModeNameToEnum(
|
||||
XMLConfig.GetValue(Path+'Mode/Value',''));
|
||||
FFollowCursor:=XMLConfig.GetValue(Path+'FollowCursor',true);
|
||||
|
||||
FPage:=CodeExplorerPageNameToEnum(XMLConfig.GetValue(Path+'Page/Value',''));
|
||||
|
||||
FCategories:=[];
|
||||
for c:=FirstCodeExplorerCategory to high(TCodeExplorerCategory) do
|
||||
if XMLConfig.GetValue(Path+'Categories/'+CodeExplorerCategoryNames[c],
|
||||
@ -606,7 +657,9 @@ begin
|
||||
CodeExplorerModeNames[FMode],
|
||||
CodeExplorerModeNames[cemCategory]);
|
||||
XMLConfig.SetDeleteValue(Path+'FollowCursor',FFollowCursor,true);
|
||||
|
||||
XMLConfig.SetDeleteValue(Path+'Page/Value',CodeExplorerPageNames[FPage],
|
||||
CodeExplorerPageNames[DefaultCodeExplorerPage]);
|
||||
|
||||
for c:=FirstCodeExplorerCategory to high(TCodeExplorerCategory) do
|
||||
XMLConfig.SetDeleteValue(Path+'Categories/'+CodeExplorerCategoryNames[c],
|
||||
c in FCategories,c in DefaultCodeExplorerCategories);
|
||||
@ -660,7 +713,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerOptions.IncreaseChangeStep;
|
||||
|
@ -67,12 +67,6 @@ type
|
||||
);
|
||||
TCodeExplorerViewFlags = set of TCodeExplorerViewFlag;
|
||||
|
||||
TCodeExplorerPage = (
|
||||
cepNone,
|
||||
cepCode,
|
||||
cepDirectives
|
||||
);
|
||||
|
||||
TCodeObsStackItemType = (
|
||||
cositNone,
|
||||
cositBegin,
|
||||
@ -153,6 +147,7 @@ type
|
||||
procedure IdleTimer1Timer(Sender: TObject);
|
||||
procedure JumpToMenuItemClick(Sender: TObject);
|
||||
procedure JumpToImplementationMenuItemClick(Sender: TObject);
|
||||
procedure OnCloseIDE(Sender: TObject);
|
||||
procedure ShowSrcEditPosMenuItemClick(Sender: TObject);
|
||||
procedure MainNotebookPageChanged(Sender: TObject);
|
||||
procedure CodeModeSpeedButtonClick(Sender: TObject);
|
||||
@ -455,7 +450,7 @@ end;
|
||||
|
||||
{ TCodeExplorerView }
|
||||
|
||||
procedure TCodeExplorerView.CodeExplorerViewCREATE(Sender: TObject);
|
||||
procedure TCodeExplorerView.CodeExplorerViewCreate(Sender: TObject);
|
||||
begin
|
||||
FMode := CodeExplorerOptions.Mode;
|
||||
UpdateMode;
|
||||
@ -463,7 +458,10 @@ begin
|
||||
Name:=NonModalIDEWindowNames[nmiwCodeExplorerName];
|
||||
Caption := lisMenuViewCodeExplorer;
|
||||
|
||||
MainNotebook.ActivePage:=CodePage;
|
||||
case CodeExplorerOptions.Page of
|
||||
cepDirectives: MainNotebook.ActivePage:=DirectivesPage;
|
||||
else MainNotebook.ActivePage:=CodePage;
|
||||
end;
|
||||
|
||||
CodePage.Caption:=lisCode;
|
||||
CodeRefreshSpeedButton.Hint:=dlgUnitDepRefresh;
|
||||
@ -512,6 +510,7 @@ begin
|
||||
fNodesWithPath:=TAvgLvlTree.Create(@CompareViewNodePathsAndParams);
|
||||
|
||||
Application.AddOnUserInputHandler(@OnUserInput);
|
||||
LazarusIDE.AddHandlerOnIDEClose(@OnCloseIDE);
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.CodeExplorerViewDestroy(Sender: TObject);
|
||||
@ -628,6 +627,11 @@ begin
|
||||
JumpToSelection(true);
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.OnCloseIDE(Sender: TObject);
|
||||
begin
|
||||
CodeExplorerOptions.Save;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.ShowSrcEditPosMenuItemClick(Sender: TObject);
|
||||
begin
|
||||
SelectSourceEditorNode;
|
||||
@ -635,6 +639,10 @@ end;
|
||||
|
||||
procedure TCodeExplorerView.MainNotebookPageChanged(Sender: TObject);
|
||||
begin
|
||||
if MainNotebook.ActivePage=DirectivesPage then
|
||||
CodeExplorerOptions.Page:=cepDirectives
|
||||
else
|
||||
CodeExplorerOptions.Page:=cepCode;
|
||||
Refresh(true);
|
||||
end;
|
||||
|
||||
@ -2348,8 +2356,8 @@ begin
|
||||
Result:=SelectCodePosition(TCodeBuffer(SrcEdit.CodeToolsBuffer),xy.x,xy.y);
|
||||
end;
|
||||
|
||||
function TCodeExplorerView.SelectCodePosition(CodeBuf: TCodeBuffer;
|
||||
X, Y: integer): Boolean;
|
||||
function TCodeExplorerView.SelectCodePosition(CodeBuf: TCodeBuffer; X,
|
||||
Y: integer): boolean;
|
||||
var
|
||||
CodePos: TCodeXYPosition;
|
||||
CleanPos: integer;
|
||||
|
Loading…
Reference in New Issue
Block a user