GnuCash  5.6-150-g038405b370+
Files | Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
Main Window functions.

Files

file  gnc-main-window.h
 Functions for adding content to a window.
 

Data Structures

struct  GncMainWindow
 The instance data structure for a main window object. More...
 
struct  GncMainWindowPrivate
 The instance private data structure for an embedded window object. More...
 
struct  GncMainWindowSaveData
 
struct  menu_update
 This data structure is used to describe the requested state of a GAction, and is used to pass data among several functions. More...
 
struct  TabWidth
 This data structure allows the passing of the tab width and whether the tab layout is on the left or right. More...
 
struct  GncMenuUpdate
 
struct  GncMainWindowClass
 The class data structure for a main window object. More...
 
struct  GncMainWindowActionData
 
struct  GncToolBarShortNames
 A structure for defining alternate action names for use in the toolbar. More...
 

Macros

#define PLUGIN_PAGE_LABEL   "plugin-page"
 This label is used to provide a mapping from a visible page widget back to the corresponding GncPluginPage object. More...
 
#define PLUGIN_PAGE_CLOSE_BUTTON   "close-button"
 
#define PLUGIN_PAGE_TAB_LABEL   "label"
 
#define GNC_PREF_SHOW_CLOSE_BUTTON   "tab-close-buttons"
 
#define GNC_PREF_TAB_NEXT_RECENT   "tab-next-recent"
 
#define GNC_PREF_TAB_POSITION_TOP   "tab-position-top"
 
#define GNC_PREF_TAB_POSITION_BOTTOM   "tab-position-bottom"
 
#define GNC_PREF_TAB_POSITION_LEFT   "tab-position-left"
 
#define GNC_PREF_TAB_POSITION_RIGHT   "tab-position-right"
 
#define GNC_PREF_TAB_WIDTH   "tab-width"
 
#define GNC_PREF_TAB_COLOR   "show-account-color-tabs"
 
#define GNC_PREF_SAVE_CLOSE_EXPIRES   "save-on-close-expires"
 
#define GNC_PREF_SAVE_CLOSE_WAIT_TIME   "save-on-close-wait-time"
 
#define GNC_PREF_TAB_OPEN_ADJACENT   "tab-open-adjacent"
 
#define GNC_MAIN_WINDOW_NAME   "GncMainWindow"
 
#define DIALOG_BOOK_OPTIONS_CM_CLASS   "dialog-book-options"
 
#define MSG_AUTO_SAVE   _("Changes will be saved automatically in %u seconds")
 
#define WINDOW_COUNT   "WindowCount"
 
#define WINDOW_STRING   "Window %d"
 
#define WINDOW_GEOMETRY   "WindowGeometry"
 
#define WINDOW_POSITION   "WindowPosition"
 
#define WINDOW_MAXIMIZED   "WindowMaximized"
 
#define TOOLBAR_VISIBLE   "ToolbarVisible"
 
#define STATUSBAR_VISIBLE   "StatusbarVisible"
 
#define SUMMARYBAR_VISIBLE   "SummarybarVisible"
 
#define WINDOW_FIRSTPAGE   "FirstPage"
 
#define WINDOW_PAGECOUNT   "PageCount"
 
#define WINDOW_PAGEORDER   "PageOrder"
 
#define PAGE_TYPE   "PageType"
 
#define PAGE_NAME   "PageName"
 
#define PAGE_STRING   "Page %d"
 
#define DEFAULT_MARGIN   5
 
#define GNC_TYPE_MAIN_WINDOW   (gnc_main_window_get_type ())
 
#define GNC_MAIN_WINDOW(obj)   (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNC_TYPE_MAIN_WINDOW, GncMainWindow))
 
#define GNC_MAIN_WINDOW_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST ((klass), GNC_TYPE_MAIN_WINDOW, GncMainWindowClass))
 
#define GNC_IS_MAIN_WINDOW(obj)   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GNC_TYPE_MAIN_WINDOW))
 
#define GNC_IS_MAIN_WINDOW_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GNC_TYPE_MAIN_WINDOW))
 
#define GNC_MAIN_WINDOW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GNC_TYPE_MAIN_WINDOW, GncMainWindowClass))
 
#define PLUGIN_PAGE_IMMUTABLE   "page-immutable"
 

Typedefs

typedef void(* GncMainWindowFunc) (GncMainWindow *window, GncPluginPage *page)
 
typedef void(* GncMainWindowPageFunc) (GncPluginPage *page, gpointer user_data)
 

Enumerations

enum  { PAGE_ADDED, PAGE_CHANGED, MENU_CHANGED, LAST_SIGNAL }
 Names of signals generated by the main window. More...
 

Functions

gboolean gnc_book_options_dialog_apply_helper (GncOptionDB *options)
 Processes selected options in the Book Options dialog: checks book_currency and use_split_action_for_num to see if features kvp should be set. More...
 
 G_DEFINE_TYPE_WITH_CODE (GncMainWindow, gnc_main_window, GTK_TYPE_APPLICATION_WINDOW, G_IMPLEMENT_INTERFACE(GNC_TYPE_WINDOW, gnc_window_main_window_init)) static guint main_window_signals[LAST_SIGNAL]
 A holding place for all the signals generated by the main window code. More...
 
gboolean gnc_main_window_is_restoring_pages (GncMainWindow *window)
 Check if the main window is restoring the plugin pages. More...
 
void gnc_main_window_foreach_page (GncMainWindowPageFunc fn, gpointer user_data)
 Iterator function to walk all pages in all windows, calling the specified function for each page. More...
 
void gnc_main_window_restore_all_windows (const GKeyFile *keyfile)
 Restore the persistent state of all windows. More...
 
void gnc_main_window_restore_default_state (GncMainWindow *window)
 Restore the persistent state of one window to a sane default.
 
void gnc_main_window_save_all_windows (GKeyFile *keyfile)
 Save the persistent state of all windows. More...
 
gboolean gnc_main_window_finish_pending (GncMainWindow *window)
 Tell a window to finish any outstanding activities. More...
 
gboolean gnc_main_window_all_finish_pending (void)
 Tell all pages in all windows to finish any outstanding activities. More...
 
gboolean gnc_main_window_is_quitting (GncMainWindow *window)
 Check if the main window is quitting. More...
 
void main_window_update_page_long_name (GncPluginPage *page, const gchar *long_name_in)
 Update the long name of the page in the main window. More...
 
void main_window_update_page_name (GncPluginPage *page, const gchar *name_in)
 Update the name of the page in the main window. More...
 
void main_window_update_page_color (GncPluginPage *page, const gchar *color_in)
 Update the color on the page tabs in the main window. More...
 
void main_window_update_page_set_read_only_icon (GncPluginPage *page, gboolean read_only)
 Update the icon on the page tabs in the main window. More...
 
GncMainWindow * gnc_main_window_new (void)
 Create a new gnc main window plugin. More...
 
void gnc_main_window_display_page (GncPluginPage *page)
 Bring the window containing the specified page to the top of the window stack, then switch the notebook to show the specified page. More...
 
void gnc_main_window_open_page (GncMainWindow *window, GncPluginPage *page)
 Display a data plugin page in a window. More...
 
void gnc_main_window_close_page (GncPluginPage *page)
 Remove a data plugin page from a window and display the previous page. More...
 
GncPluginPagegnc_main_window_get_current_page (GncMainWindow *window)
 Retrieve a pointer to the page that is currently at the front of the specified window. More...
 
void gnc_main_window_manual_merge_actions (GncMainWindow *window, const gchar *group_name, GSimpleActionGroup *group)
 Manually add a set of actions to the specified window. More...
 
void gnc_main_window_merge_actions (GncMainWindow *window, const gchar *group_name, GActionEntry *entries, guint n_entries, const gchar **ui_updates, const gchar *ui_filename, gpointer user_data)
 Add a set of actions to the specified window. More...
 
void gnc_main_window_unmerge_actions (GncMainWindow *window, const gchar *group_name)
 Remove a set of actions from the specified window. More...
 
GAction * gnc_main_window_find_action (GncMainWindow *window, const gchar *action_name)
 Find the GAction in the main window. More...
 
GAction * gnc_main_window_find_action_in_group (GncMainWindow *window, const gchar *group_name, const gchar *action_name)
 Find the GAction in a specific action group for window. More...
 
GSimpleActionGroup * gnc_main_window_get_action_group (GncMainWindow *window, const gchar *group_name)
 Retrieve a specific set of user interface actions from a window. More...
 
GtkWidget * gnc_main_window_toolbar_find_tool_item (GncMainWindow *window, const gchar *action_name)
 Find the toolbar item with the given action name for the window specified. More...
 
GtkWidget * gnc_main_window_menu_find_menu_item (GncMainWindow *window, const gchar *action_name)
 Find the menu item with the given action name for the window specified. More...
 
void gnc_main_window_menu_add_accelerator_keys (GncMainWindow *window)
 Scan the main window menu and add accelerator keys to main window accelerator group. More...
 
gboolean gnc_main_window_update_menu_for_action (GncMainWindow *window, const gchar *action_name, const gchar *label, const gchar *tooltip)
 Find the GMenuModel item given the action name for the window specified. More...
 
void gnc_main_window_set_vis_of_items_by_action (GncMainWindow *window, const gchar **action_names, gboolean vis)
 Show or hide menu and toolbar items based on a NULL terminated list of action names. More...
 
void gnc_main_window_init_short_names (GncMainWindow *window, GncToolBarShortNames *toolbar_labels)
 Update the labels of the toolbar items with short names. More...
 
