lazarus/converter/missingunits.pas
2010-04-01 13:25:48 +00:00

185 lines
5.5 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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+LCL
Classes, SysUtils, LCLProc, LResources, Forms, Controls, Graphics,
Dialogs, Buttons, StdCtrls, FileUtil, CheckLst, Menus,
// Components
SynEdit, CodeAtom, CodeCache, CodeToolManager, DefineTemplates,
// IDEIntf
LazIDEIntf, IDEMsgIntf,
// IDE
CompilerOptions,
PackageDefs, Project, DialogProcs, IDEProcs, LazarusIDEStrConsts;
type
{ TMissingUnitsDialog }
TMissingUnitsDialog = class(TForm)
UnselectMenuItem: TMenuItem;
SelectMenuItem: TMenuItem;
SaveDialog1: TSaveDialog;
SaveMenuItem: TMenuItem;
MissingUnitsCheckListBox: TCheckListBox;
CommentButton: TBitBtn;
ChoicesLabel: TLabel;
Info1Label: TLabel;
Info2Label: TLabel;
Info3Label: TLabel;
PopupMenu1: TPopupMenu;
SearchButton: TBitBtn;
AbortButton: TBitBtn;
MissingUnitsInfoLabel: TLabel;
procedure AbortButtonClick(Sender: TObject);
procedure CommentButtonClick(Sender: TObject);
procedure SaveMenuItemClick(Sender: TObject);
procedure SearchButtonClick(Sender: TObject);
procedure SelectMenuItemClick(Sender: TObject);
procedure UnselectMenuItemClick(Sender: TObject);
private
public
end;
var
MissingUnitsDialog: TMissingUnitsDialog;
function AskMissingUnits(AMissingUnits: TStrings; AMainUnitName: string;
ATargetDelphi: boolean): TModalResult;
implementation
{$R *.lfm}
function AskMissingUnits(AMissingUnits: TStrings; AMainUnitName: string;
ATargetDelphi: boolean): TModalResult;
var
UNFDialog: TMissingUnitsDialog;
UnitsTitle: string;
i: Integer;
begin
Result:=mrCancel;
// A title text containing filename.
if AMissingUnits.Count=1 then
UnitsTitle:=lisUnitNotFound+' '+AMainUnitName
else
UnitsTitle:=lisUnitsNotFound2+' '+AMainUnitName;
UNFDialog:=TMissingUnitsDialog.Create(nil);
with UNFDialog do begin
Caption:=UnitsTitle;
SearchButton.Caption:=lisMissingUnitsSearch;
MissingUnitsInfoLabel.Caption:=lisTheseUnitsWereNotFound;
ChoicesLabel.Caption:=lisMissingUnitsChoices;
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.
for i:=0 to AMissingUnits.Count-1 do begin
MissingUnitsCheckListBox.Items.Append(AMissingUnits[i]);
MissingUnitsCheckListBox.Checked[i]:=true;
end;
// Show dialog and get user action.
Result:=ShowModal;
if Result=mrOK then begin
AMissingUnits.Clear;
for i:=0 to MissingUnitsCheckListBox.Count-1 do begin
if MissingUnitsCheckListBox.Checked[i] then begin
AMissingUnits.Append(MissingUnitsCheckListBox.Items[i]);
end;
end;
end;
Free;
end;
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;
procedure TMissingUnitsDialog.CommentButtonClick(Sender: TObject);
begin
end;
procedure TMissingUnitsDialog.SearchButtonClick(Sender: TObject);
begin
end;
procedure TMissingUnitsDialog.AbortButtonClick(Sender: TObject);
begin
end;
end.