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  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  GncMainWindow
 The instance data structure for a main window object. More...
 
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 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...
 
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...
 
GncMainWindowgnc_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...
 
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 4542 of file gnc-main-window.cpp.

4543 {
4544  QofBook *book = gnc_get_current_book ();
4545  gboolean use_split_action_for_num_before =
4547  gint use_read_only_threshold_before =
4549  gboolean use_split_action_for_num_after;
4550  gint use_read_only_threshold_after;
4551  gboolean return_val = FALSE;
4552  GList *results = nullptr, *iter;
4553 
4554  if (!options) return return_val;
4555 
4556  results = gnc_option_db_commit (options);
4557  for (iter = results; iter; iter = iter->next)
4558  {
4559  GtkWidget *dialog = gtk_message_dialog_new(gnc_ui_get_main_window (nullptr),
4560  (GtkDialogFlags)0,
4561  GTK_MESSAGE_ERROR,
4562  GTK_BUTTONS_OK,
4563  "%s",
4564  (char*)iter->data);
4565  gtk_dialog_run(GTK_DIALOG(dialog));
4566  gtk_widget_destroy(dialog);
4567  g_free (iter->data);
4568  }
4569  g_list_free (results);
4570  qof_book_begin_edit (book);
4571  qof_book_save_options (book, gnc_option_db_save, options, TRUE);
4572  use_split_action_for_num_after =
4574 
4575  // mark cached value as invalid so we get new value
4576  book->cached_num_days_autoreadonly_isvalid = FALSE;
4577  use_read_only_threshold_after = qof_book_get_num_days_autoreadonly (book);
4578 
4579  if (use_split_action_for_num_before != use_split_action_for_num_after)
4580  {
4582  use_split_action_for_num_after);
4583  return_val = TRUE;
4584  }
4585  if (use_read_only_threshold_before != use_read_only_threshold_after)
4586  return_val = TRUE;
4587 
4588  qof_book_commit_edit (book);
4589  return return_val;
4590 }
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 4648 of file gnc-main-window.cpp.

4649 {
4650  auto book = gnc_get_current_book ();
4651 
4652  auto options = gnc_option_db_new();
4653  gnc_option_db_book_options(options);
4654  qof_book_load_options (book, gnc_option_db_load, options);
4655  gnc_option_db_clean (options);
4656 
4657  /* Only allow one Book Options dialog if called from file->properties
4658  menu */
4659  if (gnc_forall_gui_components(DIALOG_BOOK_OPTIONS_CM_CLASS,
4660  show_handler, nullptr))
4661  {
4662  return nullptr;
4663  }
4664  auto optionwin = new GncOptionsDialog (modal,
4665  (title ? title : _( "Book Options")),
4666  DIALOG_BOOK_OPTIONS_CM_CLASS, parent);
4667  optionwin->build_contents(options);
4668  optionwin->set_book_help_cb();
4669  optionwin->set_apply_cb(gnc_book_options_dialog_apply_cb,
4670  (gpointer)options);
4671  optionwin->set_close_cb ( gnc_book_options_dialog_close_cb,
4672  (gpointer)options);
4673  if (modal)
4675  return optionwin->get_widget();
4676 }
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 5647 of file gnc-main-window.cpp.

5649 {
5650  for (auto tmp = active_windows; tmp; tmp = g_list_next(tmp))
5651  {
5652  auto action{gnc_main_window_find_action (static_cast<GncMainWindow*>(tmp->data), action_name)};
5653  g_simple_action_set_enabled (G_SIMPLE_ACTION(action), sensitive);
5654  }
5655 }
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 1090 of file gnc-main-window.cpp.

1091 {
1092  const GList *windows, *item;
1093 
1094  windows = gnc_gobject_tracking_get_list(GNC_MAIN_WINDOW_NAME);
1095  for (item = windows; item; item = g_list_next(item))
1096  {
1097  if (!gnc_main_window_finish_pending(static_cast<GncMainWindow*>(item->data)))
1098  {
1099  return FALSE;
1100  }
1101  }
1102  if (gnc_gui_refresh_suspended ())
1103  {
1104  gnc_warning_dialog (nullptr, "%s", "An operation is still running, wait for it to complete before quitting.");
1105  return FALSE;
1106  }
1107  return TRUE;
1108 }
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 5627 of file gnc-main-window.cpp.

5630 {
5631  g_return_val_if_fail(GNC_IS_PLUGIN_PAGE(page), FALSE);
5632 
5633  ENTER("widget %p, event %p, page %p", whatever, event, page);
5634  /* Ignore double-clicks and triple-clicks */
5635  if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
5636  {
5637  do_popup_menu(page, event);
5638  LEAVE("menu shown");
5639  return TRUE;
5640  }
5641 
5642  LEAVE("other click");
5643  return FALSE;
5644 }
#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 3361 of file gnc-main-window.cpp.

