mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-06 20:53:00 +02:00
284 lines
7.8 KiB
ObjectPascal
284 lines
7.8 KiB
ObjectPascal
unit project_forms_options;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
|
|
StdCtrls, Buttons, IDEOptionsIntf, PackageDefs, ProjectIntf, Project,
|
|
LazarusIDEStrConsts, CodeToolManager;
|
|
|
|
type
|
|
|
|
{ TProjectFormsOptionsFrame }
|
|
|
|
TProjectFormsOptionsFrame = class(TAbstractIDEOptionsEditor)
|
|
FormsAddToAutoCreatedFormsBtn: TSpeedButton;
|
|
FormsAutoCreatedLabel: TLabel;
|
|
FormsAutoCreatedListBox: TListBox;
|
|
FormsAutoCreateNewFormsCheckBox: TCheckBox;
|
|
FormsAvailFormsLabel: TLabel;
|
|
FormsAvailFormsListBox: TListBox;
|
|
FormsMoveAutoCreatedFormsDownBtn: TSpeedButton;
|
|
FormsMoveAutoCreatedFormUpBtn: TSpeedButton;
|
|
FormsRemoveFromAutoCreatedFormsBtn: TSpeedButton;
|
|
lblMiddle: TLabel;
|
|
procedure FormsAddToAutoCreatedFormsBtnClick(Sender: TObject);
|
|
procedure FormsMoveAutoCreatedFormsDownBtnClick(Sender: TObject);
|
|
procedure FormsMoveAutoCreatedFormUpBtnClick(Sender: TObject);
|
|
procedure FormsRemoveFromAutoCreatedFormsBtnClick(Sender: TObject);
|
|
private
|
|
function FirstAutoCreateFormSelected: Integer;
|
|
function FirstAvailFormSelected: Integer;
|
|
procedure SelectOnlyThisAutoCreateForm(Index: integer);
|
|
public
|
|
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}
|
|
|
|
{ TProjectFormsOptionsFrame }
|
|
|
|
procedure TProjectFormsOptionsFrame.SelectOnlyThisAutoCreateForm(Index: integer);
|
|
var
|
|
i: integer;
|
|
begin
|
|
with FormsAutoCreatedListBox do
|
|
for i := 0 to Items.Count - 1 do
|
|
Selected[i] := (i = Index);
|
|
end;
|
|
|
|
procedure TProjectFormsOptionsFrame.FormsMoveAutoCreatedFormUpBtnClick(
|
|
Sender: TObject);
|
|
var
|
|
i: integer;
|
|
h: string;
|
|
begin
|
|
i := FirstAutoCreateFormSelected;
|
|
if i < 1 then
|
|
Exit;
|
|
with FormsAutoCreatedListBox do
|
|
begin
|
|
Items.BeginUpdate;
|
|
h := Items[i];
|
|
Items[i] := Items[i - 1];
|
|
Items[i - 1] := h;
|
|
Items.EndUpdate;
|
|
end;
|
|
SelectOnlyThisAutoCreateForm(i - 1);
|
|
end;
|
|
|
|
procedure TProjectFormsOptionsFrame.FormsRemoveFromAutoCreatedFormsBtnClick(
|
|
Sender: TObject);
|
|
var
|
|
i, NewPos, cmp: integer;
|
|
OldFormName: string;
|
|
begin
|
|
FormsAutoCreatedListBox.Items.BeginUpdate;
|
|
FormsAvailFormsListBox.Items.BeginUpdate;
|
|
i := 0;
|
|
while i < FormsAutoCreatedListBox.Items.Count do
|
|
if FormsAutoCreatedListBox.Selected[i] then
|
|
begin
|
|
OldFormName := FormsAutoCreatedListBox.Items[i];
|
|
FormsAutoCreatedListBox.Items.Delete(i);
|
|
NewPos := 0;
|
|
cmp := 1;
|
|
while (NewPos < FormsAvailFormsListBox.Items.Count) do
|
|
begin
|
|
cmp := AnsiCompareText(FormsAvailFormsListBox.Items[NewPos], OldFormName);
|
|
if cmp < 0 then
|
|
Inc(NewPos)
|
|
else
|
|
break;
|
|
end;
|
|
if cmp = 0 then
|
|
continue;
|
|
FormsAvailFormsListBox.Items.Insert(NewPos, OldFormName);
|
|
end
|
|
else
|
|
Inc(i);
|
|
FormsAvailFormsListBox.Items.EndUpdate;
|
|
FormsAutoCreatedListBox.Items.EndUpdate;
|
|
end;
|
|
|
|
function TProjectFormsOptionsFrame.FirstAutoCreateFormSelected: Integer;
|
|
begin
|
|
Result := 0;
|
|
while (Result < FormsAutoCreatedListBox.Items.Count) and
|
|
(not FormsAutoCreatedListBox.Selected[Result]) do
|
|
inc(Result);
|
|
if Result = FormsAutoCreatedListBox.Items.Count then
|
|
Result := -1;
|
|
end;
|
|
|
|
function TProjectFormsOptionsFrame.FirstAvailFormSelected: Integer;
|
|
begin
|
|
Result := 0;
|
|
while (Result < FormsAvailFormsListBox.Items.Count) and
|
|
(not FormsAvailFormsListBox.Selected[Result]) do
|
|
inc(Result);
|
|
if Result = FormsAvailFormsListBox.Items.Count then
|
|
Result := -1;
|
|
end;
|
|
|
|
procedure TProjectFormsOptionsFrame.FormsMoveAutoCreatedFormsDownBtnClick(
|
|
Sender: TObject);
|
|
var
|
|
i: integer;
|
|
h: string;
|
|
begin
|
|
i := FirstAutoCreateFormSelected;
|
|
if (i < 0) or (i >= FormsAutoCreatedListBox.Items.Count - 1) then
|
|
exit;
|
|
with FormsAutoCreatedListBox do
|
|
begin
|
|
Items.BeginUpdate;
|
|
h := Items[i];
|
|
Items[i] := Items[i + 1];
|
|
Items[i + 1] := h;
|
|
Items.EndUpdate;
|
|
end;
|
|
SelectOnlyThisAutoCreateForm(i + 1);
|
|
end;
|
|
|
|
procedure TProjectFormsOptionsFrame.FormsAddToAutoCreatedFormsBtnClick(
|
|
Sender: TObject);
|
|
var
|
|
i: integer;
|
|
NewFormName: string;
|
|
begin
|
|
FormsAutoCreatedListBox.Items.BeginUpdate;
|
|
with FormsAvailFormsListBox do
|
|
begin
|
|
Items.BeginUpdate;
|
|
i := 0;
|
|
while i < Items.Count do
|
|
if Selected[i] then
|
|
begin
|
|
NewFormName := Items[i];
|
|
Items.Delete(i);
|
|
FormsAutoCreatedListBox.Items.Add(NewFormName);
|
|
end
|
|
else
|
|
Inc(i);
|
|
Items.EndUpdate;
|
|
end;
|
|
FormsAutoCreatedListBox.Items.EndUpdate;
|
|
end;
|
|
|
|
function TProjectFormsOptionsFrame.GetTitle: string;
|
|
begin
|
|
Result := dlgPOFroms;
|
|
end;
|
|
|
|
procedure TProjectFormsOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
|
|
begin
|
|
FormsAutoCreatedLabel.Caption := dlgAutoCreateForms;
|
|
FormsAvailFormsLabel.Caption := dlgAvailableForms;
|
|
FormsAutoCreateNewFormsCheckBox.Caption := dlgAutoCreateNewForms;
|
|
FormsMoveAutoCreatedFormUpBtn.LoadGlyphFromLazarusResource('arrow_up');
|
|
FormsMoveAutoCreatedFormsDownBtn.LoadGlyphFromLazarusResource('arrow_down');
|
|
FormsAddToAutoCreatedFormsBtn.LoadGlyphFromLazarusResource('arrow_left');
|
|
FormsRemoveFromAutoCreatedFormsBtn.LoadGlyphFromLazarusResource('arrow_right');
|
|
end;
|
|
|
|
procedure TProjectFormsOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
|
var
|
|
Project: TProject absolute AOptions;
|
|
|
|
procedure FillAutoCreateFormsListbox;
|
|
var
|
|
sl: TStrings;
|
|
begin
|
|
sl := Project.GetAutoCreatedFormsList;
|
|
FormsAutoCreatedListBox.Items.BeginUpdate;
|
|
FormsAutoCreatedListBox.Items.Clear;
|
|
if sl <> nil then
|
|
begin
|
|
FormsAutoCreatedListBox.Items.Assign(sl);
|
|
sl.Free;
|
|
end;
|
|
FormsAutoCreatedListBox.Items.EndUpdate;
|
|
end;
|
|
|
|
function IndexOfAutoCreateForm(FormName: string): integer;
|
|
var
|
|
p: integer;
|
|
begin
|
|
p := Pos(':', FormName);
|
|
if p > 0 then
|
|
FormName := Copy(FormName, 1, p - 1);
|
|
Result := FormsAutoCreatedListBox.Items.Count - 1;
|
|
while (Result >= 0) do
|
|
begin
|
|
p := Pos(':', FormsAutoCreatedListBox.Items[Result]);
|
|
if p < 1 then
|
|
p := Length(FormsAutoCreatedListBox.Items[Result]) + 1;
|
|
if AnsiCompareText(copy(FormsAutoCreatedListBox.Items[Result], 1, p - 1),
|
|
FormName) = 0 then
|
|
Exit;
|
|
Dec(Result);
|
|
end;
|
|
end;
|
|
|
|
procedure FillAvailFormsListBox;
|
|
var
|
|
sl: TStringList;
|
|
i: integer;
|
|
begin
|
|
FormsAvailFormsListBox.Items.BeginUpdate;
|
|
FormsAvailFormsListBox.Items.Clear;
|
|
|
|
if (Project <> nil) then
|
|
begin
|
|
sl := TStringList.Create;
|
|
try
|
|
for i := 0 to Project.UnitCount - 1 do
|
|
if (Project.Units[i].IsPartOfProject) and
|
|
(Project.Units[i].ComponentName <> '') and
|
|
(Project.Units[i].ResourceBaseClass in [pfcbcForm, pfcbcDataModule]) and
|
|
(IndexOfAutoCreateForm(Project.Units[i].ComponentName) < 0) then
|
|
sl.Add(Project.Units[i].ComponentName);
|
|
sl.Sort;
|
|
FormsAvailFormsListBox.Items.Assign(sl);
|
|
finally
|
|
sl.Free;
|
|
end;
|
|
end;
|
|
FormsAvailFormsListBox.Items.EndUpdate;
|
|
end;
|
|
|
|
begin
|
|
FillAutoCreateFormsListbox;
|
|
FillAvailFormsListBox;
|
|
|
|
FormsAutoCreateNewFormsCheckBox.Checked := Project.AutoCreateForms;
|
|
end;
|
|
|
|
procedure TProjectFormsOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
|
|
var
|
|
Project: TProject absolute AOptions;
|
|
begin
|
|
Project.AutoCreateForms := FormsAutoCreateNewFormsCheckBox.Checked;
|
|
Project.TmpAutoCreatedForms := FormsAutoCreatedListBox.Items;
|
|
end;
|
|
|
|
class function TProjectFormsOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
|
|
begin
|
|
Result := TProject;
|
|
end;
|
|
|
|
initialization
|
|
RegisterIDEOptionsEditor(GroupProject, TProjectFormsOptionsFrame, ProjectOptionsForms);
|
|
|
|
end.
|
|
|