lltoolpipette.cpp

Go to the documentation of this file.
00001 
00036 #include "llviewerprecompiledheaders.h"
00037 
00038 // File includes
00039 #include "lltoolpipette.h" 
00040 
00041 // Library includes
00042 
00043 // Viewer includes
00044 #include "llviewerobjectlist.h"
00045 #include "llviewerwindow.h"
00046 #include "llselectmgr.h"
00047 #include "lltoolmgr.h"
00048 
00049 //
00050 // Member functions
00051 //
00052 
00053 LLToolPipette::LLToolPipette()
00054 :       LLTool("Pipette"),
00055 mSuccess(TRUE)
00056 { 
00057         mSelectCallback = NULL;
00058         mUserData = NULL;
00059 }
00060 
00061 
00062 LLToolPipette::~LLToolPipette()
00063 { }
00064 
00065 
00066 BOOL LLToolPipette::handleMouseDown(S32 x, S32 y, MASK mask)
00067 {
00068         mSuccess = TRUE;
00069         mTooltipMsg.clear();
00070         gPickFaces = TRUE;
00071         setMouseCapture(TRUE);
00072         gViewerWindow->hitObjectOrLandGlobalAsync(x, y, mask, pickCallback);
00073         return TRUE;
00074 }
00075 
00076 BOOL LLToolPipette::handleMouseUp(S32 x, S32 y, MASK mask)
00077 {
00078         mSuccess = TRUE;
00079         LLSelectMgr::getInstance()->unhighlightAll();
00080         // *NOTE: This assumes the pipette tool is a transient tool.
00081         LLToolMgr::getInstance()->clearTransientTool();
00082         setMouseCapture(FALSE);
00083         return TRUE;
00084 }
00085 
00086 BOOL LLToolPipette::handleHover(S32 x, S32 y, MASK mask)
00087 {
00088         gViewerWindow->setCursor(mSuccess ? UI_CURSOR_PIPETTE : UI_CURSOR_NO);
00089         if (hasMouseCapture()) // mouse button is down
00090         {
00091                 gPickFaces = TRUE;
00092                 gViewerWindow->hitObjectOrLandGlobalAsync(x, y, mask, pickCallback);
00093                 return TRUE;
00094         }
00095         return FALSE;
00096 }
00097 
00098 BOOL LLToolPipette::handleToolTip(S32 x, S32 y, LLString& msg, LLRect *sticky_rect_screen)
00099 {
00100         if (mTooltipMsg.empty())
00101         {
00102                 return FALSE;
00103         }
00104         // keep tooltip message up when mouse in this part of screen
00105         sticky_rect_screen->setCenterAndSize(x, y, 20, 20);
00106         msg = mTooltipMsg;
00107         return TRUE;
00108 }
00109 
00110 void LLToolPipette::pickCallback(S32 x, S32 y, MASK mask)
00111 {
00112         LLViewerObject* hit_obj = gViewerWindow->lastObjectHit();
00113         LLSelectMgr::getInstance()->unhighlightAll();
00114 
00115         // if we clicked on a face of a valid prim, save off texture entry data
00116         if (hit_obj && 
00117                 hit_obj->getPCode() == LL_PCODE_VOLUME &&
00118                 gLastHitObjectFace != -1)
00119         {
00120                 //TODO: this should highlight the selected face only
00121                 LLSelectMgr::getInstance()->highlightObjectOnly(hit_obj);
00122                 LLToolPipette::getInstance()->mTextureEntry = *hit_obj->getTE(gLastHitObjectFace);
00123                 if (LLToolPipette::getInstance()->mSelectCallback)
00124                 {
00125                         LLToolPipette::getInstance()->mSelectCallback(LLToolPipette::getInstance()->mTextureEntry, LLToolPipette::getInstance()->mUserData);
00126                 }
00127         }
00128 }
00129 
00130 void LLToolPipette::setSelectCallback(select_callback callback, void* user_data)
00131 {
00132         mSelectCallback = callback;
00133         mUserData = user_data;
00134 }
00135 
00136 void LLToolPipette::setResult(BOOL success, const LLString& msg)
00137 {
00138         mTooltipMsg = msg;
00139         mSuccess = success;
00140 }

Generated on Fri May 16 08:34:07 2008 for SecondLife by  doxygen 1.5.5