[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: GtkSheet works on Gtk2.2 ?



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]