cxcustomdata.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,436 行 · 第 1/5 页

PAS
1,436
字号
    Expanded: Boolean;
    Level: Integer;
    RecordIndex: Integer;
  end;

  TcxDataFocusingInfo = class
  private
    FChangedFlag: Boolean;
    FDataControllerInfo: TcxCustomDataControllerInfo;
    FLevel: Integer;
    FPrevNewItemRowFocused: Boolean;
    FPrevRecordIndex: Integer;
    FRecordIndex: Integer;
    FRowIndex: Integer;
  protected
    procedure Assign(AFocusingInfo: TcxDataFocusingInfo);
    procedure Clear;
    function IsEqual(AFocusingInfo: TcxDataFocusingInfo): Boolean;
    procedure ResetPos;
    procedure SavePos;
    property Level: Integer read FLevel write FLevel;
    property RecordIndex: Integer read FRecordIndex write FRecordIndex;
    property RowIndex: Integer read FRowIndex write FRowIndex;
  public
    constructor Create(ADataControllerInfo: TcxCustomDataControllerInfo);
  end;

  TcxDataExpandingInfoState = (eisExpanded, eisSelected);
  TcxDataExpandingInfoStateSet = set of TcxDataExpandingInfoState;

  TcxDataExpandingInfo = record
    Level: Integer;
    Value: Variant;
    State: TcxDataExpandingInfoStateSet;
  end;
  PcxDataExpandingInfo = ^TcxDataExpandingInfo;

  TcxDataExpandingInfos = class
  private
    FFields: TList;
    FItems: TList;
    FSaveStates: TcxDataExpandingInfoStateSet;
    function Find(AField: TcxCustomDataField): Integer;
    function GetCount: Integer;
    function GetEmpty: Boolean;
    function GetField(Index: Integer): TcxCustomDataField;
    function GetFieldCount: Integer;
    function GetItem(Index: Integer): PcxDataExpandingInfo;
  protected
    procedure AddField(AField: TcxCustomDataField);
    procedure AddItem(ALevel: Integer; const AValue: Variant; AState: TcxDataExpandingInfoStateSet);
    procedure CheckField(AField: TcxCustomDataField);
    procedure Clear;
    procedure ClearFields;
    procedure ClearValues;
  public
    constructor Create;
    destructor Destroy; override;
    property Count: Integer read GetCount;
    property Empty: Boolean read GetEmpty;
    property FieldCount: Integer read GetFieldCount;
    property Fields[Index: Integer]: TcxCustomDataField read GetField;
    property Items[Index: Integer]: PcxDataExpandingInfo read GetItem; default;
    property SaveStates: TcxDataExpandingInfoStateSet read FSaveStates write FSaveStates;
  end;

  TcxDataSelectionInfo = record
    Level: Integer;
    RecordIndex: Integer; // if Level = -1 then RecordIndex is GroupIndex (in DataGroups)
    RowIndex: Integer;
  end;
  PcxDataSelectionInfo = ^TcxDataSelectionInfo;

  TcxDataSelection = class
  private
    FAnchorRowIndex: Integer;
    FDataController: TcxCustomDataController;
    FItems: TList;
    FFields: TList;
    FOnChanged: TcxNoParamsEvent;
    function GetCount: Integer;
    function GetField(Index: Integer): TcxCustomDataField;
    function GetFieldCount: Integer;
    function GetItem(Index: Integer): PcxDataSelectionInfo;
  protected
    procedure Changed;
    procedure CheckAfterFiltering;
    procedure ClearAnchor; virtual;
    procedure InternalAdd(AIndex, ARowIndex, ARecordIndex, ALevel: Integer); virtual;
    procedure InternalClear; virtual;
    procedure InternalDelete(AIndex: Integer); virtual;
    procedure SetInternalCount(ACount: Integer); virtual;
  public
    constructor Create(ADataController: TcxCustomDataController); virtual;
    destructor Destroy; override;
    procedure Add(AIndex, ARowIndex, ARecordIndex, ALevel: Integer); virtual;
    procedure AddField(AField: TcxCustomDataField);
    procedure Clear;
    procedure ClearAll;
    procedure ClearFields;
    procedure Delete(AIndex: Integer);
    function FindByGroupIndex(AGroupIndex: Integer): Integer;
    function FindByRecordIndex(ARecordIndex: Integer): Integer;
    function FindByRowIndex(ARowIndex: Integer; var AIndex: Integer): Boolean; virtual;
    function IsRecordSelected(ARecordIndex: Integer): Boolean;
    function IsRowSelected(ARowIndex: Integer): Boolean;
    procedure Sort;
    property Count: Integer read GetCount;
    property DataController: TcxCustomDataController read FDataController;
    property FieldCount: Integer read GetFieldCount;
    property Fields[Index: Integer]: TcxCustomDataField read GetField;
    property Items[Index: Integer]: PcxDataSelectionInfo read GetItem; default;
    property AnchorRowIndex: Integer read FAnchorRowIndex;
    property OnChanged: TcxNoParamsEvent read FOnChanged write FOnChanged;
  end;

  TcxDataSelectionClass = class of TcxDataSelection;

  TcxCustomDataControllerInfo = class
  private
    FChanges: TcxDataControllerInfoChanges;
    FDataController: TcxCustomDataController;
    FDataGroups: TcxDataGroups;
    FExpandingInfo: TcxDataExpandingInfos;
    FExpandingFlag: Boolean;
    FFocusingFlag: Boolean;
    FFocusingInfo: TcxDataFocusingInfo;
    FGroupingFieldList: TcxGroupingFieldList;
    FInCanFocusedRowChanging: Boolean;
    FInfoCalculation: Boolean;
    FLockCount: Integer;
    FPrevFocusingInfo: TcxDataFocusingInfo;
    FRecordList: TList;
    FSelection: TcxDataSelection;
    FSortingFieldList: TcxSortingFieldList;
    FTotalSortingFieldList: TcxSortingFieldList;
    procedure CheckAfterCollapsing;
    procedure CheckExpanding;
    procedure CheckFocusing;
    procedure CheckFocusingAfterFilter;
    procedure CheckInfo;
    procedure ClearInfo;
    function CompareRecords(ARecord1, ARecord2: Pointer): Integer;
    function GetFocusedRecordIndex: Integer;
    function GetFocusedRowIndex: Integer;
    function GetNewItemRowFocusingChanged: Boolean;
    function GetPrevFocusedRecordIndex: Integer;
    function GetPrevFocusedRowIndex: Integer;
    procedure SaveInfo;
    procedure SetFocusedRowIndex(Value: Integer);
  protected
    function CanFocusedRowChanging(ARowIndex: Integer): Boolean;
    procedure CorrectFocusedRow(ARowIndex: Integer);
    procedure DoChangeFocusedRow(AValue: Integer; AIsInternal: Boolean);
    procedure DoFilter;
    procedure DoGrouping;
    procedure DoLoad;
    procedure DoSort;
    procedure DoBeginSummary;
    procedure DoEndSummary;
    function FindDataGroup(ARecordListIndex: Integer): Integer;
    function FindFocusedRow(ANearest: Boolean): Integer;
    procedure ForwardChanges;
    function GetInternalRecordCount: Integer;
    function GetInternalRecordListIndex(ARecordIndex: Integer): Integer;
    function IsAlwaysExpanded: Boolean;
    function IsGrouped: Boolean;
    function IsSummaryForSelectedRecords: Boolean;
    function LocateGroupByLevel(AGroupIndex, ALevel: Integer): Integer;
    function LocateDetail(AGroupIndex, ARecordListIndex: Integer; AMakeVisible: Boolean): Integer;
    procedure PrepareSorting;
    procedure RecalcSelection;
    procedure ResetFocusing;
    procedure SaveExpanding(ASaveStates: TcxDataExpandingInfoStateSet);
    procedure TruncateSelection; virtual;
    procedure UnprepareSorting;
    procedure Update; virtual;
    // Sorting By Summary
    procedure DoSortBySummary;
    function IsSortingBySummary: Boolean;

    property SortingFieldList: TcxSortingFieldList read FSortingFieldList;
    property TotalSortingFieldList: TcxSortingFieldList read FTotalSortingFieldList;
  public
    constructor Create(ADataController: TcxCustomDataController); virtual;
    destructor Destroy; override;
    procedure BeginUpdate;
    procedure EndUpdate;
    procedure CheckChanges;
    procedure CheckRowIndex(ARowIndex: Integer);
    function GetInternalRecordIndex(ARecordListIndex: Integer): Integer;
    procedure Refresh;
    procedure RefreshFocused;
    procedure RefreshSummary(ARedrawOnly: Boolean);
    // Notify
    procedure ExpandingChanged;
    procedure FocusedRecordChanged(AChangedFlag: Boolean);
    procedure GroupingChanged;
    procedure SelectionChanged;
    procedure SortingChanged;
    // Structure
    procedure RemoveField(AField: TcxCustomDataField);
    procedure UpdateField(AField: TcxCustomDataField);
    // Sorting
    procedure ChangeSortIndex(AField: TcxCustomDataField; ASortIndex: Integer);
    procedure ChangeSorting(AField: TcxCustomDataField; ASortOrder: TcxDataSortOrder);
    procedure ClearSorting(AKeepGroupedItems: Boolean);
    // Grouping
    procedure ChangeExpanding(ARowIndex: Integer; AExpanded, ARecursive: Boolean);
    procedure ChangeGrouping(AField: TcxCustomDataField; AGroupIndex: Integer);
    procedure ClearGrouping;
    function CompareGroupRecords(ARecordIndex1, ARecordIndex2, AIndex: Integer): Integer;
    procedure FullCollapse;
    procedure FullExpand;
    property DataGroups: TcxDataGroups read FDataGroups;
    property GroupingFieldList: TcxGroupingFieldList read FGroupingFieldList;
    // View Data
    function GetNearestRowIndex(ARowIndex: Integer): Integer;
    function GetRowCount: Integer;
    function GetRowIndexByRecordIndex(ARecordIndex: Integer; AMakeVisible: Boolean): Integer;
    function GetRowInfo(ARowIndex: Integer): TcxRowInfo;
    // Selection
    procedure ChangeRowSelection(ARowIndex: Integer; ASelection: Boolean);
    procedure ClearSelection;
    procedure ClearSelectionAnchor;
    function GetSelectedCount: Integer;
    function GetSelectedRowIndex(Index: Integer): Integer;
    function IsRowSelected(ARowIndex: Integer): Boolean;
    property Selection: TcxDataSelection read FSelection;
    // Navigation
    property FocusedRecordIndex: Integer read GetFocusedRecordIndex;
    property FocusedRowIndex: Integer read GetFocusedRowIndex write SetFocusedRowIndex;
    property NewItemRowFocusingChanged: Boolean read GetNewItemRowFocusingChanged;
    property PrevFocusedRecordIndex: Integer read GetPrevFocusedRecordIndex;
    property PrevFocusedRowIndex: Integer read GetPrevFocusedRowIndex;

    property DataController: TcxCustomDataController read FDataController;
    property LockCount: Integer read FLockCount;
  end;

  { Filter }

  TcxDataFilterCriteriaItem = class(TcxFilterCriteriaItem)
  private
    function GetDataController: TcxCustomDataController;
    function GetField: TcxCustomDataField;
  protected
    function GetDataValue(AData: TObject): Variant; override;
    function GetFieldCaption: string; override;
    function GetFieldName: string; override;
    function GetItemLink: TObject; override;
    procedure SetItemLink(Value: TObject); override;
  public
    property DataController: TcxCustomDataController read GetDataController;
    property Field: TcxCustomDataField read GetField;
  end;

  TcxDataFilterValueList = class(TcxFilterValueList)
  private
    function GetDataController: TcxCustomDataController;
  public
    procedure Load(AItemIndex: Integer; AInitSortByDisplayText: Boolean = True;
      AUseFilteredValues: Boolean = False); virtual;
    property DataController: TcxCustomDataController read GetDataController;
  end;

  TcxDataFilterGetValueListEvent = procedure(Sender: TcxFilterCriteria;
    AItemIndex: Integer; AValueList: TcxDataFilterValueList) of object;

  TcxDataFilterCriteria = class(TcxFilterCriteria)
  private
    FActive: Boolean;
    FDataController: TcxCustomDataController;
    FDestroying: Boolean;
    FOnGetValueList: TcxDataFilterGetValueListEvent;
    procedure SetActive(Value: Boolean);
  protected
    procedure DefineProperties(Filer: TFiler); override;
    function DoFilterRecord(ARecordIndex: Integer): Boolean;
    function GetIDByItemLink(AItemLink: TObject): Integer; override;
    function GetNameByItemLink(AItemLink: TObject): string; override;
    function GetItemClass: TcxFilterCriteriaItemClass; override;
    function GetItemLinkByID(AID: Integer): TObject; override;
    function GetItemLinkByName(const AName: string): TObject; override;
    function GetValueListClass: TcxFilterValueListClass; override;
    function IsDestroying: Boolean;
    function IsInternal: Boolean;
    function IsLoading: Boolean;

⌨️ 快捷键说明

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