void gnc_main_window_update_menu_and_toolbar (GncMainWindow *window, GncPluginPage *page, const gchar **ui_updates)
 Update the main window menu with the placeholders listed in ui_updates and load the page specific toolbar. More...
 
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.
 
GtkWidget * gnc_book_options_dialog_cb (gboolean modal, gchar *title, GtkWindow *parent)
 Opens the Book Options dialog. More...
 
void gnc_main_window_show_all_windows (void)
 Shows all main windows.
 
GtkWindow * gnc_ui_get_gtk_window (GtkWidget *widget)
 Get a pointer to the widget's immediate top level GtkWindow. More...
 
GtkWindow * gnc_ui_get_main_window (GtkWidget *widget)
 Get a pointer to the final GncMainWindow widget is rooted in. More...
 
void gnc_main_window_set_progressbar_window (GncMainWindow *window)
 Set the window where all progressbar updates should occur. More...
 
gboolean gnc_main_window_popup_menu_cb (GtkWidget *widget, GncPluginPage *page)
 Callback function invoked when the user requests that Gnucash popup the contextual menu via the keyboard context-menu request key combination (Shift-F10 by default). More...
 
gboolean gnc_main_window_button_press_cb (GtkWidget *whatever, GdkEventButton *event, GncPluginPage *page)
 Callback function invoked when the user clicks in the content of any Gnucash window. More...
 
void gnc_main_window_all_action_set_sensitive (const gchar *action_name, gboolean sensitive)
 Change the sensitivity of a command in all windows. More...
 
GMenuModel * gnc_main_window_get_menu_model (GncMainWindow *window)
 Return the GMenuModel for the main window menu bar. More...
 
gboolean gnc_main_window_just_plugin_prefs (GncMainWindow *window)
 
GType gnc_main_window_get_type (void)
 Get the type of a gnc main window. More...
 

Variables

constexpr auto gnc_main_window_max_number {10}
 Max number of windows allowed.
 

Detailed Description

Macro Definition Documentation

◆ PLUGIN_PAGE_LABEL

#define PLUGIN_PAGE_LABEL   "plugin-page"

This label is used to provide a mapping from a visible page widget back to the corresponding GncPluginPage object.

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

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Names of signals generated by the main window.

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

92 {
93  PAGE_ADDED,
94  PAGE_CHANGED,
95  MENU_CHANGED,
96  LAST_SIGNAL
97 };

Function Documentation

◆ G_DEFINE_TYPE_WITH_CODE()

G_DEFINE_TYPE_WITH_CODE ( GncMainWindow  ,
gnc_main_window  ,
GTK_TYPE_APPLICATION_WINDOW  ,
G_IMPLEMENT_INTERFACE(GNC_TYPE_WINDOW, gnc_window_main_window_init)   
)

A holding place for all the signals generated by the main window code.

◆ gnc_book_options_dialog_apply_helper()

gboolean gnc_book_options_dialog_apply_helper ( GncOptionDB options)

Processes selected options in the Book Options dialog: checks book_currency and use_split_action_for_num to see if features kvp should be set.

To be used where ever a new book situation requires book option selection (e.g., not just in Book Options dialog opened from main window but also in new-file assistant).

Parameters
GncOptionDB* options.
Returns
TRUE if gnc_gui_refresh_all should be called; otherwise FALSE.

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

4634 {
4635  QofBook *book = gnc_get_current_book ();
4636  gboolean use_split_action_for_num_before =
4638  gint use_read_only_threshold_before =
4640  gboolean use_split_action_for_num_after;
4641  gint use_read_only_threshold_after;
4642  gboolean return_val = FALSE;
4643  GList *results = nullptr, *iter;
4644 
4645  if (!options) return return_val;
4646 
4647  results = gnc_option_db_commit (options);
4648  for (iter = results; iter; iter = iter->next)
4649  {
4650  GtkWidget *dialog = gtk_message_dialog_new(gnc_ui_get_main_window (nullptr),
4651  (GtkDialogFlags)0,
4652  GTK_MESSAGE_ERROR,
4653  GTK_BUTTONS_OK,
4654  "%s",
4655  (char*)iter->data);
4656  gtk_dialog_run(GTK_DIALOG(dialog));
4657  gtk_widget_destroy(dialog);
4658  g_free (iter->data);
4659  }
4660  g_list_free (results);
4661  qof_book_begin_edit (book);
4662  qof_book_save_options (book, gnc_option_db_save, options, TRUE);
4663  use_split_action_for_num_after =
4665 
4666  // mark cached value as invalid so we get new value
4667  book->cached_num_days_autoreadonly_isvalid = FALSE;
4668  use_read_only_threshold_after = qof_book_get_num_days_autoreadonly (book);
4669 
4670  if (use_split_action_for_num_before != use_split_action_for_num_after)
4671  {
4673  use_split_action_for_num_after);
4674  return_val = TRUE;
4675  }
4676  if (use_read_only_threshold_before != use_read_only_threshold_after)
4677  return_val = TRUE;
4678 
4679  qof_book_commit_edit (book);
4680  return return_val;
4681 }
GtkWindow * gnc_ui_get_main_window(GtkWidget *widget)
Get a pointer to the final GncMainWindow widget is rooted in.
gint qof_book_get_num_days_autoreadonly(const QofBook *book)
Returns the number of days for auto-read-only transactions.
Definition: qofbook.cpp:968
gboolean qof_book_use_split_action_for_num_field(const QofBook *book)
Returns TRUE if this book uses split action field as the 'Num' field, FALSE if it uses transaction nu...
void gnc_option_db_save(GncOptionDB *odb, QofBook *book, gboolean clear_options)
Save the GncOptionDB contents into a book's options store.
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 ...
void qof_book_save_options(QofBook *book, GncOptionSave save_cb, GncOptionDB *odb, gboolean clear)
Save a GncOptionsDB back to the book's KVP.
Definition: qofbook.cpp:1322
GList * gnc_option_db_commit(GncOptionDB *odb)
Write all changed ui_item values to their options.

◆ gnc_book_options_dialog_cb()

GtkWidget * gnc_book_options_dialog_cb ( gboolean  modal,
gchar *  title,
GtkWindow *  parent 
)

Opens the Book Options dialog.

Parameters
modalTrue to open in modal mode, false otherwise.
titleTitle of the dialog; "Book Options" if NULL.
parentThe toplevel GdkWindow with which the dialog will be transient for.
Returns
A pointer to the GtkWidget for the dialog that can be used when started in modal mode.

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

4740 {
4741  auto book = gnc_get_current_book ();
4742 
4743  auto options = gnc_option_db_new();
4744  gnc_option_db_book_options(options);
4745  qof_book_load_options (book, gnc_option_db_load, options);
4746  gnc_option_db_clean (options);
4747 
4748  /* Only allow one Book Options dialog if called from file->properties
4749  menu */
4750  if (gnc_forall_gui_components(DIALOG_BOOK_OPTIONS_CM_CLASS,
4751  show_handler, nullptr))
4752  {
4753  return nullptr;
4754  }
4755  auto optionwin = new GncOptionsDialog (modal,
4756  (title ? title : _( "Book Options")),
4757  DIALOG_BOOK_OPTIONS_CM_CLASS, parent);
4758  optionwin->build_contents(options);
4759  optionwin->set_book_help_cb();
4760  optionwin->set_apply_cb(gnc_book_options_dialog_apply_cb,
4761  (gpointer)options);
4762  optionwin->set_close_cb ( gnc_book_options_dialog_close_cb,
4763  (gpointer)options);
4764  if (modal)
4766  return optionwin->get_widget();
4767 }
void gnc_option_db_clean(GncOptionDB *odb)
Reset all ui_items to the option value.
void qof_book_load_options(QofBook *book, GncOptionLoad load_cb, GncOptionDB *odb)
Load a GncOptionsDB from KVP data.
Definition: qofbook.cpp:1316
void gnc_options_dialog_set_new_book_option_values(GncOptionDB *odb)
Set the initial values of new book options to values specified in user preferences.
void gnc_option_db_load(GncOptionDB *odb, QofBook *book)
Load a book's options into the GncOptionDB.
void gnc_option_db_book_options(GncOptionDB *odb)
Register the standard option set for a QofBook.
GncOptionDB * gnc_option_db_new(void)
Create an empty option database.

◆ gnc_main_window_all_action_set_sensitive()

void gnc_main_window_all_action_set_sensitive ( const gchar *  action_name,
gboolean  sensitive 
)

Change the sensitivity of a command in all windows.

This can be used to serialize access to a command so that in cannot be reinvoked until the current invocation is finished.

Parameters
action_nameThe name of the command to modity.
sensitiveWhether or not the user should be able to invoke this action.

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

5934 {
5935  for (auto tmp = active_windows; tmp; tmp = g_list_next(tmp))
5936  {
5937  auto action{gnc_main_window_find_action (static_cast<GncMainWindow*>(tmp->data), action_name)};
5938  g_simple_action_set_enabled (G_SIMPLE_ACTION(action), sensitive);
5939  }
5940 }
GAction * gnc_main_window_find_action(GncMainWindow *window, const gchar *action_name)
Find the GAction in the main window.

◆ gnc_main_window_all_finish_pending()

gboolean gnc_main_window_all_finish_pending ( void  )

Tell all pages in all windows to finish any outstanding activities.

This function will call gnc_plugin_page_finish_pending for each installed page. If any page returns a failure indication, then the function stops walking pages and immediately returns a failure.

Returns
FALSE if any page could not or would not comply, which should cancel the pending operation. TRUE otherwise

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

