master
Eli Linden 2010-01-26 14:33:28 -08:00
commit a87cbadf16
45 changed files with 484 additions and 189 deletions

View File

@ -113,7 +113,7 @@ inline U64 LLFastTimer::getCPUClockCount64()
struct timespec tp;
#ifdef CLOCK_MONOTONIC // MONOTONIC supported at build-time?
if (-1 == clock_gettime(CLOCK_MONOTONIC,&tp)) // if MONOTONIC isn't supported at runtime, try REALTIME
if (-1 == clock_gettime(CLOCK_MONOTONIC,&tp)) // if MONOTONIC isn't supported at runtime then ouch, try REALTIME
#endif
clock_gettime(CLOCK_REALTIME,&tp);
@ -122,7 +122,7 @@ inline U64 LLFastTimer::getCPUClockCount64()
inline U32 LLFastTimer::getCPUClockCount32()
{
return (U32)LLFastTimer::getCPUClockCount64();
return (U32)(LLFastTimer::getCPUClockCount64() >> 8);
}
#endif // (LL_LINUX || LL_SOLARIS))
@ -134,14 +134,14 @@ inline U32 LLFastTimer::getCPUClockCount32()
{
U64 x;
__asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
return (U32)x >> 8;
return (U32)(x >> 8);
}
inline U64 LLFastTimer::getCPUClockCount64()
{
U64 x;
__asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
return x >> 8;
return x;
}
#endif
@ -154,7 +154,7 @@ inline U64 LLFastTimer::getCPUClockCount64()
inline U32 LLFastTimer::getCPUClockCount32()
{
return (U32)get_clock_count();
return (U32)(get_clock_count()>>8);
}
inline U64 LLFastTimer::getCPUClockCount64()

View File

