static void update_inactive_actions(GncPluginPage *plugin_page) { GncMainWindow *window; GtkActionGroup *action_group; // We are readonly - so we have to switch particular actions to inactive. gboolean is_readwrite = !qof_book_is_readonly(gnc_get_current_book()); // We continue only if the current page is a plugin page if (!plugin_page || !GNC_IS_PLUGIN_PAGE(plugin_page)) return; // Check that this is a main window and not embedded sx if (!GNC_IS_MAIN_WINDOW(plugin_page->window)) return; window = GNC_MAIN_WINDOW(plugin_page->window); g_return_if_fail(GNC_IS_MAIN_WINDOW(window)); action_group = gnc_main_window_get_action_group(window, PLUGIN_ACTIONS_NAME); g_return_if_fail(GTK_IS_ACTION_GROUP(action_group)); /* Set the action's sensitivity */ gnc_plugin_update_actions (action_group, readonly_inactive_actions, "sensitive", is_readwrite); }
/** Create a new owner tree page based on the information saved * during a previous instantiation of gnucash. * * @param window The window where this page should be installed. * * @param key_file A pointer to the GKeyFile data structure where the * page information should be read. * * @param group_name The group name to use when restoring data. */ static GncPluginPage * gnc_plugin_page_owner_tree_recreate_page (GtkWidget *window, GKeyFile *key_file, const gchar *group_name) { GncPluginPageOwnerTree *owner_page; GncPluginPageOwnerTreePrivate *priv; GncPluginPage *page; GncOwnerType owner_type; g_return_val_if_fail(key_file, NULL); g_return_val_if_fail(group_name, NULL); ENTER("key_file %p, group_name %s", key_file, group_name); /* Create the new page. */ owner_type = g_key_file_get_integer(key_file, group_name, OWNER_TYPE_LABEL, NULL); page = gnc_plugin_page_owner_tree_new(owner_type); owner_page = GNC_PLUGIN_PAGE_OWNER_TREE(page); priv = GNC_PLUGIN_PAGE_OWNER_TREE_GET_PRIVATE(owner_page); /* Install it now so we can then manipulate the created widget */ gnc_main_window_open_page(GNC_MAIN_WINDOW(window), page); gnc_tree_view_owner_restore(GNC_TREE_VIEW_OWNER(priv->tree_view), &priv->fd, key_file, group_name, owner_type); LEAVE(" "); return page; }
static void do_find_cb (QofQuery *query, gpointer user_data, gpointer *result) { struct _ftd_data *ftd = user_data; GNCLedgerDisplay *ledger; gboolean new_ledger = FALSE; GncPluginPage *page; ledger = gnc_ledger_display_find_by_query (ftd->ledger_q); if (!ledger) { new_ledger = TRUE; ledger = gnc_ledger_display_query (query, SEARCH_LEDGER, REG_STYLE_JOURNAL); } else gnc_ledger_display_set_query (ledger, query); gnc_ledger_display_refresh (ledger); if (new_ledger) { page = gnc_plugin_page_register_new_ledger (ledger); gnc_main_window_open_page (GNC_MAIN_WINDOW(ftd->parent), page); } qof_query_destroy (ftd->q); gnc_search_dialog_destroy (ftd->sw); }
/** Create a new invoice page based on the information saved during a * previous instantiation of gnucash. * * @param window The window where this page should be installed. * * @param key_file A pointer to the GKeyFile data structure where the * page information should be read. * * @param group_name The group name to use when restoring data. */ static GncPluginPage * gnc_plugin_page_invoice_recreate_page (GtkWidget *window, GKeyFile *key_file, const gchar *group_name) { GncPluginPage *page; g_return_val_if_fail(GNC_IS_MAIN_WINDOW(window), NULL); g_return_val_if_fail(key_file, NULL); g_return_val_if_fail(group_name, NULL); ENTER("key_file %p, group_name %s", key_file, group_name); /* Create the new page. */ page = gnc_invoice_recreate_page(GNC_MAIN_WINDOW(window), key_file, group_name); LEAVE(" "); return page; }
/** * Create a new sx list page based on the information saved during a previous * instantiation of gnucash. * @param window The window where this page should be installed. * @param key_file A pointer to the GKeyFile data structure where the * page information should be read. * @param group_name The group name to use when restoring data. **/ static GncPluginPage * gnc_plugin_page_sx_list_recreate_page (GtkWidget *window, GKeyFile *key_file, const gchar *group_name) { GncPluginPageSxList *page; GncPluginPageSxListPrivate *priv; g_return_val_if_fail(key_file, NULL); g_return_val_if_fail(group_name, NULL); /* Create the new page. */ page = GNC_PLUGIN_PAGE_SX_LIST(gnc_plugin_page_sx_list_new()); priv = GNC_PLUGIN_PAGE_SX_LIST_GET_PRIVATE(page); /* Install it now so we can them manipulate the created widget */ gnc_main_window_open_page(GNC_MAIN_WINDOW(window), GNC_PLUGIN_PAGE(page)); { GError *err = NULL; gint num_months = g_key_file_get_integer(key_file, group_name, "dense_cal_num_months", &err); if (err == NULL) gnc_dense_cal_set_num_months(priv->gdcal, num_months); else g_error_free(err); } { GError *err = NULL; gint paned_position = g_key_file_get_integer(key_file, group_name, "paned_position", &err); if (err == NULL) gtk_paned_set_position(GTK_PANED(priv->widget), paned_position); else g_error_free(err); } return GNC_PLUGIN_PAGE(page); }
static void gnc_plugin_page_owner_tree_cmd_owner_report (GtkAction *action, GncPluginPageOwnerTree *plugin_page) { GncOwner *current_owner; int id; ENTER("(action %p, plugin_page %p)", action, plugin_page); g_return_if_fail(GNC_IS_PLUGIN_PAGE_OWNER_TREE(plugin_page)); current_owner = gnc_plugin_page_owner_tree_get_current_owner (plugin_page); id = build_owner_report (current_owner, NULL); if (id >= 0) { GncMainWindow *window; window = GNC_MAIN_WINDOW(GNC_PLUGIN_PAGE(plugin_page)->window); gnc_main_window_open_report(id, window); } LEAVE(" "); }
static void gnc_plugin_page_owner_tree_cmd_owners_report (GtkAction *action, GncPluginPageOwnerTree *plugin_page) { GncPluginPageOwnerTreePrivate *priv; int id; ENTER("(action %p, plugin_page %p)", action, plugin_page); g_return_if_fail(GNC_IS_PLUGIN_PAGE_OWNER_TREE(plugin_page)); priv = GNC_PLUGIN_PAGE_OWNER_TREE_GET_PRIVATE(plugin_page); id = build_aging_report (priv->owner_type); if (id >= 0) { GncMainWindow *window; window = GNC_MAIN_WINDOW(GNC_PLUGIN_PAGE(plugin_page)->window); gnc_main_window_open_report(id, window); } LEAVE(" "); }
static void gnc_plugin_business_update_menus (GncPluginPage *plugin_page) { GncMainWindow *window; GtkActionGroup *action_group; gboolean is_txn_register, is_bus_txn = FALSE, is_bus_doc = FALSE; // We continue only if the current page is a plugin page if (!plugin_page || !GNC_IS_PLUGIN_PAGE(plugin_page)) return; // Check that this is a main window and not embedded sx if (!GNC_IS_MAIN_WINDOW(plugin_page->window)) return; is_txn_register = GNC_IS_PLUGIN_PAGE_REGISTER(plugin_page); window = GNC_MAIN_WINDOW(plugin_page->window); g_return_if_fail(GNC_IS_MAIN_WINDOW(window)); action_group = gnc_main_window_get_action_group(window, PLUGIN_ACTIONS_NAME); g_return_if_fail(GTK_IS_ACTION_GROUP(action_group)); if (is_txn_register) { Transaction *trans = gnc_plugin_page_register_get_current_txn (GNC_PLUGIN_PAGE_REGISTER(plugin_page)); if (xaccTransCountSplits(trans) > 0) is_bus_txn = (xaccTransGetFirstAPARAcctSplit(trans, TRUE) != NULL); is_bus_doc = (xaccTransGetTxnType (trans) == TXN_TYPE_INVOICE); } // Change visibility and also sensitivity according to whether we are in a txn register gnc_plugin_update_actions (action_group, register_txn_actions, "sensitive", is_txn_register && !is_bus_txn && !is_bus_doc); gnc_plugin_update_actions (action_group, register_txn_actions, "visible", is_txn_register && !is_bus_txn && !is_bus_doc); gnc_plugin_update_actions (action_group, register_bus_txn_actions, "sensitive", is_txn_register && is_bus_txn && !is_bus_doc); gnc_plugin_update_actions (action_group, register_bus_txn_actions, "visible", is_txn_register && is_bus_txn && !is_bus_doc); }
static GtkWidget * gnc_plugin_page_invoice_create_widget (GncPluginPage *plugin_page) { GncPluginPageInvoice *page; GncPluginPageInvoicePrivate *priv; GtkWidget *regWidget, *widget; GncMainWindow *window; ENTER("page %p", plugin_page); page = GNC_PLUGIN_PAGE_INVOICE (plugin_page); priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page); if (priv->widget != NULL) { LEAVE(""); return priv->widget; } priv->widget = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_set_homogeneous (GTK_BOX (priv->widget), FALSE); // Set the style context for this page so it can be easily manipulated with css gnc_widget_set_style_context (GTK_WIDGET(priv->widget), "GncInvoicePage"); gtk_widget_show (priv->widget); widget = gnc_invoice_create_page(priv->iw, page); gtk_widget_show (widget); gtk_box_pack_start(GTK_BOX (priv->widget), widget, TRUE, TRUE, 0); plugin_page->summarybar = gnc_invoice_window_create_summary_bar(priv->iw); gtk_box_pack_start(GTK_BOX (priv->widget), plugin_page->summarybar, FALSE, FALSE, 0); gnc_plugin_page_invoice_summarybar_position_changed(NULL, NULL, page); gnc_prefs_register_cb (GNC_PREFS_GROUP_GENERAL, GNC_PREF_SUMMARYBAR_POSITION_TOP, gnc_plugin_page_invoice_summarybar_position_changed, page); gnc_prefs_register_cb (GNC_PREFS_GROUP_GENERAL, GNC_PREF_SUMMARYBAR_POSITION_BOTTOM, gnc_plugin_page_invoice_summarybar_position_changed, page); regWidget = gnc_invoice_get_register(priv->iw); if (regWidget) { g_signal_connect (G_OBJECT (regWidget), "redraw-help", G_CALLBACK (gnc_plugin_page_redraw_help_cb), page); } priv->component_manager_id = gnc_register_gui_component(GNC_PLUGIN_PAGE_INVOICE_NAME, gnc_plugin_page_invoice_refresh_cb, NULL, page); window = GNC_MAIN_WINDOW(GNC_PLUGIN_PAGE(plugin_page)->window); g_signal_connect(window, "page_changed", G_CALLBACK(gnc_plugin_page_invoice_main_window_page_changed), plugin_page); LEAVE(""); return priv->widget; }
static gboolean gnc_html_register_url_cb (const char *location, const char *label, gboolean new_window, GNCURLResult *result) { GncPluginPage *page = NULL; GNCSplitReg * gsr = NULL; Split * split = NULL; Account * account = NULL; Transaction * trans; GList * node; GncGUID guid; QofInstance * entity = NULL; g_return_val_if_fail (location != NULL, FALSE); g_return_val_if_fail (result != NULL, FALSE); result->load_to_stream = FALSE; /* href="gnc-register:account=My Bank Account" */ if (strncmp("account=", location, 8) == 0) { account = gnc_account_lookup_by_full_name (gnc_get_current_root_account (), location + 8); } /* href="gnc-register:guid=12345678901234567890123456789012" */ else if (strncmp ("acct-guid=", location, strlen ("acct-guid=")) == 0) { if (!validate_type("acct-guid=", location, GNC_ID_ACCOUNT, result, &guid, &entity)) return FALSE; account = GNC_ACCOUNT(entity); } else if (strncmp ("trans-guid=", location, strlen ("trans-guid=")) == 0) { if (!validate_type("trans-guid=", location, GNC_ID_TRANS, result, &guid, &entity)) return FALSE; trans = (Transaction *) entity; for (node = xaccTransGetSplitList (trans); node; node = node->next) { split = node->data; account = xaccSplitGetAccount(split); if (account) break; } if (!account) { result->error_message = g_strdup_printf (_("Transaction with no Accounts: %s"), location); return FALSE; } } else if (strncmp ("split-guid=", location, strlen ("split-guid=")) == 0) { if (!validate_type("split-guid=", location, GNC_ID_SPLIT, result, &guid, &entity)) return FALSE; split = (Split *) entity; account = xaccSplitGetAccount(split); } else { result->error_message = g_strdup_printf (_("Unsupported entity type: %s"), location); return FALSE; } page = gnc_plugin_page_register_new (account, FALSE); gnc_main_window_open_page (GNC_MAIN_WINDOW (result->parent), page); if (split) { gsr = gnc_plugin_page_register_get_gsr(page); gnc_split_reg_jump_to_split( gsr, split ); } return TRUE; }