mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-05 04:08:06 +02:00
204 lines
6.3 KiB
ObjectPascal
204 lines
6.3 KiB
ObjectPascal
{
|
|
***************************************************************************
|
|
* *
|
|
* 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. *
|
|
* *
|
|
***************************************************************************
|
|
|
|
Author: Juha Manninen
|
|
|
|
Abstract:
|
|
A form asking the user what to do with missing units
|
|
in uses section. Used by ConvertDelphi unit.
|
|
}
|
|
unit MissingUnits;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
// FCL
|
|
Classes, SysUtils,
|
|
// LCL
|
|
Forms, Controls, Graphics, Dialogs, Buttons, StdCtrls, CheckLst, Menus, ExtCtrls,
|
|
// CodeTools
|
|
DefineTemplates,
|
|
// IdeIntf
|
|
IDEImagesIntf,
|
|
// IDE
|
|
PackageDefs, Project, LazarusIDEStrConsts;
|
|
|
|
type
|
|
|
|
{ TMissingUnitsDialog }
|
|
|
|
TMissingUnitsDialog = class(TForm)
|
|
AbortButton: TBitBtn;
|
|
ChoicesLabel: TLabel;
|
|
CommentButton: TBitBtn;
|
|
ButtonPanel: TPanel;
|
|
Info1Label: TLabel;
|
|
Info2Label: TLabel;
|
|
Info3Label: TLabel;
|
|
MissingUnitsCheckListBox: TCheckListBox;
|
|
MissingUnitsGroupBox: TGroupBox;
|
|
InfoPanel: TPanel;
|
|
SearchButton: TBitBtn;
|
|
SkipButton: TBitBtn;
|
|
Splitter1: TSplitter;
|
|
UnselectMenuItem: TMenuItem;
|
|
SelectMenuItem: TMenuItem;
|
|
SaveDialog1: TSaveDialog;
|
|
SaveMenuItem: TMenuItem;
|
|
PopupMenu1: TPopupMenu;
|
|
procedure SaveMenuItemClick(Sender: TObject);
|
|
procedure SelectMenuItemClick(Sender: TObject);
|
|
procedure UnselectMenuItemClick(Sender: TObject);
|
|
private
|
|
|
|
public
|
|
|
|
end;
|
|
|
|
var
|
|
MissingUnitsDialog: TMissingUnitsDialog;
|
|
|
|
function AskMissingUnits(AMainMissingUnits, AImplMissingUnits: TStrings;
|
|
AUnitName: string; ATargetDelphi: boolean): TModalResult;
|
|
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
function AskMissingUnits(AMainMissingUnits, AImplMissingUnits: TStrings;
|
|
AUnitName: string; ATargetDelphi: boolean): TModalResult;
|
|
var
|
|
UNFDialog: TMissingUnitsDialog;
|
|
|
|
procedure AddUnitsToListBox(AMissingUnits: TStrings);
|
|
var
|
|
i, Ind: Integer;
|
|
begin // Add missing units to CheckListBox.
|
|
for i:=0 to AMissingUnits.Count-1 do begin
|
|
Ind:=UNFDialog.MissingUnitsCheckListBox.Items.Add(AMissingUnits[i]);
|
|
UNFDialog.MissingUnitsCheckListBox.Checked[Ind]:=true;
|
|
end;
|
|
end;
|
|
|
|
function RemoveFromMissing(AUnit: string; AList: TStrings): Boolean;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
i:=AList.IndexOf(AUnit);
|
|
Result:=i<>-1;
|
|
if Result then
|
|
AList.Delete(i);
|
|
end;
|
|
|
|
var
|
|
s: string;
|
|
i: Integer;
|
|
ImplRemoved: Boolean;
|
|
begin
|
|
{$IFDEF CommentUnitsAutomatic}
|
|
Result:=mrOK;
|
|
{$ELSE}
|
|
Result:=mrCancel;
|
|
// A title text containing filename.
|
|
if (AMainMissingUnits.Count + AImplMissingUnits.Count) = 1 then
|
|
s:=lisUnitNotFoundInFile
|
|
else
|
|
s:=lisUnitsNotFoundInFile;
|
|
|
|
UNFDialog:=TMissingUnitsDialog.Create(nil);
|
|
with UNFDialog do begin
|
|
Caption:=Format(s, [AUnitName]);
|
|
MissingUnitsGroupBox.Caption:=lisTheseUnitsWereNotFound;
|
|
ChoicesLabel.Caption:=lisMissingUnitsChoices;
|
|
SearchButton.Caption:=lisMissingUnitsSearch;
|
|
IDEImages.AssignImage(SearchButton, 'menu_search_find');
|
|
SkipButton.Caption:=lisMissingUnitsSkip;
|
|
IDEImages.AssignImage(SkipButton, 'debugger_current_line_breakpoint');
|
|
IDEImages.AssignImage(CommentButton, 'menu_comment'); // or insertremark
|
|
if ATargetDelphi then begin
|
|
CommentButton.Caption:=lisMissingUnitsForDelphi;
|
|
Info1Label.Caption:=lisMissingUnitsInfo1b;
|
|
end
|
|
else begin
|
|
CommentButton.Caption:=lisMissingUnitsComment;
|
|
Info1Label.Caption:=lisMissingUnitsInfo1;
|
|
end;
|
|
Info2Label.Caption:=lisMissingUnitsInfo2;
|
|
Info3Label.Caption:=lisMissingUnitsInfo3;
|
|
// Add missing units to CheckListBox.
|
|
AddUnitsToListBox(AMainMissingUnits);
|
|
AddUnitsToListBox(AImplMissingUnits);
|
|
// Show dialog and remove the entries that user has unchecked.
|
|
// Missing units will be searched again later.
|
|
Result:=ShowModal;
|
|
if Result in [mrOK, mrIgnore] then begin // mrIgnore means "skip"
|
|
for i:=0 to MissingUnitsCheckListBox.Count-1 do begin
|
|
// Remove all when Skip was clicked.
|
|
if (Result=mrIgnore) or not MissingUnitsCheckListBox.Checked[i] then begin
|
|
s:=MissingUnitsCheckListBox.Items[i];
|
|
// Remove either from main or implementation sections list.
|
|
if not RemoveFromMissing(s, AMainMissingUnits) then begin
|
|
ImplRemoved:=RemoveFromMissing(s, AImplMissingUnits);
|
|
Assert(ImplRemoved, 'Error with Missing Units in AskMissingUnits.');
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
Free;
|
|
end;
|
|
{$ENDIF}
|
|
end;
|
|
|
|
{ TMissingUnitsDialog }
|
|
|
|
procedure TMissingUnitsDialog.SelectMenuItemClick(Sender: TObject);
|
|
var
|
|
i: Integer;
|
|
begin
|
|
for i:=0 to MissingUnitsCheckListBox.Count-1 do
|
|
MissingUnitsCheckListBox.Checked[i]:=true;
|
|
end;
|
|
|
|
procedure TMissingUnitsDialog.UnselectMenuItemClick(Sender: TObject);
|
|
var
|
|
i: Integer;
|
|
begin
|
|
for i:=0 to MissingUnitsCheckListBox.Count-1 do
|
|
MissingUnitsCheckListBox.Checked[i]:=false;
|
|
end;
|
|
|
|
procedure TMissingUnitsDialog.SaveMenuItemClick(Sender: TObject);
|
|
var
|
|
fn: String;
|
|
begin
|
|
SaveDialog1.FileName:='MissingUnitsList.txt';
|
|
if SaveDialog1.Execute then begin
|
|
fn:=SaveDialog1.FileName;
|
|
MissingUnitsCheckListBox.Items.SaveToFile(fn);
|
|
ShowMessage(Format('Unit list is saved to file %s.', [fn]));
|
|
end;
|
|
end;
|
|
|
|
end.
|
|
|