mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-06 07:58:07 +02:00
378 lines
13 KiB
ObjectPascal
378 lines
13 KiB
ObjectPascal
{ /***************************************************************************
|
|
publishprojectdlg.pp - Lazarus IDE unit
|
|
-----------------------------------------
|
|
|
|
***************************************************************************/
|
|
|
|
***************************************************************************
|
|
* *
|
|
* 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: Mattias Gaertner
|
|
|
|
Abstract:
|
|
- TPublishProjectDialog
|
|
The dialog for TPublishModuleOptions to publish projects and packages.
|
|
|
|
}
|
|
unit PublishProjectDlg;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, LazFileUtils, Forms, Controls, Graphics, Buttons,
|
|
StdCtrls, Dialogs, LCLType,
|
|
IDEWindowIntf, IDEHelpIntf, IDEDialogs,
|
|
ProjectDefs, PackageDefs, PublishModule, IDEOptionDefs, InputHistory,
|
|
LazarusIDEStrConsts, IDEProcs, ExtCtrls, ButtonPanel;
|
|
|
|
type
|
|
{ TPublishProjectDialog }
|
|
|
|
TPublishProjectDialog = class(TForm)
|
|
ButtonPanel1: TButtonPanel;
|
|
DestDirGroupBox: TGroupBox;
|
|
DestDirComboBox: TComboBox;
|
|
BrowseDestDirBitBtn: TBitBtn;
|
|
CommandAfterLabel: TLabel;
|
|
CommandAfterCombobox: TComboBox;
|
|
|
|
FilesGroupbox: TGroupBox;
|
|
IgnoreBinariesCheckbox: TCheckBox;
|
|
|
|
IncludeFilterCombobox: TComboBox;
|
|
IncFilterSimpleSyntaxCheckbox: TCheckBox;
|
|
UseIncludeFilterCheckbox: TCheckBox;
|
|
IncludeFilterGroupbox: TGroupBox;
|
|
|
|
ExcludeFilterCombobox: TComboBox;
|
|
ExcFilterSimpleSyntaxCheckbox: TCheckBox;
|
|
UseExcludeFilterCheckbox: TCheckBox;
|
|
ExcludeFilterGroupbox: TGroupBox;
|
|
|
|
ProjectInfoGroupbox: TGroupBox;
|
|
SaveEditorInfoOfNonProjectFilesCheckbox: TCheckBox;
|
|
SaveClosedEditorFilesInfoCheckbox: TCheckBox;
|
|
|
|
procedure BrowseDestDirBitBtnCLICK(Sender: TObject);
|
|
procedure DestDirGroupBoxRESIZE(Sender: TObject);
|
|
procedure FormClose(Sender: TObject; var {%H-}CloseAction: TCloseAction);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure HelpButtonClick(Sender: TObject);
|
|
procedure OkButtonCLICK(Sender: TObject);
|
|
procedure SaveSettingsButtonClick(Sender: TObject);
|
|
private
|
|
FOptions: TPublishModuleOptions;
|
|
procedure SetComboBox(AComboBox: TComboBox; const NewText: string;
|
|
MaxItemCount: integer);
|
|
procedure LoadHistoryLists;
|
|
procedure SaveHistoryLists;
|
|
procedure SetOptions(const AValue: TPublishModuleOptions);
|
|
function CheckFilter: boolean;
|
|
public
|
|
constructor Create(TheOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
procedure LoadFromOptions(SrcOpts: TPublishModuleOptions);
|
|
procedure SaveToOptions(DestOpts: TPublishModuleOptions);
|
|
property Options: TPublishModuleOptions read FOptions write SetOptions;
|
|
end;
|
|
|
|
function ShowPublishProjectDialog(
|
|
PublishOptions: TPublishModuleOptions): TModalResult;
|
|
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
function ShowPublishProjectDialog(
|
|
PublishOptions: TPublishModuleOptions): TModalResult;
|
|
var
|
|
PublishProjectDialog: TPublishProjectDialog;
|
|
begin
|
|
PublishProjectDialog:=TPublishProjectDialog.Create(nil);
|
|
with PublishProjectDialog do begin
|
|
Options:=PublishOptions;
|
|
Result:=ShowModal;
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
{ TPublishProjectDialog }
|
|
|
|
procedure TPublishProjectDialog.DestDirGroupBoxRESIZE(Sender: TObject);
|
|
begin
|
|
with DestDirComboBox do
|
|
SetBounds(Left,Top,
|
|
Parent.ClientWidth-2*Left-BrowseDestDirBitBtn.Width-5,Height);
|
|
with BrowseDestDirBitBtn do
|
|
Left:=DestDirComboBox.Left+DestDirComboBox.Width+5;
|
|
with CommandAfterCombobox do
|
|
SetBounds(Left,Top,Parent.ClientWidth-2*Left,Height);
|
|
end;
|
|
|
|
procedure TPublishProjectDialog.FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
|
begin
|
|
IDEDialogLayoutList.SaveLayout(Self);
|
|
end;
|
|
|
|
procedure TPublishProjectDialog.BrowseDestDirBitBtnCLICK(Sender: TObject);
|
|
var
|
|
SelectDirDialog: TSelectDirectoryDialog;
|
|
NewDir: String;
|
|
begin
|
|
SelectDirDialog:=TSelectDirectoryDialog.Create(Self);
|
|
InputHistories.ApplyFileDialogSettings(SelectDirDialog);
|
|
SelectDirDialog.Title:=lisChooseDirectory;
|
|
if SelectDirDialog.Execute then begin
|
|
NewDir:=ExpandFileNameUTF8(SelectDirDialog.Filename);
|
|
SeTComboBox(DestDirComboBox,NewDir,20);
|
|
end;
|
|
SelectDirDialog.Free;
|
|
end;
|
|
|
|
procedure TPublishProjectDialog.FormCreate(Sender: TObject);
|
|
begin
|
|
DestDirGroupBox.Caption:=lisDestinationDirectory;
|
|
CommandAfterLabel.Caption:=lisCommandAfter;
|
|
|
|
FilesGroupbox.Caption:=dlgEnvFiles;
|
|
IgnoreBinariesCheckbox.Caption:=lisIgnoreBinaries;
|
|
|
|
IncFilterSimpleSyntaxCheckbox.Caption:=lisSimpleSyntax;
|
|
IncFilterSimpleSyntaxCheckbox.Hint:=
|
|
lisNormallyTheFilterIsARegularExpressionInSimpleSynta;
|
|
UseIncludeFilterCheckbox.Caption:=lisUseIncludeFilter;
|
|
IncludeFilterGroupbox.Caption:=lisIncludeFilter;
|
|
|
|
ExcFilterSimpleSyntaxCheckbox.Caption:=lisSimpleSyntax;
|
|
ExcFilterSimpleSyntaxCheckbox.Hint:=
|
|
lisNormallyTheFilterIsARegularExpressionInSimpleSynta;
|
|
UseExcludeFilterCheckbox.Caption:=lisUseExcludeFilter;
|
|
ExcludeFilterGroupbox.Caption:=lisExcludeFilter;
|
|
|
|
ProjectInfoGroupbox.Caption:=lisProjectInformation;
|
|
SaveEditorInfoOfNonProjectFilesCheckbox.Caption:=
|
|
lisSaveEditorInfoOfNonProjectFiles;
|
|
SaveClosedEditorFilesInfoCheckbox.Caption:=lisSaveInfoOfClosedEditorFiles;
|
|
|
|
ButtonPanel1.OkButton.Caption := lisMenuOk;
|
|
ButtonPanel1.OKButton.OnClick := @OkButtonCLICK;
|
|
|
|
ButtonPanel1.CloseButton.Caption := lisSaveSettings;
|
|
ButtonPanel1.CloseButton.ModalResult := mrNone;
|
|
ButtonPanel1.CloseButton.Kind := bkCustom;
|
|
ButtonPanel1.CloseButton.LoadGlyphFromStock(idButtonSave);
|
|
if ButtonPanel1.CloseButton.Glyph.Empty then
|
|
ButtonPanel1.CloseButton.LoadGlyphFromResourceName(HInstance, 'laz_save');
|
|
ButtonPanel1.CloseButton.OnClick := @SaveSettingsButtonCLICK;
|
|
|
|
ButtonPanel1.HelpButton.OnClick := @HelpButtonClick;
|
|
end;
|
|
|
|
procedure TPublishProjectDialog.HelpButtonClick(Sender: TObject);
|
|
begin
|
|
LazarusHelp.ShowHelpForIDEControl(Self);
|
|
end;
|
|
|
|
procedure TPublishProjectDialog.OkButtonCLICK(Sender: TObject);
|
|
begin
|
|
if not CheckFilter then exit;
|
|
if Options<>nil then SaveToOptions(Options);
|
|
end;
|
|
|
|
procedure TPublishProjectDialog.SaveSettingsButtonClick(Sender: TObject);
|
|
begin
|
|
if not CheckFilter then exit;
|
|
if Options<>nil then SaveToOptions(Options);
|
|
end;
|
|
|
|
procedure TPublishProjectDialog.SetComboBox(AComboBox: TComboBox;
|
|
const NewText: string; MaxItemCount: integer);
|
|
begin
|
|
AComboBox.AddHistoryItem(NewText,MaxItemCount,true,false);
|
|
end;
|
|
|
|
procedure TPublishProjectDialog.LoadHistoryLists;
|
|
var
|
|
List: THistoryList;
|
|
begin
|
|
// destination directories
|
|
List:=InputHistories.HistoryLists.GetList(hlPublishProjectDestDirs,true,rltFile);
|
|
List.AppendEntry(SetDirSeparators('$(TestDir)/publishedproject/'));
|
|
List.AppendEntry(SetDirSeparators('$(TestDir)/publishedpackage/'));
|
|
List.AppendEntry(SetDirSeparators('$(ProjPath)/published/'));
|
|
DestDirComboBox.Items.Assign(List);
|
|
|
|
// command after
|
|
List:=InputHistories.HistoryLists.GetList(hlPublishProjectCommandsAfter,true,rltCaseSensitive);
|
|
List.AppendEntry(SetDirSeparators(
|
|
'tar czf $MakeFile($(ProjPublishDir)).tgz $(ProjPublishDir)'));
|
|
List.AppendEntry(SetDirSeparators(
|
|
'tar czf $(TestDir)/project.tgz -C $(TestDir) publishedproject'));
|
|
List.AppendEntry(SetDirSeparators(
|
|
'tar czf $(TestDir)/package.tgz -C $(TestDir) publishedpackage'));
|
|
CommandAfterCombobox.Items.Assign(List);
|
|
|
|
// file filter
|
|
List:=InputHistories.HistoryLists.GetList(hlPublishProjectIncludeFileFilter,
|
|
true,rltFile);
|
|
if List.Count=0 then begin
|
|
List.Add(DefPublModIncFilter);
|
|
end;
|
|
IncludeFilterCombobox.Items.Assign(List);
|
|
|
|
List:=InputHistories.HistoryLists.GetList(hlPublishProjectExcludeFileFilter,
|
|
true,rltFile);
|
|
if List.Count=0 then begin
|
|
List.Add(DefPublModExcFilter);
|
|
end;
|
|
ExcludeFilterCombobox.Items.Assign(List);
|
|
end;
|
|
|
|
procedure TPublishProjectDialog.SaveHistoryLists;
|
|
begin
|
|
// destination directories
|
|
SetComboBox(DestDirComboBox,DestDirComboBox.Text,20);
|
|
InputHistories.HistoryLists.GetList(hlPublishProjectDestDirs,true,rltFile).Assign(
|
|
DestDirComboBox.Items);
|
|
|
|
// command after
|
|
SetComboBox(CommandAfterCombobox,CommandAfterCombobox.Text,20);
|
|
InputHistories.HistoryLists.GetList(hlPublishProjectCommandsAfter,true,
|
|
rltCaseSensitive).Assign(CommandAfterCombobox.Items);
|
|
|
|
// file filter
|
|
SetComboBox(IncludeFilterCombobox,IncludeFilterCombobox.Text,20);
|
|
InputHistories.HistoryLists.GetList(hlPublishProjectIncludeFileFilter,true,
|
|
rltFile).Assign(IncludeFilterCombobox.Items);
|
|
SetComboBox(ExcludeFilterCombobox,ExcludeFilterCombobox.Text,20);
|
|
InputHistories.HistoryLists.GetList(hlPublishProjectExcludeFileFilter,true,
|
|
rltFile).Assign(ExcludeFilterCombobox.Items);
|
|
end;
|
|
|
|
procedure TPublishProjectDialog.SetOptions(const AValue: TPublishModuleOptions);
|
|
begin
|
|
if FOptions=AValue then exit;
|
|
FOptions:=AValue;
|
|
if FOptions is TPublishPackageOptions then
|
|
Caption:=lisPkgEditPublishPackage
|
|
else
|
|
Caption:=lisPublishProject;
|
|
LoadFromOptions(FOptions);
|
|
end;
|
|
|
|
function TPublishProjectDialog.CheckFilter: boolean;
|
|
begin
|
|
Result:=false;
|
|
if Options<>nil then begin
|
|
if not Options.IncludeFilterValid then begin
|
|
if IDEMessageDialog(lisCCOErrorCaption, lisPublProjInvalidIncludeFilter,
|
|
mtError, [mbIgnore,
|
|
mbCancel])
|
|
=mrCancel
|
|
then exit;
|
|
end;
|
|
if not Options.ExcludeFilterValid then begin
|
|
if IDEMessageDialog(lisCCOErrorCaption, lisPublProjInvalidExcludeFilter,
|
|
mtError, [mbIgnore,
|
|
mbCancel])
|
|
=mrCancel
|
|
then exit;
|
|
end;
|
|
end;
|
|
Result:=true;
|
|
end;
|
|
|
|
constructor TPublishProjectDialog.Create(TheOwner: TComponent);
|
|
begin
|
|
inherited Create(TheOwner);
|
|
Position:=poScreenCenter;
|
|
IDEDialogLayoutList.ApplyLayout(Self,500,500);
|
|
if Height<500 then Height:=500;
|
|
LoadHistoryLists;
|
|
end;
|
|
|
|
destructor TPublishProjectDialog.Destroy;
|
|
begin
|
|
SaveHistoryLists;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TPublishProjectDialog.LoadFromOptions(SrcOpts: TPublishModuleOptions);
|
|
var
|
|
ProjSrcOpts: TPublishProjectOptions;
|
|
begin
|
|
// destination
|
|
SeTComboBox(DestDirComboBox,SrcOpts.DestinationDirectory,20);
|
|
SeTComboBox(CommandAfterCombobox,SrcOpts.CommandAfter,20);
|
|
|
|
// file filter
|
|
IgnoreBinariesCheckbox.Checked:=SrcOpts.IgnoreBinaries;
|
|
UseIncludeFilterCheckbox.Checked:=SrcOpts.UseIncludeFileFilter;
|
|
IncFilterSimpleSyntaxCheckbox.Checked:=SrcOpts.IncludeFilterSimpleSyntax;
|
|
SeTComboBox(IncludeFilterCombobox,SrcOpts.IncludeFileFilter,20);
|
|
UseExcludeFilterCheckbox.Checked:=SrcOpts.UseExcludeFileFilter;
|
|
ExcFilterSimpleSyntaxCheckbox.Checked:=SrcOpts.ExcludeFilterSimpleSyntax;
|
|
SeTComboBox(ExcludeFilterCombobox,SrcOpts.ExcludeFileFilter,20);
|
|
|
|
// project info
|
|
if SrcOpts is TPublishProjectOptions then begin
|
|
ProjSrcOpts:=TPublishProjectOptions(SrcOpts);
|
|
SaveEditorInfoOfNonProjectFilesCheckbox.Checked:=
|
|
ProjSrcOpts.SaveEditorInfoOfNonProjectFiles;
|
|
SaveClosedEditorFilesInfoCheckbox.Checked:=
|
|
ProjSrcOpts.SaveClosedEditorFilesInfo;
|
|
ProjectInfoGroupbox.Enabled:=true;
|
|
end else begin
|
|
ProjectInfoGroupbox.Enabled:=false;
|
|
end;
|
|
end;
|
|
|
|
procedure TPublishProjectDialog.SaveToOptions(DestOpts: TPublishModuleOptions);
|
|
var
|
|
ProjDestOpts: TPublishProjectOptions;
|
|
begin
|
|
// destination
|
|
DestOpts.DestinationDirectory:=DestDirComboBox.Text;
|
|
DestOpts.CommandAfter:=CommandAfterCombobox.Text;
|
|
|
|
// file filter
|
|
DestOpts.IgnoreBinaries:=IgnoreBinariesCheckbox.Checked;
|
|
DestOpts.UseIncludeFileFilter:=UseIncludeFilterCheckbox.Checked;
|
|
DestOpts.IncludeFilterSimpleSyntax:=IncFilterSimpleSyntaxCheckbox.Checked;
|
|
DestOpts.IncludeFileFilter:=IncludeFilterCombobox.Text;
|
|
DestOpts.UseExcludeFileFilter:=UseExcludeFilterCheckbox.Checked;
|
|
DestOpts.ExcludeFilterSimpleSyntax:=ExcFilterSimpleSyntaxCheckbox.Checked;
|
|
DestOpts.ExcludeFileFilter:=ExcludeFilterCombobox.Text;
|
|
|
|
// project info
|
|
if DestOpts is TPublishProjectOptions then begin
|
|
ProjDestOpts:=TPublishProjectOptions(DestOpts);
|
|
ProjDestOpts.SaveEditorInfoOfNonProjectFiles:=
|
|
SaveEditorInfoOfNonProjectFilesCheckbox.Checked;
|
|
ProjDestOpts.SaveClosedEditorFilesInfo:=
|
|
SaveClosedEditorFilesInfoCheckbox.Checked;
|
|
end;
|
|
end;
|
|
|
|
end.
|
|
|