mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-08 05:32:37 +02:00
130 lines
3.3 KiB
ObjectPascal
130 lines
3.3 KiB
ObjectPascal
unit UseProjUnitDlg;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, LCLProc, Forms, Controls, ComCtrls, StdCtrls, ExtCtrls, Buttons,
|
|
ButtonPanel, Dialogs,
|
|
SrcEditorIntf, LazIDEIntf, IDEImagesIntf, LazarusIDEStrConsts,
|
|
ProjectIntf, Project, CodeCache, CodeToolManager;
|
|
|
|
type
|
|
|
|
{ TUseProjUnitDialog }
|
|
|
|
TUseProjUnitDialog = class(TForm)
|
|
ButtonPanel1: TButtonPanel;
|
|
UnitsListBox: TListBox;
|
|
SectionRadioGroup: TRadioGroup;
|
|
private
|
|
procedure AddItems(AItems: TStrings);
|
|
procedure SelectFirst;
|
|
function SelectedUnit: string;
|
|
function InterfaceSelected: Boolean;
|
|
public
|
|
|
|
end;
|
|
|
|
function ShowUseProjUnitDialog: TModalResult;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
function ShowUseProjUnitDialog: TModalResult;
|
|
var
|
|
UseProjUnitDlg: TUseProjUnitDialog;
|
|
SrcEdit: TSourceEditorInterface;
|
|
Code: TCodeBuffer;
|
|
CurFile: TUnitInfo;
|
|
MainUsedUnits, ImplUsedUnits: TStrings;
|
|
AvailUnits: TStringList;
|
|
s: String;
|
|
CTRes: Boolean;
|
|
begin
|
|
Result:=mrOk;
|
|
if not LazarusIDE.BeginCodeTools then exit;
|
|
// get cursor position
|
|
SrcEdit:=SourceEditorManagerIntf.ActiveEditor;
|
|
if SrcEdit=nil then exit;
|
|
Code:=TCodeBuffer(SrcEdit.CodeToolsBuffer);
|
|
if Code=nil then exit;
|
|
UseProjUnitDlg:=nil;
|
|
MainUsedUnits:=nil;
|
|
ImplUsedUnits:=nil;
|
|
AvailUnits:=TStringList.Create;
|
|
try
|
|
if not CodeToolBoss.FindUsedUnitNames(Code,MainUsedUnits,ImplUsedUnits) then begin
|
|
DebugLn(['ShowUseProjUnitDialog CodeToolBoss.FindUsedUnitNames failed']);
|
|
LazarusIDE.DoJumpToCodeToolBossError;
|
|
exit(mrCancel);
|
|
end;
|
|
TStringList(MainUsedUnits).CaseSensitive:=False;
|
|
TStringList(ImplUsedUnits).CaseSensitive:=False;
|
|
// Create dialog and add available unit names there.
|
|
UseProjUnitDlg:=TUseProjUnitDialog.Create(nil);
|
|
CurFile:=Project1.FirstPartOfProject;
|
|
while CurFile<>nil do begin
|
|
s:=CurFile.Unit_Name;
|
|
if (MainUsedUnits.IndexOf(s)<0) and (ImplUsedUnits.IndexOf(s)<0) then
|
|
AvailUnits.Add(s);
|
|
CurFile:=CurFile.NextPartOfProject;
|
|
end;
|
|
// Show the dialog.
|
|
if AvailUnits.Count>0 then begin
|
|
AvailUnits.Sorted:=True;
|
|
UseProjUnitDlg.AddItems(AvailUnits);
|
|
UseProjUnitDlg.SelectFirst;
|
|
if UseProjUnitDlg.ShowModal=mrOk then begin
|
|
s:=UseProjUnitDlg.SelectedUnit;
|
|
if s<>'' then begin
|
|
if UseProjUnitDlg.InterfaceSelected then
|
|
CTRes:=CodeToolBoss.AddUnitToMainUsesSection(Code, s, '')
|
|
else
|
|
CTRes:=CodeToolBoss.AddUnitToImplementationUsesSection(Code, s, '');
|
|
if not CTRes then begin
|
|
LazarusIDE.DoJumpToCodeToolBossError;
|
|
exit(mrCancel);
|
|
end;
|
|
end;
|
|
end;
|
|
end
|
|
else
|
|
ShowMessage('No unused items are available in this project.');
|
|
finally
|
|
CodeToolBoss.SourceCache.ClearAllSourceLogEntries;
|
|
UseProjUnitDlg.Free;
|
|
ImplUsedUnits.Free;
|
|
MainUsedUnits.Free;
|
|
AvailUnits.Free;
|
|
end;
|
|
end;
|
|
|
|
{ TUseProjUnitDialog }
|
|
|
|
procedure TUseProjUnitDialog.AddItems(AItems: TStrings);
|
|
begin
|
|
UnitsListBox.Items.Assign(AItems);
|
|
end;
|
|
|
|
procedure TUseProjUnitDialog.SelectFirst;
|
|
begin
|
|
UnitsListBox.Selected[0]:=True;
|
|
end;
|
|
|
|
function TUseProjUnitDialog.SelectedUnit: string;
|
|
begin
|
|
Result:=UnitsListBox.Items[UnitsListBox.ItemIndex];
|
|
end;
|
|
|
|
function TUseProjUnitDialog.InterfaceSelected: Boolean;
|
|
begin
|
|
Result:=SectionRadioGroup.ItemIndex=0;
|
|
end;
|
|
|
|
|
|
end.
|
|
|