1115 {
1116  const GList *windows, *item;
1117 
1118  windows = gnc_gobject_tracking_get_list(GNC_MAIN_WINDOW_NAME);
1119  for (item = windows; item; item = g_list_next(item))
1120  {
1121  if (!gnc_main_window_finish_pending(static_cast<GncMainWindow*>(item->data)))
1122  {
1123  return FALSE;
1124  }
1125  }
1126  if (gnc_gui_refresh_suspended ())
1127  {
1128  gnc_warning_dialog (nullptr, "%s", "An operation is still running, wait for it to complete before quitting.");
1129  return FALSE;
1130  }
1131  return TRUE;
1132 }
const GList * gnc_gobject_tracking_get_list(const gchar *name)
Get a list of all known objects of a specified type.
gboolean gnc_main_window_finish_pending(GncMainWindow *window)
Tell a window to finish any outstanding activities.

◆ gnc_main_window_button_press_cb()

gboolean gnc_main_window_button_press_cb ( GtkWidget *  whatever,
GdkEventButton *  event,
GncPluginPage page 
)

Callback function invoked when the user clicks in the content of any Gnucash window.

If this was a "right-click" then Gnucash will popup the contextual menu.

Parameters
whateverWhatever widget had focus when the user issued the keyboard context-menu request.
eventThe event parameter describing where on the screen the mouse was pointing when clicked, type of click, modifiers, etc.
pageThis is the GncPluginPage corresponding to the visible page.
Returns
Returns TRUE if this was a right-click, meaning Gnucash handled the click.

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

5915 {
5916  g_return_val_if_fail(GNC_IS_PLUGIN_PAGE(page), FALSE);
5917 
5918  ENTER("widget %p, event %p, page %p", whatever, event, page);
5919  /* Ignore double-clicks and triple-clicks */
5920  if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
5921  {
5922  do_popup_menu(page, event);
5923  LEAVE("menu shown");
5924  return TRUE;
5925  }
5926 
5927  LEAVE("other click");
5928  return FALSE;
5929 }
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ gnc_main_window_close_page()

void gnc_main_window_close_page ( GncPluginPage page)

Remove a data plugin page from a window and display the previous page.

If the page removed was the last page in the window, and there is more than one window open, then the entire window will be destroyed.

Parameters
pageThe page of data to be removed.

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

3453 {
3454  GncMainWindow *window;
3455  GncMainWindowPrivate *priv;
3456 
3457  if (!page || !page->notebook_page)
3458  return;
3459 
3460  if (!gnc_plugin_page_finish_pending(page))
3461  return;
3462 
3463  if (!GNC_IS_MAIN_WINDOW (page->window))
3464  return;
3465 
3466  window = GNC_MAIN_WINDOW (page->window);
3467  if (!window)
3468  {
3469  g_warning("Page is not in a window.");
3470  return;
3471  }
3472 
3473  gnc_main_window_disconnect(window, page);
3475  g_object_unref(page);
3476 
3477  /* If this isn't the last window, go ahead and destroy the window. */
3478  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3479  if (priv->installed_pages == nullptr)
3480  {
3481  if (window->window_quitting)
3482  {
3483  GncPluginManager *manager = gnc_plugin_manager_get ();
3484  GList *plugins = gnc_plugin_manager_get_plugins (manager);
3485 
3486  /* remove only the preference callbacks from the window plugins */
3487  window->just_plugin_prefs = TRUE;
3488  g_list_foreach (plugins, gnc_main_window_remove_plugin, window);
3489  window->just_plugin_prefs = FALSE;
3490  g_list_free (plugins);
3491 
3492  /* remove the preference callbacks from the main window */
3493  gnc_main_window_remove_prefs (window);
3494  }
3495  if (window && (gnc_list_length_cmp (active_windows, 1) > 0))
3496  gtk_widget_destroy (GTK_WIDGET(window));
3497  }
3498 }
gboolean gnc_plugin_page_finish_pending(GncPluginPage *page)
Tell a page to finish any outstanding activities.
void gnc_plugin_page_destroy_widget(GncPluginPage *plugin_page)
Destroy the display widget that corresponds to this plugin.
GtkWidget * window
The window that contains the display widget for this plugin.
The instance private data structure for an embedded window object.
GncPluginManager * gnc_plugin_manager_get(void)
Retrieve a pointer to the plugin manager.
GList * gnc_plugin_manager_get_plugins(GncPluginManager *manager)
Get a list of all plugins being held by the plugin manager.
GList * installed_pages
A list of all pages that are installed in this window.
gint gnc_list_length_cmp(const GList *list, size_t len)
Scans the GList elements the minimum number of iterations required to test it against a specified siz...
GtkWidget * notebook_page
The display widget for this plugin.

◆ gnc_main_window_display_page()

void gnc_main_window_display_page ( GncPluginPage page)

Bring the window containing the specified page to the top of the window stack, then switch the notebook to show the specified page.

Parameters
pageThe existing page to be displayed.

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

3251 {
3252  GncMainWindow *window;
3253  GncMainWindowPrivate *priv;
3254  GtkNotebook *notebook;
3255  gint page_num;
3256 
3257  window = GNC_MAIN_WINDOW (page->window);
3258  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3259  notebook = GTK_NOTEBOOK (priv->notebook);
3260  page_num = gtk_notebook_page_num(notebook, page->notebook_page);
3261  gtk_notebook_set_current_page (notebook, page_num);
3262  gtk_window_present(GTK_WINDOW(window));
3263 }
GtkWidget * window
The window that contains the display widget for this plugin.
GtkWidget * notebook
The notebook containing all the pages in this window.
The instance private data structure for an embedded window object.
GtkWidget * notebook_page
The display widget for this plugin.

◆ gnc_main_window_find_action()

GAction * gnc_main_window_find_action ( GncMainWindow *  window,
const gchar *  action_name 
)

Find the GAction in the main window.

Parameters
windowThe window which should be checked for the action.
action_nameThe name of the command to be retrieved.
Returns
A pointer to a GAction that was added with the specified name. If the name cannot be found, then NULL will be returned.

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

3644 {
3645  GAction *action = nullptr;
3646 
3647  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
3648  g_return_val_if_fail (action_name != nullptr, nullptr);
3649 
3650  action = g_action_map_lookup_action (G_ACTION_MAP(window),
3651  action_name);
3652 
3653  return action;
3654 }

◆ gnc_main_window_find_action_in_group()

GAction * gnc_main_window_find_action_in_group ( GncMainWindow *  window,
const gchar *  group_name,
const gchar *  action_name 
)

Find the GAction in a specific action group for window.

Parameters
windowThe window which should be checked for the action.
group_nameThe name of the action group to search.
nameThe name of the command to be retrieved.
Returns
A pointer to the GAction if found or NULL will be returned.

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

3660 {
3661  GAction *action = nullptr;
3662 
3663  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
3664  g_return_val_if_fail (group_name != nullptr, nullptr);
3665  g_return_val_if_fail (action_name != nullptr, nullptr);
3666 
3667  auto action_group = gtk_widget_get_action_group (GTK_WIDGET(window), group_name);
3668 
3669  if (action_group)
3670  action = g_action_map_lookup_action (G_ACTION_MAP(action_group), action_name);
3671 
3672  return action;
3673 }

◆ gnc_main_window_finish_pending()

gboolean gnc_main_window_finish_pending ( GncMainWindow *  window)

Tell a window to finish any outstanding activities.

This function will call gnc_plugin_page_finish_pending for each installed page. If any page returns a failure indication, then the function stops walking pages and immediately returns a failure.

Parameters
windowThe window whose pages should be checked.
Returns
FALSE if any page could not or would not comply, which should cancel the pending operation. TRUE otherwise

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

1095 {
1096  GncMainWindowPrivate *priv;
1097  GList *item;
1098 
1099  g_return_val_if_fail(GNC_IS_MAIN_WINDOW(window), TRUE);
1100 
1101  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
1102  for (item = priv->installed_pages; item; item = g_list_next(item))
1103  {
1104  if (!gnc_plugin_page_finish_pending(static_cast<GncPluginPage*>(item->data)))
1105  {
1106  return FALSE;
1107  }
1108  }
1109  return TRUE;
1110 }
gboolean gnc_plugin_page_finish_pending(GncPluginPage *page)
Tell a page to finish any outstanding activities.
The instance private data structure for an embedded window object.
GList * installed_pages
A list of all pages that are installed in this window.

◆ gnc_main_window_foreach_page()

void gnc_main_window_foreach_page ( GncMainWindowPageFunc  fn,
gpointer  user_data 
)

Iterator function to walk all pages in all windows, calling the specified function for each page.

Parameters
entryA pointer to the function to be called.
user_dataA data pointer passed to each call of the function.

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

418 {
419  ENTER(" ");
420  for (auto w = active_windows; w; w = g_list_next(w))
421  {
422  auto window{static_cast<GncMainWindow*>(w->data)};
423  auto priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
424  for (auto p = priv->installed_pages; p; p = g_list_next(p))
425  {
426  auto page{static_cast<GncPluginPage*>(p->data)};
427  fn(page, user_data);
428  }
429  }
430  LEAVE(" ");
431 }
The instance data structure for a content plugin.
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ gnc_main_window_get_action_group()

GSimpleActionGroup * gnc_main_window_get_action_group ( GncMainWindow *  window,
const gchar *  group_name 
)

Retrieve a specific set of user interface actions from a window.

This function can be used to get an group of action to be manipulated when the front page of a window has changed.

Parameters
windowThe window to check when looking for the action group.
group_nameThe name of a set of actions. This must be a name provided when the actions were installed.
Returns
A pointer to a GSimpleActionGroup that was added with the specified name. If the name cannot be found, then NULL will be returned.

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