@ -226,12 +226,12 @@ void LLFastTimer::DeclareTimer::updateCachedPointers()
//static
#if LL_LINUX || LL_SOLARIS || ( LL_DARWIN && !(defined(__i386__) || defined(__amd64__)) )
U64 LLFastTimer::countsPerSecond()
U64 LLFastTimer::countsPerSecond() // counts per second for the *32-bit* timer
{
return sClockResolution;
return sClockResolution >> 8;
}
#else // windows or x86-mac
U64 LLFastTimer::countsPerSecond()
U64 LLFastTimer::countsPerSecond() // counts per second for the *32-bit* timer
{
static U64 sCPUClockFrequency = U64(CProcessor().GetCPUFrequency(50));

View File

@ -63,6 +63,8 @@ static LLDefaultChildRegistry::Register<LLAccordionCtrl> t2("accordion");
LLAccordionCtrl::LLAccordionCtrl(const Params& params):LLPanel(params)
, mFitParent(params.fit_parent)
, mAutoScrolling( false )
, mAutoScrollRate( 0.f )
{
mSingleExpansion = params.single_expansion;
if(mFitParent && !mSingleExpansion)
@ -72,6 +74,8 @@ LLAccordionCtrl::LLAccordionCtrl(const Params& params):LLPanel(params)
}
LLAccordionCtrl::LLAccordionCtrl() : LLPanel()
, mAutoScrolling( false )
, mAutoScrollRate( 0.f )
{
mSingleExpansion = false;
mFitParent = false;
@ -81,6 +85,19 @@ LLAccordionCtrl::LLAccordionCtrl() : LLPanel()
//---------------------------------------------------------------------------------
void LLAccordionCtrl::draw()
{
if (mAutoScrolling)
{
// add acceleration to autoscroll
mAutoScrollRate = llmin(mAutoScrollRate + (LLFrameTimer::getFrameDeltaTimeF32() * AUTO_SCROLL_RATE_ACCEL), MAX_AUTO_SCROLL_RATE);
}
else
{
// reset to minimum for next time
mAutoScrollRate = MIN_AUTO_SCROLL_RATE;
}
// clear this flag to be set on next call to autoScroll
mAutoScrolling = false;
LLRect local_rect(0, getRect().getHeight(), getRect().getWidth(), 0);
LLLocalClipRect clip(local_rect);
@ -420,6 +437,64 @@ BOOL LLAccordionCtrl::handleKeyHere (KEY key, MASK mask)
return LLPanel::handleKeyHere(key,mask);
}
BOOL LLAccordionCtrl::handleDragAndDrop (S32 x, S32 y, MASK mask,
BOOL drop,
EDragAndDropType cargo_type,
void* cargo_data,
EAcceptance* accept,
std::string& tooltip_msg)
{
// Scroll folder view if needed. Never accepts a drag or drop.
*accept = ACCEPT_NO;
BOOL handled = autoScroll(x, y);
if( !handled )
{
handled = childrenHandleDragAndDrop(x, y, mask, drop, cargo_type,
cargo_data, accept, tooltip_msg) != NULL;
}
return TRUE;
}
BOOL LLAccordionCtrl::autoScroll (S32 x, S32 y)
{
static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);
bool scrolling = false;
if( mScrollbar->getVisible() )
{
LLRect rect_local( 0, getRect().getHeight(), getRect().getWidth() - scrollbar_size, 0 );
LLRect screen_local_extents;
// clip rect against root view
screenRectToLocal(getRootView()->getLocalRect(), &screen_local_extents);
rect_local.intersectWith(screen_local_extents);
// autoscroll region should take up no more than one third of visible scroller area
S32 auto_scroll_region_height = llmin(rect_local.getHeight() / 3, 10);
S32 auto_scroll_speed = llround(mAutoScrollRate * LLFrameTimer::getFrameDeltaTimeF32());
LLRect bottom_scroll_rect = screen_local_extents;
bottom_scroll_rect.mTop = rect_local.mBottom + auto_scroll_region_height;
if( bottom_scroll_rect.pointInRect( x, y ) && (mScrollbar->getDocPos() < mScrollbar->getDocPosMax()) )
{
mScrollbar->setDocPos( mScrollbar->getDocPos() + auto_scroll_speed );
mAutoScrolling = true;
scrolling = true;
}
LLRect top_scroll_rect = screen_local_extents;
top_scroll_rect.mBottom = rect_local.mTop - auto_scroll_region_height;
if( top_scroll_rect.pointInRect( x, y ) && (mScrollbar->getDocPos() > 0) )
{
mScrollbar->setDocPos( mScrollbar->getDocPos() - auto_scroll_speed );
mAutoScrolling = true;
scrolling = true;
}
}
return scrolling;
}
void LLAccordionCtrl::updateLayout (S32 width, S32 height)
{
S32 panel_top = height - BORDER_MARGIN ;

View File

@ -81,6 +81,11 @@ public:
virtual BOOL handleRightMouseDown ( S32 x, S32 y, MASK mask);
virtual BOOL handleScrollWheel ( S32 x, S32 y, S32 clicks );
virtual BOOL handleKeyHere (KEY key, MASK mask);
virtual BOOL handleDragAndDrop (S32 x, S32 y, MASK mask, BOOL drop,
EDragAndDropType cargo_type,
void* cargo_data,
EAcceptance* accept,
std::string& tooltip_msg);
//
// Call reshape after changing splitter's size
@ -112,11 +117,15 @@ private:
void showScrollbar (S32 width, S32 height);
void hideScrollbar (S32 width, S32 height);
BOOL autoScroll (S32 x, S32 y);
private:
LLRect mInnerRect;
LLScrollbar* mScrollbar;
bool mSingleExpansion;
bool mFitParent;
bool mAutoScrolling;
F32 mAutoScrollRate;
};

View File

@ -45,6 +45,7 @@ static const std::string DD_HEADER_NAME = "dd_header";
static const S32 HEADER_HEIGHT = 20;
static const S32 HEADER_IMAGE_LEFT_OFFSET = 5;
static const S32 HEADER_TEXT_LEFT_OFFSET = 30;
static const F32 AUTO_OPEN_TIME = 1.f;
static LLDefaultChildRegistry::Register<LLAccordionCtrlTab> t1("accordion_tab");
@ -73,6 +74,11 @@ public:
virtual void onMouseEnter(S32 x, S32 y, MASK mask);
virtual void onMouseLeave(S32 x, S32 y, MASK mask);
virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent);
virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
EDragAndDropType cargo_type,
void* cargo_data,
EAcceptance* accept,
std::string& tooltip_msg);
private:
LLTextBox* mHeaderTextbox;
@ -92,6 +98,8 @@ private:
LLUIColor mHeaderBGColor;
bool mNeedsHighlight;
LLFrameTimer mAutoOpenTimer;
};
LLAccordionCtrlTab::LLAccordionCtrlTabHeader::Params::Params()
@ -209,6 +217,7 @@ void LLAccordionCtrlTab::LLAccordionCtrlTabHeader::onMouseLeave(S32 x, S32 y, MA
{
LLUICtrl::onMouseLeave(x, y, mask);
mNeedsHighlight = false;
mAutoOpenTimer.stop();
}
BOOL LLAccordionCtrlTab::LLAccordionCtrlTabHeader::handleKey(KEY key, MASK mask, BOOL called_from_parent)
{
@ -218,8 +227,33 @@ BOOL LLAccordionCtrlTab::LLAccordionCtrlTabHeader::handleKey(KEY key, MASK mask,
}
return LLUICtrl::handleKey(key, mask, called_from_parent);
}
BOOL LLAccordionCtrlTab::LLAccordionCtrlTabHeader::handleDragAndDrop(S32 x, S32 y, MASK mask,
BOOL drop,
EDragAndDropType cargo_type,
void* cargo_data,
EAcceptance* accept,
std::string& tooltip_msg)
{
LLAccordionCtrlTab* parent = dynamic_cast<LLAccordionCtrlTab*>(getParent());
if ( parent && !parent->getDisplayChildren() && parent->getCollapsible() && parent->canOpenClose() )
{
if (mAutoOpenTimer.getStarted())
{
if (mAutoOpenTimer.getElapsedTimeF32() > AUTO_OPEN_TIME)
{
parent->changeOpenClose(false);
mAutoOpenTimer.stop();
return TRUE;
}
}
else
mAutoOpenTimer.start();
}
return LLUICtrl::handleDragAndDrop(x, y, mask, drop, cargo_type,
cargo_data, accept, tooltip_msg);
}
LLAccordionCtrlTab::Params::Params()
: title("title")
,display_children("expanded", true)

View File

@ -115,6 +115,7 @@ public:
void changeOpenClose(bool is_open);
void canOpenClose(bool can_open_close) { mCanOpenClose = can_open_close;};
bool canOpenClose() const { return mCanOpenClose; };
virtual BOOL postBuild();

View File

@ -70,6 +70,8 @@ const S32 SCROLL_INCREMENT_DEL = 4; // make space for baskspacing
const F32 AUTO_SCROLL_TIME = 0.05f;
const F32 TRIPLE_CLICK_INTERVAL = 0.3f; // delay between double and triple click. *TODO: make this equal to the double click interval?
const std::string PASSWORD_ASTERISK( "\xE2\x97\x8F" ); // U+25CF BLACK CIRCLE
static LLDefaultChildRegistry::Register<LLLineEditor> r1("line_editor");
// Compiler optimization, generate extern template
@ -401,7 +403,7 @@ void LLLineEditor::setCursorAtLocalPos( S32 local_mouse_x )
{
for (S32 i = 0; i < mText.length(); i++)
{
asterix_text += '*';
asterix_text += utf8str_to_wstring(PASSWORD_ASTERISK);
}
wtext = asterix_text.c_str();
}
@ -1599,7 +1601,7 @@ void LLLineEditor::draw()
std::string text;
for (S32 i = 0; i < mText.length(); i++)
{
text += '*';
text += PASSWORD_ASTERISK;
}
mText = text;
}

View File

