Index: plugins/excel/ms-excel-write.c =================================================================== RCS file: /cvs/gnome/gnumeric/plugins/excel/ms-excel-write.c,v retrieving revision 1.142 diff -u -p -r1.142 ms-excel-write.c --- plugins/excel/ms-excel-write.c 2002/01/20 17:43:06 1.142 +++ plugins/excel/ms-excel-write.c 2002/02/20 18:38:45 @@ -2060,7 +2060,7 @@ log_xf_data (ExcelWorkbook *wb, BiffXFDa * See S59E1E.HTM * * All BIFF V7 features are implemented, except: - * - hidden and locked - not yet in gnumeric. + * - hidden - not yet in gnumeric. * * Apart from font, the style elements we retrieve do *not* need to be unrefed. * Index: src/cell-draw.c =================================================================== RCS file: /cvs/gnome/gnumeric/src/cell-draw.c,v retrieving revision 1.76 diff -u -p -r1.76 cell-draw.c --- src/cell-draw.c 2001/12/21 23:50:47 1.76 +++ src/cell-draw.c 2002/02/20 18:38:46 @@ -162,7 +162,8 @@ cell_split_text (GdkFont *font, char con void cell_draw (Cell const *cell, MStyle const *mstyle, GdkGC *gc, GdkDrawable *drawable, - int x1, int y1, int width, int height, int h_center) + int x1, int y1, int width, int height, int h_center, + gboolean is_workbook_protected) { StyleFont *style_font; GdkFont *font; @@ -259,6 +260,17 @@ cell_draw (Cell const *cell, MStyle cons fore = mstyle_get_color (mstyle, MSTYLE_COLOR_FORE); g_return_if_fail (fore != NULL); /* Be extra careful */ gdk_gc_set_foreground (gc, &fore->color); + /* grey out the color if the cell is locked */ + if (is_workbook_protected && mstyle_get_content_locked(mstyle)) { + StyleColor *back = mstyle_get_color (mstyle, MSTYLE_COLOR_BACK); + /* compute alpha blend of foreground and background colors. */ + StyleColor *alpha = style_color_new + (fore->red + (back->red - fore->red)/2, + fore->green + (back->green - fore->green)/2, + fore->blue + (back->blue - fore->blue)/2); + gdk_gc_set_foreground (gc, &alpha->color); + style_color_unref(alpha); + } /* Handle underlining and strikethrough */ switch (mstyle_get_font_uline (mstyle)) { Index: src/cell-draw.h =================================================================== RCS file: /cvs/gnome/gnumeric/src/cell-draw.h,v retrieving revision 1.12 diff -u -p -r1.12 cell-draw.h --- src/cell-draw.h 2001/12/21 23:50:47 1.12 +++ src/cell-draw.h 2002/02/20 18:38:46 @@ -6,6 +6,7 @@ void cell_draw (Cell const *cell, MStyle const *mstyle, GdkGC *gc, GdkDrawable *drawable, - int x, int y, int height, int width, int h_center); + int x, int y, int height, int width, int h_center, + gboolean is_workbook_protected); #endif /* GNUMERIC_CELL_DRAW_H */ Index: src/gnumeric-canvas.c =================================================================== RCS file: /cvs/gnome/gnumeric/src/gnumeric-canvas.c,v retrieving revision 1.268 diff -u -p -r1.268 gnumeric-canvas.c --- src/gnumeric-canvas.c 2001/12/29 19:08:53 1.268 +++ src/gnumeric-canvas.c 2002/02/20 18:38:46 @@ -283,7 +283,8 @@ gnm_canvas_key_mode_sheet (GnumericCanva return TRUE; case GDK_F2: - wbcg_edit_start (wbcg, FALSE, FALSE); + if (!wbcg_edit_start (wbcg, FALSE, FALSE)) + return FALSE; /* attempt to edit failed */ /* fall down */ case GDK_BackSpace: @@ -303,7 +304,8 @@ gnm_canvas_key_mode_sheet (GnumericCanva if (event->length == 0) return FALSE; - wbcg_edit_start (wbcg, TRUE, TRUE); + if (!wbcg_edit_start (wbcg, TRUE, TRUE)) + return FALSE; /* attempt to edit failed */ } scg_rangesel_stop (gcanvas->simple.scg, FALSE); Index: src/item-grid.c =================================================================== RCS file: /cvs/gnome/gnumeric/src/item-grid.c,v retrieving revision 1.276 diff -u -p -r1.276 item-grid.c --- src/item-grid.c 2002/01/23 06:50:55 1.276 +++ src/item-grid.c 2002/02/20 18:38:46 @@ -170,6 +170,8 @@ item_grid_draw_merged_range (GdkDrawable GdkGC *gc = ig->gc.empty; Sheet const *sheet = ((SheetControl *) ig->scg)->sheet; Cell const *cell = sheet_cell_get (sheet, range->start.col, range->start.row); + gboolean protected = + wb_control_view (sc_wbc ((SheetControl *) ig->scg))->protected; /* load style from corner which may not be visible */ MStyle const *style = sheet_style_get (sheet, range->start.col, range->start.row); @@ -225,7 +227,8 @@ item_grid_draw_merged_range (GdkDrawable cell_draw (cell, style, ig->gc.cell, drawable, l, t, r - l - (ci->margin_b + ci->margin_a + 1), - b - t - (ri->margin_b + ri->margin_a + 1), -1); + b - t - (ri->margin_b + ri->margin_a + 1), -1, + protected); } style_border_draw_diag (style, drawable, l, t, r, b); } @@ -269,6 +272,8 @@ item_grid_draw (GnomeCanvasItem *item, G Cell const * const edit_cell = gcanvas->simple.scg->wbcg->editing_cell; ItemGrid *ig = ITEM_GRID (item); ColRowInfo const *ri = NULL, *next_ri = NULL; + gboolean protected = + wb_control_view (sc_wbc ((SheetControl *) gcanvas->simple.scg))->protected; /* To ensure that far and near borders get drawn we pretend to draw +-2 * pixels around the target area which would include the surrounding @@ -517,7 +522,8 @@ item_grid_draw (GnomeCanvasItem *item, G if (!cell_is_blank (cell) && cell != edit_cell) cell_draw (cell, style, ig->gc.cell, drawable, - x, y, -1, -1, -1); + x, y, -1, -1, -1, + protected); /* Only draw spaning cells after all the backgrounds * that we are goign to draw have been drawn. No need @@ -563,7 +569,8 @@ item_grid_draw (GnomeCanvasItem *item, G cell_draw (cell, style, ig->gc.cell, drawable, - real_x, y, tmp_width, -1, center_offset); + real_x, y, tmp_width, -1, center_offset, + protected); } else if (col != span->left) sr.vertical [col] = NULL; Index: src/preview-grid.c =================================================================== RCS file: /cvs/gnome/gnumeric/src/preview-grid.c,v retrieving revision 1.24 diff -u -p -r1.24 preview-grid.c --- src/preview-grid.c 2001/12/21 23:50:53 1.24 +++ src/preview-grid.c 2002/02/20 18:38:46 @@ -534,7 +534,7 @@ preview_grid_draw (GnomeCanvasItem *item if (!cell_is_blank (cell)) cell_draw (cell, style, pg->gc.cell, drawable, - x, y, -1, -1, -1); + x, y, -1, -1, -1, FALSE); pg_destruct_cell (cell); x += colwidths [col]; Index: src/workbook-control-gui.c =================================================================== RCS file: /cvs/gnome/gnumeric/src/workbook-control-gui.c,v retrieving revision 1.220.2.2 diff -u -p -r1.220.2.2 workbook-control-gui.c --- src/workbook-control-gui.c 2002/01/29 01:40:43 1.220.2.2 +++ src/workbook-control-gui.c 2002/02/20 18:38:46 @@ -299,7 +299,7 @@ static void cb_prefs_update (gpointer key, gpointer value, gpointer user_data) { Sheet *sheet = value; - sheet_adjust_preferences (sheet, FALSE, FALSE); + sheet_adjust_preferences (sheet, TRUE, FALSE); } static void @@ -2443,11 +2443,13 @@ cb_autosum (GtkWidget *widget, WorkbookC entry = GTK_ENTRY (wbcg_get_entry (wbcg)); txt = gtk_entry_get_text (entry); if (strncmp (txt, "=sum(", 5)) { - wbcg_edit_start (wbcg, TRUE, TRUE); + if (!wbcg_edit_start (wbcg, TRUE, TRUE)) + return; /* attempt to edit failed */ gtk_entry_set_text (entry, "=sum()"); gtk_entry_set_position (entry, 5); } else { - wbcg_edit_start (wbcg, FALSE, TRUE); + if (!wbcg_edit_start (wbcg, FALSE, TRUE)) + return; /* attempt to edit failed */ /* * FIXME : This is crap! @@ -3461,7 +3463,7 @@ cb_editline_focus_in (GtkWidget *w, GdkE WorkbookControlGUI *wbcg) { if (!wbcg->editing) - wbcg_edit_start (wbcg, FALSE, TRUE); + return wbcg_edit_start (wbcg, FALSE, TRUE); return TRUE; } @@ -3500,11 +3502,13 @@ cb_autofunction (GtkWidget *widget, Work entry = GTK_ENTRY (wbcg_get_entry (wbcg)); txt = gtk_entry_get_text (entry); if (strncmp (txt, "=", 1)) { - wbcg_edit_start (wbcg, TRUE, TRUE); + if (!wbcg_edit_start (wbcg, TRUE, TRUE)) + return; /* attempt to edit failed */ gtk_entry_set_text (entry, "="); gtk_entry_set_position (entry, 1); } else { - wbcg_edit_start (wbcg, FALSE, TRUE); + if (!wbcg_edit_start (wbcg, FALSE, TRUE)) + return; /* attempt to edit failed */ /* FIXME : This is crap! * When the function druid is more complete use that. @@ -4401,6 +4405,30 @@ wbcg_validation_msg (WorkbookControl *wb } static void +wbcg_locked_msg (WorkbookControl *wbc, Cell const *cell) +{ + WorkbookControlGUI *wbcg = (WorkbookControlGUI *)wbc; + GtkWidget *dialog; + char *msg; + + msg = g_strdup_printf(_("Cell %s is locked.\n" + "You must unprotect this worksheet\n" + "(in the " + "Format->Workbook->Protection dialog)\n" + "or unlock this cell (in " + "Format->Cells->Protection)\n" + "before you can edit this " + "value."), cell_name(cell)); + dialog = gnome_message_box_new (msg, GNOME_MESSAGE_BOX_INFO, + _("Ok"), NULL); + gtk_window_set_title (GTK_WINDOW (dialog), _("Cell locked.")); + gnome_dialog_set_default (GNOME_DIALOG (dialog), 0); + gnumeric_dialog_run (wbcg, GNOME_DIALOG (dialog)); + g_free(msg); + return; +} + +static void workbook_control_gui_ctor_class (GtkObjectClass *object_class) { WorkbookControlClass *wbc_class = WORKBOOK_CONTROL_CLASS (object_class); @@ -4451,6 +4479,7 @@ workbook_control_gui_ctor_class (GtkObje wbc_class->claim_selection = wbcg_claim_selection; wbc_class->paste_from_selection = wbcg_paste_from_selection; wbc_class->validation_msg = wbcg_validation_msg; + wbc_class->locked_msg = wbcg_locked_msg; } E_MAKE_TYPE(workbook_control_gui, "WorkbookControlGUI", WorkbookControlGUI, Index: src/workbook-control-priv.h =================================================================== RCS file: /cvs/gnome/gnumeric/src/workbook-control-priv.h,v retrieving revision 1.16 diff -u -p -r1.16 workbook-control-priv.h --- src/workbook-control-priv.h 2002/01/12 08:06:59 1.16 +++ src/workbook-control-priv.h 2002/02/20 18:38:46 @@ -54,6 +54,7 @@ typedef struct { PasteTarget const *pt, guint32 time); int (*validation_msg) (WorkbookControl *wbc, Validation const *v, char const *title, char const *msg); + void (*locked_msg) (WorkbookControl *wbc, Cell const *cell); } WorkbookControlClass; #define WORKBOOK_CONTROL_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), WORKBOOK_CONTROL_TYPE, WorkbookControlClass)) Index: src/workbook-control.c =================================================================== RCS file: /cvs/gnome/gnumeric/src/workbook-control.c,v retrieving revision 1.36.2.1 diff -u -p -r1.36.2.1 workbook-control.c --- src/workbook-control.c 2002/02/01 15:26:17 1.36.2.1 +++ src/workbook-control.c 2002/02/20 18:38:46 @@ -173,6 +173,21 @@ wb_control_validation_msg (WorkbookContr return 1; /* no handler, always accept */ } +/** + * wb_control_locked_msg : notify user that this cell is locked. + */ +void +wb_control_locked_msg (WorkbookControl *wbc, Cell const *cell) +{ + WorkbookControlClass *wbc_class; + + g_return_if_fail (IS_WORKBOOK_CONTROL (wbc)); + + wbc_class = WBC_CLASS (wbc); + if (wbc_class != NULL && wbc_class->locked_msg != NULL) + wbc_class->locked_msg (wbc, cell); +} + WorkbookView * wb_control_view (WorkbookControl *wbc) { Index: src/workbook-control.h =================================================================== RCS file: /cvs/gnome/gnumeric/src/workbook-control.h,v retrieving revision 1.25 diff -u -p -r1.25 workbook-control.h --- src/workbook-control.h 2002/01/12 08:06:59 1.25 +++ src/workbook-control.h 2002/02/20 18:38:46 @@ -43,6 +43,7 @@ void wb_control_undo_redo_labels (Wo char const *undo, char const *redo); int wb_control_validation_msg (WorkbookControl *wbc, Validation const *v, char const *title, char const *msg); +void wb_control_locked_msg (WorkbookControl *wbc, Cell const *cell); /* Menu state update flags, use them to specify which menu items to update */ enum { Index: src/workbook-edit.c =================================================================== RCS file: /cvs/gnome/gnumeric/src/workbook-edit.c,v retrieving revision 1.72.2.1 diff -u -p -r1.72.2.1 workbook-edit.c --- src/workbook-edit.c 2002/02/19 15:05:43 1.72.2.1 +++ src/workbook-edit.c 2002/02/20 18:38:46 @@ -322,8 +322,11 @@ entry_changed (GtkEntry *entry, void *da * editing: * 1) in-cell editing when you just start typing, and * 2) above sheet editing when you hit F2. + * + * Returns TRUE if we did indeed start editing. Returns FALSE if the + * cell-to-be-edited was locked. */ -void +gboolean wbcg_edit_start (WorkbookControlGUI *wbcg, gboolean blankp, gboolean cursorp) { @@ -335,14 +338,14 @@ wbcg_edit_start (WorkbookControlGUI *wbc int col, row; WorkbookView *wbv; - g_return_if_fail (IS_WORKBOOK_CONTROL_GUI (wbcg)); + g_return_val_if_fail (IS_WORKBOOK_CONTROL_GUI (wbcg), FALSE); if (wbcg->editing) - return; + return TRUE; /* Avoid recursion, and do not begin editing if a guru is up */ if (inside_editing || wbcg_edit_has_guru (wbcg)) - return; + return TRUE; inside_editing = TRUE; @@ -353,11 +356,19 @@ wbcg_edit_start (WorkbookControlGUI *wbc col = sheet->edit_pos.col; row = sheet->edit_pos.row; + cell = sheet_cell_get (sheet, col, row); + + /* don't edit a locked cell */ + if (wbv->protected && + mstyle_get_content_locked(cell_get_mstyle(cell))) { + inside_editing = FALSE; + wb_control_locked_msg(WORKBOOK_CONTROL (wbcg), cell); + return FALSE; + } + application_clipboard_unant (); workbook_edit_set_sensitive (wbcg, TRUE, FALSE); - cell = sheet_cell_get (sheet, col, row); - if (!blankp) { if (cell != NULL) text = cell_get_entered_text (cell); @@ -416,6 +427,7 @@ wbcg_edit_start (WorkbookControlGUI *wbc g_free (text); inside_editing = FALSE; + return TRUE; } GnumericExprEntry * Index: src/workbook-edit.h =================================================================== RCS file: /cvs/gnome/gnumeric/src/workbook-edit.h,v retrieving revision 1.13 diff -u -p -r1.13 workbook-edit.h --- src/workbook-edit.h 2001/11/11 00:18:57 1.13 +++ src/workbook-edit.h 2002/02/20 18:38:46 @@ -8,7 +8,7 @@ void wbcg_edit_ctor (WorkbookControlGUI *wbcg); void wbcg_edit_dtor (WorkbookControlGUI *wbcg); gboolean wbcg_edit_finish (WorkbookControlGUI *wbcg, gboolean accept); -void wbcg_edit_start (WorkbookControlGUI *wbcg, +gboolean wbcg_edit_start (WorkbookControlGUI *wbcg, gboolean blankp, gboolean cursorp); void wbcg_edit_attach_guru (WorkbookControlGUI *wbcg, GtkWidget *guru); Index: src/workbook-view.c =================================================================== RCS file: /cvs/gnome/gnumeric/src/workbook-view.c,v retrieving revision 1.79.2.1 diff -u -p -r1.79.2.1 workbook-view.c --- src/workbook-view.c 2002/01/31 03:11:27 1.79.2.1 +++ src/workbook-view.c 2002/02/20 18:38:46 @@ -53,6 +53,7 @@ enum { ARG_VIEW_VSCROLLBAR, ARG_VIEW_TABS, ARG_VIEW_DO_AUTO_COMPLETION, + ARG_VIEW_PROTECTED, }; /* WorkbookView signals */ @@ -402,6 +403,9 @@ wb_view_set_arg (GtkObject *object, GtkA case ARG_VIEW_DO_AUTO_COMPLETION: wbv->do_auto_completion = GTK_VALUE_BOOL (*arg); break; + case ARG_VIEW_PROTECTED: + wbv->protected = GTK_VALUE_BOOL (*arg); + break; } wb_view_prefs_update (wbv); } @@ -429,6 +433,10 @@ wb_view_get_arg (GtkObject *object, GtkA case ARG_VIEW_DO_AUTO_COMPLETION: GTK_VALUE_BOOL (*arg) = wbv->do_auto_completion; break; + + case ARG_VIEW_PROTECTED: + GTK_VALUE_BOOL (*arg) = wbv->protected; + break; } } @@ -513,6 +521,7 @@ workbook_view_init (WorkbookView *wbv, W wbv->show_vertical_scrollbar = TRUE; wbv->show_notebook_tabs = TRUE; wbv->do_auto_completion = application_use_auto_complete (); + wbv->protected = FALSE; /* Set the default operation to be performed over selections */ wbv->auto_expr = NULL; @@ -557,6 +566,9 @@ workbook_view_class_init (GtkObjectClass gtk_object_add_arg_type ("WorkbookView::do_auto_completion", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_VIEW_DO_AUTO_COMPLETION); + gtk_object_add_arg_type ("WorkbookView::protected", + GTK_TYPE_BOOL, GTK_ARG_READWRITE, + ARG_VIEW_PROTECTED); workbook_view_signals [SHEET_ENTERED] = gtk_signal_new ( Index: src/workbook-view.h =================================================================== RCS file: /cvs/gnome/gnumeric/src/workbook-view.h,v retrieving revision 1.25.2.1 diff -u -p -r1.25.2.1 workbook-view.h --- src/workbook-view.h 2002/01/31 03:11:27 1.25.2.1 +++ src/workbook-view.h 2002/02/20 18:38:46 @@ -18,6 +18,7 @@ struct _WorkbookView { gboolean show_vertical_scrollbar; gboolean show_notebook_tabs; gboolean do_auto_completion; + gboolean protected; /* Non-normative size information */ int preferred_width, preferred_height; Index: src/dialogs/cell-format.glade =================================================================== RCS file: /cvs/gnome/gnumeric/src/dialogs/cell-format.glade,v retrieving revision 1.46 diff -u -p -r1.46 cell-format.glade --- src/dialogs/cell-format.glade 2002/01/21 02:08:58 1.46 +++ src/dialogs/cell-format.glade 2002/02/18 21:06:56 @@ -3235,7 +3235,6 @@ Double GtkCheckButton protection_sheet_protected - False True False Index: src/dialogs/dialog-cell-format.c =================================================================== RCS file: /cvs/gnome/gnumeric/src/dialogs/dialog-cell-format.c,v retrieving revision 1.195 diff -u -p -r1.195 dialog-cell-format.c --- src/dialogs/dialog-cell-format.c 2002/01/12 08:07:01 1.195 +++ src/dialogs/dialog-cell-format.c 2002/02/20 18:38:46 @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -158,7 +159,10 @@ typedef struct _FormatState PatternPicker pattern; } back; struct { - GtkCheckButton *hidden, *locked; + GtkCheckButton *hidden, *locked, *sheet_protected; + + gboolean sheet_protected_changed; + gboolean sheet_protected_value; } protection; struct { GtkTable *criteria_table; @@ -1977,6 +1981,17 @@ cb_protection_hidden_toggle (GtkToggleBu } static void +cb_protection_sheet_protected_toggle (GtkToggleButton *button, FormatState *state) +{ + if (state->enable_edit) { + state->protection.sheet_protected_value = + gtk_toggle_button_get_active (button); + state->protection.sheet_protected_changed = TRUE; + fmt_dialog_changed (state); + } +} + +static void fmt_dialog_init_protection_page (FormatState *state) { GtkWidget *w; @@ -1999,6 +2014,15 @@ fmt_dialog_init_protection_page (FormatS gtk_signal_connect (GTK_OBJECT (w), "toggled", GTK_SIGNAL_FUNC (cb_protection_hidden_toggle), state); + + state->protection.sheet_protected_changed = FALSE; + flag = wb_control_view (WORKBOOK_CONTROL (state->wbcg))->protected; + w = glade_xml_get_widget (state->gui, "protection_sheet_protected"); + state->protection.sheet_protected = GTK_CHECK_BUTTON (w); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), flag); + gtk_signal_connect (GTK_OBJECT (w), + "toggled", GTK_SIGNAL_FUNC (cb_protection_sheet_protected_toggle), + state); } /*****************************************************************************/ @@ -2320,6 +2353,11 @@ cb_fmt_dialog_dialog_apply (GtkObject *w if (state->validation.changed) validation_rebuild_validation (state); + if (state->protection.sheet_protected_changed) { + wb_control_view (WORKBOOK_CONTROL (state->wbcg))->protected + = state->protection.sheet_protected_value; + state->protection.sheet_protected_changed = FALSE; + } mstyle_ref (state->result); Index: src/dialogs/dialog-workbook-attr.c =================================================================== RCS file: /cvs/gnome/gnumeric/src/dialogs/dialog-workbook-attr.c,v retrieving revision 1.19 diff -u -p -r1.19 dialog-workbook-attr.c --- src/dialogs/dialog-workbook-attr.c 2002/01/03 07:28:51 1.19 +++ src/dialogs/dialog-workbook-attr.c 2002/02/20 18:38:46 @@ -48,6 +48,7 @@ typedef struct _AttrState GtkToggleButton *show_vsb; GtkToggleButton *show_tabs; GtkToggleButton *autocomplete; + GtkToggleButton *protected; } view; } AttrState; @@ -95,6 +96,8 @@ cb_attr_dialog_dialog_apply (GtkObject * gtk_toggle_button_get_active (state->view.show_tabs); state->wbv->do_auto_completion = gtk_toggle_button_get_active (state->view.autocomplete); + state->wbv->protected = + gtk_toggle_button_get_active (state->view.protected); wb_view_prefs_update (state->wbv); } @@ -148,6 +151,9 @@ attr_dialog_init_view_page (AttrState *s state->view.autocomplete = attr_dialog_init_toggle (state, "WorkbookView::do_auto_completion", state->wbv->do_auto_completion); + state->view.protected = attr_dialog_init_toggle (state, + "WorkbookView::workbook_protected", + state->wbv->protected); } /*****************************************************************************/ Index: src/dialogs/workbook-attr.glade =================================================================== RCS file: /cvs/gnome/gnumeric/src/dialogs/workbook-attr.glade,v retrieving revision 1.9 diff -u -p -r1.9 workbook-attr.glade --- src/dialogs/workbook-attr.glade 2001/11/01 20:43:38 1.9 +++ src/dialogs/workbook-attr.glade 2002/02/20 18:38:46 @@ -161,6 +161,54 @@ 0 0 + + + GtkTable + table2 + 4 + 1 + 2 + False + 0 + 0 + + + GtkCheckButton + WorkbookView::workbook_protected + True + + False + True + + 0 + 2 + 0 + 1 + 0 + 0 + False + False + False + False + True + False + + + + + + GtkLabel + Notebook:tab + label2 + + GTK_JUSTIFY_CENTER + False + 0.5 + 0.5 + 0 + 0 + +