summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2012-05-01 16:53:10 -0400
committerKohei Yoshida <kohei.yoshida@gmail.com>2012-05-03 20:28:16 -0400
commitaabbb0a4d15671f00ced2d9d21395c1574d63cd0 (patch)
tree8b9c19a24f6feb5b83f575a86438ce337ada7819 /sc
parentc92f5f600d65299c135ca9db2ec7e6d13df1152d (diff)
Properly handle properties of sheet fields.
Change-Id: I549990186c23e7e560f6f584c4ad76dbbc4cc393
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/fielduno.hxx1
-rw-r--r--sc/source/ui/unoobj/fielduno.cxx47
2 files changed, 44 insertions, 4 deletions
diff --git a/sc/inc/fielduno.hxx b/sc/inc/fielduno.hxx
index bf5f62698e2f..6874c0bb0cf7 100644
--- a/sc/inc/fielduno.hxx
+++ b/sc/inc/fielduno.hxx
@@ -225,7 +225,6 @@ private:
boost::scoped_ptr<SvxFieldData> mpData;
com::sun::star::uno::Reference<com::sun::star::text::XTextRange> mpContent;
- sal_Int32 mnTab;
bool mbIsDate:1;
private:
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<SvxTableField*>(pField);
+
+ if (rName == "SheetPosition")
+ {
+ sal_Int32 nTab = rVal.get<sal_Int32>();
+ 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<SvxTableField*>(pData);
if (rName == "SheetPosition")
{
- mnTab = rVal.get<sal_Int32>();
+ sal_Int32 nTab = rVal.get<sal_Int32>();
+ 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)
{