GnuCash  5.6-133-gc519490283+
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 4528 of file gnc-main-window.cpp.

4529 {
4530  QofBook *book = gnc_get_current_book ();
4531  gboolean use_split_action_for_num_before =
4533  gint use_read_only_threshold_before =
4535  gboolean use_split_action_for_num_after;
4536  gint use_read_only_threshold_after;
4537  gboolean return_val = FALSE;
4538  GList *results = nullptr, *iter;
4539 
4540  if (!options) return return_val;
4541 
4542  results = gnc_option_db_commit (options);
4543  for (iter = results; iter; iter = iter->next)
4544  {
4545  GtkWidget *dialog = gtk_message_dialog_new(gnc_ui_get_main_window (nullptr),
4546  (GtkDialogFlags)0,
4547  GTK_MESSAGE_ERROR,
4548  GTK_BUTTONS_OK,
4549  "%s",
4550  (char*)iter->data);
4551  gtk_dialog_run(GTK_DIALOG(dialog));
4552  gtk_widget_destroy(dialog);
4553  g_free (iter->data);
4554  }
4555  g_list_free (results);
4556  qof_book_begin_edit (book);
4557  qof_book_save_options (book, gnc_option_db_save, options, TRUE);
4558  use_split_action_for_num_after =
4560 
4561  // mark cached value as invalid so we get new value
4562  book->cached_num_days_autoreadonly_isvalid = FALSE;
4563  use_read_only_threshold_after = qof_book_get_num_days_autoreadonly (book);
4564 
4565  if (use_split_action_for_num_before != use_split_action_for_num_after)
4566  {
4568  use_split_action_for_num_after);
4569  return_val = TRUE;
4570  }
4571  if (use_read_only_threshold_before != use_read_only_threshold_after)
4572  return_val = TRUE;
4573 
4574  qof_book_commit_edit (book);
4575  return return_val;
4576 }
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 4634 of file gnc-main-window.cpp.

4635 {
4636  auto book = gnc_get_current_book ();
4637 
4638  auto options = gnc_option_db_new();
4639  gnc_option_db_book_options(options);
4640  qof_book_load_options (book, gnc_option_db_load, options);
4641  gnc_option_db_clean (options);
4642 
4643  /* Only allow one Book Options dialog if called from file->properties
4644  menu */
4645  if (gnc_forall_gui_components(DIALOG_BOOK_OPTIONS_CM_CLASS,
4646  show_handler, nullptr))
4647  {
4648  return nullptr;
4649  }
4650  auto optionwin = new GncOptionsDialog (modal,
4651  (title ? title : _( "Book Options")),
4652  DIALOG_BOOK_OPTIONS_CM_CLASS, parent);
4653  optionwin->build_contents(options);
4654  optionwin->set_book_help_cb();
4655  optionwin->set_apply_cb(gnc_book_options_dialog_apply_cb,
4656  (gpointer)options);
4657  optionwin->set_close_cb ( gnc_book_options_dialog_close_cb,
4658  (gpointer)options);
4659  if (modal)
4661  return optionwin->get_widget();
4662 }
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 5633 of file gnc-main-window.cpp.

5635 {
5636  for (auto tmp = active_windows; tmp; tmp = g_list_next(tmp))
5637  {
5638  auto action{gnc_main_window_find_action (static_cast<GncMainWindow*>(tmp->data), action_name)};
5639  g_simple_action_set_enabled (G_SIMPLE_ACTION(action), sensitive);
5640  }
5641 }
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 1076 of file gnc-main-window.cpp.

1077 {
1078  const GList *windows, *item;
1079 
1080  windows = gnc_gobject_tracking_get_list(GNC_MAIN_WINDOW_NAME);
1081  for (item = windows; item; item = g_list_next(item))
1082  {
1083  if (!gnc_main_window_finish_pending(static_cast<GncMainWindow*>(item->data)))
1084  {
1085  return FALSE;
1086  }
1087  }
1088  if (gnc_gui_refresh_suspended ())
1089  {
1090  gnc_warning_dialog (nullptr, "%s", "An operation is still running, wait for it to complete before quitting.");
1091  return FALSE;
1092  }
1093  return TRUE;
1094 }
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 5613 of file gnc-main-window.cpp.

