From fb6111e65f2b43d845f3467b583e17fe792646da Mon Sep 17 00:00:00 2001 From: zeljko Date: Sun, 18 Jan 2015 18:17:05 +0000 Subject: [PATCH] gtk3: started imagelist implementation in TListView. git-svn-id: trunk@47417 - --- lcl/interfaces/gtk3/gtk3widgets.pas | 30 +++++++++++++++++++++++++-- lcl/interfaces/gtk3/gtk3wscomctrls.pp | 29 ++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/lcl/interfaces/gtk3/gtk3widgets.pas b/lcl/interfaces/gtk3/gtk3widgets.pas index 89c4f1545c..3d9a3adee3 100644 --- a/lcl/interfaces/gtk3/gtk3widgets.pas +++ b/lcl/interfaces/gtk3/gtk3widgets.pas @@ -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; diff --git a/lcl/interfaces/gtk3/gtk3wscomctrls.pp b/lcl/interfaces/gtk3/gtk3wscomctrls.pp index ef853ab1cb..d89914c8ec 100644 --- a/lcl/interfaces/gtk3/gtk3wscomctrls.pp +++ b/lcl/interfaces/gtk3/gtk3wscomctrls.pp @@ -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;