gtk2: virtual listview support

git-svn-id: trunk@22789 -
This commit is contained in:
paul 2009-11-26 08:12:37 +00:00
parent f7cdfc7494
commit fa717236dc
3 changed files with 56 additions and 10 deletions

View File

@ -373,8 +373,10 @@ begin
if (WidgetInfo <> nil) and (WidgetInfo^.LCLObject.InheritsFrom(TCustomListView)) then
begin
gtk_tree_model_get(tree_model, iter, [0, @ListItem, -1]);
if (ListItem = nil) and TCustomListView(WidgetInfo^.LCLObject).OwnerData then
ListItem := TCustomListView(WidgetInfo^.LCLObject).Items[LCLCellRenderer^.Index];
if ListItem = nil then
exit;
Exit;
ListColumn := TListColumn(g_object_get_data(G_OBJECT(cell_layout), 'TListColumn'));
if ListColumn = nil then
LCLCellRenderer^.ColumnIndex := -1

View File

@ -149,6 +149,7 @@ type
class procedure SetHoverTime(const ALV: TCustomListView; const AValue: Integer); override;
// class procedure SetIconOptions(const ALV: TCustomListView; const AValue: TIconOptions); override;
class procedure SetImageList(const ALV: TCustomListView; const AList: TListViewImageList; const AValue: TCustomImageList); override;
class procedure SetItemsCount(const ALV: TCustomListView; const Avalue: Integer); override;
class procedure SetProperty(const ALV: TCustomListView; const AProp: TListViewProperty; const AIsSet: Boolean); override;
class procedure SetProperties(const ALV: TCustomListView; const AProps: TListViewProperties); override;
class procedure SetScrollBars(const ALV: TCustomListView; const AValue: TScrollStyle); override;

View File

@ -29,13 +29,13 @@ procedure Gtk2_ItemCheckedChanged(renderer: PGtkCellRendererToggle; PathStr: Pgc
var
LV: TLVHack;
Index: Integer;
LI: TLVItemHack;
ListItem: TLVItemHack;
begin
LV := TLVHack(WidgetInfo^.LCLObject);
Index := StrToInt(PathStr);
LI := TLVItemHack(LV.Items.Item[Index]);
if LI <> nil then
LI.Checked := not LI.GetCheckedInternal;
ListItem := TLVItemHack(LV.Items.Item[Index]);
if ListItem <> nil then
ListItem.Checked := not ListItem.GetCheckedInternal;
end;
procedure Gtk2_ItemFocusChanged(treeview: PGtkTreeView; WidgetInfo: PWidgetInfo);cdecl;
@ -225,10 +225,19 @@ end;
procedure Gtk2WSLV_ListViewGetCheckedDataFunc(tree_column: PGtkTreeViewColumn;
cell: PGtkCellRenderer; tree_model: PGtkTreeModel; iter: PGtkTreeIter; WidgetInfo: PWidgetInfo); cdecl;
var
APath: PGtkTreePath;
ListItem: TLVItemHack;
begin
gtk_tree_model_get(tree_model, iter, [0, @ListItem, -1]);
if ListITem = nil then
if (ListItem = nil) and TCustomListView(WidgetInfo^.LCLObject).OwnerData then
begin
APath := gtk_tree_model_get_path(tree_model,iter);
ListItem := TLVItemHack(TCustomListView(WidgetInfo^.LCLObject).Items[gtk_tree_path_get_indices(APath)^]);
gtk_tree_path_free(APath);
end;
if ListItem = nil then
Exit;
gtk_cell_renderer_toggle_set_active(PGtkCellRendererToggle(cell), ListItem.GetCheckedInternal);
end;
@ -243,6 +252,7 @@ var
ListColumn: TListColumn;
ImageIndex: Integer;
ColumnIndex: Integer;
APath: PGtkTreePath;
begin
PGtkCellRendererPixbuf(cell)^.pixbuf := nil;
Widgets := PTVWidgets(WidgetInfo^.UserData);
@ -252,12 +262,23 @@ begin
if ListColumn = nil then
Exit;
ColumnIndex := ListColumn.Index;
Images := Widgets^.Images;
Images := Widgets^.Images;
if Images = nil then
Exit;
ImageIndex := -1;
if (ListItem = nil) and TCustomListView(WidgetInfo^.LCLObject).OwnerData then
begin
APath := gtk_tree_model_get_path(tree_model,iter);
ListItem := TCustomListView(WidgetInfo^.LCLObject).Items[gtk_tree_path_get_indices(APath)^];
gtk_tree_path_free(APath);
end;
if ListItem = nil then
Exit;
if ColumnIndex = 0 then
ImageIndex := ListITem.ImageIndex
ImageIndex := ListItem.ImageIndex
else
if ColumnIndex -1 <= ListItem.SubItems.Count-1 then
ImageIndex := ListItem.SubItemImages[ColumnIndex-1];
@ -529,9 +550,9 @@ begin
// add renderers
pixrenderer := gtk_cell_renderer_pixbuf_new();
textrenderer := LCLIntfCellRenderer_New;;//gtk_cell_renderer_text_new();
textrenderer := LCLIntfCellRenderer_New;//gtk_cell_renderer_text_new();
gtk_tree_view_column_pack_start(column, pixrenderer, FALSE);
gtk_tree_view_column_pack_start(column, pixrenderer, False);
//gtk_tree_view_column_set_attributes(column, pixrenderer,['pixbuf', RealIndex, nil]);
gtk_tree_view_column_pack_start(column, textrenderer, True);
//gtk_tree_view_column_set_attributes(column, textrenderer, ['text', 0, nil]);
@ -1405,6 +1426,28 @@ begin
end;
end;
class procedure TGtk2WSCustomListView.SetItemsCount(const ALV: TCustomListView;
const Avalue: Integer);
var
Widgets: PTVWidgets;
Iter: TGtkTreeIter;
Index: Integer;
begin
if not WSCheckHandleAllocated(ALV, 'SetItemsCount')
then Exit;
GetCommonTreeViewWidgets(PGtkWidget(ALV.Handle), Widgets);
with Widgets^ do
begin
if ItemCache = nil then
ItemCache := TStringList.Create;
gtk_list_store_clear(PGtkListStore(TreeModel));
for Index := 0 to AValue - 1 do
gtk_list_store_insert_with_values(PGtkListStore(TreeModel), @Iter, Index, 0, nil, -1);
end;
end;
class procedure TGtk2WSCustomListView.SetProperty(const ALV: TCustomListView;
const AProp: TListViewProperty; const AIsSet: Boolean);
var