3683 {
3684  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
3685  g_return_val_if_fail (group_name != nullptr, nullptr);
3686 
3687  auto action_group = gtk_widget_get_action_group (GTK_WIDGET(window), group_name);
3688  return (GSimpleActionGroup*)action_group;
3689 }

◆ gnc_main_window_get_current_page()

GncPluginPage * gnc_main_window_get_current_page ( GncMainWindow *  window)

Retrieve a pointer to the page that is currently at the front of the specified window.

Any plugin that needs to manipulate its menus based upon the currently selected menu page should connect to the "page_changed" signal on a window. The callback function from that signal can then call this function to obtain a pointer to the current page.

Parameters
windowA pointer to the window whose front page should be returned.
Returns
A pointer to the GncPluginPage currently at the front of the specified window. If the window pointer is invalid or the window is empty, this function will return NULL.

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

3510 {
3511  GncMainWindowPrivate *priv;
3512 
3513  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3514  return priv->current_page;
3515 }
The instance private data structure for an embedded window object.
GncPluginPage * current_page
The currently selected page.

◆ gnc_main_window_get_menu_model()

GMenuModel * gnc_main_window_get_menu_model ( GncMainWindow *  window)

Return the GMenuModel for the main window menu bar.

Parameters
windowThe window for the menu bar.
Returns
The GMenuModel or NULL.

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

5944 {
5945  GncMainWindowPrivate *priv;
5946 
5947  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
5948 
5949  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
5950 
5951  return priv->menubar_model;
5952 }
GMenuModel * menubar_model
The menubar_model.
The instance private data structure for an embedded window object.

◆ gnc_main_window_get_type()

GType gnc_main_window_get_type ( void  )

Get the type of a gnc main window.

Returns
A GType.

◆ gnc_main_window_init_short_names()

void gnc_main_window_init_short_names ( GncMainWindow *  window,
GncToolBarShortNames toolbar_labels 
)

Update the labels of the toolbar items with short names.

Parameters
windowThe window that conatins a tool bar to update.
toolbar_labelsA pointer to a NULL terminated array of data GncToolBarShortNames items.

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

3808 {
3809  GncMainWindowPrivate *priv;
3810 
3811  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3812  g_return_if_fail (toolbar_labels != nullptr);
3813 
3814  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3815 
3816  gnc_plugin_init_short_names (priv->toolbar, toolbar_labels);
3817 }
GtkWidget * toolbar
The toolbar.
The instance private data structure for an embedded window object.
void gnc_plugin_init_short_names(GtkWidget *toolbar, GncToolBarShortNames *toolbar_labels)
Add "short" labels to existing actions.
Definition: gnc-plugin.c:229

◆ gnc_main_window_is_quitting()

gboolean gnc_main_window_is_quitting ( GncMainWindow *  window)

Check if the main window is quitting.

Parameters
windowThe main window.
Returns
TRUE if window is quitting

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

1404 {
1405  g_return_val_if_fail(GNC_IS_MAIN_WINDOW(window), FALSE);
1406  return window->window_quitting;
1407 }

◆ gnc_main_window_is_restoring_pages()

gboolean gnc_main_window_is_restoring_pages ( GncMainWindow *  window)

Check if the main window is restoring the plugin pages.

This is used on report pages to delay the creation of the report till the page is focused.

Parameters
windowThe window whose pages should be checked.
Returns
TRUE if pages are being restored

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

408 {
409  GncMainWindowPrivate *priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
410  return priv->restoring_pages;
411 }
gboolean restoring_pages
Set when restoring plugin pages.
The instance private data structure for an embedded window object.

◆ gnc_main_window_manual_merge_actions()

void gnc_main_window_manual_merge_actions ( GncMainWindow *  window,
const gchar *  group_name,
GSimpleActionGroup *  group 
)

Manually add a set of actions to the specified window.

Plugins whose user interface is not hard coded (e.g. the menu-additions * plugin) must create their actions at run time, then use this * function to install them into the window.

Parameters
windowA pointer to the window whose user interface should be updated.
group_nameThe name for this set of actions. This name should be unique among all groups added to the window, and will be needed to remove the actions from this window.
groupA pointer to the GSimpleActionGroup.

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

3527 {
3528  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3529  g_return_if_fail (group_name != nullptr);
3530  g_return_if_fail (G_IS_SIMPLE_ACTION_GROUP(group));
3531 
3532  gtk_widget_insert_action_group (GTK_WIDGET(window), group_name,
3533  G_ACTION_GROUP(group));
3534 }

◆ gnc_main_window_menu_add_accelerator_keys()

void gnc_main_window_menu_add_accelerator_keys ( GncMainWindow *  window)

Scan the main window menu and add accelerator keys to main window accelerator group.

Parameters
windowA pointer to the window whose user interface should be updated.

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

3729 {
3730  GncMainWindowPrivate *priv;
3731 
3732  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3733 
3734  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3735 
3737 }
GtkAccelGroup * accel_group
The accelerator group for the window.
GMenuModel * menubar_model
The menubar_model.
The instance private data structure for an embedded window object.
GtkWidget * menubar
The menubar.
void gnc_add_accelerator_keys_for_menu(GtkWidget *menu, GMenuModel *model, GtkAccelGroup *accel_group)
Add accelerator keys for menu item widgets.

◆ gnc_main_window_menu_find_menu_item()

GtkWidget * gnc_main_window_menu_find_menu_item ( GncMainWindow *  window,
const gchar *  action_name 
)

Find the menu item with the given action name for the window specified.

Parameters
windowA pointer to the window whose user interface should be updated.
action_nameThe action name of the tool item to find.
Returns
The found menu item widget or NULL.

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

3706 {
3707  GncMainWindowPrivate *priv;
3708  GtkWidget *menu_item;
3709 
3710  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
3711  g_return_val_if_fail (action_name != nullptr, nullptr);
3712 
3713  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3714 
3715  menu_item = GTK_WIDGET(g_hash_table_lookup (priv->display_item_hash, action_name));
3716 
3717  if (!menu_item)
3718  {
3719  menu_item = gnc_menubar_model_find_menu_item (priv->menubar_model, priv->menubar, action_name);
3720 
3721  g_hash_table_insert (priv->display_item_hash, g_strdup (action_name), menu_item);
3722  }
3723  return menu_item;
3724 }
GMenuModel * menubar_model
The menubar_model.
The instance private data structure for an embedded window object.
GtkWidget * gnc_menubar_model_find_menu_item(GMenuModel *menu_model, GtkWidget *menu, const gchar *action_name)
Find a GtkMenu item from the action name.
GtkWidget * menubar
The menubar.

◆ gnc_main_window_merge_actions()

void gnc_main_window_merge_actions ( GncMainWindow *  window,
const gchar *  group_name,
GActionEntry *  entries,
guint  n_entries,
const gchar **  ui_updates,
const gchar *  ui_filename,
gpointer  user_data 
)

Add a set of actions to the specified window.

This function should not need to be called directly by plugin implementors. Correctly assigning values to the GncPluginClass fields during plugin initialization will cause this routine to be automatically called.

Parameters
windowA pointer to the window whose user interface should be updated.
group_nameThe name for this set of actions. This name should be unique among all groups added to the window, and will be needed to remove the actions from this window.
entriesA pointer to an array of GActionEntry. These are the actions that will be added to the user interface.
n_entriesThe number of actions in the array.
filenameThe filename containing the user interface definition that goes with this set of actions.
user_dataThe data to be provided to all callback functions.

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

3599 {
3601  GSimpleActionGroup *simple_action_group;
3602 
3603  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3604  g_return_if_fail (group_name != nullptr);
3605  g_return_if_fail (actions != nullptr);
3606  g_return_if_fail (n_actions > 0);
3607 
3608  data = g_new0 (GncMainWindowActionData, 1);
3609  data->window = window;
3610  data->data = user_data;
3611 
3612  simple_action_group = g_simple_action_group_new ();
3613 
3614  g_action_map_add_action_entries (G_ACTION_MAP(simple_action_group),
3615  actions,
3616  n_actions,
3617  data);
3618 
3619  gtk_widget_insert_action_group (GTK_WIDGET(window), group_name,
3620  G_ACTION_GROUP(simple_action_group));
3621 
3622  if (ui_filename)
3623  update_menu_model (window, ui_filename, ui_updates);
3624 }

◆ gnc_main_window_new()

GncMainWindow * gnc_main_window_new ( void  )

Create a new gnc main window plugin.

Returns
A pointer to the new object.

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

3049 {
3050  auto window{static_cast<GncMainWindow*>(g_object_new (GNC_TYPE_MAIN_WINDOW, nullptr))};
3051  gtk_window_set_default_size(GTK_WINDOW(window), 800, 600);
3052 
3053  auto old_window = gnc_ui_get_main_window (nullptr);
3054  if (old_window)
3055  {
3056  gint width, height;
3057  gtk_window_get_size (old_window, &width, &height);
3058  gtk_window_resize (GTK_WINDOW (window), width, height);
3059  if ((gdk_window_get_state((gtk_widget_get_window (GTK_WIDGET(old_window))))
3060  & GDK_WINDOW_STATE_MAXIMIZED) != 0)
3061  {
3062  gtk_window_maximize (GTK_WINDOW (window));
3063  }
3064  }
3065  active_windows = g_list_append (active_windows, window);
3066  gnc_main_window_update_title(window);
3067  window->window_quitting = FALSE;
3068  window->just_plugin_prefs = FALSE;
3069 #ifdef MAC_INTEGRATION
3070  gnc_quartz_set_menu(window);
3071 #else
3072  gnc_main_window_update_all_menu_items();
3073 #endif
3074  gnc_engine_add_commit_error_callback( gnc_main_window_engine_commit_error_callback, window );
3075 
3076  // set up a callback for notebook navigation
3077  g_signal_connect (G_OBJECT(window), "key-press-event",
3078  G_CALLBACK(gnc_main_window_key_press_event),
3079  NULL);
3080 
3081  return window;
3082 }
GtkWindow * gnc_ui_get_main_window(GtkWidget *widget)
Get a pointer to the final GncMainWindow widget is rooted in.
void gnc_engine_add_commit_error_callback(EngineCommitErrorCallback cb, gpointer data)
Set a callback function to be called in case an engine commit fails.
Definition: gnc-engine.cpp:166