5616 {
5617  g_return_val_if_fail(GNC_IS_PLUGIN_PAGE(page), FALSE);
5618 
5619  ENTER("widget %p, event %p, page %p", whatever, event, page);
5620  /* Ignore double-clicks and triple-clicks */
5621  if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
5622  {
5623  do_popup_menu(page, event);
5624  LEAVE("menu shown");
5625  return TRUE;
5626  }
5627 
5628  LEAVE("other click");
5629  return FALSE;
5630 }
#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 3347 of file gnc-main-window.cpp.

3348 {
3349  GncMainWindow *window;
3350  GncMainWindowPrivate *priv;
3351 
3352  if (!page || !page->notebook_page)
3353  return;
3354 
3355  if (!gnc_plugin_page_finish_pending(page))
3356  return;
3357 
3358  if (!GNC_IS_MAIN_WINDOW (page->window))
3359  return;
3360 
3361  window = GNC_MAIN_WINDOW (page->window);
3362  if (!window)
3363  {
3364  g_warning("Page is not in a window.");
3365  return;
3366  }
3367 
3368  gnc_main_window_disconnect(window, page);
3370  g_object_unref(page);
3371 
3372  /* If this isn't the last window, go ahead and destroy the window. */
3373  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3374  if (priv->installed_pages == nullptr)
3375  {
3376  if (window->window_quitting)
3377  {
3378  GncPluginManager *manager = gnc_plugin_manager_get ();
3379  GList *plugins = gnc_plugin_manager_get_plugins (manager);
3380 
3381  /* remove only the preference callbacks from the window plugins */
3382  window->just_plugin_prefs = TRUE;
3383  g_list_foreach (plugins, gnc_main_window_remove_plugin, window);
3384  window->just_plugin_prefs = FALSE;
3385  g_list_free (plugins);
3386 
3387  /* remove the preference callbacks from the main window */
3388  gnc_main_window_remove_prefs (window);
3389  }
3390  if (window && (gnc_list_length_cmp (active_windows, 1) > 0))
3391  gtk_widget_destroy (GTK_WIDGET(window));
3392  }
3393 }
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 3170 of file gnc-main-window.cpp.

3171 {
3172  GncMainWindow *window;
3173  GncMainWindowPrivate *priv;
3174  GtkNotebook *notebook;
3175  gint page_num;
3176 
3177  window = GNC_MAIN_WINDOW (page->window);
3178  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3179  notebook = GTK_NOTEBOOK (priv->notebook);
3180  page_num = gtk_notebook_page_num(notebook, page->notebook_page);
3181  gtk_notebook_set_current_page (notebook, page_num);
3182  gtk_window_present(GTK_WINDOW(window));
3183 }
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 3538 of file gnc-main-window.cpp.

3539 {
3540  GAction *action = nullptr;
3541 
3542  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
3543  g_return_val_if_fail (action_name != nullptr, nullptr);
3544 
3545  action = g_action_map_lookup_action (G_ACTION_MAP(window),
3546  action_name);
3547 
3548  return action;
3549 }

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

3555 {
3556  GAction *action = nullptr;
3557 
3558  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
3559  g_return_val_if_fail (group_name != nullptr, nullptr);
3560  g_return_val_if_fail (action_name != nullptr, nullptr);
3561 
3562  auto action_group = gtk_widget_get_action_group (GTK_WIDGET(window), group_name);
3563 
3564  if (action_group)
3565  action = g_action_map_lookup_action (G_ACTION_MAP(action_group), action_name);
3566 
3567  return action;
3568 }

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

1057 {
1058  GncMainWindowPrivate *priv;
1059  GList *item;
1060 
1061  g_return_val_if_fail(GNC_IS_MAIN_WINDOW(window), TRUE);
1062 
1063  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
1064  for (item = priv->installed_pages; item; item = g_list_next(item))
1065  {
1066  if (!gnc_plugin_page_finish_pending(static_cast<GncPluginPage*>(item->data)))
1067  {
1068  return FALSE;
1069  }
1070  }
1071  return TRUE;
1072 }
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 3576 of file gnc-main-window.cpp.

3578 {
3579  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
3580  g_return_val_if_fail (group_name != nullptr, nullptr);
3581 
3582  auto action_group = gtk_widget_get_action_group (GTK_WIDGET(window), group_name);
3583  return (GSimpleActionGroup*)action_group;
3584 }

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

3405 {
3406  GncMainWindowPrivate *priv;
3407 
3408  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3409  return priv->current_page;
3410 }
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 5644 of file gnc-main-window.cpp.

5645 {
5646  GncMainWindowPrivate *priv;
5647 
5648  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
5649 
5650  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
5651 
5652  return priv->menubar_model;
5653 }
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 3701 of file gnc-main-window.cpp.

