Merge branch 'maint'

This commit is contained in:
John Ralls 2023-03-03 11:16:44 -08:00
commit c9f8137ca2
30 changed files with 279 additions and 222 deletions

View File

@ -168,8 +168,8 @@ gnc_ui_select_commodity_modal_full(gnc_commodity * orig_sel,
fullname ? fullname : "",
/* Translators: Replace here and later CUSIP by the name of your local
National Securities Identifying Number
like gb:SEDOL, de:WKN, ch:Valorennummer, fr:SICOVAM
See http://en.wikipedia.org/wiki/ISIN and
like gb:SEDOL, de:WKN, ch:Valorennummer, fr:SICOVAM ...
See https://en.wikipedia.org/wiki/ISIN and
https://en.wikipedia.org/wiki/National_numbering_agency for hints. */
cusip ? _("\nExchange code (ISIN, CUSIP or similar): ") : "",
cusip ? cusip : "",

View File

@ -602,7 +602,9 @@ static void
add_error (StringVec& errors, const char* format_str, const char* arg)
{
gchar *buf = g_strdup_printf (_(format_str),
g_dpgettext2 (nullptr, "Stock Assistant: Page name", arg));
g_strcmp0("Cash", arg) ?
_(arg) :
g_dpgettext2 (nullptr, "Stock Assistant", arg));
errors.emplace_back (buf);
g_free (buf);
}
@ -757,7 +759,9 @@ to ensure proper recording."), new_date_str, last_split_date_str);
else
check_page (line, debit, credit, info->txn_type->stock_value, info->acct,
info->stock_memo_edit, info->stock_value_edit, info->currency,
NC_ ("Stock Assistant: Page name", "stock value"), errors);
// Translators: Designates the page in the Stock Assistant for entering
// the currency value of a non-currency asset.
N_ ("Stock Value"), errors);
if (info->txn_type->stock_amount == FieldMask::DISABLED)
@ -827,7 +831,9 @@ to ensure proper recording."), new_date_str, last_split_date_str);
check_page (line, debit, credit, info->txn_type->cash_value,
gas_account (info->cash_account), info->cash_memo_edit,
info->cash_value, info->currency,
NC_ ("Stock Assistant: Page name", "cash"), errors);
// Translators: Designates a page in the stock assistant or inserts the value
// into the non-currency asset split of an investment transaction.
NC_ ("Stock Assistant", "Cash"), errors);
add_to_summary_table (list, line);
}
@ -838,7 +844,9 @@ to ensure proper recording."), new_date_str, last_split_date_str);
check_page (line, debit, credit, info->txn_type->fees_value,
capitalize_fees ? info->acct : gas_account (info->fees_account),
info->fees_memo_edit, info->fees_value, info->currency,
NC_ ("Stock Assistant: Page name", "fees"), errors);
// Translators: Designates a page in the stock assistant or inserts the value
// into the fees split of an investment transaction.
N_ ("Fees"), errors);
if (!line.value_is_zero)
add_to_summary_table (list, line);
}
@ -848,7 +856,9 @@ to ensure proper recording."), new_date_str, last_split_date_str);
check_page (line, debit, credit, info->txn_type->dividend_value,
gas_account (info->dividend_account),
info->dividend_memo_edit, info->dividend_value, info->currency,
NC_ ("Stock Assistant: Page name", "dividend"), errors);
// Translators: Designates a page in the stock assistant or inserts the value
// into the income split of an investment dividend transaction.
N_ ("Dividend"), errors);
add_to_summary_table (list, line);
}
@ -861,14 +871,16 @@ to ensure proper recording."), new_date_str, last_split_date_str);
check_page (line, debit, credit, info->txn_type->capgains_value,
gas_account (info->capgains_account),
info->capgains_memo_edit, info->capgains_value, info->currency,
NC_ ("Stock Assistant: Page name", "capital gains"), errors);
// Translators: Designates a page in the stock assistant or inserts the value
// into the capital gain/loss income split of an investment transaction.
N_ ("Capital Gain"), errors);
add_to_summary_table (list, line);
check_page (line, debit, credit,
info->txn_type->capgains_value ^ (FieldMask::ENABLED_CREDIT | FieldMask::ENABLED_DEBIT),
info->acct, info->capgains_memo_edit, info->capgains_value,
info->currency,
NC_ ("Stock Assistant: Page name", "capital gains"), errors);
N_ ("Capital Gain"), errors);
add_to_summary_table (list, line);
}
@ -1024,8 +1036,10 @@ create_split (Transaction *trans, const gchar *action, Account *account,
gnc_num_dbg_to_string (amount_numeric),
gnc_num_dbg_to_string (xaccSplitGetValue (split)),
gnc_num_dbg_to_string (xaccSplitGetAmount (split)));
gnc_set_num_action (nullptr, split,
nullptr, g_dpgettext2 (nullptr, "Stock Assistant: Action field", action));
auto action_str{ g_strcmp0(action, "Cash") ?
_(action) :
g_dpgettext2 (nullptr, "Stock Assistant: Action field", action)};
gnc_set_num_action (nullptr, split, nullptr, action_str);
}
static void
@ -1094,7 +1108,9 @@ stock_assistant_finish (GtkAssistant *assistant, gpointer user_data)
stock_value = gnc_numeric_neg (stock_value);
}
create_split (trans, NC_ ("Stock Assistant: Action field", "Stock"),
// Translators: Inserts the value into action field of the non-currency asset split of
// an investment transaction.
create_split (trans, N_ ("Stock"),
info->acct, account_commits, info->stock_memo_edit,
stock_amount, stock_value);
@ -1104,7 +1120,7 @@ stock_assistant_finish (GtkAssistant *assistant, gpointer user_data)
if (info->txn_type->cash_value & FieldMask::ENABLED_CREDIT)
cash = gnc_numeric_neg (cash);
create_split (trans, NC_ ("Stock Assistant: Action field", "Cash"),
create_split (trans, NC_ ("Stock Assistant:", "Cash"),
gas_account (info->cash_account), account_commits,
info->cash_memo_edit, cash, cash);
}
@ -1117,7 +1133,7 @@ stock_assistant_finish (GtkAssistant *assistant, gpointer user_data)
auto capitalize = gtk_toggle_button_get_active
(GTK_TOGGLE_BUTTON (info->capitalize_fees_checkbox));
create_split (trans, NC_ ("Stock Assistant: Action field", "Fees"),
create_split (trans, N_ ("Fees"),
capitalize ? info->acct : gas_account (info->fees_account),
account_commits, info->fees_memo_edit,
capitalize ? gnc_numeric_zero () : fees, fees);
@ -1130,7 +1146,7 @@ stock_assistant_finish (GtkAssistant *assistant, gpointer user_data)
if (info->txn_type->dividend_value & FieldMask::ENABLED_CREDIT)
dividend = gnc_numeric_neg (dividend);
create_split (trans, NC_ ("Stock Assistant: Action field", "Dividend"),
create_split (trans, N_ ("Dividend"),
gas_account (info->dividend_account), account_commits,
info->dividend_memo_edit, dividend, dividend);
}
@ -1138,12 +1154,12 @@ stock_assistant_finish (GtkAssistant *assistant, gpointer user_data)
if (info->txn_type->capgains_value != FieldMask::DISABLED)
{
auto capgains = gae_amount (info->capgains_value);
create_split (trans, NC_ ("Stock Assistant: Action field", "Capital Gain"),
create_split (trans, N_ ("Capital Gain"),
info->acct, account_commits, info->capgains_memo_edit,
gnc_numeric_zero (), capgains);
capgains = gnc_numeric_neg (capgains);
create_split (trans, NC_ ("Stock Assistant: Action field", "Capital Gain"),
create_split (trans, N_ ("Capital Gain"),
gas_account (info->capgains_account), account_commits,
info->capgains_memo_edit, capgains, capgains);
}

View File

@ -238,11 +238,16 @@ setup_location_dialog (GtkBuilder *builder, GtkWidget *button_loc, const gchar *
// update label and set entry text if required
if (uri)
{
gtk_label_set_text (location_label, _("Amend URL:"));
gtk_label_set_text (location_label, _("Amend the URL"));
gtk_entry_set_text (entry, uri);
}
else
gtk_label_set_text (location_label, _("Enter URL like http://www.gnucash.org:"));
{
gchar *enter_uri = g_strdup_printf (_("Enter an URL like \"%s\""),
PACKAGE_URL);
gtk_label_set_text (location_label, enter_uri);
g_free (enter_uri);
}
}
static void
@ -256,7 +261,7 @@ setup_file_dialog (GtkBuilder *builder, const gchar *path_head, const gchar *uri
GtkWidget *existing_hbox = GTK_WIDGET(gtk_builder_get_object (builder, "existing_hbox"));
GtkWidget *image = gtk_image_new_from_icon_name ("dialog-warning", GTK_ICON_SIZE_SMALL_TOOLBAR);
gchar *use_uri = gnc_doclink_get_use_uri (path_head, uri, scheme);
gchar *uri_label = g_strdup_printf ("%s '%s'", _("Existing Document Link is"), display_uri);
gchar *uri_label = g_strdup_printf ("%s \"%s\"", _("Existing Document Link is"), display_uri);
GtkWidget *label = gtk_label_new (uri_label);
if (g_file_test (display_uri, G_FILE_TEST_EXISTS))

View File

@ -1624,7 +1624,8 @@ static Split *select_payment_split (GtkWindow *parent, Transaction *txn)
GList *node;
GtkWidget *first_rb = NULL;
int answer = GTK_BUTTONS_OK;
const char *message = _("While this transaction has multiple splits that can be considered\nas 'the payment split', GnuCash only knows how to handle one.\n"
const char *message = _("While this transaction has multiple splits that can be considered\n"
"as 'the payment split', GnuCash only knows how to handle one.\n"
"Please select one, the others will be discarded.\n\n");
GtkDialog *dialog = GTK_DIALOG(
gtk_dialog_new_with_buttons (_("Warning"),

View File

@ -1956,17 +1956,15 @@ gnc_plugin_page_register_check_for_empty_group (GKeyFile *state_file,
}
static gchar*
gnc_plugin_page_register_get_filter_gcm (Account* leader)
gnc_plugin_page_register_get_filter_gcm (GNCSplitReg *gsr)
{
GKeyFile* state_file = gnc_state_get_current();
gchar* state_section;
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
GError* error = NULL;
char* filter = NULL;
// get the filter from the .gcm file
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL);
state_section = gsr_get_register_state_section (gsr);
filter = g_key_file_get_string (state_file, state_section,
KEY_PAGE_FILTER, &error);
@ -1984,7 +1982,6 @@ gnc_plugin_page_register_get_filter (GncPluginPage* plugin_page)
{
GncPluginPageRegisterPrivate* priv;
GNCLedgerDisplayType ledger_type;
Account* leader;
char* filter = NULL;
g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page),
@ -1993,10 +1990,9 @@ gnc_plugin_page_register_get_filter (GncPluginPage* plugin_page)
priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE (plugin_page);
ledger_type = gnc_ledger_display_type (priv->ledger);
leader = gnc_ledger_display_leader (priv->ledger);
// load from gcm file
filter = gnc_plugin_page_register_get_filter_gcm (leader);
filter = gnc_plugin_page_register_get_filter_gcm (priv->gsr);
if (filter)
return filter;
@ -2006,17 +2002,15 @@ gnc_plugin_page_register_get_filter (GncPluginPage* plugin_page)
}
static void
gnc_plugin_page_register_set_filter_gcm (Account* leader, const gchar* filter,
gnc_plugin_page_register_set_filter_gcm (GNCSplitReg *gsr, const gchar* filter,
gchar* default_filter)
{
GKeyFile* state_file = gnc_state_get_current();
gchar* state_section;
gchar* filter_text;
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
// save the filter to the .gcm file also
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL);
state_section = gsr_get_register_state_section (gsr);
if (!filter || (g_strcmp0 (filter, default_filter) == 0))
{
if (g_key_file_has_key (state_file, state_section, KEY_PAGE_FILTER, NULL))
@ -2041,37 +2035,33 @@ gnc_plugin_page_register_set_filter (GncPluginPage* plugin_page,
{
GncPluginPageRegisterPrivate* priv;
GNCLedgerDisplayType ledger_type;
Account* leader;
gchar* default_filter;
priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE (plugin_page);
ledger_type = gnc_ledger_display_type (priv->ledger);
leader = gnc_ledger_display_leader (priv->ledger);
default_filter = g_strdup_printf ("%s,%s,%s,%s", DEFAULT_FILTER,
"0", "0", get_filter_default_num_of_days (ledger_type));
// save to gcm file
gnc_plugin_page_register_set_filter_gcm (leader, filter, default_filter);
gnc_plugin_page_register_set_filter_gcm (priv->gsr, filter, default_filter);
g_free (default_filter);
return;
}
static gchar*
gnc_plugin_page_register_get_sort_order_gcm (Account* leader)
gnc_plugin_page_register_get_sort_order_gcm (GNCSplitReg *gsr)
{
GKeyFile* state_file = gnc_state_get_current();
gchar* state_section;
gchar* sort_text;
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
GError* error = NULL;
char* sort_order = NULL;
// get the sort_order from the .gcm file
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL);
state_section = gsr_get_register_state_section (gsr);
sort_text = g_key_file_get_string (state_file, state_section, KEY_PAGE_SORT,
&error);
@ -2090,7 +2080,6 @@ static gchar*
gnc_plugin_page_register_get_sort_order (GncPluginPage* plugin_page)
{
GncPluginPageRegisterPrivate* priv;
Account* leader;
char* sort_order = NULL;
g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page),
@ -2098,26 +2087,21 @@ gnc_plugin_page_register_get_sort_order (GncPluginPage* plugin_page)
priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE (plugin_page);
leader = gnc_ledger_display_leader (priv->ledger);
// load from gcm file
sort_order = gnc_plugin_page_register_get_sort_order_gcm (leader);
sort_order = gnc_plugin_page_register_get_sort_order_gcm (priv->gsr);
return sort_order ? sort_order : g_strdup (DEFAULT_SORT_ORDER);
}
static void
gnc_plugin_page_register_set_sort_order_gcm (Account* leader,
gnc_plugin_page_register_set_sort_order_gcm (GNCSplitReg *gsr,
const gchar* sort_order)
{
GKeyFile* state_file = gnc_state_get_current();
gchar* state_section;
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
// save sort_order to the .gcm file also
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL);
state_section = gsr_get_register_state_section (gsr);
if (!sort_order || (g_strcmp0 (sort_order, DEFAULT_SORT_ORDER) == 0))
{
if (g_key_file_has_key (state_file, state_section, KEY_PAGE_SORT, NULL))
@ -2135,28 +2119,23 @@ gnc_plugin_page_register_set_sort_order (GncPluginPage* plugin_page,
const gchar* sort_order)
{
GncPluginPageRegisterPrivate* priv;
Account* leader;
priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE (plugin_page);
leader = gnc_ledger_display_leader (priv->ledger);
// save to gcm file
gnc_plugin_page_register_set_sort_order_gcm (leader, sort_order);
gnc_plugin_page_register_set_sort_order_gcm (priv->gsr, sort_order);
}
static gboolean
gnc_plugin_page_register_get_sort_reversed_gcm (Account* leader)
gnc_plugin_page_register_get_sort_reversed_gcm (GNCSplitReg *gsr)
{
GKeyFile* state_file = gnc_state_get_current();
gchar* state_section;
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
GError* error = NULL;
gboolean sort_reversed = FALSE;
// get the sort_reversed from the .gcm file
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL);
state_section = gsr_get_register_state_section (gsr);
sort_reversed = g_key_file_get_boolean (state_file, state_section,
KEY_PAGE_SORT_REV, &error);
@ -2171,31 +2150,27 @@ static gboolean
gnc_plugin_page_register_get_sort_reversed (GncPluginPage* plugin_page)
{
GncPluginPageRegisterPrivate* priv;
Account* leader;
gboolean sort_reversed = FALSE;
g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), FALSE);
priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE (plugin_page);
leader = gnc_ledger_display_leader (priv->ledger);
// load from gcm file
sort_reversed = gnc_plugin_page_register_get_sort_reversed_gcm (leader);
sort_reversed = gnc_plugin_page_register_get_sort_reversed_gcm (priv->gsr);
return sort_reversed;
}
static void
gnc_plugin_page_register_set_sort_reversed_gcm (Account* leader,
gnc_plugin_page_register_set_sort_reversed_gcm (GNCSplitReg *gsr,
gboolean reverse_order)
{
GKeyFile* state_file = gnc_state_get_current();
gchar* state_section;
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
// save reverse_order to the .gcm file also
guid_to_string_buff (xaccAccountGetGUID (leader), acct_guid);
state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", acct_guid, NULL);
state_section = gsr_get_register_state_section (gsr);
if (!reverse_order)
{
if (g_key_file_has_key (state_file, state_section, KEY_PAGE_SORT_REV, NULL))
@ -2215,13 +2190,11 @@ gnc_plugin_page_register_set_sort_reversed (GncPluginPage* plugin_page,
gboolean reverse_order)
{
GncPluginPageRegisterPrivate* priv;
Account* leader;
priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE (plugin_page);
leader = gnc_ledger_display_leader (priv->ledger);
// save to gcm file
gnc_plugin_page_register_set_sort_reversed_gcm (leader, reverse_order);
gnc_plugin_page_register_set_sort_reversed_gcm (priv->gsr, reverse_order);
}
static gchar*
@ -5137,16 +5110,16 @@ gnc_plugin_page_register_get_gsr (GncPluginPage* plugin_page)
static void
gnc_plugin_page_help_changed_cb (GNCSplitReg* gsr,
GncPluginPageRegister* page)
GncPluginPageRegister* register_page)
{
GncPluginPageRegisterPrivate* priv;
SplitRegister* reg;
GncWindow* window;
char* help;
g_return_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (page));
g_return_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (register_page));
window = GNC_WINDOW (GNC_PLUGIN_PAGE (page)->window);
window = GNC_WINDOW (GNC_PLUGIN_PAGE (register_page)->window);
if (!window)
{
// This routine can be called before the page is added to a
@ -5155,15 +5128,15 @@ gnc_plugin_page_help_changed_cb (GNCSplitReg* gsr,
}
// only update status text if on current page
if (GNC_IS_MAIN_WINDOW(window) &&
(gnc_main_window_get_current_page (GNC_MAIN_WINDOW(window)) != GNC_PLUGIN_PAGE(page)))
if (GNC_IS_MAIN_WINDOW(window) && (gnc_main_window_get_current_page
(GNC_MAIN_WINDOW(window)) != GNC_PLUGIN_PAGE(register_page)))
return;
/* Get the text from the ledger */
priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE (page);
priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE (register_page);
reg = gnc_ledger_display_get_split_register (priv->ledger);
help = gnc_table_get_help (reg->table);
gnc_window_set_status (window, GNC_PLUGIN_PAGE (page), help);
gnc_window_set_status (window, GNC_PLUGIN_PAGE (register_page), help);
g_free (help);
}

View File

@ -453,22 +453,36 @@ gsr_move_sort_and_filter_to_state_file (GNCSplitReg *gsr, GKeyFile* state_file,
}
}
gchar *
gsr_get_register_state_section (GNCSplitReg *gsr)
{
GNCLedgerDisplayType ledger_type = gnc_ledger_display_type (gsr->ledger);
Account *account = gnc_ledger_display_leader (gsr->ledger);
const GncGUID *guid = xaccAccountGetGUID (account);
gchar guidstr[GUID_ENCODING_LENGTH+1];
gchar *register_state_section;
guid_to_string_buff (guid, guidstr);
if (ledger_type == LD_SUBACCOUNT)
register_state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", guidstr, "+", NULL);
else
register_state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", guidstr, NULL);
return register_state_section;
}
static
void
gsr_create_table( GNCSplitReg *gsr )
{
GtkWidget *register_widget = NULL;
SplitRegister *sr = NULL;
Account * account = gnc_ledger_display_leader(gsr->ledger);
const GncGUID * guid = xaccAccountGetGUID(account);
gchar guidstr[GUID_ENCODING_LENGTH+1];
GKeyFile* state_file = gnc_state_get_current();
gchar *register_state_section;
guid_to_string_buff (guid, guidstr);
register_state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", guidstr, NULL);
/* register_state_section is used to store per register state: column widths, sort order,... */
register_state_section = gsr_get_register_state_section (gsr);
ENTER("gsr=%p", gsr);
@ -785,29 +799,22 @@ static void
gnc_split_reg_ld_destroy( GNCLedgerDisplay *ledger )
{
GNCSplitReg *gsr = gnc_ledger_display_get_user_data( ledger );
Account * account = gnc_ledger_display_leader(ledger);
const GncGUID * guid = xaccAccountGetGUID(account);
gchar guidstr[GUID_ENCODING_LENGTH+1];
gchar *state_section;
guid_to_string_buff(guid, guidstr);
state_section = g_strconcat (STATE_SECTION_REG_PREFIX, " ", guidstr, NULL);
if (gsr)
{
SplitRegister *reg;
reg = gnc_ledger_display_get_split_register (ledger);
/* register_state_section is used to store per register state: column widths, sort order,... */
gchar *register_state_section = gsr_get_register_state_section (gsr);
SplitRegister *reg = gnc_ledger_display_get_split_register (ledger);
if (reg && reg->table)
gnc_table_save_state (reg->table, state_section);
gnc_table_save_state (reg->table, register_state_section);
/*
* Don't destroy the window here any more. The register no longer
* owns it.
*/
g_free (register_state_section);
}
g_free (state_section);
gnc_ledger_display_set_user_data (ledger, NULL);
g_object_unref (gsr);
@ -2143,11 +2150,14 @@ gnc_split_reg_set_sort_reversed(GNCSplitReg *gsr, gboolean rev, gboolean refresh
* In other words, qof_query_set_sort_increasing should
* always use the inverse of rev.
*/
SplitRegister *reg = gnc_ledger_display_get_split_register (gsr->ledger);
Query *query = gnc_ledger_display_get_query( gsr->ledger );
gnc_split_register_set_reverse_sort (reg, rev);
qof_query_set_sort_increasing (query, !rev, !rev, !rev);
gsr->sort_rev = rev;
Account *acct = gnc_ledger_display_leader (gsr->ledger);
xaccAccountSetSortReversed(acct, rev);
if (refresh)
gnc_ledger_display_refresh( gsr->ledger );
}

View File

@ -299,6 +299,14 @@ void gsr_default_reinit_handler( GNCSplitReg *gsr, gpointer data );
void gsr_default_expand_handler( GNCSplitReg *gsr, gpointer data );
void gsr_default_schedule_handler( GNCSplitReg *gsr, gpointer data );
/** Get the register state section
*
* @param gsr A pointer to GNCSplitReg
*
* @return The register state section, to be freed by caller
**/
gchar *gsr_get_register_state_section (GNCSplitReg *gsr);
void gnc_split_reg_set_moved_cb( GNCSplitReg *gsr, GFunc cb, gpointer cb_data );
#endif /* GNC_SPLIT_REG_H */

View File

@ -35,8 +35,7 @@ Danger: this feature does not work correctly at this time; it is still under dev
<object class="GtkLabel" id="menu_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">
Select an accounting period and the closing date which must not be in the future and is greater than the closing date of the previous book.
<property name="label" translatable="yes">Select an accounting period and the closing date which must not be in the future, but is greater than the closing date of the previous book.
Books will be closed at midnight on the selected date.</property>
<property name="justify">center</property>

View File

@ -63,9 +63,7 @@ Click on "Next" to proceed or "Cancel" to Abort Import.
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">
Enter file name and location for the Import…
</property>
<property name="label" translatable="yes">Enter file name and location for the Import…</property>
<property name="wrap">True</property>
</object>
<packing>

View File

@ -684,9 +684,7 @@ Select the type of Export required and the separator that will be used.
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">
Enter file name and location for the Export…
</property>
<property name="label" translatable="yes">Enter file name and location for the Export…</property>
<property name="wrap">True</property>
</object>
<packing>

View File

@ -41,8 +41,7 @@ Click 'Cancel' if you do not wish to create any new accounts now.</property>
<object class="GtkLabel" id="choose_currency_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">
Please choose the currency to use for new accounts.</property>
<property name="label" translatable="yes">Please choose the currency to use for new accounts.</property>
</object>
<packing>
<property name="expand">False</property>
@ -528,15 +527,13 @@ Please choose the currency to use for new accounts.</property>
<property name="can-focus">False</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="label" translatable="yes">
If you would like to change an account's name, click on the row containing the account, then click on the account name and change it.
<property name="label" translatable="yes">If you would like to change an account's name, click on the row containing the account, then click on the account name and change it.
Some accounts are marked as "Placeholder". Placeholder accounts are used to create a hierarchy of accounts and normally do not have transactions or opening balances. If you would like an account to be a placeholder account, click the checkbox for that account.
If you would like an account to have an opening balance, click on the row containing the account, then click on the opening balance field and enter the starting balance.
&lt;b&gt;Note:&lt;/b&gt; all accounts except Equity and placeholder accounts may have an opening balance.
</property>
&lt;b&gt;Note:&lt;/b&gt; all accounts except Equity and placeholder accounts may have an opening balance.</property>
<property name="use-markup">True</property>
<property name="wrap">True</property>
<property name="width-chars">75</property>

View File

@ -448,8 +448,7 @@ If you make a mistake or want to make changes later, you can edit the created Sc
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="margin-bottom">12</property>
<property name="label" translatable="yes">
Do you utilise an escrow account, if so an account must be specified…</property>
<property name="label" translatable="yes">Do you utilise an escrow account, if so an account must be specified…</property>
<property name="justify">center</property>
<property name="wrap">True</property>
</object>
@ -542,11 +541,12 @@ Do you utilise an escrow account, if so an account must be specified…</propert
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">
All accounts must have valid entries to continue.
</property>
<property name="label" translatable="yes">All accounts must have valid entries to continue.</property>
<property name="justify">center</property>
<property name="wrap">True</property>
<style>
<class name="gnc-class-highlight"/>
</style>
</object>
<packing>
<property name="expand">False</property>
@ -724,9 +724,7 @@ All accounts must have valid entries to continue.
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">
All enabled option pages must contain valid entries to continue.
</property>
<property name="label" translatable="yes">All enabled option pages must contain valid entries to continue.</property>
<property name="justify">center</property>
</object>
<packing>
@ -1080,8 +1078,7 @@ All enabled option pages must contain valid entries to continue.
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">
Review the details below and if correct press Apply to create the schedule.</property>
<property name="label" translatable="yes">Review the details below and if correct press "Apply"" to create the schedule.</property>
<property name="justify">center</property>
</object>
<packing>

View File

@ -1208,8 +1208,7 @@ If you don't see your exchange listed, or none of the available choices are appr
<object class="GtkLabel" id="label847694">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes" comments="Run the assistant in your language to see GTK's translation of the button labels.">
If you are importing a QIF file from a bank or other financial institution, some of the transactions may already exist in your GnuCash accounts. To avoid duplication, GnuCash has tried to identify matches and needs your help to review them.
<property name="label" translatable="yes" comments="Run the assistant in your language to see GTK's translation of the button labels.">If you are importing a QIF file from a bank or other financial institution, some of the transactions may already exist in your GnuCash accounts. To avoid duplication, GnuCash has tried to identify matches and needs your help to review them.
On the next page you will be shown a list of imported transactions. As you select each one, a list of possible matches will be shown below it. If you find a correct match, click on it. Your selection will be confirmed by a check mark in the "Match?" column.

View File

@ -97,9 +97,7 @@
<child>
<object class="GtkLabel" id="label2">
<property name="can-focus">False</property>
<property name="label" translatable="yes">
Currently you have no saved reports.
</property>
<property name="label" translatable="yes">Currently you have no saved reports.</property>
</object>
<packing>
<property name="expand">True</property>
@ -111,9 +109,11 @@ Currently you have no saved reports.
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Saved report configurations are created by first opening a report from the Reports menu,
altering the report's options to your taste and then choosing "Save Report Configuration" from
the Reports menu or tool bar.</property>
<property name="label" translatable="yes">Saved report configurations are created by
1. opening a report from the Reports menu,
2. altering the report's options to your taste,
3. selecting "Save Report Configuration [As…]" from the Reports menu
or pressing a "Save Config [As…]" button on the tool bar.</property>
</object>
<packing>
<property name="expand">False</property>

View File

@ -343,7 +343,7 @@
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">(None)</property>
<property name="label" translatable="yes">(none)</property>
</object>
<packing>
<property name="expand">True</property>
@ -406,7 +406,7 @@
<property name="halign">start</property>
<property name="margin-top">3</property>
<property name="margin-bottom">3</property>
<property name="label" translatable="yes">Enter URL like http://www.gnucash.org</property>
<property name="label" translatable="yes">Enter an URL like "https://www.gnucash.org"</property>
</object>
<packing>
<property name="expand">False</property>

View File

@ -423,7 +423,7 @@
<property name="receives-default">True</property>
<property name="halign">start</property>
<property name="relief">none</property>
<property name="uri">http://www.gnucash.org</property>
<property name="uri">https://www.gnucash.org</property>
</object>
<packing>
<property name="expand">False</property>

View File

@ -74,23 +74,23 @@ static QofLogModule log_module = G_LOG_DOMAIN; //G_LOG_BUSINESS;
static char * un_escape(char *str);
/** \brief Imports a csv file with invoice data into a GtkListStore.
Opens the csv file and attempts to match each row with the regular
expression provided in parser_regexp. This is a regular expression
that matches each field of the import row and the user selected field
separators (, or ;), optionally with the fields enclosed in quotes.
If the match is successful, the fields of the import row are transferred to
a row in the GtkListStore store. If the match is not successful, the
row is ignored. Maintains information about number of rows imported,
the number of rows ignored, and the actual ignored rows.
@param filename The csv filename to read
@param parser_regexp The regular expression with which to match the import rows
@param store To store the matched data
@param max_rows The maximum number of rows to import; use 0 for no maximum.
@param stats Return information about matched and non-matched rows. Use NULL if the information is not required.
*/
bi_import_result
@ -236,13 +236,13 @@ gnc_bi_import_read_file (const gchar * filename, const gchar * parser_regexp,
/** \brief Adjusts and validates invoice import data.
Replaces missing or invalid data with defaults:
- if quantity is not set, default to 1
- if date_opened is not set or invalid, default to today
- if date is not set or invalid, default to date_opened
- if due date is not set or invalid, default to date_posted
Validates the import data; any error causes all rows of the same invoice
to be deleted from the import data:
- id is not set, and there is no previous id
@ -252,17 +252,17 @@ gnc_bi_import_read_file (const gchar * filename, const gchar * parser_regexp,
- account posted is not the applicable type, A/P or A/R
- price is not set
- account does not exist
Adjustment and validation for header fields is only done for the first row of an invoice,
which is assumed to hold the header data for all items of the same invoice.
Currency related validation is done in subsqequent processing by gnc_bi_import_create_bis.
@param store Holds the rows of invoice import data
@param n_rows_fixed Increased for every data row that is adjusted in this function
@param n_rows_ignored Increased for every data row that is deleted in this function
@param info Updated with the error messages from this function
@param type The type of the import data, BILL or INVOICE
*/
void
@ -288,7 +288,7 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
*n_rows_fixed = 0;
*n_rows_ignored = 0;
// Init control variables
running_id = g_string_new("");
ignore_invoice = FALSE;
@ -313,10 +313,10 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
DUE_DATE, &due_date,
ACCOUNT_POSTED, &account_posted,
OWNER_ID, &owner_id, -1);
g_string_assign (running_id, id);
first_row_of_invoice = iter;
// Validate the invoice id.
if (strlen (id) == 0)
{
@ -360,7 +360,7 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
row, id, invoice_line, owner_id);
}
}
if (strlen(date_posted) != 0)
{
// Validate the date posted and due date.
@ -371,7 +371,7 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
g_string_append_printf (info,
_("Row %d, invoice %s/%u: %s is not a valid posting date.\n"),
row, id, invoice_line, date_posted);
// Verify the due date.
if (!isDateValid(due_date))
{
@ -392,7 +392,7 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
row_fixed = TRUE;
}
}
// Validate account posted.
// Account should exists, and should be of type A/R for invoices, A/P for bills.
acc = gnc_account_lookup_for_register
@ -408,7 +408,7 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
{
if (g_ascii_strcasecmp (type, "BILL") == 0)
{
if (xaccAccountGetType (acc) != ACCT_TYPE_PAYABLE)
{
ignore_invoice = TRUE;
@ -429,7 +429,7 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
}
}
}
// Verify the date opened.
if(!isDateValid(date_opened))
{
@ -444,9 +444,9 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
row_fixed = TRUE;
}
}
// Validate and fix item data for each row.
// Get item data.
gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
DATE, &date,
@ -454,7 +454,7 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
QUANTITY, &quantity,
PRICE, &price, -1);
// Validate the price.
if (strlen (price) == 0)
{
@ -475,11 +475,11 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
_("Row %d, invoice %s/%u: account %s does not exist.\n"),
row, id, invoice_line, account);
}
// Fix item data.
if (!ignore_invoice)
{
// Verify the quantity.
if (strlen (quantity) == 0)
{
@ -487,7 +487,7 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
gtk_list_store_set (store, &iter, QUANTITY, "1", -1);
row_fixed = TRUE;
}
// Verify the item date
if(!isDateValid(date))
{
@ -499,19 +499,19 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
}
if (row_fixed) ++fixed_for_invoice;
// Get the next row and its id.
valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter);
if (valid) gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, ID, &id, -1);
// If the id of the next row is blank, it takes the id of the previous row.
if (valid && strlen(id) == 0)
{
strcpy( id, running_id->str);
gtk_list_store_set (store, &iter, ID, id, -1);
}
// If this row was the last row of the invoice...
if (!valid || (valid && g_strcmp0 (id, running_id->str) != 0))
{
@ -526,7 +526,7 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
if (valid) gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, ID, &id, -1);
}
while (valid && (g_strcmp0 (id, running_id->str) == 0));
if (running_id->len != 0)
{
g_string_append_printf (info,
@ -538,18 +538,18 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
g_string_append_printf (info,
_("Error(s) in invoice without id, all rows of this invoice ignored.\n"));
}
// Fixes for ignored invoices don't count in the statistics.
fixed_for_invoice = 0;
ignore_invoice = FALSE;
}
on_first_row_of_invoice = TRUE;
(*n_rows_fixed) += fixed_for_invoice;
fixed_for_invoice = 0;
invoice_line = 0;
g_free (id);
g_free (date_opened);
g_free (date_posted);
@ -558,7 +558,7 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
g_free (owner_id);
}
else on_first_row_of_invoice = FALSE;
g_free (date);
g_free (account);
g_free (quantity);
@ -566,7 +566,7 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
row++;
}
// Deallocate strings.
g_string_free (running_id, TRUE);
@ -574,24 +574,24 @@ gnc_bi_import_fix_bis (GtkListStore * store, guint * n_rows_fixed, guint * n_row
/** \brief Creates and updates invoices from validated import data.
Loops through the import data to create and update invoices.
The first data row for an invoice is assumed to hold the header data.
If an invoice already exists, the user is asked, once per import,
to confirm that invoices should be updated.
If not confirmed, any rows for existing invoices are ignored.
If confirmed, entries are added to existing invoices.
Posted invoices, however, are never updated.
If the field date_posted is set, the system will
attempt to also post the invoice. The system will not
post the invoice if the entries of the invoice hold different currencies,
or if the currency of the invoice differs from the currency of the account_posted.
As per user selection, the system displays tabs for either all affected invoices,
all affected invoices not yet posted, or no invoices at all.
*/
void
@ -641,9 +641,9 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book,
update = NOT_ASKED;
on_first_row_of_invoice = TRUE;
running_id = g_string_new("");
g_string_append_printf (info, _("\nProcessing…\n") );
g_string_append_printf (info, "\n%s\n", _("Processing…") );
valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
while (valid)
{
@ -671,12 +671,12 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book,
TAXABLE, &taxable,
TAXINCLUDED, &taxincluded,
TAX_TABLE, &tax_table, -1);
if (on_first_row_of_invoice)
{
g_string_assign(running_id, id);
first_row_of_invoice = iter;
if (g_ascii_strcasecmp (type, "BILL") == 0)
invoice = gnc_search_bill_on_id (book, id);
else if (g_ascii_strcasecmp (type, "INVOICE") == 0)
@ -712,7 +712,7 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book,
//if (g_ascii_strcasecmp(type,"INVOICE"))gncInvoiceSetBillTo( invoice, billto );
(*n_invoices_created)++;
g_string_append_printf (info, _("Invoice %s created.\n"),id);
gncInvoiceCommitEdit (invoice);
}
else // Dealing with an existing invoice.
@ -730,7 +730,7 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book,
update = gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
if (update == NO)
{
// If the user does not want to update existing invoices, ignore all rows of the invoice.
@ -745,7 +745,7 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book,
on_first_row_of_invoice = TRUE;
continue;
}
if (gncInvoiceIsPosted (invoice))
{
// If the invoice is already posted, ignore all rows of the invoice.
@ -782,7 +782,7 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book,
notes = un_escape(notes);
gncEntrySetDescription (entry, desc);
gncEntrySetAction (entry, action);
value = gnc_numeric_zero();
value = gnc_numeric_zero();
gnc_exp_parser_parse (quantity, &value, NULL);
gncEntrySetQuantity (entry, value);
acc = gnc_account_lookup_for_register (gnc_get_current_root_account (),
@ -819,12 +819,12 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book,
gncEntryCommitEdit(entry);
valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter);
// handle auto posting of invoices
if (valid)
gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, ID, &id, -1);
else
id = NULL;
if (g_strcmp0 (id, running_id->str) == 0) // The next row is for the same invoice.
{
on_first_row_of_invoice = FALSE;
@ -897,7 +897,7 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book,
{
PWARN("Invoice %s is NOT marked for posting",id);
}
// open new bill / invoice in a tab, if requested
if (g_ascii_strcasecmp(open_mode, "ALL") == 0
|| (g_ascii_strcasecmp(open_mode, "NOT_POSTED") == 0
@ -906,15 +906,15 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book,
iw = gnc_ui_invoice_edit (parent, invoice);
gnc_plugin_page_invoice_new (iw);
}
// The next row will be for a new invoice.
on_first_row_of_invoice = TRUE;
}
}
if (*n_invoices_updated + *n_invoices_created == 0)
g_string_append_printf (info, _("Nothing to process.\n"));
// cleanup
g_free (id);
g_free (date_opened);
@ -938,7 +938,7 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book,
g_free (account_posted);
g_free (memo_posted);
g_free (accumulatesplits);
g_string_free (running_id, TRUE);
}

View File

@ -169,7 +169,9 @@
(list "oth s" GNC-ASSET-TYPE GNC-BANK-TYPE GNC-CASH-TYPE)
(list "mutual" GNC-BANK-TYPE)))
(or (assoc-ref string-map-alist (string-downcase! (string-trim-both read-value)))
(let ((msg (format #f (G_ "Unrecognized account type '~s'. Defaulting to Bank.")
;; Translators: Mapping the QIF account type to a GnuCash account type.
;; see https://en.wikipedia.org/wiki/Quicken_Interchange_Format#Detail_items
(let ((msg (format #f (G_ "The account type ~s is unknown, using 'bank' instead.")
read-value)))
(errorproc errortype msg)
(list GNC-BANK-TYPE))))
@ -232,6 +234,7 @@
(and read-value
(let ((sym (string->symbol (string-downcase (string-trim-both read-value)))))
(or (any (lambda (lst) (and (memq sym lst) (car lst))) action-map)
;; Translators: This is an error message about actions like buy, sell …
(let ((msg (format #f (G_ "Unrecognized action '~a'.") read-value)))
(errorproc errortype msg))))))
@ -251,7 +254,8 @@
(not (string-null? read-value))
(let* ((secondchar (string-ref read-value 0)))
(or (any (lambda (m) (and (memq secondchar (cdr m)) (car m))) maplist)
(let ((msg (format #f (G_ "Unrecognized status '~a'. Defaulting to uncleared.")
;; Translators: Error message about reconciliation status, see msgctxt "Reconciled flag …"
(let ((msg (format #f (G_ "The unknown reconciliation status '~a' will be replaced by 'uncleared'.")
read-value)))
(errorproc errortype msg))))))

View File

@ -374,7 +374,6 @@ gnc_split_register_load (SplitRegister* reg, GList* slist,
gboolean need_divider_upper = FALSE;
gboolean found_divider_upper = FALSE;
gboolean found_divider = FALSE;
bool reverse_sort = xaccAccountGetSortReversed(default_account);
gboolean has_last_num = FALSE;
gboolean multi_line;
gboolean dynamic;
@ -612,8 +611,8 @@ gnc_split_register_load (SplitRegister* reg, GList* slist,
use_autoreadonly &&
!found_divider_upper)
{
if (((reverse_sort && xaccTransGetDate(trans) < autoreadonly_time) ||
(!reverse_sort && xaccTransGetDate (trans) >= autoreadonly_time)))
if (((table->model->reverse_sort && xaccTransGetDate(trans) < autoreadonly_time) ||
(!table->model->reverse_sort && xaccTransGetDate (trans) >= autoreadonly_time)))
{
table->model->dividing_row_upper = vcell_loc.virt_row;
found_divider_upper = TRUE;
@ -625,8 +624,8 @@ gnc_split_register_load (SplitRegister* reg, GList* slist,
}
if (info->show_present_divider && !found_divider &&
((reverse_sort && xaccTransGetDate(trans) < present) ||
(!reverse_sort && xaccTransGetDate (trans) > present)))
((table->model->reverse_sort && xaccTransGetDate (trans) < present) ||
(!table->model->reverse_sort && xaccTransGetDate (trans) > present)))
{
table->model->dividing_row = vcell_loc.virt_row;
found_divider = TRUE;
@ -647,6 +646,9 @@ gnc_split_register_load (SplitRegister* reg, GList* slist,
save_loc.phys_col_offset = 0;
}
// used in the setting the rows insensitive
table->model->blank_trans_row = vcell_loc.virt_row;
gnc_split_register_add_transaction (reg,
blank_trans, blank_split,
lead_cursor, split_cursor,
@ -733,6 +735,9 @@ gnc_split_register_load (SplitRegister* reg, GList* slist,
save_loc.phys_col_offset = 0;
}
// used in the setting the rows insensitive
table->model->blank_trans_row = vcell_loc.virt_row;
gnc_split_register_add_transaction (reg, blank_trans, blank_split,
lead_cursor, split_cursor,
multi_line, start_primary_color,

View File

@ -2951,6 +2951,13 @@ gnc_split_register_config (SplitRegister* reg,
gnc_table_realize_gui (reg->table);
}
void
gnc_split_register_set_reverse_sort (SplitRegister* reg, gboolean reverse_sort)
{
g_return_if_fail (reg);
gnc_table_model_set_reverse_sort (reg->table->model, reverse_sort);
}
void
gnc_split_register_set_auto_complete (SplitRegister* reg,
gboolean do_auto_complete)

View File

@ -323,6 +323,15 @@ void gnc_split_register_config (SplitRegister* reg,
SplitRegisterStyle style,
gboolean use_double_line);
/** Sets a split register's reverse sort order based on register
*
* @param reg a ::SplitRegister
*
* @param reverse_sort @c TRUE reverse sort order, @c FALSE default
*/
void gnc_split_register_set_reverse_sort (SplitRegister* reg,
gboolean reverse_sort);
/** Sets whether a register uses auto-completion.
*
* @param reg a ::SplitRegister

View File

@ -145,6 +145,8 @@ gnc_table_model_new (void)
model->dividing_row = -1;
model->dividing_row_lower = -1;
model->blank_trans_row = -1;
return model;
}
@ -199,6 +201,14 @@ gnc_table_model_read_only (TableModel *model)
return model->read_only;
}
void
gnc_table_model_set_reverse_sort (TableModel *model,
gboolean reverse_sort)
{
g_return_if_fail (model);
model->reverse_sort = reverse_sort;
}
void
gnc_table_model_set_entry_handler (TableModel *model,
TableGetEntryHandler entry_handler,

View File

@ -122,6 +122,10 @@ typedef struct
* and edits should not be allowed. */
gboolean read_only;
/* If true, denotes that this table is being displayed
* in the reverse direction. */
gboolean reverse_sort;
/* If positive, denotes a row that marks a boundary that should
* be visually distinguished. */
int dividing_row;
@ -132,6 +136,9 @@ typedef struct
* be visually distinguished. */
int dividing_row_lower;
/* If positive, denotes the row position of the blank trans */
int blank_trans_row;
VirtCellDataAllocator cell_data_allocator;
VirtCellDataDeallocator cell_data_deallocator;
VirtCellDataCopy cell_data_copy;
@ -145,6 +152,9 @@ void gnc_table_model_set_read_only (TableModel *model,
gboolean read_only);
gboolean gnc_table_model_read_only (TableModel *model);
void gnc_table_model_set_reverse_sort (TableModel *model,
gboolean read_only);
void gnc_table_model_set_entry_handler
(TableModel *model,
TableGetEntryHandler entry_handler,

View File

@ -350,6 +350,13 @@ draw_divider_line (cairo_t *cr, VirtualLocation virt_loc,
cairo_stroke (cr);
}
static void
set_cell_insensitive (GtkStyleContext *stylectxt)
{
if (!gtk_style_context_has_class (stylectxt, GTK_STYLE_CLASS_BACKGROUND))
gtk_style_context_set_state (stylectxt, GTK_STATE_FLAG_INSENSITIVE);
}
static void
draw_cell (GnucashSheet *sheet, SheetBlock *block,
VirtualLocation virt_loc, cairo_t *cr,
@ -385,10 +392,7 @@ draw_cell (GnucashSheet *sheet, SheetBlock *block,
gnucash_get_style_classes (sheet, stylectxt, color_type, use_neg_class);
if (sheet->read_only)
{
if (!gtk_style_context_has_class (stylectxt, GTK_STYLE_CLASS_BACKGROUND))
gtk_style_context_set_state (stylectxt, GTK_STATE_FLAG_INSENSITIVE);
}
set_cell_insensitive (stylectxt);
else
{
if (gtk_style_context_has_class (stylectxt, GTK_STYLE_CLASS_BACKGROUND))
@ -397,11 +401,27 @@ draw_cell (GnucashSheet *sheet, SheetBlock *block,
// Are we in a read-only row? Then make the background color somewhat more grey.
if ((virt_loc.phys_row_offset < block->style->nrows)
&& (table->model->dividing_row_upper >= 0)
&& (virt_loc.vcell_loc.virt_row < table->model->dividing_row_upper))
&& (table->model->dividing_row_upper >= 0))
{
if (!gtk_style_context_has_class (stylectxt, GTK_STYLE_CLASS_BACKGROUND))
gtk_style_context_set_state (stylectxt, GTK_STATE_FLAG_INSENSITIVE);
if (table->model->reverse_sort)
{
if ((table->model->blank_trans_row < table->model->dividing_row_upper)
&& (virt_loc.vcell_loc.virt_row >= table->model->dividing_row_upper))
{
set_cell_insensitive (stylectxt); // future trans after blank
}
if ((virt_loc.vcell_loc.virt_row >= table->model->dividing_row_upper)
&& (virt_loc.vcell_loc.virt_row < table->model->blank_trans_row))
{
set_cell_insensitive (stylectxt);
}
}
else // normal order
{
if (virt_loc.vcell_loc.virt_row < table->model->dividing_row_upper)
set_cell_insensitive (stylectxt);
}
}
gtk_render_background (stylectxt, cr, x, y, width, height);

View File

@ -37,7 +37,7 @@
<attribute name="hidden-when">action-disabled</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Pa_ge Setup</attribute>
<attribute name="label" translatable="yes">Pa_ge Setup</attribute>
<attribute name="action">mainwin.FilePageSetupAction</attribute>
<attribute name="accel">&lt;Primary&gt;&lt;Shift&gt;p</attribute>
<attribute name="tooltip" translatable="yes">Specify the page size and orientation for printing</attribute>

View File

@ -116,7 +116,7 @@
<attribute name="tooltip" translatable="yes">Use the loan/mortgage repayment calculator</attribute>
</item>
<item>
<attribute name="label" translatable="yes">_Close Book</attribute>
<attribute name="label" translatable="yes">_Close Book</attribute>
<attribute name="action">gnc-plugin-basic-commands-actions.ToolsBookCloseAction</attribute>
<attribute name="tooltip" translatable="yes">Close the Book at the end of the Period</attribute>
</item>

View File

@ -3,7 +3,7 @@
<menu id="FilePlaceholder3">
<item>
<attribute name="label" translatable="yes">_Print Report</attribute>
<attribute name="label" translatable="yes">_Print Report</attribute>
<attribute name="action">GncPluginPageReportActions.FilePrintAction</attribute>
<attribute name="accel">&lt;Primary&gt;p</attribute>
<attribute name="tooltip" translatable="yes">Print the current report</attribute>
@ -31,7 +31,7 @@
<menu id="FilePlaceholder5">
<item>
<attribute name="label" translatable="yes">Export _Report</attribute>
<attribute name="label" translatable="yes">Export _Report</attribute>
<attribute name="action">GncPluginPageReportActions.ReportExportAction</attribute>
<attribute name="tooltip" translatable="yes">Export HTML-formatted report to file</attribute>
<attribute name="temp" translatable="no">yes</attribute>

View File

@ -1,4 +1,2 @@
# These are files that we don't want to translate, because they are
# in experimental status.
gnucash/gnome/assistant-stock-transaction.cpp
gnucash/gtkbuilder/assistant-stock-transaction.glade

View File

@ -57,6 +57,7 @@ gnucash/gnome/assistant-acct-period.c
gnucash/gnome/assistant-hierarchy.cpp
gnucash/gnome/assistant-loan.cpp
gnucash/gnome/assistant-stock-split.c
gnucash/gnome/assistant-stock-transaction.cpp
gnucash/gnome/business-gnome-utils.c
gnucash/gnome/business-options-gnome.cpp
gnucash/gnome/business-urls.c
@ -240,6 +241,7 @@ gnucash/gtkbuilder/assistant-hierarchy.glade
gnucash/gtkbuilder/assistant-loan.glade
gnucash/gtkbuilder/assistant-qif-import.glade
gnucash/gtkbuilder/assistant-stock-split.glade
gnucash/gtkbuilder/assistant-stock-transaction.glade
gnucash/gtkbuilder/assistant-xml-encoding.glade
gnucash/gtkbuilder/business-options-gnome.glade
gnucash/gtkbuilder/business-prefs.glade

View File

@ -14,7 +14,7 @@ msgstr ""
"Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug."
"cgi?product=GnuCash&component=Translations\n"
"POT-Creation-Date: 2022-12-04 19:47-0800\n"
"PO-Revision-Date: 2023-02-26 20:44+0000\n"
"PO-Revision-Date: 2023-02-27 18:39+0000\n"
"Last-Translator: mocsa <csaba@feltoltve.hu>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/gnucash/"
"program-beta/hu/>\n"
@ -1923,10 +1923,8 @@ msgid "Business Document Links"
msgstr "<b>Új tranzakció-információ</b>"
#: gnucash/gnome/dialog-employee.c:201
#, fuzzy
#| msgid "You must enter a payment address."
msgid "You must enter a Payment-Address Name."
msgstr "Meg kell adni egy teljesítési címet."
msgstr ""
#: gnucash/gnome/dialog-employee.c:296
msgid "Edit Employee"
@ -2053,10 +2051,9 @@ msgstr "A_dóvonatkozású"
#. Translators: %s is a full account name.
#. This is a label in Search Account from context menu.
#: gnucash/gnome/dialog-find-account.c:491
#, fuzzy, c-format
#| msgid "Accounts in '%s'"
#, c-format
msgid "Su_b-accounts of '%s'"
msgstr "<b>Számlák '%s'-ban</b>"
msgstr ""
#: gnucash/gnome/dialog-find-transactions2.c:107
#: gnucash/gnome/dialog-find-transactions.c:105
@ -2778,10 +2775,8 @@ msgid "You must choose an owner for this job."
msgstr "Ki kell választani egy jelöltet a megbízásra."
#: gnucash/gnome/dialog-job.c:154
#, fuzzy
#| msgid "Credit must be a positive amount or you must leave it blank."
msgid "The rate amount must be valid or you must leave it blank."
msgstr "A terhelés pozitív összeg lehet, vagy üresen kell hagyni."
msgstr "Az árfolyamnak érvényes árnak vagy üresnek kell lennie."
#: gnucash/gnome/dialog-job.c:255
msgid "Edit Job"
@ -2836,8 +2831,6 @@ msgid "Empty"
msgstr "Névtér"
#: gnucash/gnome/dialog-lot-viewer.c:829
#, fuzzy
#| msgid "Open"
msgctxt "Adjective"
msgid "Open"
msgstr "Megnyitás"
@ -3080,10 +3073,10 @@ msgstr ""
#. Translators: %d is the number of prices. This is a ngettext(3) message.
#: gnucash/gnome/dialog-price-edit-db.c:204
#, fuzzy, c-format
#, c-format
msgid "Are you sure you want to delete the selected price?"
msgid_plural "Are you sure you want to delete the %d selected prices?"
msgstr[0] "Biztosan törölni kívánja a %d kiválasztott árat?"
msgstr[0] "Biztosan törölni kívánja a %d db kiválasztott árat?"
#: gnucash/gnome/dialog-price-edit-db.c:212
msgid "Delete prices?"
@ -3796,10 +3789,8 @@ msgid "View and Delete Bayesian and non-Bayesian information"
msgstr "Bayes-féle és nem Bayes-féle információk megtekintése és törlése"
#: gnucash/gnome/gnc-plugin-basic-commands.c:217
#, fuzzy
#| msgid "Transaction amount"
msgid "_Transaction Linked Documents"
msgstr "Tranzakció összeg"
msgstr ""
#: gnucash/gnome/gnc-plugin-basic-commands.c:218
#, fuzzy