ProGestion/Base/uDBSelectionList.pas
2007-06-21 16:12:43 +00:00

126 lines
2.8 KiB
ObjectPascal

unit uDBSelectionList;
interface
uses
uDADataTable, Classes, DB;
type
TSelectedRowList = class;
ISelectedRowList = interface
['{1886B04A-DB0D-40AE-BCAE-DA57CD4CD582}']
function GetSelectedRows : TSelectedRowList;
property SelectedRows : TSelectedRowList read GetSelectedRows;
end;
TSelectedRowList = class
private
FDataTable: TDADataTable;
FList: TList;
function GetCount: Integer;
function GetCurrentRowSelected: Boolean;
function GetItem(Index: Integer): TBookmark;
procedure SetCurrentRowSelected(Value: Boolean);
protected
function CurrentRow: TBookmark;
function Compare(const Item1, Item2: TBookmark): Boolean;
public
constructor Create(ADataTable : TDADataTable);
destructor Destroy; override;
procedure Clear; // free all bookmarks
function Find(const Item: TBookmark; var Index: Integer): Boolean;
function IndexOf(const Item: TBookmark): Integer;
property Count: Integer read GetCount;
property CurrentRowSelected: Boolean read GetCurrentRowSelected
write SetCurrentRowSelected;
property Items[Index: Integer]: TBookmark read GetItem; default;
end;
implementation
uses
DBConsts;
{ TSelectedRowList }
constructor TSelectedRowList.Create(ADataTable : TDADataTable);
begin
inherited Create;
FList := TList.Create;
FDataTable := ADataTable;
end;
destructor TSelectedRowList.Destroy;
begin
Clear;
FList.Free;
FDataTable := NIL;
inherited Destroy;
end;
procedure TSelectedRowList.Clear;
begin
if FList.Count = 0 then
Exit;
FList.Clear;
end;
function TSelectedRowList.Compare(const Item1, Item2: TBookmark): Boolean;
begin
Result := (Item1 = Item2);
end;
function TSelectedRowList.CurrentRow: TBookmark;
begin
if not FDataTable.Active then
raise EDatabaseError.Create(sDataSetClosed);
Result := FDataTable.GetBookMark
end;
function TSelectedRowList.GetCurrentRowSelected: Boolean;
var
Index: Integer;
begin
Result := Find(CurrentRow, Index);
end;
function TSelectedRowList.Find(const Item: TBookmark; var Index: Integer): Boolean;
begin
Index := FList.IndexOf(Item);
Result := (Index > -1)
end;
function TSelectedRowList.GetCount: Integer;
begin
Result := FList.Count;
end;
function TSelectedRowList.GetItem(Index: Integer): TBookmark;
begin
Result := FList[Index];
end;
function TSelectedRowList.IndexOf(const Item: TBookmark): Integer;
begin
Result := FList.IndexOf(Item);
end;
procedure TSelectedRowList.SetCurrentRowSelected(Value: Boolean);
var
Index: Integer;
Current: TBookmark;
begin
Current := CurrentRow;
if (Find(Current, Index) = Value) then
Exit;
if Value then
FList.Add(Current)
else
FList.Delete(Index);
end;
end.