123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- unit TB2Reg;
- {
- Toolbar2000
- Copyright (C) 1998-2005 by Jordan Russell
- All rights reserved.
- The contents of this file are subject to the "Toolbar2000 License"; you may
- not use or distribute this file except in compliance with the
- "Toolbar2000 License". A copy of the "Toolbar2000 License" may be found in
- TB2k-LICENSE.txt or at:
- https://jrsoftware.org/files/tb2k/TB2k-LICENSE.txt
- Alternatively, the contents of this file may be used under the terms of the
- GNU General Public License (the "GPL"), in which case the provisions of the
- GPL are applicable instead of those in the "Toolbar2000 License". A copy of
- the GPL may be found in GPL-LICENSE.txt or at:
- https://jrsoftware.org/files/tb2k/GPL-LICENSE.txt
- If you wish to allow use of your version of this file only under the terms of
- the GPL and not to allow others to use your version of this file under the
- "Toolbar2000 License", indicate your decision by deleting the provisions
- above and replace them with the notice and other provisions required by the
- GPL. If you do not delete the provisions above, a recipient may use your
- version of this file under either the "Toolbar2000 License" or the GPL.
- $jrsoftware: tb2k/Source/TB2Reg.pas,v 1.28 2005/01/06 03:56:50 jr Exp $
- }
- interface
- {$I TB2Ver.inc}
- uses
- Windows, SysUtils, Classes, Graphics, Controls, Dialogs, ActnList, ImgList,
- DesignIntf, DesignEditors, VCLEditors,
- TB2Toolbar, TB2Dock, TB2Item, TB2ExtItems,
- TB2DsgnItemEditor;
- { TTBImageIndexPropertyEditor }
- { Unfortunately TComponentImageIndexPropertyEditor seems to be gone in
- Delphi 6, so we have to use our own image index property editor class }
- type
- TTBImageIndexPropertyEditor = class(TIntegerProperty, ICustomPropertyListDrawing)
- public
- function GetAttributes: TPropertyAttributes; override;
- procedure GetValues(Proc: TGetStrProc); override;
- function GetImageListAt(Index: Integer): TCustomImageList; virtual;
- // ICustomPropertyListDrawing
- procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas;
- var AHeight: Integer);
- procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas;
- var AWidth: Integer);
- procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
- const ARect: TRect; ASelected: Boolean);
- end;
- { TTBItemImageIndexPropertyEditor }
- type
- TTBItemImageIndexPropertyEditor = class(TTBImageIndexPropertyEditor)
- public
- function GetImageListAt (Index: Integer): TCustomImageList; override;
- end;
- procedure Register;
- implementation
- uses
- ImgEdit, Actions, UITypes;
- function TTBImageIndexPropertyEditor.GetAttributes: TPropertyAttributes;
- begin
- Result := [paMultiSelect, paValueList, paRevertable];
- end;
- function TTBImageIndexPropertyEditor.GetImageListAt(Index: Integer): TCustomImageList;
- begin
- Result := nil;
- end;
- procedure TTBImageIndexPropertyEditor.GetValues(Proc: TGetStrProc);
- var
- ImgList: TCustomImageList;
- I: Integer;
- begin
- ImgList := GetImageListAt(0);
- if Assigned(ImgList) then
- for I := 0 to ImgList.Count-1 do
- Proc(IntToStr(I));
- end;
- procedure TTBImageIndexPropertyEditor.ListDrawValue(const Value: string;
- ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean);
- var
- ImgList: TCustomImageList;
- X: Integer;
- begin
- ImgList := GetImageListAt(0);
- ACanvas.FillRect(ARect);
- X := ARect.Left + 2;
- if Assigned(ImgList) then begin
- ImgList.Draw(ACanvas, X, ARect.Top + 2, StrToInt(Value));
- Inc(X, ImgList.Width);
- end;
- ACanvas.TextOut(X + 3, ARect.Top + 1, Value);
- end;
- procedure TTBImageIndexPropertyEditor.ListMeasureHeight(const Value: string;
- ACanvas: TCanvas; var AHeight: Integer);
- var
- ImgList: TCustomImageList;
- begin
- ImgList := GetImageListAt(0);
- AHeight := ACanvas.TextHeight(Value) + 2;
- if Assigned(ImgList) and (ImgList.Height + 4 > AHeight) then
- AHeight := ImgList.Height + 4;
- end;
- procedure TTBImageIndexPropertyEditor.ListMeasureWidth(const Value: string;
- ACanvas: TCanvas; var AWidth: Integer);
- var
- ImgList: TCustomImageList;
- begin
- ImgList := GetImageListAt(0);
- AWidth := ACanvas.TextWidth(Value) + 4;
- if Assigned(ImgList) then
- Inc(AWidth, ImgList.Width);
- end;
- { TTBItemImageIndexPropertyEditor }
- function TTBItemImageIndexPropertyEditor.GetImageListAt(Index: Integer): TCustomImageList;
- var
- C: TPersistent;
- Item: TTBCustomItem;
- begin
- Result := nil;
- { ? I'm guessing that the Index parameter is a component index (one that
- would be passed to the GetComponent function). }
- C := GetComponent(Index);
- if C is TTBCustomItem then begin
- Item := TTBCustomItem(C);
- repeat
- Result := Item.Images;
- if Assigned(Result) then
- Break;
- Item := Item.Parent;
- if Item = nil then
- Break;
- Result := Item.SubMenuImages;
- until Assigned(Result);
- end;
- end;
- { TTBCustomImageListEditor }
- type
- TTBCustomImageListEditor = class(TComponentEditor)
- public
- procedure Edit; override;
- procedure ExecuteVerb(Index: Integer); override;
- function GetVerb(Index: Integer): String; override;
- function GetVerbCount: Integer; override;
- end;
- TTBCustomImageListAccess = class(TTBCustomImageList);
- procedure TTBCustomImageListEditor.Edit;
- var
- ImgList: TTBCustomImageList;
- begin
- ImgList := Component as TTBCustomImageList;
- if not TTBCustomImageListAccess(ImgList).ImagesBitmap.Empty then begin
- if MessageDlg('The image list''s ImagesBitmap property has ' +
- 'a bitmap assigned. Because of this, any changes you make in the ' +
- 'Image List Editor will not be preserved when the form is saved.'#13#10#13#10 +
- 'Do you want to open the editor anyway?', mtWarning,
- [mbYes, mbNo], 0) <> mrYes then
- Exit;
- end;
- EditImageList(ImgList);
- end;
- procedure TTBCustomImageListEditor.ExecuteVerb(Index: Integer);
- begin
- if Index = 0 then
- Edit;
- end;
- function TTBCustomImageListEditor.GetVerbCount: Integer;
- begin
- Result := 1;
- end;
- function TTBCustomImageListEditor.GetVerb(Index: Integer): String;
- begin
- if Index = 0 then
- Result := 'ImageList Editor...'
- else
- Result := '';
- end;
- procedure Register;
- begin
- RegisterComponents('Toolbar2000', [TTBDock, TTBToolbar,
- TTBPopupMenu, TTBImageList, TTBItemContainer]);
- RegisterActions('', [TTBEditAction], nil);
- RegisterNoIcon([TTBItem, TTBGroupItem, TTBSubmenuItem, TTBSeparatorItem,
- TTBEditItem, TTBControlItem]);
- RegisterClasses([TTBItem, TTBGroupItem, TTBSubmenuItem, TTBSeparatorItem,
- TTBEditItem, TTBControlItem]);
- RegisterComponentEditor(TTBCustomToolbar, TTBItemsEditor);
- RegisterComponentEditor(TTBItemContainer, TTBItemsEditor);
- RegisterComponentEditor(TTBPopupMenu, TTBItemsEditor);
- RegisterComponentEditor(TTBCustomImageList, TTBCustomImageListEditor);
- RegisterPropertyEditor(TypeInfo(TTBRootItem), nil, '', TTBItemsPropertyEditor);
- RegisterPropertyEditor(TypeInfo(TImageIndex), TTBCustomItem, 'ImageIndex',
- TTBItemImageIndexPropertyEditor);
- { TShortCut properties show up like Integer properties in Delphi 6
- without this... }
- RegisterPropertyEditor(TypeInfo(TShortCut), TTBCustomItem, '',
- TShortCutProperty);
- { Link in images for the toolbar buttons }
- {$R TB2DsgnItemEditor.res}
- TBRegisterItemClass(TTBEditItem, 'New &Edit', HInstance);
- TBRegisterItemClass(TTBGroupItem, 'New &Group Item', HInstance);
- end;
- end.
|