mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-09 08:36:15 +02:00
gtk2 intf: TComboBox: fixed getting item index
git-svn-id: trunk@15410 -
This commit is contained in:
parent
50a71ae47b
commit
09f4ca53a5
@ -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}
|
||||
|
@ -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.
|
||||
|
||||
|
||||
|
@ -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 - - - - - - - - -
|
||||
|
Loading…
Reference in New Issue
Block a user