3362 {
3363  GncMainWindow *window;
3364  GncMainWindowPrivate *priv;
3365 
3366  if (!page || !page->notebook_page)
3367  return;
3368 
3369  if (!gnc_plugin_page_finish_pending(page))
3370  return;
3371 
3372  if (!GNC_IS_MAIN_WINDOW (page->window))
3373  return;
3374 
3375  window = GNC_MAIN_WINDOW (page->window);
3376  if (!window)
3377  {
3378  g_warning("Page is not in a window.");
3379  return;
3380  }
3381 
3382  gnc_main_window_disconnect(window, page);
3384  g_object_unref(page);
3385 
3386  /* If this isn't the last window, go ahead and destroy the window. */
3387  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3388  if (priv->installed_pages == nullptr)
3389  {
3390  if (window->window_quitting)
3391  {
3392  GncPluginManager *manager = gnc_plugin_manager_get ();
3393  GList *plugins = gnc_plugin_manager_get_plugins (manager);
3394 
3395  /* remove only the preference callbacks from the window plugins */
3396  window->just_plugin_prefs = TRUE;
3397  g_list_foreach (plugins, gnc_main_window_remove_plugin, window);
3398  window->just_plugin_prefs = FALSE;
3399  g_list_free (plugins);
3400 
3401  /* remove the preference callbacks from the main window */
3402  gnc_main_window_remove_prefs (window);
3403  }
3404  if (window && (gnc_list_length_cmp (active_windows, 1) > 0))
3405  gtk_widget_destroy (GTK_WIDGET(window));
3406  }
3407 }
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.
The instance data structure for a main window object.
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 3184 of file gnc-main-window.cpp.

3185 {
3186  GncMainWindow *window;
3187  GncMainWindowPrivate *priv;
3188  GtkNotebook *notebook;
3189  gint page_num;
3190 
3191  window = GNC_MAIN_WINDOW (page->window);
3192  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3193  notebook = GTK_NOTEBOOK (priv->notebook);
3194  page_num = gtk_notebook_page_num(notebook, page->notebook_page);
3195  gtk_notebook_set_current_page (notebook, page_num);
3196  gtk_window_present(GTK_WINDOW(window));
3197 }
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.
The instance data structure for a main 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 3552 of file gnc-main-window.cpp.

3553 {
3554  GAction *action = nullptr;
3555 
3556  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
3557  g_return_val_if_fail (action_name != nullptr, nullptr);
3558 
3559  action = g_action_map_lookup_action (G_ACTION_MAP(window),
3560  action_name);
3561 
3562  return action;
3563 }

◆ 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 3566 of file gnc-main-window.cpp.

3569 {
3570  GAction *action = nullptr;
3571 
3572  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
3573  g_return_val_if_fail (group_name != nullptr, nullptr);
3574  g_return_val_if_fail (action_name != nullptr, nullptr);
3575 
3576  auto action_group = gtk_widget_get_action_group (GTK_WIDGET(window), group_name);
3577 
3578  if (action_group)
3579  action = g_action_map_lookup_action (G_ACTION_MAP(action_group), action_name);
3580 
3581  return action;
3582 }

◆ 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 1070 of file gnc-main-window.cpp.

1071 {
1072  GncMainWindowPrivate *priv;
1073  GList *item;
1074 
1075  g_return_val_if_fail(GNC_IS_MAIN_WINDOW(window), TRUE);
1076 
1077  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
1078  for (item = priv->installed_pages; item; item = g_list_next(item))
1079  {
1080  if (!gnc_plugin_page_finish_pending(static_cast<GncPluginPage*>(item->data)))
1081  {
1082  return FALSE;
1083  }
1084  }
1085  return TRUE;
1086 }
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 411 of file gnc-main-window.cpp.

412 {
413  ENTER(" ");
414  for (auto w = active_windows; w; w = g_list_next(w))
415  {
416  auto window{static_cast<GncMainWindow*>(w->data)};
417  auto priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
418  for (auto p = priv->installed_pages; p; p = g_list_next(p))
419  {
420  auto page{static_cast<GncPluginPage*>(p->data)};
421  fn(page, user_data);
422  }
423  }
424  LEAVE(" ");
425 }
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
The instance data structure for a main window object.

◆ 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 3590 of file gnc-main-window.cpp.

3592 {
3593  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
3594  g_return_val_if_fail (group_name != nullptr, nullptr);
3595 
3596  auto action_group = gtk_widget_get_action_group (GTK_WIDGET(window), group_name);
3597  return (GSimpleActionGroup*)action_group;
3598 }

◆ 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 3418 of file gnc-main-window.cpp.

3419 {
3420  GncMainWindowPrivate *priv;
3421 
3422  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3423  return priv->current_page;
3424 }
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 5658 of file gnc-main-window.cpp.

5659 {
5660  GncMainWindowPrivate *priv;
5661 
5662  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
5663 
5664  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
5665 
5666  return priv->menubar_model;
5667 }
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 3715 of file gnc-main-window.cpp.