@ -498,7 +498,7 @@ void LLScrollListCtrl::fitContents(S32 max_width, S32 max_height)
{
S32 height = llmin( getRequiredRect().getHeight(), max_height );
if(mPageLines)
height = llmin( mPageLines * mLineHeight + (mDisplayColumnHeaders ? mHeadingHeight : 0), height );
height = llmin( mPageLines * mLineHeight + 2*mBorderThickness + (mDisplayColumnHeaders ? mHeadingHeight : 0), height );
S32 width = getRect().getWidth();
@ -2760,9 +2760,13 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& element, EAddPosition
LLScrollListItem* LLScrollListCtrl::addRow(const LLScrollListItem::Params& item_p, EAddPosition pos)
{
if (!item_p.validateBlock()) return NULL;
LLScrollListItem *new_item = new LLScrollListItem(item_p);
return addRow(new_item, item_p, pos);
}
LLScrollListItem* LLScrollListCtrl::addRow(LLScrollListItem *new_item, const LLScrollListItem::Params& item_p, EAddPosition pos)
{
if (!item_p.validateBlock() || !new_item) return NULL;
new_item->setNumColumns(mColumns.size());
// Add any columns we don't already have

View File

@ -148,6 +148,7 @@ public:
// "columns" => [ "column" => column name, "value" => value, "type" => type, "font" => font, "font-style" => style ], "id" => uuid
// Creates missing columns automatically.
virtual LLScrollListItem* addElement(const LLSD& element, EAddPosition pos = ADD_BOTTOM, void* userdata = NULL);
virtual LLScrollListItem* addRow(LLScrollListItem *new_item, const LLScrollListItem::Params& value, EAddPosition pos = ADD_BOTTOM);
virtual LLScrollListItem* addRow(const LLScrollListItem::Params& value, EAddPosition pos = ADD_BOTTOM);
// Simple add element. Takes a single array of:
// [ "value" => value, "font" => font, "font-style" => style ]

View File

@ -95,7 +95,7 @@ public:
void setUserdata( void* userdata ) { mUserdata = userdata; }
void* getUserdata() const { return mUserdata; }
LLUUID getUUID() const { return mItemValue.asUUID(); }
virtual LLUUID getUUID() const { return mItemValue.asUUID(); }
LLSD getValue() const { return mItemValue; }
void setRect(LLRect rect) { mRectangle = rect; }

View File

@ -244,7 +244,8 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p)
LLTextBase::~LLTextBase()
{
delete mPopupMenu;
// Menu, like any other LLUICtrl, is deleted by its parent - gMenuHolder
clearSegments();
}

View File

@ -2040,6 +2040,20 @@ void LLTextEditor::showContextMenu(S32 x, S32 y)
LLMenuHolderGL::child_registry_t::instance());
}
// Route menu to this class
// previously this was done in ::handleRightMoseDown:
//if(hasTabStop())
// setFocus(TRUE) - why? weird...
// and then inside setFocus
// ....
// gEditMenuHandler = this;
// ....
// but this didn't work in all cases and just weird...
//why not here?
// (all this was done for EXT-4443)
gEditMenuHandler = this;
S32 screen_x, screen_y;
localPointToScreen(x, y, &screen_x, &screen_y);
mContextMenu->show(screen_x, screen_y);

View File

@ -343,7 +343,6 @@ set(viewer_SOURCE_FILES
llpanelprimmediacontrols.cpp
llpanelprofile.cpp
llpanelprofileview.cpp
llpanelshower.cpp
llpanelteleporthistory.cpp
llpanelvolume.cpp
llpanelvolumepulldown.cpp
@ -846,7 +845,6 @@ set(viewer_HEADER_FILES
llpanelprimmediacontrols.h
llpanelprofile.h
llpanelprofileview.h
llpanelshower.h
llpanelteleporthistory.h
llpanelvolume.h
llpanelvolumepulldown.h
@ -1580,7 +1578,10 @@ if (WINDOWS)
DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
)
add_custom_target(package ALL DEPENDS ${CMAKE_CFG_INTDIR}/touched.bat)
add_custom_target(package ALL DEPENDS
${CMAKE_CFG_INTDIR}/touched.bat
windows-setup-build-all
)
# temporarily disable packaging of event_host until hg subrepos get
# sorted out on the parabuild cluster...
#${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2)

View File

@ -250,17 +250,20 @@ void LLAvatarActions::startAdhocCall(const std::vector<LLUUID>& ids)
make_ui_sound("UISndStartIM");
}
/* AD *TODO: Is this function needed any more?
I fixed it a bit(added check for canCall), but it appears that it is not used
anywhere. Maybe it should be removed?
// static
bool LLAvatarActions::isCalling(const LLUUID &id)
{
if (id.isNull())
if (id.isNull() || !canCall())
{
return false;
}
LLUUID session_id = gIMMgr->computeSessionID(IM_NOTHING_SPECIAL, id);
return (LLIMModel::getInstance()->findIMSession(session_id) != NULL);
}
}*/
//static
bool LLAvatarActions::canCall()

View File

@ -126,7 +126,10 @@ public:
/**
* Return true if the avatar is in a P2P voice call with a given user
*/
static bool isCalling(const LLUUID &id);
/* AD *TODO: Is this function needed any more?
I fixed it a bit(added check for canCall), but it appears that it is not used
anywhere. Maybe it should be removed?
static bool isCalling(const LLUUID &id);*/
/**
* @return true if call to the resident can be made

View File

@ -163,6 +163,8 @@ BOOL LLCallFloater::postBuild()
//chrome="true" hides floater caption
if (mDragHandle)
mDragHandle->setTitleVisible(TRUE);
updateSession();
return TRUE;
}
@ -246,7 +248,7 @@ void LLCallFloater::updateSession()
}
}
const LLUUID& session_id = voice_channel->getSessionID();
const LLUUID& session_id = voice_channel ? voice_channel->getSessionID() : LLUUID::null;
lldebugs << "Set speaker manager for session: " << session_id << llendl;
LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(session_id);
@ -568,33 +570,46 @@ void LLCallFloater::updateParticipantsVoiceState()
if (!found)
{
// If an avatarID is not found in a speakers list from VoiceClient and
// a panel with this ID has a JOINED status this means that this person
// HAS LEFT the call.
if ((getState(participant_id) == STATE_JOINED))
updateNotInVoiceParticipantState(item);
}
}
}
void LLCallFloater::updateNotInVoiceParticipantState(LLAvatarListItem* item)
{
LLUUID participant_id = item->getAvatarId();
ESpeakerState current_state = getState(participant_id);
switch (current_state)
{
case STATE_JOINED:
// If an avatarID is not found in a speakers list from VoiceClient and
// a panel with this ID has a JOINED status this means that this person
// HAS LEFT the call.
setState(item, STATE_LEFT);
{
LLPointer<LLSpeaker> speaker = mSpeakerManager->findSpeaker(participant_id);
if (speaker.notNull())
{
setState(item, STATE_LEFT);
LLPointer<LLSpeaker> speaker = mSpeakerManager->findSpeaker(item->getAvatarId());
if (speaker.isNull())
{
continue;
}
speaker->mHasLeftCurrentCall = TRUE;
}
// If an avatarID is not found in a speakers list from VoiceClient and
// a panel with this ID has a LEFT status this means that this person
// HAS ENTERED session but it is not in voice chat yet. So, set INVITED status
else if ((getState(participant_id) != STATE_LEFT))
{
setState(item, STATE_INVITED);
}
else
{
llwarns << "Unsupported (" << getState(participant_id) << ") state: " << item->getAvatarName() << llendl;
}
}
break;
case STATE_INVITED:
case STATE_LEFT:
// nothing to do. These states should not be changed.
break;
case STATE_UNKNOWN:
// If an avatarID is not found in a speakers list from VoiceClient and
// a panel with this ID has an UNKNOWN status this means that this person
// HAS ENTERED session but it is not in voice chat yet. So, set INVITED status
setState(item, STATE_INVITED);
break;
default:
// for possible new future states.
llwarns << "Unsupported (" << getState(participant_id) << ") state for: " << item->getAvatarName() << llendl;
break;
}
}

View File

@ -145,6 +145,10 @@ private:
*/
void updateParticipantsVoiceState();
/**
* Updates voice state of participant not in current voice channel depend on its current state.
*/
void updateNotInVoiceParticipantState(LLAvatarListItem* item);
void setState(LLAvatarListItem* item, ESpeakerState state);
void setState(const LLUUID& speaker_id, ESpeakerState state)
{

View File

@ -446,19 +446,17 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status )
{
//TODO* CHAT: how to show this?
//LLSD args;
//args["MESSAGE"] = LLTrans::getString("CompileQueueScriptNotFound);
//LLNotificationsUtil::add("SystemMessage", args);
LLSD args;
args["MESSAGE"] = LLTrans::getString("CompileQueueScriptNotFound");
LLNotificationsUtil::add("SystemMessage", args);
buffer = LLTrans::getString("CompileQueueProblemDownloading") + (": ") + data->mScriptName;
}
else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
{
//TODO* CHAT: how to show this?
//LLSD args;
//args["MESSAGE"] = LLTrans::getString("CompileQueueScriptNotFound);
//LLNotificationsUtil::add("SystemMessage", args);
LLSD args;
args["MESSAGE"] = LLTrans::getString("CompileQueueInsufficientPermDownload");
LLNotificationsUtil::add("SystemMessage", args);
buffer = LLTrans::getString("CompileQueueInsufficientPermFor") + (": ") + data->mScriptName;
}

