mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-29 02:23:42 +02:00
198 lines
6.5 KiB
ObjectPascal
198 lines
6.5 KiB
ObjectPascal
{ $Id: componentpalette.pas 9311 2006-05-19 21:56:07Z mattias $ }
|
|
{
|
|
/***************************************************************************
|
|
componentpalette.pas
|
|
--------------------
|
|
|
|
|
|
***************************************************************************/
|
|
|
|
***************************************************************************
|
|
* *
|
|
* 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:
|
|
A dialog to search a component.
|
|
}
|
|
unit FindPaletteComp;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, LCLProc, LResources, Forms, Controls, Graphics, Dialogs,
|
|
StdCtrls, Buttons, FormEditingIntf, db,
|
|
LazarusIDEStrConsts, ComponentReg, PackageDefs, ExtCtrls, ButtonPanel;
|
|
|
|
type
|
|
|
|
{ TFindPaletteComponentDlg }
|
|
|
|
TFindPaletteComponentDlg = class(TForm)
|
|
BtnPanel: TButtonPanel;
|
|
ComponentsGroupBox: TGroupBox;
|
|
ComponentsListBox: TListBox;
|
|
PatternEdit: TEdit;
|
|
SearchPatternGroupBox: TGroupBox;
|
|
procedure ComponentsListBoxDblClick(Sender: TObject);
|
|
procedure ComponentsListBoxDrawItem(Control: TWinControl; Index: Integer;
|
|
ARect: TRect; State: TOwnerDrawState);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure PatternEditChange(Sender: TObject);
|
|
private
|
|
fSelectedComponents: TFPList;// list of TRegisteredComponent
|
|
procedure UpdateComponentSelection;
|
|
public
|
|
function GetSelectedComponent: TRegisteredComponent;
|
|
end;
|
|
|
|
function ShowFindPaletteComponentDlg(
|
|
out AComponent: TRegisteredComponent): TModalResult;
|
|
|
|
implementation
|
|
|
|
function ShowFindPaletteComponentDlg(out AComponent: TRegisteredComponent
|
|
): TModalResult;
|
|
var
|
|
FindPaletteComponentDlg: TFindPaletteComponentDlg;
|
|
begin
|
|
FindPaletteComponentDlg:=TFindPaletteComponentDlg.Create(nil);
|
|
Result:=FindPaletteComponentDlg.ShowModal;
|
|
AComponent:=FindPaletteComponentDlg.GetSelectedComponent;
|
|
if AComponent=nil then Result:=mrCancel;
|
|
FindPaletteComponentDlg.Free;
|
|
end;
|
|
|
|
{ TFindPaletteComponentDlg }
|
|
|
|
procedure TFindPaletteComponentDlg.FormCreate(Sender: TObject);
|
|
begin
|
|
Caption:=lisFPFindPaletteComponent;
|
|
ComponentsGroupBox.Caption:=lisFPComponents;
|
|
BtnPanel.OKButton.Caption:=lisMenuSelect;
|
|
|
|
PatternEdit.Text:='';
|
|
SearchPatternGroupBox.Caption:=lisMenuFind;
|
|
ComponentsListBox.ItemHeight:=ComponentPaletteImageHeight + 2;
|
|
|
|
UpdateComponentSelection;
|
|
end;
|
|
|
|
procedure TFindPaletteComponentDlg.ComponentsListBoxDrawItem(
|
|
Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState);
|
|
var
|
|
CurComponent: TRegisteredComponent;
|
|
CurStr: string;
|
|
TxtH: Integer;
|
|
CurIcon: TCustomBitmap;
|
|
IconWidth: Integer;
|
|
IconHeight: Integer;
|
|
begin
|
|
if fSelectedComponents=nil then exit;
|
|
if (Index<0) or (Index>=fSelectedComponents.Count) then exit;
|
|
// draw registered component
|
|
CurComponent:=TRegisteredComponent(fSelectedComponents[Index]);
|
|
with ComponentsListBox.Canvas do begin
|
|
CurStr:=Format(lisPckEditPage, [CurComponent.ComponentClass.ClassName,
|
|
CurComponent.Page.PageName]);
|
|
TxtH:=TextHeight(CurStr);
|
|
FillRect(ARect);
|
|
CurIcon:=nil;
|
|
if CurComponent is TPkgComponent then
|
|
CurIcon:=TPkgComponent(CurComponent).Icon;
|
|
if CurIcon<>nil
|
|
then begin
|
|
IconWidth:=CurIcon.Width;
|
|
IconHeight:=CurIcon.Height;
|
|
Draw(ARect.Left+(25-IconWidth) div 2,
|
|
ARect.Top+(ARect.Bottom-ARect.Top-IconHeight) div 2,
|
|
CurIcon);
|
|
end;
|
|
TextOut(ARect.Left+25,
|
|
ARect.Top+(ARect.Bottom-ARect.Top-TxtH) div 2,
|
|
CurStr);
|
|
end;
|
|
end;
|
|
|
|
procedure TFindPaletteComponentDlg.ComponentsListBoxDblClick(Sender: TObject);
|
|
begin
|
|
ModalResult:=mrOk;
|
|
end;
|
|
|
|
procedure TFindPaletteComponentDlg.FormDestroy(Sender: TObject);
|
|
begin
|
|
fSelectedComponents.Free;
|
|
end;
|
|
|
|
procedure TFindPaletteComponentDlg.PatternEditChange(Sender: TObject);
|
|
begin
|
|
UpdateComponentSelection;
|
|
end;
|
|
|
|
procedure TFindPaletteComponentDlg.UpdateComponentSelection;
|
|
var
|
|
p: Integer;
|
|
Page: TBaseComponentPage;
|
|
c: Integer;
|
|
AComponent: TRegisteredComponent;
|
|
begin
|
|
if fSelectedComponents=nil then
|
|
fSelectedComponents:=TFPList.Create;
|
|
fSelectedComponents.Clear;
|
|
if IDEComponentPalette=nil then exit;
|
|
for p:=0 to IDEComponentPalette.Count-1 do begin
|
|
Page:=IDEComponentPalette.Pages[p];
|
|
if not Page.Visible then continue;
|
|
for c:=0 to Page.Count-1 do begin
|
|
AComponent:=Page.Items[c];
|
|
if not AComponent.Visible then continue;
|
|
if (PatternEdit.Text='')
|
|
or (System.Pos(UpperCase(PatternEdit.Text),
|
|
UpperCase(AComponent.ComponentClass.ClassName))>0)
|
|
then
|
|
fSelectedComponents.Add(AComponent);
|
|
end;
|
|
end;
|
|
while ComponentsListBox.Items.Count<fSelectedComponents.Count do
|
|
ComponentsListBox.Items.Add('');
|
|
while ComponentsListBox.Items.Count>fSelectedComponents.Count do
|
|
ComponentsListBox.Items.Delete(ComponentsListBox.Items.Count-1);
|
|
ComponentsListBox.Invalidate;
|
|
end;
|
|
|
|
function TFindPaletteComponentDlg.GetSelectedComponent: TRegisteredComponent;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
if (fSelectedComponents=nil) or (fSelectedComponents.Count=0) then exit(nil);
|
|
i:=ComponentsListBox.ItemIndex;
|
|
if (i>=fSelectedComponents.Count) or (i<0) then
|
|
i:=0;
|
|
Result:=TRegisteredComponent(fSelectedComponents[i]);
|
|
end;
|
|
|
|
initialization
|
|
{$I findpalettecomp.lrs}
|
|
|
|
end.
|
|
|