328 lines
9.6 KiB
ObjectPascal
328 lines
9.6 KiB
ObjectPascal
|
|
{********************************************************************}
|
|
{ }
|
|
{ Developer Express Visual Component Library }
|
|
{ ExpressEditors }
|
|
{ }
|
|
{ Copyright (c) 1998-2009 Developer Express Inc. }
|
|
{ ALL RIGHTS RESERVED }
|
|
{ }
|
|
{ The entire contents of this file is protected by U.S. and }
|
|
{ International Copyright Laws. Unauthorized reproduction, }
|
|
{ reverse-engineering, and distribution of all or any portion of }
|
|
{ the code contained in this file is strictly prohibited and may }
|
|
{ result in severe civil and criminal penalties and will be }
|
|
{ prosecuted to the maximum extent possible under the law. }
|
|
{ }
|
|
{ RESTRICTIONS }
|
|
{ }
|
|
{ THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES }
|
|
{ (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE }
|
|
{ SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS }
|
|
{ LICENSED TO DISTRIBUTE THE EXPRESSEDITORS AND ALL }
|
|
{ ACCOMPANYING VCL CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. }
|
|
{ }
|
|
{ THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED }
|
|
{ FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE }
|
|
{ COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE }
|
|
{ AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT }
|
|
{ AND PERMISSION FROM DEVELOPER EXPRESS INC. }
|
|
{ }
|
|
{ CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON }
|
|
{ ADDITIONAL RESTRICTIONS. }
|
|
{ }
|
|
{********************************************************************}
|
|
|
|
unit cxEditRepositoryEditor;
|
|
|
|
{$I cxVer.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF DELPHI6}
|
|
DesignIntf,
|
|
Variants,
|
|
{$ELSE}
|
|
DsgnIntf,
|
|
{$ENDIF}
|
|
Windows, SysUtils, Classes, Graphics, Controls, Forms,
|
|
Dialogs, cxDesignWindows, StdCtrls, cxEdit, Menus, ExtCtrls;
|
|
|
|
type
|
|
TcxEditRepositoryEditor = class(TcxDesignFormEditor)
|
|
LBItems: TListBox;
|
|
btAdd: TButton;
|
|
btDelete: TButton;
|
|
btClose: TButton;
|
|
Panel1: TPanel;
|
|
PopupMenu1: TPopupMenu;
|
|
miAdd: TMenuItem;
|
|
miDelete: TMenuItem;
|
|
N1: TMenuItem;
|
|
miSelectAll: TMenuItem;
|
|
procedure LBItemsClick(Sender: TObject);
|
|
procedure btDeleteClick(Sender: TObject);
|
|
procedure btCloseClick(Sender: TObject);
|
|
procedure btAddClick(Sender: TObject);
|
|
procedure SelectItem(AItem: TObject);
|
|
procedure miAddClick(Sender: TObject);
|
|
procedure miDeleteClick(Sender: TObject);
|
|
procedure miSelectAllClick(Sender: TObject);
|
|
private
|
|
function GetEditRepository: TcxEditRepository;
|
|
procedure UpdateButtons;
|
|
procedure UpdateDesigner(Sender: TObject);
|
|
procedure UpdateItems;
|
|
protected
|
|
procedure InitFormEditor; override;
|
|
public
|
|
procedure DoItemsModified; override;
|
|
procedure SelectionsChanged(const ASelection: TDesignerSelectionList); override;
|
|
property EditRepository: TcxEditRepository read GetEditRepository;
|
|
end;
|
|
|
|
procedure RegisterEditRepositoryItem(
|
|
AEditRepositoryItemClass: TcxEditRepositoryItemClass; const ADescription: string);
|
|
procedure UnRegisterEditRepositoryItem(
|
|
AEditRepositoryItemClass: TcxEditRepositoryItemClass);
|
|
|
|
procedure ShowEditRepositoryEditor(ADesigner: IDesigner;
|
|
AEditRepository: TcxEditRepository);
|
|
|
|
procedure GenEditRepositoryItemName(AEditRepository: TcxEditRepository;
|
|
AItem: TcxEditRepositoryItem);
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
uses
|
|
cxClasses, cxSelectEditRepositoryItem;
|
|
|
|
var
|
|
EditRepositoryList: TcxRegisteredClasses;
|
|
SetupSelectData: TcxSelectRepositoryItemSetup;
|
|
|
|
procedure RegisterEditRepositoryItem(
|
|
AEditRepositoryItemClass: TcxEditRepositoryItemClass; const ADescription: string);
|
|
begin
|
|
EditRepositoryList.Register(AEditRepositoryItemClass, ADescription)
|
|
end;
|
|
|
|
procedure UnRegisterEditRepositoryItem(
|
|
AEditRepositoryItemClass: TcxEditRepositoryItemClass);
|
|
begin
|
|
EditRepositoryList.UnRegister(AEditRepositoryItemClass);
|
|
end;
|
|
|
|
procedure ShowEditRepositoryEditor(ADesigner: IDesigner;
|
|
AEditRepository: TcxEditRepository);
|
|
begin
|
|
ShowFormEditorClass(ADesigner, AEditRepository, TcxEditRepositoryEditor);
|
|
end;
|
|
|
|
procedure GenEditRepositoryItemName(AEditRepository: TcxEditRepository;
|
|
AItem: TcxEditRepositoryItem);
|
|
var
|
|
ABaseName: string;
|
|
I: Integer;
|
|
begin
|
|
ABaseName := AItem.GetBaseName;
|
|
I := 1;
|
|
while I <> -1 do
|
|
try
|
|
AItem.Name := ABaseName + IntToStr(I);
|
|
I := -1;
|
|
except
|
|
on EComponentError do //Ignore rename errors
|
|
Inc(I);
|
|
end;
|
|
end;
|
|
|
|
procedure TcxEditRepositoryEditor.LBItemsClick(Sender: TObject);
|
|
var
|
|
AList: TList;
|
|
I: Integer;
|
|
begin
|
|
AList := TList.Create;
|
|
try
|
|
for I := 0 to LBItems.Items.Count - 1 do
|
|
if LBItems.Selected[I] then
|
|
AList.Add(LBItems.Items.Objects[I]);
|
|
SelectComponents(AList, EditRepository);
|
|
finally
|
|
AList.Free;
|
|
end;
|
|
UpdateButtons;
|
|
end;
|
|
|
|
function TcxEditRepositoryEditor.GetEditRepository: TcxEditRepository;
|
|
begin
|
|
Result := Component as TcxEditRepository;
|
|
end;
|
|
|
|
procedure TcxEditRepositoryEditor.UpdateButtons;
|
|
begin
|
|
btDelete.Enabled := LBItems.SelCount <> 0;
|
|
miDelete.Enabled := btDelete.Enabled;
|
|
miSelectAll.Enabled := btDelete.Enabled;
|
|
end;
|
|
|
|
procedure TcxEditRepositoryEditor.btDeleteClick(Sender: TObject);
|
|
|
|
function FindItemToSelect: TObject;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
Result := nil;
|
|
with LBItems do
|
|
begin
|
|
if ItemIndex = -1 then Exit;
|
|
if not Selected[ItemIndex] then
|
|
Result := Items.Objects[ItemIndex]
|
|
else
|
|
begin
|
|
for I := ItemIndex + 1 to Items.Count - 1 do
|
|
if not Selected[I] then
|
|
begin
|
|
Result := Items.Objects[I];
|
|
Exit
|
|
end;
|
|
for I := ItemIndex - 1 downto 0 do
|
|
if not Selected[I] then
|
|
begin
|
|
Result := Items.Objects[I];
|
|
Exit
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
var
|
|
I: Integer;
|
|
AItem: TObject;
|
|
begin
|
|
if LBItems.SelCount > 0 then
|
|
begin
|
|
AItem := FindItemToSelect;
|
|
for I := 0 to LBItems.Items.Count - 1 do
|
|
if LBItems.Selected[I] then
|
|
TcxEditRepositoryItem(LBItems.Items.Objects[I]).Free;
|
|
UpdateItems;
|
|
SelectItem(AItem);
|
|
UpdateButtons;
|
|
UpdateDesigner(nil);
|
|
LBItemsClick(nil);
|
|
end;
|
|
end;
|
|
|
|
procedure TcxEditRepositoryEditor.UpdateDesigner(Sender: TObject);
|
|
begin
|
|
Designer.Modified;
|
|
end;
|
|
|
|
procedure TcxEditRepositoryEditor.UpdateItems;
|
|
var
|
|
I, AItemIndex, ATopIndex: Integer;
|
|
ASelection: TStringList;
|
|
begin
|
|
ListBoxSaveSelection(LBItems, ASelection, AItemIndex, ATopIndex);
|
|
try
|
|
LBItems.Items.Clear;
|
|
for I := 0 to EditRepository.Count - 1 do
|
|
LBItems.Items.AddObject(EditRepository.Items[I].Name, EditRepository.Items[I]);
|
|
finally
|
|
ListBoxRestoreSelection(LBItems, ASelection, AItemIndex, ATopIndex);
|
|
end;
|
|
end;
|
|
|
|
procedure TcxEditRepositoryEditor.InitFormEditor;
|
|
begin
|
|
inherited InitFormEditor;
|
|
UpdateItems;
|
|
UpdateSelection;
|
|
UpdateButtons;
|
|
end;
|
|
|
|
procedure TcxEditRepositoryEditor.DoItemsModified;
|
|
begin
|
|
UpdateItems;
|
|
end;
|
|
|
|
procedure TcxEditRepositoryEditor.SelectionsChanged(
|
|
const ASelection: TDesignerSelectionList);
|
|
var
|
|
AList: TList;
|
|
begin
|
|
AList := TList.Create;
|
|
try
|
|
GetSelectionList(AList);
|
|
ListBoxSyncSelection(LBItems, AList);
|
|
finally
|
|
AList.Free;
|
|
end;
|
|
UpdateButtons;
|
|
end;
|
|
|
|
procedure TcxEditRepositoryEditor.btCloseClick(Sender: TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
|
|
procedure TcxEditRepositoryEditor.btAddClick(Sender: TObject);
|
|
var
|
|
AEditRepositoryItemClass: TcxEditRepositoryItemClass;
|
|
AItem: TcxEditRepositoryItem;
|
|
begin
|
|
with SetupSelectData do
|
|
List := EditRepositoryList;
|
|
AEditRepositoryItemClass := GetEditRepositoryItemClass(SetupSelectData);
|
|
if AEditRepositoryItemClass <> nil then
|
|
begin
|
|
with EditRepository do
|
|
AItem := CreateItemEx(AEditRepositoryItemClass, Owner);
|
|
GenEditRepositoryItemName(EditRepository, AItem);
|
|
UpdateItems;
|
|
SelectItem(AItem);
|
|
UpdateButtons;
|
|
UpdateDesigner(nil);
|
|
end;
|
|
end;
|
|
|
|
procedure TcxEditRepositoryEditor.SelectItem(AItem: TObject);
|
|
begin
|
|
LBItems.ItemIndex := LBItems.Items.IndexOfObject(AItem);
|
|
ListBoxClearSelection(LBItems);
|
|
if Component <> nil then
|
|
if AItem <> nil then
|
|
Designer.SelectComponent(TComponent(AItem))
|
|
else
|
|
Designer.SelectComponent(Component)
|
|
end;
|
|
|
|
procedure TcxEditRepositoryEditor.miAddClick(Sender: TObject);
|
|
begin
|
|
btAddClick(nil);
|
|
end;
|
|
|
|
procedure TcxEditRepositoryEditor.miDeleteClick(Sender: TObject);
|
|
begin
|
|
btDeleteClick(nil);
|
|
end;
|
|
|
|
procedure TcxEditRepositoryEditor.miSelectAllClick(Sender: TObject);
|
|
begin
|
|
ListBoxSelectAll(LBItems);
|
|
LBItemsClick(nil);
|
|
end;
|
|
|
|
initialization
|
|
SetupSelectData.Pos := Point(-1, -1);
|
|
EditRepositoryList := TcxRegisteredClasses.Create;
|
|
|
|
finalization
|
|
FreeAndNil(EditRepositoryList);
|
|
|
|
end.
|