View File

@ -528,7 +528,16 @@ BOOL LLPanelScriptLimitsRegionMemory::postBuild()
std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting");
childSetValue("loading_text", LLSD(msg_waiting));
LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list");
//set all columns to resizable mode even if some columns will be empty
for(S32 column = 0; column < list->getNumColumns(); column++)
{
LLScrollListColumn* columnp = list->getColumn(column);
columnp->mHeader->setHasResizableElement(TRUE);
}
return StartRequestChain();
}

View File

@ -95,7 +95,8 @@ void toast_callback(const LLSD& msg){
}
// check whether incoming IM belongs to an active session or not
if (LLIMModel::getInstance()->getActiveSessionID() == msg["session_id"])
if (LLIMModel::getInstance()->getActiveSessionID().notNull()
&& LLIMModel::getInstance()->getActiveSessionID() == msg["session_id"])
{
return;
}
@ -1577,7 +1578,7 @@ void LLCallDialog::setIcon(const LLSD& session_id, const LLSD& participant_id)
}
}
bool LLOutgoingCallDialog::lifetimeHasExpired()
bool LLCallDialog::lifetimeHasExpired()
{
if (mLifetimeTimer.getStarted())
{
@ -1590,7 +1591,7 @@ bool LLOutgoingCallDialog::lifetimeHasExpired()
return false;
}
void LLOutgoingCallDialog::onLifetimeExpired()
void LLCallDialog::onLifetimeExpired()
{
mLifetimeTimer.stop();
closeFloater();
@ -1744,19 +1745,6 @@ LLCallDialog(payload)
{
}
bool LLIncomingCallDialog::lifetimeHasExpired()
{
if (mLifetimeTimer.getStarted())
{
F32 elapsed_time = mLifetimeTimer.getElapsedTimeF32();
if (elapsed_time > mLifetime)
{
return true;
}
}
return false;
}
void LLIncomingCallDialog::onLifetimeExpired()
{
// check whether a call is valid or not
@ -3218,6 +3206,42 @@ public:
}
};
LLCallInfoDialog::LLCallInfoDialog(const LLSD& payload) : LLCallDialog(payload)
{
}
BOOL LLCallInfoDialog::postBuild()
{
// init notification's lifetime
std::istringstream ss( getString("lifetime") );
if (!(ss >> mLifetime))
{
mLifetime = DEFAULT_LIFETIME;
}
return LLCallDialog::postBuild();
}
void LLCallInfoDialog::onOpen(const LLSD& key)
{
if(key.has("msg"))
{
std::string msg = key["msg"];
getChild<LLTextBox>("msg")->setValue(msg);
}
mLifetimeTimer.start();
}
void LLCallInfoDialog::show(const std::string& status_name, const LLSD& args)
{
LLUIString message = LLTrans::getString(status_name);
message.setArgs(args);
LLSD payload;
payload["msg"] = message;
LLFloaterReg::showInstance("call_info", payload);
}
LLHTTPRegistration<LLViewerChatterBoxSessionStartReply>
gHTTPRegistrationMessageChatterboxsessionstartreply(
"/message/ChatterBoxSessionStartReply");

View File

@ -512,8 +512,8 @@ protected:
// notification's lifetime in seconds
S32 mLifetime;
static const S32 DEFAULT_LIFETIME = 5;
virtual bool lifetimeHasExpired() {return false;};
virtual void onLifetimeExpired() {};
virtual bool lifetimeHasExpired();
virtual void onLifetimeExpired();
virtual void getAllowedRect(LLRect& rect);
@ -543,7 +543,6 @@ public:
static void onStartIM(void* user_data);
private:
/*virtual*/ bool lifetimeHasExpired();
/*virtual*/ void onLifetimeExpired();
void processCallResponse(S32 response);
};
@ -562,8 +561,16 @@ public:
private:
// hide all text boxes
void hideAllText();
/*virtual*/ bool lifetimeHasExpired();
/*virtual*/ void onLifetimeExpired();
};
class LLCallInfoDialog : public LLCallDialog
{
public:
LLCallInfoDialog(const LLSD& payload);
/*virtual*/ BOOL postBuild();
/*virtual*/ void onOpen(const LLSD& key);
static void show(const std::string& status_name, const LLSD& args);
};
// Globals

View File

