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