GnuCash c935c2f+
Loading...
Searching...
No Matches
Files | Data Structures | Macros | Typedefs | Enumerations | Functions
Utility functions for the GnuCash GUI

Files

file  gnc-ui-util.h
 utility functions for the GnuCash UI
 

Data Structures

struct  GNCPrintAmountInfo
 

Macros

#define GNC_PREFS_GROUP_OPEN_SAVE   "dialogs.open-save"
 
#define GNC_PREFS_GROUP_EXPORT   "dialogs.export-accounts"
 
#define GNC_PREFS_GROUP_REPORT   "dialogs.report"
 
#define GNC_PREF_AUTO_DECIMAL_POINT   "auto-decimal-point"
 
#define GNC_PREF_AUTO_DECIMAL_PLACES   "auto-decimal-places"
 
#define WLINK   'w'
 
#define FLINK   'f'
 

Typedefs

typedef QofSession *(* QofSessionCB) (void)
 

Enumerations

enum  GNCEquityType { EQUITY_OPENING_BALANCE , EQUITY_RETAINED_EARNINGS , NUM_EQUITY_TYPES }
 

Functions

char * gnc_normalize_account_separator (const char *separator)
 
gboolean gnc_reverse_balance (const Account *account)
 
void gnc_set_use_equity_type_opening_balance_account (QofBook *book)
 
gboolean gnc_using_equity_type_opening_balance_account (QofBook *book)
 
char * gnc_get_default_directory (const char *section)
 
void gnc_set_default_directory (const char *section, const char *directory)
 
QofBookgnc_get_current_book (void)
 
gboolean gnc_is_new_book (void)
 
void gnc_set_current_book_tax_name_type (gboolean name_changed, const char *tax_name, gboolean type_changed, const char *tax_type)
 
const char * gnc_get_current_book_tax_name (void)
 
const char * gnc_get_current_book_tax_type (void)
 
void gnc_book_option_num_field_source_change_cb (gboolean num_action)
 Calls gnc_book_option_num_field_source_change to initiate registered callbacks when num_field_source book option changes so that registers/reports can update themselves; sets feature flag.
 
Accountgnc_get_current_root_account (void)
 
gnc_commodity_table * gnc_get_current_commodities (void)
 
char * gnc_get_account_name_for_register (const Account *account)
 Get either the full name of the account or the simple name, depending on the configuration parameter general/register/show_leaf_account_names.
 
Accountgnc_account_lookup_for_register (const Account *base_account, const char *name)
 Retrieve the account matching the given name starting from the descendants of base_account.
 
char * gnc_get_account_name_for_split_register (const Account *account, gboolean show_leaf_accounts)
 Get either the full name of the account or the simple name, depending on the show_leaf_accounts.
 
const char * gnc_get_reconcile_str (char reconciled_flag)
 
const char * gnc_get_reconcile_valid_flags (void)
 
const char * gnc_get_reconcile_flag_order (void)
 
const char * gnc_get_doclink_valid_flags (void)
 Get a string containing documentation link valid flags.
 
const char * gnc_get_doclink_flag_order (void)
 Get a string containing document link flag order.
 
const char * gnc_get_doclink_str (char link_flag)
 Get a string representing the document link type.
 
Accountgnc_find_or_create_equity_account (Account *root, GNCEquityType equity_type, gnc_commodity *currency)
 
gboolean gnc_account_create_opening_balance (Account *account, gnc_numeric balance, time64 date, QofBook *book)
 
gnc_commodity * gnc_locale_default_currency_nodefault (void)
 Returns the default currency of the current locale, or NULL if no sensible currency could be identified from the locale.
 
gnc_commodity * gnc_locale_default_currency (void)
 Returns the default currency of the current locale.
 
gnc_commodity * gnc_default_currency (void)
 Return the default currency set by the user.
 
gnc_commodity * gnc_account_or_default_currency (const Account *account, gboolean *currency_from_account_found)
 Returns a gnc_commodity that is a currency, suitable for being a Transaction's currency.
 
gnc_commodity * gnc_default_report_currency (void)
 Return the default currency for use in reports, as set by the user.
 
GNCPrintAmountInfo gnc_default_print_info (gboolean use_symbol)
 
GNCPrintAmountInfo gnc_commodity_print_info (const gnc_commodity *commodity, gboolean use_symbol)
 
GNCPrintAmountInfo gnc_account_print_info (const Account *account, gboolean use_symbol)
 
GNCPrintAmountInfo gnc_split_amount_print_info (Split *split, gboolean use_symbol)
 
GNCPrintAmountInfo gnc_price_print_info (const gnc_commodity *curr, gboolean use_symbol)
 
GNCPrintAmountInfo gnc_share_print_info_places (int decplaces)
 
GNCPrintAmountInfo gnc_default_share_print_info (void)
 
GNCPrintAmountInfo gnc_default_price_print_info (const gnc_commodity *curr)
 
GNCPrintAmountInfo gnc_integral_print_info (void)
 
const char * xaccPrintAmount (gnc_numeric val, GNCPrintAmountInfo info)
 Make a string representation of a gnc_numeric.
 
int xaccSPrintAmount (char *buf, gnc_numeric val, GNCPrintAmountInfo info)
 Make a string representation of a gnc_numeric.
 
const char * printable_value (gdouble val, gint denom)
 
char * number_to_words (gdouble val, gint64 denom)
 
char * numeric_to_words (gnc_numeric val)
 
gboolean xaccParseAmount (const char *in_str, gboolean monetary, gnc_numeric *result, char **endstr)
 Parses in_str to obtain a numeric result.
 
gboolean xaccParseAmountExtended (const char *in_str, gboolean monetary, gunichar negative_sign, gunichar decimal_point, gunichar group_separator, const char *ignore_list, gnc_numeric *result, char **endstr)
 Converts a string to a gnc_numeric.
 
gboolean xaccParseAmountImport (const char *in_str, gboolean monetary, gnc_numeric *result, char **endstr, gboolean skip)
 Similar to xaccParseAmount, but with two differences.
 
gboolean xaccParseAmountExtImport (const char *in_str, gboolean monetary, gunichar negative_sign, gunichar decimal_point, gunichar group_separator, const char *ignore_list, gnc_numeric *result, char **endstr)
 Similar to xaccParseAmountExtended, but will not automatically set a decimal point, regardless of what the user has set for this option.
 
const char * gnc_print_amount_with_bidi_ltr_isolate (gnc_numeric val, GNCPrintAmountInfo info)
 Make a string representation of a gnc_numeric.
 
char * gnc_wrap_text_with_bidi_ltr_isolate (const char *text)
 This function helps with GTK's use of 'Unicode Bidirectional Text Algorithm'.
 
void gnc_ui_util_init (void)
 
void gnc_ui_util_remove_registered_prefs (void)
 
char * gnc_filter_text_for_bidi_marks (const char *incoming_text)
 Returns the incoming text with Unicode bidi control characters removed.
 
char * gnc_filter_text_for_control_chars (const char *incoming_text)
 Returns the incoming text removed of control characters.
 
void gnc_filter_text_set_cursor_position (const char *incoming_text, const char *symbol, int *zcursor_position)
 Updates cursor_position after removal of currency symbols.
 
char * gnc_filter_text_for_currency_symbol (const char *incoming_text, const char *symbol)
 Returns the incoming text removed of a currency symbol.
 
char * gnc_filter_text_for_currency_commodity (const gnc_commodity *comm, const char *incoming_text, const char **symbol)
 Returns the incoming text removed of currency symbol.
 
gchar * gnc_list_formatter (GList *strings)
 This function takes a GList of char*, and uses locale-sensitive list formatter.
 

Detailed Description

Macro Definition Documentation

◆ FLINK

#define FLINK   'f'

Definition at line 155 of file gnc-ui-util.h.

◆ GNC_PREF_AUTO_DECIMAL_PLACES

#define GNC_PREF_AUTO_DECIMAL_PLACES   "auto-decimal-places"

Definition at line 63 of file gnc-ui-util.h.

◆ GNC_PREF_AUTO_DECIMAL_POINT

#define GNC_PREF_AUTO_DECIMAL_POINT   "auto-decimal-point"

Definition at line 62 of file gnc-ui-util.h.

◆ GNC_PREFS_GROUP_EXPORT

#define GNC_PREFS_GROUP_EXPORT   "dialogs.export-accounts"

Definition at line 60 of file gnc-ui-util.h.

◆ GNC_PREFS_GROUP_OPEN_SAVE

#define GNC_PREFS_GROUP_OPEN_SAVE   "dialogs.open-save"

Definition at line 59 of file gnc-ui-util.h.

◆ GNC_PREFS_GROUP_REPORT

#define GNC_PREFS_GROUP_REPORT   "dialogs.report"

Definition at line 61 of file gnc-ui-util.h.

◆ WLINK

#define WLINK   'w'

Definition at line 154 of file gnc-ui-util.h.

Typedef Documentation

◆ QofSessionCB

typedef QofSession *(* QofSessionCB) (void)

Definition at line 47 of file gnc-ui-util.h.

Enumeration Type Documentation