3717 {
3718  GncMainWindowPrivate *priv;
3719 
3720  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3721  g_return_if_fail (toolbar_labels != nullptr);
3722 
3723  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3724 
3725  gnc_plugin_init_short_names (priv->toolbar, toolbar_labels);
3726 }
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_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 401 of file gnc-main-window.cpp.

402 {
403  GncMainWindowPrivate *priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
404  return priv->restoring_pages;
405 }
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 3433 of file gnc-main-window.cpp.

3436 {
3437  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3438  g_return_if_fail (group_name != nullptr);
3439  g_return_if_fail (G_IS_SIMPLE_ACTION_GROUP(group));
3440 
3441  gtk_widget_insert_action_group (GTK_WIDGET(window), group_name,
3442  G_ACTION_GROUP(group));
3443 }

◆ 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 3637 of file gnc-main-window.cpp.

3638 {
3639  GncMainWindowPrivate *priv;
3640 
3641  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3642 
3643  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3644 
3646 }
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 3614 of file gnc-main-window.cpp.

3615 {
3616  GncMainWindowPrivate *priv;
3617  GtkWidget *menu_item;
3618 
3619  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
3620  g_return_val_if_fail (action_name != nullptr, nullptr);
3621 
3622  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3623 
3624  menu_item = GTK_WIDGET(g_hash_table_lookup (priv->display_item_hash, action_name));
3625 
3626  if (!menu_item)
3627  {
3628  menu_item = gnc_menubar_model_find_menu_item (priv->menubar_model, priv->menubar, action_name);
3629 
3630  g_hash_table_insert (priv->display_item_hash, g_strdup (action_name), menu_item);
3631  }
3632  return menu_item;
3633 }
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 3501 of file gnc-main-window.cpp.

3508 {
3510  GSimpleActionGroup *simple_action_group;
3511 
3512  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3513  g_return_if_fail (group_name != nullptr);
3514  g_return_if_fail (actions != nullptr);
3515  g_return_if_fail (n_actions > 0);
3516 
3517  data = g_new0 (GncMainWindowActionData, 1);
3518  data->window = window;
3519  data->data = user_data;
3520 
3521  simple_action_group = g_simple_action_group_new ();
3522 
3523  g_action_map_add_action_entries (G_ACTION_MAP(simple_action_group),
3524  actions,
3525  n_actions,
3526  data);
3527 
3528  gtk_widget_insert_action_group (GTK_WIDGET(window), group_name,
3529  G_ACTION_GROUP(simple_action_group));
3530 
3531  if (ui_filename)
3532  update_menu_model (window, ui_filename, ui_updates);
3533 }

◆ 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 2982 of file gnc-main-window.cpp.

2983 {
2984  auto window{static_cast<GncMainWindow*>(g_object_new (GNC_TYPE_MAIN_WINDOW, nullptr))};
2985  gtk_window_set_default_size(GTK_WINDOW(window), 800, 600);
2986 
2987  auto old_window = gnc_ui_get_main_window (nullptr);
2988  if (old_window)
2989  {
2990  gint width, height;
2991  gtk_window_get_size (old_window, &width, &height);
2992  gtk_window_resize (GTK_WINDOW (window), width, height);
2993  if ((gdk_window_get_state((gtk_widget_get_window (GTK_WIDGET(old_window))))
2994  & GDK_WINDOW_STATE_MAXIMIZED) != 0)
2995  {
2996  gtk_window_maximize (GTK_WINDOW (window));
2997  }
2998  }
2999  active_windows = g_list_append (active_windows, window);
3000  gnc_main_window_update_title(window);
3001  window->window_quitting = FALSE;
3002  window->just_plugin_prefs = FALSE;
3003 #ifdef MAC_INTEGRATION
3004  gnc_quartz_set_menu(window);
3005 #else
3006  gnc_main_window_update_all_menu_items();
3007 #endif
3008  gnc_engine_add_commit_error_callback( gnc_main_window_engine_commit_error_callback, window );
3009 
3010  // set up a callback for notebook navigation
3011  g_signal_connect (G_OBJECT(window), "key-press-event",
3012  G_CALLBACK(gnc_main_window_key_press_event),
3013  NULL);
3014 
3015  return window;
3016 }
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
The instance data structure for a main window object.

◆ 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 3208 of file gnc-main-window.cpp.

