git-svn-id: https://192.168.0.254/svn/Proyectos.EstudioCarnicero_ProGestion/trunk@4 1b8572a8-2d6b-b84e-8c90-20ed86fa4eca
126 lines
2.8 KiB
ObjectPascal
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.
|