◆ GNCEquityType

enum GNCEquityType

Definition at line 177 of file gnc-ui-util.h.

178{
179 EQUITY_OPENING_BALANCE,
180 EQUITY_RETAINED_EARNINGS,
181 NUM_EQUITY_TYPES
182} GNCEquityType;

Function Documentation

◆ gnc_account_create_opening_balance()

gboolean gnc_account_create_opening_balance ( Account account,
gnc_numeric  balance,
time64  date,
QofBook book 
)

Definition at line 667 of file gnc-ui-util.cpp.

671{
672 if (gnc_numeric_zero_p (balance))
673 return TRUE;
674
675 g_return_val_if_fail (account != nullptr, FALSE);
676 auto commodity = xaccAccountGetCommodity (account);
677 g_return_val_if_fail (gnc_commodity_is_currency (commodity), FALSE);
678
679 auto equity_account =
680 gnc_find_or_create_equity_account (gnc_account_get_root(account),
681 EQUITY_OPENING_BALANCE,
682 commodity);
683 if (!equity_account)
684 return FALSE;
685
686 xaccAccountBeginEdit (account);
687 xaccAccountBeginEdit (equity_account);
688
689 auto trans = xaccMallocTransaction (book);
690
691 xaccTransBeginEdit (trans);
692
693 xaccTransSetCurrency (trans, gnc_account_or_default_currency (account, nullptr));
695 xaccTransSetDescription (trans, _("Opening Balance"));
696
697 auto split = xaccMallocSplit (book);
698
699 xaccTransAppendSplit (trans, split);
700 xaccAccountInsertSplit (account, split);
701
702 xaccSplitSetAmount (split, balance);
703 xaccSplitSetValue (split, balance);
704
705 balance = gnc_numeric_neg (balance);
706
707 split = xaccMallocSplit (book);
708
709 xaccTransAppendSplit (trans, split);
710 xaccAccountInsertSplit (equity_account, split);
711
712 xaccSplitSetAmount (split, balance);
713 xaccSplitSetValue (split, balance);
714
715 xaccTransCommitEdit (trans);
716 xaccAccountCommitEdit (equity_account);
717 xaccAccountCommitEdit (account);
718
719 return TRUE;
720}
void xaccAccountCommitEdit(Account *acc)
ThexaccAccountCommitEdit() subroutine is the second phase of a two-phase-commit wrapper for account u...
Definition Account.cpp:1516
Account * gnc_account_get_root(Account *acc)
This routine returns the root account of the account tree that the specified account belongs to.
Definition Account.cpp:2942
void xaccAccountBeginEdit(Account *acc)
The xaccAccountBeginEdit() subroutine is the first phase of a two-phase-commit wrapper for account up...
Definition Account.cpp:1475
gnc_commodity * xaccAccountGetCommodity(const Account *acc)
Get the account's commodity
Definition Account.cpp:3408
gboolean gnc_commodity_is_currency(const gnc_commodity *cm)
Checks to see if the specified commodity is an ISO 4217 recognized currency or a legacy currency.
void xaccTransSetDescription(Transaction *trans, const char *desc)
Sets the transaction Description.
#define xaccTransAppendSplit(t, s)
Add a split to the transaction.
void xaccTransCommitEdit(Transaction *trans)
The xaccTransCommitEdit() method indicates that the changes to the transaction and its splits are com...
Transaction * xaccMallocTransaction(QofBook *book)
The xaccMallocTransaction() will malloc memory and initialize it.
void xaccTransSetDatePostedSecsNormalized(Transaction *trans, time64 time)
This function sets the posted date of the transaction, specified by a time64 (see ctime(3)).
void xaccTransSetCurrency(Transaction *trans, gnc_commodity *curr)
Set a new currency on a transaction.
#define xaccAccountInsertSplit(acc, s)
The xaccAccountInsertSplit() method will insert the indicated split into the indicated account.
Definition Account.h:1069
void xaccTransBeginEdit(Transaction *trans)
The xaccTransBeginEdit() method must be called before any changes are made to a transaction or any of...
gnc_commodity * gnc_account_or_default_currency(const Account *account, gboolean *currency_from_account_found)
Returns a gnc_commodity that is a currency, suitable for being a Transaction's currency.
gboolean gnc_numeric_zero_p(gnc_numeric a)
Returns 1 if the given gnc_numeric is 0 (zero), else returns 0.
gnc_numeric gnc_numeric_neg(gnc_numeric a)
Returns a newly created gnc_numeric that is the negative of the given gnc_numeric value.
void xaccSplitSetValue(Split *split, gnc_numeric val)
The xaccSplitSetValue() method sets the value of this split in the transaction's commodity.
Split * xaccMallocSplit(QofBook *book)
Constructor.
void xaccSplitSetAmount(Split *split, gnc_numeric amt)
The xaccSplitSetAmount() method sets the amount in the account's commodity that the split should have...

◆ gnc_account_lookup_for_register()

Account * gnc_account_lookup_for_register ( const Account base_account,
const char *  name 
)

Retrieve the account matching the given name starting from the descendants of base_account.

name is either considered to be the name of the leaf in the account tree or to be the full account path, depending on the configuration parameter general.register/show_leaf_account_names.

Parameters
base_accountThe account to start the search at.
nameThe name to search for.
Returns
A pointer to the account, or NULL if the account was not found.

Definition at line 449 of file gnc-ui-util.cpp.

450{
451 auto show_leaf_accounts =
452 gnc_prefs_get_bool(GNC_PREFS_GROUP_GENERAL_REGISTER,
453 GNC_PREF_SHOW_LEAF_ACCT_NAMES);
454
455 if (show_leaf_accounts)
456 return gnc_account_lookup_by_name (base_account, name);
457 else
458 return gnc_account_lookup_by_full_name (base_account, name);
459}
Account * gnc_account_lookup_by_name(const Account *parent, const char *name)
The gnc_account_lookup_by_name() subroutine fetches the account by name from the descendants of the s...
Definition Account.cpp:3093
Account * gnc_account_lookup_by_full_name(const Account *any_acc, const gchar *name)
The gnc_account_lookup_full_name() subroutine works like gnc_account_lookup_by_name,...
Definition Account.cpp:3163
gboolean gnc_prefs_get_bool(const gchar *group, const gchar *pref_name)
Get a boolean value from the preferences backend.

◆ gnc_account_or_default_currency()

gnc_commodity * gnc_account_or_default_currency ( const Account account,
gboolean *  currency_from_account_found 
)

Returns a gnc_commodity that is a currency, suitable for being a Transaction's currency.

The gnc_commodity is taken either from the current account, or from the next parent account that has a gnc_commodity that is a currency, or from gnc_default_currency().

If the given account or any of its parent account have a commodity that is a currency, it is returned and the gboolean currency_from_account_found is set to TRUE (if non-NULL). If neither this account nor any of its parent accounts have such a commodity, gnc_default_currency() is returned and the gboolean currency_from_account_found is set to FALSE (if non-NULL). This can be used to show an appropriate warning message.

If account is NULL, gnc_default_currency() is returned and currency_from_account_found is set to FALSE.

Parameters
accountThe account where the currency should be looked up. May be NULL.
currency_from_account_foundA gboolean pointer that takes the output argument of whether the returned currency was found in the account. May be NULL.
Returns
A currency pointer (and never NULL).

Definition at line 789 of file gnc-ui-util.cpp.

791{
792 gnc_commodity *currency;
793 if (!account)
794 {
795 if (currency_from_account_found)
796 *currency_from_account_found = FALSE;
797 return gnc_default_currency();
798 }
799
800 currency = gnc_account_get_currency_or_parent(account);
801 if (currency)
802 {
803 if (currency_from_account_found)
804 *currency_from_account_found = TRUE;
805 }
806 else
807 {
808 if (currency_from_account_found)
809 *currency_from_account_found = FALSE;
810 currency = gnc_default_currency();
811 }
812 return currency;
813}
gnc_commodity * gnc_account_get_currency_or_parent(const Account *account)
Returns a gnc_commodity that is a currency, suitable for being a Transaction's currency.
Definition Account.cpp:3415
gnc_commodity * gnc_default_currency(void)
Return the default currency set by the user.

◆ gnc_account_print_info()

GNCPrintAmountInfo gnc_account_print_info ( const Account account,
gboolean  use_symbol 
)

Definition at line 956 of file gnc-ui-util.cpp.

