lldebugmessagebox.cpp

Go to the documentation of this file.
00001 
00032 #include "llviewerprecompiledheaders.h"
00033 
00034 #include "lldebugmessagebox.h"
00035 
00036 #include "llresmgr.h"
00037 #include "llfontgl.h"
00038 #include "llbutton.h"
00039 #include "llsliderctrl.h"
00040 #include "llcheckboxctrl.h"
00041 #include "lltextbox.h"
00042 #include "lllineeditor.h"
00043 #include "llfocusmgr.h"
00044 
00048 
00049 std::map<LLString, LLDebugVarMessageBox*> LLDebugVarMessageBox::sInstances;
00050 
00051 LLDebugVarMessageBox::LLDebugVarMessageBox(const std::string& title, EDebugVarType var_type, void *var) : 
00052         LLFloater("msg box", LLRect(10,160,400,10), title),
00053         mVarType(var_type), mVarData(var), mAnimate(FALSE)
00054 {
00055         switch(var_type)
00056         {
00057         case VAR_TYPE_F32:
00058           mSlider1 = new LLSliderCtrl("slider 1", LLRect(20,130,190,110), title, NULL, 70, 130, TRUE, TRUE, FALSE, NULL, NULL, *((F32*)var), -100.f, 100.f, 0.1f, NULL);
00059                 mSlider1->setPrecision(3);
00060                 addChild(mSlider1);
00061                 mSlider2 = NULL;
00062                 mSlider3 = NULL;
00063                 break;
00064         case VAR_TYPE_S32:
00065                 mSlider1 = new LLSliderCtrl("slider 1", LLRect(20,100,190,80), title, NULL, 70, 130, TRUE, TRUE, FALSE, NULL, NULL, (F32)*((S32*)var), -255.f, 255.f, 1.f, NULL);
00066                 mSlider1->setPrecision(0);
00067                 addChild(mSlider1);
00068                 mSlider2 = NULL;
00069                 mSlider3 = NULL;
00070                 break;
00071         case VAR_TYPE_VEC3:
00072                 mSlider1 = new LLSliderCtrl("slider 1", LLRect(20,130,190,110), "x: ", NULL, 70, 130, TRUE, TRUE, FALSE, NULL, NULL, ((LLVector3*)var)->mV[VX], -100.f, 100.f, 0.1f, NULL);
00073                 mSlider1->setPrecision(3);
00074                 mSlider2 = new LLSliderCtrl("slider 2", LLRect(20,100,190,80), "y: ", NULL, 70, 130, TRUE, TRUE, FALSE, NULL, NULL, ((LLVector3*)var)->mV[VY], -100.f, 100.f, 0.1f, NULL);
00075                 mSlider2->setPrecision(3);
00076                 mSlider3 = new LLSliderCtrl("slider 3", LLRect(20,70,190,50), "z: ", NULL, 70, 130, TRUE, TRUE, FALSE, NULL, NULL, ((LLVector3*)var)->mV[VZ], -100.f, 100.f, 0.1f, NULL);
00077                 mSlider3->setPrecision(3);
00078                 addChild(mSlider1);
00079                 addChild(mSlider2);
00080                 addChild(mSlider3);
00081                 break;
00082         default:
00083                 llwarns << "Unhandled var type " << var_type << llendl;
00084                 break;
00085         }
00086 
00087         mAnimateButton = new LLButton("Animate", LLRect(20, 45, 180, 25), "", onAnimateClicked, this);
00088         addChild(mAnimateButton);
00089 
00090         mText = new LLTextBox("value", LLRect(20,20,190,0));
00091         addChild(mText);
00092 
00093         //disable hitting enter closes dialog
00094         setDefaultBtn();
00095 }
00096 
00097 LLDebugVarMessageBox::~LLDebugVarMessageBox()
00098 {
00099         sInstances.erase(mTitle);
00100 }
00101 
00102 void LLDebugVarMessageBox::show(const std::string& title, F32 *var, F32 max_value, F32 increment)
00103 {
00104 #ifndef LL_RELEASE_FOR_DOWNLOAD
00105         LLDebugVarMessageBox* box = show(title, VAR_TYPE_F32, (void*)var);
00106         max_value = llabs(max_value);
00107         box->mSlider1->setMaxValue(max_value);
00108         box->mSlider1->setMinValue(-max_value);
00109         box->mSlider1->setIncrement(increment);
00110         if (!gFocusMgr.childHasKeyboardFocus(box))
00111         {
00112                 box->mSlider1->setValue(*var);
00113         }
00114         box->mSlider1->setCommitCallback(slider_changed);
00115         box->mSlider1->setCallbackUserData(box);
00116 #endif
00117 }
00118 
00119 void LLDebugVarMessageBox::show(const std::string& title, S32 *var, S32 max_value, S32 increment)
00120 {
00121 #ifndef LL_RELEASE_FOR_DOWNLOAD
00122         LLDebugVarMessageBox* box = show(title, VAR_TYPE_S32, (void*)var);
00123         F32 max_val = llabs((F32)max_value);
00124         box->mSlider1->setMaxValue(max_val);
00125         box->mSlider1->setMinValue(-max_val);
00126         box->mSlider1->setIncrement((F32)increment);
00127         if (!gFocusMgr.childHasKeyboardFocus(box))
00128         {
00129                 box->mSlider1->setValue((F32)*var);
00130         }
00131         box->mSlider1->setCommitCallback(slider_changed);
00132         box->mSlider1->setCallbackUserData(box);
00133 #endif
00134 }
00135 
00136 void LLDebugVarMessageBox::show(const std::string& title, LLVector3 *var, LLVector3 max_value, LLVector3 increment)
00137 {
00138 #ifndef LL_RELEASE_FOR_DOWNLOAD
00139         LLDebugVarMessageBox* box = show(title, VAR_TYPE_VEC3, (LLVector3*)var);
00140         max_value.abs();
00141         box->mSlider1->setMaxValue(max_value.mV[VX]);
00142         box->mSlider1->setMinValue(-max_value.mV[VX]);
00143         box->mSlider1->setIncrement(increment.mV[VX]);
00144         box->mSlider1->setCommitCallback(slider_changed);
00145         box->mSlider1->setCallbackUserData(box);
00146 
00147         box->mSlider2->setMaxValue(max_value.mV[VX]);
00148         box->mSlider2->setMinValue(-max_value.mV[VX]);
00149         box->mSlider2->setIncrement(increment.mV[VX]);
00150         box->mSlider2->setCommitCallback(slider_changed);
00151         box->mSlider2->setCallbackUserData(box);
00152 
00153         box->mSlider3->setMaxValue(max_value.mV[VX]);
00154         box->mSlider3->setMinValue(-max_value.mV[VX]);
00155         box->mSlider3->setIncrement(increment.mV[VX]);
00156         box->mSlider3->setCommitCallback(slider_changed);
00157         box->mSlider3->setCallbackUserData(box);
00158 #endif
00159 }
00160 
00161 LLDebugVarMessageBox* LLDebugVarMessageBox::show(const std::string& title, EDebugVarType var_type, void *var)
00162 {
00163         LLString title_string(title);
00164 
00165         LLDebugVarMessageBox *box = sInstances[title_string];
00166         if (!box)
00167         {
00168                 box = new LLDebugVarMessageBox(title, var_type, var);
00169                 sInstances[title_string] = box;
00170                 gFloaterView->addChild(box);
00171                 box->reshape(200,150);
00172                 box->open();             /*Flawfinder: ignore*/
00173                 box->mTitle = title_string;
00174         }
00175 
00176         return box;
00177 }
00178 
00179 void LLDebugVarMessageBox::slider_changed(LLUICtrl* ctrl, void* user_data)
00180 {
00181         LLDebugVarMessageBox *msg_box = (LLDebugVarMessageBox*)user_data;
00182         if (!msg_box || !msg_box->mVarData) return;
00183 
00184         switch(msg_box->mVarType)
00185         {
00186         case VAR_TYPE_F32:
00187                 *((F32*)msg_box->mVarData) = (F32)msg_box->mSlider1->getValue().asReal();
00188                 break;
00189         case VAR_TYPE_S32:
00190                 *((S32*)msg_box->mVarData) = (S32)msg_box->mSlider1->getValue().asInteger();
00191                 break;
00192         case VAR_TYPE_VEC3:
00193         {
00194                 LLVector3* vec_p = (LLVector3*)msg_box->mVarData;
00195                 vec_p->setVec((F32)msg_box->mSlider1->getValue().asReal(), 
00196                         (F32)msg_box->mSlider2->getValue().asReal(), 
00197                         (F32)msg_box->mSlider3->getValue().asReal());
00198                 break;
00199         }
00200         default:
00201                 llwarns << "Unhandled var type " << msg_box->mVarType << llendl;
00202                 break;
00203         }
00204 }
00205 
00206 void LLDebugVarMessageBox::onAnimateClicked(void* user_data)
00207 {
00208         LLDebugVarMessageBox* msg_boxp = (LLDebugVarMessageBox*)user_data;
00209         msg_boxp->mAnimate = !msg_boxp->mAnimate;
00210         msg_boxp->mAnimateButton->setToggleState(msg_boxp->mAnimate);
00211 }
00212 
00213 void LLDebugVarMessageBox::onClose(bool app_quitting)
00214 {
00215         setVisible(FALSE);
00216 }
00217 
00218 void LLDebugVarMessageBox::draw()
00219 {
00220         LLString text;
00221         switch(mVarType)
00222         {
00223           case VAR_TYPE_F32:
00224                 text = llformat("%.3f", *((F32*)mVarData));
00225                 break;
00226           case VAR_TYPE_S32:
00227                 text = llformat("%d", *((S32*)mVarData));
00228                 break;
00229           case VAR_TYPE_VEC3:
00230           {
00231                   LLVector3* vec_p = (LLVector3*)mVarData;
00232                   text= llformat("%.3f %.3f %.3f", vec_p->mV[VX], vec_p->mV[VY], vec_p->mV[VZ]);
00233                   break;
00234           }
00235           default:
00236                 llwarns << "Unhandled var type " << mVarType << llendl;
00237                 break;
00238         }
00239         mText->setText(text);
00240 
00241         if(mAnimate)
00242         {
00243                 if (mSlider1)
00244                 {
00245                         F32 animated_val = clamp_rescale(fmodf((F32)LLFrameTimer::getElapsedSeconds() / 5.f, 1.f), 0.f, 1.f, 0.f, mSlider1->getMaxValue());
00246                         mSlider1->setValue(animated_val);
00247                         slider_changed(mSlider1, this);
00248                         if (mSlider2)
00249                         {
00250                                 mSlider2->setValue(animated_val);
00251                                 slider_changed(mSlider2, this);
00252                         }
00253                         if (mSlider3)
00254                         {
00255                                 mSlider3->setValue(animated_val);
00256                                 slider_changed(mSlider3, this);
00257                         }
00258                 }
00259         }
00260         LLFloater::draw();
00261 }

Generated on Fri May 16 08:33:17 2008 for SecondLife by  doxygen 1.5.5