gtk3: started imagelist implementation in TListView.

git-svn-id: trunk@47417 -
This commit is contained in:
zeljko 2015-01-18 18:17:05 +00:00
parent 2eeabc2538
commit fb6111e65f
2 changed files with 57 additions and 2 deletions

View File

@ -523,6 +523,7 @@ type
TGtk3ListView = class(TGtk3ScrollableWin)
private
FPreselectedIndices: TFPList;
FImages: TFPList;
FIsTreeView: Boolean;
protected
function CreateWidget(const Params: TCreateParams):PGtkWidget; override;
@ -533,6 +534,7 @@ type
function getHorizontalScrollbar: PGtkScrollbar; override;
function getVerticalScrollbar: PGtkScrollbar; override;
function GetScrolledWindow: PGtkScrolledWindow; override;
procedure ClearImages;
procedure ColumnDelete(AIndex: Integer);
function ColumnGetWidth(AIndex: Integer): Integer;
procedure ColumnInsert(AIndex: Integer; AColumn: TListColumn);
@ -552,7 +554,9 @@ type
function ItemGetState(const AIndex: Integer; const AItem: TListItem; const AState: TListItemState;
out AIsSet: Boolean): Boolean;
procedure UpdateImageCellsSize;
property Images: TFPList read FImages write FImages;
property IsTreeView: Boolean read FIsTreeView;
end;
@ -5166,6 +5170,7 @@ var
PtrType: GType;
TreeModel: PGtkTreeModel;
begin
FImages := nil;
FScrollX := 0;
FScrollY := 0;
FPreselectedIndices := nil;
@ -5216,6 +5221,8 @@ end;
destructor TGtk3ListView.Destroy;
begin
ClearImages;
FreeAndNil(FImages);
FreeAndNil(FPreselectedIndices);
inherited Destroy;
end;
@ -5244,6 +5251,19 @@ begin
Result := nil;
end;
procedure TGtk3ListView.ClearImages;
var
i: Integer;
begin
if Assigned(FImages) then
begin
for i := FImages.Count - 1 downto 0 do
if FImages[i] <> nil then
TGtk3Object(FImages[i]).Free;
FImages.Clear;
end;
end;
procedure TGtk3ListView.ColumnDelete(AIndex: Integer);
var
AColumn: PGtkTreeViewColumn;
@ -5273,7 +5293,7 @@ procedure Gtk3WSLV_ListViewGetPixbufDataFuncForColumn(tree_column: PGtkTreeViewC
cell: PGtkCellRenderer; tree_model: PGtkTreeModel; iter: PGtkTreeIter; AData: GPointer); cdecl;
var
ListItem: TListItem;
Images: TList;
Images: TFPList;
// Widgets: PTVWidgets;
ListColumn: TListColumn;
ImageIndex: Integer;
@ -5289,7 +5309,7 @@ begin
Exit;
ColumnIndex := ListColumn.Index;
// Images := Widgets^.Images;
Images := nil;
Images := TGtk3ListView(AData).Images;
if Images = nil then
Exit;
ImageIndex := -1;
@ -5677,6 +5697,12 @@ begin
end;
end;
procedure TGtk3ListView.UpdateImageCellsSize;
begin
// must get renderer via property
// gtk_tree_view_column_get_cell_renderers
end;
{ TGtk3ComboBox }
function TGtk3ComboBox.GetItemIndex: Integer;

View File

@ -879,9 +879,38 @@ end;
class procedure TGtk3WSCustomListView.SetImageList(const ALV: TCustomListView;
const AList: TListViewImageList; const AValue: TCustomImageList);
var
AView: TGtk3ListView;
i: Integer;
Bmp: TBitmap;
begin
if not WSCheckHandleAllocated(ALV, 'SetImageList') then
exit;
DebugLn('TGtk3WSCustomListView.SetImageList ');
AView := TGtk3ListView(ALV.Handle);
// inherited SetImageList(ALV, AList, AValue);
if ((AList = lvilLarge) and not AView.IsTreeView) or
((AList = lvilSmall) and AView.IsTreeView) then
begin
if Assigned(AView.Images) then
AView.ClearImages
else
AView.Images := TFPList.Create;
if Assigned(AValue) then
begin
for i := 0 to AValue.Count - 1 do
begin
Bmp := TBitmap.Create;
AValue.GetBitmap(i, Bmp);
AView.Images.Add(Bmp);
end;
end;
if AView.IsTreeView then
AView.UpdateImageCellsSize;
AView.Update(nil);
end;
end;
class procedure TGtk3WSCustomListView.SetItemsCount(const ALV: TCustomListView;