sc/Module_sc.mk | 7 ---- sc/inc/globstr.hrc | 4 +- sc/source/filter/inc/orcusinterface.hxx | 24 ++++++++++++++ sc/source/filter/orcus/interface.cxx | 33 +++++++++++++++++++- sc/source/ui/docshell/docfunc.cxx | 40 +++++++++++++++++++++++- sc/source/ui/inc/undoblk.hxx | 22 +++++++++++++ sc/source/ui/src/globstr.src | 5 +++ sc/source/ui/undo/undoblk.cxx | 52 ++++++++++++++++++++++++++++++++ 8 files changed, 176 insertions(+), 11 deletions(-)
New commits: commit f2431c944376433219eb7eb704e9b21589f201f5 Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Wed Apr 23 05:23:50 2014 +0200 add undo action for conditional formatting, cp#1000050, fdo#77381 Change-Id: I11db1e5824077135c4352ae43cc0e8d139244268 diff --git a/sc/inc/globstr.hrc b/sc/inc/globstr.hrc index 8456944..0b2a660 100644 --- a/sc/inc/globstr.hrc +++ b/sc/inc/globstr.hrc @@ -692,7 +692,9 @@ #define STR_PRINT_PREVIEW_NODATA 529 #define STR_PRINT_PREVIEW_EMPTY_RANGE 530 -#define SC_GLOBSTR_STR_COUNT 531 /**< the count of permanently resident strings */ +#define STR_UNDO_CONDFORMAT 531 + +#define SC_GLOBSTR_STR_COUNT 532 /**< the count of permanently resident strings */ #endif diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx index 5950a9d..9a9daa3 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -5302,6 +5302,31 @@ void ScDocFunc::ReplaceConditionalFormat( sal_uLong nOldFormat, ScConditionalFor if(pDoc->IsTabProtected(nTab)) return; + bool bUndo = pDoc->IsUndoEnabled(); + ScDocument* pUndoDoc = NULL; + ScRange aCombinedRange = rRanges.Combine(); + ScRange aCompleteRange; + if(bUndo) + { + pUndoDoc = new ScDocument(SCDOCMODE_UNDO); + pUndoDoc->InitUndo( pDoc, nTab, nTab ); + + if(pFormat) + { + aCompleteRange = aCombinedRange; + } + if(nOldFormat) + { + ScConditionalFormat* pOldFormat = pDoc->GetCondFormList(nTab)->GetFormat(nOldFormat); + if(pOldFormat) + aCompleteRange.ExtendTo(pOldFormat->GetRange().Combine()); + } + + pDoc->CopyToDocument( aCompleteRange.aStart.Col(),aCompleteRange.aStart.Row(),nTab, + aCompleteRange.aEnd.Col(),aCompleteRange.aEnd.Row(),nTab, + IDF_ALL, false, pUndoDoc ); + } + boost::scoped_ptr<ScRange> pRepaintRange; if(nOldFormat) { @@ -5318,9 +5343,9 @@ void ScDocFunc::ReplaceConditionalFormat( sal_uLong nOldFormat, ScConditionalFor if(pFormat) { if(pRepaintRange) - pRepaintRange->ExtendTo(rRanges.Combine()); + pRepaintRange->ExtendTo(aCombinedRange); else - pRepaintRange.reset(new ScRange(rRanges.Combine())); + pRepaintRange.reset(new ScRange(aCombinedRange)); sal_uLong nIndex = pDoc->AddCondFormat(pFormat, nTab); @@ -5328,6 +5353,17 @@ void ScDocFunc::ReplaceConditionalFormat( sal_uLong nOldFormat, ScConditionalFor pDoc->SetStreamValid(nTab, false); } + if(bUndo) + { + ScDocument* pRedoDoc = new ScDocument(SCDOCMODE_UNDO); + pRedoDoc->InitUndo( pDoc, nTab, nTab ); + pDoc->CopyToDocument( aCompleteRange.aStart.Col(),aCompleteRange.aStart.Row(),nTab, + aCompleteRange.aEnd.Col(),aCompleteRange.aEnd.Row(),nTab, + IDF_ALL, false, pRedoDoc ); + rDocShell.GetUndoManager()->AddUndoAction( + new ScUndoConditionalFormat(&rDocShell, pUndoDoc, pRedoDoc, aCompleteRange)); + } + if(pRepaintRange) rDocShell.PostPaint(*pRepaintRange, PAINT_GRID); diff --git a/sc/source/ui/inc/undoblk.hxx b/sc/source/ui/inc/undoblk.hxx index d619e5b..40af6cc 100644 --- a/sc/source/ui/inc/undoblk.hxx +++ b/sc/source/ui/inc/undoblk.hxx @@ -636,6 +636,28 @@ private: void DoChange( ScDocument* pSrcDoc ) const; }; +class ScUndoConditionalFormat : public ScSimpleUndo +{ +public: + TYPEINFO_OVERRIDE(); + ScUndoConditionalFormat( ScDocShell* pNewDocShell, + ScDocument* pUndoDoc, ScDocument* pRedoDoc, const ScRange& rRange); + virtual ~ScUndoConditionalFormat(); + + virtual void Undo() SAL_OVERRIDE; + virtual void Redo() SAL_OVERRIDE; + virtual void Repeat(SfxRepeatTarget& rTarget) SAL_OVERRIDE; + virtual bool CanRepeat(SfxRepeatTarget& rTarget) const SAL_OVERRIDE; + + virtual OUString GetComment() const SAL_OVERRIDE; + +private: + void DoChange(ScDocument* pDoc); + boost::scoped_ptr<ScDocument> mpUndoDoc; + boost::scoped_ptr<ScDocument> mpRedoDoc; + ScRange maRange; +}; + class ScUndoUseScenario: public ScSimpleUndo { diff --git a/sc/source/ui/src/globstr.src b/sc/source/ui/src/globstr.src index b55ae11..3d167fd 100644 --- a/sc/source/ui/src/globstr.src +++ b/sc/source/ui/src/globstr.src @@ -2071,6 +2071,11 @@ Resource RID_GLOBSTR { Text [ en-US ] = "Print Range Empty"; }; + + String STR_UNDO_CONDFORMAT + { + Text [ en-US ] = "Conditional Format"; + }; }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/undo/undoblk.cxx b/sc/source/ui/undo/undoblk.cxx index 8496fc2..4472e94 100644 --- a/sc/source/ui/undo/undoblk.cxx +++ b/sc/source/ui/undo/undoblk.cxx @@ -61,6 +61,7 @@ TYPEINIT1(ScUndoCut, ScBlockUndo); TYPEINIT1(ScUndoPaste, SfxUndoAction); TYPEINIT1(ScUndoDragDrop, SfxUndoAction); TYPEINIT1(ScUndoListNames, SfxUndoAction); +TYPEINIT1(ScUndoConditionalFormat, SfxUndoAction); TYPEINIT1(ScUndoUseScenario, SfxUndoAction); TYPEINIT1(ScUndoSelectionStyle, SfxUndoAction); TYPEINIT1(ScUndoEnterMatrix, ScBlockUndo); @@ -1430,6 +1431,57 @@ bool ScUndoListNames::CanRepeat(SfxRepeatTarget& rTarget) const return rTarget.ISA(ScTabViewTarget); } +ScUndoConditionalFormat::ScUndoConditionalFormat(ScDocShell* pNewDocShell, + ScDocument* pUndoDoc, ScDocument* pRedoDoc, const ScRange& rRange): + ScSimpleUndo( pNewDocShell ), + mpUndoDoc(pUndoDoc), + mpRedoDoc(pRedoDoc), + maRange(rRange) +{ +} + +ScUndoConditionalFormat::~ScUndoConditionalFormat() +{ +} + +OUString ScUndoConditionalFormat::GetComment() const +{ + return ScGlobal::GetRscString( STR_UNDO_CONDFORMAT ); +} + +void ScUndoConditionalFormat::Undo() +{ + DoChange(mpUndoDoc.get()); +} + +void ScUndoConditionalFormat::Redo() +{ + DoChange(mpRedoDoc.get()); +} + +void ScUndoConditionalFormat::DoChange(ScDocument* pSrcDoc) +{ + ScDocument* pDoc = pDocShell->GetDocument(); + + pDoc->DeleteAreaTab( maRange, IDF_ALL ); + pSrcDoc->CopyToDocument( maRange, IDF_ALL, false, pDoc ); + pDocShell->PostPaint( maRange, PAINT_GRID ); + pDocShell->PostDataChanged(); + ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); + if (pViewShell) + pViewShell->CellContentChanged(); +} + +void ScUndoConditionalFormat::Repeat(SfxRepeatTarget& ) +{ +} + +bool ScUndoConditionalFormat::CanRepeat(SfxRepeatTarget& ) const +{ + return false; +} + + ScUndoUseScenario::ScUndoUseScenario( ScDocShell* pNewDocShell, const ScMarkData& rMark, /*C*/ const ScArea& rDestArea, commit 96475ada3fcf026ae7833824a056b642c1bd1864 Author: Markus Mohrhard <markus.mohrh...@collabora.co.uk> Date: Wed Apr 23 02:35:25 2014 +0200 orcus autofilter import, implement the interface only empty stubs for now Change-Id: I44ed24fbd4d67a0f440202117a980c7d349016b9 diff --git a/sc/Module_sc.mk b/sc/Module_sc.mk index fae40f5..278701c 100644 --- a/sc/Module_sc.mk +++ b/sc/Module_sc.mk @@ -22,12 +22,6 @@ $(eval $(call gb_Module_add_l10n_targets,sc,\ UIConfig_scalc \ )) -ifneq (,$(ENABLE_OPENCL)) -$(eval $(call gb_Module_add_targets,sc,\ - Library_scopencl \ -)) -endif - ifneq (,$(filter DESKTOP,$(BUILD_TYPE))) $(eval $(call gb_Module_add_targets,sc,\ Library_scqahelper \ @@ -59,7 +53,6 @@ $(eval $(call gb_Module_add_check_targets,sc,\ $(eval $(call gb_Module_add_slowcheck_targets,sc, \ CppunitTest_sc_subsequent_filters_test \ CppunitTest_sc_subsequent_export_test \ - CppunitTest_sc_opencl_test \ )) # Disabled to allow the check tinderbox execute the sd tests diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx index aba1f6d..1446294 100644 --- a/sc/source/filter/inc/orcusinterface.hxx +++ b/sc/source/filter/inc/orcusinterface.hxx @@ -71,12 +71,34 @@ public: virtual size_t commit_segments() SAL_OVERRIDE; }; +class ScOrcusAutoFilter : public orcus::spreadsheet::iface::import_auto_filter +{ +public: + ScOrcusAutoFilter(ScDocument& rDoc); + + virtual ~ScOrcusAutoFilter(); + + virtual void set_range(const char* p_ref, size_t n_ref); + + virtual void set_column(orcus::spreadsheet::col_t col); + + virtual void append_column_match_value(const char* p, size_t n); + + virtual void commit_column(); + + virtual void commit(); + +private: + ScDocument& mrDoc; +}; + class ScOrcusSheet : public orcus::spreadsheet::iface::import_sheet { ScDocumentImport& mrDoc; SCTAB mnTab; ScOrcusFactory& mrFactory; sc::SharedFormulaGroups maFormulaGroups; + ScOrcusAutoFilter maAutoFilter; typedef std::map<size_t, ScRangeData*> SharedFormulaContainer; SharedFormulaContainer maSharedFormulas; @@ -88,6 +110,8 @@ class ScOrcusSheet : public orcus::spreadsheet::iface::import_sheet public: ScOrcusSheet(ScDocumentImport& rDoc, SCTAB nTab, ScOrcusFactory& rFactory); + virtual orcus::spreadsheet::iface::import_auto_filter* get_auto_filter() { return &maAutoFilter; } + // Orcus import interface virtual void set_auto(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, const char* p, size_t n) SAL_OVERRIDE; virtual void set_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t sindex) SAL_OVERRIDE; diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx index 085a2d6..8bd650e 100644 --- a/sc/source/filter/orcus/interface.cxx +++ b/sc/source/filter/orcus/interface.cxx @@ -192,7 +192,7 @@ void ScOrcusFactory::setStatusIndicator(const uno::Reference<task::XStatusIndica } ScOrcusSheet::ScOrcusSheet(ScDocumentImport& rDoc, SCTAB nTab, ScOrcusFactory& rFactory) : - mrDoc(rDoc), mnTab(nTab), mrFactory(rFactory), mnCellCount(0) {} + mrDoc(rDoc), mnTab(nTab), mrFactory(rFactory), maAutoFilter(rDoc.getDoc()), mnCellCount(0) {} void ScOrcusSheet::cellInserted() { @@ -647,5 +647,36 @@ size_t ScOrcusStyles::commit_cell_style() return 0; } +// auto filter import + +ScOrcusAutoFilter::ScOrcusAutoFilter(ScDocument& rDoc): + mrDoc(rDoc) +{ + (void)mrDoc; +} + +ScOrcusAutoFilter::~ScOrcusAutoFilter() +{ +} + +void ScOrcusAutoFilter::set_range(const char* /*p_ref*/, size_t /*n_ref*/) +{ +} + +void ScOrcusAutoFilter::set_column(orcus::spreadsheet::col_t /*col*/) +{ +} + +void ScOrcusAutoFilter::append_column_match_value(const char* /*p*/, size_t /*n*/) +{ +} + +void ScOrcusAutoFilter::commit_column() +{ +} + +void ScOrcusAutoFilter::commit() +{ +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits