cxgridgrouprowpopupmenuitems.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 184 行

PAS
184
字号
unit cxGridGroupRowPopupMenuItems;

{$I cxVer.inc}

interface

uses
  cxCustomData, cxGridCustomView, cxGridTableView, cxGridMenuOperations;

type
  TcxGridGroupRowPopupMenuOperation = class(TcxGridTablePopupMenuOperation)
  private
    function GetHitRow: TcxGridGroupRow;
  public
    property HitRow: TcxGridGroupRow read GetHitRow;
  end;

  TcxGridGroupRowSortByGroupValuesOperation = class(TcxGridGroupRowPopupMenuOperation)
  protected
    procedure Execute(Sender: TObject); override;
    function GetDown: Boolean; override;
  public
    constructor Create; override;
  end;

  TcxGridGroupRowSortBySummaryCaptionOperation = class(TcxGridGroupRowPopupMenuOperation)
  public
    constructor Create; override;
  end;

  TcxGridGroupRowSortBySummaryOperation = class(TcxGridGroupRowPopupMenuOperation)
  private
    FSummaryItem: TcxDataSummaryItem;
    procedure SetSummaryItem(Value: TcxDataSummaryItem);
  protected
    procedure Execute(Sender: TObject); override;
    function GetCaption: string; override;
    function GetDown: Boolean; override;
    function GetImageResourceName: string; override;
  public
    constructor Create; override;
    property SummaryItem: TcxDataSummaryItem read FSummaryItem write SetSummaryItem;
  end;

  TcxGridGroupRowPopupMenuOperations = class(TcxGridPopupMenuOperations)
  private
    FGroupRow: TcxGridGroupRow;
    procedure SetGroupRow(Value: TcxGridGroupRow);
  protected
    procedure AddItems; override;
  public
    function CanProcess(AHitTest: TcxCustomGridHitTest): Boolean; override;
    property GroupRow: TcxGridGroupRow read FGroupRow write SetGroupRow;
  end;

implementation

uses
  SysUtils, cxClasses, cxGridCustomTableView, cxGridPopupMenuConsts;

{ TcxGridGroupRowPopupMenuOperation }

function TcxGridGroupRowPopupMenuOperation.GetHitRow: TcxGridGroupRow;
begin
  if (GridPopupMenu.HitTest is TcxGridRecordHitTest) and
    (TcxGridRecordHitTest(GridPopupMenu.HitTest).GridRecord is TcxGridGroupRow) then
    Result := TcxGridGroupRow(TcxGridRecordHitTest(GridPopupMenu.HitTest).GridRecord)
  else
    Result := nil;
end;

{ TcxGridGroupRowSortByGroupValuesOperation }

constructor TcxGridGroupRowSortByGroupValuesOperation.Create;
begin
  inherited;
  ResCaption := @cxSGridSortByGroupValues;
end;

procedure TcxGridGroupRowSortByGroupValuesOperation.Execute(Sender: TObject);
begin
  if HitRow.GroupSummaryItems.SortedSummaryItem <> nil then
    HitRow.GroupSummaryItems.SortedSummaryItem.Sorted := False;
end;

function TcxGridGroupRowSortByGroupValuesOperation.GetDown: Boolean;
begin
  Result := HitRow.GroupSummaryItems.SortedSummaryItem = nil;
end;

{ TcxGridGroupRowSortBySummaryCaptionOperation }

constructor TcxGridGroupRowSortBySummaryCaptionOperation.Create;
begin
  inherited;
  ResCaption := @cxSGridSortBySummaryCaption;
end;

{ TcxGridGroupRowSortBySummaryOperation }

constructor TcxGridGroupRowSortBySummaryOperation.Create;
begin
  inherited;
  ResCaption := @cxSGridSortBySummary;
end;

procedure TcxGridGroupRowSortBySummaryOperation.SetSummaryItem(Value: TcxDataSummaryItem);
begin
  if FSummaryItem <> Value then
  begin
    FSummaryItem := Value;
    UpdateImage;
  end;
end;

procedure TcxGridGroupRowSortBySummaryOperation.Execute(Sender: TObject);
begin
  SummaryItem.Sorted := True;
end;

function TcxGridGroupRowSortBySummaryOperation.GetCaption: string;
var
  AGridSummaryItem: IcxGridSummaryItem;
begin
  if Supports(SummaryItem, IcxGridSummaryItem, AGridSummaryItem) then
    Result := AGridSummaryItem.DisplayText
  else
    Result := '';
  if Result = '' then
  begin
    Result := cxGetResourceString(GetSummaryName(SummaryItem.Kind));
    if SummaryItem.ItemLink <> nil then
      Result := Format(inherited GetCaption,
        [Result, (SummaryItem.ItemLink as TcxGridColumn).GetAlternateCaption]);
  end;
  Result := '   ' + Result;
end;

function TcxGridGroupRowSortBySummaryOperation.GetDown: Boolean;
begin
  Result := SummaryItem.Sorted;
end;

function TcxGridGroupRowSortBySummaryOperation.GetImageResourceName: string;
begin
  if SummaryItem <> nil then
    Result := GetSummaryImageResourceName(SummaryItem.Kind)
  else
    Result := inherited GetImageResourceName;
end;

{ TcxGridGroupRowPopupMenuOperations }

procedure TcxGridGroupRowPopupMenuOperations.SetGroupRow(Value: TcxGridGroupRow);
begin
  FGroupRow := Value;
  RecreateItems;
end;

procedure TcxGridGroupRowPopupMenuOperations.AddItems;
var
  ASummaryItems: TcxDataGroupSummaryItems;
  I: Integer;
  AGridSummaryItem: IcxGridSummaryItem;
begin
  if GroupRow = nil then Exit;
  ASummaryItems := GroupRow.GroupSummaryItems;
  if ASummaryItems.Count = 0 then Exit;
  AddItem(TcxGridGroupRowSortByGroupValuesOperation);
  AddItem(TcxGridGroupRowSortBySummaryCaptionOperation).BeginGroup := True;
  for I := 0 to ASummaryItems.Count - 1 do
    if not Supports(ASummaryItems[I], IcxGridSummaryItem, AGridSummaryItem) or
      AGridSummaryItem.VisibleForCustomization then
      TcxGridGroupRowSortBySummaryOperation(AddItem(TcxGridGroupRowSortBySummaryOperation)).SummaryItem := ASummaryItems[I];
end;

function TcxGridGroupRowPopupMenuOperations.CanProcess(AHitTest: TcxCustomGridHitTest): Boolean;
begin
  Result := inherited CanProcess(AHitTest) and (AHitTest is TcxGridRecordHitTest) and
    (TcxGridRecordHitTest(AHitTest).GridRecord is TcxGridGroupRow);
end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?