git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.SpTBXLib@4 aa3591e4-a9f2-482a-ba07-9d38a056ee4e
302 lines
11 KiB
ObjectPascal
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.
|