957{
958 return gnc_account_print_info_helper(account, use_symbol,
961}
int xaccAccountGetCommoditySCU(const Account *acc)
Return the SCU for the account.
Definition Account.cpp:2745

◆ gnc_book_option_num_field_source_change_cb()

void gnc_book_option_num_field_source_change_cb ( gboolean  num_action)

Calls gnc_book_option_num_field_source_change to initiate registered callbacks when num_field_source book option changes so that registers/reports can update themselves; sets feature flag.

Definition at line 4709 of file gnc-main-window.cpp.

4710{
4711 gnc_suspend_gui_refresh ();
4712 if (num_action)
4713 {
4714 /* Set a feature flag in the book for use of the split action field as number.
4715 * This will prevent older GnuCash versions that don't support this feature
4716 * from opening this file. */
4717 gnc_features_set_used (gnc_get_current_book(),
4718 GNC_FEATURE_NUM_FIELD_SOURCE);
4719 }
4720 gnc_book_option_num_field_source_change (num_action);
4721 gnc_resume_gui_refresh ();
4722}
void gnc_features_set_used(QofBook *book, const gchar *feature)
Indicate that the current book uses the given feature.

◆ gnc_commodity_print_info()

GNCPrintAmountInfo gnc_commodity_print_info ( const gnc_commodity *  commodity,
gboolean  use_symbol 
)

Definition at line 886 of file gnc-ui-util.cpp.

888{
890
891 if (commodity == nullptr)
892 return gnc_default_print_info (use_symbol);
893
894 info.commodity = commodity;
895
896 auto is_iso = gnc_commodity_is_iso (commodity);
897
898 if (is_decimal_fraction (gnc_commodity_get_fraction (commodity),
899 &info.max_decimal_places))
900 {
901 if (is_iso)
902 info.min_decimal_places = info.max_decimal_places;
903 else
904 info.min_decimal_places = 0;
905 }
906 else
907 info.max_decimal_places = info.min_decimal_places = 0;
908
909 info.use_separators = 1;
910 info.use_symbol = use_symbol ? 1 : 0;
911 info.use_locale = is_iso ? 1 : 0;
912 info.monetary = 1;
913 info.force_fit = 0;
914 info.round = 0;
915
916 return info;
917}
int gnc_commodity_get_fraction(const gnc_commodity *cm)
Retrieve the fraction for the specified commodity.
gboolean gnc_commodity_is_iso(const gnc_commodity *cm)
Checks to see if the specified commodity is an ISO 4217 recognized currency.

◆ gnc_default_currency()

gnc_commodity * gnc_default_currency ( void  )

Return the default currency set by the user.

If the user's preference is invalid, then this routine will return the default currency for the user's locale.

Returns
A pointer to a currency.

Definition at line 782 of file gnc-ui-util.cpp.

783{
784 return gnc_default_currency_common (user_default_currency,
785 GNC_PREFS_GROUP_GENERAL);
786}

◆ gnc_default_price_print_info()

GNCPrintAmountInfo gnc_default_price_print_info ( const gnc_commodity *  curr)

Definition at line 1060 of file gnc-ui-util.cpp.

1061{
1062 return gnc_price_print_info (curr, FALSE);
1063}

◆ gnc_default_print_info()

GNCPrintAmountInfo gnc_default_print_info ( gboolean  use_symbol)

Definition at line 834 of file gnc-ui-util.cpp.

835{
836 static GNCPrintAmountInfo info;
837 static bool got_it = false;
838
839 /* These must be updated each time. */
840 info.use_symbol = use_symbol ? 1 : 0;
841 info.commodity = gnc_default_currency ();
842
843 if (got_it)
844 return info;
845
846 auto lc = gnc_localeconv ();
847
848 info.max_decimal_places = lc->frac_digits;
849 info.min_decimal_places = lc->frac_digits;
850
851 info.use_separators = 1;
852 info.use_locale = 1;
853 info.monetary = 1;
854 info.force_fit = 0;
855 info.round = 0;
856
857 got_it = TRUE;
858
859 return info;
860}

◆ gnc_default_report_currency()

gnc_commodity * gnc_default_report_currency ( void  )

Return the default currency for use in reports, as set by the user.

If the user's preference is invalid, then this routine will return the default currency for the user's locale.

Returns
A pointer to a currency.

Definition at line 818 of file gnc-ui-util.cpp.

819{
820 return gnc_default_currency_common (user_report_currency,
821 GNC_PREFS_GROUP_GENERAL_REPORT);
822}

◆ gnc_default_share_print_info()

GNCPrintAmountInfo gnc_default_share_print_info ( void  )

Definition at line 997 of file gnc-ui-util.cpp.

998{
999 static GNCPrintAmountInfo info;
1000 static bool got_it = false;
1001
1002 if (!got_it)
1003 {
1004 info = gnc_default_print_info_helper (5);
1005 info.monetary = 0;
1006 got_it = TRUE;
1007 }
1008
1009 return info;
1010}

◆ gnc_filter_text_for_bidi_marks()

char * gnc_filter_text_for_bidi_marks ( const char *  incoming_text)

Returns the incoming text with Unicode bidi control characters removed.

Strips directional marks (U+200E, U+200F), embedding/override codes (U+202A–U+202E), isolate codes (U+2066–U+2069) and the Arabic letter mark (U+061C) that GnuCash inserts for RTL display, so that values copied to the clipboard are clean plain text.

Parameters
incoming_textThe text to filter (may be NULL)
Returns
A newly-allocated string with bidi marks removed, or NULL when incoming_text is NULL. Must be freed by the caller.

Definition at line 2158 of file gnc-ui-util.cpp.

2159{
2160 if (!text)
2161 return nullptr;
2162
2163 int32_t len = static_cast<int32_t> (strlen (text));
2164 std::string result;
2165 result.reserve (len);
2166
2167 const char* p = text;
2168 int32_t i = 0;
2169
2170 while (i < len)
2171 {
2172 UChar32 c;
2173 int32_t start = i;
2174 U8_NEXT (p, i, len, c);
2175
2176 if (c >= 0 && !u_hasBinaryProperty (c, UCHAR_BIDI_CONTROL))
2177 result.append (p + start, i - start);
2178 }
2179
2180 return g_strdup (result.c_str ());
2181}

◆ gnc_filter_text_for_control_chars()

char * gnc_filter_text_for_control_chars ( const char *  incoming_text)

Returns the incoming text removed of control characters.

Parameters
incoming_textThe text to filter
Returns
The incoming text filtered of control characters to be freed by the caller.

Definition at line 2190 of file gnc-ui-util.cpp.

2191{
2192 bool cntrl = false;
2193 bool text_found = false;
2194
2195 if (!text)
2196 return nullptr;
2197
2198 if (!g_utf8_validate (text, -1, nullptr))
2199 return nullptr;
2200
2201 auto filtered = g_string_sized_new (strlen (text) + 1);
2202
2203 auto ch = text;
2204
2205 while (*ch)
2206 {
2207 auto uc = g_utf8_get_char (ch);
2208
2209 // check for starting with control characters
2210 if (unichar_is_cntrl (uc) && !text_found)
2211 {
2212 ch = g_utf8_next_char (ch);
2213 continue;
2214 }
2215 // check for alpha, num and punctuation
2216 if (!unichar_is_cntrl (uc))
2217 {
2218 filtered = g_string_append_unichar (filtered, uc);
2219 text_found = true;
2220 }
2221 // check for control characters after text
2222 if (unichar_is_cntrl (uc))
2223 cntrl = true;
2224
2225 ch = g_utf8_next_char (ch);
2226
2227 if (cntrl) // if control characters in text replace with space
2228 {
2229 auto uc2 = g_utf8_get_char (ch);
2230
2231 if (!unichar_is_cntrl (uc2))
2232 filtered = g_string_append_unichar (filtered, ' ');
2233 }
2234 cntrl = false;
2235 }
2236 return g_string_free (filtered, FALSE);
2237}

◆ gnc_filter_text_for_currency_commodity()

char * gnc_filter_text_for_currency_commodity ( const gnc_commodity *  comm,
const char *  incoming_text,
const char **  symbol 
)

Returns the incoming text removed of currency symbol.

Parameters
commcommodity of entry if known
incoming_textThe text to filter
symbolreturn the symbol used
Returns
The incoming text with symbol removed to be freed by the caller

Definition at line 2292 of file gnc-ui-util.cpp.

2295{
2296 if (!incoming_text)
2297 {
2298 *symbol = nullptr;
2299 return nullptr;
2300 }
2301
2302 if (!gnc_commodity_is_currency (comm))
2303 {
2304 *symbol = nullptr;
2305 return g_strdup (incoming_text);
2306 }
2307
2308 if (comm)
2309 *symbol = gnc_commodity_get_nice_symbol (comm);
2310 else
2312
2313 return gnc_filter_text_for_currency_symbol (incoming_text, *symbol);
2314}
const char * gnc_commodity_get_nice_symbol(const gnc_commodity *cm)
Retrieve a symbol for the specified commodity, suitable for display to the user.
char * gnc_filter_text_for_currency_symbol(const char *incoming_text, const char *symbol)
Returns the incoming text removed of a currency symbol.

◆ gnc_filter_text_for_currency_symbol()

char * gnc_filter_text_for_currency_symbol ( const char *  incoming_text,
const char *  symbol 
)

Returns the incoming text removed of a currency symbol.

Parameters
incoming_textThe text to filter
symbolto remove
cursor_positionthe position of cursor in the incoming text
Returns
The incoming text with symbol removed to be freed by the caller

Definition at line 2271 of file gnc-ui-util.cpp.

2273{
2274 if (!incoming_text)
2275 return nullptr;
2276
2277 if (!symbol)
2278 return g_strdup (incoming_text);
2279
2280 if (g_strrstr (incoming_text, symbol) == nullptr)
2281 return g_strdup (incoming_text);
2282
2283 auto split = g_strsplit (incoming_text, symbol, -1);
2284
2285 auto ret_text = g_strjoinv (nullptr, split);
2286
2287 g_strfreev (split);
2288 return ret_text;
2289}

◆ gnc_filter_text_set_cursor_position()

void gnc_filter_text_set_cursor_position ( const char *  incoming_text,
const char *  symbol,
int *  zcursor_position 
)

Updates cursor_position after removal of currency symbols.

Parameters
incoming_textThe text to filter
symbolto remove
cursor_positionthe position of cursor in the incoming text
Returns
nothing

◆ gnc_find_or_create_equity_account()

Account * gnc_find_or_create_equity_account ( Account root,
GNCEquityType  equity_type,
gnc_commodity *  currency 
)

Definition at line 564 of file gnc-ui-util.cpp.

567{
568 g_return_val_if_fail (equity_type >= 0, nullptr);
569 g_return_val_if_fail (equity_type < NUM_EQUITY_TYPES, nullptr);
570 g_return_val_if_fail (currency != nullptr, nullptr);
571 g_return_val_if_fail (root != nullptr, nullptr);
572 g_return_val_if_fail (gnc_commodity_is_currency(currency), nullptr);
573
574 auto use_eq_op_feature = equity_type == EQUITY_OPENING_BALANCE && gnc_using_equity_type_opening_balance_account (gnc_get_current_book ());
575
576 if (use_eq_op_feature)
577 {
578 auto account = gnc_account_lookup_by_opening_balance (root, currency);
579 if (account)
580 return account;
581 }
582
583 auto base_name = equity_base_name (equity_type);
584
585 auto account = gnc_account_lookup_by_name(root, base_name);
586 if (account && xaccAccountGetType (account) != ACCT_TYPE_EQUITY)
587 account = nullptr;
588
589 if (!account)
590 {
591 base_name = base_name && *base_name ? _(base_name) : "";
592
593 account = gnc_account_lookup_by_name(root, base_name);
594 if (account && xaccAccountGetType (account) != ACCT_TYPE_EQUITY)
595 account = nullptr;
596 }
597
598 auto base_name_exists = (account != nullptr);
599
600 if (account &&
601 gnc_commodity_equiv (currency, xaccAccountGetCommodity (account)))
602 {
603 if (use_eq_op_feature)
604 xaccAccountSetIsOpeningBalance (account, TRUE);
605 return account;
606 }
607
608 auto name = g_strconcat (base_name, " - ",
609 gnc_commodity_get_mnemonic (currency), nullptr);
610 account = gnc_account_lookup_by_name(root, name);
611 if (account && xaccAccountGetType (account) != ACCT_TYPE_EQUITY)
612 account = nullptr;
613
614 auto name_exists = (account != nullptr);
615
616 if (account &&
617 gnc_commodity_equiv (currency, xaccAccountGetCommodity (account)))
618 {
619 if (use_eq_op_feature)
620 xaccAccountSetIsOpeningBalance (account, TRUE);
621 return account;
622 }
623
624 /* Couldn't find one, so create it */
625 if (name_exists && base_name_exists)
626 {
627 PWARN ("equity account with unexpected currency");
628 g_free (name);
629 return nullptr;
630 }
631
632 if (!base_name_exists &&
634 {
635 g_free (name);
636 name = g_strdup (base_name);
637 }
638
639 auto parent = gnc_account_lookup_by_name(root, _("Equity"));
640 if (!parent || xaccAccountGetType (parent) != ACCT_TYPE_EQUITY)
641 parent = root;
642 g_assert(parent);
643
644 account = xaccMallocAccount (gnc_account_get_book(root));
645
646 xaccAccountBeginEdit (account);
647
648 xaccAccountSetName (account, name);
649 xaccAccountSetType (account, ACCT_TYPE_EQUITY);
650 xaccAccountSetCommodity (account, currency);
651
652 if (use_eq_op_feature)
653 xaccAccountSetIsOpeningBalance (account, TRUE);
654
655 xaccAccountBeginEdit (parent);
656 gnc_account_append_child (parent, account);
657 xaccAccountCommitEdit (parent);
658
659 xaccAccountCommitEdit (account);
660
661 g_free (name);
662
663 return account;
664}
void gnc_account_append_child(Account *new_parent, Account *child)
This function will remove from the child account any pre-existing parent relationship,...
Definition Account.cpp:2836
GNCAccountType xaccAccountGetType(const Account *acc)
Returns the account's account type.
Definition Account.cpp:3267
void xaccAccountSetName(Account *acc, const char *str)
Set the account's name.
Definition Account.cpp:2458
void xaccAccountSetType(Account *acc, GNCAccountType tip)
Set the account's type.
Definition Account.cpp:2437
Account * xaccMallocAccount(QofBook *book)
Constructor.
Definition Account.cpp:1270
void xaccAccountSetCommodity(Account *acc, gnc_commodity *com)
Set the account's commodity.
Definition Account.cpp:2678
gboolean gnc_commodity_equiv(const gnc_commodity *a, const gnc_commodity *b)
This routine returns TRUE if the two commodities are equivalent.
const char * gnc_commodity_get_mnemonic(const gnc_commodity *cm)
Retrieve the mnemonic for the specified commodity.
void xaccAccountSetIsOpeningBalance(Account *acc, gboolean val)
Set the "opening-balance" flag for an account.
Definition Account.cpp:4153
Account * gnc_account_lookup_by_opening_balance(Account *account, gnc_commodity *commodity)
Find the opening balance account for the currency.
Definition Account.cpp:3121
#define PWARN(format, args...)
Log a warning.
Definition qoflog.h:250

◆ gnc_get_account_name_for_register()

char * gnc_get_account_name_for_register ( const Account account)

Get either the full name of the account or the simple name, depending on the configuration parameter general/register/show_leaf_account_names.

Parameters
accountThe account to retrieve the name for.
Returns
A newly allocated string.

Definition at line 439 of file gnc-ui-util.cpp.

440{
441 auto show_leaf_accounts =
442 gnc_prefs_get_bool(GNC_PREFS_GROUP_GENERAL_REGISTER,
443 GNC_PREF_SHOW_LEAF_ACCT_NAMES);
444
445 return gnc_get_account_name_for_split_register(account, show_leaf_accounts);
446}
char * gnc_get_account_name_for_split_register(const Account *account, gboolean show_leaf_accounts)
Get either the full name of the account or the simple name, depending on the show_leaf_accounts.

◆ gnc_get_account_name_for_split_register()

char * gnc_get_account_name_for_split_register ( const Account account,
gboolean  show_leaf_accounts 
)

Get either the full name of the account or the simple name, depending on the show_leaf_accounts.

Parameters
accountThe account to retrieve the name for.
show_leaf_accountsWhether the full name will be returned.
Returns
A newly allocated string.

Definition at line 429 of file gnc-ui-util.cpp.

431{
432 if (show_leaf_accounts)
433 return g_strdup (xaccAccountGetName (account));
434 else
435 return gnc_account_get_full_name (account);
436}
const char * xaccAccountGetName(const Account *acc)
Get the account's name.
Definition Account.cpp:3289
gchar * gnc_account_get_full_name(const Account *account)
The gnc_account_get_full_name routine returns the fully qualified name of the account using the given...
Definition Account.cpp:3305

◆ gnc_get_current_book()

QofBook * gnc_get_current_book ( void  )

Definition at line 208 of file gnc-ui-util.cpp.

209{
210 return qof_session_get_book (gnc_get_current_session ());
211}
QofBook * qof_session_get_book(const QofSession *session)
Returns the QofBook of this session.

◆ gnc_get_current_book_tax_name()

const char * gnc_get_current_book_tax_name ( void  )

Definition at line 328 of file gnc-ui-util.cpp.

329{
330 auto book = gnc_get_current_book();
331 auto tax_name = qof_book_get_string_option(book, OPTION_TAXUS_NAME);
332 if (tax_name)
333 {
334 return tax_name;
335 }
336 else
337 {
338 const char* old_option_taxus_name =
339 qof_book_get_string_option(book, OLD_OPTION_TAXUS_NAME);
340 if (old_option_taxus_name)
341 {
342 char* taxus_name = g_strdup(old_option_taxus_name);
343 const char* old_option_taxus_type =
344 qof_book_get_string_option(book, OLD_OPTION_TAXUS_TYPE);
345 if (old_option_taxus_type)
346 { /* switch both name and type and remove unused frames */
347 char* taxus_type = g_strdup(old_option_taxus_type);
348 qof_book_set_string_option(book, OPTION_TAXUS_NAME, taxus_name);
349 qof_book_set_string_option(book, OLD_OPTION_TAXUS_NAME, nullptr);
350 qof_book_set_string_option(book, OPTION_TAXUS_TYPE, taxus_type);
351 qof_book_set_string_option(book, OLD_OPTION_TAXUS_TYPE, nullptr);
352 qof_book_option_frame_delete(book, "book/tax_US");
353 qof_book_option_frame_delete(book, "book");
354 g_free (taxus_type);
355 }
356 else
357 { /* switch just name and remove unused frames */
358 qof_book_set_string_option(book, OPTION_TAXUS_NAME, taxus_name);
359 qof_book_set_string_option(book, OLD_OPTION_TAXUS_NAME, nullptr);
360 qof_book_option_frame_delete(book, "book/tax_US");
361 qof_book_option_frame_delete(book, "book");
362 }
363 g_free (taxus_name);
364 return qof_book_get_string_option(book, OPTION_TAXUS_NAME);
365 }
366 return nullptr;
367 }
368}

◆ gnc_get_current_book_tax_type()

const char * gnc_get_current_book_tax_type ( void  )

Definition at line 371 of file gnc-ui-util.cpp.

372{
373 auto book = gnc_get_current_book();
374 auto tax_type =
375 qof_book_get_string_option(book, OPTION_TAXUS_TYPE);
376 if (tax_type)
377 {
378 return tax_type;
379 }
380 else
381 {
382 auto old_option_taxus_type =
383 qof_book_get_string_option(book, OLD_OPTION_TAXUS_TYPE);
384 if (old_option_taxus_type)
385 {
386 auto taxus_type = g_strdup(old_option_taxus_type);
387 auto old_option_taxus_name =
388 qof_book_get_string_option(book, OLD_OPTION_TAXUS_NAME);
389 if (old_option_taxus_name)
390 { /* switch both name and type and remove unused frames */
391 auto taxus_name = g_strdup(old_option_taxus_name);
392 qof_book_set_string_option(book, OPTION_TAXUS_NAME, taxus_name);
393 qof_book_set_string_option(book, OLD_OPTION_TAXUS_NAME, nullptr);
394 qof_book_set_string_option(book, OPTION_TAXUS_TYPE, taxus_type);
395 qof_book_set_string_option(book, OLD_OPTION_TAXUS_TYPE, nullptr);
396 qof_book_option_frame_delete(book, "book/tax_US");
397 qof_book_option_frame_delete(book, "book");
398 g_free (taxus_name);
399 }
400 else
401 { /* switch just type and remove unused frames */
402 qof_book_set_string_option(book, OPTION_TAXUS_TYPE, taxus_type);
403 qof_book_set_string_option(book, OLD_OPTION_TAXUS_TYPE, nullptr);
404 qof_book_option_frame_delete(book, "book/tax_US");
405 qof_book_option_frame_delete(book, "book");
406 }
407 g_free (taxus_type);
408 return qof_book_get_string_option(book, OPTION_TAXUS_TYPE);
409 }
410 return nullptr;
411 }
412}

◆ gnc_get_current_commodities()

gnc_commodity_table * gnc_get_current_commodities ( void  )

Definition at line 421 of file gnc-ui-util.cpp.

422{
423 if (gnc_current_session_exist())
424 return gnc_commodity_table_get_table (gnc_get_current_book ());
425 return nullptr;
426}
gnc_commodity_table * gnc_commodity_table_get_table(QofBook *book)
Returns the commodity table associated with a book.

◆ gnc_get_current_root_account()

Account * gnc_get_current_root_account ( void  )

Definition at line 415 of file gnc-ui-util.cpp.

416{
417 return gnc_book_get_root_account (gnc_get_current_book ());
418}

◆ gnc_get_default_directory()

char * gnc_get_default_directory ( const char *  section)

Definition at line 186 of file gnc-ui-util.cpp.

187{
188 auto dir = gnc_prefs_get_string (section, GNC_PREF_LAST_PATH);
189 if (!(dir && *dir))
190 {
191 g_free (dir); // if it's ""
192#ifdef G_OS_WIN32
193 dir = g_strdup (g_get_user_data_dir ()); /* equivalent of "My Documents" */
194#else
195 dir = g_strdup (g_get_home_dir ());
196#endif
197 }
198 return dir;
199}
gchar * gnc_prefs_get_string(const gchar *group, const gchar *pref_name)
Get a string value from the preferences backend.

◆ gnc_get_doclink_flag_order()

const char * gnc_get_doclink_flag_order ( void  )

Get a string containing document link flag order.

Returns
a string containing the document link flag change order

Definition at line 541 of file gnc-ui-util.cpp.

542{
543 static const char flags[] = { FLINK, WLINK, ' ', 0 };
544 return flags;
545}

◆ gnc_get_doclink_str()

const char * gnc_get_doclink_str ( char  link_flag)

Get a string representing the document link type.

Parameters
link_flagThe flag to convert into a string
Returns
the i18n'd doclink string

Definition at line 517 of file gnc-ui-util.cpp.

518{
519 switch (link_flag)
520 {
521 case WLINK:
522 return C_("Document Link flag for 'web'", "w");
523 case FLINK:
524 return C_("Document Link flag for 'file'", "f");
525 case ' ':
526 return " ";
527 default:
528 PERR("Bad link flag");
529 return nullptr;
530 }
531}
#define PERR(format, args...)
Log a serious error.
Definition qoflog.h:244

◆ gnc_get_doclink_valid_flags()

const char * gnc_get_doclink_valid_flags ( void  )

Get a string containing documentation link valid flags.

Returns
a string containing the list of valid link_flags

Definition at line 534 of file gnc-ui-util.cpp.

535{
536 static const char flags[] = { FLINK, WLINK, ' ', 0 };
537 return flags;
538}

◆ gnc_get_reconcile_flag_order()

const char * gnc_get_reconcile_flag_order ( void  )

Definition at line 510 of file gnc-ui-util.cpp.

511{
512 static const char flags[] = { NREC, CREC, 0 };
513 return flags;
514}
#define NREC
not reconciled or cleared
Definition Split.h:76
#define CREC
The Split has been cleared
Definition Split.h:73

◆ gnc_get_reconcile_str()

const char * gnc_get_reconcile_str ( char  reconciled_flag)

Definition at line 469 of file gnc-ui-util.cpp.

470{
471 switch (reconciled_flag)
472 {
473 case NREC:
474 return C_("Reconciled flag 'not cleared'", "n");
475 case CREC:
476 return C_("Reconciled flag 'cleared'", "c");
477 case YREC:
478 return C_("Reconciled flag 'reconciled'", "y");
479 case FREC:
480 return C_("Reconciled flag 'frozen'", "f");
481 case VREC:
482 return C_("Reconciled flag 'void'", "v");
483 default:
484 PERR("Bad reconciled flag\n");
485 return nullptr;
486 }
487}
#define VREC
split is void
Definition Split.h:77
#define FREC
frozen into accounting period
Definition Split.h:75
#define YREC
The Split has been reconciled.
Definition Split.h:74

◆ gnc_get_reconcile_valid_flags()

const char * gnc_get_reconcile_valid_flags ( void  )

Definition at line 496 of file gnc-ui-util.cpp.

497{
498 static const char flags[] = { NREC, CREC, YREC, FREC, VREC, 0 };
499 return flags;
500}

◆ gnc_integral_print_info()

GNCPrintAmountInfo gnc_integral_print_info ( void  )

Definition at line 1067 of file gnc-ui-util.cpp.

1068{
1069 static GNCPrintAmountInfo info;
1070 static bool got_it = false;
1071
1072 if (!got_it)
1073 {
1074 info = gnc_default_print_info_helper (0);
1075 got_it = TRUE;
1076 }
1077
1078 return info;
1079}

◆ gnc_is_new_book()

gboolean gnc_is_new_book ( void  )

Definition at line 222 of file gnc-ui-util.cpp.

223{
224 return (!gnc_current_session_exist() ||
225 gnc_account_n_children (gnc_book_get_root_account (gnc_get_current_book ())) == 0);
226}
gint gnc_account_n_children(const Account *account)
Return the number of children of the specified account.
Definition Account.cpp:2976

◆ gnc_list_formatter()

gchar * gnc_list_formatter ( GList *  strings)

This function takes a GList of char*, and uses locale-sensitive list formatter.

Parameters
stringsThe GList* of char*.
Returns
a newly allocated char*

Definition at line 2317 of file gnc-ui-util.cpp.

2318{
2319 g_return_val_if_fail (strings, nullptr);
2320
2321 UErrorCode status = U_ZERO_ERROR;
2322 auto formatter = icu::ListFormatter::createInstance(status);
2323 std::vector<UniStr> strvec;
2324 UniStr result;
2325 std::string retval;
2326
2327 for (auto n = strings; n; n = g_list_next (n))
2328 {
2329 auto utf8_str{static_cast<const char*>(n->data)};
2330 strvec.push_back (UniStr::fromUTF8(utf8_str));
2331 }
2332
2333 formatter->format (strvec.data(), strvec.size(), result, status);
2334
2335 if (U_FAILURE(status))
2336 PERR ("Unicode error");
2337 else
2338 result.toUTF8String(retval);
2339
2340 delete formatter;
2341 return g_strdup (retval.c_str());
2342}

◆ gnc_locale_default_currency()

gnc_commodity * gnc_locale_default_currency ( void  )

Returns the default currency of the current locale.

WATCH OUT: If no currency could be identified from the locale, this one returns "USD", but this will have nothing to do with the actual locale.

Definition at line 737 of file gnc-ui-util.cpp.

738{
739 auto currency = gnc_locale_default_currency_nodefault ();
740
741 return (currency ? currency :
742 gnc_commodity_table_lookup (gnc_get_current_commodities (),
743 GNC_COMMODITY_NS_CURRENCY, "USD"));
744}
gnc_commodity * gnc_locale_default_currency_nodefault(void)
Returns the default currency of the current locale, or NULL if no sensible currency could be identifi...

◆ gnc_locale_default_currency_nodefault()

gnc_commodity * gnc_locale_default_currency_nodefault ( void  )

Returns the default currency of the current locale, or NULL if no sensible currency could be identified from the locale.

Definition at line 724 of file gnc-ui-util.cpp.

725{
726 auto table = gnc_get_current_commodities ();
727 auto code = gnc_locale_default_iso_currency_code ();
728
729 auto currency = gnc_commodity_table_lookup (table,
730 GNC_COMMODITY_NS_CURRENCY,
731 code);
732
733 return (currency ? currency : nullptr);
734}

◆ gnc_price_print_info()

GNCPrintAmountInfo gnc_price_print_info ( const gnc_commodity *  curr,
gboolean  use_symbol 
)

Definition at line 1026 of file gnc-ui-util.cpp.

1027{
1028 GNCPrintAmountInfo info;
1029 auto force = gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL,
1030 GNC_PREF_PRICES_FORCE_DECIMAL);
1031 info.commodity = curr;
1032
1033 if (info.commodity)
1034 {
1035 int frac = gnc_commodity_get_fraction (curr);
1036 guint8 decplaces = 0;
1037 while (frac != 1 && (frac % 10) == 0 && (frac /= 10)) ++decplaces;
1038 if (force)
1039 decplaces += 2;
1040 info.max_decimal_places = decplaces;
1041 info.min_decimal_places = decplaces;
1042 }
1043 else
1044 {
1045 info.max_decimal_places = 6;
1046 info.min_decimal_places = 0;
1047 }
1048
1049 info.use_separators = 1;
1050 info.use_symbol = use_symbol ? 1 : 0;
1051 info.use_locale = 1;
1052 info.monetary = 1;
1053
1054 info.force_fit = force;
1055 info.round = force;
1056 return info;
1057}

◆ gnc_print_amount_with_bidi_ltr_isolate()

const char * gnc_print_amount_with_bidi_ltr_isolate ( gnc_numeric  val,
GNCPrintAmountInfo  info 
)

Make a string representation of a gnc_numeric.

Warning, the gnc_numeric is not checked for validity and the returned char* may point to random garbage.

This is the same as xaccPrintAmount but wraps the output with BiDi left to right isolate if a symbol is displayed.

Definition at line 1447 of file gnc-ui-util.cpp.

1448{
1449 /* hack alert -- this is not thread safe ... */
1450 static char buf[BUFLEN];
1451 static const char ltr_isolate[] = { '\xe2', '\x81', '\xa6' };
1452 static const char ltr_pop_isolate[] = { '\xe2', '\x81', '\xa9' };
1453 auto offset = info.use_symbol ? 3 : 0;
1454
1455 if (!gnc_commodity_is_currency (info.commodity))
1456 offset = 0;
1457
1458 memset (buf, 0, BUFLEN);
1459 if (!xaccSPrintAmount (buf + offset, val, info))
1460 {
1461 buf[0] = '\0';
1462 return buf;
1463 };
1464
1465 if (offset == 0)
1466 return buf;
1467
1468 memcpy (buf, ltr_isolate, 3);
1469
1470 if (buf[BUFLEN - 4] == '\0')
1471 {
1472 auto length = strlen (buf);
1473 memcpy (buf + length, ltr_pop_isolate, 3);
1474 }
1475 else
1476 {
1477 buf[BUFLEN - 1] = '\0';
1478 memcpy (buf + BUFLEN - 4, ltr_pop_isolate, 3);
1479
1480 PWARN("buffer length %d exceeded, string truncated was %s", BUFLEN, buf);
1481 }
1482 /* its OK to return buf, since we declared it static
1483 and is immediately g_strdup'd */
1484 return buf;
1485}
int xaccSPrintAmount(char *bufp, gnc_numeric val, GNCPrintAmountInfo info)
Make a string representation of a gnc_numeric.

◆ gnc_reverse_balance()

gboolean gnc_reverse_balance ( const Account account)

Definition at line 160 of file gnc-ui-util.cpp.

161{
162 if (account == nullptr)
163 return FALSE;
164
165 auto type = xaccAccountGetType (account);
166 if ((type < 0) || (type >= NUM_ACCOUNT_TYPES))
167 return FALSE;
168
169 if (!reverse_balance_inited)
170 gnc_reverse_balance_init ();
171
172 return reverse_type[type];
173}
@ NUM_ACCOUNT_TYPES
stop here; the following types just aren't ready for prime time
Definition Account.h:161

◆ gnc_set_current_book_tax_name_type()

void gnc_set_current_book_tax_name_type ( gboolean  name_changed,
const char *  tax_name,
gboolean  type_changed,
const char *  tax_type 
)

Definition at line 234 of file gnc-ui-util.cpp.

236{
237 if (name_changed)
238 {
239 if (type_changed)
240 {
241 auto book = gnc_get_current_book();
242 if ((g_strcmp0 (tax_name, "") == 0) ||
243 (tax_name == nullptr))
244 { /* change to no name */
245 if ((g_strcmp0 (tax_type, "Other") == 0) ||
246 (g_strcmp0 (tax_type, "") == 0) ||
247 (tax_type == nullptr))
248 { /* need to delete both name and type and the "tax_US" frame */
249 qof_book_set_string_option(book, OPTION_TAXUS_NAME, nullptr);
250 qof_book_set_string_option(book, OPTION_TAXUS_TYPE, nullptr);
251 qof_book_option_frame_delete(book, "tax_US");
252 }
253 else
254 { /* delete the name & change the type; keep the "tax_US" frame */
255 qof_book_set_string_option(book, OPTION_TAXUS_NAME, nullptr);
256 qof_book_set_string_option(book, OPTION_TAXUS_TYPE, tax_type);
257 }
258 }
259 else /* new name */
260 {
261 if ((g_strcmp0 (tax_type, "Other") == 0) ||
262 (g_strcmp0 (tax_type, "") == 0) ||
263 (tax_type == nullptr))
264 { /* delete the type & change the name; keep the "tax_US" frame */
265 qof_book_set_string_option(book, OPTION_TAXUS_TYPE, nullptr);
266 qof_book_set_string_option(book, OPTION_TAXUS_NAME, tax_name);
267 }
268 else /* and new type */
269 { /* change the name & change the type */
270 qof_book_set_string_option(book, OPTION_TAXUS_NAME, tax_name);
271 qof_book_set_string_option(book, OPTION_TAXUS_TYPE, tax_type);
272 }
273 }
274 }
275 else /* no type change but name changed */
276 {
277 auto book = gnc_get_current_book();
278 if ((g_strcmp0 (tax_name, "") == 0) ||
279 (tax_name == nullptr))
280 { /* change to no name */
281 if ((g_strcmp0 (tax_type, "Other") == 0) ||
282 (g_strcmp0 (tax_type, "") == 0) ||
283 (tax_type == nullptr))
284 { /* delete the name; there is no type; deleted the "tax_US" frame */
285 qof_book_set_string_option(book, OPTION_TAXUS_NAME, nullptr);
286 qof_book_option_frame_delete(book, "tax_US");
287 }
288 else
289 { /* need to delete the name and keep "tax_US" frame */
290 qof_book_set_string_option(book, OPTION_TAXUS_NAME, nullptr);
291 }
292 }
293 else
294 { /* change the name & keep "tax_US" frame */
295 qof_book_set_string_option(book, OPTION_TAXUS_NAME, tax_name);
296 }
297 }
298 }
299 else /* no name change */
300 {
301 if (type_changed)
302 {
303 auto book = gnc_get_current_book();
304 if ((g_strcmp0 (tax_type, "Other") == 0) ||
305 (g_strcmp0 (tax_type, "") == 0) ||
306 (tax_type == nullptr))
307 {
308 if ((g_strcmp0 (tax_name, "") == 0) ||
309 (tax_name == nullptr))
310 {/* delete the type; there is no name; delete the "tax_US" frame */
311 qof_book_set_string_option(book, OPTION_TAXUS_TYPE, nullptr);
312 qof_book_option_frame_delete(book, "tax_US");
313 }
314 else
315 { /* need to delete the type and keep "tax_US" frame */
316 qof_book_set_string_option(book, OPTION_TAXUS_TYPE, nullptr);
317 }
318 }
319 else
320 { /* change the type & keep "tax_US" frame */
321 qof_book_set_string_option(book, OPTION_TAXUS_TYPE, tax_type);
322 }
323 } /*else no name and no type change - do nothing */
324 }
325}

◆ gnc_set_default_directory()

void gnc_set_default_directory ( const char *  section,
const char *  directory 
)

Definition at line 202 of file gnc-ui-util.cpp.

203{
204 gnc_prefs_set_string(section, GNC_PREF_LAST_PATH, directory);
205}
gboolean gnc_prefs_set_string(const gchar *group, const gchar *pref_name, const gchar *value)
Store a string into the preferences backend.

◆ gnc_set_use_equity_type_opening_balance_account()

void gnc_set_use_equity_type_opening_balance_account ( QofBook book)

Definition at line 180 of file gnc-ui-util.cpp.

181{
182 gnc_features_set_used (book, GNC_FEATURE_EQUITY_TYPE_OPENING_BALANCE);
183}

◆ gnc_share_print_info_places()

GNCPrintAmountInfo gnc_share_print_info_places ( int  decplaces)

Definition at line 1013 of file gnc-ui-util.cpp.

1014{
1015 GNCPrintAmountInfo info;
1016
1017 info = gnc_default_share_print_info ();
1018 info.max_decimal_places = decplaces;
1019 info.min_decimal_places = decplaces;
1020 info.force_fit = 1;
1021 info.round = 1;
1022 return info;
1023}

◆ gnc_split_amount_print_info()

GNCPrintAmountInfo gnc_split_amount_print_info ( Split *  split,
gboolean  use_symbol 
)

Definition at line 964 of file gnc-ui-util.cpp.

965{
966 if (!split)
967 {
968 GNCPrintAmountInfo info = gnc_default_share_print_info ();
969 info.use_symbol = use_symbol;
970 return info;
971 }
972
973 return gnc_account_print_info (xaccSplitGetAccount (split), use_symbol);
974}
Account * xaccSplitGetAccount(const Split *split)
Returns the account of this split, which was set through xaccAccountInsertSplit().

◆ gnc_ui_util_init()

void gnc_ui_util_init ( void  )

Definition at line 2083 of file gnc-ui-util.cpp.

2084{
2085 gnc_configure_account_separator ();
2086 gnc_auto_decimal_init();
2087
2088 gnc_prefs_register_cb(GNC_PREFS_GROUP_GENERAL, GNC_PREF_ACCOUNT_SEPARATOR,
2089 (void*)gnc_configure_account_separator, nullptr);
2090 gnc_prefs_register_cb(GNC_PREFS_GROUP_GENERAL, GNC_PREF_REVERSED_ACCTS_NONE,
2091 (void*)gnc_configure_reverse_balance, nullptr);
2092 gnc_prefs_register_cb(GNC_PREFS_GROUP_GENERAL, GNC_PREF_REVERSED_ACCTS_CREDIT,
2093 (void*)gnc_configure_reverse_balance, nullptr);
2094 gnc_prefs_register_cb(GNC_PREFS_GROUP_GENERAL, GNC_PREF_REVERSED_ACCTS_INC_EXP,
2095 (void*)gnc_configure_reverse_balance, nullptr);
2096 gnc_prefs_register_cb(GNC_PREFS_GROUP_GENERAL, GNC_PREF_CURRENCY_CHOICE_LOCALE,
2097 (void*)gnc_currency_changed_cb, nullptr);
2098 gnc_prefs_register_cb(GNC_PREFS_GROUP_GENERAL, GNC_PREF_CURRENCY_CHOICE_OTHER,
2099 (void*)gnc_currency_changed_cb, nullptr);
2100 gnc_prefs_register_cb(GNC_PREFS_GROUP_GENERAL, GNC_PREF_CURRENCY_OTHER,
2101 (void*)gnc_currency_changed_cb, nullptr);
2102 gnc_prefs_register_cb(GNC_PREFS_GROUP_GENERAL_REPORT, GNC_PREF_CURRENCY_CHOICE_LOCALE,
2103 (void*)gnc_currency_changed_cb, nullptr);
2104 gnc_prefs_register_cb(GNC_PREFS_GROUP_GENERAL_REPORT, GNC_PREF_CURRENCY_CHOICE_OTHER,
2105 (void*)gnc_currency_changed_cb, nullptr);
2106 gnc_prefs_register_cb(GNC_PREFS_GROUP_GENERAL_REPORT, GNC_PREF_CURRENCY_OTHER,
2107 (void*)gnc_currency_changed_cb, nullptr);
2108 gnc_prefs_register_cb(GNC_PREFS_GROUP_GENERAL, GNC_PREF_AUTO_DECIMAL_POINT,
2109 (void*)gnc_set_auto_decimal_enabled, nullptr);
2110 gnc_prefs_register_cb(GNC_PREFS_GROUP_GENERAL, GNC_PREF_AUTO_DECIMAL_PLACES,
2111 (void*)gnc_set_auto_decimal_places, nullptr);
2112
2113}
gulong gnc_prefs_register_cb(const char *group, const gchar *pref_name, gpointer func, gpointer user_data)
Register a callback that gets triggered when the given preference changes.

◆ gnc_ui_util_remove_registered_prefs()

void gnc_ui_util_remove_registered_prefs ( void  )

Definition at line 2116 of file gnc-ui-util.cpp.

2117{
2118 // remove the registered pref call backs above
2119 gnc_prefs_remove_cb_by_func (GNC_PREFS_GROUP_GENERAL,
2120 GNC_PREF_ACCOUNT_SEPARATOR,
2121 (void*)gnc_configure_account_separator, nullptr);
2122 gnc_prefs_remove_cb_by_func (GNC_PREFS_GROUP_GENERAL,
2123 GNC_PREF_REVERSED_ACCTS_NONE,
2124 (void*)gnc_configure_reverse_balance, nullptr);
2125 gnc_prefs_remove_cb_by_func (GNC_PREFS_GROUP_GENERAL,
2126 GNC_PREF_REVERSED_ACCTS_CREDIT,
2127 (void*)gnc_configure_reverse_balance, nullptr);
2128 gnc_prefs_remove_cb_by_func (GNC_PREFS_GROUP_GENERAL,
2129 GNC_PREF_REVERSED_ACCTS_INC_EXP,
2130 (void*)gnc_configure_reverse_balance, nullptr);
2131 gnc_prefs_remove_cb_by_func (GNC_PREFS_GROUP_GENERAL,
2132 GNC_PREF_CURRENCY_CHOICE_LOCALE,
2133 (void*)gnc_currency_changed_cb, nullptr);
2134 gnc_prefs_remove_cb_by_func (GNC_PREFS_GROUP_GENERAL,
2135 GNC_PREF_CURRENCY_CHOICE_OTHER,
2136 (void*)gnc_currency_changed_cb, nullptr);
2137 gnc_prefs_remove_cb_by_func (GNC_PREFS_GROUP_GENERAL,
2138 GNC_PREF_CURRENCY_OTHER,
2139 (void*)gnc_currency_changed_cb, nullptr);
2140 gnc_prefs_remove_cb_by_func (GNC_PREFS_GROUP_GENERAL_REPORT,
2141 GNC_PREF_CURRENCY_CHOICE_LOCALE,
2142 (void*)gnc_currency_changed_cb, nullptr);
2143 gnc_prefs_remove_cb_by_func (GNC_PREFS_GROUP_GENERAL_REPORT,
2144 GNC_PREF_CURRENCY_CHOICE_OTHER,
2145 (void*)gnc_currency_changed_cb, nullptr);
2146 gnc_prefs_remove_cb_by_func (GNC_PREFS_GROUP_GENERAL_REPORT,
2147 GNC_PREF_CURRENCY_OTHER,
2148 (void*)gnc_currency_changed_cb, nullptr);
2149 gnc_prefs_remove_cb_by_func (GNC_PREFS_GROUP_GENERAL,
2150 GNC_PREF_AUTO_DECIMAL_POINT,
2151 (void*)gnc_set_auto_decimal_enabled, nullptr);
2152 gnc_prefs_remove_cb_by_func (GNC_PREFS_GROUP_GENERAL,
2153 GNC_PREF_AUTO_DECIMAL_PLACES,
2154 (void*)gnc_set_auto_decimal_places, nullptr);
2155}
void gnc_prefs_remove_cb_by_func(const gchar *group, const gchar *pref_name, gpointer func, gpointer user_data)
Remove a function that was registered for a callback when the given preference changed.

◆ gnc_using_equity_type_opening_balance_account()

gboolean gnc_using_equity_type_opening_balance_account ( QofBook book)

Definition at line 175 of file gnc-ui-util.cpp.

176{
177 return gnc_features_check_used (book, GNC_FEATURE_EQUITY_TYPE_OPENING_BALANCE);
178}

◆ gnc_wrap_text_with_bidi_ltr_isolate()

char * gnc_wrap_text_with_bidi_ltr_isolate ( const char *  text)

This function helps with GTK's use of 'Unicode Bidirectional Text Algorithm'.

To keep the format of the text, this function wraps the text with a BiDi isolate charatcter and a BiDi closing character.

This helps with monetary values in RTL languages that display the currency symbol.

Definition at line 1488 of file gnc-ui-util.cpp.

1489{
1490 static const char* ltr = "\u2066"; // ltr isolate
1491 static const char* pop = "\u2069"; // pop directional formatting
1492
1493 if (!text)
1494 return nullptr;
1495
1496 return g_strconcat (ltr, text, pop, nullptr);
1497}

◆ numeric_to_words()

char * numeric_to_words ( gnc_numeric  val)

Definition at line 1641 of file gnc-ui-util.cpp.

1642{
1643 return number_to_words(gnc_numeric_to_double(val),
1644 gnc_numeric_denom(val));
1645}
double gnc_numeric_to_double(gnc_numeric in)
Convert numeric to floating-point value.

◆ xaccParseAmount()

gboolean xaccParseAmount ( const char *  in_str,
gboolean  monetary,
gnc_numeric *  result,
char **  endstr 
)

Parses in_str to obtain a numeric result.

The routine will parse as much of in_str as it can to obtain a single number. The number is parsed using the current locale information and the 'monetary' flag. The routine will return TRUE if it successfully parsed a number and FALSE otherwise. If TRUE is returned and result is non-NULL, the value of the parsed number is stored in *result. If FALSE is returned, *result is unchanged. If TRUE is returned and endstr is non-NULL, the location of the first character in in_str not used by the parser will be returned in *endstr. If FALSE is returned and endstr is non-NULL, *endstr will point to in_str.

Definition at line 2015 of file gnc-ui-util.cpp.

2017{
2018 return xaccParseAmountBasicInternal (in_str, monetary, auto_decimal_enabled,
2019 result, endstr, FALSE);
2020}

◆ xaccParseAmountExtended()

gboolean xaccParseAmountExtended ( const char *  in_str,
gboolean  monetary,
gunichar  negative_sign,
gunichar  decimal_point,
gunichar  group_separator,
const char *  ignore_list,
gnc_numeric *  result,
char **  endstr 
)

Converts a string to a gnc_numeric.

The caller must provide all the locale-specific information.

ignore_list is a list of characters that are completely ignored while processing the input string. If ignore_list is NULL, nothing is ignored.

Definition at line 2033 of file gnc-ui-util.cpp.

2037{
2038 return xaccParseAmountInternal (in_str, monetary, negative_sign,
2039 decimal_point, group_separator,
2040 ignore_list, auto_decimal_enabled,
2041 result, endstr);
2042}

◆ xaccParseAmountExtImport()

gboolean xaccParseAmountExtImport ( const char *  in_str,
gboolean  monetary,
gunichar  negative_sign,
gunichar  decimal_point,
gunichar  group_separator,
const char *  ignore_list,
gnc_numeric *  result,
char **  endstr 
)

Similar to xaccParseAmountExtended, but will not automatically set a decimal point, regardless of what the user has set for this option.

Primarily meant for cases where numbers are coming into gnucash that are not typed in by the user (like via csv import).

Definition at line 2045 of file gnc-ui-util.cpp.

2049{
2050 return xaccParseAmountInternal (in_str, monetary, negative_sign,
2051 decimal_point, group_separator,
2052 ignore_list, FALSE,
2053 result, endstr);
2054}

◆ xaccParseAmountImport()

gboolean xaccParseAmountImport ( const char *  in_str,
gboolean  monetary,
gnc_numeric *  result,
char **  endstr,
gboolean  skip 
)

Similar to xaccParseAmount, but with two differences.

  • it exposes a flag to indicate whether the locale's positive sign (or in absence the '+') character is ignored. Setting skip to TRUE will cause the function to ignore any positive sign. Setting it to FALSE, and positive signs will be treated as unrecognized characters. xaccParseAmount will run as if skip is FALSE for compatibility reasons (gnc-expression-parser depends on this behaviour).
  • The other important difference with xaccParseAmount is that this function will never apply automatic decimal point logc, whereas xaccParseAmount will follow the automatic decimal point preference as set by the user.

Definition at line 2023 of file gnc-ui-util.cpp.

2026{
2027 return xaccParseAmountBasicInternal (in_str, monetary, FALSE,
2028 result, endstr, skip);
2029}

◆ xaccPrintAmount()

const char * xaccPrintAmount ( gnc_numeric  val,
GNCPrintAmountInfo  info 
)

Make a string representation of a gnc_numeric.

Warning, the gnc_numeric is not checked for validity and the returned char* may point to random garbage.

Definition at line 1434 of file gnc-ui-util.cpp.

1435{
1436 /* hack alert -- this is not thread safe ... */
1437 static char buf[BUFLEN];
1438
1439 if (!xaccSPrintAmount (buf, val, info))
1440 buf[0] = '\0';
1441
1442 /* its OK to return buf, since we declared it static */
1443 return buf;
1444}

◆ xaccSPrintAmount()

int xaccSPrintAmount ( char *  bufp,
gnc_numeric  val,
GNCPrintAmountInfo  info 
)

Make a string representation of a gnc_numeric.

Warning, the gnc_numeric is not checked for validity and the contents of the buffer will be unchanged. It is up to the calling function to ensure that buf is large enough for the results.

Parameters
bufpShould be at least 64 chars.

Definition at line 1307 of file gnc-ui-util.cpp.

1308{
1309 auto orig_bufp = bufp;
1310 auto currency_symbol = "";
1311 const char* sign;
1312
1313 char cs_precedes;
1314 char sep_by_space;
1315 char sign_posn;
1316
1317 bool print_sign = true;
1318 bool print_absolute = false;
1319
1320 if (!bufp)
1321 return 0;
1322
1323 auto lc = gnc_localeconv();
1324 if (info.use_locale)
1325 if (gnc_numeric_negative_p (val))
1326 {
1327 cs_precedes = lc->n_cs_precedes;
1328 sep_by_space = lc->n_sep_by_space;
1329 }
1330 else
1331 {
1332 cs_precedes = lc->p_cs_precedes;
1333 sep_by_space = lc->p_sep_by_space;
1334 }
1335 else
1336 {
1337 cs_precedes = TRUE;
1338 sep_by_space = TRUE;
1339 }
1340
1341 if (info.commodity && info.use_symbol)
1342 {
1343 currency_symbol = gnc_commodity_get_nice_symbol (info.commodity);
1344 if (!gnc_commodity_is_iso (info.commodity))
1345 {
1346 cs_precedes = FALSE;
1347 sep_by_space = TRUE;
1348 }
1349 }
1350
1351 if (gnc_numeric_negative_p (val))
1352 {
1353 sign = lc->negative_sign;
1354 sign_posn = lc->n_sign_posn;
1355 }
1356 else
1357 {
1358 sign = lc->positive_sign;
1359 sign_posn = lc->p_sign_posn;
1360 }
1361
1362 if (gnc_numeric_zero_p (val) || (sign == nullptr) || (sign[0] == 0))
1363 print_sign = FALSE;
1364
1365 /* See if we print sign now */
1366 if (print_sign && (sign_posn == 1))
1367 bufp = g_stpcpy(bufp, sign);
1368
1369 /* Now see if we print currency */
1370 if (cs_precedes)
1371 {
1372 /* See if we print sign now */
1373 if (print_sign && (sign_posn == 3))
1374 bufp = g_stpcpy(bufp, sign);
1375
1376 if (info.use_symbol)
1377 {
1378 bufp = g_stpcpy(bufp, currency_symbol);
1379 if (sep_by_space)
1380 bufp = g_stpcpy(bufp, " ");
1381 }
1382
1383 /* See if we print sign now */
1384 if (print_sign && (sign_posn == 4))
1385 bufp = g_stpcpy(bufp, sign);
1386 }
1387
1388 /* Now see if we print parentheses */
1389 if (print_sign && (sign_posn == 0))
1390 {
1391 bufp = g_stpcpy(bufp, "(");
1392 print_absolute = TRUE;
1393 }
1394
1395 /* Now print the value */
1396 bufp += PrintAmountInternal(bufp,
1397 print_absolute ? gnc_numeric_abs(val) : val,
1398 &info);
1399
1400 /* Now see if we print parentheses */
1401 if (print_sign && (sign_posn == 0))
1402 bufp = g_stpcpy(bufp, ")");
1403
1404 /* Now see if we print currency */
1405 if (!cs_precedes)
1406 {
1407 /* See if we print sign now */
1408 if (print_sign && (sign_posn == 3))
1409 bufp = g_stpcpy(bufp, sign);
1410
1411 if (info.use_symbol)
1412 {
1413 if (sep_by_space)
1414 bufp = g_stpcpy(bufp, " ");
1415 bufp = g_stpcpy(bufp, currency_symbol);
1416 }
1417
1418 /* See if we print sign now */
1419 if (print_sign && (sign_posn == 4))
1420 bufp = g_stpcpy(bufp, sign);
1421 }
1422
1423 /* See if we print sign now */
1424 if (print_sign && (sign_posn == 2))
1425 bufp = g_stpcpy(bufp, sign);
1426
1427 /* return length of printed string */
1428 return (bufp - orig_bufp);
1429}
gnc_numeric gnc_numeric_abs(gnc_numeric a)
Returns a newly created gnc_numeric that is the absolute value of the given gnc_numeric value.
gboolean gnc_numeric_negative_p(gnc_numeric a)
Returns 1 if a < 0, otherwise returns 0.