/ide/publishprojectdlg.pas
http://github.com/graemeg/lazarus · Pascal · 377 lines · 279 code · 50 blank · 48 comment · 19 complexity · e6d98483e5fc6283f8fb38e56151ee72 MD5 · raw file
- { /***************************************************************************
- 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.