static void nmt_newt_container_real_child_validity_changed (NmtNewtContainer *container, NmtNewtWidget *widget) { NmtNewtContainerPrivate *priv; int i; if (widget) { if (!nmt_newt_widget_get_visible (widget)) return; if (!nmt_newt_widget_get_valid (widget)) { nmt_newt_widget_set_valid (NMT_NEWT_WIDGET (container), FALSE); return; } } priv = NMT_NEWT_CONTAINER_GET_PRIVATE (container); for (i = 0; i < priv->children->len; i++) { widget = priv->children->pdata[i]; if ( nmt_newt_widget_get_visible (widget) && !nmt_newt_widget_get_valid (widget)) { nmt_newt_widget_set_valid (NMT_NEWT_WIDGET (container), FALSE); return; } } nmt_newt_widget_set_valid (NMT_NEWT_WIDGET (container), TRUE); }
static void nmt_editor_grid_size_request (NmtNewtWidget *widget, int *width, int *height) { NmtEditorGridPrivate *priv = NMT_EDITOR_GRID_GET_PRIVATE (widget); NmtEditorGridRow *rows = (NmtEditorGridRow *) priv->rows->data; NmtEditorGridFormState *state = get_form_state (widget); gboolean add_padding = FALSE; int i; g_free (priv->row_heights); priv->row_heights = g_new0 (int, priv->rows->len); *height = 0; for (i = 0; i < priv->rows->len; i++) { int lwidth, lheight, wwidth, wheight, ewidth, eheight; if (!nmt_newt_widget_get_visible (rows[i].widget)) continue; if (rows[i].label) { nmt_newt_widget_size_request (rows[i].label, &lwidth, &lheight); lwidth += priv->indent; state->col_widths[0] = MAX (state->col_widths[0], lwidth); nmt_newt_widget_size_request (rows[i].widget, &wwidth, &wheight); state->col_widths[1] = MAX (state->col_widths[1], wwidth); priv->row_heights[i] = wheight; add_padding = TRUE; } else { nmt_newt_widget_size_request (rows[i].widget, &wwidth, &wheight); priv->row_heights[i] = wheight; } if (rows[i].extra) { nmt_newt_widget_size_request (rows[i].extra, &ewidth, &eheight); state->col_widths[2] = MAX (state->col_widths[2], ewidth); priv->row_heights[i] = MAX (priv->row_heights[i], eheight); } *height += priv->row_heights[i]; } *width = state->col_widths[0] + state->col_widths[1] + state->col_widths[2]; if (add_padding) *width += 2; }
static void add_buttons (GPtrArray *buttons, GPtrArray *cos) { NmtNewtWidget *child; newtComponent *child_cos; int i, c; for (i = 0; i < buttons->len; i++) { child = buttons->pdata[i]; if (!nmt_newt_widget_get_visible (child)) continue; child_cos = nmt_newt_widget_get_components (child); for (c = 0; child_cos[c]; c++) g_ptr_array_add (cos, child_cos[c]); g_free (child_cos); } }
static newtComponent * nmt_editor_grid_get_components (NmtNewtWidget *widget) { NmtEditorGridPrivate *priv = NMT_EDITOR_GRID_GET_PRIVATE (widget); NmtEditorGridRow *rows = (NmtEditorGridRow *) priv->rows->data; newtComponent *child_cos; GPtrArray *cos; int i, c; cos = g_ptr_array_new (); for (i = 0; i < priv->rows->len; i++) { if (!nmt_newt_widget_get_visible (rows[i].widget)) continue; if (rows[i].label) { child_cos = nmt_newt_widget_get_components (rows[i].label); g_assert (child_cos[0] && !child_cos[1]); g_ptr_array_add (cos, child_cos[0]); g_free (child_cos); } child_cos = nmt_newt_widget_get_components (rows[i].widget); for (c = 0; child_cos[c]; c++) g_ptr_array_add (cos, child_cos[c]); g_free (child_cos); if (rows[i].extra) { child_cos = nmt_newt_widget_get_components (rows[i].extra); for (c = 0; child_cos[c]; c++) g_ptr_array_add (cos, child_cos[c]); g_free (child_cos); } } g_ptr_array_add (cos, NULL); return (newtComponent *) g_ptr_array_free (cos, FALSE); }
static void nmt_editor_grid_size_allocate (NmtNewtWidget *widget, int x, int y, int width, int height) { NmtEditorGridPrivate *priv = NMT_EDITOR_GRID_GET_PRIVATE (widget); NmtEditorGridRow *rows = (NmtEditorGridRow *) priv->rows->data; NmtEditorGridFormState *state = get_form_state (widget); int col0_width, col1_width, col2_width; int i, row; col0_width = state->col_widths[0] - priv->indent; col1_width = state->col_widths[1]; col2_width = state->col_widths[2]; for (i = row = 0; i < priv->rows->len; i++) { if (!nmt_newt_widget_get_visible (rows[i].widget)) continue; if (rows[i].label) { int lwidth, lheight, lx; if (rows[i].flags & NMT_EDITOR_GRID_ROW_LABEL_ALIGN_LEFT) lx = x; else { nmt_newt_widget_size_request (rows[i].label, &lwidth, &lheight); lx = x + col0_width - lwidth; } nmt_newt_widget_size_allocate (rows[i].label, lx, y + row, col0_width, priv->row_heights[i]); nmt_newt_widget_size_allocate (rows[i].widget, x + col0_width + 1, y + row, col1_width, priv->row_heights[i]); } else { nmt_newt_widget_size_allocate (rows[i].widget, x, y + row, col0_width + col1_width + 1, priv->row_heights[i]); } if (rows[i].extra) { int wwidth, wheight, ex; if (rows[i].flags & NMT_EDITOR_GRID_ROW_EXTRA_ALIGN_RIGHT) ex = x + col0_width + col1_width + 2; else { nmt_newt_widget_size_request (rows[i].widget, &wwidth, &wheight); ex = x + col0_width + wwidth + 2; } nmt_newt_widget_size_allocate (rows[i].extra, ex, y + row, col2_width, priv->row_heights[i]); } row += priv->row_heights[i]; } }