@ -229,6 +229,7 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
mEnableCallbackRegistrar.add("InspectAvatar.VisibleZoomIn",
boost::bind(&LLInspectAvatar::onVisibleZoomIn, this));
mEnableCallbackRegistrar.add("InspectAvatar.Gear.Enable", boost::bind(&LLInspectAvatar::isNotFriend, this));
mEnableCallbackRegistrar.add("InspectAvatar.Gear.EnableCall", boost::bind(&LLAvatarActions::canCall));
mEnableCallbackRegistrar.add("InspectAvatar.EnableMute", boost::bind(&LLInspectAvatar::enableMute, this));
mEnableCallbackRegistrar.add("InspectAvatar.EnableUnmute", boost::bind(&LLInspectAvatar::enableUnmute, this));

View File

@ -589,8 +589,16 @@ void LLPanelStandStopFlying::setVisible(BOOL visible)
updatePosition();
}
//change visibility of parent layout_panel to animate in/out
if (getParent()) getParent()->setVisible(visible);
// do not change parent visibility in case panel is attached into Move Floater: EXT-3632, EXT-4646
if (!mAttached)
{
//change visibility of parent layout_panel to animate in/out. EXT-2504
if (getParent()) getParent()->setVisible(visible);
}
// also change own visibility to avoid displaying the panel in mouselook (broken when EXT-2504 was implemented).
// See EXT-4718.
LLPanel::setVisible(visible);
}
BOOL LLPanelStandStopFlying::handleToolTip(S32 x, S32 y, MASK mask)
@ -614,7 +622,7 @@ void LLPanelStandStopFlying::reparent(LLFloaterMove* move_view)
LLPanel* parent = dynamic_cast<LLPanel*>(getParent());
if (!parent)
{
llwarns << "Stand/stop flying panel parent is unset" << llendl;
llwarns << "Stand/stop flying panel parent is unset, already attached?: " << mAttached << ", new parent: " << (move_view == NULL ? "NULL" : "Move Floater") << llendl;
return;
}
@ -684,6 +692,7 @@ void LLPanelStandStopFlying::onStopFlyingButtonClick()
gAgent.setFlying(FALSE);
setFocus(FALSE); // EXT-482
setVisible(FALSE);
}
/**

View File

@ -148,7 +148,7 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)
&& column_index == mNameColumnIndex)
{
// ...this is the column with the avatar name
LLUUID avatar_id = getItemId(hit_item);
LLUUID avatar_id = hit_item->getUUID();
if (avatar_id.notNull())
{
// ...valid avatar id
@ -230,14 +230,15 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(
std::string& suffix)
{
LLUUID id = name_item.value().asUUID();
LLScrollListItem* item = NULL;
LLNameListItem* item = NULL;
// Store item type so that we can invoke the proper inspector.
// *TODO Vadim: Is there a more proper way of storing additional item data?
{
LLNameListCtrl::NameItem name_item_(name_item);
name_item_.value = LLSD().with("uuid", id).with("is_group", name_item.target() == GROUP);
item = LLScrollListCtrl::addRow(name_item_, pos);
LLNameListCtrl::NameItem item_p(name_item);
item_p.value = LLSD().with("uuid", id).with("is_group", name_item.target() == GROUP);
item = new LLNameListItem(item_p);
LLScrollListCtrl::addRow(item, item_p, pos);
}
if (!item) return NULL;
@ -298,7 +299,7 @@ void LLNameListCtrl::removeNameItem(const LLUUID& agent_id)
for (item_list::iterator it = getItemList().begin(); it != getItemList().end(); it++)
{
LLScrollListItem* item = *it;
if (getItemId(item) == agent_id)
if (item->getUUID() == agent_id)
{
idx = getItemIndex(item);
break;
@ -335,7 +336,7 @@ void LLNameListCtrl::refresh(const LLUUID& id, const std::string& first,
for (iter = getItemList().begin(); iter != getItemList().end(); iter++)
{
LLScrollListItem* item = *iter;
if (getItemId(item) == id)
if (item->getUUID() == id)
{
LLScrollListCell* cell = (LLScrollListCell*)item->getColumn(0);
cell = item->getColumn(mNameColumnIndex);
@ -375,9 +376,3 @@ void LLNameListCtrl::updateColumns()
}
}
}
// static
LLUUID LLNameListCtrl::getItemId(LLScrollListItem* item)
{
return item->getValue()["uuid"].asUUID();
}

View File

@ -122,7 +122,6 @@ public:
/*virtual*/ void updateColumns();
private:
void showInspector(const LLUUID& avatar_id, bool is_group);
static LLUUID getItemId(LLScrollListItem* item);
private:
S32 mNameColumnIndex;
@ -130,4 +129,24 @@ private:
BOOL mAllowCallingCardDrop;
};
/**
* LLNameListCtrl item
*
* We don't use LLScrollListItem to be able to override getUUID(), which is needed
* because the name list item value is not simply an UUID but a map (uuid, is_group).
*/
class LLNameListItem : public LLScrollListItem
{
public:
LLUUID getUUID() const { return getValue()["uuid"].asUUID(); }
protected:
friend class LLNameListCtrl;
LLNameListItem( const LLScrollListItem::Params& p )
: LLScrollListItem(p)
{
}
};
#endif

View File

@ -356,12 +356,17 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg)
initChannel();
}
/*
//comment all this due to EXT-4432
..may clean up after some time...
//only messages from AGENTS
if(CHAT_SOURCE_OBJECT == chat_msg.mSourceType)
{
if(chat_msg.mChatType == CHAT_TYPE_DEBUG_MSG)
return;//ok for now we don't skip messeges from object, so skip only debug messages
}
*/
LLUUID id;
id.generate();

View File

@ -123,7 +123,14 @@ void LLHandlerUtil::logToIM(const EInstantMessage& session_type,
message);
// restore active session id
LLIMModel::instance().setActiveSessionID(active_session_id);
if (active_session_id.isNull())
{
LLIMModel::instance().resetActiveSessionID();
}
else
{
LLIMModel::instance().setActiveSessionID(active_session_id);
}
}
}

View File

