mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-17 08:09:26 +02:00
IDE: added missing pas
git-svn-id: trunk@38484 -
This commit is contained in:
parent
b57fcdf880
commit
ddba39fd77
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -4709,6 +4709,8 @@ ide/ideinfodlg.lfm svneol=native#text/plain
|
||||
ide/ideinfodlg.pas svneol=native#text/plain
|
||||
ide/ideinfoneedbuild.lfm svneol=native#text/plain
|
||||
ide/ideinfoneedbuild.pas svneol=native#text/plain
|
||||
ide/idemacrovalues.lfm svneol=native#text/plain
|
||||
ide/idemacrovalues.pas svneol=native#text/plain
|
||||
ide/ideminilibc.pas svneol=native#text/plain
|
||||
ide/ideoptiondefs.pas svneol=native#text/pascal
|
||||
ide/ideoptionsdlg.lfm svneol=native#text/plain
|
||||
|
44
ide/idemacrovalues.lfm
Normal file
44
ide/idemacrovalues.lfm
Normal file
@ -0,0 +1,44 @@
|
||||
object IdeMacroValuesFrame: TIdeMacroValuesFrame
|
||||
Left = 0
|
||||
Height = 421
|
||||
Top = 0
|
||||
Width = 550
|
||||
ClientHeight = 421
|
||||
ClientWidth = 550
|
||||
TabOrder = 0
|
||||
DesignLeft = 460
|
||||
DesignTop = 117
|
||||
object IdeMacroValuesGroupBox: TGroupBox
|
||||
Left = 6
|
||||
Height = 409
|
||||
Top = 6
|
||||
Width = 538
|
||||
Align = alClient
|
||||
BorderSpacing.Around = 6
|
||||
Caption = 'IdeMacroValuesGroupBox'
|
||||
ClientHeight = 389
|
||||
ClientWidth = 532
|
||||
TabOrder = 0
|
||||
object IdeMacroValuesStringGrid: TStringGrid
|
||||
Left = 0
|
||||
Height = 389
|
||||
Top = 0
|
||||
Width = 532
|
||||
Align = alClient
|
||||
AutoFillColumns = True
|
||||
ColCount = 2
|
||||
DefaultColWidth = 120
|
||||
FixedCols = 0
|
||||
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing, goAlwaysShowEditor, goSmoothScroll]
|
||||
RowCount = 2
|
||||
TabOrder = 0
|
||||
OnEditingDone = IdeMacroValuesStringGridEditingDone
|
||||
OnSelectEditor = IdeMacroValuesStringGridSelectEditor
|
||||
OnSelection = IdeMacroValuesStringGridSelection
|
||||
ColWidths = (
|
||||
263
|
||||
263
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
401
ide/idemacrovalues.pas
Normal file
401
ide/idemacrovalues.pas
Normal file
@ -0,0 +1,401 @@
|
||||
{
|
||||
***************************************************************************
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
Abstract:
|
||||
The frame for 'IDE macro values' on the compiler options.
|
||||
Allows to add/delete/edit values for existing macros.
|
||||
It does not allow to define new IDE macros, only values.
|
||||
}
|
||||
unit IdeMacroValues;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Math, Classes, SysUtils, LCLProc, Controls, FileUtil, Forms,
|
||||
Grids, Graphics, Menus, ComCtrls, Dialogs, AvgLvlTree, DefineTemplates,
|
||||
StdCtrls, GraphMath, ExtCtrls, Buttons,
|
||||
ProjectIntf, IDEImagesIntf, IDEOptionsIntf, CompOptsIntf,
|
||||
PackageDefs, compiler_inherited_options, TransferMacros,
|
||||
PathEditorDlg, Project, PackageSystem, LazarusIDEStrConsts, CompilerOptions,
|
||||
IDEProcs;
|
||||
|
||||
type
|
||||
|
||||
{ TIdeMacroValuesFrame }
|
||||
|
||||
TIdeMacroValuesFrame = class(TAbstractIDEOptionsEditor)
|
||||
IdeMacroValuesGroupBox: TGroupBox;
|
||||
IdeMacroValuesStringGrid: TStringGrid;
|
||||
MenuItem1: TMenuItem;
|
||||
procedure IdeMacroValuesStringGridEditingDone(Sender: TObject);
|
||||
procedure IdeMacroValuesStringGridSelectEditor(Sender: TObject; aCol,
|
||||
aRow: Integer; var Editor: TWinControl);
|
||||
procedure IdeMacroValuesStringGridSelection(Sender: TObject; aCol,
|
||||
aRow: Integer);
|
||||
private
|
||||
FLoadShowSessionFromProject: boolean;
|
||||
FMacroValues: TProjectBuildMacros;
|
||||
FProject: TProject;
|
||||
FShowSession: boolean;
|
||||
FSwitchingMode: boolean;
|
||||
fModeActiveCol: integer;
|
||||
fModeInSessionCol: integer;
|
||||
fModeNameCol: integer;
|
||||
procedure UpdateMacrosControls;
|
||||
function GetAllIdeMacros: TStrings;
|
||||
procedure CleanMacrosGrid;
|
||||
procedure SaveMacros(UpdateControls: boolean);
|
||||
procedure UpdateInheritedOptions;
|
||||
procedure ActivateMode(aMode: TProjectBuildMode);
|
||||
procedure UpdateShowSession;
|
||||
procedure UpdateDialogCaption;
|
||||
function GetDialogCaption: string;
|
||||
public
|
||||
constructor Create(TheOwner: 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;
|
||||
property AProject: TProject read FProject;
|
||||
property MacroValues: TProjectBuildMacros read FMacroValues;
|
||||
property SwitchingMode: boolean read FSwitchingMode; // the active mode is currently switched
|
||||
property ShowSession: boolean read FShowSession write FShowSession;
|
||||
property LoadShowSessionFromProjects: boolean read FLoadShowSessionFromProject
|
||||
write FLoadShowSessionFromProject;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
{ TIdeMacroValuesFrame }
|
||||
|
||||
procedure TIdeMacroValuesFrame.IdeMacroValuesStringGridSelectEditor(
|
||||
Sender: TObject; aCol, aRow: Integer; var Editor: TWinControl);
|
||||
var
|
||||
PickList: TPickListCellEditor;
|
||||
sl: TStringList;
|
||||
Macros: TStrings;
|
||||
Grid: TStringGrid;
|
||||
MacroName: string;
|
||||
i: LongInt;
|
||||
Macro: TLazBuildMacro;
|
||||
begin
|
||||
if MacroValues=nil then exit;
|
||||
Grid:=IdeMacroValuesStringGrid;
|
||||
if aCol=0 then begin
|
||||
// list all build MacroValues
|
||||
if not (Editor is TPickListCellEditor) then exit;
|
||||
PickList:=TPickListCellEditor(Editor);
|
||||
sl:=TStringList.Create;
|
||||
Macros:=nil;
|
||||
try
|
||||
if aRow=Grid.RowCount-1 then
|
||||
sl.Add('(none)')
|
||||
else
|
||||
sl.Add('(delete)');
|
||||
|
||||
Macros:=GetAllIdeMacros;
|
||||
sl.AddStrings(Macros);
|
||||
|
||||
PickList.Items.Assign(sl);
|
||||
finally
|
||||
Macros.Free;
|
||||
sl.Free;
|
||||
end;
|
||||
end else if aCol=1 then begin
|
||||
// list all possible values of current macro
|
||||
|
||||
if not (Editor is TPickListCellEditor) then exit;
|
||||
PickList:=TPickListCellEditor(Editor);
|
||||
|
||||
MacroName:=Grid.Cells[0,aRow];
|
||||
sl:=TStringList.Create;
|
||||
try
|
||||
Macros:=GetAllIdeMacros;
|
||||
i:=Macros.IndexOf(MacroName);
|
||||
if i>=0 then begin
|
||||
Macro:=TLazBuildMacro(Macros.Objects[i]);
|
||||
sl.AddStrings(Macro.Values);
|
||||
end else begin
|
||||
sl.Add('');
|
||||
end;
|
||||
|
||||
PickList.Items.Assign(sl);
|
||||
finally
|
||||
Macros.Free;
|
||||
sl.Free;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TIdeMacroValuesFrame.IdeMacroValuesStringGridEditingDone(Sender: TObject);
|
||||
begin
|
||||
SaveMacros(true);
|
||||
end;
|
||||
|
||||
procedure TIdeMacroValuesFrame.IdeMacroValuesStringGridSelection(
|
||||
Sender: TObject; aCol, aRow: Integer);
|
||||
begin
|
||||
CleanMacrosGrid;
|
||||
end;
|
||||
|
||||
procedure TIdeMacroValuesFrame.UpdateMacrosControls;
|
||||
var
|
||||
Grid: TStringGrid;
|
||||
i: Integer;
|
||||
begin
|
||||
Grid:=IdeMacroValuesStringGrid;
|
||||
Grid.RowCount:=MacroValues.Count+2; // + titles + add button
|
||||
|
||||
for i:=0 to MacroValues.Count-1 do begin
|
||||
Grid.Cells[0,i+1]:=MacroValues.Names[i];
|
||||
Grid.Cells[1,i+1]:=MacroValues.ValueFromIndex(i);
|
||||
end;
|
||||
i:=MacroValues.Count+1;
|
||||
Grid.Cells[0,i]:='(none)';
|
||||
Grid.Cells[1,i]:='';
|
||||
end;
|
||||
|
||||
procedure TIdeMacroValuesFrame.UpdateDialogCaption;
|
||||
var
|
||||
Form: TCustomForm;
|
||||
begin
|
||||
Form:=GetParentForm(Self);
|
||||
if Form<>nil then
|
||||
Form.Caption:=GetDialogCaption;
|
||||
end;
|
||||
|
||||
function TIdeMacroValuesFrame.GetDialogCaption: string;
|
||||
begin
|
||||
if AProject<>nil then
|
||||
begin
|
||||
Result := aProject.GetTitleOrName;
|
||||
Result:=Format(dlgProjectOptionsFor, [Result]);
|
||||
if AProject.BuildModes.Count>1 then
|
||||
Result:=Result+', '+copy(AProject.ActiveBuildMode.GetCaption,1,12);
|
||||
end else
|
||||
Result:='TIdeMacroValuesFrame.GetDialogCaption: no project';
|
||||
end;
|
||||
|
||||
function TIdeMacroValuesFrame.GetAllIdeMacros: TStrings;
|
||||
|
||||
procedure Add(aBuildMacro: TLazBuildMacro);
|
||||
begin
|
||||
if GetAllIdeMacros.IndexOf(aBuildMacro.Identifier)>=0 then exit;
|
||||
GetAllIdeMacros.AddObject(aBuildMacro.Identifier,aBuildMacro);
|
||||
end;
|
||||
|
||||
procedure Add(CompOpts: TLazCompilerOptions);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i:=0 to CompOpts.BuildMacros.Count-1 do
|
||||
Add(CompOpts.BuildMacros[i]);
|
||||
end;
|
||||
|
||||
var
|
||||
PkgList: TFPList;
|
||||
APackage: TLazPackage;
|
||||
i: Integer;
|
||||
begin
|
||||
Result:=TStringList.Create;
|
||||
if AProject=nil then exit;
|
||||
Add(AProject.CompilerOptions);
|
||||
PkgList:=nil;
|
||||
try
|
||||
PackageGraph.GetAllRequiredPackages(AProject.FirstRequiredDependency,PkgList);
|
||||
if PkgList<>nil then begin
|
||||
for i:=0 to PkgList.Count-1 do begin
|
||||
if TObject(PkgList[i]) is TLazPackage then begin
|
||||
APackage:=TLazPackage(PkgList[i]);
|
||||
Add(APackage.CompilerOptions);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
PkgList.Free;
|
||||
end;
|
||||
|
||||
TStringList(Result).Sort;
|
||||
end;
|
||||
|
||||
procedure TIdeMacroValuesFrame.CleanMacrosGrid;
|
||||
var
|
||||
Grid: TStringGrid;
|
||||
aRow: Integer;
|
||||
MacroName: string;
|
||||
NeedNewRow: Boolean;
|
||||
begin
|
||||
Grid:=IdeMacroValuesStringGrid;
|
||||
// delete rows
|
||||
for aRow:=Grid.RowCount-2 downto 1 do begin
|
||||
if aRow=Grid.Row then continue; // row is selected
|
||||
MacroName:=Grid.Cells[0,aRow];
|
||||
if (MacroName<>'') and IsValidIdent(MacroName) then continue; // valid macro name
|
||||
// delete row
|
||||
Grid.DeleteColRow(false,aRow);
|
||||
end;
|
||||
NeedNewRow:=Grid.RowCount<2;
|
||||
if (not NeedNewRow) then begin
|
||||
MacroName:=Grid.Cells[0,Grid.RowCount-1];
|
||||
if (MacroName<>'') and IsValidIdent(MacroName) then
|
||||
NeedNewRow:=true;
|
||||
end;
|
||||
if NeedNewRow then begin
|
||||
Grid.RowCount:=Grid.RowCount+1;
|
||||
Grid.Cells[0,Grid.RowCount-1]:='(new)';
|
||||
Grid.Cells[1,Grid.RowCount-1]:='';
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TIdeMacroValuesFrame.SaveMacros(UpdateControls: boolean);
|
||||
var
|
||||
Grid: TStringGrid;
|
||||
aRow: Integer;
|
||||
MacroName: string;
|
||||
Values: TStringList;
|
||||
Value: string;
|
||||
begin
|
||||
if MacroValues=nil then exit;
|
||||
Grid:=IdeMacroValuesStringGrid;
|
||||
Values:=TStringList.Create;
|
||||
try
|
||||
for aRow:=1 to Grid.RowCount-1 do begin
|
||||
MacroName:=Grid.Cells[0,aRow];
|
||||
if (MacroName='') or (not IsValidIdent(MacroName)) then continue;
|
||||
Value:=Grid.Cells[1,aRow];
|
||||
Values.Values[MacroName]:=Value;
|
||||
end;
|
||||
if not MacroValues.Equals(Values) then begin
|
||||
// has changed
|
||||
MacroValues.Assign(Values);
|
||||
IncreaseBuildMacroChangeStamp;
|
||||
if UpdateControls then begin
|
||||
UpdateInheritedOptions;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
Values.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TIdeMacroValuesFrame.UpdateInheritedOptions;
|
||||
var
|
||||
InhOptionCtrl: TCompilerInheritedOptionsFrame;
|
||||
begin
|
||||
InhOptionCtrl:=TCompilerInheritedOptionsFrame(
|
||||
FindOptionControl(TCompilerInheritedOptionsFrame));
|
||||
if InhOptionCtrl=nil then exit;
|
||||
InhOptionCtrl.UpdateInheritedTree(AProject.CompilerOptions);
|
||||
end;
|
||||
|
||||
procedure TIdeMacroValuesFrame.ActivateMode(aMode: TProjectBuildMode);
|
||||
begin
|
||||
if aMode=AProject.ActiveBuildMode then exit;
|
||||
FSwitchingMode:=true;
|
||||
try
|
||||
// save changes
|
||||
OnSaveIDEOptions(Self,AProject.CompilerOptions);
|
||||
// switch
|
||||
AProject.ActiveBuildMode:=aMode;
|
||||
IncreaseBuildMacroChangeStamp;
|
||||
// load options
|
||||
OnLoadIDEOptions(Self,AProject.CompilerOptions);
|
||||
finally
|
||||
FSwitchingMode:=false;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TIdeMacroValuesFrame.UpdateShowSession;
|
||||
begin
|
||||
if LoadShowSessionFromProjects then
|
||||
ShowSession:=(AProject<>nil)
|
||||
and (AProject.SessionStorage in [pssInProjectDir,pssInIDEConfig]);
|
||||
end;
|
||||
|
||||
constructor TIdeMacroValuesFrame.Create(TheOwner: TComponent);
|
||||
begin
|
||||
inherited Create(TheOwner);
|
||||
FLoadShowSessionFromProject:=true;
|
||||
end;
|
||||
|
||||
destructor TIdeMacroValuesFrame.Destroy;
|
||||
begin
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
function TIdeMacroValuesFrame.GetTitle: String;
|
||||
begin
|
||||
Result := dlgIdeMacroValues;
|
||||
end;
|
||||
|
||||
procedure TIdeMacroValuesFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
||||
var
|
||||
Grid: TStringGrid;
|
||||
begin
|
||||
IdeMacroValuesGroupBox.Caption:=lisIDEMacroValuesForFPCMacrosUseCustomOptions;
|
||||
Grid:=IdeMacroValuesStringGrid;
|
||||
Grid.Columns.Add;
|
||||
Grid.Columns[0].Title.Caption:=lisMacroName;
|
||||
Grid.Columns[0].ButtonStyle:=cbsPickList;
|
||||
Grid.Columns.Add;
|
||||
Grid.Columns[1].Title.Caption:=lisMacroValue;
|
||||
Grid.Columns[1].ButtonStyle:=cbsPickList;
|
||||
end;
|
||||
|
||||
procedure TIdeMacroValuesFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
||||
var
|
||||
PCOptions: TProjectCompilerOptions;
|
||||
begin
|
||||
if AOptions is TProjectCompilerOptions then begin
|
||||
PCOptions:=TProjectCompilerOptions(AOptions);
|
||||
FProject:=PCOptions.LazProject;
|
||||
FMacroValues:=FProject.ActiveBuildMode.MacroValues;
|
||||
// modes
|
||||
UpdateShowSession;
|
||||
// macros
|
||||
MacroValues.Assign(FProject.MacroValues);
|
||||
UpdateMacrosControls;
|
||||
// options dialog
|
||||
UpdateDialogCaption;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TIdeMacroValuesFrame.WriteSettings(AOptions: TAbstractIDEOptions);
|
||||
begin
|
||||
if AOptions is TProjectCompilerOptions then
|
||||
SaveMacros(false);
|
||||
end;
|
||||
|
||||
class function TIdeMacroValuesFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
||||
begin
|
||||
Result := TProjectCompilerOptions;
|
||||
end;
|
||||
|
||||
initialization
|
||||
RegisterIDEOptionsEditor(GroupCompiler, TIdeMacroValuesFrame, CompilerOptionsMacroValues);
|
||||
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user