summaryrefslogtreecommitdiff
path: root/chart2
diff options
context:
space:
mode:
authorweigao <weigao@multicorewareinc.com>2014-08-09 18:19:33 +0800
committerMarkus Mohrhard <markus.mohrhard@collabora.co.uk>2014-08-13 06:21:34 +0200
commit916b1403de2f1c8062a8378d98d45ab195764700 (patch)
treed9918a098a20b29e3afd62779ca96268044a30a5 /chart2
parent7a91a493b24dd4a90dc375c71d23b5035169502c (diff)
add click and history screen text
Change-Id: I7aba9fcc0a5ed96de722f9334476da6763221ab0
Diffstat (limited to 'chart2')
-rw-r--r--chart2/source/view/charttypes/GL3DBarChart.cxx56
-rw-r--r--chart2/source/view/inc/GL3DBarChart.hxx5
-rw-r--r--chart2/source/view/main/GL3DRenderer.cxx2
3 files changed, 55 insertions, 8 deletions
diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx
index cd95848916d9..8af7001e6570 100644
--- a/chart2/source/view/charttypes/GL3DBarChart.cxx
+++ b/chart2/source/view/charttypes/GL3DBarChart.cxx
@@ -28,6 +28,9 @@
#define CLICK_EVENT_ID 1
#define SHAPE_START_ID 10
#define DATA_UPDATE_TIME 15
+#define FPS_TIME 500
+#define DATAUPDATE_FPS_TIME 500
+#define HISTORY_NUM 5
using namespace com::sun::star;
@@ -541,7 +544,7 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer
maBarMap.insert(std::pair<sal_uInt32, BarInformation>(nId,
BarInformation(glm::vec3(nXPos, nYPos, float(nVal/nMaxVal)),
nVal, nIndex, nSeriesIndex)));
-
+ recordBarHistory(nId, nVal);
maShapes.push_back(new opengl3D::Bar(mpRenderer.get(), aBarPosition, nColor, nId));
nId += ID_STEP;
}
@@ -929,7 +932,7 @@ void GL3DBarChart::addScreenTextShape(OUString &nStr, glm::vec2 rLeftTop, float
void GL3DBarChart::updateRenderFPS()
{
int aDeltaMs = calcTimeInterval(maFPSRenderStartTime, maFPSRenderEndTime);
- if(aDeltaMs >= 500)
+ if(aDeltaMs >= FPS_TIME)
{
osl_getSystemTime(&maFPSRenderEndTime);
aDeltaMs = calcTimeInterval(maFPSRenderStartTime, maFPSRenderEndTime);
@@ -939,7 +942,7 @@ void GL3DBarChart::updateRenderFPS()
osl_getSystemTime(&maFPSRenderStartTime);
}
osl_getSystemTime(&maFPSRenderEndTime);
- addScreenTextShape(maFPS, glm::vec2(-0.99f, 0.99f), 0.1f, glm::vec3(0.0, 0.0, 0.0));
+ addScreenTextShape(maFPS, glm::vec2(-0.99f, 0.99f), 0.1f);
}
int GL3DBarChart::calcTimeInterval(TimeValue &startTime, TimeValue &endTime)
@@ -959,13 +962,14 @@ void GL3DBarChart::updateScreenText()
mpRenderer->ReleaseScreenTextShapes();
updateRenderFPS();
updateDataUpdateFPS();
+ updateClickEvent();
mbScreenTextNewRender = true;
}
void GL3DBarChart::updateDataUpdateFPS()
{
int aDeltaMs = calcTimeInterval(maDataUpdateStartTime, maDataUpdateEndTime);
- if(aDeltaMs >= 500)
+ if(aDeltaMs >= DATAUPDATE_FPS_TIME)
{
int iFPS = miDataUpdateCounter * 1000 / aDeltaMs;
if (iFPS)
@@ -981,7 +985,48 @@ void GL3DBarChart::updateDataUpdateFPS()
osl_getSystemTime(&maDataUpdateStartTime);
}
osl_getSystemTime(&maDataUpdateEndTime);
- addScreenTextShape(maDataUpdateFPS, glm::vec2(-0.69f, 0.99f), 0.1f, glm::vec3(0.0, 0.0, 0.0));
+ addScreenTextShape(maDataUpdateFPS, glm::vec2(-0.69f, 0.99f), 0.1f);
+}
+
+void GL3DBarChart::recordBarHistory(sal_uInt32 &nBarID, float &nVal)
+{
+ std::list<float> &alist = maBarHistory[nBarID];
+ if(alist.size() == HISTORY_NUM)
+ alist.pop_front();
+ alist.push_back(nVal);
+}
+
+void GL3DBarChart::updateClickEvent()
+{
+ if (maRenderEvent == EVENT_CLICK)
+ {
+ std::list<float> &alist = maBarHistory[mSelectBarId];
+ sal_uInt32 idex = 0;
+ for (std::list<float>::iterator it = alist.begin();it != alist.end();it++)
+ {
+ OUString barValue;
+ if (idex + 1 == alist.size())
+ {
+ barValue = OUString("Value: ") + OUString::number(*it);
+ maScreenTextShapes.push_back(new opengl3D::ScreenText(mpRenderer.get(), *mpTextCache, barValue, CLICK_EVENT_ID));
+ opengl3D::TextCacheItem tmpTextCache = mpTextCache->getText(barValue);
+ float rectWidth = (float)tmpTextCache.maSize.Width() / (float)tmpTextCache.maSize.Height() * 0.03;
+ std::map<sal_uInt32, const BarInformation>::const_iterator itr = maBarMap.find(mSelectBarId);
+ const BarInformation& rBarInfo = itr->second;
+ glm::vec3 textPos = glm::vec3(rBarInfo.maPos.x + BAR_SIZE_X / 2.0f,
+ rBarInfo.maPos.y + BAR_SIZE_Y / 2.0f,
+ rBarInfo.maPos.z);
+ opengl3D::ScreenText* pScreenText = static_cast<opengl3D::ScreenText*>(&maScreenTextShapes.back());
+ pScreenText->setPosition(glm::vec2(-rectWidth / 2, 0.03f), glm::vec2(rectWidth / 2, -0.03f), textPos);
+ }
+ else
+ {
+ barValue = OUString("History_") + OUString::number(idex) + OUString(": ") + OUString::number(*it);
+ addScreenTextShape(barValue, glm::vec2(0.65f, 0.99f - (idex * 0.1f)), 0.1f);
+ }
+ idex++;
+ }
+ }
}
IMPL_LINK_NOARG(GL3DBarChart, updateTimer)
@@ -992,7 +1037,6 @@ IMPL_LINK_NOARG(GL3DBarChart, updateTimer)
maTimer.Start();
return 0;
}
-
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/view/inc/GL3DBarChart.hxx b/chart2/source/view/inc/GL3DBarChart.hxx
index e0cdddd928de..552a226e6511 100644
--- a/chart2/source/view/inc/GL3DBarChart.hxx
+++ b/chart2/source/view/inc/GL3DBarChart.hxx
@@ -91,7 +91,9 @@ private:
void updateDataUpdateFPS();
DECL_LINK(updateTimer, void*);
int calcTimeInterval(TimeValue &startTime, TimeValue &endTime);
- void addScreenTextShape(OUString &nStr, glm::vec2 rLeftTop, float nTextHeight, glm::vec3 rPos, sal_uInt32 nEvent = 0);
+ void addScreenTextShape(OUString &nStr, glm::vec2 rLeftTop, float nTextHeight, glm::vec3 rPos = glm::vec3(0.0f, 0.0f, 0.0f), sal_uInt32 nEvent = 0);
+ void recordBarHistory(sal_uInt32 &nBarID, float &nVal);
+ void updateClickEvent();
css::uno::Reference<css::chart2::XChartType> mxChartType;
boost::ptr_vector<opengl3D::Renderable3DObject> maShapes;
@@ -156,6 +158,7 @@ private:
TimeValue maFPSRenderEndTime;
TimeValue maDataUpdateStartTime;
TimeValue maDataUpdateEndTime;
+ std::map<sal_uInt32, std::list<float>> maBarHistory;
};
}
diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx
index 866a5cf9ee4c..02b03f8a03bd 100644
--- a/chart2/source/view/main/GL3DRenderer.cxx
+++ b/chart2/source/view/main/GL3DRenderer.cxx
@@ -1880,7 +1880,7 @@ void OpenGL3DRenderer::RenderScreenTextShape()
CHECK_GL_ERROR();
for (size_t i = 0; i < m_ScreenTextInfoList.size(); i++)
{
- TextInfo &textInfo = m_ScreenTextInfoList[i];
+ TextInfo textInfo = m_ScreenTextInfoList[i];
//calc the postition and check whether it can be displayed
float xTrans = 0.0f;
float yTrans = 0.0f;