[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: GtkSheet works on Gtk2.2 ?
- From: Lorenzo Gil Sanchez <lgs sicem biz>
- To: Tim Müller <zen18864 zen co uk>
- Cc: gtk-app-devel-list gnome org
- Subject: Re: GtkSheet works on Gtk2.2 ?
- Date: 29 Oct 2003 16:59:09 +0100
Hi Tim,
> Isn't it possible to connect to the 'cursor-changed' signal and automatically
> put the cell the cursor went to into editing mode with
> gtk_tree_view_set_cursor() etc.?
>
Yes, I did this some time ago in C. I usually program in Python via
PyGTK and there is some bug in the binding that make the same code not
work. But anyway, It is possible in C.
> You could write your own cell renderer that derives from GtkCellRendererText,
> and copy'n'paste the 2-3 functions of GtkCellRendererText that start/stop the
> editing, and customise those functions to your needs (e.g. connect a key
> press event handler to the entry widget etc.).
>
Yes, that seems a possible solution
> Maybe this isn't even necessary, and you could just connect a
> 'key-press-event' handler to the main window or tree view, in which case you
> would get the key press events before the entry widget does, and could pass
> on the events or not as you please, and take the appropriate action (e..g
> move down one cell, etc.).
>
I just try this idea connecting a key-press-event handler to the tree
view but when the entry has the focus the tree view doesn't get this
event.
> Just some ideas, I have no idea if they work :)
>
Thanks a lot, they have made me think in some different directions :)
Anyway, I'll attach my C code just in case anyone wants to play with it.
> Cheers
> -Tim
>
> _______________________________________________
> gtk-app-devel-list mailing list
> gtk-app-devel-list@gnome.org
> http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
#include <gtk/gtk.h>
static void edited(GtkCellRendererText *renderer, gchar *arg1, gchar *arg2,
gpointer data) {
/* g_print("edited: %s %s\n", arg1, arg2);*/
}
static void cursor_changed(GtkTreeView *treeView, gpointer data) {
/* g_print("cursor changed\n");*/
}
static void move_cursor(GtkTreeView *treeView, GtkMovementStep arg1, gint arg2,
gpointer data) {
GtkTreePath* path;
GtkTreeViewColumn* column;
gtk_tree_view_get_cursor(treeView, &path, &column);
gtk_tree_view_set_cursor(treeView, path, column, TRUE);
}
static gboolean key_press_event(GtkWidget *widget, GdkEventKey *event,
gpointer data) {
g_print("key press\n");
return FALSE;
}
static void destroy(GtkWidget* widget, gpointer data) {
gtk_main_quit();
}
int main(int argc, char** argv) {
GtkWidget* window;
GtkWidget* treeView;
GtkListStore* model;
GtkTreeIter iter;
GtkCellRenderer *renderer1, *renderer2;
GtkTreeViewColumn *column1, *column2;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 300, 300);
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL);
/* create the model */
model = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
gtk_list_store_append(model, &iter);
gtk_list_store_set(model, &iter, 0, "Foo 1", 1, 23, 2, TRUE, -1);
gtk_list_store_append(model, &iter);
gtk_list_store_set(model, &iter, 0, "Foo 2", 1, 24, 2, TRUE, -1);
gtk_list_store_append(model, &iter);
gtk_list_store_set(model, &iter, 0, "Foo 3", 1, 25, 2, TRUE, -1);
/* now the treeview */
treeView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
g_signal_connect_after(G_OBJECT(treeView), "move-cursor",
G_CALLBACK(move_cursor), NULL);
g_signal_connect(G_OBJECT(treeView), "cursor-changed",
G_CALLBACK(cursor_changed), NULL);
g_signal_connect(G_OBJECT(treeView), "key-press-event",
G_CALLBACK(key_press_event), NULL);
renderer1 = gtk_cell_renderer_text_new();
g_signal_connect_after(G_OBJECT(renderer1), "edited", G_CALLBACK(edited), NULL);
column1 = gtk_tree_view_column_new_with_attributes("Column 1", renderer1,
"text", 0,
"editable", 2,
NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeView), column1);
renderer2 = gtk_cell_renderer_text_new();
column2 = gtk_tree_view_column_new_with_attributes("Column 2", renderer2,
"text", 1,
"editable", 2,
NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeView), column2);
gtk_widget_show(GTK_WIDGET(treeView));
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(treeView));
gtk_widget_show(window);
gtk_main();
return 0;
}
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]