3703 {
3704  GncMainWindowPrivate *priv;
3705 
3706  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3707  g_return_if_fail (toolbar_labels != nullptr);
3708 
3709  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3710 
3711  gnc_plugin_init_short_names (priv->toolbar, toolbar_labels);
3712 }
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 3419 of file gnc-main-window.cpp.

3422 {
3423  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3424  g_return_if_fail (group_name != nullptr);
3425  g_return_if_fail (G_IS_SIMPLE_ACTION_GROUP(group));
3426 
3427  gtk_widget_insert_action_group (GTK_WIDGET(window), group_name,
3428  G_ACTION_GROUP(group));
3429 }

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

3624 {
3625  GncMainWindowPrivate *priv;
3626 
3627  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3628 
3629  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3630 
3632 }
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 3600 of file gnc-main-window.cpp.

3601 {
3602  GncMainWindowPrivate *priv;
3603  GtkWidget *menu_item;
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  menu_item = GTK_WIDGET(g_hash_table_lookup (priv->display_item_hash, action_name));
3611 
3612  if (!menu_item)
3613  {
3614  menu_item = gnc_menubar_model_find_menu_item (priv->menubar_model, priv->menubar, action_name);
3615 
3616  g_hash_table_insert (priv->display_item_hash, g_strdup (action_name), menu_item);
3617  }
3618  return menu_item;
3619 }
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 3487 of file gnc-main-window.cpp.

3494 {
3496  GSimpleActionGroup *simple_action_group;
3497 
3498  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3499  g_return_if_fail (group_name != nullptr);
3500  g_return_if_fail (actions != nullptr);
3501  g_return_if_fail (n_actions > 0);
3502 
3503  data = g_new0 (GncMainWindowActionData, 1);
3504  data->window = window;
3505  data->data = user_data;
3506 
3507  simple_action_group = g_simple_action_group_new ();
3508 
3509  g_action_map_add_action_entries (G_ACTION_MAP(simple_action_group),
3510  actions,
3511  n_actions,
3512  data);
3513 
3514  gtk_widget_insert_action_group (GTK_WIDGET(window), group_name,
3515  G_ACTION_GROUP(simple_action_group));
3516 
3517  if (ui_filename)
3518  update_menu_model (window, ui_filename, ui_updates);
3519 }

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

2969 {
2970  auto window{static_cast<GncMainWindow*>(g_object_new (GNC_TYPE_MAIN_WINDOW, nullptr))};
2971  gtk_window_set_default_size(GTK_WINDOW(window), 800, 600);
2972 
2973  auto old_window = gnc_ui_get_main_window (nullptr);
2974  if (old_window)
2975  {
2976  gint width, height;
2977  gtk_window_get_size (old_window, &width, &height);
2978  gtk_window_resize (GTK_WINDOW (window), width, height);
2979  if ((gdk_window_get_state((gtk_widget_get_window (GTK_WIDGET(old_window))))
2980  & GDK_WINDOW_STATE_MAXIMIZED) != 0)
2981  {
2982  gtk_window_maximize (GTK_WINDOW (window));
2983  }
2984  }
2985  active_windows = g_list_append (active_windows, window);
2986  gnc_main_window_update_title(window);
2987  window->window_quitting = FALSE;
2988  window->just_plugin_prefs = FALSE;
2989 #ifdef MAC_INTEGRATION
2990  gnc_quartz_set_menu(window);
2991 #else
2992  gnc_main_window_update_all_menu_items();
2993 #endif
2994  gnc_engine_add_commit_error_callback( gnc_main_window_engine_commit_error_callback, window );
2995 
2996  // set up a callback for notebook navigation
2997  g_signal_connect (G_OBJECT(window), "key-press-event",
2998  G_CALLBACK(gnc_main_window_key_press_event),
2999  NULL);
3000 
3001  return window;
3002 }
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 3194 of file gnc-main-window.cpp.

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

5600 {
5601  ENTER("widget %p, page %p", widget, page);
5602  do_popup_menu(page, nullptr);
5603  LEAVE(" ");
5604  return TRUE;
5605 }
#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 839 of file gnc-main-window.cpp.