◆ gnc_main_window_open_page()

void gnc_main_window_open_page ( GncMainWindow *  window,
GncPluginPage page 
)

Display a data plugin page in a window.

If the page already exists in any window, then that window will be brought to the front and the notebook switch to display the specified page. If the page is new then it will be added to the specified window (unless the page itself requests otherwise.). If the window is NULL, the new page will be added to the first window.

Parameters
windowThe window to display a new page in.
pageThe new page of data to be displayed, or the existing page of data the should be brought to the top and displayed.

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

3276 {
3277  GncMainWindowPrivate *priv;
3278  GtkWidget *tab_container, *tab_clickable_area;
3279  GtkWidget *label, *entry;
3280  const gchar *icon, *text, *color_string, *lab_text;
3281  GtkWidget *image;
3282  GList *tmp;
3283  TabWidth *tw;
3284 
3285  ENTER("window %p, page %p", window, page);
3286  if (window)
3287  g_return_if_fail (GNC_IS_MAIN_WINDOW (window));
3288  g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
3289  g_return_if_fail (gnc_plugin_page_has_books(page));
3290 
3291  if (gnc_main_window_page_exists(page))
3292  {
3294  return;
3295  }
3296 
3297  /* Does the page want to be in a new window? */
3299  {
3300  /* See if there's a blank window. If so, use that. */
3301  for (tmp = active_windows; tmp; tmp = g_list_next(tmp))
3302  {
3303  window = GNC_MAIN_WINDOW(tmp->data);
3304  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3305  if (priv->installed_pages == nullptr)
3306  {
3307  break;
3308  }
3309  }
3310  if (tmp == nullptr)
3311  window = gnc_main_window_new ();
3312  gtk_widget_show(GTK_WIDGET(window));
3313  }
3314  else if ((window == nullptr) && active_windows)
3315  {
3316  window = static_cast<GncMainWindow*>(active_windows->data);
3317  }
3318 
3319  page->window = GTK_WIDGET(window);
3321  g_object_set_data (G_OBJECT (page->notebook_page),
3322  PLUGIN_PAGE_LABEL, page);
3323 
3324  /*
3325  * The page tab.
3326  * Component structure:
3327  *
3328  * tab_container (GtkBox)
3329  * ├── tab_clickable_area (GtkEventBox)
3330  * │ └── tab_content (GtkBox)
3331  * │ ├── image (GtkImage, optional)
3332  * │ ├── label (GtkLabel)
3333  * │ └── entry (GtkEntry, hidden)
3334  * └── close_button (GtkButton, if not immutable)
3335  */
3336  icon = GNC_PLUGIN_PAGE_GET_CLASS(page)->tab_icon;
3337  lab_text = gnc_plugin_page_get_page_name(page);
3338  label = gtk_label_new (lab_text);
3339  g_object_set_data (G_OBJECT (page), PLUGIN_PAGE_TAB_LABEL, label);
3340 
3341  tw = populate_tab_width_struct ();
3342  gnc_main_window_update_tab_width_one_page (page, tw);
3343  g_free (tw);
3344 
3345  gtk_widget_show (label);
3346 
3347  tab_container = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
3348 
3350  if (text)
3351  {
3352  gtk_widget_set_tooltip_text(tab_container, text);
3353  }
3354 
3355  if (g_strcmp0 (gnc_plugin_page_get_plugin_name (page), "GncPluginPageAccountTree") == 0)
3356  gtk_widget_set_name (GTK_WIDGET(tab_container), "gnc-id-account-page-tab-box");
3357 
3358  gtk_box_set_homogeneous (GTK_BOX (tab_container), FALSE);
3359  gtk_widget_show (tab_container);
3360 
3361  // Create a custom clickable area for the tab to support middle-clicking
3362  tab_clickable_area = gtk_event_box_new();
3363  gtk_widget_show(tab_clickable_area);
3364  gtk_box_pack_start (GTK_BOX (tab_container), tab_clickable_area, TRUE, TRUE, 0);
3365 
3366  // Create a box for the tab's content
3367  // Give it a name so we can find it later (see main_window_find_tab_items)
3368  GtkWidget *tab_content = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
3369  gtk_widget_set_name(tab_content, "tab-content");
3370  gtk_container_add(GTK_CONTAINER(tab_clickable_area), tab_content);
3371  gtk_widget_show(tab_content);
3372 
3373  if (icon != nullptr)
3374  {
3375  image = gtk_image_new_from_icon_name (icon, GTK_ICON_SIZE_MENU);
3376  gtk_widget_show (image);
3377  gtk_box_pack_start (GTK_BOX (tab_content), image, FALSE, FALSE, 0);
3378  gtk_widget_set_margin_start (GTK_WIDGET(image), 5);
3379  gtk_box_pack_start (GTK_BOX (tab_content), label, TRUE, TRUE, 0);
3380  }
3381  else
3382  gtk_box_pack_start (GTK_BOX (tab_content), label, TRUE, TRUE, 0);
3383 
3384  entry = gtk_entry_new();
3385  gtk_widget_hide (entry);
3386  gtk_box_pack_start (GTK_BOX (tab_content), entry, TRUE, TRUE, 0);
3387  g_signal_connect(G_OBJECT(entry), "activate",
3388  G_CALLBACK(gnc_main_window_tab_entry_activate), page);
3389  g_signal_connect(G_OBJECT(entry), "focus-out-event",
3390  G_CALLBACK(gnc_main_window_tab_entry_focus_out_event),
3391  page);
3392  g_signal_connect(G_OBJECT(entry), "key-press-event",
3393  G_CALLBACK(gnc_main_window_tab_entry_key_press_event),
3394  page);
3395  g_signal_connect(G_OBJECT(entry), "editing-done",
3396  G_CALLBACK(gnc_main_window_tab_entry_editing_done),
3397  page);
3398 
3399  /* Add close button - Not for immutable pages */
3400  if (!g_object_get_data (G_OBJECT (page), PLUGIN_PAGE_IMMUTABLE))
3401  {
3402  GtkWidget *close_image, *close_button;
3403  GtkRequisition requisition;
3404 
3405  close_button = gtk_button_new();
3406  gtk_button_set_relief(GTK_BUTTON(close_button), GTK_RELIEF_NONE);
3407  close_image = gtk_image_new_from_icon_name ("window-close", GTK_ICON_SIZE_MENU);
3408  gtk_widget_show(close_image);
3409  gtk_widget_get_preferred_size (close_image, &requisition, nullptr);
3410  gtk_widget_set_size_request(close_button, requisition.width + 4,
3411  requisition.height + 2);
3412  gtk_container_add(GTK_CONTAINER(close_button), close_image);
3413  if (gnc_prefs_get_bool(GNC_PREFS_GROUP_GENERAL, GNC_PREF_SHOW_CLOSE_BUTTON))
3414  gtk_widget_show (close_button);
3415  else
3416  gtk_widget_hide (close_button);
3417 
3418  // Custom handler to close on middle-clicks
3419  g_signal_connect(G_OBJECT(tab_clickable_area), "button-press-event",
3420  G_CALLBACK(gnc_tab_clicked_cb), page);
3421 
3422  g_signal_connect_swapped (G_OBJECT (close_button), "clicked",
3423  G_CALLBACK(gnc_main_window_close_page), page);
3424 
3425  gtk_box_pack_start (GTK_BOX (tab_container), close_button, FALSE, FALSE, 0);
3426  gtk_widget_set_margin_end (GTK_WIDGET(close_button), 5);
3427  g_object_set_data (G_OBJECT (page), PLUGIN_PAGE_CLOSE_BUTTON, close_button);
3428  }
3429 
3430  /*
3431  * The popup menu
3432  */
3433  label = gtk_label_new (gnc_plugin_page_get_page_name(page));
3434 
3435  /*
3436  * Now install it all in the window.
3437  */
3438  gnc_main_window_connect(window, page, tab_container, label);
3439 
3440  color_string = gnc_plugin_page_get_page_color(page);
3441  main_window_update_page_color (page, color_string);
3442  LEAVE("");
3443 }
gboolean gnc_plugin_page_has_books(GncPluginPage *page)
Query a page to see if it has a reference to any book.
gboolean gnc_plugin_page_get_use_new_window(GncPluginPage *page)
Retrieve the "use new window" setting associated with this page.
const gchar * gnc_plugin_page_get_page_long_name(GncPluginPage *page)
Retrieve the long name of this page.
This data structure allows the passing of the tab width and whether the tab layout is on the left or ...
const gchar * gnc_plugin_page_get_page_name(GncPluginPage *page)
Retrieve the name of this page.
GtkWidget * window
The window that contains the display widget for this plugin.
const gchar * gnc_plugin_page_get_page_color(GncPluginPage *page)
Retrieve the color of this page.
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
void gnc_main_window_display_page(GncPluginPage *page)
Bring the window containing the specified page to the top of the window stack, then switch the notebo...
void main_window_update_page_color(GncPluginPage *page, const gchar *color_in)
Update the color on the page tabs in the main window.
The instance private data structure for an embedded window object.
#define PLUGIN_PAGE_LABEL
This label is used to provide a mapping from a visible page widget back to the corresponding GncPlugi...
GncMainWindow * gnc_main_window_new(void)
Create a new gnc main window plugin.
gboolean gnc_prefs_get_bool(const gchar *group, const gchar *pref_name)
Get a boolean value from the preferences backend.
void gnc_main_window_close_page(GncPluginPage *page)
Remove a data plugin page from a window and display the previous page.
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282
GList * installed_pages
A list of all pages that are installed in this window.
GtkWidget * notebook_page
The display widget for this plugin.
GtkWidget * gnc_plugin_page_create_widget(GncPluginPage *plugin_page)
Create the display widget that corresponds to this plugin.
const gchar * gnc_plugin_page_get_plugin_name(GncPluginPage *plugin_page)
Retrieve the textual name of a plugin.

◆ gnc_main_window_popup_menu_cb()

gboolean gnc_main_window_popup_menu_cb ( GtkWidget *  widget,
GncPluginPage page 
)

Callback function invoked when the user requests that Gnucash popup the contextual menu via the keyboard context-menu request key combination (Shift-F10 by default).

Parameters
pageThis is the GncPluginPage corresponding to the visible page.
widgetWhatever widget had focus when the user issued the keyboard context-menu request.
Returns
Always returns TRUE to indicate that the menu request was handled.

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

5899 {
5900  ENTER("widget %p, page %p", widget, page);
5901  do_popup_menu(page, nullptr);
5902  LEAVE(" ");
5903  return TRUE;
5904 }
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ gnc_main_window_restore_all_windows()

void gnc_main_window_restore_all_windows ( const GKeyFile *  keyfile)

Restore the persistent state of all windows.

Parameters
keyfileThe GKeyFile containing persistent window state.

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

878 {
879  gint i, window_count;
880  GError *error = nullptr;
882 
883  /* We use the same struct for reading and for writing, so we cast
884  away the const. */
885  data.key_file = (GKeyFile *) keyfile;
886  window_count = g_key_file_get_integer(data.key_file, STATE_FILE_TOP,
887  WINDOW_COUNT, &error);
888  if (error)
889  {
890  g_warning("error reading group %s key %s: %s",
891  STATE_FILE_TOP, WINDOW_COUNT, error->message);
892  g_error_free(error);
893  LEAVE("can't read count");
894  return;
895  }
896 
897  /* Restore all state information on the open windows. Window
898  numbers in state file are 1-based. GList indices are 0-based. */
899  gnc_set_busy_cursor (nullptr, TRUE);
900  for (i = 0; i < window_count; i++)
901  {
902  data.window_num = i;
903  auto window{static_cast<GncMainWindow*>(g_list_nth_data(active_windows,
904  i))};
905  gnc_main_window_restore_window(window, &data);
906  }
907  gnc_unset_busy_cursor (nullptr);
908 
909  statusbar_notification_lastmodified();
910 }
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ gnc_main_window_save_all_windows()

void gnc_main_window_save_all_windows ( GKeyFile *  keyfile)

Save the persistent state of all windows.

Parameters
keyfileThe GKeyFile to contain persistent window state.

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

1077 {
1078  GncMainWindowSaveData data;
1079 
1080  /* Set up the iterator data structures */
1081  data.key_file = keyfile;
1082  data.window_num = 1;
1083  data.page_num = 1;
1084 
1085  g_key_file_set_integer(data.key_file,
1086  STATE_FILE_TOP, WINDOW_COUNT,
1087  g_list_length(active_windows));
1088  /* Dump all state information on the open windows */
1089  g_list_foreach(active_windows, (GFunc)gnc_main_window_save_window, &data);
1090 }

◆ gnc_main_window_set_progressbar_window()

void gnc_main_window_set_progressbar_window ( GncMainWindow *  window)

Set the window where all progressbar updates should occur.

This is a wrapper around the gnc_window_set_progressbar_window() function.

Parameters
windowThe window to use for all progressbar updates.

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

5802 {
5803  GncWindow *gncwin;
5804  gncwin = GNC_WINDOW(window);
5805  gnc_window_set_progressbar_window(gncwin);
5806 }

◆ gnc_main_window_set_vis_of_items_by_action()

void gnc_main_window_set_vis_of_items_by_action ( GncMainWindow *  window,
const gchar **  action_names,
gboolean  vis 
)

Show or hide menu and toolbar items based on a NULL terminated list of action names.

Parameters
windowA pointer to the window whose user interface should be updated.
action_namesA NULL terminated list of actions names that should be modified.
visWhether to show or hide the widget items

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

3770 {
3771  GncMainWindowPrivate *priv;
3772 
3773  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3774 
3775  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3776 
3777  for (gint i = 0; action_names[i]; i++)
3778  {
3779  GtkWidget *tool_item = gnc_find_toolbar_item (priv->toolbar, action_names[i]);
3780  GtkWidget *menu_item = gnc_main_window_menu_find_menu_item (window, action_names[i]);
3781 
3782  if (menu_item)
3783  {
3784  PINFO("Found menu_item %p with action name '%s', seting vis to '%s'",
3785  menu_item, action_names[i], vis ? "true" : "false");
3786  gtk_widget_set_visible (menu_item, vis);
3787  }
3788  else
3789  PINFO("Did not find menu_item with action name '%s' to set vis '%s'",
3790  action_names[i], vis ? "true" : "false");
3791 
3792  if (tool_item)
3793  {
3794  PINFO("Found tool_item %p with action name '%s', seting vis to '%s'",
3795  tool_item, action_names[i], vis ? "true" : "false");
3796  gtk_widget_set_visible (tool_item, vis);
3797  }
3798  else
3799  PINFO("Did not find tool_item with action name '%s' to set vis '%s'",
3800  action_names[i], vis ? "true" : "false");
3801  }
3802 }
#define PINFO(format, args...)
Print an informational note.
Definition: qoflog.h:256
GtkWidget * toolbar
The toolbar.
GtkWidget * gnc_main_window_menu_find_menu_item(GncMainWindow *window, const gchar *action_name)
Find the menu item with the given action name for the window specified.
The instance private data structure for an embedded window object.
GtkWidget * gnc_find_toolbar_item(GtkWidget *toolbar, const gchar *action_name)
Search the toolbar for the tool item based on the action name.

◆ gnc_main_window_toolbar_find_tool_item()

GtkWidget * gnc_main_window_toolbar_find_tool_item ( GncMainWindow *  window,
const gchar *  action_name 
)

Find the toolbar item with the given action name for the window specified.

Parameters
windowA pointer to the window whose user interface should be updated.
action_nameThe action name of the tool item to find.
Returns
The found tool item widget or NULL.

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

3693 {
3694  GncMainWindowPrivate *priv;
3695 
3696  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
3697  g_return_val_if_fail (action_name != nullptr, nullptr);
3698 
3699  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3700 
3701  return gnc_find_toolbar_item (priv->toolbar, action_name);
3702 }
GtkWidget * toolbar
The toolbar.
The instance private data structure for an embedded window object.
GtkWidget * gnc_find_toolbar_item(GtkWidget *toolbar, const gchar *action_name)
Search the toolbar for the tool item based on the action name.

◆ gnc_main_window_unmerge_actions()

void gnc_main_window_unmerge_actions ( GncMainWindow *  window,
const gchar *  group_name 
)

Remove a set of actions from the specified window.

This function should not need to be called directly by plugin implementors. It will automatically be called when a plugin is removed from a window.

Parameters
windowA pointer to the window whose user interface should be updated.
group_nameThe name for this set of actions. This must be the same name provided when the actions were installed.

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

3635 {
3636  g_return_if_fail (GNC_IS_MAIN_WINDOW (window));
3637  g_return_if_fail (group_name != nullptr);
3638 
3639  gtk_widget_insert_action_group (GTK_WIDGET(window), group_name, nullptr);
3640 }

◆ gnc_main_window_update_menu_and_toolbar()

void gnc_main_window_update_menu_and_toolbar ( GncMainWindow *  window,
GncPluginPage page,
const gchar **  ui_updates 
)

Update the main window menu with the placeholders listed in ui_updates and load the page specific toolbar.

Parameters
windowThe window which should be checked for the action.
pageThe plugin page calling this function.
ui_updatesA NULL terminated list of placeholders to load

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