3210 {
3211  GncMainWindowPrivate *priv;
3212  GtkWidget *tab_hbox;
3213  GtkWidget *label, *entry;
3214  const gchar *icon, *text, *color_string, *lab_text;
3215  GtkWidget *image;
3216  GList *tmp;
3217  TabWidth *tw;
3218 
3219  ENTER("window %p, page %p", window, page);
3220  if (window)
3221  g_return_if_fail (GNC_IS_MAIN_WINDOW (window));
3222  g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
3223  g_return_if_fail (gnc_plugin_page_has_books(page));
3224 
3225  if (gnc_main_window_page_exists(page))
3226  {
3228  return;
3229  }
3230 
3231  /* Does the page want to be in a new window? */
3233  {
3234  /* See if there's a blank window. If so, use that. */
3235  for (tmp = active_windows; tmp; tmp = g_list_next(tmp))
3236  {
3237  window = GNC_MAIN_WINDOW(tmp->data);
3238  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3239  if (priv->installed_pages == nullptr)
3240  {
3241  break;
3242  }
3243  }
3244  if (tmp == nullptr)
3245  window = gnc_main_window_new ();
3246  gtk_widget_show(GTK_WIDGET(window));
3247  }
3248  else if ((window == nullptr) && active_windows)
3249  {
3250  window = static_cast<GncMainWindow*>(active_windows->data);
3251  }
3252 
3253  page->window = GTK_WIDGET(window);
3255  g_object_set_data (G_OBJECT (page->notebook_page),
3256  PLUGIN_PAGE_LABEL, page);
3257 
3258  /*
3259  * The page tab.
3260  */
3261  icon = GNC_PLUGIN_PAGE_GET_CLASS(page)->tab_icon;
3262  lab_text = gnc_plugin_page_get_page_name(page);
3263  label = gtk_label_new (lab_text);
3264  g_object_set_data (G_OBJECT (page), PLUGIN_PAGE_TAB_LABEL, label);
3265 
3266  tw = populate_tab_width_struct ();
3267  gnc_main_window_update_tab_width_one_page (page, tw);
3268  g_free (tw);
3269 
3270  gtk_widget_show (label);
3271 
3272  tab_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
3273 
3274  if (g_strcmp0 (gnc_plugin_page_get_plugin_name (page), "GncPluginPageAccountTree") == 0)
3275  gtk_widget_set_name (GTK_WIDGET(tab_hbox), "gnc-id-account-page-tab-box");
3276 
3277  gtk_box_set_homogeneous (GTK_BOX (tab_hbox), FALSE);
3278  gtk_widget_show (tab_hbox);
3279 
3280  if (icon != nullptr)
3281  {
3282  image = gtk_image_new_from_icon_name (icon, GTK_ICON_SIZE_MENU);
3283  gtk_widget_show (image);
3284  gtk_box_pack_start (GTK_BOX (tab_hbox), image, FALSE, FALSE, 0);
3285  gtk_widget_set_margin_start (GTK_WIDGET(image), 5);
3286  gtk_box_pack_start (GTK_BOX (tab_hbox), label, TRUE, TRUE, 0);
3287  }
3288  else
3289  gtk_box_pack_start (GTK_BOX (tab_hbox), label, TRUE, TRUE, 0);
3290 
3292  if (text)
3293  {
3294  gtk_widget_set_tooltip_text(tab_hbox, text);
3295  }
3296 
3297  entry = gtk_entry_new();
3298  gtk_widget_hide (entry);
3299  gtk_box_pack_start (GTK_BOX (tab_hbox), entry, TRUE, TRUE, 0);
3300  g_signal_connect(G_OBJECT(entry), "activate",
3301  G_CALLBACK(gnc_main_window_tab_entry_activate), page);
3302  g_signal_connect(G_OBJECT(entry), "focus-out-event",
3303  G_CALLBACK(gnc_main_window_tab_entry_focus_out_event),
3304  page);
3305  g_signal_connect(G_OBJECT(entry), "key-press-event",
3306  G_CALLBACK(gnc_main_window_tab_entry_key_press_event),
3307  page);
3308  g_signal_connect(G_OBJECT(entry), "editing-done",
3309  G_CALLBACK(gnc_main_window_tab_entry_editing_done),
3310  page);
3311 
3312  /* Add close button - Not for immutable pages */
3313  if (!g_object_get_data (G_OBJECT (page), PLUGIN_PAGE_IMMUTABLE))
3314  {
3315  GtkWidget *close_image, *close_button;
3316  GtkRequisition requisition;
3317 
3318  close_button = gtk_button_new();
3319  gtk_button_set_relief(GTK_BUTTON(close_button), GTK_RELIEF_NONE);
3320  close_image = gtk_image_new_from_icon_name ("window-close", GTK_ICON_SIZE_MENU);
3321  gtk_widget_show(close_image);
3322  gtk_widget_get_preferred_size (close_image, &requisition, nullptr);
3323  gtk_widget_set_size_request(close_button, requisition.width + 4,
3324  requisition.height + 2);
3325  gtk_container_add(GTK_CONTAINER(close_button), close_image);
3326  if (gnc_prefs_get_bool(GNC_PREFS_GROUP_GENERAL, GNC_PREF_SHOW_CLOSE_BUTTON))
3327  gtk_widget_show (close_button);
3328  else
3329  gtk_widget_hide (close_button);
3330 
3331  g_signal_connect_swapped (G_OBJECT (close_button), "clicked",
3332  G_CALLBACK(gnc_main_window_close_page), page);
3333 
3334  gtk_box_pack_start (GTK_BOX (tab_hbox), close_button, FALSE, FALSE, 0);
3335  gtk_widget_set_margin_end (GTK_WIDGET(close_button), 5);
3336  g_object_set_data (G_OBJECT (page), PLUGIN_PAGE_CLOSE_BUTTON, close_button);
3337  }
3338 
3339  /*
3340  * The popup menu
3341  */
3342  label = gtk_label_new (gnc_plugin_page_get_page_name(page));
3343 
3344  /*
3345  * Now install it all in the window.
3346  */
3347  gnc_main_window_connect(window, page, tab_hbox, label);
3348 
3349  color_string = gnc_plugin_page_get_page_color(page);
3350  main_window_update_page_color (page, color_string);
3351  LEAVE("");
3352 }
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.
The instance data structure for a main window object.
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 5612 of file gnc-main-window.cpp.

