cxcustomtablevieweditor.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,118 行 · 第 1/3 页
PAS
1,118 行
View.BeginUpdate;
try
ListBoxDeleteSelection(AListBox, True);
ListBoxLoadCollection(AListBox, ACollection);
finally
View.EndUpdate;
end;
FormEditor.ListBoxApplySelection(AListBox, ACollection);
UpdateDesigner;
finally
EndUpdate;
end;
end;
end;
procedure TcxCustomTableViewEditor.DoCreateViewItems(AMissingItemsOnly: Boolean);
procedure GetViewItems(AItems: TList);
var
I: Integer;
begin
for I := 0 to View.ItemCount - 1 do
AItems.Add(View.Items[I]);
end;
procedure GetViewNewItems(AOldItems, ANewItems: TList);
var
I, J: Integer;
begin
for I := 0 to View.ItemCount - 1 do
begin
J := AOldItems.IndexOf(View.Items[I]);
if J = -1 then
ANewItems.Add(View.Items[I])
else
AOldItems.Delete(J);
end;
end;
var
AItems: TList;
begin
AItems := TList.Create;
try
GetViewItems(AItems);
CreateViewItems(View, AMissingItemsOnly);
GetViewNewItems(AItems, AItems);
UpdateColumnList;
ListBoxSyncSelection(LBColumns, AItems);
LBColumnsClick(nil);
UpdateDesigner;
finally
AItems.Free;
end;
end;
procedure TcxCustomTableViewEditor.DrawListBoxItem(AListBox: TWinControl;
AIndex: Integer; R: TRect);
begin
with AListBox as TListBox, Canvas do
begin
FillRect(R);
TextOut(R.Left + 2, R.Top, Items[AIndex]);
end;
end;
function TcxCustomTableViewEditor.GetCurrentGroup: TcxDataSummaryGroup;
function GetGroupByItems(ASummaryItems: TcxDataSummaryItems): TcxDataSummaryGroup;
var
I: Integer;
begin
Result := nil;
for I := 0 to SummaryGroups.Count - 1 do
if SummaryGroups[I].SummaryItems = ASummaryItems then
begin
Result := SummaryGroups[I];
Break;
end;
end;
function GetGroupByItemLinks(ASummaryGroupItemLinks: TcxDataSummaryGroupItemLinks): TcxDataSummaryGroup;
var
I: Integer;
begin
Result := nil;
for I := 0 to SummaryGroups.Count - 1 do
if SummaryGroups[I].Links = ASummaryGroupItemLinks then
begin
Result := SummaryGroups[I];
Break;
end;
end;
function GetSummaryGroup(APersistent: TPersistent): TcxDataSummaryGroup;
begin
if APersistent is TcxDataSummaryGroup then
Result := TcxDataSummaryGroup(APersistent)
else
if APersistent is TcxDataSummaryItem then
Result := GetGroupByItems(TcxDataSummaryItem(APersistent).SummaryItems)
else
if APersistent is TcxDataSummaryItems then
Result := GetGroupByItems(TcxDataSummaryItems(APersistent))
else
if APersistent is TcxDataSummaryGroupItemLink then
Result := GetGroupByItemLinks(TcxDataSummaryGroupItemLink(APersistent).SummaryGroupItemLinks)
else
if APersistent is TcxDataSummaryGroupItemLinks then
Result := GetGroupByItemLinks(TcxDataSummaryGroupItemLinks(APersistent))
else
Result := nil;
end;
var
AList: TList;
I: Integer;
ASummaryGroup: TcxDataSummaryGroup;
begin
Result := nil;
AList := TList.Create;
try
GetSelectionList(AList);
for I := 0 to AList.Count - 1 do
begin
ASummaryGroup := GetSummaryGroup(TPersistent(AList[I]));
if (ASummaryGroup <> nil) and (GetViewByObject(ASummaryGroup) = View) then
if Result = nil then
Result := ASummaryGroup
else
if Result <> ASummaryGroup then
begin
Result := nil;
Break;
end;
end;
finally
AList.Free;
end;
end;
function TcxCustomTableViewEditor.GetDeleteItemsCaption: string;
begin
Result := Format('Delete existing %ss?', [LowerCase(GetViewItemName(View))]);
end;
procedure TcxCustomTableViewEditor.SelectAllColumns;
begin
ListBoxSelectAll(LBColumns);
end;
procedure TcxCustomTableViewEditor.UpdateButtons;
begin
// Columns
BColumnAdd.Enabled := CanAddComponent;
BColumnDelete.Enabled := CanDeleteComponent(nil) and (LBColumns.SelCount > 0);
BColumnRestore.Enabled := LBColumns.SelCount > 0;
BColumnMoveUp.Enabled := LBColumns.SelCount > 0;
BColumnMoveDown.Enabled := LBColumns.SelCount > 0;
BColumnAddAll.Enabled := CanAddComponent and
(View.DataController as IcxCustomGridDataController).IsDataLinked;
BColumnAddMissing.Enabled := BColumnAddAll.Enabled and
not (View.DataController as IcxCustomGridDataController).HasAllItems;
MIColumnAdd.Enabled := BColumnAdd.Enabled;
MIColumnDelete.Enabled := BColumnDelete.Enabled;
MIColumnRestore.Enabled := BColumnRestore.Enabled;
MIColumnMoveUp.Enabled := BColumnMoveUp.Enabled;
MIColumnMoveDown.Enabled := BColumnMoveDown.Enabled;
MIColumnSelectAll.Enabled := LBColumns.SelCount < LBColumns.Items.Count;
// Summary
BAddFooterSummaryItem.Enabled := CanAddComponent;
BDeleteFooterSummaryItem.Enabled := CanDeleteComponent(nil) and (LBFooterSummary.SelCount > 0);
BDefaultGroupSummaryAdd.Enabled := CanAddComponent;
BDefaultGroupSummaryDelete.Enabled := CanDeleteComponent(nil) and (LBDefaultGroupsSummary.SelCount > 0);
BSummaryGroupAdd.Enabled := CanAddComponent;
BSummaryGroupDelete.Enabled := CanDeleteComponent(nil) and (LBSummaryGroups.SelCount > 0);
BGroupSummaryItemAdd.Enabled := CanAddComponent and (GetCurrentGroup <> nil);
BGroupSummaryItemDelete.Enabled := CanDeleteComponent(nil) and (LBGroupSummaryItems.SelCount > 0);
BColumnLink.Enabled := CanAddComponent and (LBUnlinkedColumns.SelCount > 0);
BColumnUnlink.Enabled := CanDeleteComponent(nil) and (LBLinkedColumns.SelCount > 0);
MIFooterSummaryAdd.Enabled := BAddFooterSummaryItem.Enabled;
MIFooterSummaryDelete.Enabled := BDeleteFooterSummaryItem.Enabled;
MIFooterSummarySelectAll.Enabled := LBFooterSummary.SelCount < LBFooterSummary.Items.Count;
MIDefaultGroupSummaryAdd.Enabled := BDefaultGroupSummaryAdd.Enabled;
MIDefaultGroupSummaryDelete.Enabled := BDefaultGroupSummaryDelete.Enabled;
MIDefaultGroupSummarySelectAll.Enabled := LBDefaultGroupsSummary.SelCount < LBDefaultGroupsSummary.Items.Count;
MISummaryGroupAdd.Enabled := BSummaryGroupAdd.Enabled;
MISummaryGroupDelete.Enabled := BSummaryGroupDelete.Enabled;
MISummaryGroupSelectAll.Enabled := LBSummaryGroups.SelCount < LBSummaryGroups.Items.Count;
MIGroupSummaryItemsAdd.Enabled := BGroupSummaryItemAdd.Enabled;
MIGroupSummaryItemsDelete.Enabled := BGroupSummaryItemDelete.Enabled;
MIGroupSummaryItemsSelectAll.Enabled := LBGroupSummaryItems.SelCount < LBGroupSummaryItems.Items.Count;
end;
procedure TcxCustomTableViewEditor.UpdateColumnList;
var
I, AItemIndex, ATopIndex: Integer;
ASelection: TStringList;
S: string;
begin
ListBoxSaveSelection(LBColumns, ASelection, AItemIndex, ATopIndex);
try
LBColumns.Items.Clear;
for I := 0 to View.ItemCount - 1 do
begin
S := View.Items[I].Name;
if View.Items[I].RepositoryItem <> nil then
S := S + ' (' + View.Items[I].RepositoryItem.Name + ')'; // TODO: description
LBColumns.Items.AddObject(S, View.Items[I]);
end;
finally
ListBoxRestoreSelection(LBColumns, ASelection, AItemIndex, ATopIndex);
end;
end;
procedure TcxCustomTableViewEditor.UpdateEditor;
begin
BColumnAddAll.Visible :=
(View.DataController as IcxCustomGridDataController).SupportsCreateAllItems;
BColumnAddMissing.Visible := BColumnAddAll.Visible;
UpdateColumnList;
UpdateSummary;
end;
procedure TcxCustomTableViewEditor.UpdateSelection;
begin
FormEditor.ListBoxSynchronizeSelection(LBColumns);
UpdateSummarySelection;
UpdateButtons;
end;
procedure TcxCustomTableViewEditor.UpdateSummary;
begin
ListBoxLoadCollection(LBFooterSummary, FooterSummaryItems);
ListBoxLoadCollection(LBDefaultGroupsSummary, DefaultGroupSummaryItems);
ListBoxLoadCollection(LBSummaryGroups, SummaryGroups);
UpdateSummaryGroups;
end;
procedure TcxCustomTableViewEditor.UpdateSummarySelection;
var
AList: TList;
begin
AList := TList.Create;
try
FormEditor.GetSelectionList(AList);
ListBoxSyncSelection(LBFooterSummary, AList);
ListBoxSyncSelection(LBDefaultGroupsSummary, AList);
ListBoxSyncSelection(LBSummaryGroups, AList);
ListBoxSelectByObject(LBSummaryGroups, GetCurrentGroup);
SummaryGroup := GetCurrentGroup;
ListBoxSyncSelection(LBGroupSummaryItems, AList);
finally
AList.Free;
end;
end;
function TcxCustomTableViewEditor.GetDefaultGroupSummaryItems: TcxDataGroupSummaryItems;
begin
Result := View.DataController.Summary.DefaultGroupSummaryItems;
end;
function TcxCustomTableViewEditor.GetFooterSummaryItems: TcxDataFooterSummaryItems;
begin
Result := View.DataController.Summary.FooterSummaryItems;
end;
function TcxCustomTableViewEditor.GetSummaryGroups: TcxDataSummaryGroups;
begin
Result := View.DataController.Summary.SummaryGroups;
end;
function TcxCustomTableViewEditor.GetView: TcxCustomGridTableView;
begin
Result := inherited View as TcxCustomGridTableView;
end;
procedure TcxCustomTableViewEditor.SetSummaryGroup(Value: TcxDataSummaryGroup);
begin
if FSummaryGroup <> Value then
begin
FSummaryGroup := Value;
UpdateSummaryGroups;
end;
end;
procedure TcxCustomTableViewEditor.ReindexColumnsProc(AList: TList; ANewIndex: Integer);
var
I: Integer;
begin
if AList.Count = 0 then Exit;
if TcxCustomGridTableItem(AList[0]).Index < ANewIndex then
begin
for I := 0 to AList.Count - 1 do
TcxCustomGridTableItem(AList[I]).Index := ANewIndex;
end
else
begin
for I := AList.Count - 1 downto 0 do
TcxCustomGridTableItem(AList[I]).Index := ANewIndex;
end;
UpdateDesigner;
end;
procedure TcxCustomTableViewEditor.UpdateSummaryGroupLinks;
var
ACurrentGroup: TcxDataSummaryGroup;
I: Integer;
AItemLink: TObject;
ADataController: TcxCustomDataController;
AItemIndex1, ATopIndex1, AItemIndex2, ATopIndex2: Integer;
ASelection1, ASelection2: TStringList;
begin
ACurrentGroup := GetCurrentGroup;
ListBoxSaveSelection(LBUnlinkedColumns, ASelection1, AItemIndex1, ATopIndex1);
ListBoxSaveSelection(LBLinkedColumns, ASelection2, AItemIndex2, ATopIndex2);
try
LBUnlinkedColumns.Items.Clear;
LBLinkedColumns.Items.Clear;
if ACurrentGroup <> nil then
begin
for I := 0 to ACurrentGroup.Links.Count - 1 do
begin
AItemLink := ACurrentGroup.Links[I].ItemLink;
if AItemLink is TComponent then
LBLinkedColumns.Items.AddObject((AItemLink as TComponent).Name, AItemLink);
end;
ADataController := ACurrentGroup.SummaryGroups.Summary.DataController;
for I := 0 to ADataController.ItemCount - 1 do
begin
AItemLink := ADataController.GetItem(I);
if LBLinkedColumns.Items.IndexOfObject(AItemLink) = -1 then
LBUnlinkedColumns.Items.AddObject((AItemLink as TComponent).Name, AItemLink);
end;
end;
finally
ListBoxRestoreSelection(LBUnlinkedColumns, ASelection1, AItemIndex1, ATopIndex1);
ListBoxRestoreSelection(LBLinkedColumns, ASelection2, AItemIndex2, ATopIndex2);
end;
end;
procedure TcxCustomTableViewEditor.UpdateSummaryGroups;
var
ACurrentGroup: TcxDataSummaryGroup;
begin
ACurrentGroup := GetCurrentGroup;
if ACurrentGroup <> nil then
ListBoxLoadCollection(LBGroupSummaryItems, ACurrentGroup.SummaryItems)
else
LBGroupSummaryItems.Items.Clear;
UpdateSummaryGroupLinks;
end;
// Columns
procedure TcxCustomTableViewEditor.LBColumnsClick(Sender: TObject);
begin
FormEditor.ListBoxApplySelection(LBColumns, View);
end;
procedure TcxCustomTableViewEditor.BColumnAddClick(Sender: TObject);
var
AItem: TcxCustomGridTableItem;
begin
ListBoxClearSelection(LBColumns);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?