r16197 - gnucash/branches/csv-import/src/import-export/csv - Prototype of column type selection using GtkCellRendererCombo (with
Benjamin Sperisen
lasindi at cvs.gnucash.org
Fri Jun 22 03:26:36 EDT 2007
Author: lasindi
Date: 2007-06-22 03:26:35 -0400 (Fri, 22 Jun 2007)
New Revision: 16197
Trac: http://svn.gnucash.org/trac/changeset/16197
Modified:
gnucash/branches/csv-import/src/import-export/csv/gnc-csv-import.c
gnucash/branches/csv-import/src/import-export/csv/gnc-csv-model.c
gnucash/branches/csv-import/src/import-export/csv/gnc-csv-preview-dialog.glade
Log:
Prototype of column type selection using GtkCellRendererCombo (with
"Hello" and "Good bye" selections; also replaced printf's with g_debug.
Modified: gnucash/branches/csv-import/src/import-export/csv/gnc-csv-import.c
===================================================================
--- gnucash/branches/csv-import/src/import-export/csv/gnc-csv-import.c 2007-06-21 13:28:30 UTC (rev 16196)
+++ gnucash/branches/csv-import/src/import-export/csv/gnc-csv-import.c 2007-06-22 07:26:35 UTC (rev 16197)
@@ -61,13 +61,11 @@
GladeXML* xml;
GtkDialog* dialog;
GtkTreeView* treeview;
+ GtkTreeView* ctreeview;
gboolean approved;
GtkCheckButton* sep_buttons[SEP_NUM_OF_TYPES];
GtkCheckButton* custom_cbutton;
GtkEntry* custom_entry;
- GtkBox* typehbox;
- GtkComboBox** typecombo_array;
- gboolean fully_initialized;
} GncCsvPreview;
static void gnc_csv_preview_treeview(GncCsvPreview* preview, gboolean notEmpty);
@@ -103,7 +101,7 @@
if(second_call)
{
GError* error = NULL;
- printf("Encoding selected! %p %p %s\n", selector, preview, enc);
+ g_debug("Encoding selected! %p %p %s\n", selector, preview, enc);
/* TODO Handle errors */
gnc_csv_convert_enc(preview->parse_data, enc);
gnc_csv_parse(preview->parse_data, FALSE, &error);
@@ -129,26 +127,49 @@
static void treeview_resized(GtkWidget* widget, GtkAllocation* allocation, GncCsvPreview* preview)
{
- if(preview->fully_initialized)
+ int i, ncols = preview->parse_data->column_types->len;
+ g_debug("tree resized!\n");
+ for(i = 0; i < ncols - 1; i++)
{
- int i, ncols = preview->parse_data->column_types->len;
- printf("tree resized!\n");
- for(i = 0; i < ncols; i++)
- {
- gint col_width;
- col_width = gtk_tree_view_column_get_width(gtk_tree_view_get_column(preview->treeview, i));
- printf("%d got width %d\n", i, col_width);
- gtk_widget_set_size_request(GTK_WIDGET(preview->typecombo_array[i]), col_width, 0);
- }
+ gint col_width;
+ GtkTreeViewColumn* ccol;
+ col_width = gtk_tree_view_column_get_width(gtk_tree_view_get_column(preview->treeview, i));
+ ccol = gtk_tree_view_get_column(preview->ctreeview, i);
+ gtk_tree_view_column_set_min_width(ccol, col_width);
+ gtk_tree_view_column_set_max_width(ccol, col_width);
+ g_debug("%d got width %d\n", i, col_width);
}
}
-static void cbox_resized(GtkWidget* widget, GtkAllocation* allocation, GncCsvPreview* preview)
+static void column_type_edited(GtkCellRenderer *renderer, gchar *path,
+ gchar *new_text, GncCsvPreview* preview)
{
- printf("resized to nothing\n");
- gtk_widget_set_size_request(widget, 0, 0);
+ int i, ncols = preview->parse_data->column_types->len;
+ GtkTreeModel* store = (gtk_tree_view_get_model(preview->ctreeview));
+ GtkTreeIter iter;
+ gtk_tree_model_get_iter_first(store, &iter);
+ for(i = 0; i < ncols; i++)
+ {
+ GtkCellRenderer* col_renderer;
+ GtkTreeViewColumn* col = gtk_tree_view_get_column(preview->ctreeview, i);
+ GList* rend_list = gtk_tree_view_column_get_cell_renderers(col);
+ col_renderer = rend_list->data;
+ g_list_free(rend_list);
+
+ if(col_renderer != renderer)
+ {
+ ;
+ }
+ else
+ {
+ gtk_list_store_set(GTK_LIST_STORE(store), &iter, 2*i+1, new_text, -1);
+ g_debug("editing col %d\n", i);
+ }
+ }
+ g_debug("Got here %s %s!\n", path, new_text);
}
+
static GncCsvPreview* gnc_csv_new_preview()
{
GncCsvPreview* preview = g_malloc(sizeof(GncCsvPreview));
@@ -162,7 +183,6 @@
int i;
GtkWidget *encselector = go_charmap_sel_new(GO_CHARMAP_SEL_TO_UTF8);
GtkTable* enctable;
- preview->fully_initialized = FALSE;
preview->xml = gnc_glade_xml_new("gnc-csv-preview-dialog.glade", "dialog");
preview->dialog = (GtkDialog*)(glade_xml_get_widget(preview->xml, "dialog"));
@@ -197,42 +217,46 @@
g_signal_connect(G_OBJECT(cancel_button), "clicked",
G_CALLBACK(cancel_button_clicked), (gpointer)preview);
- preview->typehbox = GTK_BOX(glade_xml_get_widget(preview->xml, "typehbox"));
preview->treeview = (GtkTreeView*)(glade_xml_get_widget(preview->xml, "treeview"));
+ preview->ctreeview = (GtkTreeView*)(glade_xml_get_widget(preview->xml, "ctreeview"));
g_signal_connect(G_OBJECT(preview->treeview), "size-allocate",
G_CALLBACK(treeview_resized), (gpointer)preview);
- preview->typecombo_array = NULL;
-
/* TODO Free stuff */
preview->approved = FALSE;
return preview;
}
-/* testbox = GTK_COMBO_BOX(gtk_combo_box_new_text()); */
-/* gtk_combo_box_append_text(testbox, "Hello"); */
-/* gtk_box_pack_start(preview->typehbox, GTK_WIDGET(testbox), TRUE, TRUE, 5); */
-/* gtk_widget_show_all(GTK_WIDGET(preview->typehbox)); */
-
static void gnc_csv_preview_free(GncCsvPreview* preview)
{
g_object_unref(preview->xml);
g_free(preview);
- if(preview->typecombo_array != NULL)
- {
- g_free(preview->typecombo_array);
- }
}
static void gnc_csv_preview_treeview(GncCsvPreview* preview, gboolean notEmpty)
{
- GtkListStore* store;
+ GtkListStore *store, **cstores, *ctstore;
GtkTreeIter iter;
int i, j, ncols = preview->parse_data->column_types->len;
- GType* types = g_malloc(ncols * sizeof(GType));
+ GType* types = g_malloc(2 * ncols * sizeof(GType));
for(i = 0; i < ncols; i++)
types[i] = G_TYPE_STRING;
store = gtk_list_store_newv(ncols, types);
+ for(i = 0; i < 2*ncols; i += 2)
+ {
+ types[i] = GTK_TYPE_TREE_MODEL;
+ types[i+1] = G_TYPE_STRING;
+ }
+ ctstore = gtk_list_store_newv(2*ncols, types);
+ cstores = g_malloc(ncols * sizeof(GtkListStore*));
+ for(i = 0; i < ncols; i++)
+ {
+ cstores[i] = gtk_list_store_new(1, G_TYPE_STRING);
+ gtk_list_store_append(cstores[i], &iter);
+ gtk_list_store_set(cstores[i], &iter, 0, "Hello", -1);
+ gtk_list_store_append(cstores[i], &iter);
+ gtk_list_store_set(cstores[i], &iter, 0, "Good bye", -1);
+ }
/* Clear out any exisiting columns. */
if(notEmpty)
@@ -244,20 +268,11 @@
GtkTreeViewColumn* col = gtk_tree_view_get_column(preview->treeview, 0);
size = gtk_tree_view_remove_column(preview->treeview, col);
} while(size);
- children = children_begin = gtk_container_get_children(GTK_CONTAINER(preview->typehbox));
- while(children != NULL)
+ do
{
- gtk_container_remove(GTK_CONTAINER(preview->typehbox), GTK_WIDGET(children->data));
- /* TODO free stuff */
- children = children->next;
- }
- g_list_free(children_begin);
-
- for(i = 0; i < ncols; i++)
- {
- g_free(preview->typecombo_array[i]);
- }
- g_free(preview->typecombo_array);
+ GtkTreeViewColumn* col = gtk_tree_view_get_column(preview->ctreeview, 0);
+ size = gtk_tree_view_remove_column(preview->treeview, col);
+ } while(size);
}
/* TODO free types */
@@ -272,32 +287,37 @@
-1);
}
}
+ gtk_list_store_append(ctstore, &iter);
+ for(i = 0; i < ncols; i++)
+ {
+ gtk_list_store_set(ctstore, &iter, 2*i, cstores[i], 2*i+1, "Hello", -1);
+ }
for(i = 0; i < ncols; i++)
{
- GtkCellRenderer* renderer = gtk_cell_renderer_text_new();
+ GtkCellRenderer *renderer = gtk_cell_renderer_text_new(),
+ *crenderer = gtk_cell_renderer_combo_new();
+ g_object_set(G_OBJECT(crenderer), "model", cstores[i], "text-column", 0,
+ "editable", TRUE, "has-entry", FALSE, NULL);
+ g_signal_connect(G_OBJECT(crenderer), "edited",
+ G_CALLBACK(column_type_edited), (gpointer)preview);
+
gtk_tree_view_insert_column_with_attributes(preview->treeview,
-1, "", renderer, "text", i, NULL);
+ gtk_tree_view_insert_column_with_attributes(preview->ctreeview,
+ -1, "", crenderer, "model", 2*i,
+ "text", 2*i+1, NULL);
}
gtk_tree_view_set_model(preview->treeview, GTK_TREE_MODEL(store));
g_object_unref(GTK_TREE_MODEL(store));
+ gtk_tree_view_set_model(preview->ctreeview, GTK_TREE_MODEL(ctstore));
+ g_object_unref(GTK_TREE_MODEL(ctstore));
gtk_widget_show_all(GTK_WIDGET(preview->treeview));
-
- preview->typecombo_array = g_malloc(sizeof(GtkComboBox*) * ncols);
-
- for(i = 0; i < ncols; i++)
- {
- preview->typecombo_array[i] = GTK_COMBO_BOX(gtk_combo_box_new_text());
- g_signal_connect(G_OBJECT(preview->treeview), "size-allocate",
- G_CALLBACK(cbox_resized), (gpointer)preview);
- gtk_combo_box_append_text(preview->typecombo_array[i], "Hello");
- gtk_box_pack_start(preview->typehbox, GTK_WIDGET(preview->typecombo_array[i]), FALSE, TRUE, 0);
- }
-
- gtk_widget_show_all(GTK_WIDGET(preview->typehbox));
- preview->fully_initialized = TRUE;
+ gtk_widget_show_all(GTK_WIDGET(preview->ctreeview));
+ g_debug("ctreeview is %p\n", preview->ctreeview);
+ /* TODO free cstore and ctstore */
}
static int gnc_csv_preview(GncCsvPreview* preview, GncCsvParseData* parse_data)
@@ -325,7 +345,7 @@
static gboolean second_call = FALSE;
if(second_call)
{
- printf("set encoding %s\n", enc);
+ g_debug("set encoding %s\n", enc);
encdialog->encoding = (char*)enc;
second_call = FALSE;
}
@@ -337,15 +357,15 @@
static void enc_ok_button_clicked(GtkWidget* button, EncodingDialog* encdialog)
{
- printf("OK!\n");
- printf("using dialog encoding %s\n", encdialog->encoding);
+ g_debug("OK!\n");
+ g_debug("using dialog encoding %s\n", encdialog->encoding);
if(!gnc_csv_convert_enc(encdialog->parse_data, encdialog->encoding))
encdialog->approved = 1;
}
static void enc_cancel_button_clicked(GtkWidget* button, EncodingDialog* encdialog)
{
- printf("cancel!\n");
+ g_debug("cancel!\n");
encdialog->approved = -1;
}
@@ -429,23 +449,23 @@
} while(result == 0);
if(result == -1)
{
- printf("Canceled!\n");
+ g_debug("Canceled!\n");
}
else
{
- printf("Success!\n");
+ g_debug("Success!\n");
}
}
else /* GNC_CSV_FILE_OPEN_ERR */
{
/* TODO Do real error handling */
- printf("Couldn't open file\n");
+ g_debug("Couldn't open file\n");
}
}
if(gnc_csv_parse(parse_data, TRUE, &error))
{
/* TODO real error handling */
- printf("Error in parsing: %s\n", error->message);
+ g_debug("Error in parsing: %s\n", error->message);
}
parse_data->column_types->data[0] = GNC_CSV_DATE;
@@ -462,14 +482,14 @@
/* TODO Move this after the parsing code. */
account = gnc_import_select_account(NULL, NULL, 1, NULL, NULL, 0, NULL, NULL);
- printf("2ctype 1: %d\n", parse_data->column_types->data[0]);
+ g_debug("2ctype 1: %d\n", parse_data->column_types->data[0]);
gnc_parse_to_trans(parse_data, account);
- printf("3ctype 1: %d\n", parse_data->column_types->data[0]);
+ g_debug("3ctype 1: %d\n", parse_data->column_types->data[0]);
/* Create the Generic transaction importer GUI. */
gnc_csv_importer_gui = gnc_gen_trans_list_new(NULL, NULL, FALSE, 42);
- printf("4ctype 1: %d\n", parse_data->column_types->data[0]);
+ g_debug("4ctype 1: %d\n", parse_data->column_types->data[0]);
transactions = parse_data->transactions;
while(transactions != NULL)
Modified: gnucash/branches/csv-import/src/import-export/csv/gnc-csv-model.c
===================================================================
--- gnucash/branches/csv-import/src/import-export/csv/gnc-csv-model.c 2007-06-21 13:28:30 UTC (rev 16196)
+++ gnucash/branches/csv-import/src/import-export/csv/gnc-csv-model.c 2007-06-22 07:26:35 UTC (rev 16197)
@@ -138,7 +138,7 @@
parse_data->raw_str.end - parse_data->raw_str.begin,
"UTF-8", enc, &bytes_read,
&bytes_written, &error);
- printf("using %s got %p\n", enc, parse_data->file_str.begin);
+ g_debug("using %s got %p\n", enc, parse_data->file_str.begin);
if(parse_data->file_str.begin == NULL)
{
return 1;
@@ -162,7 +162,7 @@
guess_enc = go_guess_encoding((const char*)(parse_data->raw_str.begin),
(size_t)(parse_data->raw_str.end - parse_data->raw_str.begin),
"UTF-8", NULL);
- printf("Guessed %s\n", guess_enc);
+ g_debug("Guessed %s\n", guess_enc);
/* TODO Handle error */
gnc_csv_convert_enc(parse_data, guess_enc);
if(parse_data->file_str.begin == NULL)
@@ -201,7 +201,7 @@
if(max_cols < ((GPtrArray*)(parse_data->orig_lines->pdata[i]))->len)
max_cols = ((GPtrArray*)(parse_data->orig_lines->pdata[i]))->len;
}
- printf("max_cols %d\n", max_cols);
+ g_debug("max_cols %d\n", max_cols);
if(guessColTypes)
{
Modified: gnucash/branches/csv-import/src/import-export/csv/gnc-csv-preview-dialog.glade
===================================================================
--- gnucash/branches/csv-import/src/import-export/csv/gnc-csv-preview-dialog.glade 2007-06-21 13:28:30 UTC (rev 16196)
+++ gnucash/branches/csv-import/src/import-export/csv/gnc-csv-preview-dialog.glade 2007-06-22 07:26:35 UTC (rev 16197)
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.2.0 on Mon Jun 18 07:54:27 2007 by lasindi at pi-->
+<!--Generated with glade3 3.2.0 on Mon Jun 18 10:08:53 2007 by lasindi at pi-->
<glade-interface>
<widget class="GtkDialog" id="dialog">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
@@ -329,12 +329,11 @@
</packing>
</child>
<child>
- <widget class="GtkHBox" id="typehbox">
+ <widget class="GtkTreeView" id="ctreeview">
<property name="visible">True</property>
+ <property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <child>
- <placeholder/>
- </child>
+ <property name="headers_clickable">True</property>
</widget>
<packing>
<property name="position">4</property>
More information about the gnucash-changes
mailing list