@ -867,7 +867,7 @@ void LLPanelGroupMembersSubTab::handleMemberSelect()
for (itor = selection.begin();
itor != selection.end(); ++itor)
{
LLUUID member_id = (*itor)->getValue()["uuid"];
LLUUID member_id = (*itor)->getUUID();
selected_members.push_back( member_id );
// Get this member's power mask including any unsaved changes
@ -1093,7 +1093,7 @@ void LLPanelGroupMembersSubTab::handleEjectMembers()
for (itor = selection.begin() ;
itor != selection.end(); ++itor)
{
LLUUID member_id = (*itor)->getValue()["uuid"];
LLUUID member_id = (*itor)->getUUID();
selected_members.push_back( member_id );
}
@ -1151,7 +1151,7 @@ void LLPanelGroupMembersSubTab::handleRoleCheck(const LLUUID& role_id,
itor != selection.end(); ++itor)
{
member_id = (*itor)->getValue()["uuid"];
member_id = (*itor)->getUUID();
//see if we requested a change for this member before
if ( mMemberRoleChangeData.find(member_id) == mMemberRoleChangeData.end() )
@ -1242,7 +1242,7 @@ void LLPanelGroupMembersSubTab::handleMemberDoubleClick()
LLScrollListItem* selected = mMembersList->getFirstSelected();
if (selected)
{
LLUUID member_id = selected->getValue()["uuid"];
LLUUID member_id = selected->getUUID();
LLAvatarActions::showProfile( member_id );
}
}
@ -1632,7 +1632,7 @@ void LLPanelGroupMembersSubTab::updateMembers()
LLScrollListItem* member = mMembersList->addElement(row);//, ADD_SORTED);
LLUUID id = member->getValue()["uuid"];
LLUUID id = member->getUUID();
mHasMatch = TRUE;
}
}

View File

@ -98,10 +98,10 @@ void LLPanelLandmarkInfo::resetLocation()
{
LLPanelPlaceInfo::resetLocation();
std::string not_available = getString("not_available");
mCreator->setText(not_available);
mOwner->setText(not_available);
mCreated->setText(not_available);
std::string loading = LLTrans::getString("LoadingData");
mCreator->setText(loading);
mOwner->setText(loading);
mCreated->setText(loading);
mLandmarkTitle->setText(LLStringUtil::null);
mLandmarkTitleEditor->setText(LLStringUtil::null);
mNotesEditor->setText(LLStringUtil::null);

View File

@ -43,6 +43,8 @@
#include "lliconctrl.h"
#include "lltextbox.h"
#include "lltrans.h"
#include "llagent.h"
#include "llexpandabletextbox.h"
#include "llpanelpick.h"
@ -99,12 +101,12 @@ void LLPanelPlaceInfo::resetLocation()
mRequestedID.setNull();
mPosRegion.clearVec();
std::string not_available = getString("not_available");
mMaturityRatingIcon->setValue(not_available);
mMaturityRatingText->setValue(not_available);
mRegionName->setText(not_available);
mParcelName->setText(not_available);
mDescEditor->setText(not_available);
std::string loading = LLTrans::getString("LoadingData");
mMaturityRatingIcon->setValue(loading);
mMaturityRatingText->setValue(loading);
mRegionName->setText(loading);
mParcelName->setText(loading);
mDescEditor->setText(loading);
mSnapshotCtrl->setImageAssetID(LLUUID::null);
mSnapshotCtrl->setFallbackImageName("default_land_picture.j2c");
@ -206,6 +208,10 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)
{
mDescEditor->setText(parcel_data.desc);
}
else
{
mDescEditor->setText(getString("not_available"));
}
S32 region_x;
S32 region_y;

View File

@ -42,6 +42,8 @@
#include "lltextbox.h"
#include "lltexteditor.h"
#include "lltrans.h"
#include "llaccordionctrl.h"
#include "llaccordionctrltab.h"
#include "llagent.h"
@ -163,45 +165,45 @@ void LLPanelPlaceProfile::resetLocation()
mForSalePanel->setVisible(FALSE);
mYouAreHerePanel->setVisible(FALSE);
std::string not_available = getString("not_available");
mParcelOwner->setValue(not_available);
std::string loading = LLTrans::getString("LoadingData");
mParcelOwner->setValue(loading);
mParcelRatingIcon->setValue(not_available);
mParcelRatingText->setText(not_available);
mVoiceIcon->setValue(not_available);
mVoiceText->setText(not_available);
mFlyIcon->setValue(not_available);
mFlyText->setText(not_available);
mPushIcon->setValue(not_available);
mPushText->setText(not_available);
mBuildIcon->setValue(not_available);
mBuildText->setText(not_available);
mScriptsIcon->setValue(not_available);
mScriptsText->setText(not_available);
mDamageIcon->setValue(not_available);
mDamageText->setText(not_available);
mParcelRatingIcon->setValue(loading);
mParcelRatingText->setText(loading);
mVoiceIcon->setValue(loading);
mVoiceText->setText(loading);
mFlyIcon->setValue(loading);
mFlyText->setText(loading);
mPushIcon->setValue(loading);
mPushText->setText(loading);
mBuildIcon->setValue(loading);
mBuildText->setText(loading);
mScriptsIcon->setValue(loading);
mScriptsText->setText(loading);
mDamageIcon->setValue(loading);
mDamageText->setText(loading);
mRegionNameText->setValue(not_available);
mRegionTypeText->setValue(not_available);
mRegionRatingIcon->setValue(not_available);
mRegionRatingText->setValue(not_available);
mRegionOwnerText->setValue(not_available);
mRegionGroupText->setValue(not_available);
mRegionNameText->setValue(loading);
mRegionTypeText->setValue(loading);
mRegionRatingIcon->setValue(loading);
mRegionRatingText->setValue(loading);
mRegionOwnerText->setValue(loading);
mRegionGroupText->setValue(loading);
mEstateNameText->setValue(not_available);
mEstateRatingText->setValue(not_available);
mEstateOwnerText->setValue(not_available);
mCovenantText->setValue(not_available);
mEstateNameText->setValue(loading);
mEstateRatingText->setValue(loading);
mEstateOwnerText->setValue(loading);
mCovenantText->setValue(loading);
mSalesPriceText->setValue(not_available);
mAreaText->setValue(not_available);
mTrafficText->setValue(not_available);
mPrimitivesText->setValue(not_available);
mParcelScriptsText->setValue(not_available);
mTerraformLimitsText->setValue(not_available);
mSubdivideText->setValue(not_available);
mResaleText->setValue(not_available);
mSaleToText->setValue(not_available);
mSalesPriceText->setValue(loading);
mAreaText->setValue(loading);
mTrafficText->setValue(loading);
mPrimitivesText->setValue(loading);
mParcelScriptsText->setValue(loading);
mTerraformLimitsText->setValue(loading);
mSubdivideText->setValue(loading);
mResaleText->setValue(loading);
mSaleToText->setValue(loading);
}
// virtual

View File

