diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h index 11c5b43da..4d1d4a808 100644 --- a/indra/llwindow/llwindow.h +++ b/indra/llwindow/llwindow.h @@ -202,6 +202,7 @@ public: virtual void updateLanguageTextInputArea() {} virtual void interruptLanguageTextInput() {} virtual void spawnWebBrowser(const std::string& escaped_url) {}; + virtual void ShellEx(const std::string& command) {}; static std::vector getDynamicFallbackFontList(); diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 6280868df..55b227149 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -2918,6 +2918,19 @@ S32 OSMessageBoxWin32(const std::string& text, const std::string& caption, U32 t return retval; } +void LLWindowWin32::ShellEx(const std::string& command ) +{ + LLWString url_wstring = utf8str_to_wstring( command ); + llutf16string url_utf16 = wstring_to_utf16str( url_wstring ); + + SHELLEXECUTEINFO sei = { sizeof( sei ) }; + sei.fMask = SEE_MASK_FLAG_DDEWAIT; + sei.nShow = SW_SHOWNORMAL; + sei.lpVerb = L"open"; + sei.lpFile = url_utf16.c_str(); + ShellExecuteEx( &sei ); +} + void LLWindowWin32::spawnWebBrowser(const std::string& escaped_url ) { diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h index 237f83431..d3ae3250f 100644 --- a/indra/llwindow/llwindowwin32.h +++ b/indra/llwindow/llwindowwin32.h @@ -111,6 +111,7 @@ public: /*virtual*/ void updateLanguageTextInputArea(); /*virtual*/ void interruptLanguageTextInput(); /*virtual*/ void spawnWebBrowser(const std::string& escaped_url); + /*virtual*/ void ShellEx(const std::string& command); static std::vector getDynamicFallbackFontList(); diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index 6e3201d68..601292b33 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -1290,7 +1290,9 @@ BOOL LLFloaterIMPanel::postBuild() mInputEditor->setReplaceNewlinesWithSpaces( FALSE ); childSetAction("profile_callee_btn", onClickProfile, this); + childSetAction("profile_tele_btn", onClickTeleport, this); childSetAction("group_info_btn", onClickGroupInfo, this); + childSetAction("history_btn", onClickHistory, this); childSetAction("start_call_btn", onClickStartCall, this); childSetAction("end_call_btn", onClickEndCall, this); @@ -1776,6 +1778,36 @@ void LLFloaterIMPanel::onClickProfile( void* userdata ) } } +//static +void LLFloaterIMPanel::onClickTeleport( void* userdata ) +{ + // Bring up the Profile window + LLFloaterIMPanel* self = (LLFloaterIMPanel*) userdata; + + if (self->mOtherParticipantUUID.notNull()) + { + handle_lure(self->getOtherParticipantID()); + //do a teleport to other part id + //LLFloaterAvatarInfo::showFromDirectory(self->getOtherParticipantID()); + } +} + +// static +void LLFloaterIMPanel::onClickHistory( void* userdata ) +{ + LLFloaterIMPanel* self = (LLFloaterIMPanel*) userdata; + + if (self->mOtherParticipantUUID.notNull()) + { + char command[256]; + std::string fullname(gDirUtilp->getScrubbedFileName(self->getTitle())); + sprintf(command, "\"%s\\%s.txt\"", gDirUtilp->getPerAccountChatLogsDir().c_str(),fullname.c_str()); + gViewerWindow->getWindow()->ShellEx(command); + + llinfos << command << llendl; + } +} + // static void LLFloaterIMPanel::onClickGroupInfo( void* userdata ) { diff --git a/indra/newview/llimpanel.h b/indra/newview/llimpanel.h index 8b3ca202c..10799451c 100644 --- a/indra/newview/llimpanel.h +++ b/indra/newview/llimpanel.h @@ -231,6 +231,8 @@ public: static void onTabClick( void* userdata ); static void onClickProfile( void* userdata ); + static void onClickHistory( void* userdata ); + static void onClickTeleport( void* userdata ); static void onClickGroupInfo( void* userdata ); static void onClickClose( void* userdata ); static void onClickStartCall( void* userdata );