3873 {
3874  GncMainWindowPrivate *priv;
3875  const gchar *plugin_page_actions_group_name;
3876  GtkBuilder *builder;
3877  const gchar *menu_qualifier;
3878 
3879  GMenuModel *menu_model_part;
3880 #ifdef MAC_INTEGRATION
3881  auto theApp{static_cast<GtkosxApplication *>(g_object_new(GTKOSX_TYPE_APPLICATION, nullptr))};
3882 #endif
3883  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3884  g_return_if_fail (page != nullptr);
3885  g_return_if_fail (ui_updates != nullptr);
3886 
3887  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3888 
3889  builder = gnc_plugin_page_get_builder (page);
3890 
3891  if (!builder)
3892  return;
3893 
3894  menu_qualifier = gnc_plugin_page_get_menu_qualifier (page);
3895 
3896  plugin_page_actions_group_name = gnc_plugin_page_get_simple_action_group_name (page);
3897 
3898  if (!plugin_page_actions_group_name)
3899  return;
3900 
3901  gtk_widget_insert_action_group (GTK_WIDGET(window), gnc_plugin_page_get_simple_action_group_name (page),
3902  G_ACTION_GROUP(gnc_plugin_page_get_action_group (page)));
3903 
3904  if ((g_strcmp0 (priv->previous_plugin_page_name,
3905  plugin_page_actions_group_name) == 0) &&
3906  (g_strcmp0 (priv->previous_menu_qualifier,
3907  menu_qualifier) == 0))
3908  return;
3909 
3910  priv->previous_plugin_page_name = plugin_page_actions_group_name;
3911  priv->previous_menu_qualifier = menu_qualifier;
3912 
3913  gnc_main_window_update_toolbar (window, page, menu_qualifier);
3914 
3915  // reset hash table and remove added menu items
3916  g_hash_table_remove_all (priv->display_item_hash);
3918  GNC_MENU_ATTRIBUTE_TEMPORARY);
3919 
3920  GncMenuModelSearch *gsm = g_new0 (GncMenuModelSearch, 1);
3921  for (gint i = 0; ui_updates[i]; i++)
3922  {
3923  gchar *menu_name;
3924 
3925  if (menu_qualifier)
3926  menu_name = g_strconcat (ui_updates[i], "-", menu_qualifier, nullptr);
3927  else
3928  menu_name = g_strdup (ui_updates[i]);
3929 
3930  menu_model_part = (GMenuModel *)gtk_builder_get_object (builder, menu_name);
3931 
3932  if (!menu_model_part)
3933  menu_model_part = (GMenuModel *)gtk_builder_get_object (builder, ui_updates[i]);
3934 
3935  gsm->search_action_label = nullptr;
3936  gsm->search_action_name = ui_updates[i];
3937  gsm->search_action_target = nullptr;
3938 
3939  if (gnc_menubar_model_find_item (priv->menubar_model, gsm))
3940  g_menu_insert_section (G_MENU(gsm->model), gsm->index,
3941  nullptr, G_MENU_MODEL(menu_model_part));
3942  else
3943  PERR("Could not find '%s' in menu model", ui_updates[i]);
3944 
3945  g_free (menu_name);
3946  }
3947 
3948  // add tooltip redirect call backs
3950 
3951  // need to add the accelerator keys
3953 #ifdef MAC_INTEGRATION
3954  gtkosx_application_sync_menubar (theApp);
3955  g_object_unref (theApp);
3956 #endif
3957  // need to signal menu has been changed
3958  g_signal_emit_by_name (window, "menu_changed", page);
3959 
3960  g_free (gsm);
3961 }
GtkWidget * statusbar
A pointer to the status bar at the bottom edge of the window.
void gnc_menubar_model_remove_items_with_attrib(GMenuModel *menu_model, const gchar *attrib)
Remove GMenuModel entries based on having an attribute value equal to attrib, it does not matter what...
GtkAccelGroup * accel_group
The accelerator group for the window.
gboolean gnc_menubar_model_find_item(GMenuModel *menu_model, GncMenuModelSearch *gsm)
Find a GtkMenu item from the action name.
GMenuModel * menubar_model
The menubar_model.
GSimpleActionGroup * gnc_plugin_page_get_action_group(GncPluginPage *page)
Retrieve the GSimpleActionGroup object associated with this page.
GtkBuilder * gnc_plugin_page_get_builder(GncPluginPage *page)
Retrieve the GtkBuilder object associated with this page.
const gchar * gnc_plugin_page_get_menu_qualifier(GncPluginPage *page)
Retrieve the menu qualifier for this page.
#define PERR(format, args...)
Log a serious error.
Definition: qoflog.h:244
void gnc_plugin_add_menu_tooltip_callbacks(GtkWidget *menubar, GMenuModel *menubar_model, GtkWidget *statusbar)
This function adds the tooltip callbacks to make the tooltips appear in the status bar...
Definition: gnc-plugin.c:268
The instance private data structure for an embedded window object.
const gchar * gnc_plugin_page_get_simple_action_group_name(GncPluginPage *page)
Retrieve the simple action group name associated with this plugin page.
GtkWidget * menubar
The menubar.
void gnc_add_accelerator_keys_for_menu(GtkWidget *menu, GMenuModel *model, GtkAccelGroup *accel_group)
Add accelerator keys for menu item widgets.

◆ gnc_main_window_update_menu_for_action()

gboolean gnc_main_window_update_menu_for_action ( GncMainWindow *  window,
const gchar *  action_name,
const gchar *  label,
const gchar *  tooltip 
)

Find the GMenuModel item given the action name for the window specified.

Parameters
windowA pointer to the window whose user interface should be updated.
action_nameThe action name of the menu item to find.
labelThe new label for the menu item.
tooltipThe new tooltip for the menu item, optional.
Returns
TRUE if menu item found and updated or FALSE.

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

3745 {
3746  GncMainWindowPrivate *priv;
3747  gboolean found = false;
3748 
3749  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), false);
3750  g_return_val_if_fail (action_name != nullptr, false);
3751  g_return_val_if_fail (label != nullptr, false);
3752 
3753  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3754 
3755  found = gnc_menubar_model_update_item (priv->menubar_model, action_name,
3756  nullptr, _(label), nullptr, _(tooltip));
3757 
3758  // add tooltip redirect call backs
3760  priv->menubar_model,
3761  priv->statusbar);
3762 
3763  return found;
3764 }
GtkWidget * statusbar
A pointer to the status bar at the bottom edge of the window.
GMenuModel * menubar_model
The menubar_model.
void gnc_plugin_add_menu_tooltip_callbacks(GtkWidget *menubar, GMenuModel *menubar_model, GtkWidget *statusbar)
This function adds the tooltip callbacks to make the tooltips appear in the status bar...
Definition: gnc-plugin.c:268
The instance private data structure for an embedded window object.
GtkWidget * menubar
The menubar.
gboolean gnc_menubar_model_update_item(GMenuModel *menu_model, const gchar *action_name, const gchar *target, const gchar *label, const gchar *accel_name, const gchar *tooltip)
Update the GMenuModel item based on the action name by copying existing item, removing it and inserti...

◆ gnc_ui_get_gtk_window()

GtkWindow* gnc_ui_get_gtk_window ( GtkWidget *  widget)

Get a pointer to the widget's immediate top level GtkWindow.

This can be a dialog window or a GncMainWindow. If the widget is not a child of a GtkWindow (yet), NULL is returned.

Parameters
widgetthe widget to find a GtkWindow for.
Returns
A pointer to a GtkWindow object or NULL if no toplevel was found.

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

5623 {
5624  GtkWidget *toplevel;
5625 
5626  if (!widget)
5627  return nullptr;
5628 
5629  toplevel = gtk_widget_get_toplevel (widget);
5630  if (toplevel && GTK_IS_WINDOW (toplevel))
5631  return GTK_WINDOW (toplevel);
5632  else
5633  return nullptr;
5634 }

◆ gnc_ui_get_main_window()

GtkWindow* gnc_ui_get_main_window ( GtkWidget *  widget)

Get a pointer to the final GncMainWindow widget is rooted in.

If widget is a child of a GncMainWindow return that window. If it's a child of a dialog window recursively query the dialog's transient parent until the first parent that's a GncMainWindow and return that. If widget is NULL or not part of any GtkWindow, get a pointer to the first active top level window. If there is none, return the first mapped window. If there's no mapped window return NULL.

An example of why searching for a GncMainWindow makes sense: suppose a user has opened a search dialog for vendors and in that dialog has clicked "View vendor invoices". This opens another search window in which the user can click "View/Edit bill". Clicking that button should open a new tab in the GncMainWindow from which the first search dialog was opened.

Parameters
widgetthe widget to find a GncMainWindow for.
Returns
A pointer to a GtkWindow object.

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

5638 {
5639  GList *window;
5640 
5641  GtkWindow *toplevel = gnc_ui_get_gtk_window (widget);
5642  while (toplevel && !GNC_IS_MAIN_WINDOW (toplevel))
5643  toplevel = gtk_window_get_transient_for(toplevel);
5644 
5645  if (toplevel)
5646  return toplevel;
5647 
5648  for (window = active_windows; window; window = window->next)
5649  if (gtk_window_is_active (GTK_WINDOW (window->data)))
5650  return static_cast<GtkWindow*>(window->data);
5651 
5652  for (window = active_windows; window; window = window->next)
5653  if (gtk_widget_get_mapped (GTK_WIDGET(window->data)))
5654  return static_cast<GtkWindow*>(window->data);
5655 
5656  return nullptr;
5657 }
GtkWindow * gnc_ui_get_gtk_window(GtkWidget *widget)
Get a pointer to the widget&#39;s immediate top level GtkWindow.

◆ main_window_update_page_color()

void main_window_update_page_color ( GncPluginPage page,
const gchar *  color_in 
)

Update the color on the page tabs in the main window.

Parameters
pageThe page to be updated.
color_inThe new color string for the page tab.

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