@ -34,7 +34,7 @@
#include "llpanelplaces.h"
#include "llassettype.h"
#include "llwindow.h"
#include "lltimer.h"
#include "llinventory.h"
#include "lllandmark.h"
@ -49,6 +49,8 @@
#include "lltrans.h"
#include "lluictrlfactory.h"
#include "llwindow.h"
#include "llagent.h"
#include "llagentpicksinfo.h"
#include "llavatarpropertiesprocessor.h"
@ -73,6 +75,7 @@
#include "llviewerwindow.h"
static const S32 LANDMARK_FOLDERS_MENU_WIDTH = 250;
static const F32 PLACE_INFO_UPDATE_INTERVAL = 3.0;
static const std::string AGENT_INFO_TYPE = "agent";
static const std::string CREATE_LANDMARK_INFO_TYPE = "create_landmark";
static const std::string LANDMARK_INFO_TYPE = "landmark";
@ -830,6 +833,10 @@ void LLPanelPlaces::togglePlaceInfoPanel(BOOL visible)
{
mPlaceProfile->resetLocation();
// Do not reset location info until mResetInfoTimer has expired
// to avoid text blinking.
mResetInfoTimer.setTimerExpirySec(PLACE_INFO_UPDATE_INTERVAL);
LLRect rect = getRect();
LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom);
mPlaceProfile->reshape(new_rect.getWidth(), new_rect.getHeight());
@ -920,11 +927,12 @@ void LLPanelPlaces::changedParcelSelection()
}
}
// Reset location info only if global position is changed
// to reduce unnecessary text and icons updates.
if (prev_pos_global != mPosGlobal)
// Reset location info only if global position has changed
// and update timer has expired to reduce unnecessary text and icons updates.
if (prev_pos_global != mPosGlobal && mResetInfoTimer.hasExpired())
{
mPlaceProfile->resetLocation();
mResetInfoTimer.setTimerExpirySec(PLACE_INFO_UPDATE_INTERVAL);
}
mPlaceProfile->displaySelectedParcelInfo(parcel, region, mPosGlobal, is_current_parcel);

View File

@ -34,6 +34,8 @@
#include "llpanel.h"
class LLTimer;
class LLInventoryItem;
class LLFilterEditor;
class LLLandmark;
@ -132,6 +134,10 @@ private:
// be available (hence zero)
LLVector3d mPosGlobal;
// Sets a period of time during which the requested place information
// is expected to be updated and doesn't need to be reset.
LLTimer mResetInfoTimer;
// Information type currently shown in Place Information panel
std::string mPlaceInfoType;

View File

