mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-15 05:59:30 +02:00
gtk2: virtual listview support
git-svn-id: trunk@22789 -
This commit is contained in:
parent
f7cdfc7494
commit
fa717236dc
@ -373,8 +373,10 @@ begin
|
|||||||
if (WidgetInfo <> nil) and (WidgetInfo^.LCLObject.InheritsFrom(TCustomListView)) then
|
if (WidgetInfo <> nil) and (WidgetInfo^.LCLObject.InheritsFrom(TCustomListView)) then
|
||||||
begin
|
begin
|
||||||
gtk_tree_model_get(tree_model, iter, [0, @ListItem, -1]);
|
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
|
if ListItem = nil then
|
||||||
exit;
|
Exit;
|
||||||
ListColumn := TListColumn(g_object_get_data(G_OBJECT(cell_layout), 'TListColumn'));
|
ListColumn := TListColumn(g_object_get_data(G_OBJECT(cell_layout), 'TListColumn'));
|
||||||
if ListColumn = nil then
|
if ListColumn = nil then
|
||||||
LCLCellRenderer^.ColumnIndex := -1
|
LCLCellRenderer^.ColumnIndex := -1
|
||||||
|
@ -149,6 +149,7 @@ type
|
|||||||
class procedure SetHoverTime(const ALV: TCustomListView; const AValue: Integer); override;
|
class procedure SetHoverTime(const ALV: TCustomListView; const AValue: Integer); override;
|
||||||
// class procedure SetIconOptions(const ALV: TCustomListView; const AValue: TIconOptions); 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 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 SetProperty(const ALV: TCustomListView; const AProp: TListViewProperty; const AIsSet: Boolean); override;
|
||||||
class procedure SetProperties(const ALV: TCustomListView; const AProps: TListViewProperties); override;
|
class procedure SetProperties(const ALV: TCustomListView; const AProps: TListViewProperties); override;
|
||||||
class procedure SetScrollBars(const ALV: TCustomListView; const AValue: TScrollStyle); override;
|
class procedure SetScrollBars(const ALV: TCustomListView; const AValue: TScrollStyle); override;
|
||||||
|
@ -29,13 +29,13 @@ procedure Gtk2_ItemCheckedChanged(renderer: PGtkCellRendererToggle; PathStr: Pgc
|
|||||||
var
|
var
|
||||||
LV: TLVHack;
|
LV: TLVHack;
|
||||||
Index: Integer;
|
Index: Integer;
|
||||||
LI: TLVItemHack;
|
ListItem: TLVItemHack;
|
||||||
begin
|
begin
|
||||||
LV := TLVHack(WidgetInfo^.LCLObject);
|
LV := TLVHack(WidgetInfo^.LCLObject);
|
||||||
Index := StrToInt(PathStr);
|
Index := StrToInt(PathStr);
|
||||||
LI := TLVItemHack(LV.Items.Item[Index]);
|
ListItem := TLVItemHack(LV.Items.Item[Index]);
|
||||||
if LI <> nil then
|
if ListItem <> nil then
|
||||||
LI.Checked := not LI.GetCheckedInternal;
|
ListItem.Checked := not ListItem.GetCheckedInternal;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure Gtk2_ItemFocusChanged(treeview: PGtkTreeView; WidgetInfo: PWidgetInfo);cdecl;
|
procedure Gtk2_ItemFocusChanged(treeview: PGtkTreeView; WidgetInfo: PWidgetInfo);cdecl;
|
||||||
@ -225,10 +225,19 @@ end;
|
|||||||
procedure Gtk2WSLV_ListViewGetCheckedDataFunc(tree_column: PGtkTreeViewColumn;
|
procedure Gtk2WSLV_ListViewGetCheckedDataFunc(tree_column: PGtkTreeViewColumn;
|
||||||
cell: PGtkCellRenderer; tree_model: PGtkTreeModel; iter: PGtkTreeIter; WidgetInfo: PWidgetInfo); cdecl;
|
cell: PGtkCellRenderer; tree_model: PGtkTreeModel; iter: PGtkTreeIter; WidgetInfo: PWidgetInfo); cdecl;
|
||||||
var
|
var
|
||||||
|
APath: PGtkTreePath;
|
||||||
ListItem: TLVItemHack;
|
ListItem: TLVItemHack;
|
||||||
begin
|
begin
|
||||||
gtk_tree_model_get(tree_model, iter, [0, @ListItem, -1]);
|
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;
|
Exit;
|
||||||
gtk_cell_renderer_toggle_set_active(PGtkCellRendererToggle(cell), ListItem.GetCheckedInternal);
|
gtk_cell_renderer_toggle_set_active(PGtkCellRendererToggle(cell), ListItem.GetCheckedInternal);
|
||||||
end;
|
end;
|
||||||
@ -243,6 +252,7 @@ var
|
|||||||
ListColumn: TListColumn;
|
ListColumn: TListColumn;
|
||||||
ImageIndex: Integer;
|
ImageIndex: Integer;
|
||||||
ColumnIndex: Integer;
|
ColumnIndex: Integer;
|
||||||
|
APath: PGtkTreePath;
|
||||||
begin
|
begin
|
||||||
PGtkCellRendererPixbuf(cell)^.pixbuf := nil;
|
PGtkCellRendererPixbuf(cell)^.pixbuf := nil;
|
||||||
Widgets := PTVWidgets(WidgetInfo^.UserData);
|
Widgets := PTVWidgets(WidgetInfo^.UserData);
|
||||||
@ -256,8 +266,19 @@ begin
|
|||||||
if Images = nil then
|
if Images = nil then
|
||||||
Exit;
|
Exit;
|
||||||
ImageIndex := -1;
|
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
|
if ColumnIndex = 0 then
|
||||||
ImageIndex := ListITem.ImageIndex
|
ImageIndex := ListItem.ImageIndex
|
||||||
else
|
else
|
||||||
if ColumnIndex -1 <= ListItem.SubItems.Count-1 then
|
if ColumnIndex -1 <= ListItem.SubItems.Count-1 then
|
||||||
ImageIndex := ListItem.SubItemImages[ColumnIndex-1];
|
ImageIndex := ListItem.SubItemImages[ColumnIndex-1];
|
||||||
@ -529,9 +550,9 @@ begin
|
|||||||
|
|
||||||
// add renderers
|
// add renderers
|
||||||
pixrenderer := gtk_cell_renderer_pixbuf_new();
|
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_set_attributes(column, pixrenderer,['pixbuf', RealIndex, nil]);
|
||||||
gtk_tree_view_column_pack_start(column, textrenderer, True);
|
gtk_tree_view_column_pack_start(column, textrenderer, True);
|
||||||
//gtk_tree_view_column_set_attributes(column, textrenderer, ['text', 0, nil]);
|
//gtk_tree_view_column_set_attributes(column, textrenderer, ['text', 0, nil]);
|
||||||
@ -1405,6 +1426,28 @@ begin
|
|||||||
end;
|
end;
|
||||||
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;
|
class procedure TGtk2WSCustomListView.SetProperty(const ALV: TCustomListView;
|
||||||
const AProp: TListViewProperty; const AIsSet: Boolean);
|
const AProp: TListViewProperty; const AIsSet: Boolean);
|
||||||
var
|
var
|
||||||
|
Loading…
Reference in New Issue
Block a user