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

View File

@ -879,9 +879,38 @@ end;
class procedure TGtk3WSCustomListView.SetImageList(const ALV: TCustomListView; class procedure TGtk3WSCustomListView.SetImageList(const ALV: TCustomListView;
const AList: TListViewImageList; const AValue: TCustomImageList); const AList: TListViewImageList; const AValue: TCustomImageList);
var
AView: TGtk3ListView;
i: Integer;
Bmp: TBitmap;
begin begin
if not WSCheckHandleAllocated(ALV, 'SetImageList') then
exit;
DebugLn('TGtk3WSCustomListView.SetImageList '); DebugLn('TGtk3WSCustomListView.SetImageList ');
AView := TGtk3ListView(ALV.Handle);
// inherited SetImageList(ALV, AList, AValue); // 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; end;
class procedure TGtk3WSCustomListView.SetItemsCount(const ALV: TCustomListView; class procedure TGtk3WSCustomListView.SetItemsCount(const ALV: TCustomListView;