840 {
841  gint i, window_count;
842  GError *error = nullptr;
844 
845  /* We use the same struct for reading and for writing, so we cast
846  away the const. */
847  data.key_file = (GKeyFile *) keyfile;
848  window_count = g_key_file_get_integer(data.key_file, STATE_FILE_TOP,
849  WINDOW_COUNT, &error);
850  if (error)
851  {
852  g_warning("error reading group %s key %s: %s",
853  STATE_FILE_TOP, WINDOW_COUNT, error->message);
854  g_error_free(error);
855  LEAVE("can't read count");
856  return;
857  }
858 
859  /* Restore all state information on the open windows. Window
860  numbers in state file are 1-based. GList indices are 0-based. */
861  gnc_set_busy_cursor (nullptr, TRUE);
862  for (i = 0; i < window_count; i++)
863  {
864  data.window_num = i;
865  auto window{static_cast<GncMainWindow*>(g_list_nth_data(active_windows,
866  i))};
867  gnc_main_window_restore_window(window, &data);
868  }
869  gnc_unset_busy_cursor (nullptr);
870 
871  statusbar_notification_lastmodified();
872 }
#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 1038 of file gnc-main-window.cpp.

1039 {
1040  GncMainWindowSaveData data;
1041 
1042  /* Set up the iterator data structures */
1043  data.key_file = keyfile;
1044  data.window_num = 1;
1045  data.page_num = 1;
1046 
1047  g_key_file_set_integer(data.key_file,
1048  STATE_FILE_TOP, WINDOW_COUNT,
1049  g_list_length(active_windows));
1050  /* Dump all state information on the open windows */
1051  g_list_foreach(active_windows, (GFunc)gnc_main_window_save_window, &data);
1052 }

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

5503 {
5504  GncWindow *gncwin;
5505  gncwin = GNC_WINDOW(window);
5506  gnc_window_set_progressbar_window(gncwin);
5507 }

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

3665 {
3666  GncMainWindowPrivate *priv;
3667 
3668  g_return_if_fail (GNC_IS_MAIN_WINDOW(window));
3669 
3670  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3671 
3672  for (gint i = 0; action_names[i]; i++)
3673  {
3674  GtkWidget *tool_item = gnc_find_toolbar_item (priv->toolbar, action_names[i]);
3675  GtkWidget *menu_item = gnc_main_window_menu_find_menu_item (window, action_names[i]);
3676 
3677  if (menu_item)
3678  {
3679  PINFO("Found menu_item %p with action name '%s', seting vis to '%s'",
3680  menu_item, action_names[i], vis ? "true" : "false");
3681  gtk_widget_set_visible (menu_item, vis);
3682  }
3683  else
3684  PINFO("Did not find menu_item with action name '%s' to set vis '%s'",
3685  action_names[i], vis ? "true" : "false");
3686 
3687  if (tool_item)
3688  {
3689  PINFO("Found tool_item %p with action name '%s', seting vis to '%s'",
3690  tool_item, action_names[i], vis ? "true" : "false");
3691  gtk_widget_set_visible (tool_item, vis);
3692  }
3693  else
3694  PINFO("Did not find tool_item with action name '%s' to set vis '%s'",
3695  action_names[i], vis ? "true" : "false");
3696  }
3697 }
#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 3587 of file gnc-main-window.cpp.

3588 {
3589  GncMainWindowPrivate *priv;
3590 
3591  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), nullptr);
3592  g_return_val_if_fail (action_name != nullptr, nullptr);
3593 
3594  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3595 
3596  return gnc_find_toolbar_item (priv->toolbar, action_name);
3597 }
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 3528 of file gnc-main-window.cpp.

3530 {
3531  g_return_if_fail (GNC_IS_MAIN_WINDOW (window));
3532  g_return_if_fail (group_name != nullptr);
3533 
3534  gtk_widget_insert_action_group (GTK_WIDGET(window), group_name, nullptr);
3535 }

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

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

3640 {
3641  GncMainWindowPrivate *priv;
3642  gboolean found = false;
3643 
3644  g_return_val_if_fail (GNC_IS_MAIN_WINDOW(window), false);
3645  g_return_val_if_fail (action_name != nullptr, false);
3646  g_return_val_if_fail (label != nullptr, false);
3647 
3648  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
3649 
3650  found = gnc_menubar_model_update_item (priv->menubar_model, action_name,
3651  nullptr, _(label), nullptr, _(tooltip));
3652 
3653  // add tooltip redirect call backs
3655  priv->menubar_model,
3656  priv->statusbar);
3657 
3658  return found;
3659 }
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 5323 of file gnc-main-window.cpp.

