[Patch] Enhance account renumbering dialog with 'Begin At' entry to increment from

Darryl Rees dardie at gmail.com
Fri Jun 6 08:58:10 EDT 2008


On Thu, Jun 5, 2008 at 8:15 PM, Derek Atkins <warlord at mit.edu> wrote:

> "Darryl Rees" <dardie at gmail.com> writes:
>
> > By way of illustration, I wanted to do something like the following:
> > A000            Assets
> >     A100        Fixed Assets
> >         A110    Buildings
> >         A120    Furniture and Fittings
> >         A130    Other Fixed Asset
> >     A200        Current Assets
> >         A210    Petty Cash
> >         A230    Bank Account
>
> Why do you want to skip A220?
>

Sorry - typo.


> > Hope the patch is useful. If accepted I will submit a documentation patch
> to
> > reflect change in the dialog. I haven't seriously coded since last
> millenium
> > so any constructive advice welcome :-(
>
> Thanks.  Could you re-submit with glade-2.
> Also, you might want to run it through the glade-cleanup script.
>
> Thanks!
>
> > Darryl Rees
>
> -derek
>

Thanks for the feedback Derek. As suggested I redid with glade-2 and
glade-fixup, new patch below:


Index: src/gnome-utils/dialog-account.c
===================================================================
--- src/gnome-utils/dialog-account.c    (revision 17190)
+++ src/gnome-utils/dialog-account.c    (working copy)
@@ -119,9 +119,11 @@
 {
   GtkWidget *dialog;
   GtkWidget *prefix;
+  GtkWidget *beginat;
   GtkWidget *interval;
   GtkWidget *example1;
   GtkWidget *example2;
+  GtkWidget *example3;

   Account *parent;
   gint num_children;
@@ -138,6 +140,7 @@
 static void gnc_account_window_set_name (AccountWindow *aw);

 void gnc_account_renumber_prefix_changed_cb (GtkEditable *editable,
RenumberDialog *data);
+void gnc_account_renumber_beginat_changed_cb (GtkEditable *editable,
RenumberDialog *data);
 void gnc_account_renumber_interval_changed_cb (GtkSpinButton *spinbutton,
RenumberDialog *data);
 void gnc_account_renumber_response_cb (GtkDialog *dialog, gint response,
RenumberDialog *data);

@@ -1744,23 +1747,32 @@
 gnc_account_renumber_update_examples (RenumberDialog *data)
 {
   gchar *str;
-  gchar *prefix;
-  gint interval, num_digits;
+  gchar *prefix, *beginat;
+  gint interval, beginint, num_digits;

   prefix = gtk_editable_get_chars(GTK_EDITABLE(data->prefix), 0, -1);
+  beginat = gtk_editable_get_chars(GTK_EDITABLE(data->beginat), 0, -1);
+  beginint = strtol(beginat, NULL, 10);
   interval =
gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data->interval));
-  num_digits = log10(data->num_children * interval) + 1;
+  num_digits = MAX(strlen(beginat), log10(data->num_children * interval) +
1);
+  if (num_digits > 12)
+    num_digits = 12; /* Prevent insanity */

-  str = g_strdup_printf("%s-%0*d", prefix, num_digits, interval);
+  str = g_strdup_printf("%s%0*d", prefix, num_digits, beginint);
   gtk_label_set_text(GTK_LABEL(data->example1), str);
   g_free(str);

-  str = g_strdup_printf("%s-%0*d", prefix, num_digits,
-            interval * data->num_children);
+  str = g_strdup_printf("%s%0*d", prefix, num_digits, beginint + interval);
   gtk_label_set_text(GTK_LABEL(data->example2), str);
   g_free(str);

+  str = g_strdup_printf("%s%0*d", prefix, num_digits,
+            beginint + interval * data->num_children);
+  gtk_label_set_text(GTK_LABEL(data->example3), str);
+  g_free(str);
+
   g_free(prefix);
+  g_free(beginat);
 }

 void
@@ -1771,6 +1783,13 @@
 }

 void
