gtk2 intf: TComboBox: fixed getting item index

git-svn-id: trunk@15410 -
This commit is contained in:
mattias 2008-06-13 17:17:55 +00:00
parent 50a71ae47b
commit 09f4ca53a5
3 changed files with 65 additions and 18 deletions

View File

@ -46,6 +46,36 @@ interface
implementation
function GTK_TYPE_CELL_VIEW: GType;
begin
GTK_TYPE_CELL_VIEW:=gtk_cell_view_get_type;
end;
function GTK_CELL_VIEW(obj: pointer): PGtkCellView;
begin
GTK_CELL_VIEW:=PGtkCellView(GTK_CHECK_CAST(obj,GTK_TYPE_CELL_VIEW));
end;
function GTK_IS_CELL_VIEW(obj: pointer): boolean;
begin
GTK_IS_CELL_VIEW:=GTK_CHECK_TYPE(obj,GTK_TYPE_CELL_VIEW);
end;
function GTK_IS_CELL_VIEW_CLASS(klass: pointer): boolean;
begin
GTK_IS_CELL_VIEW_CLASS:=GTK_CHECK_CLASS_TYPE(klass,GTK_TYPE_CELL_VIEW);
end;
function gtk_cell_view_get_model(cell_view: PGtkCellView): PGtkTreeModel;
var
Value: TGvalue;
begin
FillByte(Value,SizeOf(Value),0);
g_value_init(@Value,GTK_TYPE_TREE_MODEL);
g_object_get_property(PGObject(Cell_View),'model',@Value);
Result:=PGtkTreeModel(g_value_get_object(@Value));
end;
{$ifdef gtk1}
{$I gtk1extra.inc}
{$endif}

View File

@ -39,7 +39,7 @@ type
TLCLIntfCellRenderer = record
// ! the TextRenderer must be the first attribute of this record !
TextRenderer: TGtkCellRendererText;
iter: PGtkTreeIter;
Index: integer;
end;
PLCLIntfCellRendererClass = ^TLCLIntfCellRendererClass;
@ -92,18 +92,8 @@ begin
end;
function GetItemIndex(cell: PLCLIntfCellRenderer; widget: PGtkWidget): Integer;
var
APath: PGtkTreePath;
begin
if GTK_IS_TREE_VIEW(Widget) then
begin
APath := gtk_tree_model_get_path(gtk_tree_view_get_model(GTK_TREE_VIEW(Widget)),
cell^.iter);
Result := StrToInt(gtk_tree_path_to_string(APath));
gtk_tree_path_free(APath);
end
else
Result := -1;
Result:=cell^.Index;
end;
procedure LCLIntfCellRenderer_GetSize(cell: PGtkCellRenderer; widget: PGtkWidget;
@ -118,6 +108,7 @@ begin
CellClass:=PLCLIntfCellRendererClass(gtk_object_get_class(cell));
CellClass^.DefaultGtkGetSize(cell, Widget, cell_area, x_offset, y_offset,
width, height);
//DebugLn(['LCLIntfCellRenderer_GetSize ',GetWidgetDebugReport(Widget)]);
AWinControl := GetControl(cell, widget);
if [csDestroying,csLoading]*AWinControl.ComponentState<>[] then exit;
@ -220,6 +211,7 @@ begin
// the Widget is a sub widget of a menu item
// -> allow the LCL to paint over the whole menu item
DCWidget:=DCWidget^.parent;
Area:=Rect(0,0,DCWidget^.allocation.width,DCWidget^.allocation.height);
end;
DC:=GTK2WidgetSet.CreateDCForWidget(DCWidget,Window,false);
ItemState:=State;
@ -290,12 +282,16 @@ procedure LCLIntfCellRenderer_CellDataFunc(cell_layout:PGtkCellLayout;
data: gpointer); cdecl;
var
LCLCellRenderer: PLCLIntfCellRenderer absolute cell;
APath: PGtkTreePath;
Str: Pgchar;
begin
// maybe copy iter?
// maybe copy something else?
LCLCellRenderer^.iter := iter;
//DebugLn(['LCLIntfCellRenderer_CellDataFunc stamp=',iter^.stamp,' tree_model=',dbgs(tree_model),' cell=',dbgs(cell)]);
APath := gtk_tree_model_get_path(tree_model,iter);
Str:=gtk_tree_path_to_string(APath);
LCLCellRenderer^.Index := StrToInt(Str);
g_free(Str);
gtk_tree_path_free(APath);
//DebugLn(['LCLIntfCellRenderer_CellDataFunc ItemIndex=',LCLCellRenderer^.Index]);
end;
end.

View File

@ -121,7 +121,28 @@ procedure gtk_event_box_set_visible_window(event_box: PGtkEventBox; visible_wind
procedure gtk_event_box_set_above_child(event_box: PGtkEventBox; visible_window: gboolean); cdecl; external gtklib name 'gtk_event_box_set_above_child';
// gtk 2.6
function gtk_cell_view_get_displayed_row(cell_view: Pointer): PGtkTreePath; cdecl; external gtklib name 'gtk_cell_view_get_displayed_row';
type
PGtkCellView = ^TGtkCellView;
TGtkCellView = record
parent_instance: TGtkWidget;
// private
model: PGtkTreeModel;
displayed_row: PGtkTreeRowReference;
cell_list: PGList;
spacing: gint;
background: TGdkColor;
background_set: gboolean;
end;
function GTK_TYPE_CELL_VIEW : GType;
function GTK_CELL_VIEW(obj: pointer) : PGtkCellView;
//function GTK_CELL_VIEW_CLASS(klass: pointer) : PGtkCellViewClass;
function GTK_IS_CELL_VIEW(obj: pointer) : boolean;
function GTK_IS_CELL_VIEW_CLASS(klass: pointer) : boolean;
//function GTK_CELL_VIEW_GET_CLASS(obj: pointer) : PGtkCellViewClass;
function gtk_cell_view_get_type:TGtkType; cdecl; external gtklib;
function gtk_cell_view_get_model(cell_view: PGtkCellView): PGtkTreeModel;
function gtk_cell_view_get_displayed_row(cell_view: PGtkCellView): PGtkTreePath; cdecl; external gtklib name 'gtk_cell_view_get_displayed_row';
procedure gtk_file_chooser_set_show_hidden(chooser: PGtkFileChooser; show_hidden: gboolean); cdecl; external gtklib name 'gtk_file_chooser_set_show_hidden';
// - - - - - - - - - gdk extras - - - - - - - - -