Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : */
9 :
10 : #include "orcusinterface.hxx"
11 :
12 : #include "document.hxx"
13 : #include "formulacell.hxx"
14 : #include "rangenam.hxx"
15 : #include "tokenarray.hxx"
16 : #include "globalnames.hxx"
17 : #include "docoptio.hxx"
18 : #include "globstr.hrc"
19 : #include "compiler.hxx"
20 :
21 : #include "formula/token.hxx"
22 : #include "tools/datetime.hxx"
23 :
24 : #include <com/sun/star/task/XStatusIndicator.hpp>
25 :
26 : using namespace com::sun::star;
27 :
28 : namespace os = orcus::spreadsheet;
29 :
30 0 : ScOrcusGlobalSettings::ScOrcusGlobalSettings(ScDocumentImport& rDoc) : mrDoc(rDoc) {}
31 :
32 0 : void ScOrcusGlobalSettings::set_origin_date(int year, int month, int day)
33 : {
34 0 : mrDoc.setOriginDate(year, month, day);
35 0 : }
36 :
37 0 : ScOrcusFactory::StringCellCache::StringCellCache(const ScAddress& rPos, size_t nIndex) :
38 0 : maPos(rPos), mnIndex(nIndex) {}
39 :
40 0 : ScOrcusFactory::ScOrcusFactory(ScDocument& rDoc) :
41 : maDoc(rDoc),
42 : maGlobalSettings(maDoc),
43 : maSharedStrings(*this),
44 0 : mnProgress(0) {}
45 :
46 0 : orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::append_sheet(const char* sheet_name, size_t sheet_name_length)
47 : {
48 0 : OUString aTabName(sheet_name, sheet_name_length, RTL_TEXTENCODING_UTF8);
49 0 : if (!maDoc.appendSheet(aTabName))
50 0 : return NULL;
51 :
52 0 : SCTAB nTab = maDoc.getSheetCount() - 1;
53 0 : maSheets.push_back(new ScOrcusSheet(maDoc, nTab, *this));
54 0 : return &maSheets.back();
55 : }
56 :
57 : class FindSheetByIndex : std::unary_function<ScOrcusSheet, bool>
58 : {
59 : SCTAB mnTab;
60 : public:
61 0 : FindSheetByIndex(SCTAB nTab) : mnTab(nTab) {}
62 0 : bool operator() (const ScOrcusSheet& rSheet) const
63 : {
64 0 : return rSheet.getIndex() == mnTab;
65 : }
66 : };
67 :
68 0 : orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::get_sheet(const char* sheet_name, size_t sheet_name_length)
69 : {
70 0 : OUString aTabName(sheet_name, sheet_name_length, RTL_TEXTENCODING_UTF8);
71 0 : SCTAB nTab = maDoc.getSheetIndex(aTabName);
72 0 : if (nTab < 0)
73 : // Sheet by that name not found.
74 0 : return NULL;
75 :
76 : // See if we already have an orcus sheet instance by that index.
77 : boost::ptr_vector<ScOrcusSheet>::iterator it =
78 0 : std::find_if(maSheets.begin(), maSheets.end(), FindSheetByIndex(nTab));
79 :
80 0 : if (it != maSheets.end())
81 : // We already have one. Return it.
82 0 : return &(*it);
83 :
84 : // Create a new orcus sheet instance for this.
85 0 : maSheets.push_back(new ScOrcusSheet(maDoc, nTab, *this));
86 0 : return &maSheets.back();
87 : }
88 :
89 0 : orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::get_sheet(orcus::spreadsheet::sheet_t sheet_index)
90 : {
91 0 : SCTAB nTab = static_cast<SCTAB>(sheet_index);
92 : // See if we already have an orcus sheet instance by that index.
93 : boost::ptr_vector<ScOrcusSheet>::iterator it =
94 0 : std::find_if(maSheets.begin(), maSheets.end(), FindSheetByIndex(nTab));
95 :
96 0 : if (it != maSheets.end())
97 : // We already have one. Return it.
98 0 : return &(*it);
99 :
100 : // Create a new orcus sheet instance for this.
101 0 : maSheets.push_back(new ScOrcusSheet(maDoc, nTab, *this));
102 0 : return &maSheets.back();
103 :
104 : }
105 :
106 0 : orcus::spreadsheet::iface::import_global_settings* ScOrcusFactory::get_global_settings()
107 : {
108 0 : return &maGlobalSettings;
109 : }
110 :
111 0 : orcus::spreadsheet::iface::import_shared_strings* ScOrcusFactory::get_shared_strings()
112 : {
113 0 : return &maSharedStrings;
114 : }
115 :
116 0 : orcus::spreadsheet::iface::import_styles* ScOrcusFactory::get_styles()
117 : {
118 0 : return &maStyles;
119 : }
120 :
121 0 : void ScOrcusFactory::finalize()
122 : {
123 0 : int nCellCount = 0;
124 0 : StringCellCaches::const_iterator it = maStringCells.begin(), itEnd = maStringCells.end();
125 0 : for (; it != itEnd; ++it)
126 : {
127 0 : if (it->mnIndex >= maStrings.size())
128 : // String index out-of-bound! Something is up.
129 0 : continue;
130 :
131 0 : maDoc.setStringCell(it->maPos, maStrings[it->mnIndex]);
132 0 : ++nCellCount;
133 0 : if (nCellCount == 100000)
134 : {
135 0 : incrementProgress();
136 0 : nCellCount = 0;
137 : }
138 : }
139 :
140 0 : if (mxStatusIndicator.is())
141 0 : mxStatusIndicator->end();
142 :
143 0 : maDoc.finalize();
144 0 : }
145 :
146 0 : size_t ScOrcusFactory::appendString(const OUString& rStr)
147 : {
148 0 : size_t nPos = maStrings.size();
149 0 : maStrings.push_back(rStr);
150 0 : maStringHash.insert(StringHashType::value_type(rStr, nPos));
151 :
152 0 : return nPos;
153 : }
154 :
155 0 : size_t ScOrcusFactory::addString(const OUString& rStr)
156 : {
157 : // Add only if the string is not yet present in the string pool.
158 0 : StringHashType::iterator it = maStringHash.find(rStr);
159 0 : if (it != maStringHash.end())
160 0 : return it->second;
161 :
162 0 : return appendString(rStr);
163 : }
164 :
165 0 : void ScOrcusFactory::pushStringCell(const ScAddress& rPos, size_t nStrIndex)
166 : {
167 0 : maStringCells.push_back(StringCellCache(rPos, nStrIndex));
168 0 : }
169 :
170 0 : void ScOrcusFactory::incrementProgress()
171 : {
172 0 : if (!mxStatusIndicator.is())
173 : // Status indicator object not set.
174 0 : return;
175 :
176 : // For now, we'll hard-code the progress range to be 100, and stops at 99
177 : // in all cases.
178 :
179 0 : if (!mnProgress)
180 0 : mxStatusIndicator->start(ScGlobal::GetRscString(STR_LOAD_DOC), 100);
181 :
182 0 : if (mnProgress == 99)
183 0 : return;
184 :
185 0 : ++mnProgress;
186 0 : mxStatusIndicator->setValue(mnProgress);
187 : }
188 :
189 0 : void ScOrcusFactory::setStatusIndicator(const uno::Reference<task::XStatusIndicator>& rIndicator)
190 : {
191 0 : mxStatusIndicator = rIndicator;
192 0 : }
193 :
194 0 : ScOrcusSheet::ScOrcusSheet(ScDocumentImport& rDoc, SCTAB nTab, ScOrcusFactory& rFactory) :
195 0 : mrDoc(rDoc), mnTab(nTab), mrFactory(rFactory), mnCellCount(0) {}
196 :
197 0 : void ScOrcusSheet::cellInserted()
198 : {
199 0 : ++mnCellCount;
200 0 : if (mnCellCount == 100000)
201 : {
202 0 : mrFactory.incrementProgress();
203 0 : mnCellCount = 0;
204 : }
205 0 : }
206 :
207 0 : void ScOrcusSheet::set_auto(os::row_t row, os::col_t col, const char* p, size_t n)
208 : {
209 0 : OUString aVal(p, n, RTL_TEXTENCODING_UTF8);
210 0 : mrDoc.setAutoInput(ScAddress(col, row, mnTab), aVal);
211 0 : cellInserted();
212 0 : }
213 :
214 0 : void ScOrcusSheet::set_string(os::row_t row, os::col_t col, size_t sindex)
215 : {
216 : // We need to defer string cells since the shared string pool is not yet
217 : // populated at the time this method is called. Orcus imports string
218 : // table after the cells get imported. We won't need to do this once we
219 : // implement true shared strings in Calc core.
220 :
221 0 : mrFactory.pushStringCell(ScAddress(col, row, mnTab), sindex);
222 0 : cellInserted();
223 0 : }
224 :
225 0 : void ScOrcusSheet::set_value(os::row_t row, os::col_t col, double value)
226 : {
227 0 : mrDoc.setNumericCell(ScAddress(col, row, mnTab), value);
228 0 : cellInserted();
229 0 : }
230 :
231 0 : void ScOrcusSheet::set_bool(os::row_t row, os::col_t col, bool value)
232 : {
233 0 : mrDoc.setNumericCell(ScAddress(col, row, mnTab), value ? 1.0 : 0.0);
234 0 : cellInserted();
235 0 : }
236 :
237 0 : void ScOrcusSheet::set_date_time(
238 : os::row_t row, os::col_t col, int year, int month, int day, int hour, int minute, double second)
239 : {
240 0 : SvNumberFormatter* pFormatter = mrDoc.getDoc().GetFormatTable();
241 :
242 0 : Date aDate(day, month, year);
243 0 : sal_uInt32 nSec = floor(second);
244 0 : sal_uInt32 nNanoSec = (second - nSec) * ::Time::nanoSecPerSec;
245 0 : Time aTime(hour, minute, nSec, nNanoSec);
246 0 : Date aNullDate(*pFormatter->GetNullDate());
247 0 : long nDateDiff = aDate - aNullDate;
248 :
249 : double fTime =
250 0 : static_cast<double>(aTime.GetNanoSec()) / ::Time::nanoSecPerSec +
251 0 : aTime.GetSec() +
252 0 : aTime.GetMin() * ::Time::secondPerMinute +
253 0 : aTime.GetHour() * ::Time::secondPerHour;
254 :
255 0 : fTime /= DATE_TIME_FACTOR;
256 :
257 0 : mrDoc.setNumericCell(ScAddress(col, row, mnTab), nDateDiff + fTime);
258 0 : cellInserted();
259 0 : }
260 :
261 0 : void ScOrcusSheet::set_format(os::row_t /*row*/, os::col_t /*col*/, size_t /*xf_index*/)
262 : {
263 0 : }
264 :
265 : namespace {
266 :
267 0 : formula::FormulaGrammar::Grammar getCalcGrammarFromOrcus( os::formula_grammar_t grammar )
268 : {
269 0 : formula::FormulaGrammar::Grammar eGrammar = formula::FormulaGrammar::GRAM_ODFF;
270 0 : switch(grammar)
271 : {
272 : case orcus::spreadsheet::ods:
273 0 : eGrammar = formula::FormulaGrammar::GRAM_ODFF;
274 0 : break;
275 : case orcus::spreadsheet::xlsx_2007:
276 : case orcus::spreadsheet::xlsx_2010:
277 0 : eGrammar = formula::FormulaGrammar::GRAM_OOXML;
278 0 : break;
279 : case orcus::spreadsheet::gnumeric:
280 0 : eGrammar = formula::FormulaGrammar::GRAM_ENGLISH_XL_A1;
281 0 : break;
282 : }
283 :
284 0 : return eGrammar;
285 : }
286 :
287 : }
288 :
289 0 : void ScOrcusSheet::set_formula(
290 : os::row_t row, os::col_t col, os::formula_grammar_t grammar, const char* p, size_t n)
291 : {
292 0 : OUString aFormula(p, n, RTL_TEXTENCODING_UTF8);
293 0 : formula::FormulaGrammar::Grammar eGrammar = getCalcGrammarFromOrcus( grammar );
294 0 : mrDoc.setFormulaCell(ScAddress(col,row,mnTab), aFormula, eGrammar);
295 0 : cellInserted();
296 0 : }
297 :
298 0 : void ScOrcusSheet::set_formula_result(os::row_t row, os::col_t col, const char* p, size_t n)
299 : {
300 0 : ScFormulaCell* pCell = mrDoc.getDoc().GetFormulaCell(ScAddress(col, row, mnTab));
301 0 : if (!pCell)
302 : {
303 : SAL_WARN("sc", "trying to set formula result for non formula \
304 : cell! Col: " << col << ";Row: " << row << ";Tab: " << mnTab);
305 0 : return;
306 : }
307 0 : OUString aResult( p, n, RTL_TEXTENCODING_UTF8);
308 0 : pCell->SetHybridString(aResult);
309 : }
310 :
311 0 : void ScOrcusSheet::set_shared_formula(
312 : os::row_t row, os::col_t col, os::formula_grammar_t grammar, size_t sindex,
313 : const char* p_formula, size_t n_formula)
314 : {
315 0 : ScAddress aPos(col, row, mnTab);
316 0 : OUString aFormula(p_formula, n_formula, RTL_TEXTENCODING_UTF8);
317 0 : formula::FormulaGrammar::Grammar eGram = getCalcGrammarFromOrcus(grammar);
318 :
319 : // Compile the formula expression into tokens.
320 0 : ScCompiler aComp(&mrDoc.getDoc(), aPos);
321 0 : aComp.SetGrammar(eGram);
322 0 : ScTokenArray* pArray = aComp.CompileString(aFormula);
323 0 : if (!pArray)
324 : // Tokenization failed.
325 0 : return;
326 :
327 0 : maFormulaGroups.set(sindex, pArray);
328 :
329 0 : ScFormulaCell* pCell = new ScFormulaCell(&mrDoc.getDoc(), aPos, *pArray);
330 0 : mrDoc.setFormulaCell(aPos, pCell);
331 0 : cellInserted();
332 :
333 : // For now, orcus doesn't support setting cached result. Mark it for re-calculation.
334 0 : pCell->SetDirty(true);
335 : }
336 :
337 0 : void ScOrcusSheet::set_shared_formula(
338 : os::row_t row, os::col_t col, os::formula_grammar_t grammar, size_t sindex,
339 : const char* p_formula, size_t n_formula, const char* /*p_range*/, size_t /*n_range*/)
340 : {
341 0 : set_shared_formula(row, col, grammar, sindex, p_formula, n_formula);
342 0 : }
343 :
344 0 : void ScOrcusSheet::set_shared_formula(os::row_t row, os::col_t col, size_t sindex)
345 : {
346 0 : ScAddress aPos(col, row, mnTab);
347 :
348 0 : const ScTokenArray* pArray = maFormulaGroups.get(sindex);
349 0 : if (!pArray)
350 0 : return;
351 :
352 0 : ScFormulaCell* pCell = new ScFormulaCell(&mrDoc.getDoc(), aPos, *pArray);
353 0 : mrDoc.setFormulaCell(aPos, pCell);
354 0 : cellInserted();
355 :
356 : // For now, orcus doesn't support setting cached result. Mark it for re-calculation.
357 0 : pCell->SetDirty(true);
358 : }
359 :
360 0 : void ScOrcusSheet::set_array_formula(
361 : os::row_t row, os::col_t col, os::formula_grammar_t grammar,
362 : const char* p, size_t n, os::row_t array_rows, os::col_t array_cols)
363 : {
364 0 : formula::FormulaGrammar::Grammar eGrammar = getCalcGrammarFromOrcus( grammar );
365 0 : OUString aFormula(p, n, RTL_TEXTENCODING_UTF8);
366 :
367 0 : ScRange aRange(col, row, mnTab, col+array_cols, row + array_rows, mnTab);
368 :
369 0 : ScCompiler aComp(&mrDoc.getDoc(), aRange.aStart);
370 0 : aComp.SetGrammar(eGrammar);
371 0 : boost::scoped_ptr<ScTokenArray> pArray(aComp.CompileString(aFormula));
372 0 : if (!pArray)
373 0 : return;
374 :
375 0 : mrDoc.setMatrixCells(aRange, *pArray, eGrammar);
376 : }
377 :
378 0 : void ScOrcusSheet::set_array_formula(
379 : os::row_t /*row*/, os::col_t /*col*/, os::formula_grammar_t /*grammar*/,
380 : const char* /*p*/, size_t /*n*/, const char* /*p_range*/, size_t /*n_range*/)
381 : {
382 0 : }
383 :
384 0 : ScOrcusSharedStrings::ScOrcusSharedStrings(ScOrcusFactory& rFactory) :
385 0 : mrFactory(rFactory) {}
386 :
387 0 : size_t ScOrcusSharedStrings::append(const char* s, size_t n)
388 : {
389 0 : OUString aNewString(s, n, RTL_TEXTENCODING_UTF8);
390 0 : return mrFactory.appendString(aNewString);
391 : }
392 :
393 0 : size_t ScOrcusSharedStrings::add(const char* s, size_t n)
394 : {
395 0 : OUString aNewString(s, n, RTL_TEXTENCODING_UTF8);
396 0 : return mrFactory.addString(aNewString);
397 : }
398 :
399 0 : void ScOrcusSharedStrings::set_segment_font(size_t /*font_index*/)
400 : {
401 0 : }
402 :
403 0 : void ScOrcusSharedStrings::set_segment_bold(bool /*b*/)
404 : {
405 0 : }
406 :
407 0 : void ScOrcusSharedStrings::set_segment_italic(bool /*b*/)
408 : {
409 0 : }
410 :
411 0 : void ScOrcusSharedStrings::set_segment_font_name(const char* /*s*/, size_t /*n*/)
412 : {
413 0 : }
414 :
415 0 : void ScOrcusSharedStrings::set_segment_font_size(double /*point*/)
416 : {
417 0 : }
418 :
419 0 : void ScOrcusSharedStrings::set_segment_font_color(orcus::spreadsheet::color_elem_t,
420 : orcus::spreadsheet::color_elem_t,
421 : orcus::spreadsheet::color_elem_t,
422 : orcus::spreadsheet::color_elem_t)
423 : {
424 0 : }
425 :
426 0 : void ScOrcusSharedStrings::append_segment(const char* s, size_t n)
427 : {
428 0 : maCurSegment.append(s, n);
429 0 : }
430 :
431 0 : size_t ScOrcusSharedStrings::commit_segments()
432 : {
433 0 : OString aStr = maCurSegment.makeStringAndClear();
434 0 : return mrFactory.addString(OStringToOUString(aStr, RTL_TEXTENCODING_UTF8));
435 : }
436 :
437 0 : void ScOrcusStyles::set_font_count(size_t /*n*/)
438 : {
439 : // needed at all?
440 0 : }
441 :
442 0 : void ScOrcusStyles::set_font_bold(bool /*b*/)
443 : {
444 0 : }
445 :
446 0 : void ScOrcusStyles::set_font_italic(bool /*b*/)
447 : {
448 0 : }
449 :
450 0 : void ScOrcusStyles::set_font_name(const char* /*s*/, size_t /*n*/)
451 : {
452 0 : }
453 :
454 0 : void ScOrcusStyles::set_font_size(double /*point*/)
455 : {
456 0 : }
457 :
458 0 : void ScOrcusStyles::set_font_underline(orcus::spreadsheet::underline_t /*e*/)
459 : {
460 0 : }
461 :
462 0 : void ScOrcusStyles::set_font_color(orcus::spreadsheet::color_elem_t,
463 : orcus::spreadsheet::color_elem_t,
464 : orcus::spreadsheet::color_elem_t,
465 : orcus::spreadsheet::color_elem_t)
466 : {
467 0 : }
468 :
469 0 : size_t ScOrcusStyles::commit_font()
470 : {
471 0 : return 0;
472 : }
473 :
474 :
475 : // fill
476 :
477 0 : void ScOrcusStyles::set_fill_count(size_t /*n*/)
478 : {
479 : // needed at all?
480 0 : }
481 :
482 0 : void ScOrcusStyles::set_fill_pattern_type(const char* /*s*/, size_t /*n*/)
483 : {
484 0 : }
485 :
486 0 : void ScOrcusStyles::set_fill_fg_color(orcus::spreadsheet::color_elem_t /*alpha*/, orcus::spreadsheet::color_elem_t /*red*/, orcus::spreadsheet::color_elem_t /*green*/, orcus::spreadsheet::color_elem_t /*blue*/)
487 : {
488 0 : }
489 :
490 0 : void ScOrcusStyles::set_fill_bg_color(orcus::spreadsheet::color_elem_t /*alpha*/, orcus::spreadsheet::color_elem_t /*red*/, orcus::spreadsheet::color_elem_t /*green*/, orcus::spreadsheet::color_elem_t /*blue*/)
491 : {
492 0 : }
493 :
494 0 : size_t ScOrcusStyles::commit_fill()
495 : {
496 0 : return 0;
497 : }
498 :
499 :
500 : // border
501 :
502 0 : void ScOrcusStyles::set_border_count(size_t /*n*/)
503 : {
504 : // needed at all?
505 0 : }
506 :
507 0 : void ScOrcusStyles::set_border_style(orcus::spreadsheet::border_direction_t /*dir*/, const char* /*s*/, size_t /*n*/)
508 : {
509 : // implement later
510 0 : }
511 :
512 0 : void ScOrcusStyles::set_border_color(orcus::spreadsheet::border_direction_t /*dir*/,
513 : orcus::spreadsheet::color_elem_t,
514 : orcus::spreadsheet::color_elem_t,
515 : orcus::spreadsheet::color_elem_t,
516 : orcus::spreadsheet::color_elem_t)
517 : {
518 : // implement later
519 0 : }
520 :
521 0 : size_t ScOrcusStyles::commit_border()
522 : {
523 0 : return 0;
524 : }
525 :
526 :
527 : // cell protection
528 0 : void ScOrcusStyles::set_cell_hidden(bool /*b*/)
529 : {
530 0 : }
531 :
532 0 : void ScOrcusStyles::set_cell_locked(bool /*b*/)
533 : {
534 0 : }
535 :
536 0 : size_t ScOrcusStyles::commit_cell_protection()
537 : {
538 0 : return 0;
539 : }
540 :
541 0 : void ScOrcusStyles::set_number_format_count(size_t)
542 : {
543 0 : }
544 :
545 0 : void ScOrcusStyles::set_number_format_identifier(size_t)
546 : {
547 0 : }
548 :
549 0 : void ScOrcusStyles::set_number_format_code(const char* /*s*/, size_t /*n*/)
550 : {
551 0 : }
552 :
553 0 : size_t ScOrcusStyles::commit_number_format()
554 : {
555 0 : return 0;
556 : }
557 :
558 : // cell style xf
559 :
560 0 : void ScOrcusStyles::set_cell_style_xf_count(size_t /*n*/)
561 : {
562 : // needed at all?
563 0 : }
564 :
565 0 : size_t ScOrcusStyles::commit_cell_style_xf()
566 : {
567 0 : return 0;
568 : }
569 :
570 :
571 : // cell xf
572 :
573 0 : void ScOrcusStyles::set_cell_xf_count(size_t /*n*/)
574 : {
575 : // needed at all?
576 0 : }
577 :
578 0 : size_t ScOrcusStyles::commit_cell_xf()
579 : {
580 0 : return 0;
581 : }
582 :
583 :
584 : // xf (cell format) - used both by cell xf and cell style xf.
585 :
586 0 : void ScOrcusStyles::set_xf_number_format(size_t /*index*/)
587 : {
588 : // no number format interfaces implemented yet
589 0 : }
590 :
591 0 : void ScOrcusStyles::set_xf_font(size_t /*index*/)
592 : {
593 0 : }
594 :
595 0 : void ScOrcusStyles::set_xf_fill(size_t /*index*/)
596 : {
597 0 : }
598 :
599 0 : void ScOrcusStyles::set_xf_border(size_t /*index*/)
600 : {
601 0 : }
602 :
603 0 : void ScOrcusStyles::set_xf_protection(size_t /*index*/)
604 : {
605 0 : }
606 :
607 0 : void ScOrcusStyles::set_xf_style_xf(size_t /*index*/)
608 : {
609 0 : }
610 :
611 0 : void ScOrcusStyles::set_xf_apply_alignment(bool /*b*/)
612 : {
613 0 : }
614 :
615 0 : void ScOrcusStyles::set_xf_horizontal_alignment(orcus::spreadsheet::hor_alignment_t /*align*/)
616 : {
617 0 : }
618 :
619 0 : void ScOrcusStyles::set_xf_vertical_alignment(orcus::spreadsheet::ver_alignment_t /*align*/)
620 : {
621 0 : }
622 :
623 :
624 : // cell style entry
625 : // not needed for now for gnumeric
626 :
627 0 : void ScOrcusStyles::set_cell_style_count(size_t /*n*/)
628 : {
629 : // needed at all?
630 0 : }
631 :
632 0 : void ScOrcusStyles::set_cell_style_name(const char* /*s*/, size_t /*n*/)
633 : {
634 0 : }
635 :
636 0 : void ScOrcusStyles::set_cell_style_xf(size_t /*index*/)
637 : {
638 0 : }
639 :
640 0 : void ScOrcusStyles::set_cell_style_builtin(size_t /*index*/)
641 : {
642 : // not needed for gnumeric
643 0 : }
644 :
645 0 : size_t ScOrcusStyles::commit_cell_style()
646 : {
647 0 : return 0;
648 : }
649 :
650 :
651 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|