Kaydet (Commit) c2f8b7a1 authored tarafından Kohei Yoshida's avatar Kohei Yoshida Kaydeden (comit) Kohei Yoshida

More on correctly formatting grouped values.

üst 98057df3
......@@ -128,6 +128,7 @@ public:
ScDPTableData(ScDocument* pDoc);
virtual ~ScDPTableData();
rtl::OUString GetFormattedString(const ScDPItemData& rItem) const;
rtl::OUString GetFormattedString(long nDim, const ScDPItemData& rItem) const;
long GetDatePart( long nDateVal, long nHierarchy, long nLevel );
......
......@@ -130,6 +130,7 @@ public:
SCROW GetIdByItemData(long nDim, const rtl::OUString& sItemData) const;
SCROW GetIdByItemData(long nDim, const ScDPItemData& rItem) const;
rtl::OUString GetFormattedString(const ScDPItemData& rItem) const;
rtl::OUString GetFormattedString(long nDim, const ScDPItemData& rItem) const;
void AppendGroupField();
void ResetGroupItems(long nDim);
......
......@@ -279,12 +279,14 @@ rtl::OUString ScDPItemData::GetString() const
return *mpString;
case Value:
return rtl::OUString::valueOf(mfValue);
case GroupValue:
return rtl::OUString::createFromAscii("fail");
case Empty:
default:
;
}
// TODO: Generate appropriate string.
return rtl::OUString::createFromAscii("fail");
return rtl::OUString();
}
double ScDPItemData::GetValue() const
......
......@@ -73,6 +73,12 @@ ScDPTableData::~ScDPTableData()
{
}
rtl::OUString ScDPTableData::GetFormattedString(const ScDPItemData& rItem) const
{
const ScDPCache* pCache = GetCacheTable().getCache();
return pCache->GetFormattedString(rItem);
}
rtl::OUString ScDPTableData::GetFormattedString(long nDim, const ScDPItemData& rItem) const
{
const ScDPCache* pCache = GetCacheTable().getCache();
......
......@@ -712,14 +712,14 @@ namespace {
typedef boost::unordered_set<rtl::OUString, rtl::OUStringHash> LabelSet;
class InsertLabel : public std::unary_function<ScDPItemData, void>
class InsertLabel : public std::unary_function<rtl::OUString, void>
{
LabelSet& mrNames;
public:
InsertLabel(LabelSet& rNames) : mrNames(rNames) {}
void operator() (const ScDPItemData& r)
void operator() (const rtl::OUString& r)
{
mrNames.insert(r.GetString());
mrNames.insert(r);
}
};
......@@ -1018,7 +1018,7 @@ SCROW ScDPCache::GetIdByItemData(long nDim, const ScDPItemData& rItem) const
return -1;
}
rtl::OUString ScDPCache::GetFormattedString(long nDim, const ScDPItemData& rItem) const
rtl::OUString ScDPCache::GetFormattedString(const ScDPItemData& rItem) const
{
if (rItem.GetType() == ScDPItemData::GroupValue)
{
......@@ -1027,19 +1027,26 @@ rtl::OUString ScDPCache::GetFormattedString(long nDim, const ScDPItemData& rItem
aAttr.mnGroupType, aAttr.mnValue, mpDoc->GetFormatTable());
}
if (!rItem.IsValue())
return rItem.GetString();
return rItem.GetString();
}
sal_uLong nNumFormat = GetNumberFormat(nDim);
SvNumberFormatter* pFormatter = mpDoc->GetFormatTable();
if (pFormatter)
rtl::OUString ScDPCache::GetFormattedString(long nDim, const ScDPItemData& rItem) const
{
if (rItem.IsValue())
{
Color* pColor = NULL;
String aStr;
pFormatter->GetOutputString(rItem.GetValue(), nNumFormat, aStr, &pColor);
return aStr;
// Format value using the stored number format.
sal_uLong nNumFormat = GetNumberFormat(nDim);
SvNumberFormatter* pFormatter = mpDoc->GetFormatTable();
if (pFormatter)
{
Color* pColor = NULL;
String aStr;
pFormatter->GetOutputString(rItem.GetValue(), nNumFormat, aStr, &pColor);
return aStr;
}
}
return rtl::OUString::createFromAscii("fail again");
return GetFormattedString(rItem);
}
void ScDPCache::AppendGroupField()
......@@ -1066,6 +1073,9 @@ void ScDPCache::ResetGroupItems(long nDim)
SCROW ScDPCache::SetGroupItem(long nDim, const ScDPItemData& rData)
{
if (nDim < 0)
return -1;
long nSourceCount = static_cast<long>(maFields.size());
if (nDim < nSourceCount)
{
......
......@@ -1439,7 +1439,7 @@ void ScDPResultMember::FillMemberResults( uno::Sequence<sheet::MemberResult>* pS
aName = pResultData->GetSource()->GetData()->GetFormattedString(nDim, aItemData);
}
else
aName = aItemData.GetString();
aName = pResultData->GetSource()->GetData()->GetFormattedString(aItemData);
ScDPItemData::Type eType = aItemData.GetType();
bIsNumeric = eType == ScDPItemData::Value || ScDPItemData::GroupValue;
......
......@@ -2627,12 +2627,12 @@ const OUString* ScDPMember::GetLayoutName() const
rtl::OUString ScDPMember::GetNameStr() const
{
return GetItemData().GetString();
return pSource->GetData()->GetFormattedString(GetItemData());
}
::rtl::OUString SAL_CALL ScDPMember::getName() throw(uno::RuntimeException)
{
return GetItemData().GetString();
return GetNameStr();
}
void SAL_CALL ScDPMember::setName( const ::rtl::OUString& /* rNewName */ ) throw(uno::RuntimeException)
......@@ -2724,7 +2724,7 @@ const ScDPCache* ScDPSource::GetCache()
const ScDPItemData& ScDPMember::GetItemData() const
{
return *pSource->GetItemDataById( (SCCOL)nDim, mnDataId );//ms-cache-core
return *pSource->GetItemDataById(nDim, mnDataId);
}
const ScDPItemData* ScDPSource::GetItemDataById(long nDim, long nId)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment