Componentes.Terceros.SpTBXLib/internal/2.4.4/1/Source/SpTBXReg.pas
2010-01-19 16:32:53 +00:00

302 lines
11 KiB
ObjectPascal

unit SpTBXReg;
{==============================================================================
The contents of this file are subject to the SpTBXLib License; you may
not use or distribute this file except in compliance with the
SpTBXLib License.
A copy of the SpTBXLib License may be found in SpTBXLib-LICENSE.txt or at:
http://www.silverpointdevelopment.com/sptbxlib/SpTBXLib-LICENSE.htm
Alternatively, the contents of this file may be used under the terms of the
Mozilla Public License Version 1.1 (the "MPL v1.1"), in which case the provisions
of the MPL v1.1 are applicable instead of those in the SpTBXLib License.
A copy of the MPL v1.1 may be found in MPL-LICENSE.txt or at:
http://www.mozilla.org/MPL/
If you wish to allow use of your version of this file only under the terms of
the MPL v1.1 and not to allow others to use your version of this file under the
SpTBXLib License, indicate your decision by deleting the provisions
above and replace them with the notice and other provisions required by the
MPL v1.1. If you do not delete the provisions above, a recipient may use your
version of this file under either the SpTBXLib License or the MPL v1.1.
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The initial developer of this code is Robert Lee.
Requirements:
For Delphi/C++Builder 2009 or newer:
- Jordan Russell's Toolbar 2000
http://www.jrsoftware.org
For Delphi/C++Builder 7-2007:
- Jordan Russell's Toolbar 2000
http://www.jrsoftware.org
- Troy Wolbrink's TNT Unicode Controls
http://www.tntware.com/delphicontrols/unicode/
==============================================================================}
interface
{$I TB2Ver.inc}
uses
Windows, Classes, Controls, SysUtils, Graphics, ImgList, Dialogs,
{$IFDEF JR_D6} DesignIntf, DesignEditors, VCLEditors, {$ELSE} DsgnIntf, {$ENDIF}
TB2Reg, TB2Toolbar, TB2Item, TB2DsgnItemEditor,
SpTBXItem, SpTBXTabs, SpTBXDkPanels, SpTBXFormPopupMenu,
SpTBXControls, SpTBXEditors, SpTBXExtEditors, SpTBXPageScroller,
SpTBXCustomizer, SpTBXMDIMRU;
type
{ TSpTBXItemsEditor }
TSpTBXItemsEditor = class(TTBItemsEditor)
public
procedure Edit; override;
end;
{ TSpTBXImageIndexEditor }
TSpTBXImageIndexEditor = 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;
procedure Register;
implementation
uses
Forms, TypInfo;
//WMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWM
{ Helpers }
procedure SpEditFormAddItems(Sender: TTBItemEditForm; const ToolbarName, ItemsPrefix: string);
// Creates a new toolbar in the EditForm with all the items that have the same prefix.
var
TB: TTBToolbar;
Item: TTBCustomItem;
NewItem: TTBItem;
S: string;
I, C: Integer;
begin
if Sender.FindComponent(ToolbarName) <> nil then Exit;
// Create our own toolbar in the editor
TB := TTBToolbar.Create(Sender);
TB.Top := Sender.Height;
TB.Parent := Sender;
TB.Align := alTop;
TB.Images := Sender.ToolbarItems.SubMenuImages;
TB.ShowHint := True;
TB.Name := ToolbarName;
C := Length(ItemsPrefix);
for I := 0 to Sender.MoreMenu.Count - 1 do
begin
Item := Sender.MoreMenu.Items[I];
if Item is TTBCustomItem then
begin
S := TTBCustomItemClass(Item.Tag).ClassName;
if StrLComp(PChar(S), PChar(ItemsPrefix), C) = 0 then
begin
NewItem := TTBItem.Create(TB);
TB.Items.Add(NewItem);
NewItem.Caption := Item.Caption;
NewItem.ImageIndex := Item.ImageIndex;
NewItem.Tag := Item.Tag;
NewItem.Hint := S;
NewItem.OnClick := Item.OnClick;
end;
end;
end;
end;
//WMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWM
{ TSpTBItemsEditor }
procedure TSpTBXItemsEditor.Edit;
var
Intf: ITBItems;
F: TTBItemEditForm;
I: Integer;
begin
if Assigned(Component) and Component.GetInterface(ITBItems, Intf) then begin
inherited;
F := nil;
if Screen.ActiveForm is TTBItemEditForm then
F := Screen.ActiveForm as TTBItemEditForm
else
for I := 0 to Screen.FormCount - 1 do
if Screen.Forms[I] is TTBItemEditForm then begin
F := Screen.Forms[I] as TTBItemEditForm;
Break;
end;
if Assigned(F) then
SpEditFormAddItems(F, 'SpTBToolbar', 'TSpTBX');
end;
end;
//WMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWM
{ TSpTBXImageIndexEditor }
function TSpTBXImageIndexEditor.GetAttributes: TPropertyAttributes;
begin
Result := [paMultiSelect, paValueList, paRevertable];
end;
function TSpTBXImageIndexEditor.GetImageListAt(Index: Integer): TCustomImageList;
begin
Result := TCustomImageList(TypInfo.GetObjectProp(GetComponent(Index), 'Images'));
end;
procedure TSpTBXImageIndexEditor.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 TSpTBXImageIndexEditor.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 TSpTBXImageIndexEditor.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 TSpTBXImageIndexEditor.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;
//WMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWM
procedure Register;
begin
{$IFDEF JR_D9}
ForceDemandLoadState(dlDisable);
{$ENDIF}
RegisterComponents('SpTBXLib', [TSpTBXDock, TSpTBXMultiDock, TSpTBXToolbar,
TSpTBXToolWindow, TSpTBXDockablePanel, TSpTBXTabSet, TSpTBXTabControl, TSpTBXStatusBar,
TSpTBXPopupMenu, TSpTBXFormPopupMenu, TSpTBXMDIHandler, TSpTBXTitleBar,
TSpTBXLabel, TSpTBXCheckBox, TSpTBXRadioButton, TSpTBXButton, TSpTBXSpeedButton,
TSpTBXProgressBar, TSpTBXTrackBar, TSpTBXSplitter, TSpTBXPanel, TSpTBXGroupBox,
TSpTBXRadioGroup, TSpTBXEdit, TSpTBXButtonEdit, TSpTBXSpinEdit, TSpTBXColorEdit,
TSpTBXComboBox, TSpTBXFontComboBox, TSpTBXListBox, TSpTBXCheckListBox, TSpTBXColorListBox,
TSpTBXPageScroller, TSpTBXCustomizer]);
RegisterClasses([TSpTBXTabSheet, TSpTBXCustomTabSet, TSpTBXCustomTabControl]);
// TSpTBXItem
RegisterNoIcon([TSpTBXItem]);
RegisterClasses([TSpTBXItem]);
TBRegisterItemClass(TSpTBXItem, 'New SpTBX Item', HInstance);
// TSpTBXSubmenuItem
RegisterNoIcon([TSpTBXSubmenuItem]);
RegisterClasses([TSpTBXSubmenuItem]);
TBRegisterItemClass(TSpTBXSubmenuItem, 'New SpTBX Submenu Item', HInstance);
// TSpTBXSeparatorItem
RegisterNoIcon([TSpTBXSeparatorItem]);
RegisterClasses([TSpTBXSeparatorItem]);
TBRegisterItemClass(TSpTBXSeparatorItem, 'New SpTBX Separator Item', HInstance);
// TSpTBXSpacerItem
RegisterNoIcon([TSpTBXRightAlignSpacerItem]);
RegisterClasses([TSpTBXRightAlignSpacerItem]);
TBRegisterItemClass(TSpTBXRightAlignSpacerItem, 'New SpTBX RightAlignSpacer Item', HInstance);
// TSpTBXLabelItem
RegisterNoIcon([TSpTBXLabelItem]);
RegisterClasses([TSpTBXLabelItem]);
TBRegisterItemClass(TSpTBXLabelItem, 'New SpTBX Label Item', HInstance);
// TSpTBXSkinGroupItem
RegisterNoIcon([TSpTBXSkinGroupItem]);
RegisterClasses([TSpTBXSkinGroupItem]);
TBRegisterItemClass(TSpTBXSkinGroupItem, 'New SpTBX SkinGroup Item', HInstance);
// TSpTBXColorItem
RegisterNoIcon([TSpTBXColorItem]);
RegisterClasses([TSpTBXColorItem]);
TBRegisterItemClass(TSpTBXColorItem, 'New SpTBX Color Item', HInstance);
// TSpTBXTabItem
RegisterNoIcon([TSpTBXTabItem]);
RegisterClasses([TSpTBXTabItem]);
TBRegisterItemClass(TSpTBXTabItem, 'New SpTBX Tab Item', HInstance);
// TSpTBXEditItem
RegisterNoIcon([TSpTBXEditItem]);
RegisterClasses([TSpTBXEditItem]);
TBRegisterItemClass(TSpTBXEditItem, 'New SpTBX Edit Item', HInstance);
// TSpTBXSpinEditItem
RegisterNoIcon([TSpTBXSpinEditItem]);
RegisterClasses([TSpTBXSpinEditItem]);
TBRegisterItemClass(TSpTBXSpinEditItem, 'New SpTBX Spin Edit Item', HInstance);
// TSpTBXToolPalette
RegisterNoIcon([TSpTBXToolPalette]);
RegisterClasses([TSpTBXToolPalette]);
TBRegisterItemClass(TSpTBXToolPalette, 'New SpTBX Tool Palette Item', HInstance);
// TSpTBXColorPalette
RegisterNoIcon([TSpTBXColorPalette]);
RegisterClasses([TSpTBXColorPalette]);
TBRegisterItemClass(TSpTBXColorPalette, 'New SpTBX Color Palette Item', HInstance);
// TSpTBXMRUListItem
RegisterNoIcon([TSpTBXMRUListItem]);
RegisterClasses([TSpTBXMRUListItem]);
TBRegisterItemClass(TSpTBXMRUListItem, 'New SpTBX MRU List Item', HInstance);
// TSpTBXMDIWindowItem
RegisterNoIcon([TSpTBXMDIWindowItem]);
RegisterClasses([TSpTBXMDIWindowItem]);
TBRegisterItemClass(TSpTBXMDIWindowItem, 'New SpTBX MDI Window Item', HInstance);
// Register the components editor, the components must implement IItems interface
RegisterComponentEditor(TSpTBXToolbar, TSpTBXItemsEditor);
RegisterComponentEditor(TSpTBXCompoundItemsControl, TSpTBXItemsEditor);
RegisterComponentEditor(TSpTBXDockablePanel, TSpTBXItemsEditor);
RegisterComponentEditor(TSpTBXCustomizer, TSpTBXItemsEditor);
RegisterComponentEditor(TSpTBXPopupMenu, TSpTBXItemsEditor);
// Register the ImageIndex property editor for TSpTBXTextObject descendants, this is
// needed to show the preview of images in the property editor combobox.
RegisterPropertyEditor(TypeInfo(TImageIndex), TSpTBXTextObject, '', TSpTBXImageIndexEditor);
end;
end.