1 /* gnm-cell-renderer-expr-entry.c
2 * Copyright (C) 2002 Andreas J. Guelzow <aguelzow@taliesin.ca>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, see <https://www.gnu.org/licenses/>.
18 #include <gnumeric-config.h>
19 #include <widgets/gnm-cell-renderer-expr-entry.h>
20 #include <widgets/gnm-expr-entry.h>
22 #include <dead-kittens.h>
24 #define GNUMERIC_CELL_RENDERER_EXPR_ENTRY_PATH "gnumeric-cell-renderer-expr-entry-path"
26 static void gnumeric_cell_renderer_expr_entry_class_init
27 (GnmCellRendererExprEntryClass
*cell_expr_entry_class
) ;
29 static GnmCellRendererTextClass
*parent_class
= NULL
;
31 static GtkCellEditable
*gnumeric_cell_renderer_expr_entry_start_editing
32 (GtkCellRenderer
*cell
,
36 GdkRectangle
const *background_area
,
37 GdkRectangle
const *cell_area
,
38 GtkCellRendererState flags
);
41 gnm_cell_renderer_expr_entry_get_type (void)
43 static GType cell_expr_entry_type
= 0;
45 if (!cell_expr_entry_type
)
47 static const GTypeInfo cell_expr_entry_info
=
49 sizeof (GnmCellRendererExprEntryClass
),
51 NULL
, /* base_finalize */
52 (GClassInitFunc
)gnumeric_cell_renderer_expr_entry_class_init
,
53 NULL
, /* class_finalize */
54 NULL
, /* class_data */
55 sizeof (GnmCellRendererExprEntry
),
57 (GInstanceInitFunc
) NULL
,
60 cell_expr_entry_type
= g_type_register_static (GNM_CELL_RENDERER_TEXT_TYPE
,
61 "GnmCellRendererExprEntry",
62 &cell_expr_entry_info
, 0);
65 return cell_expr_entry_type
;
70 gnumeric_cell_renderer_expr_entry_class_init (GnmCellRendererExprEntryClass
*class)
72 GtkCellRendererClass
*cell_class
= GTK_CELL_RENDERER_CLASS (class);
73 GObjectClass
*object_class
= G_OBJECT_CLASS (class);
75 parent_class
= g_type_class_peek_parent (object_class
);
77 cell_class
->start_editing
= gnumeric_cell_renderer_expr_entry_start_editing
;
82 gnm_cell_renderer_expr_entry_new (WBCGtk
*wbcg
)
84 GnmCellRendererExprEntry
*this =
85 GNM_CELL_RENDERER_EXPR_ENTRY(g_object_new
86 (GNM_CELL_RENDERER_EXPR_ENTRY_TYPE
, NULL
));
88 return GTK_CELL_RENDERER (this);
92 gnm_cell_renderer_expr_entry_editing_done (GtkCellEditable
*entry
,
93 GnmCellRendererExprEntry
*celltext
)
96 const gchar
*new_text
;
98 celltext
->entry
= NULL
;
99 if (gnm_expr_entry_editing_canceled (GNM_EXPR_ENTRY (entry
)))
102 wbcg_set_entry (celltext
->wbcg
, NULL
);
103 path
= g_object_get_data (G_OBJECT (entry
), GNUMERIC_CELL_RENDERER_EXPR_ENTRY_PATH
);
104 new_text
= gnm_expr_entry_get_text (GNM_EXPR_ENTRY (entry
));
106 g_signal_emit_by_name (G_OBJECT (celltext
), "edited", path
, new_text
);
109 static GtkCellEditable
*
110 gnumeric_cell_renderer_expr_entry_start_editing (GtkCellRenderer
*cell
,
111 G_GNUC_UNUSED GdkEvent
*event
,
112 G_GNUC_UNUSED GtkWidget
*widget
,
114 G_GNUC_UNUSED GdkRectangle
const *background_area
,
115 G_GNUC_UNUSED GdkRectangle
const *cell_area
,
116 G_GNUC_UNUSED GtkCellRendererState flags
)
118 GnmCellRendererExprEntry
*celltext
;
120 GnmExprEntry
*gentry
;
123 celltext
= GNM_CELL_RENDERER_EXPR_ENTRY (cell
);
125 /* If the cell isn't editable we return NULL. */
126 if (gtk_cell_renderer_text_get_editable (celltext
) == FALSE
)
129 gentry
= gnm_expr_entry_new (celltext
->wbcg
, FALSE
);
130 celltext
->entry
= gentry
;
131 entry
= gnm_expr_entry_get_entry (gentry
);
133 g_object_get (celltext
, "text", &text
, NULL
);
134 gtk_entry_set_text (entry
, text
);
137 g_object_set_data_full (G_OBJECT (gentry
), GNUMERIC_CELL_RENDERER_EXPR_ENTRY_PATH
, g_strdup (path
), g_free
);
139 gtk_editable_select_region (GTK_EDITABLE (entry
), 0, -1);
141 gtk_widget_show_all (GTK_WIDGET (gentry
));
142 g_signal_connect (gentry
,
144 G_CALLBACK (gnm_cell_renderer_expr_entry_editing_done
),
147 wbcg_set_entry (celltext
->wbcg
, gentry
);
149 return GTK_CELL_EDITABLE (gentry
);