@ -433,6 +433,12 @@ LLContextMenu* LLParticipantList::LLParticipantListMenu::createMenu()
LLContextMenu* main_menu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>(
"menu_participant_list.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
// AD *TODO: This is workaround for EXT-4725- way to properly enable/disable "Call" menu item in
// enableContextMenuItem() should be found.
bool not_agent = mUUIDs.front() != gAgentID;
bool can_call = not_agent && LLVoiceClient::voiceEnabled() && gVoiceClient->voiceWorking();
main_menu->setItemEnabled("Call", can_call);
// Don't show sort options for P2P chat
bool is_sort_visible = (mParent.mAvatarList && mParent.mAvatarList->size() > 1);
main_menu->setItemVisible("SortByName", is_sort_visible);
@ -628,7 +634,9 @@ bool LLParticipantList::LLParticipantListMenu::enableContextMenuItem(const LLSD&
}
else if (item == "can_call")
{
return LLVoiceClient::voiceEnabled()&&gVoiceClient->voiceWorking();
bool not_agent = mUUIDs.front() != gAgentID;
bool can_call = not_agent && LLVoiceClient::voiceEnabled() && gVoiceClient->voiceWorking();
return can_call;
}
return true;

View File

@ -204,6 +204,7 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("openobject", "floater_openobject.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterOpenObject>);
LLFloaterReg::add("outgoing_call", "floater_outgoing_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLOutgoingCallDialog>);
LLFloaterReg::add("call_info", "floater_call_info.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLCallInfoDialog>);
LLFloaterReg::add("parcel_info", "floater_preview_url.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterParcelInfo>);
LLFloaterPayUtil::registerFloater();

View File

@ -58,7 +58,6 @@ public:
protected:
~LLViewerInventoryItem( void ); // ref counted
BOOL extractSortFieldAndDisplayName(S32* sortField, std::string* displayName) const { return extractSortFieldAndDisplayName(mName, sortField, displayName); }
static char getSeparator() { return '@'; }
mutable std::string mDisplayName;
public:
@ -67,6 +66,7 @@ public:
virtual const std::string& getName() const;
virtual const std::string& getDisplayName() const;
static std::string getDisplayName(const std::string& name);
static char getSeparator() { return '@'; }
virtual S32 getSortField() const;
virtual void setSortField(S32 sortField);
virtual void rename(const std::string& new_name);

View File

@ -6389,10 +6389,9 @@ void handle_selected_texture_info(void*)
msg.assign("Texture info for: ");
msg.append(node->mName);
//TODO* CHAT: how to show this?
//LLSD args;
//args["MESSAGE"] = msg;
//LLNotificationsUtil::add("SystemMessage", args);
LLSD args;
args["MESSAGE"] = msg;
LLNotificationsUtil::add("SystemMessage", args);
U8 te_count = node->getObject()->getNumTEs();
// map from texture ID to list of faces using it
@ -6425,10 +6424,9 @@ void handle_selected_texture_info(void*)
msg.append( llformat("%d ", (S32)(it->second[i])));
}
//TODO* CHAT: how to show this?
//LLSD args;
//args["MESSAGE"] = msg;
//LLNotificationsUtil::add("SystemMessage", args);
LLSD args;
args["MESSAGE"] = msg;
LLNotificationsUtil::add("SystemMessage", args);
}
}
}
@ -7959,6 +7957,7 @@ void initialize_menus()
commit.add("Avatar.Eject", boost::bind(&handle_avatar_eject, LLSD()));
view_listener_t::addMenu(new LLAvatarSendIM(), "Avatar.SendIM");
view_listener_t::addMenu(new LLAvatarCall(), "Avatar.Call");
enable.add("Avatar.EnableCall", boost::bind(&LLAvatarActions::canCall));
view_listener_t::addMenu(new LLAvatarReportAbuse(), "Avatar.ReportAbuse");
view_listener_t::addMenu(new LLAvatarEnableAddFriend(), "Avatar.EnableAddFriend");

View File

@ -1365,10 +1365,9 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
if (check_offer_throttle(mFromName, true))
{
log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString(".");
//TODO* CHAT: how to show this?
//LLSD args;
//args["MESSAGE"] = log_message;
//LLNotificationsUtil::add("SystemMessage", args);
LLSD args;
args["MESSAGE"] = log_message;
LLNotificationsUtil::add("SystemMessage", args);
}
// we will want to open this item when it comes back.
@ -1410,11 +1409,10 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
// send the message
msg->sendReliable(mHost);
//TODO* CHAT: how to show this?
//log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +".";
//LLSD args;
//args["MESSAGE"] = log_message;
//LLNotificationsUtil::add("SystemMessage", args);
log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +".";
LLSD args;
args["MESSAGE"] = log_message;
LLNotificationsUtil::add("SystemMessage", args);
if (busy && (!mFromGroup && !mFromObject))
{
@ -1436,6 +1434,31 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
return false;
}
std::string get_display_name(const std::string& name)
{
// We receive landmark name as \'<n>@name\' where <n> is a number
// LLViewerInventoryItem::getDisplayName will remove \'<n>@ though we need the \'
// Lets save all chars preceding @ and insert them back after <n>@ was removed
std::string saved;
if(std::string::npos != name.find(LLViewerInventoryItem::getSeparator()))
{
int n = 0;
while(!isdigit(name[n]) && LLViewerInventoryItem::getSeparator() != name[n])
{
++n;
}
saved = name.substr(0, n);
}
std::string d_name = LLViewerInventoryItem::getDisplayName(name);
d_name.insert(0, saved);
LLStringUtil::trim(d_name);
return d_name;
}
void inventory_offer_handler(LLOfferInfo* info)
{
//Until throttling is implmented, busy mode should reject inventory instead of silently
@ -1475,7 +1498,7 @@ void inventory_offer_handler(LLOfferInfo* info)
if(LLAssetType::AT_LANDMARK == info->mType)
{
msg = LLViewerInventoryItem::getDisplayName(msg);
msg = get_display_name(msg);
}
LLSD args;
@ -1843,11 +1866,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
// history. Pretend the chat is from a local agent,
// so it will go into the history but not be shown on screen.
//TODO* CHAT: how to show this?
//and this is not system message...
//LLSD args;
//args["MESSAGE"] = buffer;
//LLNotificationsUtil::add("SystemMessage", args);
LLSD args;
args["MESSAGE"] = buffer;
LLNotificationsUtil::add("SystemMessageTip", args);
}
}
break;
@ -3078,10 +3099,9 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
{
// Chat the "back" SLURL. (DEV-4907)
//TODO* CHAT: how to show this?
//LLSD args;
//args["MESSAGE"] = message;
//LLNotificationsUtil::add("SystemMessage", args);
LLSD args;
args["MESSAGE"] = "Teleport completed from " + gAgent.getTeleportSourceSLURL();
LLNotificationsUtil::add("SystemMessageTip", args);
// Set the new position
avatarp->setPositionAgent(agent_pos);

View File

@ -389,13 +389,13 @@ void LLVoiceChannel::setState(EState state)
switch(state)
{
case STATE_RINGING:
gIMMgr->addSystemMessage(mSessionID, "ringing", mNotifyArgs);
LLCallInfoDialog::show("ringing", mNotifyArgs);
break;
case STATE_CONNECTED:
gIMMgr->addSystemMessage(mSessionID, "connected", mNotifyArgs);
LLCallInfoDialog::show("connected", mNotifyArgs);
break;
case STATE_HUNG_UP:
gIMMgr->addSystemMessage(mSessionID, "hang_up", mNotifyArgs);
LLCallInfoDialog::show("hang_up", mNotifyArgs);
break;
default:
break;
@ -635,7 +635,7 @@ void LLVoiceChannelGroup::setState(EState state)
case STATE_RINGING:
if ( !mIsRetrying )
{
gIMMgr->addSystemMessage(mSessionID, "ringing", mNotifyArgs);
LLCallInfoDialog::show("ringing", mNotifyArgs);
}
doSetState(state);
@ -698,7 +698,7 @@ void LLVoiceChannelProximal::handleStatusChange(EStatusType status)
// do not notify user when leaving proximal channel
return;
case STATUS_VOICE_DISABLED:
gIMMgr->addSystemMessage(LLUUID::null, "unavailable", mNotifyArgs);
LLCallInfoDialog::show("unavailable", mNotifyArgs);
return;
default:
break;
@ -897,7 +897,7 @@ void LLVoiceChannelP2P::setState(EState state)
// so provide a special purpose message here
if (mReceivedCall && state == STATE_RINGING)
{
gIMMgr->addSystemMessage(mSessionID, "answering", mNotifyArgs);
LLCallInfoDialog::show("answering", mNotifyArgs);
doSetState(state);
return;
}

View File

@ -2,9 +2,9 @@
<floater
legacy_header_height="13"
can_resize="true"
height="646"
height="546"
layout="topleft"
min_height="646"
min_height="546"
min_width="670"
name="floater_search"
help_topic="floater_search"
@ -21,7 +21,7 @@
Done
</floater.string>
<layout_stack
bottom="641"
bottom="541"
follows="left|right|top|bottom"
layout="topleft"
left="10"
@ -42,7 +42,7 @@
left="0"
name="browser"
top="0"
height="600"
height="500"
width="650" />
<text
follows="bottom|left"

View File

@ -30,6 +30,8 @@
name="Call">
<menu_item_call.on_click
function="Avatar.Call" />
<menu_item_call.on_enable
function="Avatar.EnableCall" />
</menu_item_call>
<menu_item_call
label="Invite to Group"

View File

@ -30,6 +30,8 @@
name="Call">
<menu_item_call.on_click
function="Avatar.Call" />
<menu_item_call.on_enable
function="Avatar.EnableCall" />
</menu_item_call>
<menu_item_call
label="Invite to Group"

View File

@ -32,6 +32,8 @@
name="call">
<menu_item_call.on_click
function="InspectAvatar.Call"/>
<menu_item_call.on_enable
function="InspectAvatar.Gear.EnableCall"/>
</menu_item_call>
<menu_item_call
label="Teleport"

View File

@ -57,9 +57,6 @@
name="Call">
<menu_item_call.on_click
function="Avatar.Call" />
<menu_item_call.on_enable
function="ParticipantList.EnableItem"
parameter="can_call" />
</menu_item_call>
<menu_item_call
enabled="true"

View File

@ -41,6 +41,7 @@
height="20"
layout="topleft"
left_pad="5"
allow_html="false"
use_ellipses="true"
name="region"
text_color="white"