mirror of
http://gitlab.expertsoft.com.ua/git/expertcad
synced 2026-01-11 17:25:39 +02:00
5461 lines
159 KiB
ObjectPascal
5461 lines
159 KiB
ObjectPascal
unit pcGUI;
|
|
|
|
interface
|
|
|
|
uses Windows,graphics,classes,GUIStrings,PCTypesUtils,pcMsBar,
|
|
U_Common_Classes, Buttons,Forms,stdctrls,stylecombos,SysUtils,Controls,Messages,
|
|
{$ifndef Designer}
|
|
Powercad,PCLayerDlg,PCMacroDlg,PCBlockDlg,PcPluginDlg,PCFillDlg,
|
|
{$endif}
|
|
extctrls,registry,menus,dialogs;
|
|
|
|
type
|
|
|
|
TCommandInstance = class;
|
|
TCadInterface = class;
|
|
TCommandmenuItem = class;
|
|
TOptionsPopUp = class;
|
|
|
|
TGroupList = class (Tlist)
|
|
EventId: integer;
|
|
EventHandle: Pointer;
|
|
Name: String;
|
|
CadControl: Pointer;
|
|
Constructor Create(aName:String; Owner: Pointer);
|
|
Destructor Destroy;Override;
|
|
Procedure Syncronize(dCom:TObject);
|
|
End;
|
|
|
|
TPCadCommand = class(TMyObject)
|
|
Name : String;
|
|
ID : Integer;
|
|
CatID : Integer;
|
|
Bitmap: Graphics.TBitmap;
|
|
ShortCut:TShortCut;
|
|
Instances:TList;
|
|
CadControl:Pointer;
|
|
GInterface: TCadInterface;
|
|
GroupOwner:TGroupList;
|
|
IsCustom:Boolean;
|
|
EventId: Integer;
|
|
EventHandle: Pointer;
|
|
EventEnabled : Boolean;
|
|
CanMenu: Boolean;
|
|
Tag: Integer;
|
|
Enabled: Boolean;
|
|
Constructor Create;virtual;
|
|
Destructor Destroy;override;
|
|
Procedure SyncronizeInstances;virtual;
|
|
Procedure Clicked(Sender:TObject);virtual;
|
|
Procedure Enter(Sender:TObject);virtual;
|
|
Procedure Leave(Sender:TObject);virtual;
|
|
Function CreateInstance: TCommandInstance;virtual;
|
|
Function CreateControl(aOwner:TComponent;
|
|
Instance: TCommandInstance):TControl;virtual;
|
|
Function CreateMenuItem(Menu:TMenu; Instance: TCommandInstance):TCommandMenuItem;virtual;
|
|
Procedure WriteToStream(Stream: TStream);virtual;
|
|
Procedure LoadFromStream(Stream:TStream;GUI:TCadInterface);virtual;
|
|
Class Function CreateCommandFromStream(ComClass: String;
|
|
Stream:TStream;GUI: TCadInterface):TPcadCommand;
|
|
|
|
end;
|
|
|
|
TToolCommand = class (TPcadCommand)
|
|
Selected: Boolean;
|
|
ToolIndex: Byte;
|
|
ToolName:String;
|
|
Procedure Clicked(Sender:TObject);override;
|
|
Constructor Create;override;
|
|
Procedure SyncronizeInstances;override;
|
|
function CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;override;
|
|
Procedure WriteToStream(Stream: TStream);override;
|
|
Procedure LoadFromStream(Stream:TStream;GUI:TCadInterface);override;
|
|
end;
|
|
|
|
TPCColorCommand = class(TPCadCommand)
|
|
PopUp : TColorPopUp;
|
|
Color: TColor;
|
|
Constructor Create;override;
|
|
Destructor Destroy;override;
|
|
Procedure SyncronizeInstances;override;
|
|
Procedure Clicked(Sender:TObject);override;
|
|
Procedure ColorChanged(Sender:Tobject;xColor:TColor);
|
|
Procedure CreateDialog;
|
|
Function CreateControl(aOwner:TComponent;
|
|
Instance: TCommandInstance):TControl;override;
|
|
Function CreateMenuItem(Menu:TMenu;
|
|
Instance: TCommandInstance):TCommandMenuItem;override;
|
|
end;
|
|
|
|
TPCToggleCommand = class(TPCadCommand)
|
|
Flag: Boolean;
|
|
Procedure SyncronizeInstances;override;
|
|
Procedure Clicked(Sender:TObject);override;
|
|
Function CreateControl(aOwner:TComponent;
|
|
Instance: TCommandInstance):TControl;override;
|
|
Function CreateMenuItem(Menu:TMenu;
|
|
Instance: TCommandInstance):TCommandMenuItem;override;
|
|
end;
|
|
|
|
TPCFileNameCommand = class(TPCadCommand)
|
|
FileName: String;
|
|
Procedure Clicked(Sender:TObject);override;
|
|
end;
|
|
|
|
TPCOptionsCommand = class(TPCadCommand)
|
|
Bitmaps: TList;
|
|
Options: TStringlist;
|
|
Value: Byte;
|
|
Index: Byte;
|
|
PopUp: ToptionsPopUp;
|
|
BmpWidth : Integer;
|
|
UseText: Boolean;
|
|
Procedure SetValue(FValue:Byte);
|
|
Procedure AddOption(xBitmap:TBitmap; oName: String;OValue:Byte=255;Break:Boolean=False);
|
|
Constructor Create;override;
|
|
Destructor Destroy;override;
|
|
Procedure SyncronizeInstances;override;
|
|
Procedure Clicked(Sender:TObject);override;
|
|
Procedure OptionChanged(Sender:Tobject; xValue:Byte; xIndex:Byte);
|
|
Procedure CreateDialog;
|
|
Function CreateControl(aOwner:TComponent;
|
|
Instance: TCommandInstance):TControl;override;
|
|
Function CreateMenuItem(Menu:TMenu;
|
|
Instance: TCommandInstance):TCommandMenuItem;override;
|
|
Procedure LoadFromStream(Stream:TStream;GUI:TCadInterface);override;
|
|
Procedure WriteToStream(Stream: TStream);override;
|
|
end;
|
|
|
|
TInfoCommand = class(TPCadCommand)
|
|
Info: String;
|
|
Procedure Clicked(Sender:TObject);
|
|
Procedure SyncronizeInstances;override;
|
|
Function CreateControl(aOwner:TComponent;
|
|
Instance: TCommandInstance):TControl;override;
|
|
end;
|
|
|
|
TEditCommand = class(TPCadCommand)
|
|
History: TstringList;
|
|
HId: Integer;
|
|
Text: String;
|
|
Constructor Create;override;
|
|
Destructor Destroy;override;
|
|
Procedure KeyClicked(Sender: TObject; var Key: Word; Shift: TShiftState);
|
|
Procedure SyncronizeInstances;override;
|
|
Function CreateControl(aOwner:TComponent;
|
|
Instance: TCommandInstance):TControl;override;
|
|
end;
|
|
|
|
|
|
TStyleCommand = class(TPCadCommand)
|
|
style:Byte;
|
|
Procedure SyncronizeInstances;override;
|
|
end;
|
|
|
|
TTempRecord = class
|
|
ComName: String;
|
|
Caption: String;
|
|
BeginGroup: Boolean;
|
|
BmpWritten: Boolean;
|
|
BmpChanged: Boolean;
|
|
Bitmap: TBitmap;
|
|
Destructor Destroy;override;
|
|
Constructor Create;
|
|
end;
|
|
|
|
TCommandList = class(TPcadCommand)
|
|
ComList: TList;
|
|
InstList: TList;
|
|
TempList: TList;
|
|
PopUp: TPopUpMenu;
|
|
Procedure CreateContentFromTempList(GUI:TCadInterface);
|
|
Function AddCommand(xCommand:TPCadCommand; BeginGroup:Boolean): TCommandInstance;
|
|
Procedure RemoveCommand(xCommand:TPCadCommand);
|
|
Procedure CreateInstances;
|
|
Constructor Create;override;
|
|
Procedure SyncronizeInstances;override;
|
|
Procedure Clicked(Sender:TObject);override;
|
|
Function CreateInstance: TCommandInstance;override;
|
|
Function CreateControl(aOwner:TComponent;
|
|
Instance: TCommandInstance):TControl;override;
|
|
Function CreateMenuItem(Menu:TMenu; Instance: TCommandInstance):TCommandMenuItem;override;
|
|
Procedure LoadFromStream(Stream:TStream;GUI:TCadInterface);override;
|
|
Procedure WriteToStream(Stream: TStream);override;
|
|
Destructor Destroy;override;
|
|
end;
|
|
|
|
TPCBrushStyleCommand = class(TStyleCommand)
|
|
Function CreateControl(aOwner:TComponent;
|
|
Instance: TCommandInstance):TControl;override;
|
|
end;
|
|
|
|
TPCPenStyleCommand = class(TStyleCommand)
|
|
Function CreateControl(aOwner:TComponent;
|
|
Instance: TCommandInstance):TControl;override;
|
|
end;
|
|
|
|
TPCRowStyleCommand = class(TStyleCommand)
|
|
Function CreateControl(aOwner:TComponent;
|
|
Instance: TCommandInstance):TControl;override;
|
|
end;
|
|
|
|
TPCPenWidthCommand = class(TStyleCommand)
|
|
Function CreateControl(aOwner:TComponent;
|
|
Instance: TCommandInstance):TControl;override;
|
|
end;
|
|
|
|
TPCFontNameCommand = class(TPCadCommand)
|
|
FontName:String;
|
|
Constructor Create;override;
|
|
Procedure SyncronizeInstances;override;
|
|
Function CreateControl(aOwner:TComponent;
|
|
Instance: TCommandInstance):TControl;override;
|
|
end;
|
|
|
|
TPCTextSizeCommand = class(TPCadCommand)
|
|
Value:Double;
|
|
Procedure SyncronizeInstances;override;
|
|
Function CreateControl(aOwner:TComponent;
|
|
Instance: TCommandInstance):TControl;override;
|
|
Constructor Create;override;
|
|
end;
|
|
|
|
|
|
TCommandClass = class of TPCadCommand;
|
|
|
|
TCommandInstance = class(TMyObject)
|
|
Command: TPCadCommand;
|
|
Bitmap : Graphics.TBitmap;
|
|
Caption: String;
|
|
BeginGroup: Boolean;
|
|
Button: TComponent;
|
|
Bevel: TComponent;
|
|
MenuItem: TMenuItem;
|
|
BitmapChanged:Boolean;
|
|
Constructor Create(aCommand: TPcadCommand; aCaption:String;
|
|
aBitmap:Graphics.TBitmap);
|
|
Destructor Destroy;override;
|
|
end;
|
|
|
|
TToolbarDef = class (TObject)
|
|
Caption: String;
|
|
Commands: TList;
|
|
Visible : Boolean;
|
|
IsMenu : Boolean;
|
|
Toolbar : TComponent;
|
|
DefaultDock: TPCDock;
|
|
DockRow: Integer;
|
|
DockPos: Integer;
|
|
Constructor Create(aName: String);
|
|
Destructor Destroy;override;
|
|
end;
|
|
|
|
TMDIOpenFileEvent = Procedure (Sender:TObject;FileName:String) of Object;
|
|
|
|
TCadInterface = class (TComponent)
|
|
Private
|
|
FFileName:String;
|
|
CommandGroups: Tlist;
|
|
CommandBitmap: TBitmap;
|
|
OptionsBitmap: TBitmap;
|
|
GradsBitmap: TBitmap;
|
|
TextureBitmap:TBitmap;
|
|
FEnabled: Boolean;
|
|
{$ifndef Designer}
|
|
fCadControl: TPowercad;
|
|
FBlockDlg: TPCBlockDlg;
|
|
FLayerDlg: TPCLayerDlg;
|
|
FMacroDlg: TPCMacroDialog;
|
|
FPluginDlg: TPCPluginDlg;
|
|
FFillDlg: TPCFillDlg;
|
|
{$endif}
|
|
FMDI: Boolean;
|
|
FMDIOpenFile: TMDIOpenFileEvent;
|
|
FMDINewFile: TNotifyEvent;
|
|
FMDIexit: TNotifyEvent;
|
|
FOnCustomized: TNotifyEvent;
|
|
Procedure SaveToReg;
|
|
Procedure LoadFromReg;
|
|
Function NewSubCommand(aName: String; comID:integer;catId: Integer;
|
|
xBitmap: TBitmap; comClass: TCommandClass):TPCadCommand;
|
|
Function GetBitmap(col,row: integer): TBitmap;
|
|
Function GetOptBitmap(col,row: integer): TBitmap;
|
|
Function GetGradBitmap(idx: integer): TBitmap;
|
|
Function GetTxtBitmap(idx: integer): TBitmap;
|
|
Procedure AddToGroup(Group: TGrouplist; Command: TPCadCommand);
|
|
Procedure AddCommand(pCom: TPCadCommand);
|
|
procedure SetEnabled(const Value: Boolean);
|
|
{$ifndef Designer}
|
|
procedure SetControl(const Value: TPowercad);
|
|
procedure SetBlockDlg(const Value: TPCBlockDlg);
|
|
procedure SetLayerDlg(const Value: TPClayerDlg);
|
|
procedure SetMacroDlg(const Value: TPCMacroDialog);
|
|
procedure SetPluginDlg(const Value: TPCPluginDlg);
|
|
procedure SetFillDlg(const Value: TPCFillDlg);
|
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
|
{$endif}
|
|
Procedure BotResize(Sender:TObject);
|
|
function ToolbarRemoveNotification(aComponent: TComponent): Boolean;
|
|
procedure SetMDI(const Value: Boolean);
|
|
|
|
public
|
|
ToolBars: TList;
|
|
CatList : TStringList;
|
|
CommandList: TList;
|
|
DockTop,DockLeft,DockRight,DockBottom: TPCDock;
|
|
//BottomPanel: TPanel;
|
|
Window: TForm;
|
|
CanCustomize: Boolean;
|
|
{$ifndef Designer}
|
|
Procedure SetToolIndex;
|
|
{$endif}
|
|
Function NewGroup(Name: String;Owner:Pointer): TGroupList;
|
|
Function FindGroup(Name: String): TGroupList;
|
|
Procedure ClearGroups;
|
|
Constructor Create(aOwner:TComponent);override;
|
|
Destructor Destroy;override;
|
|
Procedure Customize;
|
|
Function NewToolBar(TName: String):TToolBarDef;
|
|
Procedure RemoveToolBar(TB:TToolBarDef);
|
|
Function NewCommand(aName: String; comID:integer;catId: Integer;
|
|
xBitmap: TBitmap):TPCadCommand;
|
|
Function AddTBCommand(tbIndex:Integer;Command:TPCadCommand;
|
|
BeginGroup:Boolean): TCommandInstance;
|
|
Procedure RemoveTBCommand(tbIndex:Integer;Command:TCommandInstance);
|
|
Procedure CreateControls;
|
|
Function CreateMenuControls(TbDef:TToolBarDef;Index:Integer):TComponent;
|
|
Function CreateToolBarControls(TbDef:TToolBarDef;Index:Integer):TComponent;
|
|
Function FindCommand(ComName:String):TPCadCommand;
|
|
Procedure RemoveCommand(pCom: TPCadCommand);
|
|
Function NewMenu(aName:String;catId,ComId:Integer;Bitmap:TBitmap):TCommandList;
|
|
Procedure CreateCategories;
|
|
Procedure CreateStandartCommands;
|
|
{$ifndef Designer}
|
|
Procedure CreateMacroCommands;
|
|
Procedure CreateBlockCommands;
|
|
Procedure CreatePluginCommands;
|
|
{$endif}
|
|
Procedure BuildStandartInterface;
|
|
Procedure RefreshAllInterface;
|
|
Procedure CollectCommands(cList: Tlist;comId: Integer);
|
|
//
|
|
Procedure LoadFromFile(fName:String);
|
|
Procedure SaveToFile(fName:String);
|
|
Procedure RemoveCategory(catID: integer);
|
|
Procedure ClearToolbars;
|
|
Procedure ClearMenus;
|
|
Procedure ClearCommands;
|
|
Procedure ClearCommandsById(ComId: Integer);
|
|
Procedure ClearContent;
|
|
Procedure SaveToRegistry(KeyName: String);
|
|
Procedure LoadFromRegistry(KeyName: String);
|
|
Procedure SaveToStream(Stream:TStream);
|
|
Procedure LoadFromStream(Stream:TStream);
|
|
Published
|
|
{$ifndef Designer}
|
|
Property CadControl:TPowercad read fCadControl write SetControl;
|
|
Property MacroDialog: TPCMacroDialog read FMacroDlg write SetMacroDlg;
|
|
Property BlockDialog: TPCBlockDlg read FBlockDlg write SetBlockDlg;
|
|
Property LayerDialog: TPCLayerDlg read FLayerDlg write SetLayerDlg;
|
|
Property PluginDialog: TPCPluginDlg read FPluginDlg write SetPluginDlg;
|
|
Property FillDialog:TPCFillDlg read FFillDlg write SetFillDlg;
|
|
{$endif}
|
|
Property Enabled: Boolean read FEnabled write SetEnabled;
|
|
Property FileName:String read FFileName;
|
|
Property MDIApp:Boolean read FMDI write SetMDI;
|
|
Property OnMDINewFile:TNotifyEvent read FMDINewFile write FMDINewFile;
|
|
Property OnMDIExit:TNotifyEvent read FMDIexit write FMDIexit;
|
|
Property OnMDIOpenFile:TMDIOpenFileEvent read FMDIOpenFile write FMDIOpenFile;
|
|
Property OnCusotmized:TNotifyEvent read FOnCustomized write FOnCustomized;
|
|
end;
|
|
|
|
//TGUIProperty = class (TClassProperty)
|
|
//public
|
|
// function GetAttributes: TPropertyAttributes; override;
|
|
// procedure Edit; override;
|
|
//end;
|
|
|
|
TCommandButton = class (TSpeedButton)
|
|
private
|
|
FMouseLeave: TNotifyEvent;
|
|
FMouseEnter: TNotifyEvent;
|
|
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
|
|
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
|
|
public
|
|
ComBitmap: TBitmap;
|
|
ComCaption: String;
|
|
CapS: Integer;
|
|
ComInst: TCommandInstance;
|
|
Constructor Create(aOwner: TComponent; aCom: TCommandInstance);virtual;
|
|
Destructor Destroy;override;
|
|
Procedure Paint;override;
|
|
Property OnMouseLeave:TNotifyEvent read FMouseLeave write FMouseLeave;
|
|
Property OnMouseEnter:TNotifyEvent read FMouseEnter write FMouseEnter;
|
|
end;
|
|
|
|
TCommandPanel = class(TPanel)
|
|
ComInst: TCommandInstance;
|
|
Constructor Create(aOwner: TComponent; aCom: TCommandInstance);virtual;
|
|
Destructor Destroy;override;
|
|
end;
|
|
|
|
TCommandEdit = class(TEdit)
|
|
ComInst: TCommandInstance;
|
|
Constructor Create(aOwner: TComponent; aCom: TCommandInstance);virtual;
|
|
Destructor Destroy;override;
|
|
end;
|
|
|
|
|
|
TColorCommandButton = class (TCommandButton)
|
|
Private
|
|
FColor:Tcolor;
|
|
Procedure SetColor(Value: TColor);
|
|
Protected
|
|
Procedure Paint;override;
|
|
public
|
|
property Color: TColor read FColor write SetColor;
|
|
end;
|
|
|
|
TOptionsCommandButton = class (TCommandButton)
|
|
Private
|
|
FValue:Byte;
|
|
FIndex: Byte;
|
|
|
|
Procedure SetValue(aValue: Byte);
|
|
procedure SetIndex(const Value: Byte);
|
|
Protected
|
|
Procedure Paint;override;
|
|
public
|
|
property Value:Byte read FValue write SetValue;
|
|
Property SelIndex:Byte read FIndex write SetIndex;
|
|
end;
|
|
|
|
TListCommandButton = class (TCommandButton)
|
|
Protected
|
|
Procedure Paint;override;
|
|
end;
|
|
|
|
|
|
TComboClass = class of TStyleCombo;
|
|
|
|
|
|
TBSCommandCombo = class (TBrushStyleCombo)
|
|
Private
|
|
Style: Byte;
|
|
Public
|
|
ComInst: TCommandInstance;
|
|
Constructor Create(aOwner: TComponent; aCom: TCommandInstance);
|
|
Destructor Destroy;override;
|
|
Procedure Clicked(Sender:TObject);virtual;
|
|
end;
|
|
|
|
TPSCommandCombo = class (TPenStyleCombo)
|
|
Private
|
|
Style: Byte;
|
|
Public
|
|
ComInst: TCommandInstance;
|
|
Constructor Create(aOwner: TComponent; aCom: TCommandInstance);
|
|
Destructor Destroy;override;
|
|
Procedure Clicked(Sender:TObject);virtual;
|
|
end;
|
|
|
|
TRSCommandCombo = class (TRowCombo)
|
|
Private
|
|
Style: Byte;
|
|
Public
|
|
ComInst: TCommandInstance;
|
|
Constructor Create(aOwner: TComponent; aCom: TCommandInstance);
|
|
Destructor Destroy;override;
|
|
Procedure Clicked(Sender:TObject);virtual;
|
|
end;
|
|
|
|
TPWCommandCombo = class (TPenWidthCombo)
|
|
Private
|
|
Style: Byte;
|
|
Public
|
|
ComInst: TCommandInstance;
|
|
Constructor Create(aOwner: TComponent; aCom: TCommandInstance);
|
|
Destructor Destroy;override;
|
|
Procedure Clicked(Sender:TObject);virtual;
|
|
end;
|
|
|
|
TFontCommandCombo = class (TFontComboBox)
|
|
Private
|
|
FontName: String;
|
|
Public
|
|
ComInst: TCommandInstance;
|
|
Constructor Create(aOwner: TComponent; aCom: TCommandInstance);
|
|
Destructor Destroy;override;
|
|
Procedure Clicked(Sender:TObject);virtual;
|
|
end;
|
|
|
|
TTextSizeCommandCombo = class (TComboBox)
|
|
Private
|
|
Value: Integer;
|
|
Public
|
|
ComInst: TCommandInstance;
|
|
Constructor Create(aOwner: TComponent; aCom: TCommandInstance);
|
|
Destructor Destroy;override;
|
|
Procedure Clicked(Sender:TObject);virtual;
|
|
end;
|
|
|
|
TCommandMenuItem = class(TMenuItem)
|
|
Private
|
|
Bitmap: Graphics.TBitmap;
|
|
FOwnerDraw: Boolean;
|
|
procedure SetOwnerDraw(const Value: Boolean);
|
|
public
|
|
ComInst: TCommandInstance;
|
|
Constructor Create(aOwner:TComponent;aCom:TCommandInstance);
|
|
Destructor Destroy;override;
|
|
procedure SelfMeasureItem(Sender: TObject; ACanvas: TCanvas;
|
|
var Width, Height: Integer);virtual;
|
|
procedure SelfAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
|
|
ARect: TRect; State: TOwnerDrawState);virtual;
|
|
Procedure SetBitmap(aBitmap: Graphics.TBitmap);
|
|
Property OwnerDraw: Boolean read FOwnerDraw write SetOwnerDraw;
|
|
|
|
end;
|
|
|
|
TColorMnItem = Class(TCommandMenuItem)
|
|
Private
|
|
FColor:TColor;
|
|
SelectedItem: TMenuItem;
|
|
Procedure SetColor(Value: TColor);
|
|
public
|
|
Constructor Create(aOwner:TComponent;aCom:TCommandInstance);
|
|
procedure SelfMeasureItem(Sender: TObject; ACanvas: TCanvas;
|
|
var Width, Height: Integer);override;
|
|
procedure SelfAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
|
|
ARect: TRect; State: TOwnerDrawState);override;
|
|
procedure ChildMeasureItem(Sender: TObject; ACanvas: TCanvas;
|
|
var Width, Height: Integer);
|
|
procedure ChildAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
|
|
ARect: TRect; State: TOwnerDrawState);
|
|
Procedure ColorSelected(Sender:TObject);
|
|
Property Color:TColor read FColor write setColor;
|
|
end;
|
|
|
|
TOptionsMenuItem = class(TCommandMenuItem)
|
|
Private
|
|
FValue:Byte;
|
|
FIndex: Integer;
|
|
SelectedItem: TMenuItem;
|
|
Bitmaps: Tlist;
|
|
Options: TStringList;
|
|
BMpWidth: Integer;
|
|
BMpHeight: Integer;
|
|
Usetext: Boolean;
|
|
procedure setValue(const xValue: Byte);
|
|
public
|
|
Constructor Create(aOwner:TComponent;aCom:TCommandInstance;aUseText: Boolean);
|
|
procedure SelfMeasureItem(Sender: TObject; ACanvas: TCanvas;
|
|
var Width, Height: Integer);override;
|
|
procedure SelfAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
|
|
ARect: TRect; State: TOwnerDrawState);override;
|
|
procedure ChildMeasureItem(Sender: TObject; ACanvas: TCanvas;
|
|
var Width, Height: Integer);
|
|
procedure ChildAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
|
|
ARect: TRect; State: TOwnerDrawState);
|
|
Procedure OptionSelected(Sender:TObject);
|
|
Property Value:Byte read FValue write setValue;
|
|
end;
|
|
|
|
TOptionChangeEvent = Procedure (Sender: Tobject; Option: Byte;Index:Byte) of Object;
|
|
|
|
TOptionsPopUp = class (TPopUpMenu)
|
|
Private
|
|
FValue:Byte;
|
|
FIndex:Byte;
|
|
SelectedItem: TMenuItem;
|
|
Bitmaps: Tlist;
|
|
Options: TStringList;
|
|
BMpWidth: Integer;
|
|
BMpHeight: Integer;
|
|
Usetext: Boolean;
|
|
FOptionChange: TOptionChangeEvent;
|
|
procedure setValue(const xValue: Byte);
|
|
public
|
|
Constructor Create(aOwner:TComponent;aBitmaps: Tlist; aOptions: TStringList;aUsetext:Boolean);
|
|
Procedure OptionSelected(Sender:TObject);
|
|
procedure ChildMeasureItem(Sender: TObject; ACanvas: TCanvas;
|
|
var Width, Height: Integer);
|
|
procedure ChildAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
|
|
ARect: TRect; State: TOwnerDrawState);
|
|
Property Value:Byte read FValue write setValue;
|
|
Property SelIndex:Byte read FIndex;
|
|
Property OnOptionChange: TOptionChangeEvent read FOptionChange write FOptionChange;
|
|
end;
|
|
|
|
|
|
|
|
|
|
Procedure GroupButtonsUp(Command:TPCadCommand);
|
|
procedure GUIEventCallback(Client:TObject; EventId: Integer;
|
|
NumVal:Integer; Strval:String; DblVal:Double;Enabled:Boolean);stdcall;
|
|
|
|
|
|
|
|
implementation
|
|
{$R *.RES}
|
|
{$R *.DCR}
|
|
|
|
uses
|
|
pcCustomForm, U_Common, U_BaseCommon;
|
|
|
|
var CommandClasses: Tlist;
|
|
|
|
{ TCadInterface }
|
|
|
|
function TCadInterface.AddTBCommand(tbIndex: Integer;
|
|
Command: TPCadCommand;BeginGroup:Boolean): TCommandInstance;
|
|
var tbDef: TToolBarDef;
|
|
cList: TCommandlist;
|
|
i: integer;
|
|
sInst: TCommandInstance;
|
|
begin
|
|
Result := nil;
|
|
if tbIndex > toolbars.Count - 1 then exit;
|
|
tbDef := TToolbarDef(Toolbars[tbIndex]);
|
|
Result := Command.CreateInstance;
|
|
Result.BeginGroup := BeginGroup;
|
|
tbDef.Commands.Add(result);
|
|
end;
|
|
|
|
procedure TCadInterface.BuildStandartInterface;
|
|
var tbDef: TToolBarDef;
|
|
tbMenu,tbStbar,tbDraw,tbFile,tbEdit,tbFormat,
|
|
tbTransform,tbArrange,tbOptions,tbZoom,tbComBar: Integer;
|
|
begin
|
|
ToolBars.Clear;
|
|
tbDef := NewToolBar(csMainMenu);
|
|
tbDef.IsMenu := True;
|
|
|
|
|
|
tbDef := NewToolBar(csDraw); tbDef.DefaultDock := DockLeft; tbDef.DockRow := 0;tbDef.DockPos := 0;
|
|
tbDef := NewToolBar(csFile);tbDef.DefaultDock := DockTop;tbDef.DockRow := 0;tbDef.DockPos := 0;
|
|
tbDef := NewToolBar(csEdit);tbDef.DefaultDock := DockTop;tbDef.DockRow := 0;tbDef.DockPos := 40;
|
|
tbDef := NewToolBar(csFormat);tbDef.DefaultDock := DockTop;tbDef.DockRow := 1;tbDef.DockPos := 0;
|
|
tbDef := NewToolBar(csTransform);tbDef.DefaultDock := DockLeft;tbDef.DockRow := 0;tbDef.DockPos := 100;
|
|
tbDef := NewToolBar(csArrange);tbDef.DefaultDock := DockTop;tbDef.DockRow := 0;tbDef.DockPos := 0;
|
|
tbDef := NewToolBar(csCommandBar);tbDef.DefaultDock := DockBottom;tbDef.DockRow := 0;tbDef.DockPos := 0;
|
|
tbDef := NewToolBar(csStatusBar);tbDef.DefaultDock := DockBottom;tbDef.DockRow := 1;tbDef.DockPos := 0;
|
|
|
|
tbMenu := 0;
|
|
|
|
tbDraw := 1;
|
|
tbFile := 2;
|
|
tbEdit := 3;
|
|
tbFormat := 4;
|
|
tbTransform := 5;
|
|
tbArrange := 6;
|
|
tbComBar := 7;
|
|
tbStbar := 8;
|
|
// Build Main Menu
|
|
AddTbCommand(tbMenu,FindCommand(csFile),False);
|
|
AddTbCommand(tbMenu,FindCommand(csEdit),False);
|
|
AddTbCommand(tbMenu,FindCommand(csArrange),False);
|
|
AddTbCommand(tbMenu,FindCommand(csFormat),False);
|
|
AddTbCommand(tbMenu,FindCommand(csView),False);
|
|
AddTbCommand(tbMenu,FindCommand(csInsert),False);
|
|
AddTbCommand(tbMenu,FindCommand(csOptions),False);
|
|
AddTbCommand(tbMenu,FindCommand(csTools),False);
|
|
|
|
// Build Draw ToolBar
|
|
AddTbCommand(tbDraw,FindCommand(csSelect),False);
|
|
AddTbCommand(tbDraw,FindCommand(csLine),True);
|
|
AddTbCommand(tbDraw,FindCommand(csRect),False);
|
|
AddTbCommand(tbDraw,FindCommand(csEllipse),False);
|
|
AddTbCommand(tbDraw,FindCommand(csCircle),False);
|
|
AddTbCommand(tbDraw,FindCommand(csArc),False);
|
|
AddTbCommand(tbDraw,FindCommand(csElpArc),False);
|
|
AddTbCommand(tbDraw,FindCommand(csPLine),False);
|
|
AddTbCommand(tbDraw,FindCommand(csFreeHand),False);
|
|
AddTbCommand(tbDraw,FindCommand(csVertex),False);
|
|
AddTbCommand(tbDraw,FindCommand(csText),False);
|
|
AddTbCommand(tbDraw,FindCommand(csTextPanel),False);
|
|
AddTbCommand(tbDraw,FindCommand(csKnife),False);
|
|
AddTbCommand(tbDraw,FindCommand(csHorzDim),True);
|
|
AddTbCommand(tbDraw,FindCommand(csVertDim),False);
|
|
AddTbCommand(tbDraw,FindCommand(csAlignedDim),False);
|
|
AddTbCommand(tbDraw,FindCommand(csRadiusDim),False);
|
|
AddTbCommand(tbDraw,FindCommand(csAngleDim),False);
|
|
|
|
//Build File ToolBar
|
|
AddTbCommand(tbFile,FindCommand(csNew),False);
|
|
AddTbCommand(tbFile,FindCommand(csOpen),False);
|
|
AddTbCommand(tbFile,FindCommand(csSave),False);
|
|
AddTbCommand(tbFile,FindCommand(csPrint),True);
|
|
AddTbCommand(tbFile,FindCommand(csPPView),False);
|
|
|
|
//Build Edit ToolBar
|
|
AddTbCommand(tbEdit,FindCommand(csUndo),False);
|
|
AddTbCommand(tbEdit,FindCommand(csCopy),True);
|
|
AddTbCommand(tbEdit,FindCommand(csCut),False);
|
|
AddTbCommand(tbEdit,FindCommand(csPaste),False);
|
|
AddTbCommand(tbEdit,FindCommand(csDelete),False);
|
|
|
|
//Build Modify ToolBar
|
|
AddTbCommand(tbFormat,FindCommand(csPenColor),False);
|
|
AddTbCommand(tbFormat,FindCommand(csPenStyle),True);
|
|
AddTbCommand(tbFormat,FindCommand(csPenWidth),True);
|
|
AddTbCommand(tbFormat,FindCommand(csRowStyle),True);
|
|
AddTbCommand(tbFormat,FindCommand(csBrushColor),True);
|
|
AddTbCommand(tbFormat,FindCommand(csBrushStyle),True);
|
|
AddTbCommand(tbFormat,FindCommand(csTextColor),True);
|
|
AddTbCommand(tbFormat,FindCommand(csFontName),False);
|
|
AddTbCommand(tbFormat,FindCommand(csTextSize),False);
|
|
AddTbCommand(tbFormat,FindCommand(csBold),True);
|
|
AddTbCommand(tbFormat,FindCommand(csItalic),False);
|
|
AddTbCommand(tbFormat,FindCommand(csUnderline),False);
|
|
|
|
//Build Transform ToolBar
|
|
AddTbCommand(tbTransform,FindCommand(csMove),False);
|
|
AddTbCommand(tbTransform,FindCommand(csDuplicate),False);
|
|
AddTbCommand(tbTransform,FindCommand(csDuplicateAsBezier),False);
|
|
AddTbCommand(tbTransform,FindCommand(csRotate),False);
|
|
AddTbCommand(tbTransform,FindCommand(csMirror),False);
|
|
AddTbCommand(tbTransform,FindCommand(csArrayR),False);
|
|
AddTbCommand(tbTransform,FindCommand(csArrayP),False);
|
|
|
|
//Build Arrange ToolBar
|
|
|
|
AddTbCommand(tbarrange,FindCommand(csGroup),False);
|
|
AddTbCommand(tbarrange,FindCommand(csUnGroup),False);
|
|
AddTbCommand(tbarrange,FindCommand(csConvertToBezier),False);
|
|
AddTbCommand(tbarrange,FindCommand(csOffset),False);
|
|
AddTbCommand(tbarrange,FindCommand(csInterbreak),False);
|
|
AddTbCommand(tbarrange,FindCommand(csOrder),True);
|
|
AddTbCommand(tbarrange,FindCommand(csInvertArc),True);
|
|
AddTbCommand(tbarrange,FindCommand(csArcStyle),False);
|
|
|
|
AddTbCommand(tbarrange,FindCommand(csFlipHorz),True);
|
|
AddTbCommand(tbarrange,FindCommand(csFlipVert),False);
|
|
AddTbCommand(tbarrange,FindCommand(csTransparentImage),False);
|
|
//AddTbCommand(tbarrange,FindCommand(csClipImage),False);
|
|
AddTbCommand(tbarrange,FindCommand(csWeldIntoPolyLine),True);
|
|
AddTbCommand(tbarrange,FindCommand(csConvertBeziertoPolyLine),False);
|
|
AddTbCommand(tbarrange,FindCommand(csConvertPolyLinetoBezier),False);
|
|
AddTbCommand(tbarrange,FindCommand(csPolyLineClosed),False);
|
|
|
|
|
|
|
|
AddTbCommand(tbStBar,FindCommand(csRulers),False);
|
|
AddTbCommand(tbStBar,FindCommand(csGrids),False);
|
|
AddTbCommand(tbStBar,FindCommand(csGuides),False);
|
|
|
|
AddTbCommand(tbStBar,FindCommand(csSnapGrid),False);
|
|
AddTbCommand(tbStBar,FindCommand(csSnapGuides),False);
|
|
AddTbCommand(tbStBar,FindCommand(csSnapObject),False);
|
|
|
|
AddTbCommand(tbStBar,FindCommand(csInfoXY),False);
|
|
AddTbCommand(tbStBar,FindCommand(csInfoDim),False);
|
|
AddTbCommand(tbStBar,FindCommand(csInfoMes),False);
|
|
|
|
AddTbCommand(tbStBar,FindCommand(csZoomIn),False);
|
|
AddTbCommand(tbStBar,FindCommand(csZoomOut),False);
|
|
AddTbCommand(tbStBar,FindCommand(csZoomArea),False);
|
|
AddTbCommand(tbStBar,FindCommand(csActualSize),False);
|
|
AddTbCommand(tbStBar,FindCommand(csFitToPage),False);
|
|
|
|
AddTbCommand(tbComBar,FindCommand(csCommandEdit),False);
|
|
|
|
end;
|
|
|
|
constructor TCadInterface.Create(aOwner:TComponent);
|
|
begin
|
|
inherited Create(aOwner);
|
|
{$ifndef Designer}
|
|
FCadControl := nil;
|
|
{$endif}
|
|
if (aOwner is TCustomForm) and not (csDesigning in ComponentState)
|
|
then begin
|
|
DockTop := TPCDock.Create(aOwner);
|
|
DockTop.Parent := TCustomForm(aOwner);
|
|
Docktop.Position := dpTop;
|
|
DockTop.Name := 'pcDockTop';
|
|
DockLeft := TPCDock.Create(aOwner);
|
|
DockLeft.Parent := TCustomForm(aOwner);
|
|
DockLeft.Position := dpLeft;
|
|
DockLeft.Name := 'pcDockLeft';
|
|
DockRight := TPCDock.Create(aOwner);
|
|
DockRight.Parent := TCustomForm(aOwner);
|
|
DockRight.Position := dpRight;
|
|
DockRight.Name := 'pcDockRight';
|
|
DockBottom := TPCDock.Create(aOwner);
|
|
DockBottom.Parent := TCustomForm(aOwner);
|
|
DockBottom.Position := dpBottom;
|
|
DockBottom.Name := 'pcDockBottom';
|
|
DockBottom.AllowDrag := True;
|
|
DockBottom.OnResize := botResize;
|
|
Window := TForm(aOwner);
|
|
end;
|
|
|
|
CommandGroups := TList.Create;
|
|
FEnabled := True;
|
|
CanCustomize := True;
|
|
Toolbars := TList.Create;
|
|
CatList := TStringList.Create;
|
|
CommandList := TList.Create;
|
|
CommandBitmap := Tbitmap.Create;
|
|
CommandBitmap.LoadFromResourceName(hInstance, 'COMMANDS');
|
|
OptionsBitmap := Tbitmap.Create;
|
|
OptionsBitmap.LoadFromResourceName(hInstance, 'OPTIONS');
|
|
GradsBitmap := Tbitmap.Create;
|
|
GradsBitmap.LoadFromResourceName(hInstance, 'grad');
|
|
TextureBitmap := Tbitmap.Create;
|
|
TextureBitmap.LoadFromResourceName(hInstance, 'txtmenu');
|
|
|
|
end;
|
|
|
|
{$ifndef Designer}
|
|
procedure TCadInterface.CreateBlockCommands;
|
|
var xList: TStringList;
|
|
i: Integer;
|
|
ToolCommand: TToolCommand;
|
|
grp: TgroupList;
|
|
begin
|
|
// Blocks
|
|
if not assigned(FBlockDlg) then exit;
|
|
xList := TStringList.Create;
|
|
FBlockDlg.GetBlockFileNames(xList);
|
|
for i := 0 to xList.Count -1 do
|
|
begin
|
|
toolCommand := TToolCommand(findCommand(ExtractFileName(xList[i])));
|
|
if toolCommand = nil then
|
|
toolCommand := TToolCommand(NewSubCommand(ExtractFileName(xList[i]),cDrawTool,ciBlocks,GetBitmap(6,7),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toInsertCurrentBlock);
|
|
toolCommand.ToolName := xList[i];
|
|
end;
|
|
xList.Free;
|
|
end;
|
|
{$endif}
|
|
|
|
procedure TCadInterface.CreateCategories;
|
|
begin
|
|
CatList.Add(Cat1);
|
|
CatList.Add(Cat2);
|
|
CatList.Add(Cat3);
|
|
CatList.Add(Cat4);
|
|
CatList.Add(Cat5);
|
|
CatList.Add(Cat6);
|
|
CatList.Add(Cat7);
|
|
CatList.Add(Cat8);
|
|
CatList.Add(Cat14);
|
|
CatList.Add(Cat9);
|
|
CatList.Add(Cat10);
|
|
CatList.Add(Cat11);
|
|
CatList.Add(Cat12);
|
|
CatList.Add(Cat13);
|
|
end;
|
|
|
|
procedure TCadInterface.CreateControls;
|
|
var i,k: integer;
|
|
tbDef: TToolBarDef;
|
|
tb : TPCOfficeBar;
|
|
mn: TMainMenu;
|
|
pCom: TCommandInstance;
|
|
but: TControl;
|
|
orderIndex : integer;
|
|
mnItem: TmenuItem;
|
|
begin
|
|
Window.Visible := False;
|
|
for i := 0 to ToolBars.Count - 1 do
|
|
begin
|
|
tb := nil;
|
|
tbDef := TToolBarDef(Toolbars[i]);
|
|
if tbDef.IsMenu then
|
|
CreateMenuControls(tbDef,i)
|
|
else
|
|
CreateToolBarControls(tbDef,i);
|
|
end;
|
|
Window.Visible := True;
|
|
end;
|
|
|
|
{$ifndef Designer}
|
|
procedure TCadInterface.CreateMacroCommands;
|
|
var xList: TStringList;
|
|
i: Integer;
|
|
fCommand: TPCFileNameCommand;
|
|
begin
|
|
// Macros
|
|
if not assigned(FMacroDlg) then exit;
|
|
xList := TstringList.Create;
|
|
FMacroDlg.GetMacroFileNames(xList);
|
|
for i := 0 to xList.Count -1 do
|
|
begin
|
|
fCommand := TPCFileNameCommand(FindCommand(ExtractFileName(xList[i])));
|
|
if fCommand = nil then
|
|
fCommand := TPCFileNameCommand(NewSubCommand(ExtractFileName(xList[i]),cRunMacro,ciMacros,
|
|
GetBitmap(10,8),TPCFileNameCommand));
|
|
fCommand.FileName := xList[i];
|
|
end;
|
|
xList.Free;
|
|
end;
|
|
{$endif}
|
|
|
|
Procedure TCadInterface.CollectCommands(cList: Tlist;comId: Integer);
|
|
var i:integer;
|
|
xCom: TPCadCommand;
|
|
begin
|
|
For i := 0 to CommandList.Count-1 do
|
|
begin
|
|
xCom := TPCadCommand(CommandList[i]);
|
|
if xCom.ID = ComId then
|
|
begin
|
|
cList.Add(xCom);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
{$ifndef Designer}
|
|
procedure TCadInterface.CreatePluginCommands;
|
|
var vList,xList: TStringList;
|
|
i,k,x,cnt: Integer;
|
|
//fCommand: TPCFileNameCommand;
|
|
fCommand: TCommandList;
|
|
vCom: TPCadCommand;
|
|
pName,vName: String;
|
|
cList: Tlist;
|
|
comList: TCommandList;
|
|
|
|
begin
|
|
// Plugins
|
|
if not assigned(FPluginDlg) then exit;
|
|
xList := TstringList.Create;
|
|
vList := TStringlist.Create;
|
|
cList := TList.Create;
|
|
|
|
CollectCommands(cList,cPluginVerbs);
|
|
FPluginDlg.GetPlugins(xList);
|
|
|
|
for i := 0 to CList.Count-1 do begin
|
|
ComList := TCommandList(cList[i]);
|
|
pName := ComList.Name;
|
|
if xList.IndexOf(pName) = -1 then
|
|
begin
|
|
cnt := ComList.ComList.Count;
|
|
for k := cnt -1 downto 0 do
|
|
begin
|
|
vCom := TPCadCommand(ComList.ComList[k]);
|
|
RemoveCommand(vCom);
|
|
end;
|
|
RemoveCommand(ComList);
|
|
end;
|
|
end;
|
|
|
|
x := 0;
|
|
for i := 0 to xList.Count -1 do
|
|
begin
|
|
pName := xList[i];
|
|
fCommand := TCommandList(FindCommand(pName));
|
|
vList.Text := FPluginDlg.GetPluginVerbs(i);
|
|
if fCommand = nil then
|
|
fCommand := TCommandList(NewSubCommand(pName,cPluginVerbs,ciPlugins,
|
|
nil,TCommandList))
|
|
else begin
|
|
// Check Verbs
|
|
cnt := fCommand.ComList.Count;
|
|
for k := cnt-1 downto 0 do
|
|
begin
|
|
vCom := TPCadCommand(fCommand.ComList[k]);
|
|
vName := vCom.Name;
|
|
if Vlist.IndexOf(vName) = -1 then begin
|
|
RemoveCommand(vCom);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
fCommand.Tag := 0;
|
|
|
|
for k := 0 to vList.Count-1 do
|
|
begin
|
|
x := (i+1)*1000+(k+1);
|
|
vCom := FindCommand(vList[k]);
|
|
if vCom = nil then
|
|
begin
|
|
vCom := NewCommand(vList[k],cRunPlugin,ciPlugins,GetBitmap(10,8));
|
|
fCommand.AddCommand(vCom,false);
|
|
end;
|
|
vCom.Tag := x;
|
|
end;
|
|
end;
|
|
xList.Free;
|
|
vList.Free;
|
|
end;
|
|
{$endif}
|
|
|
|
Function TCadInterface.NewCommand(aName: String; comID:integer;catId: Integer;
|
|
xBitmap: TBitmap):TPCadCommand;
|
|
begin
|
|
Result := TPCadCommand.Create;
|
|
CommandList.Add(Result);
|
|
Result.Name := aName;
|
|
Result.ID := comId;
|
|
Result.CatId := catId;
|
|
Result.Bitmap := xBitmap;
|
|
{$ifndef Designer}
|
|
Result.CadControl := CadControl;
|
|
{$endif}
|
|
Result.GInterface := Self;
|
|
end;
|
|
|
|
Function TCadInterface.NewSubCommand(aName: String; comID:integer;catId: Integer;
|
|
xBitmap: TBitmap; comClass: TCommandClass):TPCadCommand;
|
|
begin
|
|
Result := ComClass.Create;
|
|
CommandList.Add(Result);
|
|
Result.Name := aName;
|
|
Result.ID := comId;
|
|
Result.CatId := catId;
|
|
Result.Bitmap := xBitmap;
|
|
{$ifndef Designer}
|
|
Result.CadControl := CadControl;
|
|
{$endif}
|
|
Result.GInterface := Self;
|
|
end;
|
|
|
|
Function TCadInterface.GetBitmap(col,row: integer): TBitmap;
|
|
var sRect: Trect;
|
|
begin
|
|
result := TBitmap.Create;
|
|
result.Width := 16;
|
|
result.Height := 16;
|
|
Srect := Rect ((col-1)*16,(row-1)*16,col*16,row*16);
|
|
result.Canvas.CopyRect(Rect(0,0,16,16),CommandBitmap.Canvas,sRect);
|
|
end;
|
|
|
|
Function TCadInterface.GetOptBitmap(col,row: integer): TBitmap;
|
|
var sRect: Trect;
|
|
begin
|
|
result := TBitmap.Create;
|
|
result.Width := 32;
|
|
result.Height := 16;
|
|
Srect := Rect ((col-1)*32,(row-1)*16,col*32,row*16);
|
|
result.Canvas.CopyRect(Rect(0,0,32,16),OptionsBitmap.Canvas,sRect);
|
|
end;
|
|
|
|
|
|
Procedure TCadInterface.AddToGroup(Group: TGrouplist; Command: TPCadCommand);
|
|
begin
|
|
Group.Add(Command);
|
|
Command.GroupOwner := Group;
|
|
end;
|
|
|
|
|
|
procedure TCadInterface.CreateStandartCommands;
|
|
var oCommand : TPCOptionsCommand;
|
|
cCommand : TPCColorCommand;
|
|
pCom: TPCadCommand;
|
|
toCommand: TPCToggleCommand;
|
|
iCommand: TInfoCommand;
|
|
i: Integer;
|
|
cListFile,cListEdit,cListArrange,cListOrder,cListAlign,
|
|
cListFormat,cListView,CListFontS,cListInsert,
|
|
cListZoom,cListTools,cListOptions :TCommandlist;
|
|
{$ifndef Designer}
|
|
{$endif}
|
|
ToolsGroup: TGroupList;
|
|
toolCommand : TToolCommand;
|
|
eCommand:TEditCommand;
|
|
GOwner:Pointer;
|
|
begin
|
|
GOwner := nil;
|
|
{$ifndef Designer}
|
|
GOwner := CadControl;
|
|
{$endif}
|
|
ToolsGroup := NewGroup('Tools',GOwner);
|
|
|
|
|
|
|
|
// File Commands
|
|
cListFile := TCommandList(NewSubCommand(csFile,cFile,ciMenus,nil,TCommandList));
|
|
cListFile.AddCommand(NewCommand(csNew,cNew,ciFile,GetBitmap(1,1)),False);
|
|
cListFile.AddCommand(NewCommand(csOpen,cOpen,ciFile,GetBitmap(2,1)),False);
|
|
cListFile.AddCommand(NewCommand(csSave,cSave,ciFile,GetBitmap(3,1)),False);
|
|
cListFile.AddCommand(NewCommand(csSaveAs,cSaveAs,ciFile,nil),False);
|
|
cListFile.AddCommand(NewCommand(csPrint,cPrint,ciFile,GetBitmap(4,1)),True);
|
|
cListFile.AddCommand(NewCommand(csPSetUp,cPrinterSetup,ciFile,GetBitmap(5,1)),False);
|
|
cListFile.AddCommand(NewCommand(csPPView,cPrintPreview,ciFile,GetBitmap(6,1)),False);
|
|
cListFile.AddCommand(NewCommand(csImport,cImportDrawing,ciFile,nil),True);
|
|
cListFile.AddCommand(NewCommand(csExport,cExportDrawing,ciFile,nil),False);
|
|
cListFile.AddCommand(NewCommand(csExit,cExit,ciFile,nil),True);
|
|
|
|
// Drawing Commands
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csSelect,cDrawTool,ciDraw,GetBitmap(8,1),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toSelect);
|
|
toolCommand.ToolName := '';
|
|
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csLine,cDrawTool,ciDraw,GetBitmap(9,1),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TLine';
|
|
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csRect,cDrawTool,ciDraw,GetBitmap(10,1),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TRectangle';
|
|
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csEllipse,cDrawTool,ciDraw,GetBitmap(1,2),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TEllipse';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csCircle,cDrawTool,ciDraw,GetBitmap(2,2),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TCircle';
|
|
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csArc,cDrawTool,ciDraw,GetBitmap(3,2),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TArc';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csElpArc,cDrawTool,ciDraw,GetBitmap(6,13),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TElpArc';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csPLine,cDrawTool,ciDraw,GetBitmap(4,2),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TPolyline';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csFreehand,cDrawTool,ciDraw,GetBitmap(8,12),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TFreehand';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csVertex,cDrawTool,ciDraw,GetBitmap(5,2),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TVertex';
|
|
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csText,cDrawTool,ciDraw,GetBitmap(6,2),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TText';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csTextPanel,cDrawTool,ciDraw,GetBitmap(7,2),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TTextPanel';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csKnife,cDrawTool,ciDraw,GetBitmap(8,13),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TKnife';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csHorzDim,cDrawTool,ciDraw,GetBitmap(2,9),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'THDimline';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csVertDim,cDrawTool,ciDraw,GetBitmap(1,9),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TVDimline';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csAlignedDim,cDrawTool,ciDraw,GetBitmap(3,9),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TADimline';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csRadiusDim,cDrawTool,ciDraw,GetBitmap(4,13),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TCDimline';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csAngleDim,cDrawTool,ciDraw,GetBitmap(5,13),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TArcDimline';
|
|
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then begin
|
|
ToolsGroup.EventHandle := CadControl.RegisterEvent(cDrawTool,Self,GUIEventCallback);
|
|
ToolsGroup.EventId := cDrawTool;
|
|
end;
|
|
{$endif}
|
|
|
|
// Edit Commands
|
|
cListEdit := TCommandList(NewSubCommand(csEdit,cEdit,ciMenus,nil,TCommandList));
|
|
cListEdit.AddCommand(NewCommand(csUndo,cUndo,ciEdit,GetBitmap(9,2)),False);
|
|
cListEdit.AddCommand(NewCommand(csRedo,cRedo,ciEdit,GetBitmap(10,2)),False);
|
|
cListEdit.AddCommand(NewCommand(csCut,cCut,ciEdit,GetBitmap(1,3)),True);
|
|
cListEdit.AddCommand(NewCommand(csCopy,cCopy,ciEdit,GetBitmap(2,3)),False);
|
|
cListEdit.AddCommand(NewCommand(csPaste,cPaste,ciEdit,GetBitmap(3,3)),False);
|
|
cListEdit.AddCommand(NewCommand(csDelete,cDelete,ciEdit,GetBitmap(4,3)),True);
|
|
cListEdit.AddCommand(NewCommand(csClear,cClear,ciEdit,nil),False);
|
|
cListEdit.AddCommand(NewCommand(csSelectAll,cSelectAll,ciEdit,nil),True);
|
|
cListEdit.AddCommand(NewCommand(csDeSelectAll,cDeselectAll,ciEdit,nil),False);
|
|
cListEdit.AddCommand(NewCommand(csInvertSelection,cInvertSelection,ciEdit,nil),False);
|
|
|
|
|
|
// Arrrange Commands
|
|
cListArrange := TCommandList(NewSubCommand(csArrange,cArrange,ciMenus,nil,TCommandList));
|
|
|
|
pCom := NewCommand(csGroup,cGroup,ciArrange,GetBitmap(5,3));
|
|
pCom.EventId := cAnySel;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then pCom.Eventhandle := CadControl.RegisterEvent(cAnySel,pCom,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(pCom,False);
|
|
|
|
pCom := NewCommand(csUnGroup,cUngroup,ciArrange,GetBitmap(6,3));
|
|
pCom.EventId := cGroupSel;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then pCom.Eventhandle := CadControl.RegisterEvent(cGroupSel,pCom,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(pCom,False);
|
|
|
|
pCom := NewCommand(csConvertToBezier,cConvertToBezier,ciArrange,GetBitmap(10,13));
|
|
pCom.EventId := cAnySel;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then pCom.Eventhandle := CadControl.RegisterEvent(cAnySel,pCom,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(pCom,False);
|
|
|
|
pCom := NewCommand(csInterBreak,cInterbreak,ciArrange,GetBitmap(9,13));
|
|
pCom.EventId := cAnySel;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then pCom.Eventhandle := CadControl.RegisterEvent(cAnySel,pCom,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(pCom,False);
|
|
|
|
pCom := NewCommand(csOffset,cOffset,ciArrange,GetBitmap(7,13));
|
|
pCom.EventId := cAnySel;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then pCom.Eventhandle := CadControl.RegisterEvent(cAnySel,pCom,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(pCom,False);
|
|
|
|
|
|
|
|
// Order Commands
|
|
cListOrder := TCommandList(NewSubCommand(csOrder,cOrder,ciMenus,GetBitmap(7,3),TCommandList));
|
|
cListOrder.AddCommand(NewCommand(csBtf,cBringToFront,ciArrange,GetBitmap(7,3)),False);
|
|
cListOrder.AddCommand(NewCommand(csStb,cSendToBack,ciArrange,GetBitmap(8,3)),False);
|
|
cListOrder.AddCommand(NewCommand(csbfw,cBringForward,ciArrange,GetBitmap(9,3)),False);
|
|
cListOrder.AddCommand(NewCommand(csSbw,cSendBackward,ciArrange,GetBitmap(10,3)),False);
|
|
cListArrange.AddCommand(cListOrder,True);
|
|
|
|
// Align Commands
|
|
cListAlign := TCommandList(NewSubCommand(csAlign,cAlign,ciMenus,GetBitmap(1,6),TCommandList));
|
|
cListAlign.AddCommand(NewCommand(csAlTop,cAlignTops,ciArrange,GetBitmap(1,6)),False);
|
|
cListAlign.AddCommand(NewCommand(csAlBottom,cAlignBottoms,ciArrange,GetBitmap(2,6)),False);
|
|
cListAlign.AddCommand(NewCommand(csAlXCenter,cAlignXCenters,ciArrange,GetBitmap(3,6)),False);
|
|
cListAlign.AddCommand(NewCommand(csDistXCenter,cDistrubuteHorizontal,ciArrange,GetBitmap(4,6)),False);
|
|
cListAlign.AddCommand(NewCommand(csAlLeft,cAlignLefts,ciArrange,GetBitmap(5,6)),True);
|
|
cListAlign.AddCommand(NewCommand(csAlRight,cAlignRights,ciArrange,GetBitmap(6,6)),False);
|
|
cListAlign.AddCommand(NewCommand(csAlYCenter,cAlignYCenters,ciArrange,GetBitmap(7,6)),False);
|
|
cListAlign.AddCommand(NewCommand(csDistYCenter,cDistrubuteVertical,ciArrange,GetBitmap(8,6)),False);
|
|
cListArrange.AddCommand(cListAlign,False);
|
|
|
|
pCom := NewCommand(csInvertArc,cInvertArc,ciArrange,GetBitmap(1,4));
|
|
pCom.EventId := cArcSel;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then pcom.EventHandle := CadControl.RegisterEvent(cArcSel,pCom,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(pCom,True);
|
|
oCommand := TPCOptionsCommand(NewSubCommand(csArcStyle,cArcStyle,ciArrange,nil,TPCOptionsCommand));
|
|
oCommand.AddOption(GetBitmap(2,4),csASOpen);
|
|
oCommand.AddOption(GetBitmap(3,4),csASPie);
|
|
oCommand.AddOption(GetBitmap(4,4),csASChord);
|
|
oCommand.EventId := cArcStyle;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then oCommand.EventHandle := CadControl.RegisterEvent(cArcStyle,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(oCommand,False);
|
|
NewCommand(csASOpen,cArcStyleOPen,ciArrange,GetBitmap(2,4));
|
|
NewCommand(csASPie,cArcStylePie,ciArrange,GetBitmap(3,4));
|
|
NewCommand(csASChord,cArcStyleChord,ciArrange,GetBitmap(4,4));
|
|
|
|
toCommand := TPCToggleCommand(NewSubCommand(csTransparentImage,cTransparentImage,ciArrange,GetBitmap(3,8),TPCToggleCommand));
|
|
toCommand.EventId := cTransparentImage;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cTransparentImage,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(toCommand,True);
|
|
|
|
//toCommand := TPCToggleCommand(NewSubCommand(csClipImage,cClipImage,ciArrange,GetBitmap(4,8),TPCToggleCommand));
|
|
//toCommand.EventId := cClipImage;
|
|
{$ifndef Designer}
|
|
//if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cClipImage,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
//cListArrange.AddCommand(toCommand,False);
|
|
|
|
pCom := NewCommand(csFlipHorz,cFlipImageHorizontal,ciArrange,GetBitmap(5,4));
|
|
pCom.EventId := cBmpSel;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then pcom.EventHandle := CadControl.RegisterEvent(cBmpSel,pCom,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(pCom,False);
|
|
pCom := NewCommand(csFlipVert,cFlipImageVertical,ciArrange,GetBitmap(6,4));
|
|
pCom.EventId := cBmpSel;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then pcom.EventHandle := CadControl.RegisterEvent(cBmpSel,pCom,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(pCom,False);
|
|
|
|
toCommand := TPCToggleCommand(NewSubCommand(csBoundLine,cBoundLine,ciArrange,GetBitmap(5,8),TPCToggleCommand));
|
|
toCommand.EventId := cBoundLine;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cBoundLine,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(toCommand,True);
|
|
|
|
pCom := NewCommand(csWeldIntoPolyLine,cWeldIntoPolyLine,ciArrange,GetBitmap(6,8));
|
|
pCom.EventId := cAnySel;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then pcom.EventHandle := CadControl.RegisterEvent(cLineSel,pCom,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(pCom,False);
|
|
|
|
pCom := NewCommand(csConvertBeziertoPolyLine,cConvertBeziertoPolyLine,ciArrange,GetBitmap(7,8));
|
|
pCom.EventId := cPLineSel;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then pcom.EventHandle := CadControl.RegisterEvent(cPLineSel,pCom,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(pCom,False);
|
|
|
|
pCom := NewCommand(csConvertPolyLinetoBezier,cConvertPolyLinetoBezier,ciArrange,GetBitmap(8,8));
|
|
pCom.EventId := cPLineSel;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then pcom.EventHandle := CadControl.RegisterEvent(cPLineSel,pCom,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(pCom,False);
|
|
|
|
toCommand := TPCToggleCommand(NewSubCommand(csPolyLineClosed,cPolyLineClosed,ciArrange,GetBitmap(9,8),TPCToggleCommand));
|
|
toCommand.EventId := cPolyLineClosed;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cPolyLineClosed,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListArrange.AddCommand(toCommand,False);
|
|
|
|
|
|
// Modify Commands
|
|
|
|
cListFormat := TCommandList(NewSubCommand(csFormat,cFormat,ciMenus,nil,TCommandList));
|
|
|
|
oCommand := TPCOptionsCommand(NewSubCommand(csPenStyle,cPenStyle,ciModify,nil,TPCOptionsCommand));
|
|
oCommand.AddOption(GetOptBitmap(1,1),csSolid);
|
|
oCommand.AddOption(GetOptBitmap(1,2),csDash);
|
|
oCommand.AddOption(GetOptBitmap(1,3),csDot);
|
|
oCommand.AddOption(GetOptBitmap(1,4),csDashDot);
|
|
oCommand.AddOption(GetOptBitmap(1,5),csDashDotDot);
|
|
oCommand.AddOption(GetOptBitmap(1,6),csClearPen);
|
|
oCommand.EventId := cPenStyle;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then oCommand.EventHandle := CadControl.RegisterEvent(cPenStyle,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListFormat.AddCommand(oCommand,False);
|
|
|
|
|
|
cCommand := TPCColorCommand(NewSubCommand(csPenColor,cPenColor,ciModify,GetBitmap(7,4),TPCColorCommand));
|
|
cCommand.EventId := cPenColor;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then cCommand.EventHandle := CadControl.RegisterEvent(cPenColor,cCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListFormat.AddCommand(cCommand,False);
|
|
|
|
oCommand := TPCOptionsCommand(NewSubCommand(csPenWidth,cPenWidth,ciModify,nil,TPCOptionsCommand));
|
|
oCommand.AddOption(GetOptBitmap(4,1),csPw1);
|
|
oCommand.AddOption(GetOptBitmap(4,2),csPw2);
|
|
oCommand.AddOption(GetOptBitmap(4,3),csPw3);
|
|
oCommand.AddOption(GetOptBitmap(4,4),csPw4);
|
|
oCommand.AddOption(GetOptBitmap(4,5),csPw5);
|
|
oCommand.AddOption(GetOptBitmap(4,6),csPw6);
|
|
oCommand.AddOption(GetOptBitmap(4,7),csPw7);
|
|
oCommand.AddOption(GetOptBitmap(4,8),csPw8);
|
|
oCommand.EventId := cPenWidth;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then oCommand.EventHandle := CadControl.RegisterEvent(cPenWidth,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListFormat.AddCommand(oCommand,False);
|
|
|
|
|
|
oCommand := TPCOptionsCommand(NewSubCommand(csRowStyle,cRowStyle,ciModify,nil,TPCOptionsCommand));
|
|
oCommand.AddOption(GetOptBitmap(2,1),csNoRow);
|
|
oCommand.AddOption(GetOptBitmap(2,2),csRightSolid);
|
|
oCommand.AddOption(GetOptBitmap(2,3),csLeftSolid);
|
|
oCommand.AddOption(GetOptBitmap(2,4),csBothSolid);
|
|
oCommand.AddOption(GetOptBitmap(2,5),csRightLight);
|
|
oCommand.AddOption(GetOptBitmap(2,6),csLeftLight);
|
|
oCommand.AddOption(GetOptBitmap(2,7),csBothLight);
|
|
oCommand.EventId := cRowStyle;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then oCommand.EventHandle := CadControl.RegisterEvent(cRowStyle,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListFormat.AddCommand(oCommand,False);
|
|
|
|
|
|
cCommand := TPCColorCommand(NewSubCommand(csBrushColor,cBrushColor,ciModify,GetBitmap(8,4),TPCColorCommand));
|
|
cCommand.EventId := cBrushColor;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then cCommand.EventHandle := CadControl.RegisterEvent(cBrushColor,cCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListFormat.AddCommand(cCommand,True);
|
|
|
|
|
|
oCommand := TPCOptionsCommand(NewSubCommand(csBrushStyle,cBrushStyle,ciModify,nil,TPCOptionsCommand));
|
|
oCommand.AddOption(GetOptBitmap(3,1),csSolidBrs,0);
|
|
oCommand.AddOption(GetOptBitmap(3,2),csClearBrs,1);
|
|
oCommand.AddOption(GetOptBitmap(3,9),csBrsDialog,8);
|
|
oCommand.AddOption(GetOptBitmap(3,3),cbsHorizontalBrs,2,True);
|
|
oCommand.AddOption(GetOptBitmap(3,4),csVerticalBrs,3);
|
|
oCommand.AddOption(GetOptBitmap(3,5),csFDiagonalBrs,4);
|
|
oCommand.AddOption(GetOptBitmap(3,6),csBDiagonalBrs,5);
|
|
oCommand.AddOption(GetOptBitmap(3,7),csCrossBrs,6);
|
|
oCommand.AddOption(GetOptBitmap(3,8),csDiagCrossBrs,7);
|
|
|
|
|
|
oCommand.AddOption(GetGradBitmap(1),csHorzGrad,9,True);
|
|
oCommand.AddOption(GetGradBitmap(2),csVertGrad,10);
|
|
oCommand.AddOption(GetGradBitmap(3),csRadGrad,11);
|
|
oCommand.AddOption(GetGradBitmap(4),csDiagFGrad,12);
|
|
oCommand.AddOption(GetGradBitmap(5),csDiagBGrad,13);
|
|
oCommand.AddOption(GetGradBitmap(6),csMirrorGrad,14);
|
|
|
|
oCommand.AddOption(GetTxtBitmap(1),cstxtNewsPrint,15,True);
|
|
oCommand.AddOption(GetTxtBitmap(2),cstxtStationery,16);
|
|
oCommand.AddOption(GetTxtBitmap(3),cstxtWhiteMarble,17);
|
|
oCommand.AddOption(GetTxtBitmap(4),cstxtWovenMat,18);
|
|
oCommand.AddOption(GetTxtBitmap(5),cstxtPaperBag,19);
|
|
oCommand.AddOption(GetTxtBitmap(6),cstxtMediumWood,20);
|
|
|
|
|
|
|
|
oCommand.EventId := cBrushStyle;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then oCommand.EventHandle := CadControl.RegisterEvent(cBrushStyle,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListFormat.AddCommand(oCommand,False);
|
|
|
|
cCommand := TPCColorCommand(NewSubCommand(csTextColor,cTextColor,ciModify,GetBitmap(3,5),TPCColorCommand));
|
|
cCommand.EventId := cTextColor;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then cCommand.EventHandle := CadControl.RegisterEvent(cTextColor,cCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListFormat.AddCommand(cCommand,True);
|
|
|
|
pCom := NewSubCommand(csFontName,cFontName,ciModify,nil,TPCFontNameCommand);
|
|
pCom.EventId := cFontName;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then pCom.EventHandle := CadControl.RegisterEvent(cFontName,pCom,GUIEventCallback);
|
|
{$endif}
|
|
//cListFormat.AddCommand(pCom,False);
|
|
|
|
pCom := NewSubCommand(csTextSize,cTextSize,ciModify,nil,TPCTextSizeCommand);
|
|
pCom.EventId := cTextSize;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then pCom.EventHandle := CadControl.RegisterEvent(cTextSize,pCom,GUIEventCallback);
|
|
{$endif}
|
|
oCommand := TPCOptionsCommand(NewSubCommand(csTextCharset,cTextCharset,ciModify,nil,TPCOptionsCommand));
|
|
oCommand.UseText := True;
|
|
for i := 0 to 17 do
|
|
oCommand.AddOption(GetBitmap(5,12),csCharSet[i]);
|
|
oCommand.EventId := cTextCharset;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then oCommand.EventHandle := CadControl.RegisterEvent(cTextCharset,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListFormat.AddCommand(oCommand,False);
|
|
|
|
|
|
cListFontS := TCommandList(NewSubCommand(csFontStyle,cFontStyle,ciMenus,nil,TCommandList));
|
|
toCommand := TPCToggleCommand(NewSubCommand(csBold,cBold,ciModify,GetBitmap(9,4),TPCToggleCommand));
|
|
toCommand.EventId := cBold;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cBold,toCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListFontS.AddCommand(toCommand,False);
|
|
|
|
toCommand := TPCToggleCommand(NewSubCommand(csItalic,cItalic,ciModify,GetBitmap(10,4),TPCToggleCommand));
|
|
toCommand.EventId := cItalic;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cItalic,toCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListFontS.AddCommand(toCommand,False);
|
|
|
|
toCommand := TPCToggleCommand(NewSubCommand(csUnderLine,cUnderline,ciModify,GetBitmap(1,5),TPCToggleCommand));
|
|
toCommand.EventId := cUnderline;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cUnderline,toCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListFontS.AddCommand(toCommand,False);
|
|
|
|
toCommand := TPCToggleCommand(NewSubCommand(csStrike,cStrike,ciModify,GetBitmap(2,5),TPCToggleCommand));
|
|
toCommand.EventId := cStrike;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cStrike,toCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListFontS.AddCommand(toCommand,False);
|
|
cListFormat.AddCommand(cListFontS,False);
|
|
|
|
// Transform Commands
|
|
toolCommand := TToolCommand(NewSubCommand(csMove,cDrawTool,ciTransform,GetBitmap(5,5),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toOperation);
|
|
toolCommand.ToolName := 'TMove';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csDuplicate,cDrawTool,ciTransform,GetBitmap(6,5),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toOperation);
|
|
toolCommand.ToolName := 'TDuplicate';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csDuplicateAsBezier,cDrawTool,ciTransform,GetBitmap(10,13),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toOperation);
|
|
toolCommand.ToolName := 'TDuplicateAsBezier';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csRotate,cDrawTool,ciTransform,GetBitmap(7,5),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toOperation);
|
|
toolCommand.ToolName := 'TRotate';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csMirror,cDrawTool,ciTransform,GetBitmap(8,5),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toOperation);
|
|
toolCommand.ToolName := 'TMirror';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csArrayR,cDrawTool,ciTransform,GetBitmap(9,5),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toOperation);
|
|
toolCommand.ToolName := 'TArrayRect';
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csArrayP,cDrawTool,ciTransform,GetBitmap(10,5),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toOperation);
|
|
toolCommand.ToolName := 'TArrayPol';
|
|
NewCommand(csTransformDlg,cTransformDlg,5,GetBitmap(7,5));
|
|
|
|
//Insert
|
|
|
|
cListInsert := TCommandList(NewSubCommand(csInsert,cInsert,ciMenus,nil,TCommandList));
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csInsertPicture,cDrawTool,ciInsert,GetBitmap(10,6),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TBmpObject';
|
|
cListInsert.AddCommand(toolCommand,False);
|
|
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csInsertBlock,cDrawTool,ciInsert,GetBitmap(1,7),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toInsertBlock);
|
|
toolCommand.ToolName := '';
|
|
cListInsert.AddCommand(toolCommand,False);
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csRText,cDrawTool,ciInsert,GetBitmap(7,2),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TRichText';
|
|
cListInsert.AddCommand(toolCommand,False);
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csOle,cDrawTool,ciInsert,GetBitmap(8,2),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TOleObject';
|
|
cListInsert.AddCommand(toolCommand,False);
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csMathGraph,cDrawTool,ciInsert,GetBitmap(9,6),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toFigure);
|
|
toolCommand.ToolName := 'TMathGraph';
|
|
cListInsert.AddCommand(toolCommand,False);
|
|
|
|
|
|
//View
|
|
cListView := TCommandList(NewSubCommand(csView,cView,ciMenus,nil,TCommandList));
|
|
|
|
//cListView.AddCommand(NewCommand(csShowProp,cShowProperties,ciView,GetBitmap(3,7)),false);
|
|
cListView.AddCommand(NewCommand(csLayersDial,cLayersDialog,ciView,GetBitmap(4,7)),false);
|
|
cListView.AddCommand(NewCommand(csActualSize,cActualSize,ciView,GetBitmap(8,7)),false);
|
|
cListView.AddCommand(NewCommand(csFitToPage,cFitToPage,ciView,GetBitmap(9,7)),false);
|
|
cListView.AddCommand(NewCommand(csZoomIn,cZoomIn,ciView,GetBitmap(10,7)),false);
|
|
cListView.AddCommand(NewCommand(csZoomOut,cZoomOut,ciView,GetBitmap(1,8)),false);
|
|
|
|
toolCommand := TToolCommand(NewSubCommand(csZoomArea,cDrawTool,ciView,GetBitmap(2,8),TToolCommand));
|
|
toolCommand.ToolIndex := ord(toZoom);
|
|
toolCommand.ToolName := '';
|
|
cListView.AddCommand(toolCommand,false);
|
|
|
|
cListZoom := TCommandList(NewSubCommand(csZoom,cZoom,ciView,nil,TCommandList));
|
|
cListZoom.AddCommand(NewCommand(csZoom50,cZoom50,ciView,nil),False);
|
|
cListZoom.AddCommand(NewCommand(csZoom75,cZoom75,ciView,nil),False);
|
|
cListZoom.AddCommand(NewCommand(csZoom25,cZoom25,ciView,nil),False);
|
|
cListZoom.AddCommand(NewCommand(csZoom150,cZoom150,ciView,nil),False);
|
|
cListZoom.AddCommand(NewCommand(csZoom200,cZoom200,ciView,nil),False);
|
|
cListZoom.AddCommand(NewCommand(csZoom125,cZoom125,ciView,nil),False);
|
|
cListZoom.AddCommand(NewCommand(csZoom175,cZoom175,ciView,nil),False);
|
|
cListView.AddCommand(cListZoom,false);
|
|
|
|
// Tools
|
|
cListTools := TCommandList(NewSubCommand(csTools,cTools,ciMenus,nil,TCommandList));
|
|
cListTools.AddCommand(NewCommand(csBlockManager,cBlocksManager,ciTools,GetBitmap(6,7)),False);
|
|
cListTools.AddCommand(NewCommand(csMacroManager,cMacroManager,ciTools,GetBitmap(7,7)),False);
|
|
cListTools.AddCommand(NewCommand(csPluginManager,cPluginManager,ciTools,GetBitmap(6,12)),False);
|
|
//cListTools.AddCommand(NewCommand(csEnvironmentOptions,cEnvironmentOptions,ciTools,GetBitmap(5,7)),False);
|
|
cListTools.AddCommand(NewCommand(csCustomize,cCustomize,ciTools,nil),False);
|
|
cListTools.AddCommand(NewCommand(csMakeBlock,cMakeBlock,ciTools,GetBitmap(8,10)),False);
|
|
|
|
// Option Commands
|
|
cListOptions := TCommandList(NewSubCommand(csOptions,cOptions,ciMenus,nil,TCommandList));
|
|
|
|
|
|
toCommand := TPCToggleCommand(NewSubCommand(csRulers,cRulers,ciOptions,GetBitmap(4,9),TPCToggleCommand));
|
|
toCommand.EventId := cRulers;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cRulers,toCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(toCommand,False);
|
|
|
|
toCommand := TPCToggleCommand(NewSubCommand(csGrids,cGrids,ciOptions,GetBitmap(5,9),TPCToggleCommand));
|
|
toCommand.EventId := cGrids;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cGrids,toCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(toCommand,False);
|
|
|
|
oCommand := TPCOptionsCommand(NewSubCommand(csGridType,cGridType,ciOptions,nil,TPCOptionsCommand));
|
|
oCommand.UseText := True;
|
|
oCommand.AddOption(GetBitmap(9,12),csLineGrid);
|
|
oCommand.AddOption(GetBitmap(10,12),csPointGrid);
|
|
oCommand.AddOption(GetBitmap(3,13),csCrossGrid);
|
|
oCommand.EventId := cGridType;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then oCommand.EventHandle := CadControl.RegisterEvent(cGridType,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(oCommand,False);
|
|
|
|
toCommand := TPCToggleCommand(NewSubCommand(csCenterGuides,cCenterGuides,ciOptions,GetBitmap(7,12),TPCToggleCommand));
|
|
toCommand.EventId := cCenterGuides;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cCenterGuides,toCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(toCommand,False);
|
|
|
|
|
|
|
|
toCommand := TPCToggleCommand(NewSubCommand(csGuides,cGuides,ciOptions,GetBitmap(6,9),TPCToggleCommand));
|
|
toCommand.EventId := cGuides;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cGuides,toCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(toCommand,False);
|
|
|
|
toCommand := TPCToggleCommand(NewSubCommand(csSnapGrid,cSnapGrid,ciOptions,GetBitmap(7,9),TPCToggleCommand));
|
|
toCommand.EventId := cSnapGrid;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cSnapGrid,toCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(toCommand,False);
|
|
|
|
toCommand := TPCToggleCommand(NewSubCommand(csSnapGuides,cSnapGuides,ciOptions,GetBitmap(8,9),TPCToggleCommand));
|
|
toCommand.EventId := cSnapGuides;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cSnapGuides,toCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(toCommand,False);
|
|
|
|
toCommand := TPCToggleCommand(NewSubCommand(csSnapObject,cSnapObject,ciOptions,GetBitmap(9,9),TPCToggleCommand));
|
|
toCommand.EventId := cSnapObject;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then toCommand.EventHandle := CadControl.RegisterEvent(cSnapObject,toCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(toCommand,False);
|
|
|
|
|
|
cCommand := TPCColorCommand(NewSubCommand(csGridColor,cGridColor,ciOptions,GetBitmap(5,9),TPCColorCommand));
|
|
cCommand.EventId := cGridColor;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then cCommand.EventHandle := CadControl.RegisterEvent(cGridColor,cCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(cCommand,False);
|
|
|
|
cCommand := TPCColorCommand(NewSubCommand(csGuideColor,cGuideColor,ciOptions,GetBitmap(6,9),TPCColorCommand));
|
|
cCommand.EventId := cGuideColor;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then cCommand.EventHandle := CadControl.RegisterEvent(cGuideColor,cCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(cCommand,False);
|
|
|
|
cCommand := TPCColorCommand(NewSubCommand(csBackColor,cBackColor,ciOptions,GetBitmap(10,10),TPCColorCommand));
|
|
cCommand.EventId := cBackColor;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then cCommand.EventHandle := CadControl.RegisterEvent(cBackColor,cCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(cCommand,False);
|
|
|
|
cCommand := TPCColorCommand(NewSubCommand(csPageColor,cPageColor,ciOptions,GetBitmap(9,10),TPCColorCommand));
|
|
cCommand.EventId := cPageColor;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then cCommand.EventHandle := CadControl.RegisterEvent(cPageColor,cCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(cCommand,False);
|
|
|
|
oCommand := TPCOptionsCommand(NewSubCommand(csAngularGuides,cAngularGuides,ciOptions,nil,TPCOptionsCommand));
|
|
oCommand.UseText := True;
|
|
oCommand.AddOption(GetBitmap(4,10),csAGNone);
|
|
oCommand.AddOption(GetBitmap(10,9),csAG90);
|
|
oCommand.AddOption(GetBitmap(2,10),csAG30);
|
|
oCommand.AddOption(GetBitmap(1,10),csAG45);
|
|
oCommand.AddOption(GetBitmap(3,10),csAG60);
|
|
oCommand.EventId := cAngularGuides;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then oCommand.EventHandle := CadControl.RegisterEvent(cAngularGuides,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(oCommand,False);
|
|
|
|
oCommand := TPCOptionsCommand(NewSubCommand(csRulerSystem,cRulerSystem,ciOptions,nil,TPCOptionsCommand));
|
|
oCommand.UseText := True;
|
|
oCommand.AddOption(GetBitmap(6,10),csMetric);
|
|
oCommand.AddOption(GetBitmap(7,10),csInch);
|
|
oCommand.EventId := cRulerSystem;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then oCommand.EventHandle := CadControl.RegisterEvent(cRulerSystem,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(oCommand,False);
|
|
|
|
oCommand := TPCOptionsCommand(NewSubCommand(csRulerMode,cRulerMode,ciOptions,nil,TPCOptionsCommand));
|
|
oCommand.UseText := True;
|
|
oCommand.AddOption(GetBitmap(2,13),csPage);
|
|
oCommand.AddOption(GetBitmap(1,13),csWorld);
|
|
oCommand.EventId := cRulerMode;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then oCommand.EventHandle := CadControl.RegisterEvent(cRulerMode,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(oCommand,False);
|
|
|
|
|
|
|
|
oCommand := TPCOptionsCommand(NewSubCommand(csPageLo,cPageLo,ciOptions,nil,TPCOptionsCommand));
|
|
oCommand.UseText := False;
|
|
oCommand.AddOption(GetBitmap(6,11),csA0);
|
|
oCommand.AddOption(GetBitmap(7,11),csA1);
|
|
oCommand.AddOption(GetBitmap(8,11),csA2);
|
|
oCommand.AddOption(GetBitmap(9,11),csA3);
|
|
oCommand.AddOption(GetBitmap(5,11),csA4);
|
|
oCommand.AddOption(GetBitmap(4,11),csA5);
|
|
oCommand.AddOption(GetBitmap(3,11),csA6);
|
|
oCommand.AddOption(GetBitmap(10,11),csB4);
|
|
oCommand.AddOption(GetBitmap(1,12),csB5);
|
|
oCommand.AddOption(GetBitmap(2,12),csTabloid);
|
|
oCommand.AddOption(GetBitmap(3,12),csLetter);
|
|
oCommand.AddOption(GetBitmap(4,12),csCustom);
|
|
oCommand.EventId := cPageLo;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then oCommand.EventHandle := CadControl.RegisterEvent(cPageLo,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(oCommand,False);
|
|
|
|
oCommand := TPCOptionsCommand(NewSubCommand(csPageOr,cPageOr,ciOptions,nil,TPCOptionsCommand));
|
|
oCommand.UseText := True;
|
|
oCommand.AddOption(GetBitmap(2,11),csLandscape);
|
|
oCommand.AddOption(GetBitmap(1,11),csPortrait);
|
|
oCommand.EventId := cPageOr;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then oCommand.EventHandle := CadControl.RegisterEvent(cPageOr,oCommand,GUIEventCallback);
|
|
{$endif}
|
|
cListOptions.AddCommand(oCommand,False);
|
|
|
|
cListOptions.AddCommand(NewCommand(csSetGridStep,cGridStep,ciOptions,nil),True);
|
|
cListOptions.AddCommand(NewCommand(csSetMapScale,cMapScale,ciOptions,nil),False);
|
|
cListOptions.AddCommand(NewCommand(csPageWidth,cPageWidth,ciOptions,nil),False);
|
|
cListOptions.AddCommand(NewCommand(csPageHeight,cPageHeight,ciOptions,nil),False);
|
|
|
|
iCommand := TInfoCommand(NewSubCommand(csInfoXY,cInfoXY,ciOptions,nil,TInfoCommand));
|
|
iCommand.EventId := cInfoXY;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then iCommand.Eventhandle := CadControl.RegisterEvent(cInfoXY,iCommand,GUIEventCallback);
|
|
{$endif}
|
|
|
|
iCommand := TInfoCommand(NewSubCommand(csInfoDim,cInfoDim,ciOptions,nil,TInfoCommand));
|
|
iCommand.EventId := cInfoDim;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then iCommand.Eventhandle := CadControl.RegisterEvent(cInfoDim,iCommand,GUIEventCallback);
|
|
{$endif}
|
|
|
|
iCommand := TInfoCommand(NewSubCommand(csInfoMes,cInfoMes,ciOptions,nil,TInfoCommand));
|
|
iCommand.EventId := cInfoMes;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then iCommand.Eventhandle := CadControl.RegisterEvent(cInfoMes,iCommand,GUIEventCallback);
|
|
{$endif}
|
|
|
|
eCommand := TEditCommand(NewSubCommand(csCommandEdit,cCommEdit,ciOptions,nil,TEditCommand));
|
|
end;
|
|
|
|
procedure TCadInterface.Customize;
|
|
var frm: TFrmCustom;
|
|
|
|
begin
|
|
frm := TFrmCustom.Create(application);
|
|
frm.GUI := self;
|
|
frm.DesignMode := False;
|
|
frm.ShowModal;
|
|
SaveToFile(FFileName);
|
|
CreateControls;
|
|
frm.Free;
|
|
if assigned(FOnCustomized) then FOnCustomized(Self);
|
|
end;
|
|
|
|
function TCadInterface.FindCommand(ComName:String): TPcadCommand;
|
|
var i:integer;
|
|
xCom: TPCadCommand;
|
|
begin
|
|
Result := nil;
|
|
For i := 0 to CommandList.Count-1 do
|
|
begin
|
|
xCom := TPCadCommand(CommandList[i]);
|
|
if xCom.Name = ComName then
|
|
begin
|
|
result := xCom;
|
|
exit;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TCadInterface.LoadFromReg;
|
|
begin
|
|
|
|
end;
|
|
|
|
|
|
function TCadInterface.NewMenu(aName: String; catID,comId: Integer;
|
|
Bitmap: TBitmap): TCommandList;
|
|
begin
|
|
Result := TCommandList.Create;
|
|
CommandList.Add(Result);
|
|
Result.Name := aName;
|
|
Result.ID := comId;
|
|
Result.CatId := catId;
|
|
if assigned(Bitmap) then begin
|
|
Result.Bitmap := Tbitmap.Create;
|
|
Result.Bitmap.Width := 16;
|
|
Result.Bitmap.Height := 16;
|
|
Bitmap.Transparent := false;
|
|
Result.Bitmap.Canvas.Draw(0,0,Bitmap);
|
|
end;
|
|
Result.IsCustom := True;
|
|
{$ifndef Designer}
|
|
Result.CadControl := CadControl;
|
|
{$endif}
|
|
|
|
end;
|
|
|
|
Function TCadInterface.NewToolBar(TName: String):TToolbarDef;
|
|
begin
|
|
Result := TToolBarDef.Create(tName);
|
|
ToolBars.Add(Result);
|
|
end;
|
|
|
|
procedure TCadInterface.SaveToReg;
|
|
begin
|
|
|
|
end;
|
|
|
|
{ TTolbarDef }
|
|
|
|
constructor TToolbarDef.Create(aName:String);
|
|
begin
|
|
Commands := TList.Create;
|
|
Caption := aName;
|
|
Visible := True;
|
|
IsMenu := False;
|
|
end;
|
|
|
|
Procedure TCadInterface.LoadFromFile(fName: String);
|
|
var Stream: TFileStream;
|
|
app: String;
|
|
begin
|
|
FFileName := fName;
|
|
if FileExists(FFileName) then
|
|
begin
|
|
Stream := TFileStream.Create(FileName,fmOpenRead);
|
|
LoadFromStream(Stream);
|
|
Stream.Free;
|
|
app := ExtractFileName(Application.ExeName);
|
|
{$ifndef Designer}
|
|
LoadFromRegistry('\Software\Tekhnelogos\Powercad\'+app+'\GUI');
|
|
{$endif}
|
|
end;
|
|
end;
|
|
|
|
Function TCadInterface.ToolbarRemoveNotification(aComponent: TComponent):Boolean;
|
|
var tb: TToolBarDef;
|
|
i: integer;
|
|
begin
|
|
result := false;
|
|
for i := 0 to ToolBars.Count -1 do
|
|
begin
|
|
tb := TToolBarDef(Toolbars[i]);
|
|
if tb.Toolbar = aComponent then
|
|
begin
|
|
tb.Toolbar := nil;
|
|
result := true;
|
|
exit;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TCadInterface.ClearToolbars;
|
|
var
|
|
tb: TToolBarDef;
|
|
i: integer;
|
|
begin
|
|
try
|
|
for i := 0 to ToolBars.Count -1 do
|
|
begin
|
|
tb := TToolBarDef(Toolbars[i]);
|
|
tb.Free;
|
|
end;
|
|
Toolbars.Clear;
|
|
except
|
|
// on E: Exception do AddExceptionToLog(CPowerCadMessage + 'TCadInterface.ClearToolbars (pcGUI)' + E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure TCadInterface.RemoveTBCommand(tbIndex: Integer;
|
|
Command: TCommandInstance);
|
|
var tbDef: TToolBarDef;
|
|
i: integer;
|
|
sInst: TCommandInstance;
|
|
begin
|
|
if tbIndex > toolbars.Count - 1 then exit;
|
|
tbDef := TToolbarDef(Toolbars[tbIndex]);
|
|
tbdef.Commands.Remove(Command);
|
|
Command.Free;
|
|
end;
|
|
|
|
procedure TCadInterface.RemoveToolBar(TB: TToolBarDef);
|
|
begin
|
|
ToolBars.Remove(tb);
|
|
tb.free;
|
|
end;
|
|
|
|
procedure TCadInterface.RemoveCommand(pCom: TPCadCommand);
|
|
var lCom: TCommandList;
|
|
iCom: TCommandInstance;
|
|
i,k: integer;
|
|
tb : TToolBarDef;
|
|
cnt: Integer;
|
|
begin
|
|
CommandList.Remove(pCom);
|
|
For i := 0 to Commandlist.Count-1 do
|
|
begin
|
|
if TPcadCommand(Commandlist[i]) is TCommandList then
|
|
begin
|
|
lCom := TCommandList(Commandlist[i]);
|
|
if lCom.ComList.IndexOf(pCom) <> -1 then lCom.RemoveCommand(pCom);
|
|
end;
|
|
end;
|
|
For i := 0 to ToolBars.Count -1 do
|
|
begin
|
|
tb := TToolbarDef(Toolbars[i]);
|
|
cnt := tb.Commands.Count;
|
|
for k := cnt-1 downto 0 do
|
|
begin
|
|
iCom := TCommandInstance(tb.Commands[k]);
|
|
if iCom.Command = pCom then RemoveTbCommand(i,iCom);
|
|
end;
|
|
end;
|
|
pCom.Free;
|
|
end;
|
|
|
|
procedure TCadInterface.AddCommand(pCom: TPCadCommand);
|
|
begin
|
|
CommandList.Add(pCom);
|
|
{$ifndef Designer}
|
|
pCom.CadControl := CadControl;
|
|
{$endif}
|
|
pCom.GInterface := Self;
|
|
end;
|
|
|
|
procedure TCadInterface.ClearMenus;
|
|
var i: integer;
|
|
pCom: TCommandList;
|
|
cnt : integer;
|
|
begin
|
|
cnt := CommandList.Count;
|
|
for i := cnt-1 downto 0 do
|
|
begin
|
|
if TPcadCommand(CommandList[i]) is TCommandList then
|
|
begin
|
|
pCom := TCommandList(CommandList[i]);
|
|
CommandList.Delete(i);
|
|
RemoveCommand(pCom);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TCadInterface.RemoveCategory(catID: integer);
|
|
var pCom: TPCadCommand;
|
|
i: integer;
|
|
begin
|
|
if (catID <> -1) and (catID < CatList.Count-1) then
|
|
begin
|
|
CatList.Delete(catID);
|
|
end;
|
|
|
|
for i := 0 to CommandList.Count -1 do
|
|
begin
|
|
pCom := TPcadCommand(CommandList[i]);
|
|
if pCom.CatID = catId then
|
|
begin
|
|
pCom.CatId := -1;
|
|
end else if pCom.CatId > CatId then
|
|
begin
|
|
pCom.CatId := pCom.CatId -1;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TCadInterface.ClearCommands;
|
|
var i: integer;
|
|
pCom: TPCadCommand;
|
|
cnt : integer;
|
|
begin
|
|
ClearGroups;
|
|
cnt := CommandList.Count;
|
|
for i := cnt-1 downto 0 do
|
|
begin
|
|
pCom := TPCadCommand(CommandList[i]);
|
|
RemoveCommand(pCom);
|
|
end;
|
|
CommandList.Clear;
|
|
end;
|
|
|
|
Procedure TCadInterface.ClearCommandsById(ComId: Integer);
|
|
var i: integer;
|
|
pCom: TPCadCommand;
|
|
cnt : integer;
|
|
begin
|
|
cnt := CommandList.Count;
|
|
for i := cnt-1 downto 0 do
|
|
begin
|
|
pCom := TPCadCommand(CommandList[i]);
|
|
if pCom.Id = ComId then begin
|
|
CommandList.Delete(i);
|
|
RemoveCommand(pCom);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TCadInterface.NewGroup(Name: String;Owner:Pointer): TGroupList;
|
|
begin
|
|
Result := TGroupList.Create(Name,Owner);
|
|
CommandGroups.Add(Result);
|
|
end;
|
|
|
|
function TCadInterface.FindGroup(Name: String): TGroupList;
|
|
var i : Integer;
|
|
grp: TGroupList;
|
|
begin
|
|
result := nil;
|
|
for i := 0 to CommandGroups.Count -1 do
|
|
begin
|
|
grp := TGroupList(CommandGroups[i]);
|
|
if grp.Name = Name then begin
|
|
result := grp;
|
|
exit;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TCadInterface.ClearGroups;
|
|
var
|
|
i: Integer;
|
|
grp: TGroupList;
|
|
begin
|
|
try
|
|
for i := 0 to CommandGroups.Count - 1 do
|
|
begin
|
|
grp := TGroupList(CommandGroups[i]);
|
|
grp.free;
|
|
end;
|
|
CommandGroups.Clear;
|
|
except
|
|
// on E: Exception do AddExceptionToLog(CPowerCadMessage + 'TCadInterface.ClearGroups (pcGUI)' + E.Message);
|
|
end;
|
|
end;
|
|
|
|
procedure TCadInterface.LoadFromRegistry(KeyName: String);
|
|
begin
|
|
RegLoadToolbarPositions(Window,KeyName);
|
|
end;
|
|
|
|
procedure TCadInterface.SaveToRegistry(KeyName: String);
|
|
begin
|
|
RegSaveToolbarPositions(Window,KeyName);
|
|
end;
|
|
|
|
procedure TCadInterface.SaveToStream(Stream: TStream);
|
|
var MenuList: TList;
|
|
cnt,i,k,comId: Integer;
|
|
xCom: TpcadCommand;
|
|
pCom: TCommandInstance;
|
|
tb: TToolbarDef;
|
|
bool: Byte;
|
|
grp: TgroupList;
|
|
xCode:Byte;
|
|
evId: Integer;
|
|
begin
|
|
// Write properties
|
|
if FEnabled then xCode := 1 else xCode := 0;
|
|
Stream.Write(xCode,1);
|
|
if CanCustomize then xCode := 1 else xCode := 0;
|
|
Stream.Write(xCode,1);
|
|
|
|
// Write the categories
|
|
WriteString(Stream,CatList.Text);
|
|
|
|
// Write CommandGroups
|
|
Stream.Write(Commandgroups.Count,4);
|
|
for i := 0 to Commandgroups.Count-1 do
|
|
begin
|
|
grp := TgroupList(Commandgroups[i]);
|
|
WriteString(Stream,grp.Name);
|
|
Stream.Write(grp.EventId,4);
|
|
end;
|
|
|
|
// Write Commands
|
|
cnt := CommandList.Count;
|
|
Stream.Write(Cnt,2);
|
|
for i := 0 to CommandList.Count -1 do
|
|
begin
|
|
xCom := TPCadCommand(CommandList[i]);
|
|
WriteString(Stream,Xcom.ClassName);
|
|
xCom.WriteToStream(stream);
|
|
end;
|
|
|
|
// Write Toolbars
|
|
cnt := ToolBars.Count;
|
|
Stream.Write(cnt,1);
|
|
for i := 0 to Toolbars.Count -1 do
|
|
begin
|
|
tb := TToolBarDef(ToolBars[i]);
|
|
WriteString(Stream,tb.Caption);
|
|
if tb.Visible then bool := 1 else bool := 0;
|
|
Stream.Write(bool,1);
|
|
if tb.isMenu then bool := 1 else bool := 0;
|
|
Stream.Write(bool,1);
|
|
bool := 0;
|
|
//if tb.PanelL then bool := 1 else bool := 0;
|
|
Stream.Write(bool,1);
|
|
//if tb.PanelR then bool := 1 else bool := 0;
|
|
Stream.Write(bool,1);
|
|
|
|
Cnt := tb.Commands.Count;
|
|
Stream.Write(cnt,1);
|
|
for k := 0 to cnt-1 do
|
|
begin
|
|
pCom := TCommandInstance(tb.Commands[k]);
|
|
comId := pcom.Command.Id;
|
|
Stream.Write(comId,4);
|
|
WriteString(Stream,pcom.Command.Name);
|
|
WriteString(Stream,pcom.Caption);
|
|
if pCom.BeginGroup then bool := 1 else bool := 0;
|
|
Stream.Write(bool,1);
|
|
if (pCom.bitmapchanged) then bool := 1 else bool := 0;
|
|
Stream.Write(bool,1);
|
|
if assigned(pCom.Bitmap) and (pCom.bitmapchanged) then
|
|
begin
|
|
bool := 1;Stream.Write(bool,1);
|
|
pCom.Bitmap.SaveToStream(Stream);
|
|
end else begin
|
|
bool := 0;Stream.Write(bool,1);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TCadInterface.LoadFromStream(Stream: TStream);
|
|
var MenuList: TList;
|
|
i,k,comId: Integer;
|
|
cnt,gcnt: word;
|
|
comCnt: Byte;
|
|
xCom: TpcadCommand;
|
|
pCom: TCommandInstance;
|
|
tb: TToolbarDef;
|
|
bool: Byte;
|
|
cap,comClass,comName: String;
|
|
bmpChanged,bmpWritten: Byte;
|
|
cats,gName:string;
|
|
grp: TGroupList;
|
|
evId: Integer;
|
|
xcode: Byte;
|
|
xBmp: TBitmap;
|
|
gOwner: Pointer;
|
|
begin
|
|
|
|
gOwner := nil;
|
|
{$ifndef Designer}
|
|
gOwner := CadControl;
|
|
{$endif}
|
|
// Clear Current Stuff
|
|
ClearContent;
|
|
|
|
// Read properties
|
|
Stream.Read(xCode,1);
|
|
Enabled := (xCode = 1);
|
|
if not enabled then exit;
|
|
|
|
Stream.Read(xCode,1);
|
|
CanCustomize := (xCode = 1);
|
|
|
|
// Read Categories
|
|
Cats := ReadStringFromstream(Stream);
|
|
CatList.text := cats;
|
|
|
|
// Read CommandGroups
|
|
gcnt := 0;
|
|
Stream.Read(gcnt,4);
|
|
for i := 1 to gcnt do
|
|
begin
|
|
gname := ReadStringFromstream(Stream);
|
|
grp := NewGroup(gName,gOwner);
|
|
Stream.Read(evId,4);
|
|
if gName = 'Tools' then evId := cDrawTool;
|
|
if evId <> 0 then
|
|
begin
|
|
grp.EventId := evId;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then grp.EventHandle := CadControl.RegisterEvent(evId,Self,GUIEventCallBack);
|
|
{$endif}
|
|
end;
|
|
end;
|
|
|
|
|
|
// read Commands
|
|
cnt := 0;
|
|
Stream.Read(Cnt,2);
|
|
MenuList := TList.Create;
|
|
for i := 0 to Cnt -1 do
|
|
begin
|
|
comClass := ReadStringFromStream(Stream);
|
|
xCom := TPCadCommand.CreateCommandFromStream(ComClass,Stream,Self);
|
|
if assigned(xCom) then xCom.IsCustom := True;
|
|
if assigned(xCom) then AddCommand(xCom);
|
|
if xCom is TCommandList then MenuList.Add(xCom);
|
|
end;
|
|
// Create menu Content
|
|
for i := 0 to Menulist.Count -1 do
|
|
begin
|
|
TCommandList(MenuList[i]).CreateContentFromtempList(Self);
|
|
end;
|
|
MenuList.Free;
|
|
|
|
|
|
// Read Toolbars
|
|
cnt := 0;
|
|
Stream.Read(cnt,1);
|
|
for i := 0 to cnt-1 do
|
|
begin
|
|
cap := ReadStringFromStream(Stream);
|
|
tb := Newtoolbar(cap);
|
|
tb.DefaultDock := nil;
|
|
if cap = csDraw then begin
|
|
tb.DefaultDock := DockLeft;
|
|
tb.DockRow := 0;
|
|
tb.DockPos := 0;
|
|
end else if cap = csFile then begin
|
|
tb.DefaultDock := DockTop;
|
|
tb.DockRow := 0;
|
|
tb.DockPos := 0;
|
|
end else if cap = csEdit then begin
|
|
tb.DefaultDock := DockTop;
|
|
tb.DockRow := 0;
|
|
tb.DockPos := 100;
|
|
end else if cap = csFormat then begin
|
|
tb.DefaultDock := DockTop;
|
|
tb.DockRow := 1;
|
|
tb.DockPos := 0;
|
|
end else if cap = csTransform then begin
|
|
tb.DefaultDock := DockLeft;
|
|
tb.DockRow := 0;
|
|
tb.DockPos := 100;
|
|
end else if cap = csArrange then begin
|
|
tb.DefaultDock := DockTop;
|
|
tb.DockRow := 0;
|
|
tb.DockPos := 200;
|
|
end else if cap = csCommandBar then begin
|
|
tb.DefaultDock := DockBottom;
|
|
tb.DockRow := 0;
|
|
tb.DockPos := 0;
|
|
end else if cap = csStatusBar then begin
|
|
tb.DefaultDock := DockBottom;
|
|
tb.DockRow := 1;
|
|
tb.DockPos := 0;
|
|
end;
|
|
|
|
Stream.Read(bool,1);
|
|
if bool = 1 then tb.Visible := true else tb.Visible := false;
|
|
Stream.Read(bool,1);
|
|
if bool = 1 then tb.IsMenu := true else tb.IsMenu := false;
|
|
|
|
Stream.Read(bool,1);
|
|
//if bool = 1 then tb.PanelL := true else tb.PanelL := false;
|
|
|
|
Stream.Read(bool,1);
|
|
//if bool = 1 then tb.PanelR := true else tb.PanelR := false;
|
|
//if (tb.PanelR or tb.PanelL) then tb.Toolbar := BottomPanel;
|
|
|
|
ComCnt := 0;
|
|
Stream.Read(ComCnt,1);
|
|
for k := 0 to ComCnt-1 do
|
|
begin
|
|
Stream.Read(comId,4);
|
|
comName := ReadStringFromStream(Stream);
|
|
cap := ReadStringFromStream(Stream);
|
|
Stream.Read(bool,1);
|
|
xcom := nil;
|
|
xCom := FindCommand(comName);
|
|
pCom := nil;
|
|
if assigned(xCom) then
|
|
begin
|
|
pCom := AddTbCommand(i,xCom,(bool = 1));
|
|
pCom.Caption := cap;
|
|
end;
|
|
Stream.Read(bmpChanged,1); // bitmap changed
|
|
Stream.Read(bmpWritten,1); // bitmap written
|
|
if assigned(pCom) then pCom.BitmapChanged := (bmpChanged = 1);
|
|
if assigned(pCom) and (bmpWritten = 1) then
|
|
begin
|
|
if assigned(pCom.Bitmap) then pCom.Bitmap.free;
|
|
xBmp := TBitmap.Create;
|
|
xBmp.LoadFromStream(Stream);
|
|
//xBmp.Transparent := False;
|
|
pCom.Bitmap := TBitmap.Create;
|
|
pCom.Bitmap.Width := xBmp.Width;
|
|
pCom.Bitmap.Height := xBmp.Height;
|
|
pCom.Bitmap.Canvas.Draw(0,0,xBmp);
|
|
pCom.Bitmap.Transparent := xBmp.Transparent;
|
|
xBmp.Free;
|
|
end;
|
|
if assigned(pCom) and (bmpWritten = 0) and (bmpChanged = 1) then
|
|
begin
|
|
if assigned(pCom.Bitmap) then pCom.Bitmap.free;
|
|
pCom.Bitmap := nil;
|
|
end;
|
|
end;
|
|
end;
|
|
{$ifndef Designer}
|
|
CreateMacroCommands;
|
|
CreateBlockCommands;
|
|
CreatePluginCommands;
|
|
if not (csDesigning in ComponentState)
|
|
then CreateControls;
|
|
|
|
|
|
{$endif}
|
|
|
|
end;
|
|
|
|
{$ifndef Designer}
|
|
procedure TCadInterface.SetToolIndex;
|
|
var i: Integer;
|
|
xCom: TPcadCommand;
|
|
tCom: TToolCommand;
|
|
begin
|
|
For i := 0 to CommandList.Count-1 do
|
|
begin
|
|
xCom := TPCadCommand(CommandList[i]);
|
|
if xCom is TToolCommand then
|
|
begin
|
|
tCom := TToolCommand(xCom);
|
|
if (tCom.ToolIndex = ord(CadControl.ToolIdx))
|
|
and (tCom.ToolName = CadControl.ToolInfo) then
|
|
begin
|
|
tCom.Selected := True;
|
|
tCom.SyncronizeInstances;
|
|
end else begin
|
|
tCom.Selected := False;
|
|
tCom.SyncronizeInstances;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
{$endif}
|
|
|
|
procedure TCadInterface.ClearContent;
|
|
begin
|
|
CatList.Clear;
|
|
ClearToolbars;
|
|
ClearCommands;
|
|
end;
|
|
|
|
|
|
procedure TCadInterface.SetEnabled(const Value: Boolean);
|
|
begin
|
|
FEnabled := Value;
|
|
if not Value then
|
|
begin
|
|
ClearToolbars;
|
|
ClearCommands;
|
|
CatList.Clear;
|
|
CanCustomize := False;
|
|
end;
|
|
end;
|
|
|
|
function TCadInterface.CreateMenuControls(TbDef: TToolBarDef;
|
|
Index: Integer): TComponent;
|
|
var mn: TMainmenu;
|
|
k,OrderIndex: Integer;
|
|
But: TControl;
|
|
pCom: TcommandInstance;
|
|
mnItem: TCommandmenuItem;
|
|
begin
|
|
if assigned(tbDef.Toolbar) then
|
|
begin
|
|
mn := TMainMenu(tbDef.Toolbar);
|
|
end
|
|
else begin
|
|
mn := TMainMenu.create(Window);
|
|
mn.OwnerDraw := True;
|
|
end;
|
|
mn.Items.Clear;
|
|
mn.Name := ValidateString(tbDef.Caption);
|
|
|
|
Window.Menu := mn;
|
|
mn.Tag := Index;
|
|
tbDef.ToolBar := mn;
|
|
OrderIndex := 0;
|
|
for k := 0 to tbDef.Commands.Count - 1 do
|
|
begin
|
|
pCom := TCommandInstance(tbDef.Commands[k]);
|
|
mnItem := nil;
|
|
mnItem := pCom.Command.CreateMenuItem(mn,pCom);
|
|
if assigned(mnItem) then
|
|
begin
|
|
mnItem.OwnerDraw := False;
|
|
mnItem.OnClick := nil;
|
|
mn.Items.Add(mnItem);
|
|
pCom.MenuItem := mnItem;
|
|
end;
|
|
inc(orderIndex);
|
|
end;
|
|
end;
|
|
|
|
function TCadInterface.CreateToolBarControls(TbDef: TToolBarDef;
|
|
Index: Integer): TComponent;
|
|
var tb: TPCOfficeBar;
|
|
k,x,OrderIndex: Integer;
|
|
Bevel: TPCSep;
|
|
But: TControl;
|
|
pCom: TcommandInstance;
|
|
//pan: TPanel;
|
|
isPanel:Boolean;
|
|
Pos: Integer;
|
|
begin
|
|
//isPanel := (tbDef.PanelL or tbDef.PanelR);
|
|
if assigned(tbDef.Toolbar) then
|
|
begin
|
|
tb := TPCOfficeBar(tbDef.Toolbar);
|
|
if tbDef.Caption = csStatusBar then begin
|
|
tb.DockRow := 1;
|
|
tb.DockPos := 0;
|
|
end;
|
|
end
|
|
else begin
|
|
tb := TPCOfficeBar.create(Window);
|
|
if not assigned(tbDef.DefaultDock) then tbDef.DefaultDock := DockTop;
|
|
tb.Parent := tbDef.DefaultDock;
|
|
tb.DockedTo := tbDef.DefaultDock;
|
|
tb.DockRow := tbDef.DockRow;
|
|
tb.DockPos := tbDef.DockPos;
|
|
if tbDef.Caption = csStatusBar then begin
|
|
tb.CanDockLeftRight := false;
|
|
end;
|
|
end;
|
|
|
|
tb.Visible := tbDef.Visible;
|
|
tb.Caption := tbDef.Caption;
|
|
tb.Name := ValidateString(tbDef.Caption);
|
|
tb.Tag := Index;
|
|
|
|
tbDef.ToolBar := tb;
|
|
OrderIndex := 0;
|
|
|
|
for k := 0 to tbDef.Commands.Count - 1 do
|
|
begin
|
|
pCom := TCommandInstance(tbDef.Commands[k]);
|
|
if pCom.BeginGroup then
|
|
begin
|
|
if not assigned(pCom.Bevel) then
|
|
begin
|
|
bevel := TPCSep.Create(tb);
|
|
bevel.parent := tb;
|
|
bevel.Visible := true;
|
|
bevel.SizeHorz := 10;
|
|
bevel.SizeVert := 10;
|
|
tb.OrderIndex[TControl(bevel)] := OrderIndex ;
|
|
pCom.bevel := bevel;
|
|
end;
|
|
Inc(OrderIndex);
|
|
end else begin
|
|
if assigned(pCom.Bevel) then
|
|
begin
|
|
if Pcom.Bevel is TPCSep then
|
|
TPCSep(pCom.Bevel).Free;
|
|
pCom.bevel := nil;
|
|
end;
|
|
end;
|
|
but := nil;
|
|
but := pCom.Command.CreateControl(tb,pCom);
|
|
if assigned(but) then tb.OrderIndex[But] := OrderIndex;
|
|
inc(orderIndex);
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
procedure TCadInterface.SaveToFile(fName: String);
|
|
var Stream: TFileStream;
|
|
app: String;
|
|
begin
|
|
FFileName := fName;
|
|
Stream := TFileStream.Create(FileName,fmCreate);
|
|
SavetoStream(Stream);
|
|
Stream.Free;
|
|
app := ExtractFileName(Application.ExeName);
|
|
{$ifndef Designer}
|
|
SaveToRegistry('\Software\Tekhnelogos\Powercad\'+app+'\GUI');
|
|
{$endif}
|
|
end;
|
|
|
|
{$ifndef Designer}
|
|
procedure TCadInterface.SetControl(const Value: TPowercad);
|
|
var i: Integer;
|
|
com: TPCadCommand;
|
|
oldC: TPowercad;
|
|
begin
|
|
oldC := fCadControl;
|
|
fCadControl := Value;
|
|
if not (csDesigning in ComponentState) then
|
|
begin
|
|
for i :=0 to Commandlist.Count-1 do
|
|
begin
|
|
com := TPcadCommand(CommandList[i]);
|
|
com.CadControl := Value;
|
|
if assigned(com.EventHandle) and assigned(oldC) then OldC.UnRegisterEvent(com.EventId,com.EventHandle);
|
|
Com.EventHandle := nil;
|
|
if (Com.EventId <> 0) and (assigned(Value)) then Com.EventHandle := Value.RegisterEvent(com.EventId,com,GUIEventCallback);
|
|
if (not (Com.ID in [cNew,cOpen,cCustomize,cFile,cEdit,cArrange,cFormat,cView,cInsert,cOptions,cTools,cExit])) then Com.Enabled := assigned(value);
|
|
Com.SyncronizeInstances;
|
|
end;
|
|
if assigned(fCadControl) then SetToolIndex;
|
|
end;
|
|
end;
|
|
|
|
procedure TCadInterface.SetBlockDlg(const Value: TPCBlockDlg);
|
|
begin
|
|
FBlockDlg := Value;
|
|
CreateBlockCommands;
|
|
end;
|
|
|
|
procedure TCadInterface.SetLayerDlg(const Value: TPCLayerDlg);
|
|
begin
|
|
FLayerDlg := Value;
|
|
end;
|
|
|
|
procedure TCadInterface.SetMacroDlg(const Value: TPCMacroDialog);
|
|
begin
|
|
FMacroDlg := Value;
|
|
CreateMacroCommands;
|
|
end;
|
|
|
|
procedure TCadInterface.SetPluginDlg(const Value: TPCPluginDlg);
|
|
begin
|
|
FPluginDlg := Value;
|
|
end;
|
|
|
|
|
|
|
|
procedure TCadInterface.Notification(AComponent: TComponent;
|
|
Operation: TOperation);
|
|
begin
|
|
inherited Notification(AComponent, Operation);
|
|
if (Operation = opRemove) then begin
|
|
if (AComponent = FCadControl) then
|
|
begin
|
|
FCadControl := nil;
|
|
CadControl := nil;
|
|
end else if (AComponent = Docktop) then
|
|
begin
|
|
DockTop := nil;
|
|
end else if (AComponent = DockLeft) then
|
|
begin
|
|
DockLeft := nil;
|
|
end else if (AComponent = DockRight) then
|
|
begin
|
|
DockRight := nil;
|
|
end else if (AComponent = DockBottom) then
|
|
begin
|
|
DockBottom := nil;
|
|
end else if (AComponent = FMacroDlg) then
|
|
begin
|
|
MacroDialog := nil;
|
|
end else if (AComponent = FBlockDlg) then
|
|
begin
|
|
BlockDialog := nil;
|
|
end else if (AComponent = FlayerDlg) then
|
|
begin
|
|
LayerDialog := nil;
|
|
end else if (AComponent = FPluginDlg) then
|
|
begin
|
|
PluginDialog := nil;
|
|
end else if (AComponent = FFillDlg) then
|
|
begin
|
|
FillDialog := nil;
|
|
end else if ToolBarRemoveNotification(aComponent) then begin
|
|
end;
|
|
end;
|
|
end;
|
|
{$endif}
|
|
|
|
procedure TCadInterface.BotResize(Sender: TObject);
|
|
var i: Integer;
|
|
begin
|
|
For i := 0 to DockBottom.ToolbarCount -1 do
|
|
DockBottom.Toolbars[i].ReAlignControls(DockBottom.Width);
|
|
end;
|
|
|
|
destructor TCadInterface.Destroy;
|
|
begin
|
|
{$ifndef Designer}
|
|
CadControl := nil;
|
|
{$endif}
|
|
|
|
if assigned(DockTop) then DockTop.Free;
|
|
if assigned(DockLeft) then DockLeft.Free;
|
|
if assigned(DockRight) then DockRight.Free;
|
|
if assigned(DockBottom) then DockBottom.Free;
|
|
ClearContent;
|
|
|
|
CatList.Free;
|
|
CommandBitmap.Free;
|
|
OptionsBitmap.Free;
|
|
GradsBitmap.Free;
|
|
TextureBitmap.Free;
|
|
CommandGroups.Free;
|
|
Toolbars.Free;
|
|
CommandList.Free;
|
|
|
|
inherited destroy;
|
|
end;
|
|
|
|
|
|
procedure TCadInterface.SetMDI(const Value: Boolean);
|
|
begin
|
|
FMDI := Value;
|
|
end;
|
|
|
|
procedure TCadInterface.RefreshAllInterface;
|
|
begin
|
|
ClearToolbars;
|
|
ClearCommands;
|
|
CatList.Clear;
|
|
CreateCategories;
|
|
CreateStandartCommands;
|
|
BuildStandartInterface;
|
|
end;
|
|
|
|
function TCadInterface.GetGradBitmap(idx: integer): TBitmap;
|
|
var sRect: Trect;
|
|
begin
|
|
result := TBitmap.Create;
|
|
result.Width := 32;
|
|
result.Height := 16;
|
|
Srect := Rect (0,(idx-1)*16,32,(idx)*16);
|
|
result.Canvas.CopyRect(Rect(0,0,32,16),GradsBitmap.Canvas,sRect);
|
|
result.canvas.Pen.Color := clBlack;
|
|
result.canvas.Brush.style := bsClear;
|
|
result.canvas.Rectangle(1,0,32,16);
|
|
result.canvas.Pen.Color := clTeal;
|
|
result.canvas.MoveTo(0,0);
|
|
result.canvas.LineTo(0,16);
|
|
end;
|
|
|
|
function TCadInterface.GetTxtBitmap(idx: integer): TBitmap;
|
|
var sRect: Trect;
|
|
begin
|
|
result := TBitmap.Create;
|
|
result.Width := 32;
|
|
result.Height := 16;
|
|
Srect := Rect (0,(idx-1)*16,32,(idx)*16);
|
|
result.Canvas.CopyRect(Rect(0,0,32,16),TextureBitmap.Canvas,sRect);
|
|
result.canvas.Pen.Color := clBlack;
|
|
result.canvas.Brush.style := bsClear;
|
|
result.canvas.Rectangle(1,0,32,16);
|
|
result.canvas.Pen.Color := clTeal;
|
|
result.canvas.MoveTo(0,0);
|
|
result.canvas.LineTo(0,16)
|
|
end;
|
|
|
|
procedure TCadInterface.SetFillDlg(const Value: TPCFillDlg);
|
|
begin
|
|
FFillDlg := Value;
|
|
end;
|
|
|
|
{ TPCadCommand }
|
|
|
|
procedure TPCadCommand.Clicked(Sender: TObject);
|
|
{$ifndef Designer}
|
|
var pControl: TControl;
|
|
plIdx,vIdx: Integer;
|
|
FName: String;
|
|
{$endif}
|
|
begin
|
|
{$ifndef Designer}
|
|
if Id in [cBlocksManager,cMacroManager,cPluginManager,cLayersDialog,cCustomize,cRunPlugin] then
|
|
begin
|
|
Case Id of
|
|
cBlocksManager: if assigned(GInterface.BlockDialog) then GInterface.BlockDialog.Show;
|
|
cMacroManager: if assigned(GInterface.MacroDialog) then GInterface.MacroDialog.Show;
|
|
cPluginManager: if assigned(GInterface.PluginDialog) then GInterface.PluginDialog.Show;
|
|
cLayersDialog: if assigned(GInterface.LayerDialog) then GInterface.LayerDialog.Show;
|
|
cCustomize:GInterface.Customize;
|
|
cRunPlugin:
|
|
begin
|
|
plIdx := (Tag div 1000)-1;
|
|
vIdx := Tag-((plIdx+1)*1000)-1;
|
|
if assigned(GInterface.PluginDialog) then GInterface.PluginDialog.DoPluginVerb(plIdx,vIdx);
|
|
end;
|
|
end;
|
|
end else if GInterface.MDIApp and (Id in [cNew,cOpen,cExit]) then begin
|
|
Case Id of
|
|
cNew : if assigned(GInterface.FMDINewFile) then GInterface.FMDINewFile(GInterface);
|
|
cOpen: if assigned(GInterface.FMDIOpenFile) then GInterface.FMDIOpenFile(GInterface,FName);
|
|
cExit: if assigned(GInterface.FMDIExit) then GInterface.FMDIExit(GInterface);
|
|
end;
|
|
end else begin
|
|
if assigned(CadControl) then begin
|
|
TPowerCad(CadControl).CurrentValue := Tag;
|
|
if Id = -1 then
|
|
TPowerCad(CadControl).ExecuteCustomCommand(Name)
|
|
else
|
|
TPowerCad(CadControl).ExecuteTBCommand(ID);
|
|
end;
|
|
if assigned(GroupOwner) then
|
|
begin
|
|
GroupOwner.Syncronize(Self);
|
|
end;
|
|
end;
|
|
{$endif}
|
|
end;
|
|
|
|
constructor TPCadCommand.Create;
|
|
begin
|
|
inherited;
|
|
instances := Tlist.create;
|
|
GroupOwner := nil;
|
|
IsCustom := false;
|
|
EventId := 0;
|
|
EventHandle := nil;
|
|
EventEnabled := True;
|
|
CanMenu := True;
|
|
Tag := 0;
|
|
Enabled := true;
|
|
end;
|
|
|
|
class function TPCadCommand.CreateCommandFromStream(ComClass: String;
|
|
Stream: TStream;GUI:TcadInterface): TPcadCommand;
|
|
type TCClass = class of TPCadCommand;
|
|
var cClass: TCClass;
|
|
i: integer;
|
|
begin
|
|
result := nil;
|
|
for i := 0 to CommandClasses.Count -1 do
|
|
begin
|
|
cClass := TCCLass(CommandClasses[i]);
|
|
if cClass.ClassName = ComClass then
|
|
begin
|
|
result := cClass.Create;
|
|
result.LoadFromStream(Stream,GUI);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TPCadCommand.CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;
|
|
var cButton : TCommandButton;
|
|
w: integer;
|
|
begin
|
|
w := 0;
|
|
|
|
if assigned(Instance.Button) then
|
|
begin
|
|
cButton := TCommandButton(Instance.Button);
|
|
end else begin
|
|
cButton := TCommandButton.Create(aOwner,Instance);
|
|
end;
|
|
CButton.Caps := 0;
|
|
if Assigned(GroupOwner) then
|
|
begin
|
|
cButton.GroupIndex := integer(Instance);
|
|
cButton.AllowAllUp := True;
|
|
end;
|
|
|
|
cButton.Parent := TWinControl(aOwner);
|
|
cButton.Visible := true;
|
|
cButton.Flat := True;
|
|
cButton.Font.Name := 'Tahoma';
|
|
cButton.Font.Size := 8;
|
|
CButton.ComCaption := '';
|
|
|
|
if assigned(Instance.Bitmap) then
|
|
begin
|
|
if CButton.ComBitmap.Width = 0 then begin
|
|
cButton.ComBitmap.Height := 16;
|
|
cButton.ComBitmap.Width := 16;
|
|
end;
|
|
Instance.Bitmap.Transparent := False;
|
|
cButton.ComBitmap.Canvas.Draw(0,0,Instance.Bitmap);
|
|
w := 22;
|
|
end;
|
|
|
|
if not assigned(Instance.Bitmap) then
|
|
begin
|
|
if assigned(cButton.ComBitmap) then
|
|
begin
|
|
cButton.ComBitmap.Free;
|
|
cButton.ComBitmap := nil;
|
|
cButton.ComBitmap := Tbitmap.Create;
|
|
end;
|
|
end;
|
|
|
|
if (not assigned(Instance.Bitmap)) then
|
|
begin
|
|
cButton.ComCaption := Instance.Caption;
|
|
cButton.Width := w + CButton.Canvas.TextWidth(CButton.ComCaption)+8;
|
|
end;
|
|
if CButton.Width < 22 then cButton.Width := 22;
|
|
CButton.ShowHint := true;
|
|
CButton.Hint := Instance.Caption;
|
|
Instance.Button := cButton;
|
|
cButton.align := alNone;
|
|
Result := cButton;
|
|
end;
|
|
|
|
function TPCadCommand.CreateInstance: TCommandInstance;
|
|
begin
|
|
Result := TCommandInstance.Create(Self,Name,Bitmap);
|
|
Instances.Add(result);
|
|
SyncronizeInstances;
|
|
end;
|
|
|
|
function TPCadCommand.CreateMenuItem(Menu: Tmenu;
|
|
Instance: TCommandInstance): TCommandMenuItem;
|
|
var mnItem : TCommandMenuItem;
|
|
begin
|
|
mnItem := TCommandMenuItem.Create(Menu,Instance);
|
|
mnItem.Caption := Instance.Caption;
|
|
if assigned(Instance.Bitmap) then
|
|
begin
|
|
if mnItem.Bitmap.Width = 0 then begin
|
|
mnItem.Bitmap.Height := 16;
|
|
mnItem.Bitmap.Width := 16;
|
|
end;
|
|
Instance.Bitmap.Transparent := False;
|
|
mnItem.Bitmap.Canvas.Draw(0,0,Instance.Bitmap);
|
|
end else
|
|
begin
|
|
if assigned(mnItem.Bitmap) then
|
|
begin
|
|
mnItem.Bitmap.Free;
|
|
mnItem.Bitmap := nil;
|
|
mnItem.Bitmap := Tbitmap.Create;
|
|
end;
|
|
end;
|
|
Result := MnItem;
|
|
end;
|
|
|
|
destructor TPCadCommand.Destroy;
|
|
begin
|
|
if assigned(Bitmap) then Bitmap.Free;
|
|
{$ifndef Designer}
|
|
if assigned(EventHandle) then
|
|
begin
|
|
TPowerCad(CadControl).UnRegisterEvent(EventId,EventHandle);
|
|
end;
|
|
{$endif}
|
|
inherited;
|
|
end;
|
|
|
|
procedure TPCadCommand.Enter(Sender: TObject);
|
|
var IsMenu:Boolean;
|
|
begin
|
|
//isMenu := TControl(sender).Owner is TFrmMenuFace;
|
|
//if IsMenu then TFrmMenuFace(TControl(sender).Owner).SetFocus;
|
|
TWinControl(TControl(Sender).Owner).SetFocus;
|
|
end;
|
|
|
|
|
|
procedure TPCadCommand.Leave(Sender: TObject);
|
|
begin
|
|
|
|
end;
|
|
|
|
procedure TPCadCommand.LoadFromStream(Stream:Tstream;GUI:TcadInterface);
|
|
var ComName:String;
|
|
bmp: TBitmap;
|
|
bool: Byte;
|
|
grp:string;
|
|
oGrp:TgroupList;
|
|
begin
|
|
Name := ReadStringFromStream(Stream);
|
|
Stream.Read(ID,4);
|
|
Stream.Read(CatId,4);
|
|
EventId := 0;
|
|
Stream.Read(EventId,4);
|
|
{$ifndef Designer}
|
|
if (EventId <> 0) and assigned(Gui.CadControl) then
|
|
begin
|
|
EventHandle := Gui.CadControl.RegisterEvent(EventId,Self,GUIEventCallback);
|
|
end;
|
|
{$endif}
|
|
Grp := ReadStringFromStream(Stream);
|
|
if Grp <> '' then begin
|
|
oGrp := GUI.FindGroup(grp);
|
|
Gui.AddToGroup(oGrp,Self);
|
|
end;
|
|
Stream.Read(bool,1);
|
|
if bool = 1 then begin
|
|
Bmp := Tbitmap.Create;
|
|
Bmp.LoadFromStream(Stream);
|
|
//Bmp.Transparent := False;
|
|
Bitmap := Tbitmap.Create;
|
|
Bitmap.Width := bmp.Width;
|
|
Bitmap.Height := bmp.Height;
|
|
Bitmap.Canvas.Draw(0,0,bmp);
|
|
bmp.Free;
|
|
end;
|
|
GInterface := GUI;
|
|
end;
|
|
|
|
procedure TPCadCommand.SyncronizeInstances;
|
|
var i: integer;
|
|
pCom: TCommandInstance;
|
|
begin
|
|
for i := 0 to instances.count-1 do
|
|
begin
|
|
pCom := TCommandInstance(Instances[i]);
|
|
if assigned(pCom.Button) then
|
|
begin
|
|
TCommandButton(pCom.Button).Enabled := enabled;
|
|
end;
|
|
if assigned(pCom.MenuItem) then
|
|
begin
|
|
TCommandMenuItem(pCom.MenuItem).Enabled := Enabled;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TPCadCommand.WriteToStream(Stream: TStream);
|
|
var bool: Byte;
|
|
grp:string;
|
|
begin
|
|
WriteString(Stream,Name);
|
|
Stream.Write(Id,4);
|
|
Stream.Write(CatId,4);
|
|
Stream.Write(EventId,4);
|
|
if assigned (GroupOwner) then grp := GroupOwner.Name else grp := '';
|
|
WriteString(Stream,grp);
|
|
if assigned(bitmap) then
|
|
begin
|
|
bool := 1;Stream.Write(Bool,1);
|
|
Bitmap.SaveToStream(Stream);
|
|
end else
|
|
begin
|
|
bool := 0;Stream.Write(Bool,1);
|
|
end;
|
|
end;
|
|
|
|
{ TCommandButton }
|
|
|
|
procedure TCommandButton.CMMouseEnter(var Message: TMessage);
|
|
begin
|
|
inherited;
|
|
if assigned(FMouseEnter) then FMouseEnter(Self);
|
|
end;
|
|
|
|
procedure TCommandButton.CMMouseLeave(var Message: TMessage);
|
|
begin
|
|
inherited;
|
|
if assigned(FMouseLeave) then FMouseLeave(Self);
|
|
end;
|
|
|
|
constructor TCommandButton.Create(aOwner: TComponent;
|
|
aCom: TCommandInstance);
|
|
begin
|
|
inherited Create(aOwner);
|
|
ComInst := aCom;
|
|
OnClick := ComInst.Command.Clicked;
|
|
OnMouseEnter := ComInst.Command.Enter;
|
|
OnMouseLeave := ComInst.Command.Leave;
|
|
ComBitmap := TBitmap.Create;
|
|
ComCaption := '';
|
|
Caps := 0;
|
|
end;
|
|
|
|
destructor TCommandButton.Destroy;
|
|
begin
|
|
if assigned(ComInst) then ComInst.Button := nil;
|
|
if assigned(ComInst) then ComInst.Bevel := nil;
|
|
inherited destroy;;
|
|
|
|
end;
|
|
|
|
procedure TCommandButton.Paint;
|
|
var CapY: Integer;
|
|
begin
|
|
inherited;
|
|
|
|
if Height < 22 then capY := 2 else CapY := 4;
|
|
if ComBitmap.Width > 0 then
|
|
begin
|
|
ComBitmap.Transparent := True;
|
|
DrawBitmap(Canvas,ComBitmap,3,3,Enabled);
|
|
if CapS = 0 then Caps := ComBitmap.Width + 8;
|
|
end else
|
|
begin
|
|
if CapS = 0 then Caps := 2;
|
|
end;
|
|
if enabled then Canvas.textOut(Caps,CapY,ComCaption)
|
|
else begin
|
|
Canvas.Brush.Style := bsClear;
|
|
Canvas.Font.Color := clWhite;
|
|
Canvas.textOut(Caps+1,CapY+1,ComCaption);
|
|
Canvas.Font.Color := clGray;
|
|
Canvas.textOut(Caps,CapY,ComCaption);
|
|
end;
|
|
end;
|
|
|
|
{ TColorCommandButton }
|
|
|
|
Procedure TColorCommandButton.SetColor(Value: TColor);
|
|
begin
|
|
FColor := value;
|
|
Refresh;
|
|
end;
|
|
|
|
|
|
Procedure TColorCommandButton.Paint;
|
|
var xRect: TRect;
|
|
Points: Array [0..2] of Tpoint;
|
|
xs,ys,l,h: integer;
|
|
xColor : TColor;
|
|
tx : integer;
|
|
begin
|
|
inherited;
|
|
if FColor = -255 then xColor := 255 else xColor:= FColor;
|
|
|
|
Canvas.Brush.Color := xColor;
|
|
Canvas.Brush.Style := bsSolid;
|
|
Canvas.Pen.Color := clBlack;
|
|
Canvas.Pen.Style := psSolid;
|
|
|
|
if not Enabled then begin
|
|
Canvas.Brush.Style := bsClear;
|
|
Canvas.Pen.Color := clSilver;
|
|
end;
|
|
|
|
if ComBitmap.Width > 0 then
|
|
begin
|
|
Canvas.Rectangle(22,5,34,17);
|
|
tx := 25;
|
|
end else begin
|
|
Canvas.Rectangle(2,5,15,17);
|
|
tx := 5;
|
|
end;
|
|
|
|
If enabled and (FColor = -255) then
|
|
begin
|
|
Canvas.Font.Name := 'Arial Black';
|
|
Canvas.Font.Size := 7;
|
|
Canvas.Font.Style := [];
|
|
Canvas.font.Color := clWhite;
|
|
Canvas.Brush.Style := bsClear;
|
|
Canvas.textOut(tx,5,'L');
|
|
end;
|
|
|
|
if MouseInControl then
|
|
begin
|
|
xRect := Rect (Width-12,2,Width,20);
|
|
DrawEdge(Canvas.Handle,xRect,EDGE_ETCHED,BF_LEFT);
|
|
end;
|
|
|
|
Canvas.Pen.Color := clBlack;
|
|
Canvas.Brush.Color := clBlack;
|
|
Canvas.Brush.Style := bsSolid;
|
|
if not Enabled then begin
|
|
Canvas.Brush.Style := bsClear;
|
|
Canvas.Pen.Color := clSilver;
|
|
end;
|
|
|
|
xs := width-9;
|
|
ys := 8;
|
|
l := 3;
|
|
h := 3;
|
|
points[0] := Point(xs,ys);
|
|
points[1] := Point(xs+l+l,ys);
|
|
points[2] := Point(xs+l,ys+h);
|
|
Canvas.Polygon(points);
|
|
end;
|
|
|
|
|
|
{ TPCColorCommand }
|
|
|
|
procedure TPCColorCommand.Clicked(Sender: TObject);
|
|
var Control:TControl;
|
|
pt:Tpoint;
|
|
begin
|
|
if not assigned(PopUp) then CreateDialog;
|
|
PopUp.Color := color;
|
|
Control := TControl(Sender);
|
|
pt := Control.ClientToScreen(Point(0,0));
|
|
PopUp.Popup(pt.x,pt.y);
|
|
|
|
end;
|
|
|
|
procedure TPCColorCommand.ColorChanged(Sender: TObject;xColor: TColor);
|
|
{$ifndef Designer}var Cad: TPowerCad;{$endif}
|
|
begin
|
|
{$ifndef Designer}
|
|
Color := xColor;
|
|
TPowerCad(CadControl).CurrentColor := xColor;
|
|
TPowerCad(CadControl).ExecuteTBCommand(ID);
|
|
SyncronizeInstances;
|
|
{$endif}
|
|
end;
|
|
|
|
constructor TPCColorCommand.Create;
|
|
begin
|
|
inherited;
|
|
Color := -255;
|
|
end;
|
|
|
|
function TPCColorCommand.CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;
|
|
var cButton : TColorCommandButton;
|
|
w: integer;
|
|
begin
|
|
if not assigned(PopUp) then CreateDialog;
|
|
|
|
if assigned(Instance.Button) then
|
|
begin
|
|
cButton := TColorCommandButton(Instance.Button);
|
|
end else begin
|
|
cButton := TColorCommandButton.Create(aOwner,Instance);
|
|
end;
|
|
|
|
w := 0;
|
|
cButton.Color := Color;
|
|
cButton.Parent := TWinControl(aOwner);
|
|
cButton.Visible := true;
|
|
cButton.Flat := True;
|
|
cButton.Font.Name := 'Tahoma';
|
|
cButton.Font.Size := 8;
|
|
cButton.ComCaption := '';
|
|
w := 16;
|
|
cButton.CapS := 25;
|
|
if assigned(Instance.Bitmap) then
|
|
begin
|
|
if cButton.ComBitmap.Height = 0 then
|
|
begin
|
|
cButton.ComBitmap.Height := 16;
|
|
cButton.ComBitmap.Width := 16;
|
|
end;
|
|
Instance.Bitmap.Transparent := False;
|
|
cButton.ComBitmap.Canvas.Draw(0,0,Instance.Bitmap);
|
|
w := w + 22;
|
|
cButton.CapS := 40;
|
|
end;
|
|
cButton.Width := w;
|
|
if (not assigned(Instance.Bitmap)) then
|
|
begin
|
|
cButton.ComCaption := Instance.Caption;
|
|
cButton.Width := w+CButton.Canvas.TextWidth(CButton.ComCaption)+10;
|
|
end;
|
|
if (not assigned(Instance.Bitmap)) and
|
|
(assigned(cButton.ComBitmap)) then
|
|
begin
|
|
cButton.ComBitmap.Free;
|
|
cButton.ComBitmap := TBitmap.Create;
|
|
end;
|
|
|
|
CButton.Hint := Instance.Caption;
|
|
CButton.ShowHint := True;
|
|
|
|
if CButton.Width < 22 then cButton.width := 22;
|
|
cButton.width := cButton.width + 10;
|
|
Instance.Button := cButton;
|
|
Result := cButton;
|
|
end;
|
|
|
|
procedure TPCColorCommand.CreateDialog;
|
|
begin
|
|
PopUp := TColorPopUp.Create(nil);
|
|
PopUp.OnColorChange := ColorChanged;
|
|
end;
|
|
|
|
|
|
function TPCColorCommand.CreateMenuItem(Menu: TMenu;
|
|
Instance: TCommandInstance): TCommandMenuItem;
|
|
var mnItem : TColorMnItem;
|
|
begin
|
|
|
|
mnItem := TColorMnItem.Create(Menu,Instance);
|
|
mnItem.SetColor(Color);
|
|
mnItem.Caption := Instance.Caption;
|
|
if assigned(Instance.Bitmap) then
|
|
begin
|
|
if mnItem.Bitmap.Width = 0 then begin
|
|
mnItem.Bitmap.Height := 16;
|
|
mnItem.Bitmap.Width := 16;
|
|
end;
|
|
Instance.Bitmap.Transparent := False;
|
|
mnItem.Bitmap.Canvas.Draw(0,0,Instance.Bitmap);
|
|
end else
|
|
begin
|
|
if assigned(mnItem.Bitmap) then
|
|
begin
|
|
mnItem.Bitmap.Free;
|
|
mnItem.Bitmap := nil;
|
|
mnItem.Bitmap := Tbitmap.Create;
|
|
end;
|
|
end;
|
|
|
|
Result := MnItem;
|
|
|
|
end;
|
|
|
|
destructor TPCColorCommand.Destroy;
|
|
begin
|
|
if assigned(popUp) then Popup.Free;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TPCColorCommand.SyncronizeInstances;
|
|
var i: integer;
|
|
pCom: TCommandInstance;
|
|
begin
|
|
for i := 0 to instances.count-1 do
|
|
begin
|
|
pCom := TCommandInstance(Instances[i]);
|
|
if assigned(pCom.Button) then
|
|
begin
|
|
TColorCommandButton(pCom.Button).Enabled := enabled;
|
|
TColorCommandButton(pCom.Button).Color := TPCColorCommand(pCom.Command).Color;
|
|
end;
|
|
if assigned(pCom.MenuItem) then
|
|
begin
|
|
TColorMnItem(pCom.MenuItem).Enabled := Enabled;
|
|
TColorMnItem(pCom.MenuItem).Color := TPCColorCommand(pCom.Command).Color;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
{ TBSCommandCombo }
|
|
|
|
procedure TBSCommandCombo.Clicked(Sender: TObject);
|
|
{$ifndef Designer}
|
|
var CadControl: TPowerCad;{$endif}
|
|
begin
|
|
{$ifndef Designer}
|
|
TStyleCommand(ComInst.Command).Style := ItemIndex;
|
|
CadControl := TPowerCad(ComInst.Command.CadControl);
|
|
CadControl.CurrentStyle := ItemIndex;
|
|
CadControl.ExecuteTBCommand(ComInst.Command.ID);
|
|
ComInst.Command.SyncronizeInstances;
|
|
{$endif}
|
|
end;
|
|
|
|
constructor TBSCommandCombo.Create(aOwner: TComponent;
|
|
aCom: TCommandInstance);
|
|
begin
|
|
inherited create(aOwner);
|
|
ComInst := aCom;
|
|
OnChange := Clicked;
|
|
end;
|
|
|
|
destructor TBSCommandCombo.Destroy;
|
|
begin
|
|
if assigned(ComInst) then ComInst.Button := nil;
|
|
if assigned(ComInst) then ComInst.Bevel := nil;
|
|
inherited;
|
|
|
|
end;
|
|
|
|
{ TPSCommandCombo }
|
|
|
|
procedure TPSCommandCombo.Clicked(Sender: TObject);
|
|
{$ifndef Designer} var CadControl: TPowerCad;{$endif}
|
|
begin
|
|
{$ifndef Designer}
|
|
TStyleCommand(ComInst.Command).Style := ItemIndex;
|
|
CadControl := TPowerCad(ComInst.Command.CadControl);
|
|
CadControl.CurrentStyle := ItemIndex;
|
|
CadControl.ExecuteTBCommand(ComInst.Command.ID);
|
|
ComInst.Command.SyncronizeInstances;
|
|
{$endif}
|
|
end;
|
|
|
|
constructor TPSCommandCombo.Create(aOwner: TComponent;
|
|
aCom: TCommandInstance);
|
|
begin
|
|
inherited create(aOwner);
|
|
ComInst := aCom;
|
|
OnChange := Clicked;
|
|
end;
|
|
|
|
destructor TPSCommandCombo.Destroy;
|
|
begin
|
|
if assigned(ComInst) then ComInst.Button := nil;
|
|
if assigned(ComInst) then ComInst.Bevel := nil;
|
|
inherited;
|
|
end;
|
|
|
|
{ TPWCommandCombo }
|
|
|
|
procedure TPWCommandCombo.Clicked(Sender: TObject);
|
|
{$ifndef Designer}var CadControl: TPowerCad;{$endif}
|
|
begin
|
|
{$ifndef Designer}
|
|
TStyleCommand(ComInst.Command).Style := ItemIndex;
|
|
CadControl := TPowerCad(ComInst.Command.CadControl);
|
|
CadControl.CurrentStyle := ItemIndex;
|
|
CadControl.ExecuteTBCommand(ComInst.Command.ID);
|
|
ComInst.Command.SyncronizeInstances;
|
|
{$endif}
|
|
end;
|
|
|
|
constructor TPWCommandCombo.Create(aOwner: TComponent;
|
|
aCom: TCommandInstance);
|
|
begin
|
|
inherited create(aOwner);
|
|
ComInst := aCom;
|
|
OnChange := Clicked;
|
|
end;
|
|
|
|
destructor TPWCommandCombo.Destroy;
|
|
begin
|
|
if assigned(ComInst) then ComInst.Button := nil;
|
|
if assigned(ComInst) then ComInst.Bevel := nil;
|
|
inherited;
|
|
end;
|
|
|
|
{ TRSCommandCombo }
|
|
procedure TRSCommandCombo.Clicked(Sender: TObject);
|
|
{$ifndef Designer}var CadControl: TPowerCad;{$endif}
|
|
begin
|
|
{$ifndef Designer}
|
|
TStyleCommand(ComInst.Command).Style := ItemIndex;
|
|
CadControl := TPowerCad(ComInst.Command.CadControl);
|
|
CadControl.CurrentStyle := ItemIndex;
|
|
CadControl.ExecuteTBCommand(ComInst.Command.ID);
|
|
ComInst.Command.SyncronizeInstances;
|
|
{$endif}
|
|
end;
|
|
|
|
constructor TRSCommandCombo.Create(aOwner: TComponent;
|
|
aCom: TCommandInstance);
|
|
begin
|
|
inherited create(aOwner);
|
|
ComInst := aCom;
|
|
OnChange := Clicked;
|
|
end;
|
|
|
|
|
|
destructor TRSCommandCombo.Destroy;
|
|
begin
|
|
if assigned(ComInst) then ComInst.Button := nil;
|
|
if assigned(ComInst) then ComInst.Bevel := nil;
|
|
inherited;
|
|
end;
|
|
|
|
{ TStyleCommand }
|
|
|
|
procedure TStyleCommand.SyncronizeInstances;
|
|
var i: integer;
|
|
pCom: TCommandInstance;
|
|
begin
|
|
for i := 0 to instances.count-1 do
|
|
begin
|
|
pCom := TCommandInstance(Instances[i]);
|
|
if assigned(pCom.Button) then TStyleCombo(pCom.Button).Enabled := Enabled;
|
|
if assigned(pCom.Button) then TStyleCombo(pCom.Button).ItemIndex := Style;
|
|
end;
|
|
end;
|
|
|
|
{ TPCFontNameCommand }
|
|
|
|
constructor TPCFontNameCommand.Create;
|
|
begin
|
|
inherited;
|
|
CanMenu := False;
|
|
end;
|
|
|
|
function TPCFontNameCommand.CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;
|
|
var cCombo: TFontCommandCombo;
|
|
begin
|
|
if assigned(Instance.Button) then
|
|
begin
|
|
result := TControl(Instance.Button);
|
|
exit;
|
|
end;
|
|
cCombo := TFontCommandCombo.Create(aOwner,Instance);
|
|
cCombo.Parent := TWinControl(aOwner);
|
|
cCombo.Visible := true;
|
|
cCombo.Width := 140;
|
|
cCombo.Font.Name := 'Tahoma';
|
|
cCombo.Font.Size := 8;
|
|
Instance.Button := cCombo;
|
|
Result := cCombo;
|
|
|
|
end;
|
|
|
|
procedure TPCFontNameCommand.SyncronizeInstances;
|
|
var i: integer;
|
|
pCom: TCommandInstance;
|
|
begin
|
|
for i := 0 to instances.count-1 do
|
|
begin
|
|
pCom := TCommandInstance(Instances[i]);
|
|
if assigned(pCom.Button) then TFontComboBox(pCom.Button).Enabled := Enabled;
|
|
if assigned(pCom.Button) then
|
|
TFontComboBox(pCom.Button).ItemIndex :=
|
|
TFontComboBox(pCom.Button).Items.IndexOf(FontName);
|
|
end;
|
|
end;
|
|
|
|
{ TFontCommandCombo }
|
|
|
|
procedure TFontCommandCombo.Clicked(Sender: TObject);
|
|
{$ifndef Designer}var CadControl: TPowerCad;{$endif}
|
|
begin
|
|
{$ifndef Designer}
|
|
TPCFontNameCommand(ComInst.Command).FontName := Text;
|
|
CadControl := TPowerCad(ComInst.Command.CadControl);
|
|
CadControl.CurrentString := Text;
|
|
CadControl.ExecuteTBCommand(ComInst.Command.ID);
|
|
ComInst.Command.SyncronizeInstances;
|
|
{$endif}
|
|
end;
|
|
|
|
constructor TFontCommandCombo.Create(aOwner: TComponent;
|
|
aCom: TCommandInstance);
|
|
begin
|
|
inherited create(aOwner);
|
|
ComInst := aCom;
|
|
OnChange := Clicked;
|
|
end;
|
|
|
|
destructor TFontCommandCombo.Destroy;
|
|
begin
|
|
if assigned(ComInst) then ComInst.Button := nil;
|
|
if assigned(ComInst) then ComInst.Bevel := nil;
|
|
inherited;
|
|
end;
|
|
|
|
{ TPCToggleCommand }
|
|
|
|
procedure TPCToggleCommand.Clicked(Sender: TObject);
|
|
{$ifndef Designer}var Cad: TPowerCad;{$endif}
|
|
begin
|
|
{$ifndef Designer}
|
|
Flag := not Flag;
|
|
Cad := TPowerCad(CadControl);
|
|
Cad.CurrentFlag := Flag;
|
|
Cad.ExecuteTBCommand(ID);
|
|
SyncronizeInstances;
|
|
{$endif}
|
|
end;
|
|
|
|
function TPCToggleCommand.CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;
|
|
var cButton : TCommandButton;
|
|
w : integer;
|
|
begin
|
|
if assigned(Instance.Button) then
|
|
begin
|
|
cButton := TCommandButton(Instance.Button);
|
|
end else begin
|
|
cButton := TCommandButton.Create(aOwner,Instance);
|
|
end;
|
|
|
|
w := 0;
|
|
cButton.Parent := TWinControl(aOwner);
|
|
cButton.Visible := true;
|
|
cButton.Flat := True;
|
|
cButton.Font.Name := 'Tahoma';
|
|
cButton.Font.Size := 8;
|
|
cButton.GroupIndex := Integer(Instance);
|
|
cButton.AllowAllUp := True;
|
|
cButton.ComCaption := '';
|
|
CButton.Caps := 0;
|
|
cButton.Down := Flag;
|
|
|
|
if assigned(Instance.Bitmap) then
|
|
begin
|
|
if cButton.ComBitmap.Height = 0 then
|
|
begin
|
|
cButton.ComBitmap.Height := 16;
|
|
cButton.ComBitmap.Width := 16;
|
|
end;
|
|
Instance.Bitmap.Transparent := False;
|
|
cButton.ComBitmap.Canvas.Draw(0,0,Instance.Bitmap);
|
|
w := 22;
|
|
end;
|
|
|
|
cButton.Width := w;
|
|
if (not assigned(Instance.Bitmap)) then
|
|
begin
|
|
cButton.ComCaption := Instance.Caption;
|
|
cButton.Width := w + CButton.Canvas.TextWidth(CButton.ComCaption) + 8;
|
|
end;
|
|
|
|
if (not assigned(Instance.Bitmap)) and
|
|
(assigned(cButton.ComBitmap)) then
|
|
begin
|
|
cButton.ComBitmap.Free;
|
|
cButton.ComBitmap := TBitmap.Create;
|
|
end;
|
|
|
|
CButton.Hint := Instance.Caption;
|
|
CButton.ShowHint := True;
|
|
|
|
if CButton.Width < 22 then cButton.width := 22;
|
|
|
|
Instance.Button := cButton;
|
|
Result := cButton;
|
|
end;
|
|
|
|
function TPCToggleCommand.CreateMenuItem(Menu: TMenu;
|
|
Instance: TCommandInstance): TCommandMenuItem;
|
|
begin
|
|
result := inherited CreateMenuItem(Menu,Instance);
|
|
result.Checked := Flag;
|
|
end;
|
|
|
|
procedure TPCToggleCommand.SyncronizeInstances;
|
|
var i: integer;
|
|
pCom: TCommandInstance;
|
|
begin
|
|
for i := 0 to instances.count-1 do
|
|
begin
|
|
pCom := TCommandInstance(Instances[i]);
|
|
if assigned(pCom.Button) then TCommandButton(pCom.Button).Enabled := Enabled;
|
|
if assigned(pCom.MenuItem) then TCommandMenuItem(pCom.MenuItem).Enabled := Enabled;
|
|
if assigned(pCom.Button) then TCommandButton(pCom.Button).Down := Flag;
|
|
if assigned(pCom.MenuItem) then TCommandMenuItem(pCom.MenuItem).Checked := Flag;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
Procedure GroupButtonsUp(Command:TPcadCommand);
|
|
var i: integer;
|
|
xCom: TPcadCommand;
|
|
k: integer;
|
|
pCom : TCommandInstance;
|
|
begin
|
|
for k := 0 to Command.Instances.Count -1 do
|
|
begin
|
|
pCom := TCommandInstance(Command.Instances[k]);
|
|
TcommandButton(pCom.Button).Down := True;
|
|
end;
|
|
for i := 0 to Command.GroupOwner.Count-1 do
|
|
begin
|
|
xCom := TPCadCommand(Command.GroupOwner[i]);
|
|
if (xCom <> Command) then
|
|
begin
|
|
for k := 0 to xCom.Instances.Count -1 do
|
|
begin
|
|
pCom := TCommandInstance(xCom.Instances[k]);
|
|
TcommandButton(pCom.Button).Down := false;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
{ TPCOptionsCommand }
|
|
|
|
procedure TPCOptionsCommand.AddOption(xBitmap: TBitmap; oName: String;OValue:Byte=255;Break:Boolean=False);
|
|
var txBitmap : TBitmap;
|
|
begin
|
|
txBitmap := nil;
|
|
if assigned(xBitmap) then
|
|
begin
|
|
txBitmap := TBitmap.Create;
|
|
txBitmap.Width := xBitmap.Width;
|
|
txBitmap.Height := 16;
|
|
txBitmap.Canvas.Draw(0,0,xBitmap);
|
|
txBitmap.Transparent := xBitmap.Transparent;
|
|
bmpWidth := xBitmap.Width;
|
|
end;
|
|
Bitmaps.Add(txBitmap);
|
|
if OValue < 255 then begin
|
|
oName := oName+'|'+inttostr(oValue);
|
|
end;
|
|
if Break then oName := oName+'>';
|
|
Options.Add(oName);
|
|
if assigned(xBitmap) then xBitmap.Free;
|
|
end;
|
|
|
|
procedure TPCOptionsCommand.Clicked(Sender: TObject);
|
|
var Control:TControl;
|
|
pt:Tpoint;
|
|
begin
|
|
if not assigned(PopUp) then CreateDialog;
|
|
PopUp.Value := Value;
|
|
Control := TControl(Sender);
|
|
pt := Control.ClientToScreen(Point(0,0));
|
|
PopUp.Popup(pt.x,pt.y);
|
|
end;
|
|
|
|
constructor TPCOptionsCommand.Create;
|
|
begin
|
|
inherited;
|
|
Options:= TStringList.Create;
|
|
Bitmaps := TList.Create;
|
|
BmpWidth := 16;
|
|
UseText := False;
|
|
end;
|
|
|
|
function TPCOptionsCommand.CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;
|
|
var cButton : TOptionsCommandButton;
|
|
w: integer;
|
|
begin
|
|
if not assigned(PopUp) then CreateDialog;
|
|
if assigned(Instance.Button) then
|
|
begin
|
|
result := TControl(Instance.Button);
|
|
exit;
|
|
end;
|
|
w := 0;
|
|
cButton := TOptionsCommandButton.Create(aOwner,Instance);
|
|
cButton.Parent := TWinControl(aOwner);
|
|
cButton.Visible := true;
|
|
cButton.Flat := True;
|
|
cButton.Font.Name := 'Tahoma';
|
|
cButton.Font.Size := 8;
|
|
cButton.Value := Value;
|
|
cButton.SelIndex := Index;
|
|
Instance.Button := cButton;
|
|
Result := cButton;
|
|
w := bmpWidth+16;
|
|
cButton.Width := w;
|
|
|
|
CButton.Hint := Instance.Caption;
|
|
CButton.ShowHint := True;
|
|
end;
|
|
|
|
procedure TPCOptionsCommand.CreateDialog;
|
|
begin
|
|
PopUp := ToptionsPopUp.Create(nil,Bitmaps,Options,usetext);
|
|
PopUp.OnOptionChange := OptionChanged;
|
|
PopUp.Value := Value;
|
|
end;
|
|
|
|
function TPCOptionsCommand.CreateMenuItem(Menu: TMenu;
|
|
Instance: TCommandInstance): TCommandMenuItem;
|
|
var mnItem : TOptionsMenuItem;
|
|
begin
|
|
mnItem := TOptionsMenuItem.Create(Menu,Instance,UseText);
|
|
mnItem.Caption := Instance.Caption;
|
|
mnItem.OnClick := nil;
|
|
if assigned(Instance.Bitmap) then
|
|
begin
|
|
if mnItem.Bitmap.Width = 0 then begin
|
|
mnItem.Bitmap.Height := 16;
|
|
mnItem.Bitmap.Width := 16;
|
|
end;
|
|
Instance.Bitmap.Transparent := False;
|
|
mnItem.Bitmap.Canvas.Draw(0,0,Instance.Bitmap);
|
|
end else
|
|
begin
|
|
if assigned(mnItem.Bitmap) then
|
|
begin
|
|
mnItem.Bitmap.Free;
|
|
mnItem.Bitmap := nil;
|
|
mnItem.Bitmap := Tbitmap.Create;
|
|
end;
|
|
end;
|
|
mnItem.Value := Value;
|
|
Result := MnItem;
|
|
end;
|
|
|
|
|
|
destructor TPCOptionsCommand.Destroy;
|
|
begin
|
|
if assigned(popUp) then Popup.Free;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TPCOptionsCommand.LoadFromStream(Stream: TStream;
|
|
GUI: TCadInterface);
|
|
var i,cnt: integer;
|
|
xBmp,oBmp : TBitmap;
|
|
txt:string;
|
|
bool: byte;
|
|
begin
|
|
inherited;
|
|
Stream.Read(cnt,4);
|
|
Options.Text := ReadStringFromStream(Stream);
|
|
Stream.Read(bool,1);
|
|
UseText := (bool = 1);
|
|
for i := 0 to cnt -1 do
|
|
begin
|
|
xBmp := Tbitmap.Create;
|
|
xBmp.LoadFromStream(Stream);
|
|
xBmp.Transparent := False;
|
|
oBmp := Tbitmap.Create;
|
|
oBmp.Width := xBmp.Width;
|
|
oBmp.Height := xBmp.Height;
|
|
oBmp.Canvas.Draw(0,0,xBmp);
|
|
xBmp.Free;
|
|
Bitmaps.Add(oBmp);
|
|
BmpWidth := oBmp.Width;
|
|
end;
|
|
end;
|
|
|
|
procedure TPCOptionsCommand.OptionChanged(Sender: Tobject;xValue: Byte;xIndex:Byte);
|
|
{$ifndef Designer}var Cad: TPowerCad;{$endif}
|
|
begin
|
|
{$ifndef Designer}
|
|
Value := xValue;
|
|
Index := xIndex;
|
|
Cad := TPowerCad(CadControl);
|
|
if (Id=cBrushStyle) and (Value = 8) and assigned(GInterface.FillDialog) then
|
|
GInterface.FillDialog.Show
|
|
else begin
|
|
EventEnabled := False;
|
|
Cad.CurrentStyle := Value;
|
|
Cad.ExecuteTBCommand(ID);
|
|
EventEnabled := True;
|
|
SyncronizeInstances;
|
|
end;
|
|
|
|
{$endif}
|
|
end;
|
|
|
|
procedure TPCOptionsCommand.SetValue(FValue: Byte);
|
|
var i:Integer;
|
|
txt:String;
|
|
Val:String;
|
|
xVal:Byte;
|
|
p:Integer;
|
|
begin
|
|
Value := FValue;
|
|
for i := 0 to Options.Count-1 do
|
|
begin
|
|
txt := Options[i];
|
|
txt := StringReplace(txt,'>','',[]);
|
|
xVal := i;
|
|
p := Pos('|',txt);
|
|
if p > 0 then begin
|
|
val := Copy(txt,p+1,length(txt));
|
|
xVal := StrToInt64Def(val,xVal);
|
|
end;
|
|
if xVal = Fvalue then begin
|
|
Index := i;
|
|
exit;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TPCOptionsCommand.SyncronizeInstances;
|
|
var i: integer;
|
|
pCom: TCommandInstance;
|
|
begin
|
|
for i := 0 to instances.count-1 do
|
|
begin
|
|
pCom := TCommandInstance(Instances[i]);
|
|
if assigned(pCom.Button) then TCommandButton(pCom.Button).Enabled := Enabled;
|
|
if assigned(pCom.MenuItem) then TCommandMenuItem(pCom.MenuItem).Enabled := Enabled;
|
|
if assigned(pCom.Button) then begin
|
|
TOptionsCommandButton(pCom.Button).Value := Value;
|
|
TOptionsCommandButton(pCom.Button).SelIndex := Index;
|
|
end;
|
|
if assigned(pCom.MenuItem) then
|
|
TOptionsMenuItem(pCom.MenuItem).Value := Value;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TPCOptionsCommand.WriteToStream(Stream: TStream);
|
|
var i: integer;
|
|
xBmp: TBitmap;
|
|
cnt: Integer;
|
|
bool:byte;
|
|
begin
|
|
inherited;
|
|
cnt := Options.Count;
|
|
Stream.Write(cnt,4);
|
|
WriteString(Stream,Options.Text);
|
|
if UseText then bool := 1 else bool := 0;
|
|
Stream.Write(bool,1);
|
|
for i := 0 to cnt -1 do
|
|
begin
|
|
xbmp := TBitmap(Bitmaps[i]);
|
|
xbmp.SaveToStream(Stream);
|
|
end;
|
|
|
|
end;
|
|
|
|
{ TOptionsCommandButton }
|
|
|
|
procedure TOptionsCommandButton.Paint;
|
|
var xRect: TRect;
|
|
Points: Array [0..2] of Tpoint;
|
|
xs,ys,l,h: integer;
|
|
begin
|
|
inherited;
|
|
if MouseInControl and enabled then
|
|
begin
|
|
xRect := Rect (Width-12,2,Width,20);
|
|
DrawEdge(Canvas.Handle,xRect,EDGE_ETCHED,BF_LEFT);
|
|
end;
|
|
|
|
Canvas.Pen.Color := clBlack;
|
|
Canvas.Brush.Color := clBlack;
|
|
Canvas.Brush.Style := bsSolid;
|
|
if not enabled then begin
|
|
Canvas.Pen.Color := clSilver;
|
|
Canvas.Brush.Color := clBlack;
|
|
Canvas.Brush.Style := bsClear;
|
|
end;
|
|
xs := width-9;
|
|
ys := 8;
|
|
l := 3;
|
|
h := 3;
|
|
points[0] := Point(xs,ys);
|
|
points[1] := Point(xs+l+l,ys);
|
|
points[2] := Point(xs+l,ys+h);
|
|
Canvas.Polygon(points);
|
|
end;
|
|
|
|
procedure TOptionsCommandButton.SetIndex(const Value: Byte);
|
|
var xBitmap: TBitmap;
|
|
xCom: TPCOptionsCommand;
|
|
tr:Boolean;
|
|
begin
|
|
FIndex := Value;
|
|
xCom := TPCOptionsCommand(ComInst.Command);
|
|
if Fvalue < xCom.Bitmaps.Count then
|
|
begin
|
|
xBitmap := TPCOptionsCommand(ComInst.Command).Bitmaps[FIndex];
|
|
if assigned(xBitmap) then begin
|
|
ComBitmap.Width := xBitmap.Width;
|
|
ComBitmap.Height := 16;
|
|
tr := xBitmap.Transparent;
|
|
xBitmap.Transparent := False;
|
|
ComBitmap.Canvas.Draw(0,0,xBitmap);
|
|
xBitmap.Transparent := tr;
|
|
end else begin
|
|
ComBitmap.Width := 0;
|
|
ComBitmap.Height := 0;
|
|
end;
|
|
end;
|
|
Refresh;
|
|
end;
|
|
|
|
procedure TOptionsCommandButton.SetValue(aValue: Byte);
|
|
begin
|
|
FValue := aValue;
|
|
end;
|
|
|
|
{ TPCFileCommand }
|
|
|
|
procedure TPCFileNameCommand.Clicked(Sender: TObject);
|
|
{$ifndef Designer}var Cad: TPowerCad;{$endif}
|
|
begin
|
|
{$ifndef Designer}
|
|
Cad := TPowerCad(CadControl);
|
|
Cad.CurrentFileName := FileName;
|
|
Cad.ExecuteTBCommand(ID);
|
|
if assigned(GroupOwner) then
|
|
begin
|
|
GroupOwner.Syncronize(Self);
|
|
end;
|
|
{$Endif}
|
|
end;
|
|
|
|
{ TCommandList }
|
|
|
|
Function TCommandList.AddCommand(xCommand: TPcadCommand;BeginGroup:Boolean):TCommandInstance;
|
|
var i: integer;
|
|
sInst: TCommandInstance;
|
|
begin
|
|
result := nil;
|
|
if not assigned(xCommand) then exit;
|
|
ComList.Add(xCommand);
|
|
sInst := xCommand.CreateInstance;
|
|
sInst.BeginGroup := BeginGroup;
|
|
InstList.Add(sInst);
|
|
result := sInst;
|
|
end;
|
|
|
|
procedure TCommandList.Clicked(Sender: TObject);
|
|
var IsMenu: Boolean;
|
|
Control: TControl;
|
|
pt: TPoint;
|
|
begin
|
|
Control := TControl(Sender);
|
|
pt := Control.ClientToScreen(Point(0,0));
|
|
PopUp.Popup(pt.x,pt.y);
|
|
end;
|
|
|
|
constructor TCommandList.Create;
|
|
begin
|
|
inherited;
|
|
ComList := TList.Create;
|
|
InstList := TList.Create;
|
|
PopUp := Nil;
|
|
end;
|
|
|
|
procedure TCommandList.CreateContentFromTempList(GUI: TCadInterface);
|
|
var i: integer;
|
|
bGrp: Boolean;
|
|
ComName: String;
|
|
str: String;
|
|
tRec : TTempRecord;
|
|
pCom: TCommandInstance;
|
|
begin
|
|
if not assigned(Templist) then exit;
|
|
for i := 0 to TempList.Count -1 do
|
|
begin
|
|
tRec := TTempRecord(TempList[i]);
|
|
pCom := AddCommand(GUI.FindCommand(trec.ComName),tRec.BeginGroup);
|
|
if assigned(pCom) then
|
|
begin
|
|
pCom.Caption := tRec.Caption;
|
|
pCom.BitmapChanged := tRec.bmpChanged;
|
|
if tRec.bmpChanged then begin
|
|
if tRec.bmpWritten then begin
|
|
if not assigned(pCom.Bitmap) then
|
|
begin
|
|
pCom.Bitmap := Tbitmap.Create;
|
|
pCom.Bitmap.Width := 16;
|
|
pCom.Bitmap.Height := 16;
|
|
end;
|
|
pCom.Bitmap.Canvas.Draw(0,0,tRec.Bitmap);
|
|
end else begin
|
|
if assigned(pCom.Bitmap) then
|
|
begin
|
|
pCom.Bitmap.Free;
|
|
pCom.Bitmap := nil;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
trec.Free;
|
|
|
|
end;
|
|
TempList.Free;
|
|
Templist := nil;
|
|
end;
|
|
|
|
function TCommandList.CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;
|
|
var cButton : TListCommandButton;
|
|
i,y: Integer;
|
|
xCom: TCommandInstance;
|
|
but: TControl;
|
|
w,wMax: integer;
|
|
MenuButton: Boolean;
|
|
SubItem: TCommandMenuItem;
|
|
Bevel: TmenuItem;
|
|
begin
|
|
if assigned(Instance.Button) then
|
|
begin
|
|
cButton := TListCommandButton(Instance.Button);
|
|
end else begin
|
|
cButton := TListCommandButton.Create(aOwner,Instance);
|
|
end;
|
|
cButton.CapS := 0;
|
|
w := 0;
|
|
MenuButton := false;
|
|
if aOwner is TPCOfficeBar then MenuButton := (TPCOfficeBar(aOwner).Tag = 0);
|
|
cButton.Parent := TWinControl(aOwner);
|
|
cButton.Visible := true;
|
|
cButton.Flat := True;
|
|
cButton.Font.Name := 'Tahoma';
|
|
cButton.Font.Size := 8;
|
|
if not MenuButton then w := 10;
|
|
if MenuButton then cButton.Height := 18;
|
|
if MenuButton then cButton.CapS := 4;
|
|
|
|
if assigned(Instance.Bitmap) and (not MenuButton) then
|
|
begin
|
|
if cButton.ComBitmap.Height = 0 then
|
|
begin
|
|
cButton.ComBitmap.Height := 16;
|
|
cButton.ComBitmap.Width := 16;
|
|
end;
|
|
Instance.Bitmap.Transparent := False;
|
|
cButton.ComBitmap.Canvas.Draw(0,0,Instance.Bitmap);
|
|
w := w + 22;
|
|
end;
|
|
|
|
if not assigned(Instance.Bitmap) then
|
|
begin
|
|
if assigned(cButton.ComBitmap) then
|
|
begin
|
|
cButton.ComBitmap.Free;
|
|
cButton.ComBitmap := TBitmap.Create;
|
|
end;
|
|
end;
|
|
|
|
cButton.ComCaption := Instance.Caption;
|
|
cButton.Width := w + CButton.Canvas.TextWidth(CButton.ComCaption)+8;
|
|
if cButton.Width < 0 then cButton.Width := 22;
|
|
Instance.Button := cButton;
|
|
|
|
Result := TControl(Instance.Button);
|
|
|
|
if not assigned(PopUp) then begin
|
|
PopUp := TPopUpMenu.Create(aOwner);
|
|
PopUp.OwnerDraw := True;
|
|
end;
|
|
PopUp.Items.Clear;
|
|
For i := 0 to InstList.Count -1 do
|
|
begin
|
|
xCom := TCommandInstance(InstList[i]);
|
|
if xCom.BeginGroup then
|
|
begin
|
|
Bevel := TMenuItem.Create(PopUp);
|
|
Bevel.Caption := '-';
|
|
PopUp.Items.Add(Bevel);
|
|
end;
|
|
SubItem := nil;
|
|
SubItem := xCom.Command.CreateMenuItem(PopUp,xCom);
|
|
if assigned(SubItem) then
|
|
begin
|
|
PopUp.Items.Add(SubItem);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
function TCommandList.CreateInstance: TCommandInstance;
|
|
begin
|
|
Result := TCommandInstance.Create(Self,Name,Bitmap);
|
|
Instances.Add(result);
|
|
CreateInstances;
|
|
end;
|
|
|
|
procedure TCommandList.CreateInstances;
|
|
var i: integer;
|
|
sInst: TCommandInstance;
|
|
xCom: TPcadCommand;
|
|
begin
|
|
if InstList.Count = 0 then
|
|
begin
|
|
for i := 0 to ComList.Count - 1 do
|
|
begin
|
|
xCom := TPCadCommand(ComList[i]);
|
|
sInst := xCom.CreateInstance;
|
|
InstList.Add(sInst);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TCommandList.CreateMenuItem(Menu: TMenu;
|
|
Instance: TCommandInstance): TCommandMenuItem;
|
|
var i: Integer;
|
|
xCom: TCommandInstance;
|
|
mnItem,SubItem: TCommandMenuItem;
|
|
Bevel: TMenuItem;
|
|
begin
|
|
mnItem := inherited CreateMenuItem(Menu,Instance);
|
|
mnItem.OnClick := nil;
|
|
For i := 0 to InstList.Count -1 do
|
|
begin
|
|
xCom := TCommandInstance(InstList[i]);
|
|
if xCom.BeginGroup then
|
|
begin
|
|
Bevel := TMenuItem.Create(Menu);
|
|
Bevel.Caption := '-';
|
|
mnItem.Add(Bevel);
|
|
end;
|
|
SubItem := nil;
|
|
SubItem := xCom.Command.CreateMenuItem(Menu,xCom);
|
|
if assigned(SubItem) then
|
|
begin
|
|
mnItem.Add(SubItem);
|
|
xCom.MenuItem := SubItem;
|
|
end;
|
|
end;
|
|
Result := mnItem;
|
|
end;
|
|
|
|
destructor TCommandList.Destroy;
|
|
var i: integer;
|
|
pCom: TCommandInstance;
|
|
begin
|
|
|
|
for i := 0 to InstList.Count -1 do
|
|
begin
|
|
pCom := TCommandInstance(InstList[i]);
|
|
pCom.Free;
|
|
end;
|
|
InstList.Free;
|
|
ComList.Free;
|
|
if assigned(TempList) then begin
|
|
Templist.Free;
|
|
TempList := nil;
|
|
end;
|
|
if assigned(Popup) then begin
|
|
//popup.free;
|
|
popup := nil;
|
|
end;
|
|
|
|
inherited;
|
|
end;
|
|
|
|
|
|
procedure TCommandList.LoadFromStream(Stream: TStream;GUI:TcadInterface);
|
|
var Comcnt,i: integer;
|
|
comName,cap:String;
|
|
bool: byte;
|
|
ComId: Integer;
|
|
bgGroup,bmpChanged,bmpWritten: Byte;
|
|
xBmp: Tbitmap;
|
|
tRec: TtempRecord;
|
|
begin
|
|
inherited;
|
|
Templist := TList.Create;
|
|
|
|
ComCnt := 0;Stream.Read(ComCnt,4);
|
|
for i := 0 to ComCnt-1 do
|
|
begin
|
|
tRec := TTempRecord.Create;
|
|
Stream.Read(comId,4);
|
|
comName := ReadStringFromStream(Stream);
|
|
cap := ReadStringFromStream(Stream);
|
|
Stream.Read(bgGroup,1);
|
|
Stream.Read(bmpChanged,1); // bitmap changed
|
|
Stream.Read(bmpWritten,1); // bitmap written
|
|
tRec.ComName := ComName;
|
|
tRec.Caption := Cap;
|
|
tRec.BeginGroup := (bgGroup = 1);
|
|
tRec.BmpChanged := (bmpChanged = 1);
|
|
tRec.BmpWritten := (bmpWritten = 1);
|
|
tRec.Bitmap := nil;
|
|
if tRec.BmpWritten then
|
|
begin
|
|
tRec.Bitmap := TBitmap.Create;
|
|
tRec.Bitmap.LoadFromStream(Stream);
|
|
end;
|
|
TempList.Add(trec);
|
|
end;
|
|
(*
|
|
for i := 0 to Cnt -1 do
|
|
begin
|
|
ComName := ReadStringFromStream(Stream);
|
|
Stream.Read(Bool,1);
|
|
TempList.Add(Inttostr(bool)+ComName);
|
|
end;
|
|
*)
|
|
end;
|
|
|
|
procedure TCommandList.RemoveCommand(xCommand: TPCadCommand);
|
|
var idx: integer;
|
|
sInst: TCommandInstance;
|
|
begin
|
|
idx := ComList.IndexOf(xCommand);
|
|
ComList.Delete(idx);
|
|
sInst := TCommandInstance(InstList[idx]);
|
|
InstList.delete(Idx);
|
|
sInst.Free;
|
|
end;
|
|
|
|
procedure TCommandList.SyncronizeInstances;
|
|
begin
|
|
inherited;
|
|
|
|
end;
|
|
|
|
procedure TCommandList.WriteToStream(Stream: TStream);
|
|
var i:integer;
|
|
pCom : TCommandInstance;
|
|
ComId: Integer;
|
|
bool:byte;
|
|
begin
|
|
inherited;
|
|
Stream.Write(ComList.Count,4);
|
|
for i := 0 to ComList.Count -1 do
|
|
begin
|
|
pCom := TCommandInstance(InstList[i]);
|
|
comId := pcom.Command.Id;
|
|
Stream.Write(comId,4);
|
|
WriteString(Stream,pcom.Command.Name);
|
|
WriteString(Stream,pcom.Caption);
|
|
if pCom.BeginGroup then bool := 1 else bool := 0;
|
|
Stream.Write(bool,1);
|
|
if (pCom.bitmapchanged) then bool := 1 else bool := 0;
|
|
Stream.Write(bool,1);
|
|
if assigned(pCom.Bitmap) and (pCom.bitmapchanged) then
|
|
begin
|
|
bool := 1;Stream.Write(bool,1);
|
|
pCom.Bitmap.SaveToStream(Stream);
|
|
end else begin
|
|
bool := 0;Stream.Write(bool,1);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
{ TPCBrushStyleCommand }
|
|
|
|
function TPCBrushStyleCommand.CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;
|
|
var cCombo: TBSCommandCombo;
|
|
begin
|
|
if assigned(Instance.Button) then
|
|
begin
|
|
result := TControl(Instance.Button);
|
|
exit;
|
|
end;
|
|
|
|
cCombo := TBSCommandCombo.Create(aOwner,Instance);
|
|
cCombo.Parent := TWinControl(aOwner);
|
|
cCombo.Visible := true;
|
|
cCombo.Width := 90;
|
|
cCombo.Font.Name := 'Tahoma';
|
|
cCombo.Font.Size := 8;
|
|
Instance.Button := cCombo;
|
|
Result := cCombo;
|
|
end;
|
|
|
|
{ TPCPenStyleCommand }
|
|
|
|
function TPCPenStyleCommand.CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;
|
|
var cCombo: TPSCommandCombo;
|
|
begin
|
|
if assigned(Instance.Button) then
|
|
begin
|
|
result := TControl(Instance.Button);
|
|
exit;
|
|
end;
|
|
|
|
cCombo := TPSCommandCombo.Create(aOwner,Instance);
|
|
cCombo.Parent := TWinControl(aOwner);
|
|
cCombo.Visible := true;
|
|
cCombo.Width := 90;
|
|
cCombo.Font.Name := 'Tahoma';
|
|
cCombo.Font.Size := 8;
|
|
Instance.Button := cCombo;
|
|
Result := cCombo;
|
|
end;
|
|
|
|
{ TPCRowStyleCommand }
|
|
|
|
function TPCRowStyleCommand.CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;
|
|
var cCombo: TRSCommandCombo;
|
|
begin
|
|
if assigned(Instance.Button) then
|
|
begin
|
|
result := TControl(Instance.Button);
|
|
exit;
|
|
end;
|
|
|
|
cCombo := TRSCommandCombo.Create(aOwner,Instance);
|
|
cCombo.Parent := TWinControl(aOwner);
|
|
cCombo.Visible := true;
|
|
cCombo.Width := 90;
|
|
cCombo.Font.Name := 'Tahoma';
|
|
cCombo.Font.Size := 8;
|
|
Instance.Button := cCombo;
|
|
Result := cCombo;
|
|
end;
|
|
|
|
{ TPCPenWidthCommand }
|
|
|
|
function TPCPenWidthCommand.CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;
|
|
var cCombo: TPWCommandCombo;
|
|
begin
|
|
if assigned(Instance.Button) then
|
|
begin
|
|
result := TControl(Instance.Button);
|
|
exit;
|
|
end;
|
|
|
|
cCombo := TPWCommandCombo.Create(aOwner,Instance);
|
|
cCombo.Parent := TWinControl(aOwner);
|
|
cCombo.Visible := true;
|
|
cCombo.Width := 90;
|
|
cCombo.Font.Name := 'Tahoma';
|
|
cCombo.Font.Size := 8;
|
|
Instance.Button := cCombo;
|
|
Result := cCombo;
|
|
end;
|
|
|
|
{ TListCommandButton }
|
|
|
|
procedure TListCommandButton.Paint;
|
|
var xRect: TRect;
|
|
Points: Array [0..2] of Tpoint;
|
|
xs,ys,l,h: integer;
|
|
MenuButton: Boolean;
|
|
begin
|
|
MenuButton := false;
|
|
if Owner is TPCOfficeBar then MenuButton := (TPCOfficeBar(Owner).Tag = 0);
|
|
inherited;
|
|
if MouseInControl and (not MenuButton) then
|
|
begin
|
|
xRect := Rect (Width-12,2,Width,20);
|
|
DrawEdge(Canvas.Handle,xRect,EDGE_ETCHED,BF_LEFT);
|
|
end;
|
|
Canvas.Pen.Color := clBlack;
|
|
Canvas.Brush.Color := clBlack;
|
|
Canvas.Brush.Style := bsSolid;
|
|
if not enabled then begin
|
|
Canvas.Pen.Color := clSilver;
|
|
Canvas.Brush.Style := bsClear;
|
|
end;
|
|
xs := width-9;
|
|
ys := 8;
|
|
l := 3;
|
|
h := 3;
|
|
points[0] := Point(xs,ys);
|
|
points[1] := Point(xs+l+l,ys);
|
|
points[2] := Point(xs+l,ys+h);
|
|
if not MenuButton then Canvas.Polygon(points);
|
|
end;
|
|
|
|
|
|
{ TGUIProperty }
|
|
(*
|
|
procedure TGUIProperty.Edit;
|
|
var GUI: TcadInterface;
|
|
frm: TFrmCustom;
|
|
Stream: TFileStream;
|
|
begin
|
|
GUI := TCadInterface(GetOrdValue);
|
|
|
|
if FileExists(GUI.FileName) then
|
|
begin
|
|
Stream := TFileStream.Create(GUI.FileName,fmOpenRead);
|
|
GUI.LoadFromStream(Stream);
|
|
Stream.Free;
|
|
end;
|
|
|
|
frm := TFrmCustom.Create(Application);
|
|
frm.GUI := GUI;
|
|
frm.DesignMode := True;
|
|
frm.ch1.Checked := not GUI.Enabled;
|
|
frm.ch2.Checked := GUI.CanCustomize;
|
|
frm.ShowModal;
|
|
frm.Free;
|
|
Designer.Modified;
|
|
|
|
Stream := TFileStream.Create(GUI.FileName,fmCreate);
|
|
GUI.SaveToStream(Stream);
|
|
Stream.Free;
|
|
|
|
|
|
end;
|
|
|
|
function TGUIProperty.GetAttributes: TpropertyAttributes;
|
|
begin
|
|
result := [paDialog];
|
|
end;
|
|
|
|
*)
|
|
|
|
destructor TToolbarDef.Destroy;
|
|
var pCom:TCommandInstance;
|
|
i: integer;
|
|
begin
|
|
for i := 0 to Commands.Count -1 do
|
|
begin
|
|
pCom := TCommandInstance(Commands[i]);
|
|
pCom.free;
|
|
end;
|
|
Commands.Clear;
|
|
Commands.Free;
|
|
if assigned(Toolbar) then Toolbar.Free;
|
|
inherited destroy;
|
|
end;
|
|
|
|
{ TCommandInstance }
|
|
|
|
constructor TCommandInstance.Create(aCommand: TPcadCommand; aCaption:String;
|
|
aBitmap:Graphics.TBitmap);
|
|
begin
|
|
inherited Create;
|
|
Command := aCommand;
|
|
Caption := aCaption;
|
|
BitmapChanged := False;
|
|
Button := Nil;
|
|
Bevel := Nil;
|
|
Bitmap := nil;
|
|
if assigned(aBitmap) then
|
|
begin
|
|
Bitmap := TBitmap.Create;
|
|
Bitmap.Height := 16;
|
|
Bitmap.Width := 16;
|
|
aBitmap.Transparent := False;
|
|
Bitmap.Canvas.Draw(0,0,aBitmap);
|
|
end;
|
|
end;
|
|
|
|
destructor TCommandInstance.Destroy;
|
|
begin
|
|
if assigned(bitmap) then bitmap.free;
|
|
if assigned(button) then button.free;
|
|
if assigned(bevel) then bevel.free;
|
|
Command.Instances.Remove(self);
|
|
inherited destroy;
|
|
end;
|
|
|
|
{ TGroupList }
|
|
|
|
constructor TGroupList.Create(aName: String;Owner:Pointer);
|
|
begin
|
|
inherited Create;
|
|
Name := aName;
|
|
EventId := 0;
|
|
CadControl:= Owner;
|
|
end;
|
|
|
|
destructor TGroupList.Destroy;
|
|
begin
|
|
{$ifndef Designer}
|
|
if assigned(EventHandle) then
|
|
begin
|
|
TPowerCad(CadControl).UnRegisterEvent(EventId,EventHandle);
|
|
end;
|
|
{$endif}
|
|
inherited;
|
|
end;
|
|
|
|
procedure TGroupList.Syncronize(dCom: TObject);
|
|
var Command: TPCadCommand;
|
|
i: integer;
|
|
xCom: TPcadCommand;
|
|
k: integer;
|
|
pCom : TCommandInstance;
|
|
|
|
begin
|
|
Command := nil;
|
|
if assigned(dCom) then
|
|
begin
|
|
Command := TPcadCommand(dCom);
|
|
for k := 0 to Command.Instances.Count -1 do
|
|
begin
|
|
pCom := TCommandInstance(Command.Instances[k]);
|
|
TcommandButton(pCom.Button).Down := True;
|
|
end;
|
|
end;
|
|
|
|
for i := 0 to Count-1 do
|
|
begin
|
|
xCom := TPCadCommand(Items[i]);
|
|
if (xCom <> Command) then
|
|
begin
|
|
for k := 0 to xCom.Instances.Count -1 do
|
|
begin
|
|
pCom := TCommandInstance(xCom.Instances[k]);
|
|
TcommandButton(pCom.Button).Down := false;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure GUIEventCallback(Client:TObject; EventId: Integer;
|
|
NumVal:Integer; Strval:String; DblVal:Double; Enabled:Boolean);stdcall;
|
|
var pCom: TPcadCommand;
|
|
gList: TGroupList;
|
|
cInt: TCadInterface;
|
|
begin
|
|
{$ifndef Designer}
|
|
if EventId = cDrawTool then
|
|
begin
|
|
cInt := TCadInterface(Client);
|
|
cInt.SetToolIndex;
|
|
end else if Client is TPcadCommand then
|
|
begin
|
|
pCom := TPcadCommand(Client);
|
|
if pCom.EventEnabled then
|
|
begin
|
|
pCom.Enabled := Enabled;
|
|
if pCom is TPCOptionsCommand then
|
|
TPCOptionsCommand(pCom).SetValue(NumVal)
|
|
else if pCom is TPCColorCommand then
|
|
TPCColorCommand(pCom).Color := NumVal
|
|
else if pCom is TPCFontNameCommand then
|
|
TPCFontNameCommand(pCom).FontName := StrVal
|
|
else if pCom is TPCToggleCommand then
|
|
TPCToggleCommand(pCom).Flag := (NumVal = 1)
|
|
else if pCom is TPCTextSizeCommand then
|
|
TPCTextSizeCommand(pCom).Value := Dblval
|
|
else if pCom is TInfoCommand then
|
|
TInfoCommand(pCom).Info := StrVal;
|
|
pCom.SyncronizeInstances;
|
|
end;
|
|
end;
|
|
{$endif}
|
|
end;
|
|
|
|
|
|
|
|
{ TToolCommand }
|
|
|
|
procedure TToolCommand.Clicked(Sender: TObject);
|
|
{$ifndef Designer}var Cad: TPowerCad;{$Endif}
|
|
begin
|
|
{$ifndef Designer}
|
|
Cad := TPowerCad(CadControl);
|
|
EventEnabled := False;
|
|
Cad.SetTool(TPCTool(ToolIndex),ToolName,0);
|
|
EventEnabled := True;
|
|
GInterface.SetToolIndex;
|
|
{$endif}
|
|
end;
|
|
|
|
constructor TToolCommand.Create;
|
|
begin
|
|
inherited;
|
|
ToolIndex := 0;
|
|
ToolName := '';
|
|
Selected := False;
|
|
end;
|
|
|
|
Procedure TToolCommand.SyncronizeInstances;
|
|
var i: integer;
|
|
pCom: TCommandInstance;
|
|
begin
|
|
for i := 0 to instances.count-1 do
|
|
begin
|
|
pCom := TCommandInstance(Instances[i]);
|
|
if assigned(pCom.Button) then TCommandButton(pCom.Button).Enabled := Enabled;
|
|
if assigned(pCom.Button) then TCommandButton(pCom.Button).Down := Selected;
|
|
if assigned(pCom.MenuItem) then TCommandMenuItem(pCom.MenuItem).Enabled := Enabled;
|
|
if assigned(pCom.MenuItem) then TCommandMenuItem(pCom.MenuItem).Checked := Selected;
|
|
end;
|
|
end;
|
|
|
|
function TToolCommand.CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;
|
|
begin
|
|
result := inherited CreateControl(aOwner,Instance);
|
|
TCommandButton(Result).GroupIndex := integer(Instance);
|
|
TCommandButton(Result).AllowAllUp := True;
|
|
TCommandButton(Result).Down := Selected;
|
|
end;
|
|
|
|
Procedure TToolCommand.WriteToStream(Stream: TStream);
|
|
var sel: Byte;
|
|
begin
|
|
inherited;
|
|
Stream.Write(ToolIndex,1);
|
|
if Selected then Sel := 1 else sel := 0;
|
|
Stream.Write(Sel,1);
|
|
WriteString(Stream,ToolName);
|
|
end;
|
|
|
|
Procedure TToolCommand.LoadFromStream(Stream:TStream;GUI:TCadInterface);
|
|
var sel: Byte;
|
|
begin
|
|
inherited;
|
|
Stream.Read(ToolIndex,1);
|
|
Stream.Read(Sel,1);
|
|
Selected := (Sel = 1);
|
|
Toolname := ReadStringFromStream(Stream);
|
|
end;
|
|
|
|
|
|
{ TCommandMenuItem }
|
|
|
|
constructor TCommandMenuItem.Create(aOwner: TComponent; aCom:TCommandInstance);
|
|
begin
|
|
inherited Create(aOwner);
|
|
ComInst := aCom;
|
|
OnClick := ComInst.Command.Clicked;
|
|
Bitmap := TBitmap.Create;
|
|
Caption := '';
|
|
OnAdvancedDrawItem := SelfAdvancedDrawItem;
|
|
OnMeasureItem := SelfMeasureItem;
|
|
FOwnerDraw := True;
|
|
//Caps := 0;
|
|
end;
|
|
|
|
destructor TCommandMenuItem.Destroy;
|
|
begin
|
|
if assigned(bitmap) then bitmap.free;
|
|
if assigned(ComInst) then ComInst.MenuItem := nil;
|
|
if assigned(ComInst) then ComInst.Bevel := nil;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TCommandMenuItem.SelfAdvancedDrawItem(Sender: TObject;
|
|
ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState);
|
|
var Caps: Integer;
|
|
xCaption : String;
|
|
i: Integer;
|
|
xRect: Trect;
|
|
begin
|
|
xCaption := ComInst.Caption;
|
|
ACanvas.Font.Color := clBlack;
|
|
Acanvas.Brush.Color := clMenu;
|
|
Acanvas.Brush.Style := bsSolid;
|
|
ACanvas.FillRect(ARect);
|
|
Acanvas.Pen.Style := psSolid;
|
|
ACanvas.Pen.Color := ClBlack;
|
|
|
|
xRect := Rect(Arect.Left+2, Arect.Top+2, Arect.Right-2,Arect.Bottom-2);
|
|
|
|
if odChecked in State then begin
|
|
Acanvas.Brush.Color := RGB(230,230,230);
|
|
Acanvas.FillRect(xRect);
|
|
DrawEdge(Acanvas.handle,xRect,BDR_SUNKENOUTER,BF_RECT);
|
|
end;
|
|
|
|
if (odSelected in State) and not (odDisabled in State) then
|
|
begin
|
|
DrawEdge(Acanvas.handle,xRect,BDR_RAISEDINNER,BF_RECT);
|
|
end;
|
|
|
|
if Bitmap.Width > 0 then
|
|
begin
|
|
Bitmap.Transparent := True;
|
|
DrawBitmap(ACanvas,Bitmap,ARect.Left+3,Arect.Top+4,Enabled);
|
|
end;
|
|
|
|
ACanvas.Brush.Style := bSClear;
|
|
Caps := Arect.Left+24;
|
|
if Enabled then
|
|
begin
|
|
ACanvas.Font.Color := clBlack;
|
|
ACanvas.textOut(Caps,Arect.Top+4,xCaption);
|
|
end
|
|
else begin
|
|
ACanvas.Font.Color := clWhite;
|
|
ACanvas.textOut(Caps+1,Arect.Top+5,xCaption);
|
|
ACanvas.Font.Color := clGray;
|
|
ACanvas.textOut(Caps,Arect.Top+4,xCaption);
|
|
end;
|
|
ACanvas.Brush.Style := bsSolid;
|
|
|
|
end;
|
|
|
|
procedure TCommandMenuItem.SelfMeasureItem(Sender: TObject;
|
|
ACanvas: TCanvas; var Width, Height: Integer);
|
|
begin
|
|
Width := ACanvas.TextWidth(Caption)+18;
|
|
Height := 24;
|
|
end;
|
|
|
|
procedure TCommandMenuItem.SetBitmap(aBitmap: TBitmap);
|
|
begin
|
|
end;
|
|
|
|
procedure TCommandMenuItem.SetOwnerDraw(const Value: Boolean);
|
|
begin
|
|
FOwnerDraw := Value;
|
|
if value then
|
|
begin
|
|
OnAdvancedDrawItem := SelfAdvancedDrawItem;
|
|
OnMeasureItem := SelfMeasureItem;
|
|
end else
|
|
begin
|
|
OnAdvancedDrawItem := nil;
|
|
OnMeasureItem := nil;
|
|
end;
|
|
end;
|
|
|
|
{ TColorMnItem }
|
|
|
|
constructor TColorMnItem.Create(aOwner: TComponent;
|
|
aCom: TCommandInstance);
|
|
var cItem:TMenuItem;
|
|
i,k:integer;
|
|
begin
|
|
inherited;
|
|
|
|
for i := 1 to 5 do
|
|
begin
|
|
for k := 1 to 10 do
|
|
begin
|
|
cItem := TMenuItem.Create(self);
|
|
Self.Add(cItem);
|
|
if (i = 1) and (k = 1) then
|
|
begin
|
|
CItem.Tag := -255;CItem.Hint := csLayerDefault;
|
|
end
|
|
else if (i = 5) and (k = 10) then
|
|
begin
|
|
CItem.Tag := -500;Citem.Hint := csMoreColors;
|
|
end
|
|
else
|
|
cItem.Tag := BasicColors[((k-1)*5+i)-1];
|
|
cItem.Caption := inttostr(k);
|
|
cItem.OnMeasureItem := ChildMeasureItem;
|
|
cItem.OnAdvancedDrawItem := ChildAdvancedDrawItem;
|
|
cItem.OnClick := ColorSelected;
|
|
if (i>1) and (k=1) then cItem.Break := mbBreak;
|
|
if (k = 4) and (i=3) then begin
|
|
cItem.Checked := true;
|
|
SelectedItem := cItem;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TColorMnItem.SelfAdvancedDrawItem(Sender: TObject;
|
|
ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState);
|
|
var ctext,xCaption: String;
|
|
i: Integer;
|
|
textStart,rectStart: Integer;
|
|
Begin
|
|
xCaption := ComInst.Caption;
|
|
ACanvas.Font.Color := clBlack;
|
|
Acanvas.Brush.Color := clMenu;
|
|
Acanvas.Brush.Style := bsSolid;
|
|
ACanvas.FillRect(ARect);
|
|
Acanvas.Pen.Style := psSolid;
|
|
ACanvas.Pen.Color := ClBlack;
|
|
|
|
if (odSelected in State) and not (odDisabled in State) then
|
|
begin
|
|
DrawEdge(Acanvas.handle,ARect,BDR_RAISEDINNER,BF_RECT);
|
|
end;
|
|
|
|
if assigned(Bitmap) then
|
|
begin
|
|
Bitmap.Transparent := True;
|
|
DrawBitmap(ACanvas,Bitmap,Arect.Left+3,ARect.top+3,Enabled);
|
|
end;
|
|
|
|
if fColor = -255 then
|
|
begin
|
|
Acanvas.Brush.Color := clRed;
|
|
cText:= 'L';
|
|
end else begin
|
|
Acanvas.Brush.Color := FColor;
|
|
cText:= '';
|
|
end;
|
|
|
|
RectStart := aRect.left + 24;
|
|
TextStart := aRect.left + 38;
|
|
|
|
if odDisabled in State then begin
|
|
Acanvas.Brush.Color := clSilver;
|
|
ACanvas.Pen.Color := clSilver;
|
|
Acanvas.Brush.Style := bsClear;
|
|
Acanvas.Rectangle(RectStart, Arect.Top+5,RectStart+10,Arect.Top+15);
|
|
end else
|
|
Acanvas.Rectangle(RectStart, Arect.Top+5,RectStart+10,Arect.Top+15);
|
|
|
|
Acanvas.Brush.Style := bsClear;
|
|
|
|
if odDisabled in State then begin
|
|
ACanvas.Font.Color := clWhite;
|
|
Acanvas.TextOut(TextStart+1,Arect.Top+4,xCaption);
|
|
ACanvas.Font.Color := clGray;
|
|
Acanvas.TextOut(TextStart,Arect.Top+3,xCaption);
|
|
|
|
end else begin
|
|
Acanvas.TextOut(TextStart,Arect.Top+3,xCaption);
|
|
end;
|
|
|
|
if enabled and (Ctext <> '') then
|
|
begin
|
|
ACanvas.Font.Name := 'Tahoma';
|
|
ACanvas.Font.Style := [fsBold];
|
|
ACanvas.Font.Size := 7;
|
|
ACanvas.Font.Color := clWhite;
|
|
Acanvas.TextOut(RectStart + 2,Arect.Top+4,Ctext);
|
|
end;
|
|
end;
|
|
|
|
procedure TColorMnItem.SelfMeasureItem(Sender: TObject; ACanvas: TCanvas;
|
|
var Width, Height: Integer);
|
|
var xCaption: String;
|
|
begin
|
|
xCaption := ComInst.Caption;
|
|
Width := ACanvas.TextWidth(xCaption)+40;
|
|
Height := 22;
|
|
end;
|
|
|
|
procedure TColorMnItem.ChildMeasureItem(Sender: TObject; ACanvas: TCanvas;
|
|
var Width, Height: Integer);
|
|
begin
|
|
width := 2;
|
|
Height := 16;
|
|
end;
|
|
|
|
procedure TColorMnItem.ChildAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
|
|
ARect: TRect; State: TOwnerDrawState);
|
|
var xRect: Trect;
|
|
xColor:Integer;
|
|
text: string;
|
|
begin
|
|
text := '';
|
|
Acanvas.Brush.Color := clMenu;
|
|
Acanvas.Brush.Style := bsSolid;
|
|
Acanvas.FillRect(aRect);
|
|
xColor := TMenuItem(Sender).Tag;
|
|
if xColor = -255 then
|
|
begin
|
|
Acanvas.Brush.Color := 255;Text := 'L';
|
|
end
|
|
else if xColor = -500 then
|
|
begin
|
|
Acanvas.Brush.Color := clNavy;Text := 'M';
|
|
end
|
|
else
|
|
Acanvas.Brush.Color := xColor;
|
|
|
|
Acanvas.Pen.Color := clBlack;
|
|
Acanvas.Pen.Style := psSolid;
|
|
Acanvas.Pen.Width := 1;
|
|
xRect := Rect(Arect.left+1,ARect.Top+2,Arect.Right-1,Arect.Bottom-2);
|
|
|
|
if odSelected in State then begin
|
|
Acanvas.Rectangle(aRect);
|
|
end else begin
|
|
Acanvas.Rectangle(xRect);
|
|
end;
|
|
|
|
if odChecked in State then begin
|
|
Acanvas.Pen.Color := clMenu;
|
|
Acanvas.Pen.Style := psSolid;
|
|
Acanvas.Pen.Width := 2;
|
|
DrawEdge(Acanvas.handle,xRect,EDGE_SUNKEN,BF_RECT);
|
|
end;
|
|
If text <> '' then begin
|
|
ACanvas.Font.Name := 'Tahoma';
|
|
ACanvas.Font.Size := 7;
|
|
ACanvas.Font.Style := [fsBold];
|
|
Acanvas.Font.Color := clWhite;
|
|
Acanvas.Brush.Style := bsClear;
|
|
Drawtext(Acanvas.handle,pChar(Text),1,xRect,DT_VCENTER or DT_CENTER);
|
|
end;
|
|
end;
|
|
|
|
Procedure TColorMnItem.ColorSelected(Sender:TObject);
|
|
var dlg: TColorDialog;
|
|
sColor:TColor;
|
|
begin
|
|
sColor := (Sender as TmenuItem).Tag;
|
|
if SColor <> - 500 then
|
|
begin
|
|
(Sender as TMenuItem).Checked := True;
|
|
FColor := SColor;
|
|
SelectedItem.Checked := False;
|
|
SelectedItem := (Sender as TMenuItem);
|
|
end
|
|
else begin
|
|
dlg := TColorDialog.Create(Self);
|
|
dlg.Color := FColor;
|
|
if dlg.Execute then
|
|
begin
|
|
SelectedItem.Checked := False;
|
|
Color := dlg.Color;
|
|
end;
|
|
end;
|
|
|
|
TPCColorCommand(ComInst.Command).ColorChanged(Sender,Color);
|
|
end;
|
|
|
|
|
|
procedure TColorMnItem.SetColor(Value: TColor);
|
|
var i: Integer;
|
|
cItem: TmenuItem;
|
|
begin
|
|
For i := 0 to Count-1 do
|
|
begin
|
|
cItem := Items[i];
|
|
cItem.Checked := False;
|
|
if cItem.Tag = Value then begin
|
|
cItem.Checked := true;
|
|
SelectedItem := cItem;
|
|
end;
|
|
end;
|
|
FColor := Value;
|
|
end;
|
|
|
|
{ TOptionsMenuItem }
|
|
|
|
procedure TOptionsMenuItem.ChildAdvancedDrawItem(Sender: TObject;
|
|
ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState);
|
|
var xBitmap: TBitmap;
|
|
ctext,xCaption: String;
|
|
i: Integer;
|
|
textStart,rectStart: Integer;
|
|
xRect: Trect;
|
|
begin
|
|
xBitmap := TBitmap(Bitmaps[(Sender as TMenuItem).Tag]);
|
|
|
|
ACanvas.Font.Color := clBlack;
|
|
Acanvas.Brush.Color := clMenu;
|
|
Acanvas.Brush.Style := bsSolid;
|
|
ACanvas.FillRect(ARect);
|
|
|
|
Acanvas.Pen.Style := psSolid;
|
|
ACanvas.Pen.Color := ClBlack;
|
|
|
|
xRect := Rect(Arect.Left+2, Arect.Top+2, Arect.Right-2,Arect.Bottom-2);
|
|
xCaption := Options[(Sender as TMenuItem).Tag];
|
|
|
|
if odChecked in State then begin
|
|
Acanvas.Brush.Color := RGB(230,230,230);
|
|
Acanvas.FillRect(xRect);
|
|
DrawEdge(Acanvas.handle,xRect,BDR_SUNKENOUTER,BF_RECT);
|
|
end;
|
|
|
|
if odSelected in State then
|
|
begin
|
|
DrawEdge(Acanvas.handle,xRect,BDR_RAISEDINNER,BF_RECT);
|
|
end;
|
|
|
|
if assigned(xBitmap) then
|
|
begin
|
|
xBitmap.Transparent := True;
|
|
ACanvas.Draw(Arect.Left+6,ARect.top+6,xBitmap);
|
|
xBitmap.Transparent := False;
|
|
end;
|
|
|
|
if useText then begin
|
|
Acanvas.Brush.Style := bsClear;
|
|
Acanvas.textOut(aRect.Left+BmpWidth+12,aRect.top+6,xCaption);
|
|
end;
|
|
|
|
end;
|
|
|
|
procedure TOptionsMenuItem.ChildMeasureItem(Sender: TObject;
|
|
ACanvas: TCanvas; var Width, Height: Integer);
|
|
begin
|
|
Width := BmpWidth;
|
|
Height := BmpHeight+12;
|
|
if useText then
|
|
Width := Width + Acanvas.textWidth((sender as TMenuItem).Hint)+8;
|
|
end;
|
|
|
|
constructor TOptionsMenuItem.Create(aOwner: TComponent;
|
|
aCom: TCommandInstance;aUseText: Boolean);
|
|
var cItem:TMenuItem;
|
|
i,k:integer;
|
|
xBitmap: Tbitmap;
|
|
begin
|
|
inherited Create(aOwner,aCom);
|
|
UseText := aUsetext;
|
|
FValue := 0;
|
|
Bitmaps := TPCOptionsCommand(aCom.Command).Bitmaps;
|
|
Options := TPCOptionsCommand(aCom.Command).Options;
|
|
if not Assigned(Options) then exit;
|
|
if not Assigned(Bitmaps) then exit;
|
|
|
|
xBitmap := TBitmap(Bitmaps[0]);
|
|
if assigned(xBitmap) then
|
|
begin
|
|
BmpWidth := TBitmap(Bitmaps[0]).Width;
|
|
BmpHeight := TBitmap(Bitmaps[0]).Height;
|
|
end else begin
|
|
BmpWidth := 4;
|
|
BmpHeight := 22;
|
|
end;
|
|
|
|
for i := 0 to Options.Count -1 do
|
|
begin
|
|
cItem := TMenuItem.Create(self);
|
|
cItem.Tag := i;
|
|
Self.Add(cItem);
|
|
cItem.Caption := inttostr(i);
|
|
cItem.Hint := Options[i];
|
|
cItem.OnMeasureItem := ChildMeasureItem;
|
|
cItem.OnAdvancedDrawItem := ChildAdvancedDrawItem;
|
|
cItem.OnClick := OptionSelected;
|
|
if i = FValue then begin
|
|
cItem.Checked := true;
|
|
SelectedItem := cItem;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TOptionsMenuItem.OptionSelected(Sender: TObject);
|
|
var mnItem: TmenuItem;
|
|
begin
|
|
mnItem := Sender as TMenuItem;
|
|
if assigned(SelectedItem) then SelectedItem.Checked := False;
|
|
Value := mnItem.Tag;
|
|
FIndex := Self.IndexOf(mnItem);
|
|
TPCOptionsCommand(ComInst.Command).OptionChanged(Self,Value,FIndex);
|
|
end;
|
|
|
|
procedure TOptionsMenuItem.SelfAdvancedDrawItem(Sender: TObject;
|
|
ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState);
|
|
var xBitmap: TBitmap;
|
|
xCaption: String;
|
|
begin
|
|
xBitmap := TBitmap(Bitmaps[Value]);
|
|
xCaption := ComInst.Caption;
|
|
ACanvas.Font.Color := clBlack;
|
|
Acanvas.Brush.Color := clMenu;
|
|
Acanvas.Brush.Style := bsSolid;
|
|
ACanvas.FillRect(ARect);
|
|
Acanvas.Pen.Style := psSolid;
|
|
ACanvas.Pen.Color := ClBlack;
|
|
|
|
if enabled and (odSelected in State) then
|
|
begin
|
|
DrawEdge(Acanvas.handle,ARect,BDR_RAISEDINNER,BF_RECT);
|
|
end;
|
|
|
|
if assigned(xBitmap) then
|
|
begin
|
|
xBitmap.Transparent := True;
|
|
DrawBitmap(Acanvas,xBitmap,ARect.Left+3,Arect.Top+3,Enabled);
|
|
xBitmap.Transparent := False;
|
|
end;
|
|
if enabled then begin
|
|
ACanvas.Brush.Style := bSClear;
|
|
ACanvas.textOut(ARect.Left+7+BmpWidth,Arect.Top+3,xCaption);
|
|
end else begin
|
|
ACanvas.Brush.Style := bSClear;
|
|
ACanvas.Font.Color := clWhite;
|
|
ACanvas.textOut(ARect.Left+8+BmpWidth,Arect.Top+4,xCaption);
|
|
ACanvas.Font.Color := clGray;
|
|
ACanvas.textOut(ARect.Left+7+BmpWidth,Arect.Top+3,xCaption);
|
|
end;
|
|
|
|
end;
|
|
|
|
procedure TOptionsMenuItem.SelfMeasureItem(Sender: TObject;
|
|
ACanvas: TCanvas; var Width, Height: Integer);
|
|
begin
|
|
Width := BMpWidth + Acanvas.TextWidth(ComInst.Caption)+5;
|
|
Height := 22;
|
|
end;
|
|
|
|
procedure TOptionsMenuItem.setValue(const xValue: Byte);
|
|
var i: Integer;
|
|
cItem:TmenuItem;
|
|
begin
|
|
FValue := xValue;
|
|
if FValue < 0 then FValue := 0;
|
|
if FValue > Options.Count -1 then FValue := 0;
|
|
For i := 0 to Count-1 do
|
|
begin
|
|
cItem := Items[i];
|
|
cItem.Checked := False;
|
|
if cItem.Tag = FValue then begin
|
|
cItem.Checked := true;
|
|
SelectedItem := cItem;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
{ TOptionsPopUp }
|
|
|
|
procedure TOptionsPopUp.ChildAdvancedDrawItem(Sender: TObject;
|
|
ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState);
|
|
var xBitmap: TBitmap;
|
|
ctext,xCaption: String;
|
|
i: Integer;
|
|
textStart,rectStart: Integer;
|
|
xRect:Trect;
|
|
index: Integer;
|
|
begin
|
|
index := Self.Items.IndexOf(Sender as TMenuItem);
|
|
xBitmap := TBitmap(Bitmaps[Index]);
|
|
|
|
ACanvas.Font.Color := clBlack;
|
|
Acanvas.Brush.Color := clMenu;
|
|
Acanvas.Brush.Style := bsSolid;
|
|
ACanvas.FillRect(ARect);
|
|
Acanvas.Pen.Style := psSolid;
|
|
ACanvas.Pen.Color := ClBlack;
|
|
Acanvas.Brush.Color := clBlack;
|
|
xRect := Rect(Arect.Left+2, Arect.Top+2, Arect.Right-2,Arect.Bottom-2);
|
|
|
|
if odChecked in State then begin
|
|
Acanvas.Brush.Color := RGB(230,230,230);
|
|
Acanvas.FillRect(xRect);
|
|
DrawEdge(Acanvas.handle,xRect,BDR_SUNKENOUTER,BF_RECT);
|
|
end;
|
|
|
|
if odSelected in State then
|
|
begin
|
|
DrawEdge(Acanvas.handle,xRect,BDR_RAISEDINNER,BF_RECT);
|
|
end;
|
|
|
|
if assigned(xBitmap) then
|
|
begin
|
|
xBitmap.Transparent := True;
|
|
ACanvas.Draw(Arect.Left+6,ARect.top+6,xBitmap);
|
|
end;
|
|
|
|
if useText then begin
|
|
ACanvas.Brush.Style := bSClear;
|
|
Acanvas.textOut(aRect.Left+BmpWidth+12,aRect.top+6,(Sender as TMenuItem).Hint);
|
|
end;
|
|
end;
|
|
|
|
procedure TOptionsPopUp.ChildMeasureItem(Sender: TObject; ACanvas: TCanvas;
|
|
var Width, Height: Integer);
|
|
var cItem: TMenuItem;
|
|
index: Integer;
|
|
begin
|
|
cItem := sender as TMenuItem;
|
|
index := Self.Items.IndexOf(cItem);
|
|
|
|
Width := BmpWidth;
|
|
Height := BmpHeight+12;
|
|
//if index = 2 then Height := Height+16;
|
|
if useText then Width := Width + Acanvas.textWidth(cItem.Hint)+8;
|
|
end;
|
|
|
|
constructor TOptionsPopUp.Create(aOwner: TComponent; aBitmaps: Tlist;
|
|
aOptions: TStringList;aUsetext:Boolean);
|
|
var cItem: TMenuItem;
|
|
i,k,p:integer;
|
|
xBitmap: TBitmap;
|
|
txt: String;
|
|
val: String;
|
|
begin
|
|
inherited Create(aOwner);
|
|
Usetext := aUseText;
|
|
OwnerDraw := True;
|
|
FValue := 0;
|
|
Bitmaps := aBitmaps;
|
|
Options := AOptions;
|
|
xBitmap := TBitmap(Bitmaps[0]);
|
|
if assigned(xBitmap) then
|
|
begin
|
|
BmpWidth := TBitmap(Bitmaps[0]).Width;
|
|
BmpHeight := TBitmap(Bitmaps[0]).Height;
|
|
end else begin
|
|
BmpWidth := 4;
|
|
BmpHeight := 22;
|
|
end;
|
|
if not Assigned(Options) then exit;
|
|
if not Assigned(Bitmaps) then exit;
|
|
for i := 0 to Options.Count -1 do
|
|
begin
|
|
cItem := TMenuItem.Create(self);
|
|
cItem.Tag := i;
|
|
Items.Add(cItem);
|
|
cItem.Caption := inttostr(i);
|
|
txt := Options[i];
|
|
if Pos('>',txt) > 0 then begin
|
|
cItem.Break := mbBarBreak;
|
|
txt := StringReplace(txt,'>','',[]);
|
|
end;
|
|
p := Pos('|',txt);
|
|
if p > 0 then begin
|
|
Val := Copy(txt,p+1,Length(txt));
|
|
cItem.Tag := StrToInt64Def(Val,i);
|
|
txt := copy(txt,1,p-1);
|
|
end;
|
|
|
|
cItem.Hint := txt;
|
|
cItem.OnMeasureItem := ChildMeasureItem;
|
|
cItem.OnAdvancedDrawItem := ChildAdvancedDrawItem;
|
|
cItem.OnClick := OptionSelected;
|
|
if i = FValue then begin
|
|
cItem.Checked := true;
|
|
SelectedItem := cItem;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TOptionsPopUp.OptionSelected(Sender: TObject);
|
|
var mnItem: TmenuItem;
|
|
begin
|
|
mnItem := Sender as TMenuItem;
|
|
if assigned(SelectedItem) then SelectedItem.Checked := False;
|
|
Value := mnItem.Tag;
|
|
FIndex := Self.Items.IndexOf(mnItem);
|
|
if assigned(FOptionChange) then FOptionChange(Self,Value,FIndex);
|
|
end;
|
|
|
|
procedure TOptionsPopUp.setValue(const xValue: Byte);
|
|
var i: Integer;
|
|
cItem:TmenuItem;
|
|
begin
|
|
For i := 0 to Items.Count-1 do
|
|
begin
|
|
cItem := Items[i];
|
|
cItem.Checked := False;
|
|
if cItem.Tag = xValue then begin
|
|
cItem.Checked := true;
|
|
SelectedItem := cItem;
|
|
end;
|
|
end;
|
|
FValue := xValue;
|
|
end;
|
|
|
|
{ TTempRecord }
|
|
|
|
Constructor TTempRecord.Create;
|
|
begin
|
|
inherited;
|
|
Bitmap := nil;
|
|
end;
|
|
|
|
destructor TTempRecord.Destroy;
|
|
begin
|
|
if assigned(Bitmap) then Bitmap.Free;
|
|
inherited;
|
|
end;
|
|
|
|
{ TTextSizeCommandCombo }
|
|
|
|
procedure TTextSizeCommandCombo.Clicked(Sender: TObject);
|
|
{$ifndef Designer}var CadControl: TPowerCad;{$endif}
|
|
begin
|
|
{$ifndef Designer}
|
|
TPCTextSizeCommand(ComInst.Command).Value := StrToFloat_My(Text);
|
|
CadControl := TPowerCad(ComInst.Command.CadControl);
|
|
CadControl.CurrentValue := StrToFloat_My(Text);
|
|
CadControl.ExecuteTBCommand(ComInst.Command.ID);
|
|
ComInst.Command.SyncronizeInstances;
|
|
{$endif}
|
|
end;
|
|
|
|
constructor TTextSizeCommandCombo.Create(aOwner: TComponent;
|
|
aCom: TCommandInstance);
|
|
begin
|
|
inherited create(aOwner);
|
|
ComInst := aCom;
|
|
OnChange := Clicked;
|
|
end;
|
|
|
|
destructor TTextSizeCommandCombo.Destroy;
|
|
begin
|
|
if assigned(ComInst) then ComInst.Button := nil;
|
|
if assigned(ComInst) then ComInst.Bevel := nil;
|
|
inherited;
|
|
end;
|
|
|
|
{ TPCTextSizeCommand }
|
|
|
|
Constructor TPCTextSizeCommand.Create;
|
|
begin
|
|
inherited;
|
|
CanMenu := False;
|
|
end;
|
|
|
|
function TPCTextSizeCommand.CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;
|
|
var cCombo: TTextSizeCommandCombo;
|
|
begin
|
|
if assigned(Instance.Button) then
|
|
begin
|
|
result := TControl(Instance.Button);
|
|
exit;
|
|
end;
|
|
cCombo := TTextSizeCommandCombo.Create(aOwner,Instance);
|
|
cCombo.Parent := TWinControl(aOwner);
|
|
cCombo.Visible := true;
|
|
cCombo.Width := 45;
|
|
cCombo.Font.Name := 'Tahoma';
|
|
cCombo.Font.Size := 8;
|
|
Instance.Button := cCombo;
|
|
cCombo.Items.Add('4');cCombo.Items.Add('5');
|
|
cCombo.Items.Add('6');cCombo.Items.Add('7');
|
|
cCombo.Items.Add('8');cCombo.Items.Add('9');
|
|
cCombo.Items.Add('10');cCombo.Items.Add('11');
|
|
cCombo.Items.Add('12');cCombo.Items.Add('13');
|
|
cCombo.Items.Add('14');cCombo.Items.Add('15');
|
|
cCombo.Items.Add('20');cCombo.Items.Add('22');
|
|
cCombo.Items.Add('24');cCombo.Items.Add('28');
|
|
cCombo.Items.Add('30');cCombo.Items.Add('36');
|
|
cCombo.Items.Add('38');cCombo.Items.Add('40');
|
|
Result := cCombo;
|
|
end;
|
|
|
|
procedure TPCTextSizeCommand.SyncronizeInstances;
|
|
var i: integer;
|
|
pCom: TCommandInstance;
|
|
begin
|
|
for i := 0 to instances.count-1 do
|
|
begin
|
|
pCom := TCommandInstance(Instances[i]);
|
|
if assigned(pCom.Button) then TTextSizeCommandCombo(pCom.Button).Enabled := Enabled;
|
|
if assigned(pCom.Button) then
|
|
TTextSizeCommandCombo(pCom.Button).Text := FloatToStr(Value);
|
|
end;
|
|
end;
|
|
|
|
{ TInfoCommand }
|
|
|
|
function TInfoCommand.CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;
|
|
var pan: TPanel;
|
|
begin
|
|
if assigned(Instance.Button) then
|
|
begin
|
|
result := TControl(Instance.Button);
|
|
exit;
|
|
end;
|
|
|
|
pan := TCommandPanel.Create(aOwner,Instance);
|
|
Pan.Tag := Id;
|
|
Pan.OnClick := Clicked;
|
|
Instance.Button := pan;
|
|
Result := pan;
|
|
end;
|
|
|
|
procedure TInfoCommand.SyncronizeInstances;
|
|
var i: integer;
|
|
pCom: TCommandInstance;
|
|
begin
|
|
if not enabled then Info := '';
|
|
for i := 0 to instances.count-1 do
|
|
begin
|
|
pCom := TCommandInstance(Instances[i]);
|
|
if assigned(pCom.Button) then TCommandPanel(pCom.Button).Caption := Info;
|
|
if assigned(pCom.Button) then TCommandPanel(pCom.Button).Enabled := Enabled;
|
|
end;
|
|
end;
|
|
|
|
Procedure TInfoCommand.Clicked(Sender:TObject);
|
|
begin
|
|
//***
|
|
end;
|
|
|
|
{ TEditCommand }
|
|
|
|
constructor TEditCommand.Create;
|
|
begin
|
|
inherited;
|
|
History := TstringList.Create;
|
|
HId := 0;
|
|
end;
|
|
|
|
function TEditCommand.CreateControl(aOwner: TComponent;
|
|
Instance: TCommandInstance): TControl;
|
|
var edit: TEdit;
|
|
begin
|
|
if assigned(Instance.Button) then
|
|
begin
|
|
result := TControl(Instance.Button);
|
|
exit;
|
|
end;
|
|
|
|
edit := TCommandEdit.Create(aOwner,Instance);
|
|
edit.OnKeyUp := KeyClicked;
|
|
edit.Tag := Id;
|
|
Instance.Button := edit;
|
|
Result := edit;
|
|
end;
|
|
|
|
destructor TEditCommand.Destroy;
|
|
begin
|
|
History.free;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TEditCommand.KeyClicked(Sender: TObject; var Key: Word;
|
|
Shift: TShiftState);
|
|
var edit: TCommandEdit;
|
|
begin
|
|
edit := sender as TCommandEdit;
|
|
if Key = vk_up then begin
|
|
if HId < History.Count-1 then begin
|
|
HId := HId+1;
|
|
Text := History[HId];
|
|
SyncronizeInstances;
|
|
end else if HId = History.Count-1 then begin
|
|
HId := HId+1;
|
|
Text := '';
|
|
SyncronizeInstances;
|
|
end;
|
|
end else if Key = vk_down then begin
|
|
if (HId > 0) then begin
|
|
HId := HId-1;
|
|
Text := History[HId];
|
|
SyncronizeInstances;
|
|
end;
|
|
end else if Key = vk_return then begin
|
|
Text := edit.Text;
|
|
if HId = History.Count then begin
|
|
History.Add(Text);
|
|
HId := History.Count-1;
|
|
end;
|
|
{$ifndef Designer}
|
|
if assigned(CadControl) then begin
|
|
TPowerCad(CadControl).CurrentString := Text;
|
|
if Id = -1 then
|
|
TPowerCad(CadControl).ExecuteCustomCommand(Name)
|
|
else
|
|
TPowerCad(CadControl).ExecuteTBCommand(ID);
|
|
end;
|
|
{$endif}
|
|
SyncronizeInstances;
|
|
end;
|
|
end;
|
|
|
|
procedure TEditCommand.SyncronizeInstances;
|
|
var i: integer;
|
|
pCom: TCommandInstance;
|
|
begin
|
|
for i := 0 to instances.count-1 do
|
|
begin
|
|
pCom := TCommandInstance(Instances[i]);
|
|
if assigned(pCom.Button) then TEdit(pCom.Button).Text := Text;
|
|
if assigned(pCom.Button) then TEdit(pCom.Button).Enabled := Enabled;
|
|
end;
|
|
end;
|
|
|
|
{ TCommandPanel }
|
|
|
|
constructor TCommandPanel.Create(aOwner: TComponent;
|
|
aCom: TCommandInstance);
|
|
begin
|
|
inherited Create(aOwner);
|
|
ComInst := aCom;
|
|
Parent := TWinControl(aOwner);
|
|
Visible := true;
|
|
Width := 120;
|
|
Height := 18;
|
|
BevelInner := bvNone;
|
|
BevelOuter := bvLowered;
|
|
Alignment := taLeftJustify;
|
|
Font.Name := 'Tahoma';
|
|
Font.Size := 8;
|
|
end;
|
|
|
|
destructor TCommandPanel.Destroy;
|
|
begin
|
|
if assigned(ComInst) then ComInst.Button := nil;
|
|
if assigned(ComInst) then ComInst.Bevel := nil;
|
|
inherited destroy;;
|
|
end;
|
|
|
|
{ TCommandEdit }
|
|
|
|
constructor TCommandEdit.Create(aOwner: TComponent;
|
|
aCom: TCommandInstance);
|
|
begin
|
|
inherited Create(aOwner);
|
|
ComInst := aCom;
|
|
Parent := TWinControl(aOwner);
|
|
Visible := True;
|
|
Width := 120;
|
|
Font.Name := 'Courier New';
|
|
Font.Size := 10;
|
|
end;
|
|
|
|
destructor TCommandEdit.Destroy;
|
|
begin
|
|
if assigned(ComInst) then ComInst.Button := nil;
|
|
if assigned(ComInst) then ComInst.Bevel := nil;
|
|
inherited destroy;;
|
|
end;
|
|
|
|
initialization
|
|
CommandClasses := TList.Create;
|
|
CommandClasses.Add(TPcadCommand);
|
|
CommandClasses.Add(TPCColorCommand);
|
|
CommandClasses.Add(TPCToggleCommand);
|
|
CommandClasses.Add(TPCFileNameCommand);
|
|
CommandClasses.Add(TPCOptionsCommand);
|
|
CommandClasses.Add(TCommandList);
|
|
CommandClasses.Add(TPCBrushStyleCommand);
|
|
CommandClasses.Add(TPCPenStyleCommand);
|
|
CommandClasses.Add(TPCRowStyleCommand);
|
|
CommandClasses.Add(TPCPenWidthCommand);
|
|
CommandClasses.Add(TPCFontNameCommand);
|
|
CommandClasses.Add(TPCTextSizeCommand);
|
|
CommandClasses.Add(TToolCommand);
|
|
CommandClasses.Add(TInfoCommand);
|
|
CommandClasses.Add(TEditCommand);
|
|
finalization
|
|
CommandClasses.Free;
|
|
end.
|
|
|