From aabbb0a4d15671f00ced2d9d21395c1574d63cd0 Mon Sep 17 00:00:00 2001 From: Kohei Yoshida Date: Tue, 1 May 2012 16:53:10 -0400 Subject: Properly handle properties of sheet fields. Change-Id: I549990186c23e7e560f6f584c4ad76dbbc4cc393 --- sc/source/ui/unoobj/fielduno.cxx | 47 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) (limited to 'sc/source/ui/unoobj') diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx index 6ef6625f2d0a..4b78a7f36a0e 100644 --- a/sc/source/ui/unoobj/fielduno.cxx +++ b/sc/source/ui/unoobj/fielduno.cxx @@ -699,7 +699,7 @@ SvxFieldData* ScEditFieldObj::getData() mpData.reset(new SvxPagesField); break; case Sheet: - mpData.reset(new SvxTableField(mnTab)); + mpData.reset(new SvxTableField); break; case Time: mpData.reset(new SvxTimeField); @@ -923,10 +923,51 @@ void ScEditFieldObj::setPropertyValueExtTime(const rtl::OUString& rName, const u void ScEditFieldObj::setPropertyValueSheet(const rtl::OUString& rName, const uno::Any& rVal) { + if (mpEditSource) + { + // Edit engine instance already exists for this field item. Use it. + ScEditEngineDefaulter* pEditEngine = mpEditSource->GetEditEngine(); + ScUnoEditEngine aTempEngine(pEditEngine); + + // Typ egal (in Zellen gibts nur URLs) + SvxFieldData* pField = aTempEngine.FindByPos( aSelection.nStartPara, aSelection.nStartPos, 0 ); + OSL_ENSURE(pField,"setPropertyValue: Feld nicht gefunden"); + if (!pField) + return; + + if (pField->GetClassId() != SVX_TABLEFIELD) + // Make sure this is indeed a URL field. + return; + + SvxTableField* p = static_cast(pField); + + if (rName == "SheetPosition") + { + sal_Int32 nTab = rVal.get(); + p->SetTab(nTab); + } + else + throw beans::UnknownPropertyException(); + + pEditEngine->QuickInsertField(SvxFieldItem(*pField, EE_FEATURE_FIELD), aSelection); + mpEditSource->UpdateData(); + return; + } + + // Edit engine instance not yet present. Store the item data for later use. + SvxFieldData* pData = getData(); + if (!pData) + throw uno::RuntimeException(); + + SvxTableField* p = static_cast(pData); if (rName == "SheetPosition") { - mnTab = rVal.get(); + sal_Int32 nTab = rVal.get(); + p->SetTab(nTab); } + else + throw beans::UnknownPropertyException(); + } ScEditFieldObj::ScEditFieldObj( @@ -936,7 +977,7 @@ ScEditFieldObj::ScEditFieldObj( pPropSet(NULL), mpEditSource(pEditSrc), aSelection(rSel), - meType(eType), mpData(NULL), mpContent(rContent), mnTab(0), mbIsDate(false) + meType(eType), mpData(NULL), mpContent(rContent), mbIsDate(false) { switch (meType) { -- cgit