Component Palette: Move SelectionMode to interface. Support multiselect also in ComponentList.

git-svn-id: trunk@48516 -
This commit is contained in:
juha 2015-03-26 21:19:10 +00:00
parent 8b06480841
commit dade590e2a
3 changed files with 33 additions and 9 deletions

View File

@ -176,11 +176,17 @@ type
cphtSelectionChanged
);
TComponentSelectionMode = (
csmSingle, // reset selection on component add
csmMulty // don't reset selection on component add
);
TEndUpdatePaletteEvent = procedure(Sender: TObject; PaletteChanged: boolean) of object;
TGetComponentClassEvent = procedure(const AClass: TComponentClass) of object;
TUpdateCompVisibleEvent = procedure(AComponent: TRegisteredComponent;
var VoteVisible: integer { Visible>0 } ) of object;
TPaletteHandlerEvent = procedure of object;
//TComponentAddedEvent = procedure(ALookupRoot, AComponent: TComponent; ARegisteredComponent: TRegisteredComponent) of object;
RegisterUnitComponentProc = procedure(const Page, UnitName: ShortString;
ComponentClass: TComponentClass);
TBaseComponentPageList = specialize TFPGList<TBaseComponentPage>;
@ -207,6 +213,7 @@ type
fHandlers: array[TComponentPaletteHandlerType] of TMethodList;
fComponentPageClass: TBaseComponentPageClass;
fSelected: TRegisteredComponent;
fSelectionMode: TComponentSelectionMode;
fHideControls: boolean;
fUpdateLock: integer;
fChanged: boolean;
@ -223,7 +230,9 @@ type
procedure DoPageRemovedComponent(Component: TRegisteredComponent);
function VoteCompVisibility(AComponent: TRegisteredComponent): Boolean;
function GetSelected: TRegisteredComponent;
function GetMultiSelect: boolean;
procedure SetSelected(const AValue: TRegisteredComponent);
procedure SetMultiSelect(AValue: boolean);
public
constructor Create(EnvPaletteOptions: TCompPaletteOptions);
destructor Destroy; override;
@ -244,6 +253,7 @@ type
function CreateNewClassName(const Prefix: string): string;
procedure Update({%H-}ForceUpdateAll: Boolean); virtual;
procedure IterateRegisteredClasses(Proc: TGetComponentClassEvent);
procedure SetSelectedComp(AComponent: TRegisteredComponent; AMulti: Boolean);
// Registered handlers
procedure DoAfterComponentAdded;
procedure DoAfterSelectionChanged;
@ -267,6 +277,8 @@ type
property ChangeStamp: integer read fChangeStamp;
property HideControls: boolean read FHideControls write FHideControls;
property Selected: TRegisteredComponent read GetSelected write SetSelected;
property MultiSelect: boolean read GetMultiSelect write SetMultiSelect;
property SelectionMode: TComponentSelectionMode read FSelectionMode write FSelectionMode;
// User ordered + original pages and components.
property UserOrder: TCompPaletteUserOrder read fUserOrder;
property OnClassSelected: TNotifyEvent read fOnClassSelected write fOnClassSelected;
@ -655,6 +667,7 @@ end;
constructor TBaseComponentPalette.Create(EnvPaletteOptions: TCompPaletteOptions);
begin
fSelectionMode:=csmSingle;
fPages:=TBaseComponentPageList.Create;
fComps:=TRegisteredComponentList.Create;
fOrigPagePriorities:=TPagePriorityList.Create;
@ -848,6 +861,11 @@ begin
Result := fSelected;
end;
function TBaseComponentPalette.GetMultiSelect: boolean;
begin
Result := FSelectionMode = csmMulty;
end;
procedure TBaseComponentPalette.SetSelected(const AValue: TRegisteredComponent);
begin
if fSelected=AValue then exit;
@ -861,6 +879,14 @@ begin
DoAfterSelectionChanged;
end;
procedure TBaseComponentPalette.SetMultiSelect(AValue: boolean);
begin
if AValue then
FSelectionMode := csmMulty
else
FSelectionMode := csmSingle;
end;
procedure TBaseComponentPalette.AddHandler(HandlerType: TComponentPaletteHandlerType;
const AMethod: TMethod; AsLast: boolean);
begin
@ -1035,6 +1061,12 @@ begin
Proc(Comps[i].ComponentClass);
end;
procedure TBaseComponentPalette.SetSelectedComp(AComponent: TRegisteredComponent; AMulti: Boolean);
begin
MultiSelect := AMulti;
Selected := AComponent;
end;
// Execute handlers
function TBaseComponentPalette.VoteCompVisibility(AComponent: TRegisteredComponent): Boolean;

View File

@ -378,7 +378,7 @@ var
begin
AComponent:=GetSelectedComponent;
if AComponent<>nil then
IDEComponentPalette.Selected:=AComponent;
IDEComponentPalette.SetSelectedComp(AComponent, ssShift in GetKeyShiftState);
UpdateButtonState;
end;

View File

@ -48,11 +48,6 @@ const
CompPalSelectionToolBtnPrefix = 'PaletteSelectBtn';
CompPaletteCompBtnPrefix = 'PaletteBtn';
type
TComponentSelectionMode = (
csmSingle, // reset selection on component add
csmMulty // don't reset selection on component add
);
{ TComponentPage }
TComponentPage = class(TBaseComponentPage)
@ -102,7 +97,6 @@ type
FPageControl: TPageControl;
FOnOpenPackage: TNotifyEvent;
FOnOpenUnit: TNotifyEvent;
FSelectionMode: TComponentSelectionMode;
fUnregisteredIcon: TCustomBitmap;
fSelectButtonIcon: TCustomBitmap;
fUpdatingPageControl: boolean;
@ -141,7 +135,6 @@ type
procedure Update(ForceUpdateAll: Boolean); override;
public
property PageControl: TPageControl read FPageControl write SetPageControl;
property SelectionMode: TComponentSelectionMode read FSelectionMode write FSelectionMode;
property OnOpenPackage: TNotifyEvent read FOnOpenPackage write FOnOpenPackage;
property OnOpenUnit: TNotifyEvent read FOnOpenUnit write FOnOpenUnit;
end;
@ -832,7 +825,6 @@ end;
constructor TComponentPalette.Create;
begin
inherited Create(EnvironmentOptions.ComponentPaletteOptions);
FSelectionMode:=csmSingle;
fComponentButtons:=TComponentButtonMap.Create;
fComponentButtons.Sorted:=True;
OnComponentIsInvisible:=@CheckComponentDesignerVisible;