5324 {
5325  GtkWidget *toplevel;
5326 
5327  if (!widget)
5328  return nullptr;
5329 
5330  toplevel = gtk_widget_get_toplevel (widget);
5331  if (toplevel && GTK_IS_WINDOW (toplevel))
5332  return GTK_WINDOW (toplevel);
5333  else
5334  return nullptr;
5335 }

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

5339 {
5340  GList *window;
5341 
5342  GtkWindow *toplevel = gnc_ui_get_gtk_window (widget);
5343  while (toplevel && !GNC_IS_MAIN_WINDOW (toplevel))
5344  toplevel = gtk_window_get_transient_for(toplevel);
5345 
5346  if (toplevel)
5347  return toplevel;
5348 
5349  for (window = active_windows; window; window = window->next)
5350  if (gtk_window_is_active (GTK_WINDOW (window->data)))
5351  return static_cast<GtkWindow*>(window->data);
5352 
5353  for (window = active_windows; window; window = window->next)
5354  if (gtk_widget_get_mapped (GTK_WIDGET(window->data)))
5355  return static_cast<GtkWindow*>(window->data);
5356 
5357  return nullptr;
5358 }
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 2401 of file gnc-main-window.cpp.

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

2298 {
2299  GtkWidget *tab_widget;
2300 
2301  ENTER(" ");
2302 
2303  if ((long_name_in == nullptr) || (*long_name_in == '\0'))
2304  {
2305  LEAVE("no string");
2306  return;
2307  }
2308  gchar *long_name = g_strstrip (g_strdup (long_name_in));
2309  const gchar *old_long_name = gnc_plugin_page_get_page_long_name (page);
2310 
2311  /* Optimization, if the long_name hasn't changed, don't update X. */
2312  if (*long_name == '\0' || strcmp (long_name, old_long_name) == 0)
2313  {
2314  g_free (long_name);
2315  LEAVE("empty string or name unchanged");
2316  return;
2317  }
2318 
2319  gnc_plugin_page_set_page_long_name (page, long_name);
2320 
2321  GncMainWindow *window = GNC_MAIN_WINDOW(page->window);
2322  if (!window)
2323  {
2324  g_free (long_name);
2325  LEAVE("no window widget available");
2326  return;
2327  }
2328 
2329  /* Update the notebook tab tooltip */
2330  if (main_window_find_tab_widget (window, page, &tab_widget))
2331  gtk_widget_set_tooltip_text (tab_widget, long_name);
2332 
2333  g_free (long_name);
2334  LEAVE("");
2335 }
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 2338 of file gnc-main-window.cpp.

2340 {
2341  GncMainWindow *window;
2342  GncMainWindowPrivate *priv;
2343  GtkWidget *label, *entry;
2344  gchar *name;
2345  TabWidth *tw;
2346 
2347  ENTER(" ");
2348 
2349  if ((name_in == nullptr) || (*name_in == '\0'))
2350  {
2351  LEAVE("no string");
2352  return;
2353  }
2354  name = g_strstrip(g_strdup(name_in));
2355 
2356  /* Optimization, if the name hasn't changed, don't update X. */
2357  if (*name == '\0' || 0 == strcmp(name, gnc_plugin_page_get_page_name(page)))
2358  {
2359  g_free(name);
2360  LEAVE("empty string or name unchanged");
2361  return;
2362  }
2363 
2364  /* Update the plugin */
2365  gnc_plugin_page_set_page_name(page, name);
2366 
2367  /* Update the notebook tab */
2368  window = GNC_MAIN_WINDOW(page->window);
2369  if (!window)
2370  {
2371  g_free(name);
2372  LEAVE("no window widget available");
2373  return;
2374  }
2375 
2376  if (main_window_find_tab_items(window, page, &label, &entry))
2377  gtk_label_set_text(GTK_LABEL(label), name);
2378 
2379  /* Adjust the label width for new text */
2380  tw = populate_tab_width_struct ();
2381  gnc_main_window_update_tab_width_one_page (page, tw);
2382  g_free (tw);
2383 
2384  /* Update the notebook menu */
2385  if (page->notebook_page)
2386  {
2387  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
2388  label = gtk_notebook_get_menu_label (GTK_NOTEBOOK(priv->notebook),
2389  page->notebook_page);
2390  gtk_label_set_text(GTK_LABEL(label), name);
2391  }
2392 
2393  /* Force an update of the window title */
2394  gnc_main_window_update_title(window);
2395  g_free(name);
2396  LEAVE("done");
2397 }
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 2475 of file gnc-main-window.cpp.

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