Please check the attached patch - now everything in the model is updated correctly. -- Krzysztof Kościuszkiewicz "Simplicity is the ultimate sophistication" -- Leonardo da Vinci
>From 9e58163f910c9e24ecd6400b2dc81e158c86152b Mon Sep 17 00:00:00 2001 From: Krzysztof Kosciuszkiewicz <k.kosciuszkiew...@gmail.com> Date: Fri, 4 Mar 2011 02:14:53 +0100 Subject: [PATCH 2/2] hid/gtk: further improvements to new grid config
--- src/const.h | 4 +- src/hid/gtk/gtkhid-gdk.c | 2 + src/hid/gtk/gui-config.c | 116 ++++++++++++++++++++++++++++----------------- 3 files changed, 76 insertions(+), 46 deletions(-) diff --git a/src/const.h b/src/const.h index 7b952f8..8062569 100644 --- a/src/const.h +++ b/src/const.h @@ -71,8 +71,8 @@ #define COOR_TO_MM 0.000254000 #define MM_TO_COOR 3937.007874 -#define COOR_TO_MIL 1. / 100 //added 02.02.2011 for uniformity -#define MIL_TO_COOR 100. / 1 +#define COOR_TO_MIL 0.01 //added 02.02.2011 for uniformity +#define MIL_TO_COOR 100.0 enum // Currently not used except mil and mm, but i will { // become happy if at least microns can be added. MIL = 0, // Major code changes in some places need for this, though. diff --git a/src/hid/gtk/gtkhid-gdk.c b/src/hid/gtk/gtkhid-gdk.c index 55951e4..c78d1e8 100644 --- a/src/hid/gtk/gtkhid-gdk.c +++ b/src/hid/gtk/gtkhid-gdk.c @@ -132,6 +132,8 @@ ghid_draw_grid (void) if (d==0) { // static grid without any check to min distance, zooming, etc, // made by request + if (g == 0) + return; gridmode = 1; pcbgrid = g; } else { diff --git a/src/hid/gtk/gui-config.c b/src/hid/gtk/gui-config.c index e864da1..1cb82ae 100644 --- a/src/hid/gtk/gui-config.c +++ b/src/hid/gtk/gui-config.c @@ -1352,45 +1352,74 @@ enum NUM_COLS } ; -void cb_edited_mm_or_mil(GtkCellRendererText *cell, gchar *path, gchar *text, - GtkTreeView *treeview) { - double d; - GtkListStore *store; - GtkTreeIter iter; - int units; - store = GTK_LIST_STORE (gtk_tree_view_get_model (treeview)); - gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (store), &iter, path); - units = (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (cell), "column")) == 0) ? MM : MIL; -printf("%d\n",units); - d = c_strtod(text); - if (d<0) {d=0;} - PCB->Grid[PCB->CurrentGrid] = (units) ? (d * MM_TO_COOR) : (d * MIL_TO_COOR); - if (Settings.DrawGrid) UpdateAll (); - ghid_set_status_line_label(); - gtk_list_store_set (store, &iter, COL_GRID_MM, (units) ? (c_dtostr(d)) : (c_dtostr(d*MIL_TO_MM)), -1); - gtk_list_store_set (store, &iter, COL_GRID_MIL, (units) ? (c_dtostr(d*MM_TO_MIL)) : (c_dtostr(d)), -1); -} - - -void cb_edited_step(GtkCellRendererText *cell, gchar *path, gchar *text, GtkTreeView *treeview) { - int i; - GtkListStore *store; - GtkTreeIter iter; - store = GTK_LIST_STORE (gtk_tree_view_get_model (treeview)); - gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (store), &iter, path); - i=(int)c_strtod(text); - if (i<0) {i=0;} - if (i==1) {i=2;} - if (i>100) {i=100;} - PCB->GridStep[PCB->CurrentGrid] = i; - if (Settings.DrawGrid) UpdateAll (); -// ghid_set_status_line_label(); - gtk_list_store_set (store, &iter, COL_GRIDSTEP, i, -1); +void cb_edited_mm_or_mil (GtkCellRendererText *cell, + gchar *path, + gchar *text, + GtkTreeView *treeview) +{ + GtkTreeModel *model = gtk_tree_view_get_model (treeview); + GtkTreePath *treePath = gtk_tree_path_new_from_string (path); + int gridNum = CLAMP (gtk_tree_path_get_indices (treePath)[0], + 0, + MAX_USER_GRIDS-1); + gboolean unitsMm; + GtkTreeIter iter; + double d; + + unitsMm = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (cell), "column")) == COL_GRID_MM; + d = MAX (0, c_strtod(text)); + PCB->Grid[gridNum] = (unitsMm) ? (d * MM_TO_COOR) : (d * MIL_TO_COOR); + + if (gridNum == PCB->CurrentGrid) { + if (Settings.DrawGrid) + UpdateAll (); + ghid_set_status_line_label(); + } + + gtk_tree_model_get_iter (model, &iter, treePath); + /* two separate calls because c_dtostr() uses static buffer */ + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + COL_GRID_MM, unitsMm ? c_dtostr(d) : c_dtostr(d*MIL_TO_MM), + -1); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + COL_GRID_MIL, unitsMm ? c_dtostr(d*MM_TO_MIL) : c_dtostr(d), + -1); + gtk_tree_model_row_changed (model, treePath, &iter); + gtk_tree_path_free (treePath); +} + + +void cb_edited_step (GtkCellRendererText *cell, + gchar *path, + gchar *text, + GtkTreeView *treeview) +{ + GtkTreeModel *model = gtk_tree_view_get_model (treeview); + GtkTreePath *treePath = gtk_tree_path_new_from_string (path); + int gridNum = CLAMP (gtk_tree_path_get_indices (treePath)[0], + 0, + MAX_USER_GRIDS-1); + GtkTreeIter iter; + int i = CLAMP (atoi (text), 0, 100); + + if (i==1) i=2; + PCB->GridStep[gridNum] = i; + if (gridNum == PCB->CurrentGrid) + { + if (Settings.DrawGrid) + UpdateAll (); + // ghid_set_status_line_label(); + } + + gtk_tree_model_get_iter (model, &iter, treePath); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, COL_GRIDSTEP, i, -1); + gtk_tree_model_row_changed (model, treePath, &iter); + gtk_tree_path_free (treePath); } void dummy (void) { - printf("dummy\n"); + printf("dummy\n"); } @@ -1437,27 +1466,26 @@ static GtkWidget *create_grid_treeview (void) { GtkTreeIter iter; GtkTreeSelection *select; int i; - char /*yyyyy[256],*/yyyyy2[256]; /* FIXME remove this ugly stuff */ store = gtk_list_store_new (NUM_COLS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_BOOLEAN); for (i=0; i<MAX_USER_GRIDS; i++) { -// strcpy(yyyyy, c_dtostr((PCB->Grid[i])*COOR_TO_MM)); - strcpy(yyyyy2, c_dtostr((PCB->Grid[i]*COOR_TO_MIL))); gtk_list_store_append (store, &iter); - gtk_list_store_set (store, &iter, - COL_GRID_MM, c_dtostr((PCB->Grid[i])*COOR_TO_MM), -// COL_GRID_MIL, c_dtostr((PCB->Grid[i])*COOR_TO_MIL), - not work! :( - COL_GRID_MIL, yyyyy2, // work but ugly... - COL_GRIDSTEP, PCB->GridStep[i], - COL_GRIDCURRENT, (i == PCB->CurrentGrid) ? TRUE : FALSE, - -1); + // two calls because c_dtostr() uses static buffer for result + gtk_list_store_set (store, &iter, + COL_GRID_MM, c_dtostr((PCB->Grid[i])*COOR_TO_MM), + COL_GRIDSTEP, PCB->GridStep[i], + COL_GRIDCURRENT, (i == PCB->CurrentGrid) ? TRUE : FALSE, + -1); + gtk_list_store_set (store, &iter, + COL_GRID_MIL, c_dtostr((PCB->Grid[i])*COOR_TO_MIL), + -1); } treeview = GTK_TREE_VIEW (gtk_tree_view_new_with_model (GTK_TREE_MODEL(store))); g_object_unref (store); renderer = gtk_cell_renderer_toggle_new (); - gtk_cell_renderer_toggle_set_radio(renderer, true); - gtk_cell_renderer_toggle_set_activatable(renderer, true); + gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE (renderer), true); + gtk_cell_renderer_toggle_set_activatable (GTK_CELL_RENDERER_TOGGLE (renderer), true); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview), -1, "Current?", renderer, "active", COL_GRIDCURRENT, NULL); g_signal_connect(renderer, "toggled", (GCallback) cb_toggled_active, treeview); -- 1.7.1
_______________________________________________ geda-user mailing list geda-user@moria.seul.org http://www.seul.org/cgi-bin/mailman/listinfo/geda-user