r17707 - gnucash/trunk/src/gnome-utils - Add a button to get the latest rate in transfer dialog
Christian Stimming
cstim at cvs.gnucash.org
Thu Nov 20 04:49:00 EST 2008
Author: cstim
Date: 2008-11-20 04:49:00 -0500 (Thu, 20 Nov 2008)
New Revision: 17707
Trac: http://svn.gnucash.org/trac/changeset/17707
Modified:
gnucash/trunk/src/gnome-utils/dialog-transfer.c
gnucash/trunk/src/gnome-utils/glade/transfer.glade
Log:
Add a button to get the latest rate in transfer dialog
It's part of the Gnucash multicurrency extensions project I'm working
through, see also emails Nov 4th 16:42; Nov 4 16:46; Oct 31 16:14 , as
well as the original proposal email oct 23 16:34 (It seems like we're
mostly a 16:00 kind of group)
Patch by Jamie Campbell (with one urgency_hint removed from the glade file)
Modified: gnucash/trunk/src/gnome-utils/dialog-transfer.c
===================================================================
--- gnucash/trunk/src/gnome-utils/dialog-transfer.c 2008-11-17 21:24:41 UTC (rev 17706)
+++ gnucash/trunk/src/gnome-utils/dialog-transfer.c 2008-11-20 09:49:00 UTC (rev 17707)
@@ -44,6 +44,10 @@
#include "gnc-ui.h"
#include "Transaction.h"
#include "Account.h"
+#include <libguile.h>
+#include "swig-runtime.h"
+#include "guile-mappings.h"
+#include "engine-helpers.h"
#define DIALOG_TRANSFER_CM_CLASS "dialog-transfer"
@@ -109,6 +113,8 @@
GtkWidget * price_radio;
GtkWidget * amount_radio;
+ GtkWidget * fetch_button;
+
GtkTooltips *tips;
GNCBook * book;
@@ -1240,6 +1246,13 @@
Split *to_split;
ENTER(" ");
+
+ if (response == GTK_RESPONSE_APPLY)
+ {
+ LEAVE("fetching exchange rate");
+ return;
+ }
+
if (response != GTK_RESPONSE_OK) {
gnc_close_gui_component_by_data (DIALOG_TRANSFER_CM_CLASS, xferData);
LEAVE("cancel, etc.");
@@ -1537,6 +1550,56 @@
static void
+gnc_xfer_dialog_fetch (GtkButton *button, XferDialog *xferData)
+{
+ gnc_numeric rate;
+ GNCPrice *prc;
+ gnc_commodity *from = xferData->from_commodity;
+ gnc_commodity *to = xferData->to_commodity;
+ SCM quotes_func;
+ SCM book_scm;
+ SCM scm_window;
+
+ g_return_if_fail (xferData);
+
+ ENTER(" ");
+
+ quotes_func = scm_c_eval_string ("gnc:book-add-quotes");
+
+ if (!SCM_PROCEDUREP (quotes_func)) {
+ LEAVE("quote retrieval failed");
+ return;
+ }
+
+ book_scm = gnc_book_to_scm (xferData->book);
+ if (SCM_NFALSEP (scm_not (book_scm))) {
+ LEAVE("no book");
+ return;
+ }
+
+ scm_window = SWIG_NewPointerObj(xferData->dialog,
+ SWIG_TypeQuery("_p_GtkWidget"), 0);
+
+ if (SCM_NFALSEP (scm_not (book_scm))) {
+ LEAVE("no scm window");
+ return;
+ }
+
+ gnc_set_busy_cursor (NULL, TRUE);
+ scm_call_2 (quotes_func, scm_window, book_scm);
+ gnc_unset_busy_cursor (NULL);
+
+ /*the results should be in the price db now */
+
+ prc = gnc_pricedb_lookup_latest(xferData->pricedb, from, to);
+ rate = gnc_price_get_value (prc);
+ gnc_amount_edit_set_amount(GNC_AMOUNT_EDIT(xferData->price_edit), rate);
+
+ LEAVE("quote retrieved");
+
+}
+
+static void
gnc_xfer_dialog_create(GtkWidget *parent, XferDialog *xferData)
{
GtkWidget *dialog;
@@ -1573,6 +1636,10 @@
xferData->transferinfo_label = glade_xml_get_widget (xml, "transferinfo-label");
+ xferData->fetch_button = glade_xml_get_widget (xml, "fetch");
+ glade_xml_signal_connect_data (xml, "gnc_xfer_dialog_fetch",
+ G_CALLBACK (gnc_xfer_dialog_fetch), xferData);
+
/* amount & date widgets */
{
GtkWidget *amount;
@@ -1956,7 +2023,7 @@
DEBUG("gtk_dialog_run returned %d", response);
gnc_xfer_dialog_response_cb (dialog, response, xferData);
- if (response != GTK_RESPONSE_OK) {
+ if ((response != GTK_RESPONSE_OK) && (response != GTK_RESPONSE_APPLY)) {
LEAVE("not ok");
return FALSE;
}
Modified: gnucash/trunk/src/gnome-utils/glade/transfer.glade
===================================================================
--- gnucash/trunk/src/gnome-utils/glade/transfer.glade 2008-11-17 21:24:41 UTC (rev 17706)
+++ gnucash/trunk/src/gnome-utils/glade/transfer.glade 2008-11-20 09:49:00 UTC (rev 17707)
@@ -57,6 +57,83 @@
<property name="response_id">-5</property>
</widget>
</child>
+
+ <child>
+ <widget class="GtkButton" id="fetch">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-10</property>
+ <signal name="clicked" handler="gnc_xfer_dialog_fetch" after="yes" last_modification_time="Wed, 05 Nov 2008 19:33:19 GMT"/>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">0</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">2</property>
+
+ <child>
+ <widget class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="stock">gtk-connect</property>
+ <property name="icon_size">4</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <signal name="button_press_event" handler="gnc_xfer_dialog_fetch" after="yes" last_modification_time="Wed, 05 Nov 2008 00:00:25 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Fetch Rate</property>
+ <property name="use_underline">True</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.5</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="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
<packing>
<property name="padding">0</property>
More information about the gnucash-changes
mailing list