doublecmd/src/frames/fsearchplugin.pas
Denis Bisson 403a1a070f RMV: Remove the term "unit" from table in plugin tab in search file dialog.
ADD: Include the "field" name in the error message regarding a not found "unit" when attempting to load a saved search using plugin.
2018-11-28 02:42:20 +00:00

145 lines
4.4 KiB
ObjectPascal

{
Double Commander
-------------------------------------------------------------------------
Content plugins search frame
Copyright (C) 2014-2016 Alexander Koblov (alexx2000@mail.ru)
This program 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 program 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.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
}
unit fSearchPlugin;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, ExtCtrls, StdCtrls,
ComCtrls, Buttons, uFindFiles;
type
{ TfrmSearchPlugin }
TfrmSearchPlugin = class(TFrame)
btnDelete: TBitBtn;
btnAdd: TButton;
chkUsePlugins: TCheckBox;
HeaderControl: THeaderControl;
pnlHeader: TPanel;
pnlButtons: TPanel;
pnlTable: TScrollBox;
rbAnd: TRadioButton;
rbOr: TRadioButton;
procedure btnAddClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure chkUsePluginsChange(Sender: TObject);
procedure pnlTableResize(Sender: TObject);
private
{ private declarations }
public
procedure Save(var SearchTemplate: TSearchTemplateRec);
procedure Load(const SearchTemplate: TSearchTemplateRec);
end;
implementation
{$R *.lfm}
uses
uSearchContent;
{ TfrmSearchPlugin }
procedure TfrmSearchPlugin.Save(var SearchTemplate: TSearchTemplateRec);
var
I: Integer;
Plugin: TPluginPanel;
begin
SearchTemplate.ContentPlugin:= chkUsePlugins.Checked;
if not SearchTemplate.ContentPlugin then Exit;
SearchTemplate.ContentPluginCombine:= rbAnd.Checked;
SetLength(SearchTemplate.ContentPlugins, pnlTable.ControlCount);
for I:= 0 to pnlTable.ControlCount - 1 do
begin
Plugin:= TPluginPanel(pnlTable.Controls[I]);
SearchTemplate.ContentPlugins[I].Plugin:= Plugin.Plugin;
SearchTemplate.ContentPlugins[I].FieldType:= Plugin.FieldType;
SearchTemplate.ContentPlugins[I].Field:= Plugin.Field;
SearchTemplate.ContentPlugins[I].Compare:= Plugin.Compare;
SearchTemplate.ContentPlugins[I].Value:= Plugin.Value;
SearchTemplate.ContentPlugins[I].UnitName:= Plugin.UnitName; //Set the unit *after* the field has been set so if we have error setting the unit, the error message gives the "field" has a hint.
end;
end;
procedure TfrmSearchPlugin.Load(const SearchTemplate: TSearchTemplateRec);
var
I: Integer;
Panel: TPluginPanel;
begin
chkUsePlugins.Checked:= SearchTemplate.ContentPlugin;
rbAnd.Checked:= SearchTemplate.ContentPluginCombine;
for I:= pnlTable.ControlCount - 1 downto 0 do pnlTable.Controls[I].Free;
for I:= Low(SearchTemplate.ContentPlugins) to High(SearchTemplate.ContentPlugins) do
begin
Panel:= TPluginPanel.Create(pnlTable);
Panel.Parent:= pnlTable;
Panel.Plugin:= SearchTemplate.ContentPlugins[I].Plugin;
Panel.Field:= SearchTemplate.ContentPlugins[I].Field;
Panel.Compare:= SearchTemplate.ContentPlugins[I].Compare;
Panel.Value:= SearchTemplate.ContentPlugins[I].Value;
Panel.UnitName:= SearchTemplate.ContentPlugins[I].UnitName;
end;
end;
procedure TfrmSearchPlugin.btnAddClick(Sender: TObject);
var
Panel: TPluginPanel;
begin
Panel:= TPluginPanel.Create(pnlTable);
Panel.Parent:= pnlTable;
end;
procedure TfrmSearchPlugin.btnDeleteClick(Sender: TObject);
var
Index: Integer;
begin
Index:= pnlTable.ControlCount - 1;
if Index >= 0 then pnlTable.Controls[Index].Free;
end;
procedure TfrmSearchPlugin.chkUsePluginsChange(Sender: TObject);
begin
rbAnd.Enabled:= chkUsePlugins.Checked;
rbOr.Enabled:= chkUsePlugins.Checked;
HeaderControl.Enabled:= chkUsePlugins.Checked;
pnlTable.Enabled:= chkUsePlugins.Checked;
pnlButtons.Enabled:= chkUsePlugins.Checked;
end;
procedure TfrmSearchPlugin.pnlTableResize(Sender: TObject);
var
I, ColumnWidth: Integer;
begin
ColumnWidth:= pnlTable.ClientWidth div HeaderControl.Sections.Count;
for I:= 0 to HeaderControl.Sections.Count - 1 do
begin
HeaderControl.Sections[I].Width:= ColumnWidth;
end;
end;
end.