static void dialog_goto_load_selection (GotoState *state) { SheetView *sv = wb_control_cur_sheet_view (WORKBOOK_CONTROL (state->wbcg)); GnmRange const *first = selection_first_range (sv, NULL, NULL); if (first != NULL) { gint rows = range_height (first); gint cols = range_width (first); GnmConventionsOut out; GString *str = g_string_new (NULL); GnmParsePos pp; GnmRangeRef rr; out.accum = str; out.pp = parse_pos_init_sheet (&pp, sv->sheet); out.convs = sheet_get_conventions (sv->sheet); gnm_cellref_init (&rr.a, NULL, first->start.col, first->start.row, TRUE); gnm_cellref_init (&rr.b, NULL, first->start.col, first->start.row, TRUE); rangeref_as_string (&out, &rr); gtk_entry_set_text (state->goto_text, str->str); gtk_editable_select_region (GTK_EDITABLE (state->goto_text), 0, -1); g_string_free (str, TRUE); cb_dialog_goto_update_sensitivity (NULL, state); gtk_spin_button_set_value (state->spin_rows, rows); gtk_spin_button_set_value (state->spin_cols, cols); } else cb_dialog_goto_update_sensitivity (NULL, state); }
static void render_cell (GString *target, HFRenderInfo *info, char const *args) { gboolean use_repeating = FALSE; if (args && ((use_repeating = g_str_has_prefix (args, "rep|")))) args += 4; if (info->sheet) { GnmRangeRef ref; GnmValue const *val; char const *tmp; GnmParsePos ppos; parse_pos_init (&ppos, info->sheet->workbook, (Sheet *)info->sheet, 0, 0); tmp = rangeref_parse (&ref, args, &ppos, sheet_get_conventions (info->sheet)); if (tmp == NULL || tmp == args) { gnm_cellref_init (&ref.a, (Sheet *)(info->sheet), 0, 0, FALSE); } if (ref.a.row_relative) ref.a.row += (use_repeating ? info->top_repeating.row : info->page_area.start.row); if (ref.a.col_relative) ref.a.col += (use_repeating ? info->top_repeating.col : info->page_area.start.col); val = sheet_cell_get_value (ref.a.sheet ? ref.a.sheet : (Sheet *)(info->sheet), ref.a.col, ref.a.row); if (val != NULL) { char const *value; value = value_peek_string (val); g_string_append (target, value); } } else { if (use_repeating) g_string_append (target, "["); g_string_append (target, args); if (use_repeating) g_string_append (target, "]"); } }
void dialog_cell_comment (WBCGtk *wbcg, Sheet *sheet, GnmCellPos const *pos) { CommentState *state; GtkWidget *box, *check, *old_author, *new_author; GnmComment *comment; GtkBuilder *gui; char *title, *cell_name; char const*real_user; GnmCellRef ref; GnmParsePos pp; GnmConventionsOut out; g_return_if_fail (wbcg != NULL); g_return_if_fail (sheet != NULL); g_return_if_fail (pos != NULL); if (gnumeric_dialog_raise_if_exists (wbcg, COMMENT_DIALOG_KEY)) return; gui = gnm_gtk_builder_new ("cell-comment.ui", NULL, GO_CMD_CONTEXT (wbcg)); if (gui == NULL) return; state = g_new (CommentState, 1); state->wbcg = wbcg; state->sheet = sheet; state->pos = pos; state->gui = gui; state->dialog = go_gtk_builder_get_widget (state->gui, "comment_dialog"); g_return_if_fail (state->dialog != NULL); box = go_gtk_builder_get_widget (state->gui, "dialog-vbox"); g_return_if_fail (box != NULL); state->gtv = gnm_text_view_new (); gtk_widget_show_all (GTK_WIDGET (state->gtv)); gtk_box_pack_start (GTK_BOX (box), GTK_WIDGET (state->gtv), TRUE, TRUE, TRUE); g_object_set (state->gtv, "wrap", GTK_WRAP_WORD, NULL); gnm_cellref_init (&ref, sheet, pos->col, pos->row, FALSE); out.accum = g_string_new (NULL); parse_pos_init_sheet (&pp, sheet); out.pp = &pp; out.convs = sheet->convs; cellref_as_string (&out, &ref, FALSE); cell_name = g_string_free (out.accum, FALSE); old_author = go_gtk_builder_get_widget (state->gui, "old-author-entry"); new_author = go_gtk_builder_get_widget (state->gui, "new-author-entry"); real_user = g_get_real_name (); if ((real_user != NULL) && g_utf8_validate (real_user, -1, NULL)) { gtk_entry_set_text (GTK_ENTRY (new_author), real_user); gtk_editable_select_region (GTK_EDITABLE (new_author), 0, -1); } comment = sheet_get_comment (sheet, pos); if (comment) { char const *text; PangoAttrList *attr; g_object_get (G_OBJECT (comment), "text", &text, "markup", &attr, NULL); g_object_set (state->gtv, "text", text, "attributes", attr, NULL); if (attr != NULL) pango_attr_list_unref (attr); text = cell_comment_author_get (comment); if (text != NULL) gtk_label_set_text (GTK_LABEL (old_author), text); title = g_strdup_printf (_("Edit Cell Comment (%s)"), cell_name); } else { title = g_strdup_printf (_("New Cell Comment (%s)"), cell_name); gtk_widget_hide (old_author); gtk_widget_hide (go_gtk_builder_get_widget (state->gui, "old-author-label")); } gtk_window_set_title (GTK_WINDOW (state->dialog), title); g_free (title); state->ok_button = go_gtk_builder_get_widget (state->gui, "ok_button"); g_signal_connect (G_OBJECT (state->ok_button), "clicked", G_CALLBACK (cb_cell_comment_ok_clicked), state); state->cancel_button = go_gtk_builder_get_widget (state->gui, "cancel_button"); g_signal_connect (G_OBJECT (state->cancel_button), "clicked", G_CALLBACK (cb_cell_comment_cancel_clicked), state); check = go_gtk_builder_get_widget (state->gui, "wrap-check"); g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (cb_wrap_toggled), state->gtv); cb_wrap_toggled (GTK_TOGGLE_BUTTON (check), G_OBJECT (state->gtv)); gnumeric_init_help_button ( go_gtk_builder_get_widget (state->gui, "help_button"), GNUMERIC_HELP_LINK_CELL_COMMENT); wbc_gtk_attach_guru (state->wbcg, state->dialog); g_object_set_data_full (G_OBJECT (state->dialog), "state", state, (GDestroyNotify) cb_dialog_cell_comment_destroy); gnm_dialog_setup_destroy_handlers (GTK_DIALOG (state->dialog), state->wbcg, GNM_DIALOG_DESTROY_CURRENT_SHEET_REMOVED); gnumeric_keyed_dialog (state->wbcg, GTK_WINDOW (state->dialog), COMMENT_DIALOG_KEY); gtk_widget_show (state->dialog); }