Componentes.Terceros.DevExp.../internal/x.42/2/ExpressEditors Library 5/Sources/cxEditRepositoryEditor.pas

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.