ide: use unit dialog: save recent settings in environmentopt/recent and not in codetools options, save also AllUnits check state, select first entry on filter

git-svn-id: trunk@51908 -
This commit is contained in:
ondrej 2016-03-10 21:58:12 +00:00
parent 9309190166
commit 006715e6f9
5 changed files with 48 additions and 36 deletions

View File

@ -173,7 +173,6 @@ type
UpdateAllMethodSignatures: boolean; UpdateAllMethodSignatures: boolean;
// uses section // uses section
UsesInsertPolicy: TUsesInsertPolicy; UsesInsertPolicy: TUsesInsertPolicy;
UsesSectionPreferInterface: boolean;
CurFlags: TBeautifyCodeFlags; CurFlags: TBeautifyCodeFlags;

View File

@ -102,7 +102,6 @@ type
FSetPropertyVariableIsPrefix: Boolean; FSetPropertyVariableIsPrefix: Boolean;
FSetPropertyVariableUseConst: Boolean; FSetPropertyVariableUseConst: Boolean;
FUsesInsertPolicy: TUsesInsertPolicy; FUsesInsertPolicy: TUsesInsertPolicy;
FUsesSectionPreferInterface: boolean;
// identifier completion // identifier completion
FIdentComplAddSemicolon: Boolean; FIdentComplAddSemicolon: Boolean;
@ -220,9 +219,7 @@ type
read FSetPropertyVariableUseConst write SetSetPropertyVariableUseConst; read FSetPropertyVariableUseConst write SetSetPropertyVariableUseConst;
property UsesInsertPolicy: TUsesInsertPolicy property UsesInsertPolicy: TUsesInsertPolicy
read FUsesInsertPolicy write FUsesInsertPolicy; read FUsesInsertPolicy write FUsesInsertPolicy;
property UsesSectionPreferInterface: boolean read FUsesSectionPreferInterface
write FUsesSectionPreferInterface;
// identifier completion // identifier completion
property IdentComplAddSemicolon: Boolean read FIdentComplAddSemicolon property IdentComplAddSemicolon: Boolean read FIdentComplAddSemicolon
write FIdentComplAddSemicolon; write FIdentComplAddSemicolon;
@ -501,8 +498,6 @@ begin
FUsesInsertPolicy:=UsesInsertPolicyNameToPolicy(XMLConfig.GetValue( FUsesInsertPolicy:=UsesInsertPolicyNameToPolicy(XMLConfig.GetValue(
'CodeToolsOptions/UsesInsertPolicy/Value', 'CodeToolsOptions/UsesInsertPolicy/Value',
UsesInsertPolicyNames[DefaultUsesInsertPolicy])); UsesInsertPolicyNames[DefaultUsesInsertPolicy]));
FUsesSectionPreferInterface:=XMLConfig.GetValue(
'CodeToolsOptions/UsesSectionPreferInterface/Value',true);
// identifier completion // identifier completion
FIdentComplAddSemicolon:=XMLConfig.GetValue( FIdentComplAddSemicolon:=XMLConfig.GetValue(
@ -661,8 +656,6 @@ begin
XMLConfig.SetDeleteValue('CodeToolsOptions/UsesInsertPolicy/Value', XMLConfig.SetDeleteValue('CodeToolsOptions/UsesInsertPolicy/Value',
UsesInsertPolicyNames[FUsesInsertPolicy], UsesInsertPolicyNames[FUsesInsertPolicy],
UsesInsertPolicyNames[DefaultUsesInsertPolicy]); UsesInsertPolicyNames[DefaultUsesInsertPolicy]);
XMLConfig.SetDeleteValue('CodeToolsOptions/UsesSectionPreferInterface/Value',
FUsesSectionPreferInterface,true);
// identifier completion // identifier completion
XMLConfig.SetDeleteValue('CodeToolsOptions/IdentifierCompletion/AddSemicolon', XMLConfig.SetDeleteValue('CodeToolsOptions/IdentifierCompletion/AddSemicolon',
@ -812,8 +805,7 @@ begin
FSetPropertyVariableIsPrefix:=CodeToolsOpts.FSetPropertyVariableIsPrefix; FSetPropertyVariableIsPrefix:=CodeToolsOpts.FSetPropertyVariableIsPrefix;
FSetPropertyVariableUseConst:=CodeToolsOpts.FSetPropertyVariableUseConst; FSetPropertyVariableUseConst:=CodeToolsOpts.FSetPropertyVariableUseConst;
FUsesInsertPolicy:=CodeToolsOpts.FUsesInsertPolicy; FUsesInsertPolicy:=CodeToolsOpts.FUsesInsertPolicy;
FUsesSectionPreferInterface:=CodeToolsOpts.FUsesSectionPreferInterface;
// identifier completion // identifier completion
FIdentComplAddSemicolon:=CodeToolsOpts.FIdentComplAddSemicolon; FIdentComplAddSemicolon:=CodeToolsOpts.FIdentComplAddSemicolon;
FIdentComplAddAssignOperator:=CodeToolsOpts.FIdentComplAddAssignOperator; FIdentComplAddAssignOperator:=CodeToolsOpts.FIdentComplAddAssignOperator;
@ -874,8 +866,7 @@ begin
FSetPropertyVariableIsPrefix:=false; FSetPropertyVariableIsPrefix:=false;
FSetPropertyVariableUseConst:=false; FSetPropertyVariableUseConst:=false;
FUsesInsertPolicy:=DefaultUsesInsertPolicy; FUsesInsertPolicy:=DefaultUsesInsertPolicy;
FUsesSectionPreferInterface:=true;
// identifier completion // identifier completion
FIdentComplAddSemicolon:=true; FIdentComplAddSemicolon:=true;
FIdentComplAddAssignOperator:=true; FIdentComplAddAssignOperator:=true;
@ -955,7 +946,6 @@ begin
and (FSetPropertyVariableIsPrefix=CodeToolsOpts.FSetPropertyVariableIsPrefix) and (FSetPropertyVariableIsPrefix=CodeToolsOpts.FSetPropertyVariableIsPrefix)
and (FSetPropertyVariableUseConst=CodeToolsOpts.FSetPropertyVariableUseConst) and (FSetPropertyVariableUseConst=CodeToolsOpts.FSetPropertyVariableUseConst)
and (FUsesInsertPolicy=CodeToolsOpts.FUsesInsertPolicy) and (FUsesInsertPolicy=CodeToolsOpts.FUsesInsertPolicy)
and (FUsesSectionPreferInterface=CodeToolsOpts.FUsesSectionPreferInterface)
// identifier completion // identifier completion
and (FIdentComplAddSemicolon=CodeToolsOpts.FIdentComplAddSemicolon) and (FIdentComplAddSemicolon=CodeToolsOpts.FIdentComplAddSemicolon)
@ -1075,7 +1065,6 @@ begin
Beauty.PropertyStoredIdentPostfix:=PropertyStoredIdentPostfix; Beauty.PropertyStoredIdentPostfix:=PropertyStoredIdentPostfix;
Beauty.PrivateVariablePrefix:=PrivateVariablePrefix; Beauty.PrivateVariablePrefix:=PrivateVariablePrefix;
Beauty.UsesInsertPolicy:=UsesInsertPolicy; Beauty.UsesInsertPolicy:=UsesInsertPolicy;
Beauty.UsesSectionPreferInterface:=UsesSectionPreferInterface;
end end
else else
inherited AssignTo(Dest); inherited AssignTo(Dest);

View File

@ -288,6 +288,11 @@ type
constructor Create; constructor Create;
end; end;
TUseUnitDlgOptions = record
AllUnits: Boolean;
AddToImplementation: Boolean;
end;
{ TDesktopOpt } { TDesktopOpt }
TDesktopOpt = class TDesktopOpt = class
@ -514,6 +519,7 @@ type
//other recent settings //other recent settings
FLastEventMethodCCResult: TCodeCreationDlgResult; FLastEventMethodCCResult: TCodeCreationDlgResult;
FLastVariableCCResult: TCodeCreationDlgResult; FLastVariableCCResult: TCodeCreationDlgResult;
FUseUnitDlgOptions: TUseUnitDlgOptions;
// backup // backup
FBackupInfoProjectFiles: TBackupInfo; FBackupInfoProjectFiles: TBackupInfo;
@ -775,6 +781,8 @@ type
read FLastEventMethodCCResult write FLastEventMethodCCResult; read FLastEventMethodCCResult write FLastEventMethodCCResult;
property LastVariableCCResult: TCodeCreationDlgResult property LastVariableCCResult: TCodeCreationDlgResult
read FLastVariableCCResult write FLastVariableCCResult; read FLastVariableCCResult write FLastVariableCCResult;
property UseUnitDlgOptions: TUseUnitDlgOptions
read FUseUnitDlgOptions write FUseUnitDlgOptions;
// backup // backup
property BackupInfoProjectFiles: TBackupInfo read FBackupInfoProjectFiles property BackupInfoProjectFiles: TBackupInfo read FBackupInfoProjectFiles
@ -1810,6 +1818,9 @@ begin
LoadCCResult(FLastEventMethodCCResult, Path+'Recent/EventMethodCCResult', icsPublic); LoadCCResult(FLastEventMethodCCResult, Path+'Recent/EventMethodCCResult', icsPublic);
LoadCCResult(FLastVariableCCResult, Path+'Recent/VariableCCResult', icsPrivate); LoadCCResult(FLastVariableCCResult, Path+'Recent/VariableCCResult', icsPrivate);
FUseUnitDlgOptions.AllUnits:=FXMLCfg.GetValue(Path+'Recent/UseUnitDlg/AllUnits',False);
FUseUnitDlgOptions.AddToImplementation:=FXMLCfg.GetValue(Path+'Recent/UseUnitDlg/AddToImplementation',False);
// Add example projects to an empty project list if examples have write access // Add example projects to an empty project list if examples have write access
if (FRecentProjectFiles.count=0) and (not FAlreadyPopulatedRecentFiles) then begin if (FRecentProjectFiles.count=0) and (not FAlreadyPopulatedRecentFiles) then begin
AddRecentProjectInitial('examples/jpeg/', 'jpegexample.lpi'); AddRecentProjectInitial('examples/jpeg/', 'jpegexample.lpi');
@ -2144,6 +2155,9 @@ begin
SaveCCResult(FLastEventMethodCCResult, Path+'Recent/EventMethodCCResult', icsPublic); SaveCCResult(FLastEventMethodCCResult, Path+'Recent/EventMethodCCResult', icsPublic);
SaveCCResult(FLastVariableCCResult, Path+'Recent/VariableCCResult', icsPrivate); SaveCCResult(FLastVariableCCResult, Path+'Recent/VariableCCResult', icsPrivate);
FXMLCfg.SetDeleteValue(Path+'Recent/UseUnitDlg/AllUnits',FUseUnitDlgOptions.AllUnits,False);
FXMLCfg.SetDeleteValue(Path+'Recent/UseUnitDlg/AddToImplementation',FUseUnitDlgOptions.AddToImplementation,False);
// external tools // external tools
fExternalUserTools.Save(FConfigStore,Path+'ExternalTools/'); fExternalUserTools.Save(FConfigStore,Path+'ExternalTools/');
FXMLCfg.SetDeleteValue(Path+'ExternalTools/MaxInParallel',FMaxExtToolsInParallel,0); FXMLCfg.SetDeleteValue(Path+'ExternalTools/MaxInParallel',FMaxExtToolsInParallel,0);

View File

@ -16,8 +16,8 @@ object UseUnitDialog: TUseUnitDialog
LCLVersion = '1.7' LCLVersion = '1.7'
object ButtonPanel1: TButtonPanel object ButtonPanel1: TButtonPanel
Left = 6 Left = 6
Height = 28 Height = 26
Top = 388 Top = 390
Width = 351 Width = 351
OKButton.Name = 'OKButton' OKButton.Name = 'OKButton'
OKButton.DefaultCaption = True OKButton.DefaultCaption = True
@ -42,7 +42,7 @@ object UseUnitDialog: TUseUnitDialog
AnchorSideBottom.Control = ButtonPanel1 AnchorSideBottom.Control = ButtonPanel1
Left = 6 Left = 6
Height = 49 Height = 49
Top = 333 Top = 335
Width = 351 Width = 351
Anchors = [akLeft, akRight, akBottom] Anchors = [akLeft, akRight, akBottom]
AutoFill = True AutoFill = True
@ -57,7 +57,7 @@ object UseUnitDialog: TUseUnitDialog
ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 2 ChildSizing.ControlsPerLine = 2
ClientHeight = 32 ClientHeight = 29
ClientWidth = 347 ClientWidth = 347
Columns = 2 Columns = 2
ItemIndex = 0 ItemIndex = 0
@ -75,7 +75,7 @@ object UseUnitDialog: TUseUnitDialog
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = AllUnitsCheckBox AnchorSideBottom.Control = AllUnitsCheckBox
Left = 6 Left = 6
Height = 265 Height = 272
Top = 32 Top = 32
Width = 351 Width = 351
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
@ -87,15 +87,14 @@ object UseUnitDialog: TUseUnitDialog
ScrollWidth = 349 ScrollWidth = 349
Style = lbOwnerDrawFixed Style = lbOwnerDrawFixed
TabOrder = 1 TabOrder = 1
TopIndex = -1
end end
object AllUnitsCheckBox: TCheckBox object AllUnitsCheckBox: TCheckBox
AnchorSideLeft.Control = Owner AnchorSideLeft.Control = Owner
AnchorSideBottom.Control = SectionRadioGroup AnchorSideBottom.Control = SectionRadioGroup
Left = 12 Left = 12
Height = 24 Height = 19
Top = 303 Top = 310
Width = 100 Width = 93
Anchors = [akLeft, akBottom] Anchors = [akLeft, akBottom]
BorderSpacing.Left = 6 BorderSpacing.Left = 6
BorderSpacing.Around = 6 BorderSpacing.Around = 6
@ -107,9 +106,10 @@ object UseUnitDialog: TUseUnitDialog
AnchorSideLeft.Control = Owner AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner AnchorSideTop.Control = Owner
Left = 6 Left = 6
Height = 25 Height = 23
Top = 6 Top = 6
Width = 351 Width = 351
OnAfterFilter = FilterEditAfterFilter
ButtonWidth = 23 ButtonWidth = 23
NumGlyphs = 1 NumGlyphs = 1
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]

View File

@ -34,7 +34,7 @@ uses
Dialogs, LCLProc, FileProcs, Graphics, LCLType, SourceEditor, LazIDEIntf, Dialogs, LCLProc, FileProcs, Graphics, LCLType, SourceEditor, LazIDEIntf,
IDEImagesIntf, LazarusIDEStrConsts, ProjectIntf, IDEWindowIntf, Project, IDEImagesIntf, LazarusIDEStrConsts, ProjectIntf, IDEWindowIntf, Project,
CodeCache, CodeToolManager, IdentCompletionTool, CodeTree, ListFilterEdit, CodeCache, CodeToolManager, IdentCompletionTool, CodeTree, ListFilterEdit,
LinkScanner, CodeToolsOptions; LinkScanner, EnvironmentOpts;
type type
@ -47,6 +47,7 @@ type
UnitsListBox: TListBox; UnitsListBox: TListBox;
SectionRadioGroup: TRadioGroup; SectionRadioGroup: TRadioGroup;
procedure AllUnitsCheckBoxChange(Sender: TObject); procedure AllUnitsCheckBoxChange(Sender: TObject);
procedure FilterEditAfterFilter(Sender: TObject);
procedure FormClose(Sender: TObject; var {%H-}CloseAction: TCloseAction); procedure FormClose(Sender: TObject; var {%H-}CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject); procedure FormDestroy(Sender: TObject);
@ -84,6 +85,7 @@ var
SrcEdit: TSourceEditor; SrcEdit: TSourceEditor;
s: String; s: String;
CTRes: Boolean; CTRes: Boolean;
EnvOptions: TUseUnitDlgOptions;
begin begin
Result:=mrOk; Result:=mrOk;
if not LazarusIDE.BeginCodeTools then begin if not LazarusIDE.BeginCodeTools then begin
@ -111,11 +113,13 @@ begin
// automatic choice of dest uses-section by cursor position // automatic choice of dest uses-section by cursor position
UseUnitDlg.DetermineUsesSection(SrcEdit.CodeBuffer); UseUnitDlg.DetermineUsesSection(SrcEdit.CodeBuffer);
if UseUnitDlg.FilterEdit.Items.Count = 0 then // Read recent properties
// no available units from current project => turn on "all units" EnvOptions := EnvironmentOptions.UseUnitDlgOptions;
UseUnitDlg.AllUnitsCheckBox.Checked := True; UseUnitDlg.AllUnitsCheckBox.Checked := EnvOptions.AllUnits;
UseUnitDlg.SectionRadioGroup.ItemIndex:=Ord(EnvOptions.AddToImplementation);
if UseUnitDlg.FilterEdit.Items.Count = 0 then begin if (UseUnitDlg.FilterEdit.Items.Count = 0)
and UseUnitDlg.AllUnitsCheckBox.Checked then begin
// No available units. This may not be a pascal source file. // No available units. This may not be a pascal source file.
ShowMessage(dlgNoAvailableUnits); ShowMessage(dlgNoAvailableUnits);
Exit(mrCancel); Exit(mrCancel);
@ -123,6 +127,12 @@ begin
// Show the dialog. // Show the dialog.
if UseUnitDlg.ShowModal=mrOk then begin if UseUnitDlg.ShowModal=mrOk then begin
// Write recent properties
EnvOptions.AllUnits := UseUnitDlg.AllUnitsCheckBox.Checked;
EnvOptions.AddToImplementation := Boolean(UseUnitDlg.SectionRadioGroup.ItemIndex);
EnvironmentOptions.UseUnitDlgOptions := EnvOptions;
s:=UseUnitDlg.SelectedUnit; s:=UseUnitDlg.SelectedUnit;
if s <> '' then begin if s <> '' then begin
if UseUnitDlg.InterfaceSelected then if UseUnitDlg.InterfaceSelected then
@ -154,10 +164,6 @@ begin
SectionRadioGroup.Items.Clear; SectionRadioGroup.Items.Clear;
SectionRadioGroup.Items.Add(dlgInsertInterface); SectionRadioGroup.Items.Add(dlgInsertInterface);
SectionRadioGroup.Items.Add(dlgInsertImplementation); SectionRadioGroup.Items.Add(dlgInsertImplementation);
if CodeToolsOpts.UsesSectionPreferInterface then
SectionRadioGroup.ItemIndex:=0
else
SectionRadioGroup.ItemIndex:=1;
ButtonPanel1.OKButton.Caption:=lisMenuOk; ButtonPanel1.OKButton.Caption:=lisMenuOk;
ButtonPanel1.CancelButton.Caption:=lisCancel; ButtonPanel1.CancelButton.Caption:=lisCancel;
UnitImgInd := IDEImages.LoadImage(16, 'item_unit'); UnitImgInd := IDEImages.LoadImage(16, 'item_unit');
@ -210,9 +216,7 @@ end;
procedure TUseUnitDialog.FormClose(Sender: TObject; procedure TUseUnitDialog.FormClose(Sender: TObject;
var CloseAction: TCloseAction); var CloseAction: TCloseAction);
begin begin
CodeToolsOpts.UsesSectionPreferInterface:=SectionRadioGroup.ItemIndex=0;
IDEDialogLayoutList.SaveLayout(Self); IDEDialogLayoutList.SaveLayout(Self);
CodeToolsOpts.Save;
end; end;
procedure TUseUnitDialog.UnitsListBoxDblClick(Sender: TObject); procedure TUseUnitDialog.UnitsListBoxDblClick(Sender: TObject);
@ -440,5 +444,11 @@ begin
FilterEdit.InvalidateFilter; FilterEdit.InvalidateFilter;
end; end;
procedure TUseUnitDialog.FilterEditAfterFilter(Sender: TObject);
begin
if (UnitsListBox.Count > 0) and (UnitsListBox.ItemIndex = -1) then
UnitsListBox.ItemIndex := 0;
end;
end. end.