Change register page icon to a padlock if read only

This commit is contained in:
Robert Fewell 2020-12-06 13:30:08 +00:00
parent dced40cf6a
commit 0ee7ebbc43
3 changed files with 105 additions and 0 deletions

View File

@ -2442,6 +2442,76 @@ main_window_update_page_color (GncPluginPage *page,
}
void
main_window_update_page_set_read_only_icon (GncPluginPage *page,
gboolean read_only)
{
GncMainWindow *window;
GncMainWindowPrivate *priv;
GtkWidget *tab_widget;
GtkWidget *image = NULL;
GList *children;
gchar *image_name = NULL;
const gchar *icon_name;
ENTER(" ");
window = GNC_MAIN_WINDOW(page->window);
/* Get the notebook tab widget */
main_window_find_tab_widget (window, page, &tab_widget);
priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
if (!tab_widget)
{
LEAVE("no tab widget");
return;
}
if (GTK_IS_EVENT_BOX(tab_widget))
tab_widget = gtk_bin_get_child (GTK_BIN(tab_widget));
/* For each, walk the list of container children to get image widget */
for (children = gtk_container_get_children (GTK_CONTAINER(tab_widget));
children; children = children->next)
{
GtkWidget *widget = children->data;
if (GTK_IS_IMAGE(widget))
image = widget;
}
if (!image)
{
LEAVE("no image to replace");
return;
}
g_object_get (image, "icon-name", &image_name, NULL);
if (read_only)
icon_name = "changes-prevent-symbolic";
else
icon_name = GNC_PLUGIN_PAGE_GET_CLASS(page)->tab_icon;
if (g_strcmp0 (icon_name, image_name) == 0)
{
LEAVE("page icon the same, no need to replace");
g_free (image_name);
return;
}
gtk_container_remove (GTK_CONTAINER(tab_widget), image);
image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
gtk_widget_show (image);
gtk_container_add (GTK_CONTAINER(tab_widget), image);
gtk_widget_set_margin_start (GTK_WIDGET(image), 5);
gtk_box_reorder_child (GTK_BOX(tab_widget), image, 0);
g_free (image_name);
LEAVE("done");
}
static void
gnc_main_window_tab_entry_activate (GtkWidget *entry,
GncPluginPage *page)

View File

@ -185,6 +185,15 @@ void
main_window_update_page_color (GncPluginPage *page,
const gchar *color_in);
/** Update the icon on the page tabs in the main window.
*
* @param page The page to be updated.
* @param read_only If set a padlock icon will be displayed
* for the page tab icon if it had one.
*/
void
main_window_update_page_set_read_only_icon (GncPluginPage *page,
gboolean read_only);
/** Manually add a set of actions to the specified window. Plugins
* whose user interface is not hard coded (e.g. the menu-additions *

View File

@ -1126,6 +1126,7 @@ gnc_plugin_page_register_ui_update (gpointer various,
GtkAction* action = gnc_plugin_page_get_action (GNC_PLUGIN_PAGE (page), *iter);
gtk_action_set_sensitive (action, TRUE);
}
main_window_update_page_set_read_only_icon (GNC_PLUGIN_PAGE(page), FALSE);
if (trans)
read_only = xaccTransIsReadonlyByPostedDate (trans);
@ -1209,6 +1210,7 @@ gnc_plugin_page_register_ui_update (gpointer various,
GtkAction* action = gnc_plugin_page_get_action (GNC_PLUGIN_PAGE (page), *iter);
gtk_action_set_sensitive (action, FALSE);
}
main_window_update_page_set_read_only_icon (GNC_PLUGIN_PAGE(page), TRUE);
}
/* Modifying action descriptions based on cursor class */
@ -3512,6 +3514,27 @@ gnc_plugin_page_register_set_filter_tooltip (GncPluginPageRegister* page)
LEAVE (" ");
}
static void
gnc_plugin_page_register_update_page_icon (GncPluginPage* plugin_page)
{
GncPluginPageRegisterPrivate* priv;
gboolean read_only;
g_return_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page));
priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE (plugin_page);
if (qof_book_is_readonly (gnc_get_current_book()) ||
gnc_split_reg_get_read_only (priv->gsr))
read_only = TRUE;
else
read_only = FALSE;
main_window_update_page_set_read_only_icon (GNC_PLUGIN_PAGE(plugin_page),
read_only);
}
/************************************************************/
/* Report Helper Functions */
/************************************************************/
@ -5393,6 +5416,9 @@ gnc_plugin_page_register_event_handler (QofInstance* entity,
main_window_update_page_name (GNC_PLUGIN_PAGE (page), label);
color = gnc_plugin_page_register_get_tab_color (GNC_PLUGIN_PAGE (page));
main_window_update_page_color (GNC_PLUGIN_PAGE (page), color);
// update page icon if read only registers
gnc_plugin_page_register_update_page_icon (GNC_PLUGIN_PAGE (page));
g_free (color);
g_free (label);
}