00001
00032 #include "llviewerprecompiledheaders.h"
00033
00034 #include "llstatgraph.h"
00035
00036 #include "llmath.h"
00037 #include "llui.h"
00038 #include "llstat.h"
00039 #include "llgl.h"
00040 #include "llglheaders.h"
00041 #include "llviewercontrol.h"
00042
00044
00045 LLStatGraph::LLStatGraph(const std::string& name, const LLRect& rect)
00046 : LLView(name, rect, TRUE)
00047 {
00048 mStatp = NULL;
00049 setToolTip(name);
00050 mNumThresholds = 3;
00051 mThresholdColors[0] = LLColor4(0.f, 1.f, 0.f, 1.f);
00052 mThresholdColors[1] = LLColor4(1.f, 1.f, 0.f, 1.f);
00053 mThresholdColors[2] = LLColor4(1.f, 0.f, 0.f, 1.f);
00054 mThresholdColors[3] = LLColor4(1.f, 0.f, 0.f, 1.f);
00055 mThresholds[0] = 50.f;
00056 mThresholds[1] = 75.f;
00057 mThresholds[2] = 100.f;
00058 mMin = 0.f;
00059 mMax = 125.f;
00060 mPerSec = TRUE;
00061 mValue = 0.f;
00062 mPrecision = 0;
00063 }
00064
00065 EWidgetType LLStatGraph::getWidgetType() const
00066 {
00067 return WIDGET_TYPE_STAT_GRAPH;
00068 }
00069
00070 LLString LLStatGraph::getWidgetTag() const
00071 {
00072 return LL_STAT_GRAPH_TAG;
00073 }
00074
00075 void LLStatGraph::draw()
00076 {
00077 if (getVisible())
00078 {
00079 F32 range, frac;
00080 range = mMax - mMin;
00081 if (mStatp)
00082 {
00083 if (mPerSec)
00084 {
00085 mValue = mStatp->getMeanPerSec();
00086 }
00087 else
00088 {
00089 mValue = mStatp->getMean();
00090 }
00091 }
00092 frac = (mValue - mMin) / range;
00093 frac = llmax(0.f, frac);
00094 frac = llmin(1.f, frac);
00095
00096 if (mUpdateTimer.getElapsedTimeF32() > 0.5f)
00097 {
00098 char format_str[256];
00099 char tmp_str[256];
00100 snprintf(format_str, sizeof(format_str), "%%s%%.%df%%s", mPrecision);
00101 snprintf(tmp_str, sizeof(tmp_str), format_str, mLabel.c_str(), mValue, mUnits.c_str());
00102 setToolTip(tmp_str);
00103
00104 mUpdateTimer.reset();
00105 }
00106
00107 LLColor4 color;
00108
00109 S32 i;
00110 for (i = 0; i < mNumThresholds - 1; i++)
00111 {
00112 if (mThresholds[i] > mValue)
00113 {
00114 break;
00115 }
00116 }
00117
00118
00119
00120
00121
00122
00123 color = gColors.getColor( "MenuDefaultBgColor" );
00124 glColor4fv(color.mV);
00125 gl_rect_2d(0, mRect.getHeight(), mRect.getWidth(), 0, TRUE);
00126
00127 glColor4fv(LLColor4::black.mV);
00128 gl_rect_2d(0, mRect.getHeight(), mRect.getWidth(), 0, FALSE);
00129
00130 color = mThresholdColors[i];
00131 glColor4fv(color.mV);
00132 gl_rect_2d(1, llround(frac*mRect.getHeight()), mRect.getWidth() - 1, 0, TRUE);
00133 }
00134 }
00135
00136 void LLStatGraph::setValue(const F32 value)
00137 {
00138 mValue = value;
00139 }
00140
00141 void LLStatGraph::setMin(const F32 min)
00142 {
00143 mMin = min;
00144 }
00145
00146 void LLStatGraph::setMax(const F32 max)
00147 {
00148 mMax = max;
00149 }
00150
00151 void LLStatGraph::setStat(LLStat *statp)
00152 {
00153 mStatp = statp;
00154 }
00155
00156 void LLStatGraph::setLabel(const char *label)
00157 {
00158 mLabel = label;
00159 }
00160
00161 void LLStatGraph::setUnits(const char *units)
00162 {
00163 mUnits = units;
00164 }
00165
00166 void LLStatGraph::setPrecision(const S32 precision)
00167 {
00168 mPrecision = precision;
00169 }
00170
00171 void LLStatGraph::setThreshold(const S32 i, F32 value)
00172 {
00173 mThresholds[i] = value;
00174 }