5614 {
5615  ENTER("widget %p, page %p", widget, page);
5616  do_popup_menu(page, nullptr);
5617  LEAVE(" ");
5618  return TRUE;
5619 }
#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 853 of file gnc-main-window.cpp.

854 {
855  gint i, window_count;
856  GError *error = nullptr;
858 
859  /* We use the same struct for reading and for writing, so we cast
860  away the const. */
861  data.key_file = (GKeyFile *) keyfile;
862  window_count = g_key_file_get_integer(data.key_file, STATE_FILE_TOP,
863  WINDOW_COUNT, &error);
864  if (error)
865  {
866  g_warning("error reading group %s key %s: %s",
867  STATE_FILE_TOP, WINDOW_COUNT, error->message);
868  g_error_free(error);
869  LEAVE("can't read count");
870  return;
871  }
872 
873  /* Restore all state information on the open windows. Window
874  numbers in state file are 1-based. GList indices are 0-based. */
875  gnc_set_busy_cursor (nullptr, TRUE);
876  for (i = 0; i < window_count; i++)
877  {
878  data.window_num = i;
879  auto window{static_cast<GncMainWindow*>(g_list_nth_data(active_windows,
880  i))};
881  gnc_main_window_restore_window(window, &data);
882  }
883  gnc_unset_busy_cursor (nullptr);
884 
885  statusbar_notification_lastmodified();
886 }
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282
The instance data structure for a main window object.

◆ 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 1052 of file gnc-main-window.cpp.

1053 {
1054  GncMainWindowSaveData data;
1055 
1056  /* Set up the iterator data structures */
1057  data.key_file = keyfile;
1058  data.window_num = 1;
1059  data.page_num = 1;
1060 
1061  g_key_file_set_integer(data.key_file,
1062  STATE_FILE_TOP, WINDOW_COUNT,
1063  g_list_length(active_windows));
1064  /* Dump all state information on the open windows */
1065  g_list_foreach(active_windows, (GFunc)gnc_main_window_save_window, &data);
1066 }

◆ 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 5516 of file gnc-main-window.cpp.

5517 {
5518  GncWindow *gncwin;
5519  gncwin = GNC_WINDOW(window);
5520  gnc_window_set_progressbar_window(gncwin);
5521 }

◆ 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 3676 of file gnc-main-window.cpp.

3679 {
3680  GncMainWindowPrivate *priv;
3681 
3682  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3683 
3684  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3685 
3686  for (gint i = 0; action_names[i]; i++)
3687  {
3688  GtkWidget *tool_item = gnc_find_toolbar_item (priv->toolbar, action_names[i]);
3689  GtkWidget *menu_item = gnc_main_window_menu_find_menu_item (window, action_names[i]);
3690 
3691  if (menu_item)
3692  {
3693  PINFO("Found menu_item %p with action name '%s', seting vis to '%s'",
3694  menu_item, action_names[i], vis ? "true" : "false");
3695  gtk_widget_set_visible (menu_item, vis);
3696  }
3697  else
3698  PINFO("Did not find menu_item with action name '%s' to set vis '%s'",
3699  action_names[i], vis ? "true" : "false");
3700 
3701  if (tool_item)
3702  {
3703  PINFO("Found tool_item %p with action name '%s', seting vis to '%s'",
3704  tool_item, action_names[i], vis ? "true" : "false");
3705  gtk_widget_set_visible (tool_item, vis);
3706  }
3707  else
3708  PINFO("Did not find tool_item with action name '%s' to set vis '%s'",
3709  action_names[i], vis ? "true" : "false");
3710  }
3711 }
#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 3601 of file gnc-main-window.cpp.

3602 {
3603  GncMainWindowPrivate *priv;
3604 
3605  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
3606  g_return_val_if_fail (action_name != nullptr, nullptr);
3607 
3608  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3609 
3610  return gnc_find_toolbar_item (priv->toolbar, action_name);
3611 }
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 3542 of file gnc-main-window.cpp.

