static void cb_format_hash_style (GnmFT *ft, GnmRange *r, GnmStyle *mstyle, gpointer user) { GHashTable *table = user; int row, col; /* * Filter out undesired elements */ mstyle = format_template_filter_style (ft, mstyle, TRUE); for (row = r->start.row; row <= r->end.row; row++) for (col = r->start.col; col <= r->end.col; col++) { GnmCellPos key; key.col = col; key.row = row; g_hash_table_insert (table, g_memdup (&key, sizeof (key)), gnm_style_dup (mstyle)); } /* * Unref here, the hashtable will take care of its own * resources */ gnm_style_unref (mstyle); }
static void set_style(Sheet *sheet, int row, int col, const psiconv_sheet_cell_layout psi_layout, const GnmStyle *default_style) { GnmStyle *style = gnm_style_dup(default_style); if (!style) return; set_layout(style,psi_layout); sheet_style_set_pos(sheet,col,row,style); }
static void pg_style_get_row (GnmPreviewGrid *pg, GnmStyleRow *sr) { int const row = sr->row; int col; for (col = sr->start_col; col <= sr->end_col; col++) { GnmStyle const *style = pg_get_style (pg, col, row); sheet_style_set_pos (pg->sheet, col, row, gnm_style_dup (style)); } sheet_style_get_row (pg->sheet, sr); }
GnumericStylePtr gnumeric_sheet_get_style(GnumericSheetPtr sheet, int x, int y) { GnmStyle const *r = sheet_style_get((Sheet*)sheet,x,y); if (r==NULL) return NULL; return gnm_style_dup(r); }
/** * gnm_ft_calculate: * @origft: GnmFT * @s: Target range * @pc: Callback function * @cb_data: Data to pass to the callback function * * Calculate all styles for a range of @s. This routine will invoke the callback function * and pass all styles and ranges for those styles to the callback function. * The callback function should UNREF the mstyle passed! * **/ static void gnm_ft_calculate (GnmFT *origft, GnmRange const *r, PCalcCallback pc, gpointer cb_data) { GnmFT *ft = origft; GSList *ptr; g_return_if_fail (origft != NULL); if (!ft->edges.left || !ft->edges.right || !ft->edges.top || !ft->edges.bottom) ft = gnm_auto_fmt_filter_edges (origft); for (ptr = ft->members; NULL != ptr ; ptr = ptr->next) { GnmFTMember const *member = ptr->data; GnmStyle const *mstyle = member->mstyle; GnmRange range = gnm_ft_member_get_rect (member, r); g_return_if_fail (range_valid (&range)); if (member->direction == FREQ_DIRECTION_NONE) pc (ft, &range, gnm_style_dup (mstyle), cb_data); else if (member->direction == FREQ_DIRECTION_HORIZONTAL) { int col_repeat = member->repeat; GnmRange hr = range; while (col_repeat != 0) { pc (ft, &hr, gnm_style_dup (mstyle), cb_data); hr.start.col += member->skip + member->col.size; hr.end.col += member->skip + member->col.size; if (member->repeat != -1) col_repeat--; else { if (hr.start.row > r->end.row) break; } if (hr.start.row > r->end.row - member->edge) break; } } else if (member->direction == FREQ_DIRECTION_VERTICAL) { int row_repeat = member->repeat; GnmRange vr = range; while (row_repeat != 0) { pc (ft, &vr, gnm_style_dup (mstyle), cb_data); vr.start.row += member->skip + member->row.size; vr.end.row += member->skip + member->row.size; if (member->repeat != -1) row_repeat--; else { if (vr.start.row > r->end.row) break; } if (vr.start.row > r->end.row - member->edge) break; } } } if (ft != origft) gnm_ft_free (ft); }