Commit 69f41f91 authored by Andreas J. Guelzow 's avatar Andreas J. Guelzow

Turn view properties dialog into instant-apply dialog.

2009-11-11  Andreas J. Guelzow <aguelzow@pyrshep.ca>

	* dialog-doc-metadata.c (dialog_doc_meta_data_add_item): fix wrong
	  key
	* dialog-workbook-attr.c (AttrState): remove unneeded fields and
	  add 2 new fields
	(cb_page_select): deleted
	(cb_widget_changed ): rewritten into instant-apply
	(cb_attr_dialog_dialog_apply): deleted
	(cb_attr_dialog_dialog_ok): deleted
	(attr_dialog_init_toggle): rewritten
	(attr_dialog_init_widget_page): new
	(attr_dialog_init_autocompletion_page): new
	(attr_dialog_init_protection_page): new
	(attr_dialog_init_view_page): deleted
	(attr_dialog_add_item): new
	(attr_dialog_select_page_search): new
	(attr_dialog_impl): set up page selector
	* preferences.glade: minor border adjstment
	* workbook-attr.glade: major adjustments
parent 6559e32c
......@@ -2,7 +2,8 @@ Gnumeric 1.9.16
Andreas:
* Clarify distinction between Document and View Properties.
* Sort the translated labels in the prference dialog.
* Sort the translated labels in the preference dialog.
* Turn view properties dialog into instant-apply dialog.
Jean:
* Fix cursor and cell edition on dark backgrounds. [#600656]
......
......@@ -89,8 +89,9 @@
</menu>
<menuitem action="ViewStatusbar"/>
<menuitem action="ViewFullScreen"/>
<menuitem action="ViewZoom"/>
<menuitem action="FormatWorkbook"/>
<separator/>
<menuitem action="ViewZoom"/>
</menu>
<menu name="Insert" action="MenuInsert">
<menuitem action="InsertCells"/>
......@@ -144,6 +145,8 @@
<menuitem action="SheetHideColHeader"/>
<menuitem action="SheetHideRowHeader"/>
<menuitem action="SheetDirection"/>
<separator/>
<menuitem action="ViewZoom"/>
</menu>
<menuitem action="FormatAuto"/>
</menu>
......
......@@ -88,8 +88,9 @@
</menu>
<menuitem action="ViewStatusbar"/>
<menuitem action="ViewFullScreen"/>
<menuitem action="ViewZoom"/>
<menuitem action="FormatWorkbook"/>
<separator/>
<menuitem action="ViewZoom"/>
</menu>
<menu name="Insert" action="MenuInsert">
<menuitem action="InsertCells"/>
......@@ -143,6 +144,8 @@
<menuitem action="SheetHideColHeader"/>
<menuitem action="SheetHideRowHeader"/>
<menuitem action="SheetDirection"/>
<separator/>
<menuitem action="ViewZoom"/>
</menu>
<menuitem action="FormatAuto"/>
</menu>
......
......@@ -94,10 +94,11 @@
</menu>
<menuitem action="ViewStatusbar"/>
<menuitem action="ViewFullScreen"/>
<menuitem action="FormatWorkbook"/>
<separator/>
<menuitem action="ViewZoom"/>
<menuitem action="ViewZoomIn"/>
<menuitem action="ViewZoomOut"/>
<menuitem action="FormatWorkbook"/>
</menu>
<menu name="Insert" action="MenuInsert">
<menuitem action="InsertCells"/>
......@@ -150,6 +151,8 @@
<menuitem action="SheetHideGridlines"/>
<menuitem action="SheetHideColHeader"/>
<menuitem action="SheetHideRowHeader"/>
<separator/>
<menuitem action="ViewZoom"/>
</menu>
<menuitem action="FormatAuto"/>
</menu>
......
2009-11-11 Andreas J. Guelzow <aguelzow@pyrshep.ca>
* dialog-doc-metadata.c (dialog_doc_meta_data_add_item): fix wrong
key
* dialog-workbook-attr.c (AttrState): remove unneeded fields and
add 2 new fields
(cb_page_select): deleted
(cb_widget_changed ): rewritten into instant-apply
(cb_attr_dialog_dialog_apply): deleted
(cb_attr_dialog_dialog_ok): deleted
(attr_dialog_init_toggle): rewritten
(attr_dialog_init_widget_page): new
(attr_dialog_init_autocompletion_page): new
(attr_dialog_init_protection_page): new
(attr_dialog_init_view_page): deleted
(attr_dialog_add_item): new
(attr_dialog_select_page_search): new
(attr_dialog_impl): set up page selector
* preferences.glade: minor border adjstment
* workbook-attr.glade: major adjustments
2009-11-11 Andreas J. Guelzow <aguelzow@pyrshep.ca>
* dialog-doc-metadata.c: use more appropriate icon for statistics
......
......@@ -1568,7 +1568,7 @@ dialog_doc_meta_data_add_item (DialogDocMetaData *state, char const *page_name,
if (icon_name != NULL)
icon = gtk_widget_render_icon (state->dialog, icon_name,
GTK_ICON_SIZE_MENU,
"Gnumeric-Preference-Dialog");
DOC_METADATA_KEY);
if ((parent_path != NULL) && gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (state->store),
&parent, parent_path))
gtk_tree_store_append (state->store, &iter, &parent);
......
......@@ -34,6 +34,13 @@
#define WORKBOOK_ATTRIBUTE_KEY "workbook-attribute-dialog"
enum {
ITEM_ICON,
ITEM_NAME,
PAGE_NUMBER,
NUM_COLUMNS
};
typedef struct {
GladeXML *gui;
GtkWidget *dialog;
......@@ -46,20 +53,8 @@ typedef struct {
WorkbookView *wbv;
WBCGtk *wbcg;
struct {
GtkToggleButton *show_hsb;
GtkToggleButton *show_vsb;
GtkToggleButton *show_tabs;
GtkToggleButton *autocomplete;
GtkToggleButton *is_protected;
} view;
struct {
gboolean show_hsb;
gboolean show_vsb;
gboolean show_tabs;
gboolean autocomplete;
gboolean is_protected;
} old;
GtkTreeStore *store;
GtkTreeView *tview;
} AttrState;
/*****************************************************************************/
......@@ -69,56 +64,17 @@ typedef struct {
* invocations */
static int attr_dialog_page = 0;
/*
* Callback routine to help remember which attribute tab was selected
* between dialog invocations.
*/
static void
cb_page_select (G_GNUC_UNUSED GtkNotebook *notebook,
G_GNUC_UNUSED GtkNotebookPage *page,
gint page_num, AttrState *state)
{
if (!state->destroying)
attr_dialog_page = page_num;
}
/*****************************************************************************/
static void
cb_widget_changed (G_GNUC_UNUSED GtkWidget *widget, AttrState *state)
cb_widget_changed (GtkWidget *widget, AttrState *state)
{
gboolean changed;
changed =
!((gtk_toggle_button_get_active (state->view.show_hsb) == state->old.show_hsb) &&
(gtk_toggle_button_get_active (state->view.show_vsb) == state->old.show_vsb) &&
(gtk_toggle_button_get_active (state->view.show_tabs) == state->old.show_tabs) &&
(gtk_toggle_button_get_active (state->view.autocomplete) == state->old.autocomplete) &&
(gtk_toggle_button_get_active (state->view.is_protected) == state->old.is_protected));
gtk_widget_set_sensitive (state->ok_button, changed);
gtk_widget_set_sensitive (state->apply_button, changed);
}
char const *key;
/* Handler for the apply button */
static void
cb_attr_dialog_dialog_apply (G_GNUC_UNUSED GtkWidget *button,
AttrState *state)
{
state->old.show_hsb = gtk_toggle_button_get_active (state->view.show_hsb);
state->old.show_vsb = gtk_toggle_button_get_active (state->view.show_vsb);
state->old.show_tabs = gtk_toggle_button_get_active (state->view.show_tabs);
state->old.autocomplete = gtk_toggle_button_get_active (state->view.autocomplete);
state->old.is_protected = gtk_toggle_button_get_active (state->view.is_protected);
g_object_set (G_OBJECT (state->wbv),
"show-horizontal-scrollbar", state->old.show_hsb,
"show-vertical-scrollbar", state->old.show_vsb,
"show-notebook-tabs", state->old.show_tabs,
"do-auto-completion", state->old.autocomplete,
"protected", state->old.is_protected,
key = g_object_get_data (G_OBJECT (widget), "GNUMERIC:VIEWPROPERTY");
g_object_set (G_OBJECT (state->wbv),
key, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)),
NULL);
cb_widget_changed (NULL, state);
}
static void
......@@ -129,13 +85,6 @@ cb_attr_dialog_dialog_close (G_GNUC_UNUSED GtkWidget *button,
gtk_widget_destroy (state->dialog);
}
static void
cb_attr_dialog_dialog_ok (GtkWidget *button, AttrState *state)
{
cb_attr_dialog_dialog_apply (button, state);
cb_attr_dialog_dialog_close (button, state);
}
static void
cb_attr_dialog_dialog_destroy (AttrState *state)
{
......@@ -150,55 +99,149 @@ cb_attr_dialog_dialog_destroy (AttrState *state)
/*****************************************************************************/
static GtkToggleButton *
attr_dialog_init_toggle (AttrState *state, char const *name, gboolean val,
gboolean *storage)
static void
attr_dialog_init_toggle (AttrState *state, char const *name, char const *key)
{
GtkWidget *w = glade_xml_get_widget (state->gui, name);
gboolean val = FALSE;
g_object_get (G_OBJECT (state->wbv), key, &val, NULL);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), val);
g_signal_connect (G_OBJECT (w),
"toggled",
G_CALLBACK (cb_widget_changed), state);
*storage = val;
g_object_set_data (G_OBJECT (w), "GNUMERIC:VIEWPROPERTY", (gpointer) key);
return;
}
return GTK_TOGGLE_BUTTON (w);
static void
attr_dialog_init_widget_page (AttrState *state)
{
attr_dialog_init_toggle
(state,
"WorkbookView::show_horizontal_scrollbar", "show_horizontal_scrollbar");
attr_dialog_init_toggle
(state,
"WorkbookView::show_vertical_scrollbar", "show_vertical_scrollbar");
attr_dialog_init_toggle
(state,
"WorkbookView::show_notebook_tabs", "show_notebook_tabs");
}
static GtkEntry *
attr_dialog_init_entry (AttrState *state, char const *name, char const *val)
static void
attr_dialog_init_autocompletion_page (AttrState *state)
{
GtkWidget *w = glade_xml_get_widget (state->gui, name);
gtk_entry_set_text (GTK_ENTRY (w), val);
g_signal_connect (G_OBJECT (w),
"changed",
G_CALLBACK (cb_widget_changed), state);
gnumeric_editable_enters (GTK_WINDOW (state->dialog), w);
return GTK_ENTRY (w);
attr_dialog_init_toggle
(state,
"WorkbookView::do_auto_completion", "do_auto_completion");
}
static void
attr_dialog_init_protection_page (AttrState *state)
{
attr_dialog_init_toggle
(state,
"WorkbookView::workbook_protected", "protected");
}
/*****************************************************************************/
static void
attr_dialog_add_item (AttrState *state, char const *page_name,
char const *icon_name,
int page, char const* parent_path)
{
GtkTreeIter iter, parent;
GdkPixbuf * icon = NULL;
if (icon_name != NULL)
icon = gtk_widget_render_icon (state->dialog, icon_name,
GTK_ICON_SIZE_MENU,
WORKBOOK_ATTRIBUTE_KEY);
if ((parent_path != NULL) && gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (state->store),
&parent, parent_path))
gtk_tree_store_append (state->store, &iter, &parent);
else
gtk_tree_store_append (state->store, &iter, NULL);
gtk_tree_store_set (state->store, &iter,
ITEM_ICON, icon,
ITEM_NAME, _(page_name),
PAGE_NUMBER, page,
-1);
if (icon != NULL)
g_object_unref (icon);
}
typedef struct {
char const *page_name;
char const *icon_name;
char const *parent_path;
int const page;
void (*page_initializer) (AttrState *state);
} page_info_t;
static page_info_t const page_info[] = {
{N_("Widgets"), "Gnumeric_ObjectScrollbar", NULL, 0, &attr_dialog_init_widget_page },
{N_("Protection"), GTK_STOCK_DIALOG_AUTHENTICATION, NULL, 1 ,&attr_dialog_init_protection_page },
{N_("Auto Completion"), NULL, NULL, 2 ,&attr_dialog_init_autocompletion_page },
{NULL, NULL, NULL, -1, NULL},
};
typedef struct {
int const page;
GtkTreePath *path;
} page_search_t;
static gboolean
attr_dialog_select_page_search (GtkTreeModel *model,
GtkTreePath *path,
GtkTreeIter *iter,
page_search_t *pst)
{
int page;
gtk_tree_model_get (model, iter, PAGE_NUMBER, &page, -1);
if (page == pst->page) {
pst->path = gtk_tree_path_copy (path);
return TRUE;
} else
return FALSE;
}
static void
attr_dialog_init_view_page (AttrState *state)
attr_dialog_select_page (AttrState *state, int page)
{
state->view.show_hsb = attr_dialog_init_toggle (state,
"WorkbookView::show_horizontal_scrollbar",
state->wbv->show_horizontal_scrollbar,
&state->old.show_hsb);
state->view.show_vsb = attr_dialog_init_toggle (state,
"WorkbookView::show_vertical_scrollbar",
state->wbv->show_vertical_scrollbar,
&state->old.show_vsb);
state->view.show_tabs = attr_dialog_init_toggle (state,
"WorkbookView::show_notebook_tabs",
state->wbv->show_notebook_tabs,
&state->old.show_tabs);
state->view.autocomplete = attr_dialog_init_toggle (state,
"WorkbookView::do_auto_completion",
state->wbv->do_auto_completion,
&state->old.autocomplete);
state->view.is_protected = attr_dialog_init_toggle (state,
"WorkbookView::workbook_protected",
state->wbv->is_protected,
&state->old.is_protected);
page_search_t pst = {page, NULL};
if (page >= 0)
gtk_tree_model_foreach (GTK_TREE_MODEL (state->store),
(GtkTreeModelForeachFunc) attr_dialog_select_page_search,
&pst);
if (pst.path == NULL)
pst.path = gtk_tree_path_new_from_string ("0");
if (pst.path != NULL) {
gtk_tree_view_set_cursor (state->tview, pst.path, NULL, FALSE);
gtk_tree_view_expand_row (state->tview, pst.path, TRUE);
gtk_tree_path_free (pst.path);
}
}
static void
cb_attr_dialog_selection_changed (GtkTreeSelection *selection,
AttrState *state)
{
GtkTreeIter iter;
if (gtk_tree_selection_get_selected (selection, NULL, &iter)) {
gtk_tree_model_get (GTK_TREE_MODEL (state->store), &iter,
PAGE_NUMBER, &attr_dialog_page,
-1);
gtk_notebook_set_current_page (GTK_NOTEBOOK (state->notebook), attr_dialog_page);
} else
attr_dialog_select_page (state, attr_dialog_page);
}
/*****************************************************************************/
......@@ -207,6 +250,10 @@ static void
attr_dialog_impl (AttrState *state)
{
GtkWidget *dialog = glade_xml_get_widget (state->gui, "WorkbookAttr");
GtkTreeViewColumn *column;
GtkTreeSelection *selection;
int i;
g_return_if_fail (dialog != NULL);
/* Initialize */
......@@ -214,29 +261,42 @@ attr_dialog_impl (AttrState *state)
state->notebook = glade_xml_get_widget (state->gui, "notebook");
state->destroying = FALSE;
attr_dialog_init_view_page (state);
state->tview = GTK_TREE_VIEW(glade_xml_get_widget (state->gui, "itemlist"));
state->store = gtk_tree_store_new (NUM_COLUMNS,
GDK_TYPE_PIXBUF,
G_TYPE_STRING,
G_TYPE_INT);
gtk_tree_view_set_model (state->tview, GTK_TREE_MODEL(state->store));
selection = gtk_tree_view_get_selection (state->tview);
gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
column = gtk_tree_view_column_new_with_attributes ("",
gtk_cell_renderer_pixbuf_new (),
"pixbuf", ITEM_ICON,
NULL);
gtk_tree_view_append_column (state->tview, column);
column = gtk_tree_view_column_new_with_attributes ("",
gtk_cell_renderer_text_new (),
"text", ITEM_NAME,
NULL);
gtk_tree_view_append_column (state->tview, column);
gtk_tree_view_set_expander_column (state->tview, column);
g_signal_connect (selection,
"changed",
G_CALLBACK (cb_attr_dialog_selection_changed), state);
for (i = 0; page_info[i].page > -1; i++) {
const page_info_t *this_page = &page_info[i];
this_page->page_initializer (state);
attr_dialog_add_item (state, this_page->page_name, this_page->icon_name,
this_page->page, this_page->parent_path);
}
/* Select the same page the last invocation used */
gtk_notebook_set_current_page (
GTK_NOTEBOOK (state->notebook),
attr_dialog_page);
g_signal_connect (
G_OBJECT (state->notebook),
"switch_page",
G_CALLBACK (cb_page_select), state);
state->ok_button = glade_xml_get_widget (state->gui, "ok_button");
g_signal_connect (G_OBJECT (state->ok_button),
"clicked",
G_CALLBACK (cb_attr_dialog_dialog_ok), state);
state->apply_button = glade_xml_get_widget (state->gui, "apply_button");
g_signal_connect (G_OBJECT (state->apply_button),
"clicked",
G_CALLBACK (cb_attr_dialog_dialog_apply), state);
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (state->store), ITEM_NAME, GTK_SORT_ASCENDING);
g_signal_connect (G_OBJECT (glade_xml_get_widget (state->gui, "close_button")),
"clicked",
G_CALLBACK (cb_attr_dialog_dialog_close), state);
cb_widget_changed (NULL, state);
gnumeric_init_help_button (
glade_xml_get_widget (state->gui, "help_button"),
......@@ -275,4 +335,7 @@ dialog_workbook_attr (WBCGtk *wbcg)
state->wb = wb_control_get_workbook (WORKBOOK_CONTROL (wbcg));
attr_dialog_impl (state);
/* Select the same page the last invocation used */
attr_dialog_select_page (state, attr_dialog_page);
}
......@@ -20,6 +20,7 @@
<widget class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="spacing">12</property>
<property name="border_width">5</property>
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
......
......@@ -9,169 +9,209 @@
<property name="visible">True</property>
<property name="spacing">6</property>
<child>
<widget class="GtkNotebook" id="notebook">
<widget class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="border_width">5</property>
<property name="spacing">12</property>
<child>
<widget class="GtkTable" id="table1">
<widget class="GtkScrolledWindow" id="scrolledwindow1">
<property name="width_request">160</property>
<property name="visible">True</property>
<property name="border_width">12</property>
<property name="n_rows">3</property>
<property name="n_columns">2</property>
<property name="column_spacing">12</property>
<property name="row_spacing">6</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">never</property>
<property name="vscrollbar_policy">automatic</property>
<property name="shadow_type">in</property>
<child>
<widget class="GtkCheckButton" id="WorkbookView::do_auto_completion">
<property name="label" translatable="yes">A_uto Complete Text in Cells</property>
<widget class="GtkTreeView" id="itemlist">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
<property name="headers_visible">False</property>
<property name="headers_clickable">False</property>
</widget>
<packing>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkNotebook" id="notebook">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="show_tabs">False</property>
<property name="show_border">False</property>
<child>
<widget class="GtkCheckButton" id="WorkbookView::show_notebook_tabs">
<property name="label" translatable="yes">Notebook _Tabs for Sheets</property>
<widget class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
<child>
<widget class="GtkCheckButton" id="WorkbookView::show_notebook_tabs">
<property name="label" translatable="yes">Notebook _Tabs for Sheets</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="WorkbookView::show_horizontal_scrollbar">
<property name="label" translatable="yes">_Horizontal Scrollbar</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="WorkbookView::show_vertical_scrollbar">
<property name="label" translatable="yes">_Vertical Scrollbar</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">2</property>
</packing>
</child>
</widget>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="WorkbookView::show_horizontal_scrollbar">
<property name="label" translatable="yes">_Horizontal Scrollbar</property>
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_focus">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
<property name="label" translatable="yes">View</property>
<property name="justify">center</property>
</widget>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options"></property>
<property name="tab_fill">False</property>
<property name="type">tab</property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="WorkbookView::show_vertical_scrollbar">
<property name="label" translatable="yes">_Vertical Scrollbar</property>
<widget class="GtkTable" id="table2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
<property name="n_rows">2</property>
<property name="n_columns">2</property>
<property name="column_spacing">12</property>
<property name="row_spacing">6</property>
<child>
<widget class="GtkCheckButton" id="WorkbookView::workbook_protected">
<property name="label" translatable="yes">_Protect Workbook</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="password_entry">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="tooltip" translatable="yes">Unimplementented</property>
<property name="visibility">False</property>
<property name="invisible_char">&#x2022;</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">Pa_ssword:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">password_entry</property>
</widget>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options"></property>
<property name="position">1</property>
</packing>
</child>
</widget>
</child>
<child>
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes">View</property>
<property name="justify">center</property>
</widget>
<packing>
<property name="tab_fill">False</property>
<property name="type">tab</property>
</packing>
</child>
<child>
<widget class="GtkTable" id="table2">
<property name="visible">True</property>
<property name="border_width">12</property>
<property name="n_rows">2</property>
<property name="n_columns">2</property>
<property name="column_spacing">12</property>
<property name="row_spacing">6</property>
<child>
<widget class="GtkCheckButton" id="WorkbookView::workbook_protected">
<property name=