3544 {
3545  g_return_if_fail (GNC_IS_MAIN_WINDOW (window));
3546  g_return_if_fail (group_name != nullptr);
3547 
3548  gtk_widget_insert_action_group (GTK_WIDGET(window), group_name, nullptr);
3549 }

◆ 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 3779 of file gnc-main-window.cpp.

3782 {
3783  GncMainWindowPrivate *priv;
3784  const gchar *plugin_page_actions_group_name;
3785  GtkBuilder *builder;
3786  const gchar *menu_qualifier;
3787 
3788  GMenuModel *menu_model_part;
3789 #ifdef MAC_INTEGRATION
3790  auto theApp{static_cast<GtkosxApplication *>(g_object_new(GTKOSX_TYPE_APPLICATION, nullptr))};
3791 #endif
3792  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3793  g_return_if_fail (page != nullptr);
3794  g_return_if_fail (ui_updates != nullptr);
3795 
3796  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3797 
3798  builder = gnc_plugin_page_get_builder (page);
3799 
3800  if (!builder)
3801  return;
3802 
3803  menu_qualifier = gnc_plugin_page_get_menu_qualifier (page);
3804 
3805  plugin_page_actions_group_name = gnc_plugin_page_get_simple_action_group_name (page);
3806 
3807  if (!plugin_page_actions_group_name)
3808  return;
3809 
3810  gtk_widget_insert_action_group (GTK_WIDGET(window), gnc_plugin_page_get_simple_action_group_name (page),
3811  G_ACTION_GROUP(gnc_plugin_page_get_action_group (page)));
3812 
3813  if ((g_strcmp0 (priv->previous_plugin_page_name,
3814  plugin_page_actions_group_name) == 0) &&
3815  (g_strcmp0 (priv->previous_menu_qualifier,
3816  menu_qualifier) == 0))
3817  return;
3818 
3819  priv->previous_plugin_page_name = plugin_page_actions_group_name;
3820  priv->previous_menu_qualifier = menu_qualifier;
3821 
3822  gnc_main_window_update_toolbar (window, page, menu_qualifier);
3823 
3824  // reset hash table and remove added menu items
3825  g_hash_table_remove_all (priv->display_item_hash);
3827  GNC_MENU_ATTRIBUTE_TEMPORARY);
3828 
3829  GncMenuModelSearch *gsm = g_new0 (GncMenuModelSearch, 1);
3830  for (gint i = 0; ui_updates[i]; i++)
3831  {
3832  gchar *menu_name;
3833 
3834  if (menu_qualifier)
3835  menu_name = g_strconcat (ui_updates[i], "-", menu_qualifier, nullptr);
3836  else
3837  menu_name = g_strdup (ui_updates[i]);
3838 
3839  menu_model_part = (GMenuModel *)gtk_builder_get_object (builder, menu_name);
3840 
3841  if (!menu_model_part)
3842  menu_model_part = (GMenuModel *)gtk_builder_get_object (builder, ui_updates[i]);
3843 
3844  gsm->search_action_label = nullptr;
3845  gsm->search_action_name = ui_updates[i];
3846  gsm->search_action_target = nullptr;
3847 
3848  if (gnc_menubar_model_find_item (priv->menubar_model, gsm))
3849  g_menu_insert_section (G_MENU(gsm->model), gsm->index,
3850  nullptr, G_MENU_MODEL(menu_model_part));
3851  else
3852  PERR("Could not find '%s' in menu model", ui_updates[i]);
3853 
3854  g_free (menu_name);
3855  }
3856 
3857  // add tooltip redirect call backs
3859 
3860  // need to add the accelerator keys
3862 #ifdef MAC_INTEGRATION
3863  gtkosx_application_sync_menubar (theApp);
3864  g_object_unref (theApp);
3865 #endif
3866  // need to signal menu has been changed
3867  g_signal_emit_by_name (window, "menu_changed", page);
3868 
3869  g_free (gsm);
3870 }
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 3650 of file gnc-main-window.cpp.

3654 {
3655  GncMainWindowPrivate *priv;
3656  gboolean found = false;
3657 
3658  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), false);
3659  g_return_val_if_fail (action_name != nullptr, false);
3660  g_return_val_if_fail (label != nullptr, false);
3661 
3662  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3663 
3664  found = gnc_menubar_model_update_item (priv->menubar_model, action_name,
3665  nullptr, _(label), nullptr, _(tooltip));
3666 
3667  // add tooltip redirect call backs
3669  priv->menubar_model,
3670  priv->statusbar);
3671 
3672  return found;
3673 }
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 5337 of file gnc-main-window.cpp.

5338 {
5339  GtkWidget *toplevel;
5340 
5341  if (!widget)
5342  return nullptr;
5343 
5344  toplevel = gtk_widget_get_toplevel (widget);
5345  if (toplevel && GTK_IS_WINDOW (toplevel))
5346  return GTK_WINDOW (toplevel);
5347  else
5348  return nullptr;
5349 }

