📄 jvqdataproviderdesignerform.pas
字号:
fmeToolbar.aiDeleteItem.Enabled := (ParentMan <> nil) and (Item <> nil) and
(Item <> FRootItem) and Item.IsDeletable;
fmeToolbar.aiDeleteSubItems.Enabled := (Man <> nil) and (Items <> nil) and
(Items.Count > 0);
end;
procedure TfrmDataProviderDesigner.InitContexts;
var
Ctx: IJvDataContexts;
I: Integer;
begin
fmeToolbar.cbContexts.Items.BeginUpdate;
try
fmeToolbar.cbContexts.ItemIndex := -1;
fmeToolbar.cbContexts.Items.Clear;
fmeToolbar.cbContexts.Sorted := False;
if (InternalProvider <> nil) and Supports(InternalProvider, IJvDataContexts, Ctx) then
begin
for I := 0 to Ctx.GetCount - 1 do
fmeToolbar.cbContexts.Items.AddObject(Ctx.GetContext(I).Name, TObject(I));
fmeToolbar.cbContexts.Sorted := True;
fmeToolbar.cbContexts.Sorted := False;
end;
// (rom) TObject(-99) needs explanation.
fmeToolbar.cbContexts.Items.InsertObject(0, RsDefault, TObject(-99));
finally
fmeToolbar.cbContexts.Items.EndUpdate;
if fmeToolbar.cbContexts.Items.Count > 0 then
fmeToolbar.cbContexts.ItemIndex := 0;
fmeToolbar.pnlContexts.Visible := fmeToolbar.cbContexts.Items.Count > 1;
fmeToolbar.UpdateToolbarSeparators;
end;
end;
procedure TfrmDataProviderDesigner.InitViewList(Sender: TJvDataConsumer;
SubSvc: TJvDataConsumerAggregatedObject);
var
VL: IJvDataConsumerViewList;
begin
if SubSvc is TJvCustomDataConsumerViewList then
if SubSvc.GetInterface(IJvDataConsumerViewList, VL) then
VL.ExpandOnNewItem := True;
end;
function TfrmDataProviderDesigner.InternalProvider: IJvDataProvider;
begin
Result := fmeTreeList.Provider.ProviderIntf;
end;
function TfrmDataProviderDesigner.GetProvider: IJvDataProvider;
begin
Result := fmeTreeList.Provider.ProviderIntf;
end;
procedure TfrmDataProviderDesigner.SetProvider(Value: IJvDataProvider);
var
ViewList: IJvDataConsumerViewList;
ProviderImpl: TComponent;
begin
fmeTreeList.Provider.SetProviderIntf(Value);
if csDestroying in ComponentState then
Exit;
if Provider <> nil then
begin
FRootItem := TJvProviderRootItem.Create(Provider as IJvDataItems);
fmeTreeList.Provider.SetContextIntf(nil);
// Odd behaviour: ViewList is not filled when the provider is set. Look into this issue later!
if Supports(fmeTreeList.Provider as IJvDataConsumer, IJvDataConsumerViewList, ViewList) then
ViewList.RebuildView;
ProviderImpl := (Provider as IInterfaceComponentReference).GetComponent;
Caption := Format(RsDataProviderDesignerCaption, [ProviderImpl.Name, PropName]);
end;
InitContexts;
UpdateSelectedItem(Self);
end;
procedure TfrmDataProviderDesigner.SetDesigner(Value: IJvFormDesigner);
begin
if Value <> FDesigner then
begin
if FDesigner <> nil then
ResetSelection;
FOrgSelect := TDesignerSelections.Create;
FDesigner := Value;
if Designer <> nil then
Designer.GetSelections(FOrgSelect);
end;
end;
procedure TfrmDataProviderDesigner.Loaded;
begin
inherited Loaded;
if fmeTreeList <> nil then
with fmeTreeList do
begin
OnGetVirtualRoot := NeedRoot;
OnItemSelect := UpdateSelectedItem;
Provider.AfterCreateSubSvc := InitViewList;
UseVirtualRoot := True;
end;
end;
function TfrmDataProviderDesigner.DesignerFormName: string;
begin
Result := RsDataProviderDesigner;
end;
function TfrmDataProviderDesigner.AutoStoreSettings: Boolean;
begin
Result := True;
end;
destructor TfrmDataProviderDesigner.Destroy;
begin
inherited Destroy;
end;
procedure TfrmDataProviderDesigner.aiAddItemExecute(Sender: TObject);
var
Item: IJvDataItem;
Items: IJvDataItems;
Dsgn: IJvDataItemsDesigner;
Mangr: IJvDataItemsManagement;
begin
if fmeTreeList.lvProvider.Selected <> nil then
begin
Item := fmeTreeList.GetDataItem(fmeTreeList.lvProvider.Selected.Index);
if Item <> nil then
Item.QueryInterface(IJvDataItems, Items)
else // should never occur
raise EJVCLException.CreateRes(@RsEDataItemNotFound);
end
else
Items := InternalProvider as IJvDataItems;
Item := nil;
if Items <> nil then
begin
if Supports(Items, IJvDataItemsDesigner, Dsgn) then
Item := Dsgn.NewByKind(TMenuItem(Sender).Tag)
else
if Supports(Items, IJvDataItemsManagement, Mangr) then
Item := Mangr.New
else // should never occur
raise EJVCLException.CreateResFmt(@RsEDataProviderAddErrorReason, [RsEDataProviderNoManOrDsgn]);
if Item <> nil then
begin
fmeTreeList.SelectItemID(Item.GetID);
if Designer <> nil then
Designer.Modified;
end
else
raise EJVCLException.CreateRes(@RsEDataProviderAddFailed);
end
else // should never occur
raise EJVCLException.CreateResFmt(@RsEDataProviderAddErrorReason, [RsEDataProviderNoSubItems]);
end;
procedure TfrmDataProviderDesigner.aiDeleteItemExecute(Sender: TObject);
var
I: Integer;
Item: IJvDataItem;
Items: IJvDataItems;
Mangr: IJvDataItemsManagement;
begin
if fmeTreeList.lvProvider.Selected <> nil then
begin
I := fmeTreeList.lvProvider.Selected.Index;
Item := fmeTreeList.GetDataItem(I);
if Item <> nil then
Items := Item.GetItems
else
raise EJVCLException.CreateRes(@RsEDataItemNotFound);
if Supports(Items, IJvDataItemsManagement, Mangr) then
begin
ResetSelection;
Mangr.Remove(Item);
if Designer <> nil then
Designer.Modified;
end
else
raise EJVCLException.CreateResFmt(@RsEDataProviderDeleteErrorReason, [RsEDataProviderNoMan]);
end;
end;
procedure TfrmDataProviderDesigner.aiClearSubExecute(Sender: TObject);
var
Item: IJvDataItem;
Items: IJvDataItems;
Mangr: IJvDataItemsManagement;
begin
if fmeTreeList.lvProvider.Selected <> nil then
begin
Item := fmeTreeList.GetDataItem(fmeTreeList.lvProvider.Selected.Index);
if Item <> nil then
begin
if not Supports(Item, IJvDataItems, Items) then
raise EJVCLException.CreateResFmt(@RsEDataProviderDeleteErrorReason, [RsEDataProviderNoSubItems]);
end
else
raise EJVCLException.CreateRes(@RsEDataItemNotFound);
if Supports(Items, IJvDataItemsManagement, Mangr) then
begin
Mangr.Clear;
if Designer <> nil then
Designer.Modified;
end
else
raise EJVCLException.CreateResFmt(@RsEDataProviderDeleteErrorReason, [RsEDataProviderNoMan]);
end;
end;
procedure TfrmDataProviderDesigner.cbContextsChange(Sender: TObject);
var
CtxIdx: Integer;
CtxList: IJvDataContexts;
begin
if fmeToolbar.cbContexts.ItemIndex > 0 then
begin
CtxIdx := Integer(fmeToolbar.cbContexts.Items.Objects[fmeToolbar.cbContexts.ItemIndex]);
if CtxIdx >= 0 then
begin
{ Retrieve context and activate it in the consumer service. }
if Supports(InternalProvider, IJvDataContexts, CtxList) then
fmeTreeList.Provider.SetContextIntf(CtxList.GetContext(CtxIdx))
else
raise EJVCLException.CreateRes(@RsEInternalErrorUnableToRetrieveContext);
end
else
fmeTreeList.Provider.SetContextIntf(nil);
end
else
fmeTreeList.Provider.SetContextIntf(nil);
end;
procedure TfrmDataProviderDesigner.FormDestroy(Sender: TObject);
begin
ResetSelection;
FRootItem := nil;
Provider := nil;
Designer := nil;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -