00001
00036 #include "llviewerprecompiledheaders.h"
00037
00038
00039 #include "lltoolpipette.h"
00040
00041
00042
00043
00044 #include "llviewerobjectlist.h"
00045 #include "llviewerwindow.h"
00046 #include "llselectmgr.h"
00047 #include "lltoolmgr.h"
00048
00049
00050
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
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())
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
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
00116 if (hit_obj &&
00117 hit_obj->getPCode() == LL_PCODE_VOLUME &&
00118 gLastHitObjectFace != -1)
00119 {
00120
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 }