◆ 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 5352 of file gnc-main-window.cpp.

5353 {
5354  GList *window;
5355 
5356  GtkWindow *toplevel = gnc_ui_get_gtk_window (widget);
5357  while (toplevel && !GNC_IS_MAIN_WINDOW (toplevel))
5358  toplevel = gtk_window_get_transient_for(toplevel);
5359 
5360  if (toplevel)
5361  return toplevel;
5362 
5363  for (window = active_windows; window; window = window->next)
5364  if (gtk_window_is_active (GTK_WINDOW (window->data)))
5365  return static_cast<GtkWindow*>(window->data);
5366 
5367  for (window = active_windows; window; window = window->next)
5368  if (gtk_widget_get_mapped (GTK_WIDGET(window->data)))
5369  return static_cast<GtkWindow*>(window->data);
5370 
5371  return nullptr;
5372 }
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 2415 of file gnc-main-window.cpp.

2417 {
2418  GncMainWindow *window;
2419  GncMainWindowPrivate *priv;
2420  GtkWidget *tab_widget;
2421  GdkRGBA tab_color;
2422  gchar *color_string = nullptr;
2423  gboolean want_color = FALSE;
2424 
2425  ENTER(" ");
2426  if (color_in)
2427  color_string = g_strstrip(g_strdup(color_in));
2428 
2429  if (color_string && *color_string != '\0')
2430  want_color = TRUE;
2431 
2432  /* Update the plugin */
2433  window = GNC_MAIN_WINDOW(page->window);
2434  if (want_color)
2435  gnc_plugin_page_set_page_color(page, color_string);
2436  else
2437  gnc_plugin_page_set_page_color(page, nullptr);
2438 
2439  /* Update the notebook tab */
2440  main_window_find_tab_widget (window, page, &tab_widget);
2441  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
2442 
2443  if (want_color && gdk_rgba_parse(&tab_color, color_string) && priv->show_color_tabs)
2444  {
2445  GtkCssProvider *provider = gtk_css_provider_new();
2446  GtkStyleContext *stylectxt;
2447  gchar *col_str, *widget_css;
2448 
2449  if (!GTK_IS_EVENT_BOX (tab_widget))
2450  {
2451  GtkWidget *event_box = gtk_event_box_new ();
2452  g_object_ref (tab_widget);
2453  gtk_notebook_set_tab_label (GTK_NOTEBOOK(priv->notebook),
2454  page->notebook_page, event_box);
2455  gtk_container_add (GTK_CONTAINER(event_box), tab_widget);
2456  g_object_unref (tab_widget);
2457  tab_widget = event_box;
2458  }
2459 
2460  stylectxt = gtk_widget_get_style_context (GTK_WIDGET (tab_widget));
2461  col_str = gdk_rgba_to_string (&tab_color);
2462  widget_css = g_strconcat ("*{\n background-color:", col_str, ";\n}\n", nullptr);
2463 
2464  gtk_css_provider_load_from_data (provider, widget_css, -1, nullptr);
2465  gtk_style_context_add_provider (stylectxt, GTK_STYLE_PROVIDER (provider),
2466  GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
2467  g_object_unref (provider);
2468  g_free (col_str);
2469  g_free (widget_css);
2470  }
2471  else
2472  {
2473  if (GTK_IS_EVENT_BOX (tab_widget))
2474  {
2475  GtkWidget *tab_hbox = gtk_bin_get_child(GTK_BIN(tab_widget));
2476  g_object_ref (tab_hbox);
2477  gtk_container_remove (GTK_CONTAINER(tab_widget), tab_hbox);
2478  gtk_notebook_set_tab_label (GTK_NOTEBOOK(priv->notebook),
2479  page->notebook_page, tab_hbox);
2480  g_object_unref (tab_hbox);
2481  }
2482  }
2483  g_free(color_string);
2484  LEAVE("done");
2485 }
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
The instance data structure for a main window object.
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 2310 of file gnc-main-window.cpp.

2312 {
2313  GtkWidget *tab_widget;
2314 
2315  ENTER(" ");
2316 
2317  if ((long_name_in == nullptr) || (*long_name_in == '\0'))
2318  {
2319  LEAVE("no string");
2320  return;
2321  }
2322  gchar *long_name = g_strstrip (g_strdup (long_name_in));
2323  const gchar *old_long_name = gnc_plugin_page_get_page_long_name (page);
2324 
2325  /* Optimization, if the long_name hasn't changed, don't update X. */
2326  if (*long_name == '\0' || strcmp (long_name, old_long_name) == 0)
2327  {
2328  g_free (long_name);
2329  LEAVE("empty string or name unchanged");
2330  return;
2331  }
2332 
2333  gnc_plugin_page_set_page_long_name (page, long_name);
2334 
2335  GncMainWindow *window = GNC_MAIN_WINDOW(page->window);
2336  if (!window)
2337  {
2338  g_free (long_name);
2339  LEAVE("no window widget available");
2340  return;
2341  }
2342 
2343  /* Update the notebook tab tooltip */
2344  if (main_window_find_tab_widget (window, page, &tab_widget))
2345  gtk_widget_set_tooltip_text (tab_widget, long_name);
2346 
2347  g_free (long_name);
2348  LEAVE("");
2349 }
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
The instance data structure for a main window object.

◆ 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 2352 of file gnc-main-window.cpp.

2354 {
2355  GncMainWindow *window;
2356  GncMainWindowPrivate *priv;
2357  GtkWidget *label, *entry;
2358  gchar *name;
2359  TabWidth *tw;
2360 
2361  ENTER(" ");
2362 
2363  if ((name_in == nullptr) || (*name_in == '\0'))
2364  {
2365  LEAVE("no string");
2366  return;
2367  }
2368  name = g_strstrip(g_strdup(name_in));
2369 
2370  /* Optimization, if the name hasn't changed, don't update X. */
2371  if (*name == '\0' || 0 == strcmp(name, gnc_plugin_page_get_page_name(page)))
2372  {
2373  g_free(name);
2374  LEAVE("empty string or name unchanged");
2375  return;
2376  }
2377 
2378  /* Update the plugin */
2379  gnc_plugin_page_set_page_name(page, name);
2380 
2381  /* Update the notebook tab */
2382  window = GNC_MAIN_WINDOW(page->window);
2383  if (!window)
2384  {
2385  g_free(name);
2386  LEAVE("no window widget available");
2387  return;
2388  }
2389 
2390  if (main_window_find_tab_items(window, page, &label, &entry))
2391  gtk_label_set_text(GTK_LABEL(label), name);
2392 
2393  /* Adjust the label width for new text */
2394  tw = populate_tab_width_struct ();
2395  gnc_main_window_update_tab_width_one_page (page, tw);
2396  g_free (tw);
2397 
2398  /* Update the notebook menu */
2399  if (page->notebook_page)
2400  {
2401  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
2402  label = gtk_notebook_get_menu_label (GTK_NOTEBOOK(priv->notebook),
2403  page->notebook_page);
2404  gtk_label_set_text(GTK_LABEL(label), name);
2405  }
2406 
2407  /* Force an update of the window title */
2408  gnc_main_window_update_title(window);
2409  g_free(name);
2410  LEAVE("done");
2411 }
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.
The instance data structure for a main window object.
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 2489 of file gnc-main-window.cpp.

2491 {
2492  GncMainWindow *window;
2493  GtkWidget *tab_widget;
2494  GtkWidget *image = NULL;
2495  GList *children;
2496  gchar *image_name = NULL;
2497  const gchar *icon_name;
2498 
2499  ENTER(" ");
2500 
2501  g_return_if_fail (page && page->window);
2502 
2503  if (!GNC_IS_MAIN_WINDOW (page->window))
2504  return;
2505 
2506  window = GNC_MAIN_WINDOW(page->window);
2507 
2508  /* Get the notebook tab widget */
2509  main_window_find_tab_widget (window, page, &tab_widget);
2510 
2511  if (!tab_widget)
2512  {
2513  LEAVE("no tab widget");
2514  return;
2515  }
2516 
2517  if (GTK_IS_EVENT_BOX(tab_widget))
2518  tab_widget = gtk_bin_get_child (GTK_BIN(tab_widget));
2519 
2520  children = gtk_container_get_children (GTK_CONTAINER(tab_widget));
2521  /* For each, walk the list of container children to get image widget */
2522  for (GList *child = children; child; child = g_list_next (child))
2523  {
2524  GtkWidget *widget = static_cast<GtkWidget*>(child->data);
2525  if (GTK_IS_IMAGE(widget))
2526  image = widget;
2527  }
2528  g_list_free (children);
2529 
2530  if (!image)
2531  {
2532  LEAVE("no image to replace");
2533  return;
2534  }
2535 
2536  g_object_get (image, "icon-name", &image_name, NULL);
2537 
2538  if (read_only)
2539  icon_name = "changes-prevent-symbolic";
2540  else
2541  icon_name = GNC_PLUGIN_PAGE_GET_CLASS(page)->tab_icon;
2542 
2543  if (g_strcmp0 (icon_name, image_name) == 0)
2544  {
2545  LEAVE("page icon the same, no need to replace");
2546  g_free (image_name);
2547  return;
2548  }
2549  gtk_container_remove (GTK_CONTAINER(tab_widget), image);
2550  image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
2551  gtk_widget_show (image);
2552 
2553  gtk_container_add (GTK_CONTAINER(tab_widget), image);
2554  gtk_widget_set_margin_start (GTK_WIDGET(image), 5);
2555  gtk_box_reorder_child (GTK_BOX(tab_widget), image, 0);
2556 
2557  g_free (image_name);
2558  LEAVE("done");
2559 }
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
The instance data structure for a main window object.