2483 {
2484  GncMainWindow *window;
2485  GncMainWindowPrivate *priv;
2486  GtkWidget *tab_widget;
2487  GdkRGBA tab_color;
2488  gchar *color_string = nullptr;
2489  gboolean want_color = FALSE;
2490 
2491  ENTER(" ");
2492  if (color_in)
2493  color_string = g_strstrip(g_strdup(color_in));
2494 
2495  if (color_string && *color_string != '\0')
2496  want_color = TRUE;
2497 
2498  /* Update the plugin */
2499  window = GNC_MAIN_WINDOW(page->window);
2500  if (want_color)
2501  gnc_plugin_page_set_page_color(page, color_string);
2502  else
2503  gnc_plugin_page_set_page_color(page, nullptr);
2504 
2505  /* Update the notebook tab */
2506  main_window_find_tab_widget (window, page, &tab_widget);
2507  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
2508 
2509  if (want_color && gdk_rgba_parse(&tab_color, color_string) && priv->show_color_tabs)
2510  {
2511  GtkCssProvider *provider = gtk_css_provider_new();
2512  GtkStyleContext *stylectxt;
2513  gchar *col_str, *widget_css;
2514 
2515  if (!GTK_IS_EVENT_BOX (tab_widget))
2516  {
2517  GtkWidget *event_box = gtk_event_box_new ();
2518  g_object_ref (tab_widget);
2519  gtk_notebook_set_tab_label (GTK_NOTEBOOK(priv->notebook),
2520  page->notebook_page, event_box);
2521  gtk_container_add (GTK_CONTAINER(event_box), tab_widget);
2522  g_object_unref (tab_widget);
2523  tab_widget = event_box;
2524  }
2525 
2526  stylectxt = gtk_widget_get_style_context (GTK_WIDGET (tab_widget));
2527  col_str = gdk_rgba_to_string (&tab_color);
2528  widget_css = g_strconcat ("*{\n background-color:", col_str, ";\n}\n", nullptr);
2529 
2530  gtk_css_provider_load_from_data (provider, widget_css, -1, nullptr);
2531  gtk_style_context_add_provider (stylectxt, GTK_STYLE_PROVIDER (provider),
2532  GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
2533  g_object_unref (provider);
2534  g_free (col_str);
2535  g_free (widget_css);
2536  }
2537  else
2538  {
2539  if (GTK_IS_EVENT_BOX (tab_widget))
2540  {
2541  GtkWidget *tab_hbox = gtk_bin_get_child(GTK_BIN(tab_widget));
2542  g_object_ref (tab_hbox);
2543  gtk_container_remove (GTK_CONTAINER(tab_widget), tab_hbox);
2544  gtk_notebook_set_tab_label (GTK_NOTEBOOK(priv->notebook),
2545  page->notebook_page, tab_hbox);
2546  g_object_unref (tab_hbox);
2547  }
2548  }
2549  g_free(color_string);
2550  LEAVE("done");
2551 }
GtkWidget * window
The window that contains the display widget for this plugin.
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
GtkWidget * notebook
The notebook containing all the pages in this window.
The instance private data structure for an embedded window object.
gboolean show_color_tabs
Show account color as background on tabs.
void gnc_plugin_page_set_page_color(GncPluginPage *page, const char *color)
Set the color of this page.
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282
GtkWidget * notebook_page
The display widget for this plugin.

◆ main_window_update_page_long_name()

void main_window_update_page_long_name ( GncPluginPage page,
const gchar *  long_name_in 
)

Update the long name of the page in the main window.

Parameters
pageThe page to be updated.
long_name_inThe new long name for the page.

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

2378 {
2379  GtkWidget *tab_widget;
2380 
2381  ENTER(" ");
2382 
2383  if ((long_name_in == nullptr) || (*long_name_in == '\0'))
2384  {
2385  LEAVE("no string");
2386  return;
2387  }
2388  gchar *long_name = g_strstrip (g_strdup (long_name_in));
2389  const gchar *old_long_name = gnc_plugin_page_get_page_long_name (page);
2390 
2391  /* Optimization, if the long_name hasn't changed, don't update X. */
2392  if (*long_name == '\0' || strcmp (long_name, old_long_name) == 0)
2393  {
2394  g_free (long_name);
2395  LEAVE("empty string or name unchanged");
2396  return;
2397  }
2398 
2399  gnc_plugin_page_set_page_long_name (page, long_name);
2400 
2401  GncMainWindow *window = GNC_MAIN_WINDOW(page->window);
2402  if (!window)
2403  {
2404  g_free (long_name);
2405  LEAVE("no window widget available");
2406  return;
2407  }
2408 
2409  /* Update the notebook tab tooltip */
2410  if (main_window_find_tab_widget (window, page, &tab_widget))
2411  gtk_widget_set_tooltip_text (tab_widget, long_name);
2412 
2413  g_free (long_name);
2414  LEAVE("");
2415 }
const gchar * gnc_plugin_page_get_page_long_name(GncPluginPage *page)
Retrieve the long name of this page.
GtkWidget * window
The window that contains the display widget for this plugin.
void gnc_plugin_page_set_page_long_name(GncPluginPage *page, const char *name)
Set the long name of this page.
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ main_window_update_page_name()

void main_window_update_page_name ( GncPluginPage page,
const gchar *  name_in 
)

Update the name of the page in the main window.

Parameters
pageThe page to be updated.
name_inThe new name for the page.

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

2420 {
2421  GncMainWindow *window;
2422  GncMainWindowPrivate *priv;
2423  GtkWidget *label, *entry;
2424  gchar *name;
2425  TabWidth *tw;
2426 
2427  ENTER(" ");
2428 
2429  if ((name_in == nullptr) || (*name_in == '\0'))
2430  {
2431  LEAVE("no string");
2432  return;
2433  }
2434  name = g_strstrip(g_strdup(name_in));
2435 
2436  /* Optimization, if the name hasn't changed, don't update X. */
2437  if (*name == '\0' || 0 == strcmp(name, gnc_plugin_page_get_page_name(page)))
2438  {
2439  g_free(name);
2440  LEAVE("empty string or name unchanged");
2441  return;
2442  }
2443 
2444  /* Update the plugin */
2445  gnc_plugin_page_set_page_name(page, name);
2446 
2447  /* Update the notebook tab */
2448  window = GNC_MAIN_WINDOW(page->window);
2449  if (!window)
2450  {
2451  g_free(name);
2452  LEAVE("no window widget available");
2453  return;
2454  }
2455 
2456  if (main_window_find_tab_items(window, page, &label, &entry))
2457  gtk_label_set_text(GTK_LABEL(label), name);
2458 
2459  /* Adjust the label width for new text */
2460  tw = populate_tab_width_struct ();
2461  gnc_main_window_update_tab_width_one_page (page, tw);
2462  g_free (tw);
2463 
2464  /* Update the notebook menu */
2465  if (page->notebook_page)
2466  {
2467  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
2468  label = gtk_notebook_get_menu_label (GTK_NOTEBOOK(priv->notebook),
2469  page->notebook_page);
2470  gtk_label_set_text(GTK_LABEL(label), name);
2471  }
2472 
2473  /* Force an update of the window title */
2474  gnc_main_window_update_title(window);
2475  g_free(name);
2476  LEAVE("done");
2477 }
This data structure allows the passing of the tab width and whether the tab layout is on the left or ...
const gchar * gnc_plugin_page_get_page_name(GncPluginPage *page)
Retrieve the name of this page.
GtkWidget * window
The window that contains the display widget for this plugin.
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
GtkWidget * notebook
The notebook containing all the pages in this window.
The instance private data structure for an embedded window object.
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282
void gnc_plugin_page_set_page_name(GncPluginPage *page, const char *name)
Set the name of this page.
GtkWidget * notebook_page
The display widget for this plugin.

◆ main_window_update_page_set_read_only_icon()

void main_window_update_page_set_read_only_icon ( GncPluginPage page,
gboolean  read_only 
)

Update the icon on the page tabs in the main window.

Parameters
pageThe page to be updated.
read_onlyIf set a padlock icon will be displayed for the page tab icon if it had one.

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

2557 {
2558  GncMainWindow *window;
2559  GtkWidget *tab_widget;
2560  GtkWidget *image = NULL;
2561  GList *children;
2562  gchar *image_name = NULL;
2563  const gchar *icon_name;
2564 
2565  ENTER(" ");
2566 
2567  g_return_if_fail (page && page->window);
2568 
2569  if (!GNC_IS_MAIN_WINDOW (page->window))
2570  return;
2571 
2572  window = GNC_MAIN_WINDOW(page->window);
2573 
2574  /* Get the notebook tab widget */
2575  main_window_find_tab_widget (window, page, &tab_widget);
2576 
2577  if (!tab_widget)
2578  {
2579  LEAVE("no tab widget");
2580  return;
2581  }
2582 
2583  if (GTK_IS_EVENT_BOX(tab_widget))
2584  tab_widget = gtk_bin_get_child (GTK_BIN(tab_widget));
2585 
2586  children = gtk_container_get_children (GTK_CONTAINER(tab_widget));
2587  /* For each, walk the list of container children to get image widget */
2588  for (GList *child = children; child; child = g_list_next (child))
2589  {
2590  GtkWidget *widget = static_cast<GtkWidget*>(child->data);
2591  if (GTK_IS_IMAGE(widget))
2592  image = widget;
2593  }
2594  g_list_free (children);
2595 
2596  if (!image)
2597  {
2598  LEAVE("no image to replace");
2599  return;
2600  }
2601 
2602  g_object_get (image, "icon-name", &image_name, NULL);
2603 
2604  if (read_only)
2605  icon_name = "changes-prevent-symbolic";
2606  else
2607  icon_name = GNC_PLUGIN_PAGE_GET_CLASS(page)->tab_icon;
2608 
2609  if (g_strcmp0 (icon_name, image_name) == 0)
2610  {
2611  LEAVE("page icon the same, no need to replace");
2612  g_free (image_name);
2613  return;
2614  }
2615  gtk_container_remove (GTK_CONTAINER(tab_widget), image);
2616  image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
2617  gtk_widget_show (image);
2618 
2619  gtk_container_add (GTK_CONTAINER(tab_widget), image);
2620  gtk_widget_set_margin_start (GTK_WIDGET(image), 5);
2621  gtk_box_reorder_child (GTK_BOX(tab_widget), image, 0);
2622 
2623  g_free (image_name);
2624  LEAVE("done");
2625 }
GtkWidget * window
The window that contains the display widget for this plugin.
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282