+gnc_account_renumber_beginat_changed_cb (GtkEditable *editable,
+                     RenumberDialog *data)
+{
+  gnc_account_renumber_update_examples(data);
+}
+
+void
 gnc_account_renumber_interval_changed_cb (GtkSpinButton *spinbutton,
                     RenumberDialog *data)
 {
@@ -1784,25 +1803,31 @@
 {
   GList *children, *tmp;
   gchar *str;
-  gchar *prefix;
-  gint interval, num_digits, i;
+  gchar *prefix, *beginat;
+  gint beginint, interval, num_digits, i;

   if (response == GTK_RESPONSE_OK) {
     gtk_widget_hide(data->dialog);
     children = gnc_account_get_children(data->parent);
     prefix = gtk_editable_get_chars(GTK_EDITABLE(data->prefix), 0, -1);
+    beginat = gtk_editable_get_chars(GTK_EDITABLE(data->beginat), 0, -1);
+    beginint = strtol(beginat, NULL, 10);
     interval =
       gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(data->interval));
-    num_digits = log10(data->num_children * interval) + 1;
+    num_digits = MAX(strlen(beginat), log10(data->num_children * interval)
+ 1);
+    if (num_digits > 12)
+      num_digits = 12; /* Prevent insanity */

     gnc_set_busy_cursor (NULL, TRUE);
-    for (tmp = children, i = 1; tmp; tmp = g_list_next(tmp), i += 1) {
-      str = g_strdup_printf("%s-%0*d", prefix, num_digits, interval * i);
+    for (tmp = children, i = 0; tmp; tmp = g_list_next(tmp), i += 1) {
+      str = g_strdup_printf("%s%0*d", prefix, num_digits, beginint +
interval * i);
       xaccAccountSetCode(tmp->data, str);
       g_free(str);
     }
     gnc_unset_busy_cursor (NULL);
     g_list_free(children);
+    g_free(prefix);
+    g_free(beginat);
   }

   gtk_widget_destroy(data->dialog);
@@ -1827,19 +1852,23 @@
   g_object_set_data_full(G_OBJECT(data->dialog), "xml", xml,
g_object_unref);

   widget = glade_xml_get_widget (xml, "header_label");
-  string = g_strdup_printf(_( "Renumber the immediate sub-accounts of %s?
"
-                  "This will replace the account code field of "
+  string = g_strdup_printf(_( "Renumber the immediate sub-accounts of %s. "
+                  "ie. replace the account code field of "
                   "each child account with a newly generated code."),
                xaccAccountGetFullName(account));
   gtk_label_set_text(GTK_LABEL(widget), string);
   g_free(string);

   data->prefix = glade_xml_get_widget (xml, "prefix_entry");
+  data->beginat = glade_xml_get_widget (xml, "beginat_entry");
   data->interval = glade_xml_get_widget (xml, "interval_spin");
   data->example1 = glade_xml_get_widget (xml, "example1_label");
   data->example2 = glade_xml_get_widget (xml, "example2_label");
+  data->example3 = glade_xml_get_widget (xml, "example3_label");

-  gtk_entry_set_text(GTK_ENTRY(data->prefix), xaccAccountGetCode(account));
+  string = g_strdup_printf("%s-", xaccAccountGetCode(account));
+  gtk_entry_set_text(GTK_ENTRY(data->prefix), string);
+  g_free(string);
   gnc_account_renumber_update_examples(data);

   glade_xml_signal_autoconnect_full(xml, gnc_glade_autoconnect_full_func,
Index: src/gnome/glade/account.glade
===================================================================
--- src/gnome/glade/account.glade    (revision 17190)
+++ src/gnome/glade/account.glade    (working copy)
@@ -3530,7 +3530,7 @@
       <child>
     <widget class="GtkTable" id="table12">
       <property name="visible">True</property>
-      <property name="n_rows">5</property>
+      <property name="n_rows">8</property>
       <property name="n_columns">2</property>
       <property name="homogeneous">False</property>
       <property name="row_spacing">6</property>
@@ -3635,8 +3635,8 @@
         <packing>
           <property name="left_attach">0</property>
           <property name="right_attach">1</property>
-          <property name="top_attach">3</property>
-          <property name="bottom_attach">4</property>
+          <property name="top_attach">4</property>
+          <property name="bottom_attach">5</property>
           <property name="x_options">fill</property>
           <property name="y_options"></property>
         </packing>
@@ -3663,14 +3663,98 @@
         <packing>
           <property name="left_attach">1</property>
           <property name="right_attach">2</property>
-          <property name="top_attach">3</property>
-          <property name="bottom_attach">4</property>
+          <property name="top_attach">4</property>
+          <property name="bottom_attach">5</property>
           <property name="x_options">fill</property>
           <property name="y_options"></property>
         </packing>
       </child>

       <child>
+        <widget class="GtkLabel" id="label8477442">
+          <property name="visible">True</property>
+          <property name="label" translatable="yes">...</property>
+          <property name="use_underline">False</property>
+          <property name="use_markup">False</property>
+          <property name="justify">GTK_JUSTIFY_LEFT</property>
+          <property name="wrap">False</property>
+          <property name="selectable">False</property>
+          <property name="xalign">0</property>
+          <property name="yalign">0.5</property>
+          <property name="xpad">0</property>
+          <property name="ypad">0</property>
+          <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+          <property name="width_chars">-1</property>
+          <property name="single_line_mode">False</property>
+          <property name="angle">0</property>
+        </widget>
+        <packing>
+          <property name="left_attach">1</property>
+          <property name="right_attach">2</property>
+          <property name="top_attach">6</property>
+          <property name="bottom_attach">7</property>
+          <property name="x_options">fill</property>
+          <property name="y_options"></property>
+        </packing>
+      </child>
+
+      <child>
+        <widget class="GtkLabel" id="example2_label">
+          <property name="visible">True</property>
+          <property name="label" translatable="yes"></property>
+          <property name="use_underline">False</property>
+          <property name="use_markup">False</property>
+          <property name="justify">GTK_JUSTIFY_LEFT</property>
+          <property name="wrap">False</property>
+          <property name="selectable">False</property>
+          <property name="xalign">0</property>
+          <property name="yalign">0.5</property>
+          <property name="xpad">0</property>
+          <property name="ypad">0</property>
+          <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+          <property name="width_chars">-1</property>
+          <property name="single_line_mode">False</property>
+          <property name="angle">0</property>
+        </widget>
+        <packing>
+          <property name="left_attach">1</property>
+          <property name="right_attach">2</property>
+          <property name="top_attach">5</property>
+          <property name="bottom_attach">6</property>
+          <property name="x_options">fill</property>
+          <property name="y_options"></property>
+        </packing>
+      </child>
+
+      <child>
+        <widget class="GtkLabel" id="example3_label">
+          <property name="visible">True</property>
+          <property name="label" translatable="yes"></property>
+          <property name="use_underline">False</property>
+          <property name="use_markup">False</property>
+          <property name="justify">GTK_JUSTIFY_LEFT</property>
+          <property name="wrap">False</property>
+          <property name="selectable">False</property>
+          <property name="xalign">0</property>
+          <property name="yalign">0.5</property>
+          <property name="xpad">0</property>
+          <property name="ypad">0</property>
+          <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+          <property name="width_chars">-1</property>
+          <property name="single_line_mode">False</property>
+          <property name="angle">0</property>
+        </widget>
+        <packing>
+          <property name="left_attach">1</property>
+          <property name="right_attach">2</property>
+          <property name="top_attach">7</property>
+          <property name="bottom_attach">8</property>
+          <property name="x_options">fill</property>
+          <property name="y_options"></property>
+        </packing>
+      </child>
+
+      <child>
         <widget class="GtkLabel" id="label8477438">
           <property name="visible">True</property>
           <property name="label" translatable="yes">Interval:</property>
@@ -3691,8 +3775,8 @@
         <packing>
           <property name="left_attach">0</property>
           <property name="right_attach">1</property>
-          <property name="top_attach">2</property>
-          <property name="bottom_attach">3</property>
+          <property name="top_attach">3</property>
+          <property name="bottom_attach">4</property>
           <property name="x_options">fill</property>
           <property name="y_options"></property>
         </packing>
@@ -3714,16 +3798,16 @@
         <packing>
           <property name="left_attach">1</property>
           <property name="right_attach">2</property>
-          <property name="top_attach">2</property>
-          <property name="bottom_attach">3</property>
+          <property name="top_attach">3</property>
+          <property name="bottom_attach">4</property>
           <property name="y_options"></property>
         </packing>
       </child>

       <child>
-        <widget class="GtkLabel" id="example2_label">
+        <widget class="GtkLabel" id="label8477444">
           <property name="visible">True</property>
-          <property name="label" translatable="yes"></property>
+          <property name="label" translatable="yes">Begin at:</property>
           <property name="use_underline">False</property>
           <property name="use_markup">False</property>
           <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -3739,11 +3823,33 @@
           <property name="angle">0</property>
         </widget>
         <packing>
+          <property name="left_attach">0</property>
+          <property name="right_attach">1</property>
+          <property name="top_attach">2</property>
+          <property name="bottom_attach">3</property>
+          <property name="x_options">fill</property>
+          <property name="y_options"></property>
+        </packing>
+      </child>
+
+      <child>
+        <widget class="GtkEntry" id="beginat_entry">
+          <property name="visible">True</property>
+          <property name="can_focus">True</property>
+          <property name="editable">True</property>
+          <property name="visibility">True</property>
+          <property name="max_length">12</property>
+          <property name="text" translatable="yes">00</property>
+          <property name="has_frame">True</property>
+          <property name="invisible_char">*</property>
+          <property name="activates_default">False</property>
+          <signal name="changed"
handler="gnc_account_renumber_prefix_changed_cb"
last_modification_time="Sat, 18 Mar 2006 21:52:12 GMT"/>
+        </widget>
+        <packing>
           <property name="left_attach">1</property>
           <property name="right_attach">2</property>
-          <property name="top_attach">4</property>
-          <property name="bottom_attach">5</property>
-          <property name="x_options">fill</property>
+          <property name="top_attach">2</property>
+          <property name="bottom_attach">3</property>
           <property name="y_options"></property>
         </packing>
       </child>


More information about the gnucash-devel mailing list