This commit is contained in:
Shyotl
2015-02-27 05:23:30 -06:00
41 changed files with 372 additions and 795 deletions

View File

@@ -96,15 +96,20 @@ if (WINDOWS)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /wd4267 /wd4250 /wd4244")
endif(WORD_SIZE EQUAL 32)
if (MSVC12)
# configure win32 API for windows vista+ compatibility
set(WINVER "0x0600" CACHE STRING "Win32 API Target version (see http://msdn.microsoft.com/en-us/library/aa383745%28v=VS.85%29.aspx)")
add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}")
else (MSVC12)
if (WORD_SIZE EQUAL 32)
# configure win32 API for windows XP+ compatibility
set(WINVER "0x0501" CACHE STRING "Win32 API Target version (see http://msdn.microsoft.com/en-us/library/aa383745%28v=VS.85%29.aspx)")
add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}")
endif (MSVC12)
else (WORD_SIZE EQUAL 32)
# configure win32 API for windows vista+ compatibility
set(WINVER "0x0600" CACHE STRING "Win32 API Target version (see http://msdn.microsoft.com/en-us/library/aa383745%28v=VS.85%29.aspx)")
add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}")
endif (WORD_SIZE EQUAL 32)
# Use special XP-compatible toolchain on 32-bit builds
if (MSVC12 AND (WORD_SIZE EQUAL 32))
set(CMAKE_GENERATOR_TOOLSET "v120xp")
endif (MSVC12 AND (WORD_SIZE EQUAL 32))
# Are we using the crummy Visual Studio KDU build workaround?
if (NOT DISABLE_FATAL_WARNINGS)

View File

@@ -779,6 +779,22 @@ class CygwinSetup(WindowsSetup):
'-DROOT_PROJECT_NAME:STRING=%(project_name)s '
'%(opts)s "%(dir)s"' % args)
def run(self, command, name=None):
'''Run a program. If the program fails, raise an exception.'''
ret = os.system(command)
if ret:
if name is None:
name = os.path.normpath(shlex.split(command.encode('utf8'),posix=False)[0].strip('"'))
path = self.find_in_path(name)
if not path:
ret = 'was not found'
else:
ret = 'exited with status %d' % ret
raise CommandError('the command %r %s' %
(name, ret))
setup_platform = {
'darwin': DarwinSetup,
'linux2': LinuxSetup,

View File

@@ -94,9 +94,9 @@ set(viewer_SOURCE_FILES
floaterao.cpp
floaterlocalassetbrowse.cpp
floatervoicelicense.cpp
generichandlers.cpp
hbfloatergrouptitles.cpp
generichandlers.cpp
groupchatlistener.cpp
hbfloatergrouptitles.cpp
hippofloaterxml.cpp
hippogridmanager.cpp
hippolimits.cpp
@@ -623,7 +623,7 @@ set(viewer_HEADER_FILES
floaterao.h
floaterlocalassetbrowse.h
floatervoicelicense.h
generichandlers.h
generichandlers.h
groupchatlistener.h
hbfloatergrouptitles.h
hippofloaterxml.h
@@ -1137,8 +1137,6 @@ set(viewer_HEADER_FILES
shcommandhandler.h
shfloatermediaticker.h
wlfPanel_AdvSettings.h
VertexCache.h
VorbisFramework.h
)
source_group("CMake Rules" FILES ViewerInstall.cmake)

View File

@@ -1,111 +0,0 @@
/**
* @file VertexCache.h
* @brief VertexCache class definition
*
* $LicenseInfo:firstyear=2002&license=viewergpl$
*
* Copyright (c) 2002-2009, Linden Research, Inc.
*
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
#ifndef VERTEX_CACHE_H
#define VERTEX_CACHE_H
class VertexCache
{
public:
VertexCache(int size)
{
numEntries = size;
entries = new int[numEntries];
for(int i = 0; i < numEntries; i++)
entries[i] = -1;
}
VertexCache() { VertexCache(16); }
~VertexCache() { delete[] entries; entries = 0; }
bool InCache(int entry)
{
bool returnVal = false;
for(int i = 0; i < numEntries; i++)
{
if(entries[i] == entry)
{
returnVal = true;
break;
}
}
return returnVal;
}
int AddEntry(int entry)
{
int removed;
removed = entries[numEntries - 1];
//push everything right one
for(int i = numEntries - 2; i >= 0; i--)
{
entries[i + 1] = entries[i];
}
entries[0] = entry;
return removed;
}
void Clear()
{
memset(entries, -1, sizeof(int) * numEntries);
}
void Copy(VertexCache* inVcache)
{
for(int i = 0; i < numEntries; i++)
{
inVcache->Set(i, entries[i]);
}
}
int At(int index) { return entries[index]; }
void Set(int index, int value) { entries[index] = value; }
private:
int *entries;
int numEntries;
};
#endif

View File

@@ -1,86 +0,0 @@
/**
* @file VorbisFramework.h
* @author Dave Camp
* @date Fri Oct 10 2003
* @brief For the Macview project
*
* $LicenseInfo:firstyear=2003&license=viewergpl$
*
* Copyright (c) 2003-2009, Linden Research, Inc.
*
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
#ifdef __cplusplus
extern "C" {
#endif
#include "ogg/ogg.h"
#include "vorbis/codec.h"
#include "vorbis/vorbisenc.h"
extern int mac_vorbis_analysis(vorbis_block *vb,ogg_packet *op);
extern int mac_vorbis_analysis_headerout(vorbis_dsp_state *v,
vorbis_comment *vc,
ogg_packet *op,
ogg_packet *op_comm,
ogg_packet *op_code);
extern int mac_vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi);
extern int mac_vorbis_encode_ctl(vorbis_info *vi,int number,void *arg);
extern int mac_vorbis_encode_setup_init(vorbis_info *vi);
extern int mac_vorbis_encode_setup_managed(vorbis_info *vi,
long channels,
long rate,
long max_bitrate,
long nominal_bitrate,
long min_bitrate);
extern void mac_vorbis_info_init(vorbis_info *vi);
extern void mac_vorbis_info_clear(vorbis_info *vi);
extern void mac_vorbis_comment_init(vorbis_comment *vc);
extern void mac_vorbis_comment_clear(vorbis_comment *vc);
extern int mac_vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb);
extern int mac_vorbis_block_clear(vorbis_block *vb);
extern void mac_vorbis_dsp_clear(vorbis_dsp_state *v);
extern float **mac_vorbis_analysis_buffer(vorbis_dsp_state *v,int vals);
extern int mac_vorbis_analysis_wrote(vorbis_dsp_state *v,int vals);
extern int mac_vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb);
extern int mac_ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op);
extern int mac_ogg_stream_init(ogg_stream_state *os,int serialno);
extern int mac_ogg_stream_flush(ogg_stream_state *os, ogg_page *og);
extern int mac_ogg_stream_pageout(ogg_stream_state *os, ogg_page *og);
extern int mac_ogg_page_eos(ogg_page *og);
extern int mac_ogg_stream_clear(ogg_stream_state *os);
#ifdef __cplusplus
}
#endif

View File

@@ -786,9 +786,6 @@ void HippoGridManager::loadFromFile()
parseFile(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "grids_sg1.xml"), false);
// merge default grid info, if newer. Force load, if list of grids is empty.
parseFile(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "default_grids.xml"), !mGridInfo.empty());
// merge grid info from web site, if newer. Force load, if list of grids is empty.
if (gSavedSettings.getBOOL("CheckForGridUpdates"))
parseUrl(gSavedSettings.getString("GridUpdateList"), !mGridInfo.empty());
std::string last_grid = gSavedSettings.getString("LastSelectedGrid");
if (last_grid.empty()) last_grid = gSavedSettings.getString("DefaultGrid");
@@ -796,8 +793,9 @@ void HippoGridManager::loadFromFile()
setCurrentGrid(last_grid);
}
void HippoGridManager::parseUrl(const std::string url, bool mergeIfNewer)
void HippoGridManager::parseUrl()
{
const std::string& url(gSavedSettings.getString("GridUpdateList"));
if (url.empty()) return;
llinfos << "Loading grid info from '" << url << "'." << llendl;
@@ -816,8 +814,8 @@ void HippoGridManager::parseUrl(const std::string url, bool mergeIfNewer)
return;
}
LLSD gridInfo = response["body"];
parseData(gridInfo, mergeIfNewer);
// Force load, if list of grids is empty.
parseData(response["body"], !mGridInfo.empty());
}
void HippoGridManager::parseFile(const std::string& fileName, bool mergeIfNewer)

View File

@@ -187,6 +187,8 @@ public:
return mCurrentGridChangeSignal->connect(cb);
}
void parseUrl();
private:
friend class HippoGridInfo;
std::map<std::string, HippoGridInfo*> mGridInfo;
@@ -200,7 +202,6 @@ private:
void cleanup();
void loadFromFile();
void parseFile(const std::string& fileName, bool mergeIfNewer);
void parseUrl(const std::string url, bool mergeIfNewer);
void parseData(LLSD &gridInfo, bool mergeIfNewer);
};

View File

@@ -84,12 +84,12 @@ void LFSimFeatureHandler::setSupportedFeatures()
//if (hg)
{
has_feature_or_default(mDestinationGuideURL, extras, "destination-guide-url");
mMapServerURL = extras.has("map-server-url") ? extras["map-server-url"].asString() : "";
mMapServerURL = extras.has("map-server-url") ? extras["map-server-url"].asString() : LLStringUtil::null;
has_feature_or_default(mSearchURL, extras, "search-server-url");
if (extras.has("GridName"))
{
const std::string& grid_name(extras["GridName"]);
mGridName = gHippoGridManager->getConnectedGrid()->getGridName() != grid_name ? grid_name : "";
mGridName = gHippoGridManager->getConnectedGrid()->getGridName() != grid_name ? grid_name : LLStringUtil::null;
}
}
has_feature_or_default(mSayRange, extras, "say-range");
@@ -102,7 +102,7 @@ void LFSimFeatureHandler::setSupportedFeatures()
//if (hg)
{
mDestinationGuideURL.reset();
mMapServerURL = "";
mMapServerURL = LLStringUtil::null;
mSearchURL.reset();
mGridName.reset();
}

View File

@@ -1130,6 +1130,11 @@ bool LLAppViewer::mainLoop()
joystick->setNeedsReset(true);
LLEventPump& mainloop(LLEventPumps::instance().obtain("mainloop"));
// merge grid info from web site, if newer.
if (gSavedSettings.getBOOL("CheckForGridUpdates"))
gHippoGridManager->parseUrl();
// As we do not (yet) send data on the mainloop LLEventPump that varies
// with each frame, no need to instantiate a new LLSD event object each
// time. Obviously, if that changes, just instantiate the LLSD at the

View File

@@ -65,6 +65,7 @@
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
///----------------------------------------------------------------------------
const S32& friend_name_system();
class LLTrackingData
{
@@ -635,7 +636,7 @@ void LLAvatarTracker::processChange(LLMessageSystem* msg)
{
std::string fullname;
LLSD args;
if (LLAvatarNameCache::getNSName(agent_id, fullname))
if (LLAvatarNameCache::getNSName(agent_id, fullname, friend_name_system()))
args["NAME"] = fullname;
LLSD payload;
@@ -654,7 +655,7 @@ void LLAvatarTracker::processChange(LLMessageSystem* msg)
{
std::string fullname;
LLSD args;
if (LLAvatarNameCache::getNSName(agent_id, fullname))
if (LLAvatarNameCache::getNSName(agent_id, fullname, friend_name_system()))
args["NAME"] = fullname;
LLSD payload;
@@ -743,7 +744,7 @@ static void on_avatar_name_cache_notify(const LLUUID& agent_id,
// Popup a notify box with online status of this agent
// Use display name only because this user is your friend
LLSD args;
args["NAME"] = av_name.getNSName();
args["NAME"] = av_name.getNSName(friend_name_system());
args["STATUS"] = online ? LLTrans::getString("OnlineStatus") : LLTrans::getString("OfflineStatus");
// Popup a notify box with online status of this agent
@@ -900,7 +901,7 @@ bool LLCollectMappableBuddies::operator()(const LLUUID& buddy_id, LLRelationship
{
LLAvatarName av_name;
LLAvatarNameCache::get( buddy_id, &av_name);
buddy_map_t::value_type value(av_name.getDisplayName(), buddy_id);
buddy_map_t::value_type value(av_name.getNSName(friend_name_system()), buddy_id);
if(buddy->isOnline() && buddy->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION))
{
mMappable.insert(value);
@@ -919,7 +920,6 @@ bool LLCollectOnlineBuddies::operator()(const LLUUID& buddy_id, LLRelationship*
return true;
}
const S32& friend_name_system();
bool LLCollectAllBuddies::operator()(const LLUUID& buddy_id, LLRelationship* buddy)
{
LLAvatarName av_name;

View File

@@ -70,6 +70,8 @@
#include "rlvhandler.h"
// [/RLVa:KB]
#include <boost/algorithm/string/predicate.hpp>
//
// Global statics
//
@@ -501,7 +503,7 @@ LLColor4 get_text_color(const LLChat& chat, bool from_im)
}
static const LLCachedControl<bool> sKeywordsChangeColor(gSavedPerAccountSettings, "KeywordsChangeColor", false);
if (sKeywordsChangeColor && gAgentID != chat.mFromID && chat.mSourceType != CHAT_SOURCE_SYSTEM && AscentKeyword::hasKeyword(chat.mText.substr(chat.mFromName.length()), 1))
if (sKeywordsChangeColor && gAgentID != chat.mFromID && chat.mSourceType != CHAT_SOURCE_SYSTEM && AscentKeyword::hasKeyword(boost::starts_with(chat.mText, chat.mFromName) ? chat.mText.substr(chat.mFromName.length()) : chat.mText, 1))
{
static const LLCachedControl<LLColor4> sKeywordsColor(gSavedPerAccountSettings, "KeywordsColor", LLColor4(1.f, 1.f, 1.f, 1.f));
text_color = sKeywordsColor;

View File

@@ -346,13 +346,12 @@ void LLFloaterCustomize::onBtnImport_continued(AIFilePicker* filepicker)
// <linden_genepool version="1.0" [metaversion="?"]> (root)
//-------------------------------------------------------------------------
std::string metaversion;
U32 metaversion_major;
U32 metaversion_major = 0; // No metaversion
AIXMLParser linden_genepool(filename, "wearable import file", "linden_genepool", 1);
linden_genepool.attribute("version", "1.0");
linden_genepool.attribute("metaversion", metaversion);
if (!LLStringUtil::convertToU32(metaversion, metaversion_major) || metaversion_major > 1)
if (linden_genepool.attribute("metaversion", metaversion) && (!LLStringUtil::convertToU32(metaversion, metaversion_major) || metaversion_major > 1))
{
THROW_MALERT("AIXMLImportRootVersionError", args("[TAG]", "metaversion")("[VERSIONMAJOR]", "1"));
}

View File

@@ -328,9 +328,10 @@ const S32& friend_name_system()
return name_system;
}
static void update_friend_item(LLScrollListItem* item, const LLAvatarName& avname)
static void update_friend_name(LLScrollListCtrl* list, const LLUUID& id, const LLAvatarName& avname)
{
item->getColumn(1)->setValue(avname.getNSName(friend_name_system()));
if (LLScrollListItem* item = list->getItem(id))
item->getColumn(1)->setValue(avname.getNSName(friend_name_system()));
}
void LLPanelFriends::addFriend(const LLUUID& agent_id)
@@ -399,8 +400,8 @@ void LLPanelFriends::addFriend(const LLUUID& agent_id)
.value(have_name ? relation_info->getChangeSerialNum() : -1);
element.columns.add(cell);
LLScrollListItem* item(mFriendsList->addRow(element));
if (!have_name) LLAvatarNameCache::get(agent_id, boost::bind(update_friend_item, item, _2));
mFriendsList->addRow(element);
if (!have_name) LLAvatarNameCache::get(agent_id, boost::bind(update_friend_name, mFriendsList, _1, _2));
}
// propagate actual relationship to UI.
@@ -421,7 +422,7 @@ void LLPanelFriends::updateFriendItem(const LLUUID& agent_id, const LLRelationsh
else
{
gCacheName->getFullName(agent_id, fullname);
LLAvatarNameCache::get(agent_id, boost::bind(update_friend_item, itemp, _2));
LLAvatarNameCache::get(agent_id, boost::bind(update_friend_name, mFriendsList, _1, _2));
itemp->getColumn(LIST_FRIEND_UPDATE_GEN)->setValue(-1);
}
@@ -459,7 +460,9 @@ void LLPanelFriends::updateFriendItem(const LLUUID& agent_id, const LLRelationsh
itemp->getColumn(LIST_EDIT_THEIRS)->setValue(info->isRightGrantedFrom(LLRelationship::GRANT_MODIFY_OBJECTS));
// enable this item, in case it was disabled after user input
itemp->setEnabled(true);
itemp->getColumn(LIST_VISIBLE_ONLINE)->setEnabled(true);
itemp->getColumn(LIST_VISIBLE_MAP)->setEnabled(true);
itemp->getColumn(LIST_EDIT_MINE)->setEnabled(true);
mFriendsList->setNeedsSort();
@@ -959,7 +962,10 @@ void LLPanelFriends::applyRightsToFriends()
rights_updates.insert(std::make_pair(id, rights));
// disable these ui elements until response from server
// to avoid race conditions
(*itr)->setEnabled(false);
LLScrollListItem& item = *(*itr);
item.getColumn(LIST_VISIBLE_ONLINE)->setEnabled(false);
item.getColumn(LIST_VISIBLE_MAP)->setEnabled(false);
item.getColumn(LIST_EDIT_MINE)->setEnabled(false);
}
}

View File

@@ -79,7 +79,7 @@ BOOL LLFloaterObjectIMInfo::postBuild()
{
getChild<LLUICtrl>("Mute")->setCommitCallback(boost::bind(&LLFloaterObjectIMInfo::onClickMute, this));
getChild<LLTextBox>("OwnerName")->setClickedCallback(boost::bind(boost::ref(mGroupOwned) ? boost::bind(LLGroupActions::show, boost::ref(mOwnerID)) : boost::bind(show_avatar_profile, boost::ref(mOwnerID))));
getChild<LLTextBox>("Slurl")->setClickedCallback(boost::bind(LLUrlAction::showLocationOnMap, "secondlife://" + static_cast<std::string>(boost::ref(mSLurl))));
getChild<LLTextBox>("Slurl")->setClickedCallback(boost::bind(LLUrlAction::executeSLURL, boost::bind(std::plus<std::string>(), "secondlife:///app/worldmap/", boost::ref(mSLurl))));
return true;
}
@@ -104,7 +104,11 @@ void LLFloaterObjectIMInfo::update(const LLSD& data)
childSetVisible("Slurl",have_slurl);
childSetText("ObjectName",mName);
childSetText("Slurl",mSLurl);
std::string slurl(mSLurl);
std::string::size_type i = slurl.rfind("?owner_not_object");
if (i != std::string::npos)
slurl.erase(i) += getString("owner");
childSetText("Slurl", slurl);
childSetText("OwnerName", LLStringUtil::null);
getChildView("ObjectID")->setValue(data["object_id"].asUUID());

View File

@@ -593,11 +593,10 @@ void LLFloaterWorldMap::trackAvatar( const LLUUID& avatar_id, const std::string&
getChild<LLUICtrl>("spin z")->setValue(LLSD(200.f));
}
// Don't re-request info if we already have it or we won't have it in time to teleport
if (mTrackedStatus != LLTracker::TRACKING_AVATAR || name != mTrackedAvatarName)
if (mTrackedStatus != LLTracker::TRACKING_AVATAR || avatar_id != mTrackedAvatarID)
{
mTrackedStatus = LLTracker::TRACKING_AVATAR;
mTrackedAvatarName = name;
LLTracker::trackAvatar(avatar_id, name);
LLTracker::trackAvatar(mTrackedAvatarID = avatar_id, name);
}
}
else

View File

@@ -192,7 +192,7 @@ private:
LLVector3d mTrackedLocation;
LLTracker::ETrackingStatus mTrackedStatus;
std::string mTrackedSimName;
std::string mTrackedAvatarName;
LLUUID mTrackedAvatarID;
LLSLURL mSLURL;
LLCtrlListInterface * mListFriendCombo;

View File

@@ -53,11 +53,9 @@
#include "llglheaders.h"
#include "llagent.h"
// Globals
//LLView* gGroupNotifyBoxView = NULL;
const F32 ANIMATION_TIME = 0.333f;
S32 LLGroupNotifyBox::sGroupNotifyBoxCount = 0;
static S32 sGroupNotifyBoxCount = 0;
//---------------------------------------------------------------------------
@@ -90,7 +88,7 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject,
const std::string& inventory_name,
const LLSD& inventory_offer)
: LLPanel("groupnotify", LLGroupNotifyBox::getGroupNotifyRect(), BORDER_YES),
mAnimating(TRUE),
mAnimating(true),
mTimer(),
mGroupID(group_id),
mHasInventory(has_inventory),
@@ -123,9 +121,6 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject,
setBackgroundOpaque(TRUE);
setBackgroundColor( gColors.getColor("GroupNotifyBoxColor") );
LLIconCtrl* icon;
LLTextEditor* text;
S32 y = TOP;
S32 x = HPAD + HPAD;
@@ -159,18 +154,9 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject,
x = HPAD + HPAD;
// TODO: change this to be the group icon.
if (!group_insignia.isNull())
{
icon = new LLIconCtrl(std::string("icon"),
LLRect(x, y, x+ICON_WIDTH, y-ICON_WIDTH),
group_insignia.asString());
}
else
{
icon = new LLIconCtrl(std::string("icon"),
LLRect(x, y, x+ICON_WIDTH, y-ICON_WIDTH),
std::string("notify_box_icon.tga"));
}
LLIconCtrl* icon = new LLIconCtrl(std::string("icon"),
LLRect(x, y, x+ICON_WIDTH, y-ICON_WIDTH),
group_insignia.isNull() ? "notify_box_icon.tga" : group_insignia.asString());
icon->setMouseOpaque(FALSE);
addChild(icon);
@@ -179,7 +165,7 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject,
// If we have inventory with this message, leave room for the name.
S32 box_bottom = BTN_TOP + (mHasInventory ? (LINE_HEIGHT + 2*VPAD) : 0);
text = new LLViewerTextEditor(std::string("box"),
LLTextEditor* text = new LLViewerTextEditor(std::string("box"),
LLRect(x, y, RIGHT, box_bottom),
DB_GROUP_NOTICE_MSG_STR_LEN,
LLStringUtil::null,
@@ -217,45 +203,42 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject,
if (mHasInventory)
{
addChild(new NoticeText(std::string("subjecttitle"),LLRect(x,y,x + LABEL_WIDTH,y - LINE_HEIGHT),LLTrans::getString("GroupNotifyAttached"),LLFontGL::getFontSansSerif()));
addChild(new NoticeText(std::string("subjecttitle"),LLRect(x,y,x + LABEL_WIDTH,y - LINE_HEIGHT),LLTrans::getString("GroupNotifyAttached"),LLFontGL::getFontSansSerif()));
LLUIImagePtr item_icon = LLInventoryIcon::getIcon(mInventoryOffer->mType,
LLInventoryType::IT_TEXTURE,
0, FALSE);
LLUIImagePtr item_icon = LLInventoryIcon::getIcon(mInventoryOffer->mType,
LLInventoryType::IT_TEXTURE,
0, FALSE);
x += LABEL_WIDTH + HPAD;
x += LABEL_WIDTH + HPAD;
std::stringstream ss;
ss << " " << inventory_name;
LLTextBox *line = new LLTextBox(std::string("object_name"),LLRect(x,y,RIGHT - HPAD,y - LINE_HEIGHT),ss.str(),LLFontGL::getFontSansSerif());
line->setEnabled(FALSE);
line->setBorderVisible(TRUE);
line->setDisabledColor(LLColor4::blue4);
line->setFontStyle(LLFontGL::NORMAL);
line->setBackgroundVisible(true);
line->setBackgroundColor( semi_transparent );
addChild(line);
std::stringstream ss;
ss << " " << inventory_name;
LLTextBox *line = new LLTextBox(std::string("object_name"),LLRect(x,y,RIGHT - HPAD,y - LINE_HEIGHT),ss.str(),LLFontGL::getFontSansSerif());
line->setEnabled(FALSE);
line->setBorderVisible(TRUE);
line->setDisabledColor(LLColor4::blue4);
line->setFontStyle(LLFontGL::NORMAL);
line->setBackgroundVisible(true);
line->setBackgroundColor( semi_transparent );
addChild(line);
icon = new LLIconCtrl(std::string("icon"),
LLRect(x, y, x+16, y-16),
item_icon->getName());
icon->setMouseOpaque(FALSE);
addChild(icon);
icon = new LLIconCtrl(std::string("icon"),
LLRect(x, y, x+16, y-16),
item_icon->getName());
icon->setMouseOpaque(FALSE);
addChild(icon);
}
LLButton* btn;
btn = new LLButton(LLTrans::getString("next"),
mNextBtn = new LLButton(LLTrans::getString("next"),
LLRect(getRect().getWidth()-26, BOTTOM_PAD + 20, getRect().getWidth()-2, BOTTOM_PAD),
std::string("notify_next.png"),
std::string("notify_next.png"),
LLStringUtil::null,
boost::bind(&LLGroupNotifyBox::onClickNext, this),
boost::bind(&LLGroupNotifyBox::moveToBack, this),
LLFontGL::getFontSansSerif());
btn->setToolTip(LLTrans::getString("next"));
btn->setScaleImage(TRUE);
addChild(btn);
mNextBtn = btn;
mNextBtn->setToolTip(LLTrans::getString("next"));
mNextBtn->setScaleImage(TRUE);
addChild(mNextBtn);
S32 btn_width = 80;
S32 wide_btn_width = 136;
@@ -267,13 +250,12 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject,
btn_width,
BTN_HEIGHT);
btn = new LLButton(LLTrans::getString("ok"), btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::onClickOk,this));
LLButton* btn = new LLButton(LLTrans::getString("ok"), btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::close, this));
addChild(btn, -1);
setDefaultBtn(btn);
x += btn_width + HPAD;
btn_rect.setOriginAndSize(x,
BOTTOM_PAD,
wide_btn_width,
@@ -292,27 +274,14 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject,
wide_btn_width,
BTN_HEIGHT);
std::string btn_lbl("");
if(is_openable(mInventoryOffer->mType))
{
btn_lbl = LLTrans::getString("GroupNotifyOpenAttachment");
}
else
{
btn_lbl = LLTrans::getString("GroupNotifySaveAttachment");
}
mSaveInventoryBtn = new LLButton(btn_lbl, btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::onClickSaveInventory,this));
mSaveInventoryBtn = new LLButton(LLTrans::getString(is_openable(mInventoryOffer->mType) ? "GroupNotifyOpenAttachment" : "GroupNotifySaveAttachment"), btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::onClickSaveInventory,this));
mSaveInventoryBtn->setVisible(mHasInventory);
addChild(mSaveInventoryBtn);
}
sGroupNotifyBoxCount++;
// If this is the only notify box, don't show the next button
if (sGroupNotifyBoxCount == 1)
{
mNextBtn->setVisible(FALSE);
}
if (++sGroupNotifyBoxCount == 1)
mNextBtn->setVisible(false);
}
@@ -352,7 +321,7 @@ void LLGroupNotifyBox::draw()
}
else
{
mAnimating = FALSE;
mAnimating = false;
LLPanel::draw();
}
}
@@ -363,11 +332,11 @@ void LLGroupNotifyBox::close()
// The group notice dialog may be an inventory offer.
// If it has an inventory save button and that button is still enabled
// Then we need to send the inventory declined message
if(mHasInventory)
if (mHasInventory)
{
mInventoryOffer->forceResponse(IOR_DECLINE);
mInventoryOffer = NULL;
mHasInventory = FALSE;
mHasInventory = false;
}
gNotifyBoxView->removeChild(this);
@@ -384,9 +353,7 @@ void LLGroupNotifyBox::initClass()
//static
bool LLGroupNotifyBox::onNewNotification(const LLSD& notify)
{
LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
if (notification)
if (LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID()))
{
const LLSD& payload = notification->getPayload();
// Get the group data
@@ -397,8 +364,7 @@ bool LLGroupNotifyBox::onNewNotification(const LLSD& notify)
return false;
}
LLGroupNotifyBox* self;
self = new LLGroupNotifyBox(payload["subject"].asString(),
gNotifyBoxView->addChild(new LLGroupNotifyBox(payload["subject"].asString(),
payload["message"].asString(),
payload["sender_name"].asString(),
payload["group_id"].asUUID(),
@@ -407,8 +373,7 @@ bool LLGroupNotifyBox::onNewNotification(const LLSD& notify)
notification->getDate(),
payload["inventory_offer"].isDefined(),
payload["inventory_name"].asString(),
payload["inventory_offer"]);
gNotifyBoxView->addChild(self);
payload["inventory_offer"]));
}
return false;
}
@@ -424,14 +389,12 @@ void LLGroupNotifyBox::moveToBack()
if (sGroupNotifyBoxCount > 1)
{
LLView* view = gNotifyBoxView->getFirstChild();
if(view && "groupnotify" == view->getName())
if (view && "groupnotify" == view->getName())
{
LLGroupNotifyBox* front = (LLGroupNotifyBox*)view;
if(front->mNextBtn)
LLGroupNotifyBox* front = static_cast<LLGroupNotifyBox*>(view);
if (front->mNextBtn)
{
front->mNextBtn->setVisible(TRUE);
front->mNextBtn->setVisible(true);
}
}
}
@@ -452,23 +415,13 @@ LLRect LLGroupNotifyBox::getGroupNotifyRect()
}
void LLGroupNotifyBox::onClickOk()
{
close();
}
void LLGroupNotifyBox::onClickSaveInventory()
{
mInventoryOffer->forceResponse(IOR_ACCEPT);
mInventoryOffer = NULL;
mHasInventory = FALSE;
mHasInventory = false;
// Each item can only be received once, so disable the button.
mSaveInventoryBtn->setEnabled(FALSE);
}
void LLGroupNotifyBox::onClickNext()
{
moveToBack();
}

View File

@@ -52,7 +52,6 @@ public:
void close();
static void initClass();
static void destroyClass();
static bool onNewNotification(const LLSD& notification);
protected:
@@ -72,11 +71,6 @@ protected:
/*virtual*/ ~LLGroupNotifyBox();
// JC - removed support for clicking in background to dismiss
// the dialogs.
// /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
// /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
// /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
// Animate as sliding onto the screen.
@@ -89,15 +83,11 @@ protected:
static LLRect getGroupNotifyRect();
// internal handler for button being clicked
void onClickOk();
void onClickSaveInventory();
// for "next" button
void onClickNext();
private:
// Are we sliding onscreen?
BOOL mAnimating;
bool mAnimating;
// Time since this notification was displayed.
// This is an LLTimer not a frame timer because I am concerned
@@ -107,17 +97,9 @@ private:
LLButton* mNextBtn;
LLButton* mSaveInventoryBtn;
static S32 sGroupNotifyBoxCount;
LLUUID mGroupID;
BOOL mHasInventory;
bool mHasInventory;
LLOfferInfo* mInventoryOffer;
};
// This view contains the stack of notification windows.
//extern LLView* gGroupNotifyBoxView;
const S32 GROUP_LAYOUT_DEFAULT = 0;
const S32 GROUP_LAYOUT_SCRIPT_DIALOG = 1;
#endif

View File

@@ -336,6 +336,9 @@ LLFloaterIMPanel::LLFloaterIMPanel(
mFactoryMap["active_speakers_panel"] = LLCallbackMap(createSpeakersPanel, this);
mVoiceChannel = new LLVoiceChannelGroup(mSessionUUID, mLogLabel);
break;
default:
llwarns << "Unknown session type: " << mDialog << llendl;
// fallthrough, Singu TODO: Find out which cases this happens in, seems to only be P2P, though.
// just received text from another user
case IM_NOTHING_SPECIAL:
mTextIMPossible = LLVoiceClient::getInstance()->isSessionTextIMPossible(mSessionUUID);
@@ -347,9 +350,6 @@ LLFloaterIMPanel::LLFloaterIMPanel(
LLMuteList::instance().addObserver(this);
mDing = gSavedSettings.getBOOL("LiruNewMessageSoundIMsOn");
break;
default:
llwarns << "Unknown session type" << llendl;
break;
}
mSpeakers = new LLIMSpeakerMgr(mVoiceChannel);
@@ -444,9 +444,6 @@ LLFloaterIMPanel::~LLFloaterIMPanel()
delete mVoiceChannel;
mVoiceChannel = NULL;
//delete focus lost callback
mFocusLostSignal.disconnect();
}
// virtual
@@ -484,7 +481,7 @@ BOOL LLFloaterIMPanel::postBuild()
mInputEditor = getChild<LLLineEditor>("chat_editor");
mInputEditor->setAutoreplaceCallback(boost::bind(&LLAutoReplace::autoreplaceCallback, LLAutoReplace::getInstance(), _1, _2, _3, _4, _5));
mInputEditor->setFocusReceivedCallback( boost::bind(&LLFloaterIMPanel::onInputEditorFocusReceived, this) );
mFocusLostSignal = mInputEditor->setFocusLostCallback(boost::bind(&LLFloaterIMPanel::setTyping, this, false));
mInputEditor->setFocusLostCallback(boost::bind(&LLFloaterIMPanel::setTyping, this, false));
mInputEditor->setKeystrokeCallback( boost::bind(&LLFloaterIMPanel::onInputEditorKeystroke, this, _1) );
mInputEditor->setCommitCallback( boost::bind(&LLFloaterIMPanel::onSendMsg,this) );
mInputEditor->setCommitOnFocusLost( FALSE );

View File

@@ -242,9 +242,6 @@ private:
// Timer to detect when user has stopped typing.
LLFrameTimer mLastKeystrokeTimer;
boost::signals2::connection mFocusLostSignal;
CachedUICtrl<LLUICtrl> mVolumeSlider;
CachedUICtrl<LLUICtrl> mEndCallBtn;
CachedUICtrl<LLUICtrl> mStartCallBtn;

View File

@@ -500,7 +500,7 @@ BOOL LLMuteList::autoRemove(const LLUUID& agent_id, const EAutoReason reason)
{
BOOL removed = FALSE;
if (isMuted(agent_id))
if (isMuted(agent_id) && !(reason == AR_INVENTORY && gSavedSettings.getBOOL("AutoresponseMutedItem")))
{
LLMute automute(agent_id, LLStringUtil::null, LLMute::AGENT);
removed = TRUE;

View File

@@ -69,11 +69,22 @@ const S32 BOTTOM_PAD = VPAD * 3;
// statics
S32 LLNotifyBox::sNotifyBoxCount = 0;
const LLFontGL* LLNotifyBox::sFont = NULL;
const LLFontGL* LLNotifyBox::sFontSmall = NULL;
std::map<std::string, LLNotifyBox*> LLNotifyBox::sOpenUniqueNotifyBoxes;
S32 sNotifyBoxCount = 0;
static const LLFontGL* sFont = NULL;
void chat_notification(const LLNotificationPtr notification)
{
// TODO: Make a separate archive for these.
if (gSavedSettings.getBOOL("HideNotificationsInChat")) return;
LLChat chat(notification->getMessage());
chat.mSourceType = CHAT_SOURCE_SYSTEM;
// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0e) | Added: RLVa-0.2.0b
// Notices should already have their contents filtered where necessary
if (rlv_handler_t::isEnabled())
chat.mRlvLocFiltered = chat.mRlvNamesFiltered = true;
// [/RLVa:KB]
LLFloaterChat::getInstance()->addChatHistory(chat);
}
//---------------------------------------------------------------------------
// LLNotifyBox
@@ -82,6 +93,7 @@ std::map<std::string, LLNotifyBox*> LLNotifyBox::sOpenUniqueNotifyBoxes;
//static
void LLNotifyBox::initClass()
{
sFont = LLFontGL::getFontSansSerif();
LLNotificationChannel::buildChannel("Notifications", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "notify"));
LLNotificationChannel::buildChannel("NotificationTips", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "notifytip"));
@@ -96,8 +108,13 @@ bool LLNotifyBox::onNotification(const LLSD& notify)
if (!notification) return false;
if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")
if (notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")
{
if (notification->getPayload().has("SUPPRESS_TOAST"))
{
chat_notification(notification);
return false;
}
//bring existing notification to top
//This getInstance is ugly, as LLNotifyBox is derived from both LLInstanceTracker and LLEventTimer, which also is derived from its own LLInstanceTracker
//Have to explicitly determine which getInstance function to use.
@@ -108,12 +125,7 @@ bool LLNotifyBox::onNotification(const LLSD& notify)
}
else
{
bool is_script_dialog = (notification->getName() == "ScriptDialog" || notification->getName() == "ScriptDialogGroup");
LLNotifyBox* notify_box = new LLNotifyBox(
notification,
is_script_dialog); //layout_script_dialog);
gNotifyBoxView->addChild(notify_box);
gNotifyBoxView->addChild(new LLNotifyBox(notification));
}
}
else if (notify["sigtype"].asString() == "delete")
@@ -129,8 +141,8 @@ bool LLNotifyBox::onNotification(const LLSD& notify)
}
//---------------------------------------------------------------------------
LLNotifyBox::LLNotifyBox(LLNotificationPtr notification,
BOOL layout_script_dialog)
// Singu Note: We could clean a lot of this up by creating derived classes for Notifications and NotificationTips.
LLNotifyBox::LLNotifyBox(LLNotificationPtr notification)
: LLPanel(notification->getName(), LLRect(), BORDER_NO),
LLEventTimer(notification->getExpiration() == LLDate()
? LLDate(LLDate::now().secondsSinceEpoch() + (F64)gSavedSettings.getF32("NotifyTipDuration"))
@@ -138,25 +150,18 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification,
LLInstanceTracker<LLNotifyBox, LLUUID>(notification->getID()),
mNotification(notification),
mIsTip(notification->getType() == "notifytip"),
mAnimating(TRUE),
mAnimating(gNotifyBoxView->getChildCount() == 0), // Only animate first window
mNextBtn(NULL),
mNumOptions(0),
mNumButtons(0),
mAddedDefaultBtn(FALSE),
mLayoutScriptDialog(layout_script_dialog),
mAddedDefaultBtn(false),
mUserInputBox(NULL)
{
std::string edit_text_name;
std::string edit_text_contents;
// class init
{
sFont = LLFontGL::getFontSansSerif();
sFontSmall = LLFontGL::getFontSansSerifSmall();
}
// setup paramaters
mMessage = notification->getMessage();
const std::string& message(notification->getMessage());
// initialize
setFocusRoot(!mIsTip);
@@ -169,19 +174,14 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification,
// they display the tip in a different color
mIsCaution = notification->getPriority() >= NOTIFICATION_PRIORITY_HIGH;
// Only animate first window
if( gNotifyBoxView->getChildCount() > 0 )
mAnimating = FALSE;
else
mAnimating = TRUE;
LLNotificationFormPtr form(notification->getForm());
mNumOptions = form->getNumElements();
bool is_textbox = form->getElement("message").isDefined();
LLRect rect = mIsTip ? getNotifyTipRect(mMessage)
bool layout_script_dialog(notification->getName() == "ScriptDialog" || notification->getName() == "ScriptDialogGroup");
LLRect rect = mIsTip ? getNotifyTipRect(message)
: getNotifyRect(is_textbox ? 10 : mNumOptions, layout_script_dialog, mIsCaution);
setRect(rect);
setFollows(mIsTip ? (FOLLOWS_BOTTOM|FOLLOWS_RIGHT) : (FOLLOWS_TOP|FOLLOWS_RIGHT));
@@ -250,7 +250,7 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification,
const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + DB_INV_ITEM_NAME_BUF_SIZE; // For script dialogs: add space for title.
text = new LLTextEditor(std::string("box"), LLRect(x, y, getRect().getWidth()-2, mIsTip ? BOTTOM : BTN_TOP+16), MAX_LENGTH, mMessage, sFont, FALSE);
text = new LLTextEditor(std::string("box"), LLRect(x, y, getRect().getWidth()-2, mIsTip ? BOTTOM : BTN_TOP+16), MAX_LENGTH, message, sFont, FALSE);
text->setWordWrap(TRUE);
text->setTabStop(FALSE);
text->setMouseOpaque(FALSE);
@@ -267,11 +267,9 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification,
}
else
{
const S32 BTN_TOP = BOTTOM_PAD + (((mNumOptions-1+2)/3)) * (BTN_HEIGHT+VPAD);
// Tokenization on \n is handled by LLTextBox
const S32 MAX_LENGTH = 512 + 20 +
DB_FIRST_NAME_BUF_SIZE +
DB_LAST_NAME_BUF_SIZE +
@@ -280,7 +278,7 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification,
text = new LLTextEditor(std::string("box"),
LLRect(x, y, getRect().getWidth()-2, mIsTip ? BOTTOM : BTN_TOP+16),
MAX_LENGTH,
mMessage,
message,
sFont,
FALSE);
text->setWordWrap(TRUE);
@@ -300,54 +298,39 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification,
if (mIsTip)
{
// TODO: Make a separate archive for these.
LLChat chat(mMessage);
chat.mSourceType = CHAT_SOURCE_SYSTEM;
// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0e) | Added: RLVa-0.2.0b
if (rlv_handler_t::isEnabled())
{
// Notices should already have their contents filtered where necessary
chat.mRlvLocFiltered = chat.mRlvNamesFiltered = TRUE;
}
// [/RLVa:KB]
if (!gSavedSettings.getBOOL("HideNotificationsInChat")) {
LLFloaterChat::getInstance(LLSD())->addChatHistory(chat);
}
chat_notification(mNotification);
}
else
{
LLButton* btn;
btn = new LLButton(std::string("next"),
mNextBtn = new LLButton(std::string("next"),
LLRect(getRect().getWidth()-26, BOTTOM_PAD + 20, getRect().getWidth()-2, BOTTOM_PAD),
std::string("notify_next.png"),
std::string("notify_next.png"),
LLStringUtil::null,
boost::bind(&LLNotifyBox::onClickNext,this),
boost::bind(&LLNotifyBox::moveToBack, this, true),
sFont);
btn->setScaleImage(TRUE);
btn->setToolTip(LLTrans::getString("next"));
addChild(btn);
mNextBtn = btn;
mNextBtn->setScaleImage(TRUE);
mNextBtn->setToolTip(LLTrans::getString("next"));
addChild(mNextBtn);
for (S32 i = 0; i < mNumOptions; i++)
{
LLSD form_element = form->getElement(i);
std::string element_type = form_element["type"].asString();
if (element_type == "button")
{
addButton(form_element["name"].asString(), form_element["text"].asString(), TRUE, form_element["default"].asBoolean());
addButton(form_element["name"].asString(), form_element["text"].asString(), TRUE, form_element["default"].asBoolean(), layout_script_dialog);
}
else if (element_type == "input")
{
edit_text_contents = form_element["value"].asString();
edit_text_name = form_element["name"].asString();
}
}
}
if (is_textbox)
{
S32 button_rows = (layout_script_dialog) ? 2 : 1;
S32 button_rows = layout_script_dialog ? 2 : 1;
LLRect input_rect;
input_rect.setOriginAndSize(x, BOTTOM_PAD + button_rows * (BTN_HEIGHT + VPAD),
@@ -373,23 +356,15 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification,
if (mNumButtons == 0)
{
addButton("OK", "OK", FALSE, TRUE);
mAddedDefaultBtn = TRUE;
addButton("OK", "OK", false, true, layout_script_dialog);
mAddedDefaultBtn = true;
}
sNotifyBoxCount++;
if (sNotifyBoxCount <= 0)
{
if (++sNotifyBoxCount <= 0)
llwarns << "A notification was mishandled. sNotifyBoxCount = " << sNotifyBoxCount << llendl;
}
// If this is the only notify box, don't show the next button
if (sNotifyBoxCount == 1
&& mNextBtn)
{
mNextBtn->setVisible(FALSE);
}
else if (sNotifyBoxCount == 1 && mNextBtn)
mNextBtn->setVisible(false);
}
}
@@ -399,14 +374,13 @@ LLNotifyBox::~LLNotifyBox()
}
// virtual
LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& label, BOOL is_option, BOOL is_default)
LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& label, bool is_option, bool is_default, bool layout_script_dialog)
{
// make caution notification buttons slightly narrower
// so that 3 of them can fit without overlapping the "next" button
S32 btn_width = mIsCaution? 84 : 90;
S32 btn_width = mIsCaution ? 84 : 90;
LLRect btn_rect;
LLButton* btn;
S32 btn_height= BTN_HEIGHT;
const LLFontGL* font = sFont;
S32 ignore_pad = 0;
@@ -414,7 +388,7 @@ LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& lab
S32 index = button_index;
S32 x = (HPAD * 4) + 32;
if (mLayoutScriptDialog)
if (layout_script_dialog)
{
// Add two "blank" option spaces, before the "Ignore" button
index = button_index + 2;
@@ -422,6 +396,7 @@ LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& lab
{
// Ignore button is smaller, less wide
btn_height = BTN_HEIGHT_SMALL;
static const LLFontGL* sFontSmall = LLFontGL::getFontSansSerifSmall();
font = sFontSmall;
ignore_pad = 10;
}
@@ -432,7 +407,7 @@ LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& lab
btn_width - 2*ignore_pad,
btn_height);
btn = new LLButton(name, btn_rect, "", boost::bind(&LLNotifyBox::onClickButton, this, is_option ? name : ""));
LLButton* btn = new LLButton(name, btn_rect, "", boost::bind(&LLNotifyBox::onClickButton, this, is_option ? name : ""));
btn->setLabel(label);
btn->setFont(font);
@@ -445,9 +420,7 @@ LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& lab
addChild(btn, -1);
if (is_default)
{
setDefaultBtn(btn);
}
mNumButtons++;
return btn;
@@ -486,14 +459,10 @@ void LLNotifyBox::draw()
{
// If we are teleporting, stop the timer and restart it when the teleporting completes
if (gTeleportDisplay)
{
mEventTimer.stop();
}
else if (!mEventTimer.getStarted())
{
mEventTimer.start();
}
F32 display_time = mAnimateTimer.getElapsedTimeF32();
if (mAnimating && display_time < ANIMATION_TIME)
@@ -508,21 +477,18 @@ void LLNotifyBox::draw()
LLUI::translate(0.f, voffset, 0.f);
drawBackground();
LLPanel::draw();
LLUI::popMatrix();
}
else
{
if(mAnimating)
if (mAnimating)
{
mAnimating = FALSE;
if(!mIsTip)
{
mAnimating = false;
if (!mIsTip)
// hide everyone behind me once I'm done animating
gNotifyBoxView->showOnly(this);
}
}
drawBackground();
LLPanel::draw();
@@ -531,66 +497,51 @@ void LLNotifyBox::draw()
void LLNotifyBox::drawBackground() const
{
LLUIImagePtr imagep = LLUI::getUIImage("rounded_square.tga");
if (imagep)
if (LLUIImagePtr imagep = LLUI::getUIImage("rounded_square.tga"))
{
gGL.getTexUnit(0)->bind(imagep->getImage());
// set proper background color depending on whether notify box is a caution or not
LLColor4 color = mIsCaution? gColors.getColor("NotifyCautionBoxColor") : gColors.getColor("NotifyBoxColor");
if(gFocusMgr.childHasKeyboardFocus( this ))
bool has_focus(gFocusMgr.childHasKeyboardFocus(this));
if (has_focus)
{
const S32 focus_width = 2;
color = gColors.getColor("FloaterFocusBorderColor");
static const LLCachedControl<LLColor4> sBorder(gColors, "FloaterFocusBorderColor");
LLColor4 color = sBorder;
gGL.color4fv(color.mV);
gl_segmented_rect_2d_tex(-focus_width, getRect().getHeight() + focus_width,
getRect().getWidth() + focus_width, -focus_width,
imagep->getTextureWidth(), imagep->getTextureHeight(),
16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM);
color = gColors.getColor("ColorDropShadow");
gGL.color4fv(color.mV);
gl_segmented_rect_2d_tex(0, getRect().getHeight(), getRect().getWidth(), 0, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM);
if( mIsCaution )
color = gColors.getColor("NotifyCautionBoxColor");
else
color = gColors.getColor("NotifyBoxColor");
gGL.color4fv(color.mV);
gl_segmented_rect_2d_tex(1, getRect().getHeight()-1, getRect().getWidth()-1, 1, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM);
}
else
{
static const LLCachedControl<LLColor4> sDropShadow(gColors, "ColorDropShadow");
color = sDropShadow;
gGL.color4fv(color.mV);
gl_segmented_rect_2d_tex(0, getRect().getHeight(), getRect().getWidth(), 0, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM);
}
static const LLCachedControl<LLColor4> sCautionColor(gColors, "NotifyCautionBoxColor");
static const LLCachedControl<LLColor4> sColor(gColors, "NotifyBoxColor");
LLColor4 color = mIsCaution ? sCautionColor : sColor;
gGL.color4fv(color.mV);
gl_segmented_rect_2d_tex(has_focus, getRect().getHeight()-has_focus, getRect().getWidth()-has_focus, has_focus, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM);
}
}
void LLNotifyBox::close()
{
BOOL isTipTmp = mIsTip;
if (!mIsTip)
{
sNotifyBoxCount--;
}
bool not_tip = !mIsTip;
die();
if(!isTipTmp)
if (not_tip)
{
LLNotifyBox * front = gNotifyBoxView->getFirstNontipBox();
if(front)
if (LLNotifyBox* front = gNotifyBoxView->getFirstNontipBox())
{
gNotifyBoxView->showOnly(front);
// we're assuming that close is only called by user action (for non-tips),
// so we then give focus to the next close button
if (front->getDefaultButton())
{
front->getDefaultButton()->setFocus(TRUE);
}
// we're assuming that close is only called by user action (for non-tips), so we then give focus to the next close button
if (LLView* view = front->getDefaultButton())
view->setFocus(true);
gFocusMgr.triggerFocusFlash(); // TODO it's ugly to call this here
}
--sNotifyBoxCount;
}
}
@@ -622,11 +573,8 @@ BOOL LLNotifyBox::tick()
void LLNotifyBox::setVisible(BOOL visible)
{
// properly set the status of the next button
if(visible && !mIsTip)
{
if (visible && !mIsTip)
mNextBtn->setVisible(sNotifyBoxCount > 1);
mNextBtn->setEnabled(sNotifyBoxCount > 1);
}
LLPanel::setVisible(visible);
}
@@ -634,35 +582,30 @@ void LLNotifyBox::moveToBack(bool getfocus)
{
// Move this dialog to the back.
gNotifyBoxView->sendChildToBack(this);
if(!mIsTip && mNextBtn)
if (!mIsTip && mNextBtn)
{
mNextBtn->setVisible(FALSE);
mNextBtn->setVisible(false);
// And enable the next button on the frontmost one, if there is one
if (gNotifyBoxView->getChildCount() > 0)
{
LLNotifyBox* front = gNotifyBoxView->getFirstNontipBox();
if (front)
if (gNotifyBoxView->getChildCount())
if (LLNotifyBox* front = gNotifyBoxView->getFirstNontipBox())
{
gNotifyBoxView->showOnly(front);
if (getfocus)
{
// if are called from a user interaction
// we give focus to the next next button
if (front->mNextBtn != NULL)
{
front->mNextBtn->setFocus(TRUE);
}
if (front->mNextBtn)
front->mNextBtn->setFocus(true);
gFocusMgr.triggerFocusFlash(); // TODO: it's ugly to call this here
}
}
}
}
}
// static
LLRect LLNotifyBox::getNotifyRect(S32 num_options, BOOL layout_script_dialog, BOOL is_caution)
LLRect LLNotifyBox::getNotifyRect(S32 num_options, bool layout_script_dialog, bool is_caution)
{
S32 notify_height = gSavedSettings.getS32("NotifyBoxHeight");
if (is_caution)
@@ -680,15 +623,11 @@ LLRect LLNotifyBox::getNotifyRect(S32 num_options, BOOL layout_script_dialog, BO
const S32 LEFT = RIGHT - NOTIFY_WIDTH;
if (num_options < 1)
{
num_options = 1;
}
// Add two "blank" option spaces.
if (layout_script_dialog)
{
num_options += 2;
}
S32 additional_lines = (num_options-1) / 3;
@@ -700,7 +639,6 @@ LLRect LLNotifyBox::getNotifyRect(S32 num_options, BOOL layout_script_dialog, BO
// static
LLRect LLNotifyBox::getNotifyTipRect(const std::string &utf8message)
{
S32 line_count = 1;
LLWString message = utf8str_to_wstring(utf8message);
S32 message_len = message.length();
@@ -712,27 +650,24 @@ LLRect LLNotifyBox::getNotifyTipRect(const std::string &utf8message)
const llwchar* start = wchars;
const llwchar* end;
S32 total_drawn = 0;
BOOL done = FALSE;
bool done = false;
S32 line_count;
do
for (line_count = 2; !done; ++line_count)
{
line_count++;
for (end = start; *end != 0 && *end != '\n'; end++);
for (end=start; *end != 0 && *end != '\n'; end++)
;
if( *end == 0 )
if (*end == 0)
{
end = wchars + message_len;
done = TRUE;
done = true;
}
S32 remaining = end - start;
while( remaining )
for (S32 remaining = end - start; remaining;)
{
S32 drawn = sFont->maxDrawableChars( start, (F32)text_area_width, remaining, LLFontGL::WORD_BOUNDARY_IF_POSSIBLE );
S32 drawn = sFont->maxDrawableChars(start, (F32)text_area_width, remaining, LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
if( 0 == drawn )
if (0 == drawn)
{
drawn = 1; // Draw at least one character, even if it doesn't all fit. (avoids an infinite loop)
}
@@ -740,10 +675,10 @@ LLRect LLNotifyBox::getNotifyTipRect(const std::string &utf8message)
total_drawn += drawn;
start += drawn;
remaining -= drawn;
if( total_drawn < message_len )
if (total_drawn < message_len)
{
if( (wchars[ total_drawn ] != '\n') )
if (wchars[ total_drawn ] != '\n')
{
// wrap because line was too long
line_count++;
@@ -751,19 +686,18 @@ LLRect LLNotifyBox::getNotifyTipRect(const std::string &utf8message)
}
else
{
done = TRUE;
done = true;
}
}
total_drawn++; // for '\n'
end++;
start = end;
} while( !done );
start = ++end;
}
const S32 MIN_NOTIFY_HEIGHT = 72;
const S32 MAX_NOTIFY_HEIGHT = 600;
S32 notify_height = llceil((F32) (line_count+1) * sFont->getLineHeight());
if(gOverlayBar)
if (gOverlayBar)
{
notify_height += gOverlayBar->getBoundingRect().mTop;
}
@@ -799,18 +733,12 @@ void LLNotifyBox::onClickButton(const std::string name)
}
void LLNotifyBox::onClickNext()
{
moveToBack(true);
}
LLNotifyBoxView::LLNotifyBoxView(const std::string& name, const LLRect& rect, BOOL mouse_opaque, U32 follows)
: LLUICtrl(name,rect,mouse_opaque,NULL,follows)
{
}
LLNotifyBox * LLNotifyBoxView::getFirstNontipBox() const
LLNotifyBox* LLNotifyBoxView::getFirstNontipBox() const
{
// *TODO: Don't make assumptions like this!
// assumes every child is a notify box
@@ -819,50 +747,41 @@ LLNotifyBox * LLNotifyBoxView::getFirstNontipBox() const
iter++)
{
// hack! *TODO: Integrate llnotify and llgroupnotify
if(isGroupNotifyBox(*iter))
{
if (isGroupNotifyBox(*iter))
continue;
}
LLNotifyBox* box = (LLNotifyBox*)(*iter);
if(!box->isTip() && !box->isDead())
{
LLNotifyBox* box = static_cast<LLNotifyBox*>(*iter);
if (!box->isTip() && !box->isDead())
return box;
}
}
return NULL;
}
void LLNotifyBoxView::showOnly(LLView * view)
void LLNotifyBoxView::showOnly(LLView* view)
{
if(view)
{
// assumes that the argument is actually a child
LLNotifyBox * shown = dynamic_cast<LLNotifyBox*>(view);
if(!shown)
{
return ;
}
// assumes that the argument is actually a child
if (!dynamic_cast<LLNotifyBox*>(view)) return;
// make every other notification invisible
for(child_list_const_iter_t iter = getChildList()->begin();
// make every other notification invisible
for(child_list_const_iter_t iter = getChildList()->begin();
iter != getChildList()->end();
iter++)
{
if(isGroupNotifyBox(*iter))
{
continue;
}
LLNotifyBox * box = (LLNotifyBox*)(*iter);
if(box != view && box->getVisible() && !box->isTip())
{
box->setVisible(FALSE);
}
}
shown->setVisible(TRUE);
sendChildToFront(shown);
{
if (view == (*iter)) continue;
LLView* view(*iter);
if (isGroupNotifyBox(view) || !view->getVisible())
continue;
if (!static_cast<LLNotifyBox*>(view)->isTip())
view->setVisible(false);
}
view->setVisible(true);
sendChildToFront(view);
}
void LLNotifyBoxView::deleteAllChildren()
{
LLUICtrl::deleteAllChildren();
sNotifyBoxCount = 0;
}
void LLNotifyBoxView::purgeMessagesMatching(const Matcher& matcher)
@@ -874,13 +793,11 @@ void LLNotifyBoxView::purgeMessagesMatching(const Matcher& matcher)
iter != notification_queue.end();
iter++)
{
if(isGroupNotifyBox(*iter))
{
if (isGroupNotifyBox(*iter))
continue;
}
LLNotifyBox* notification = (LLNotifyBox*)*iter;
if(matcher.matches(notification->getNotification()))
LLNotifyBox* notification = static_cast<LLNotifyBox*>(*iter);
if (matcher.matches(notification->getNotification()))
{
removeChild(notification);
}
@@ -889,11 +806,6 @@ void LLNotifyBoxView::purgeMessagesMatching(const Matcher& matcher)
bool LLNotifyBoxView::isGroupNotifyBox(const LLView* view) const
{
if (view->getName() == "groupnotify")
{
return TRUE ;
}
return FALSE ;
return view->getName() == "groupnotify";
}

View File

@@ -37,7 +37,6 @@
#include "llpanel.h"
#include "lleventtimer.h"
#include "llnotifications.h"
#include <vector>
class LLButton;
class LLNotifyBoxTemplate;
@@ -51,16 +50,12 @@ class LLNotifyBox :
public LLInstanceTracker<LLNotifyBox, LLUUID>
{
public:
typedef void (*notify_callback_t)(S32 option, void* data);
typedef std::vector<std::string> option_list_t;
static void initClass();
static void destroyClass();
BOOL isTip() const { return mIsTip; }
BOOL isCaution() const { return mIsCaution; }
bool isTip() const { return mIsTip; }
bool isCaution() const { return mIsCaution; }
/*virtual*/ void setVisible(BOOL visible);
void stopAnimation() { mAnimating = FALSE; }
void stopAnimation() { mAnimating = false; }
void close();
@@ -69,11 +64,11 @@ public:
static void format(std::string& msg, const LLStringUtil::format_map_t& args);
protected:
LLNotifyBox(LLNotificationPtr notification, BOOL layout_script_dialog);
LLNotifyBox(LLNotificationPtr notification);
/*virtual*/ ~LLNotifyBox();
LLButton* addButton(std::string const &name, const std::string& label, BOOL is_option, BOOL is_default);
LLButton* addButton(const std::string& name, const std::string& label, bool is_option, bool is_default, bool layout_script_dialog);
/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
@@ -86,30 +81,23 @@ protected:
// Returns the rect, relative to gNotifyView, where this
// notify box should be placed.
static LLRect getNotifyRect(S32 num_options, BOOL layout_script_dialog, BOOL is_caution);
static LLRect getNotifyRect(S32 num_options, bool layout_script_dialog, bool is_caution);
static LLRect getNotifyTipRect(const std::string &message);
// internal handler for button being clicked
void onClickButton(const std::string name);
// for "next" button
void onClickNext();
//static LLNotifyBox* findExistingNotify(LLPointer<LLNotifyBoxTemplate> notify_template, const LLString::format_map_t& args);
private:
static bool onNotification(const LLSD& notify);
void drawBackground() const;
protected:
std::string mMessage;
LLTextEditor *mUserInputBox;
LLNotificationPtr mNotification;
BOOL mIsTip;
BOOL mIsCaution; // is this a caution notification?
BOOL mAnimating; // Are we sliding onscreen?
bool mIsTip;
bool mIsCaution; // is this a caution notification?
bool mAnimating; // Are we sliding onscreen?
// Time since this notification was displayed.
// This is an LLTimer not a frame timer because I am concerned
@@ -120,34 +108,19 @@ protected:
S32 mNumOptions;
S32 mNumButtons;
BOOL mAddedDefaultBtn;
BOOL mLayoutScriptDialog;
// Used for callbacks
struct InstanceAndS32
{
LLNotifyBox* mSelf;
std::string mButtonName;
};
static S32 sNotifyBoxCount;
static const LLFontGL* sFont;
static const LLFontGL* sFontSmall;
typedef std::map<std::string, LLNotifyBox*> unique_map_t;
static unique_map_t sOpenUniqueNotifyBoxes;
bool mAddedDefaultBtn;
};
class LLNotifyBoxView : public LLUICtrl
{
public:
LLNotifyBoxView(const std::string& name, const LLRect& rect, BOOL mouse_opaque, U32 follows=FOLLOWS_NONE);
void showOnly(LLView * ctrl);
LLNotifyBox * getFirstNontipBox() const;
void showOnly(LLView* ctrl);
LLNotifyBox* getFirstNontipBox() const;
/*virtual*/ void deleteAllChildren();
class Matcher
struct Matcher
{
public:
Matcher(){}
virtual ~Matcher() {}
virtual bool matches(const LLNotificationPtr) const = 0;
@@ -157,7 +130,7 @@ public:
void purgeMessagesMatching(const Matcher& matcher);
private:
bool isGroupNotifyBox(const LLView* view) const ;
bool isGroupNotifyBox(const LLView* view) const;
};
// This view contains the stack of notification windows.

View File

@@ -277,27 +277,6 @@ void LLPanelAvatarSecondLife::enableControls(BOOL self)
childSetEnabled("?", self);
}
void LLPanelAvatarFirstLife::onClickImage()
{
const LLUUID& id(getChild<LLTextureCtrl>("img")->getImageAssetID());
llinfos << "LLPanelAvatarFirstLife::onClickImage" << llendl;
if (!LLPreview::show(id))
{
// There isn't one, so make a new preview
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
rect.translate( left - rect.mLeft, rect.mTop - top ); // Changed to avoid textures being sunken below the window border.
LLPreviewTexture* preview = new LLPreviewTexture("preview task texture",
rect,
std::string("Profile First Life Picture"),
id);
preview->setFocus(TRUE);
//preview->mIsCopyable=FALSE;
//preview->canSaveAs
}
}
// virtual
void LLPanelAvatarFirstLife::processProperties(void* data, EAvatarProcessorType type)
{
@@ -313,29 +292,6 @@ void LLPanelAvatarFirstLife::processProperties(void* data, EAvatarProcessorType
}
}
void LLPanelAvatarSecondLife::onClickImage()
{
const LLUUID& id = getChild<LLTextureCtrl>("img")->getImageAssetID();
llinfos << "LLPanelAvatarSecondLife::onClickImage" << llendl;
if (!LLPreview::show(id))
{
// There isn't one, so make a new preview
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
rect.translate(left - rect.mLeft, rect.mTop - top); // Changed to avoid textures being sunken below the window border.
LLPreviewTexture* preview = new LLPreviewTexture("preview task texture",
rect,
std::string("Profile Picture: ") + getChild<LLNameEditor>("dnname")->getText(),
id);
preview->setFocus(TRUE);
//preview->mIsCopyable=FALSE;
/*open_texture(LLUUID::null,//id,
std::string("Profile Picture: ") + getChild<LLNameEditor>("dnname")->getText() + "and image id is " + id.asString()
, FALSE, id, TRUE);*/
}
}
void LLPanelAvatarSecondLife::onDoubleClickGroup()
{
if (LLScrollListItem* item = getChild<LLScrollListCtrl>("groups")->getFirstSelected())
@@ -370,6 +326,8 @@ void LLPanelAvatarFirstLife::enableControls(BOOL self)
// postBuild
//-----------------------------------------------------------------------------
void show_picture(const LLUUID& id, const std::string& name);
static std::string profile_picture_title(const std::string& str) { return "Profile Picture: " + str; }
static void show_partner_help() { LLNotificationsUtil::add("ClickPartnerHelpAvatar", LLSD(), LLSD(), boost::bind(LLPanelAvatarSecondLife::onClickPartnerHelpLoadURL, _1, _2)); }
BOOL LLPanelAvatarSecondLife::postBuild()
{
@@ -410,10 +368,11 @@ BOOL LLPanelAvatarSecondLife::postBuild()
getChild<LLUICtrl>("Offer Teleport...")->setCommitCallback(boost::bind(static_cast<void(*)(const LLUUID&)>(LLAvatarActions::offerTeleport), boost::bind(&LLPanelAvatar::getAvatarID, pa)));
getChild<LLScrollListCtrl>("groups")->setDoubleClickCallback(boost::bind(&LLPanelAvatarSecondLife::onDoubleClickGroup,this));
getChild<LLUICtrl>("bigimg")->setCommitCallback(boost::bind(&LLPanelAvatarSecondLife::onClickImage, this));
getChild<LLTextureCtrl>("img")->setFallbackImageName("default_profile_picture.j2c");
LLTextureCtrl* ctrl = getChild<LLTextureCtrl>("img");
ctrl->setFallbackImageName("default_profile_picture.j2c");
getChild<LLUICtrl>("bigimg")->setCommitCallback(boost::bind(boost::bind(show_picture, boost::bind(&LLTextureCtrl::getImageAssetID, ctrl), boost::bind(profile_picture_title, boost::bind(&LLView::getValue, getChild<LLNameEditor>("dnname"))))));
return TRUE;
}
@@ -423,9 +382,10 @@ BOOL LLPanelAvatarFirstLife::postBuild()
BOOL own_avatar = (getPanelAvatar()->getAvatarID() == gAgent.getID() );
enableControls(own_avatar);
getChild<LLTextureCtrl>("img")->setFallbackImageName("default_profile_picture.j2c");
LLTextureCtrl* ctrl = getChild<LLTextureCtrl>("img");
ctrl->setFallbackImageName("default_profile_picture.j2c");
getChild<LLUICtrl>("flbigimg")->setCommitCallback(boost::bind(&LLPanelAvatarFirstLife::onClickImage, this));
getChild<LLUICtrl>("flbigimg")->setCommitCallback(boost::bind(boost::bind(boost::bind(show_picture, boost::bind(&LLTextureCtrl::getImageAssetID, ctrl), "First Life Picture"))));
return TRUE;
}

View File

@@ -92,8 +92,6 @@ public:
/*virtual*/ BOOL postBuild();
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type);
void onClickImage();
void enableControls(BOOL own_avatar);
};
@@ -113,7 +111,6 @@ public:
/*virtual*/ void onChange() {}
/*virtual*/ void onChangeDetailed(const LLMute& mute);
void onClickImage();
void onClickFriends();
void onDoubleClickGroup();
static bool onClickPartnerHelpLoadURL(const LLSD& notification, const LLSD& response);

View File

@@ -128,6 +128,8 @@ BOOL LLPanelGroupGeneral::postBuild()
{
mInsignia->setCommitCallback(boost::bind(&LLPanelGroupGeneral::onCommitAny,this));
mDefaultIconID = mInsignia->getImageAssetID();
void show_picture(const LLUUID& id, const std::string& name);
getChild<LLUICtrl>("bigimg")->setCommitCallback(boost::bind(boost::bind(show_picture, boost::bind(&LLTextureCtrl::getImageAssetID, mInsignia), "Group Insignia")));
}
mEditCharter = getChild<LLTextEditor>("charter", recurse);

View File

@@ -3053,7 +3053,7 @@ void LLPanelGroupBanListSubTab::populateBanList()
ban_entry.columns.add().column("name").font/*.name*/("SANSSERIF_SMALL").font_style("NORMAL");
// Singu Note: We have special date columns, so our code is unique here
ban_entry.columns.add().column("ban_date").value(bd.mBanDate).type("date").format("%Y/%m%d").font/*.name*/("SANSSERIF_SMALL").font_style("NORMAL");
ban_entry.columns.add().column("ban_date").value(bd.mBanDate).type("date").format("%Y/%m/%d").font/*.name*/("SANSSERIF_SMALL").font_style("NORMAL");
mBanList->addNameItemRow(ban_entry);
}

View File

@@ -202,14 +202,18 @@ void LLPanelPermissions::disableAll()
getChildView("button set group")->setEnabled(FALSE);
getChildView("button open group")->setEnabled(FALSE);
getChild<LLUICtrl>("Object Name")->setValue(LLStringUtil::null);
getChildView("Object Name")->setEnabled(FALSE);
LLLineEditor* ed = getChild<LLLineEditor>("Object Name");
ed->setValue(LLStringUtil::null);
ed->setEnabled(FALSE);
ed->setLabel(LLStringUtil::null);
getChildView("Name:")->setEnabled(FALSE);
//getChild<LLUICtrl>("Group Name")->setValue(LLStringUtil::null);
//getChildView("Group Name")->setEnabled(FALSE);
getChildView("Description:")->setEnabled(FALSE);
getChild<LLUICtrl>("Object Description")->setValue(LLStringUtil::null);
getChildView("Object Description")->setEnabled(FALSE);
ed = getChild<LLLineEditor>("Object Description");
ed->setEnabled(FALSE);
ed->setValue(LLStringUtil::null);
ed->setLabel(LLStringUtil::null);
getChildView("Permissions:")->setEnabled(FALSE);
@@ -510,7 +514,7 @@ void LLPanelPermissions::refresh()
{
if(keyboard_focus_view != LineEditorObjectName)
{
getChild<LLUICtrl>("Object Name")->setValue(nodep->mName);
LineEditorObjectName->setValue(nodep->mName);
}
if(LineEditorObjectDesc)
@@ -523,25 +527,26 @@ void LLPanelPermissions::refresh()
}
else
{
getChild<LLUICtrl>("Object Name")->setValue(LLStringUtil::null);
LineEditorObjectName->setText(LLStringUtil::null);
LineEditorObjectDesc->setText(LLStringUtil::null);
}
// figure out the contents of the name, description, & category
BOOL edit_name_desc = FALSE;
if(is_one_object && objectp->permModify() && !objectp->isPermanentEnforced())
// Singu Note: It was requested that the user be able to bulk change description
{
edit_name_desc = TRUE;
const std::string& str(object_count > 1 ? getString("multiple_objects_selected") : LLStringUtil::null);
LineEditorObjectName->setLabel(str);
LineEditorObjectDesc->setLabel(str);
}
if(edit_name_desc)
if (/*is_one_object &&*/ objectp->permModify() && !objectp->isPermanentEnforced())
{
getChildView("Object Name")->setEnabled(TRUE);
getChildView("Object Description")->setEnabled(TRUE);
LineEditorObjectName->setEnabled(TRUE);
LineEditorObjectDesc->setEnabled(TRUE);
}
else
{
getChildView("Object Name")->setEnabled(FALSE);
getChildView("Object Description")->setEnabled(FALSE);
LineEditorObjectName->setEnabled(FALSE);
LineEditorObjectDesc->setEnabled(FALSE);
}
S32 total_sale_price = 0;

View File

@@ -63,8 +63,10 @@ void show_picture(const LLUUID& id, const std::string& name)
// Try to show and focus existing preview
if (LLPreview::show(id)) return;
// If there isn't one, make a new preview
LLPreview* preview = new LLPreviewTexture("preview texture", gSavedSettings.getRect("PreviewTextureRect"), name, id);
preview->setFocus(true);
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
(new LLPreviewTexture("preview texture", rect.translate(left - rect.mLeft, rect.mTop - top), name, id))->setFocus(true);
}
//static

View File

@@ -4290,7 +4290,7 @@ void LLSelectMgr::selectionSetObjectName(const std::string& name)
std::string name_copy(name);
// we only work correctly if 1 object is selected.
if(mSelectedObjects->getRootObjectCount() == 1)
if(mSelectedObjects->getRootObjectCount() /*== 1*/) // Singu Note: It was requested that the user be able to bulk rename
{
sendListToRegions("ObjectName",
packAgentAndSessionID,
@@ -4298,7 +4298,7 @@ void LLSelectMgr::selectionSetObjectName(const std::string& name)
(void*)(&name_copy),
SEND_ONLY_ROOTS);
}
else if(mSelectedObjects->getObjectCount() == 1)
else if(mSelectedObjects->getObjectCount() /*== 1*/)
{
sendListToRegions("ObjectName",
packAgentAndSessionID,
@@ -4313,7 +4313,7 @@ void LLSelectMgr::selectionSetObjectDescription(const std::string& desc)
std::string desc_copy(desc);
// we only work correctly if 1 object is selected.
if(mSelectedObjects->getRootObjectCount() == 1)
if (mSelectedObjects->getRootObjectCount() /*== 1*/) // Singu Note: It was requested that the user be able to bulk change description
{
sendListToRegions("ObjectDescription",
packAgentAndSessionID,
@@ -4321,7 +4321,7 @@ void LLSelectMgr::selectionSetObjectDescription(const std::string& desc)
(void*)(&desc_copy),
SEND_ONLY_ROOTS);
}
else if(mSelectedObjects->getObjectCount() == 1)
else if (mSelectedObjects->getObjectCount() /*== 1*/)
{
sendListToRegions("ObjectDescription",
packAgentAndSessionID,

View File

@@ -1727,6 +1727,7 @@ BOOL LLTextureCtrl::doDrop(LLInventoryItem* item)
// no callback installed, so just set the image ids and carry on.
setImageAssetID( item->getAssetUUID() );
mImageItemID = item->getUUID();
mDirty = true;
return TRUE;
}

View File

@@ -625,6 +625,12 @@ static bool handleAllowLargeSounds(const LLSD& newvalue)
return true;
}
void handleHighResChanged(const LLSD& val)
{
if (val) // High Res Snapshot active, must uncheck RenderUIInSnapshot
gSavedSettings.setBOOL("RenderUIInSnapshot", false);
}
////////////////////////////////////////////////////////////////////////////
void settings_setup_listeners()
{
@@ -819,6 +825,7 @@ void settings_setup_listeners()
gSavedSettings.getControl("AllowLargeSounds")->getSignal()->connect(boost::bind(&handleAllowLargeSounds, _2));
gSavedSettings.getControl("LiruUseZQSDKeys")->getSignal()->connect(boost::bind(load_default_bindings, _2));
gSavedSettings.getControl("HighResSnapshot")->getSignal()->connect(boost::bind(&handleHighResChanged, _2));
}
void onCommitControlSetting_gSavedSettings(LLUICtrl* ctrl, void* name)

View File

@@ -335,10 +335,6 @@ void set_current_pose(std::string anim)
gAgent.sendAnimationRequest(current_pose, ANIM_REQUEST_START);
gAgent.sendAgentSetAppearance();
}
void handle_pose_stand(void*)
{
set_current_pose("038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53");
}
void handle_pose_stand_stop(void*)
{
if (on_pose_stand)
@@ -349,24 +345,14 @@ void handle_pose_stand_stop(void*)
gAgent.sendAgentSetAppearance();
}
}
void cleanup_pose_stand(void)
void cleanup_pose_stand()
{
handle_pose_stand_stop(NULL);
}
void handle_toggle_pose(void* userdata) {
if(current_pose.isNull())
handle_pose_stand(userdata);
else
handle_pose_stand_stop(userdata);
}
BOOL handle_check_pose(void* userdata) {
return current_pose.notNull();
}
BOOL handle_check_pose(void* userdata) { return current_pose.notNull(); }
void handle_close_all_notifications(void*);
void handle_open_message_log(void*);
// </edit>
@@ -451,6 +437,7 @@ void handle_morph_load_obj(void*);
void handle_debug_avatar_textures(void*);
void handle_dump_region_object_cache(void*);
void menu_toggle_double_click_control(void*);
BOOL menu_ui_enabled(void *user_data);
BOOL menu_check_control( void* user_data);
void menu_toggle_variable( void* user_data );
@@ -1159,11 +1146,11 @@ void init_debug_ui_menu(LLMenuGL* menu)
menu->addChild(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT ));
menu->addChild(new LLMenuItemCallGL( "Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL));
menu->addChild(new LLMenuItemCheckGL("Double-Click Auto-Pilot",
menu_toggle_control, NULL, menu_check_control,
menu_toggle_double_click_control, NULL, menu_check_control,
(void*)"DoubleClickAutoPilot"));
// add for double click teleport support
menu->addChild(new LLMenuItemCheckGL("Double-Click Teleport",
menu_toggle_control, NULL, menu_check_control,
menu_toggle_double_click_control, NULL, menu_check_control,
(void*)"DoubleClickTeleport"));
menu->addSeparator();
// menu->addChild(new LLMenuItemCallGL( "Print Packets Lost", &print_packets_lost, NULL, NULL, 'L', MASK_SHIFT ));
@@ -3690,17 +3677,6 @@ void handle_open_message_log(void*)
LLFloaterMessageLog::show();
}
void handle_close_all_notifications(void*)
{
LLView::child_list_t child_list(*(gNotifyBoxView->getChildList()));
for(LLView::child_list_iter_t iter = child_list.begin();
iter != child_list.end();
iter++)
{
gNotifyBoxView->removeChild(*iter);
}
}
void handle_fake_away_status(void*)
{
bool fake_away = gSavedSettings.getBOOL("FakeAway");
@@ -7319,26 +7295,27 @@ BOOL menu_ui_enabled(void *user_data)
}
// TomY TODO DEPRECATE & REMOVE
void menu_toggle_control( void* user_data )
void menu_toggle_control(void* user_data)
{
std::string setting(static_cast<char*>(user_data));
BOOL checked = gSavedSettings.getBOOL(setting);
if (setting == "HighResSnapshot" && !checked)
{
// High Res Snapshot active, must uncheck RenderUIInSnapshot
gSavedSettings.setBOOL( "RenderUIInSnapshot", FALSE );
}
else if (setting == "DoubleClickAutoPilot" && !checked)
{
// Doubleclick actions - there can be only one
gSavedSettings.setBOOL( "DoubleClickTeleport", FALSE );
}
else if (setting == "DoubleClickTeleport" && !checked)
{
// Doubleclick actions - there can be only one
gSavedSettings.setBOOL( "DoubleClickAutoPilot", FALSE );
}
gSavedSettings.setBOOL(setting, !checked);
LLControlVariable* control(gSavedSettings.getControl(setting));
control->set(!control->get());
}
void menu_toggle_double_click_control(void* user_data)
{
std::string setting(static_cast<char*>(user_data));
LLControlVariable* control(gSavedSettings.getControl(setting));
bool checked = control->get();
// Doubleclick actions - there can be only one
if (!checked)
{
if (setting == "DoubleClickAutoPilot")
gSavedSettings.setBOOL("DoubleClickTeleport", false);
else if (setting == "DoubleClickTeleport")
gSavedSettings.setBOOL("DoubleClickAutoPilot", false);
}
control->set(!checked);
}
@@ -7347,14 +7324,8 @@ class LLToggleControl : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
std::string control_name = userdata.asString();
BOOL checked = gSavedSettings.getBOOL( control_name );
if (control_name == "HighResSnapshot" && !checked)
{
// High Res Snapshot active, must uncheck RenderUIInSnapshot
gSavedSettings.setBOOL( "RenderUIInSnapshot", FALSE );
}
gSavedSettings.setBOOL( control_name, !checked );
LLControlVariable* control(gSavedSettings.getControl(userdata.asString()));
control->set(!control->get());
return true;
}
};
@@ -8796,27 +8767,7 @@ class SinguCloseAllDialogs : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
handle_close_all_notifications(NULL);
return true;
}
};
class SinguNimble : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
gSavedSettings.setBOOL("Nimble", !gSavedSettings.getBOOL("Nimble"));
return true;
}
};
class SinguCheckNimble : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
gMenuHolder->findControl(userdata["control"].asString())->setValue(gSavedSettings.getBOOL("Nimble"));
gNotifyBoxView->deleteAllChildren();
return true;
}
};
@@ -8833,8 +8784,10 @@ class SinguPoseStand : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
handle_toggle_pose(NULL);
if (current_pose.isNull())
set_current_pose("038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53");
else
handle_pose_stand_stop(NULL);
return true;
}
};
@@ -9521,8 +9474,6 @@ void initialize_menus()
// Singularity menu
addMenu(new SinguCloseAllDialogs(), "CloseAllDialogs");
// ---- Fake away handled elsewhere
addMenu(new SinguNimble(), "Nimble");
addMenu(new SinguCheckNimble(), "CheckNimble");
addMenu(new SinguEnableStreamingAudioDisplay(), "EnableStreamingAudioDisplay");
addMenu(new SinguPoseStand(), "PoseStand");
addMenu(new SinguCheckPoseStand(), "CheckPoseStand");

View File

@@ -45,7 +45,6 @@
#include "llappviewer.h"
#include "hippogridmanager.h"
#include "aicurleasyrequeststatemachine.h"
#ifdef CWDEBUG
@@ -213,6 +212,7 @@ LLXMLRPCValue XMLRPCResponder::responseValue(void) const
}
#ifdef AI_UNUSED
#include "hippogridmanager.h"
void LLXMLRPCTransaction::Impl::setStatus(Status status,
const std::string& message, const std::string& uri)
{

View File

@@ -26,7 +26,7 @@
border_thickness="0" bottom_delta="-10" enabled="true" follows="left|top"
font="SansSerif" height="20" is_unicode="false" left="70" hover="true"
max_length="254" mouse_opaque="true" name="Slurl" font-style="UNDERLINE"
width="200" hover_cursor="UI_CURSOR_HAND" text_color="TextLinkColor" hover_color="TextLinkHoverColor"/>
hover_cursor="UI_CURSOR_HAND" text_color="TextLinkColor" hover_color="TextLinkHoverColor"/>
<!-- A new viewer talking to an old sim will not have a slurl available and will show this. -->
<text bevel_style="none" border_style="line" border_visible="false"
@@ -55,4 +55,5 @@
<button bottom_delta="-28" font="SansSerif" halign="center" height="20" label="Mute Owner"
label_selected="Mute Owner" left="70" mouse_opaque="true" name="Mute"
width="160" />
<string name="owner" value=" (Owner)"/>
</floater>

View File

@@ -443,6 +443,7 @@
follows="left|top|right" font="SansSerifSmall" height="16" left="88"
max_length="127" mouse_opaque="true" name="Object Description"
select_all_on_focus_received="true" width="172" />
<string name="multiple_objects_selected" value="Multiple (bulk change mode)"/>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-66" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"

View File

@@ -1031,8 +1031,8 @@
<on_click function="ShowFloater" userdata="ao"/>
</menu_item_call>
<menu_item_check label="Nimble" mouse_opaque="true" name="Nimble">
<on_click function="Nimble"/>
<on_check function="CheckNimble"/>
<on_click function="ToggleControl" userdata="Nimble"/>
<on_check control="Nimble"/>
</menu_item_check>
<menu_item_separator mouse_opaque="true" name="separators3"/>
<menu_item_check label="Object Area Search" mouse_opaque="true" name="Object Area Search">

View File

@@ -53,8 +53,8 @@ Hover your mouse over the options for more help.
mouse_opaque="true" name="insignia" tool_tip="Click to choose a picture"
width="128" />
<text_editor bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-14" drop_shadow_visible="false" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="144"
bottom_delta="-19" drop_shadow_visible="false" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="149"
hide_scrollbar="true" max_length="511" mouse_opaque="true" name="charter"
right="410" v_pad="0"
width="265" word_wrap="true" spell_check="true">
@@ -62,11 +62,12 @@ Hover your mouse over the options for more help.
</text_editor>
<button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
height="22" label="Join ([CURRENCY]0)" label_selected="Join ([CURRENCY]0)" left="7"
mouse_opaque="true" name="join_button" width="128" />
mouse_opaque="true" name="join_button" width="106" />
<button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
height="22" label="Detailed View" label_selected="Detailed View"
left_delta="0" mouse_opaque="true" name="info_button" width="128" />
<text bottom_delta="-16" font="SansSerif" name="text_owners_and_visible_members">
left_delta="0" mouse_opaque="true" name="info_button" width="106" />
<button bottom_delta="0" follows="left|top" height="22" label="" left_delta="106" width="22" scale_image="true" image_selected="tool_zoom.tga" image_unselected="tool_zoom.tga" image_hover_selected="tool_zoom_active.tga" image_hover_unselected="tool_zoom_active.tga" name="bigimg"/>
<text bottom_delta="-16" left_delta="-106" font="SansSerif" name="text_owners_and_visible_members">
Owners &amp; Visible Members
</text>
<text bottom_delta="-16" font="SansSerifSmall" left_delta="0"

View File

@@ -1401,7 +1401,7 @@ integer llScriptDanger(vector pos)
Returns TRUE if pos is over public land, sandbox land, land that doesn&apos;t allow everyone to edit and build, or land that doesn&apos;t allow outside scripts
</string>
<string name="LSLTipText_llDialog">
llDialog(key avatar, string message, list buttons, integer chat_channel
llDialog(key avatar, string message, list buttons, integer chat_channel)
Shows a dialog box on the avatar&apos;s screen with a message and up to 12 buttons.
If a button is pressed, the avatar says the text of the button label on chat_channel.
</string>
@@ -1770,7 +1770,7 @@ integer llGetRegionAgentCount()
Returns the number of avatars in the region
</string>
<string name="LSLTipText_llTextBox">
llTextBox(key avatar, string message, integer chat_channel
llTextBox(key avatar, string message, integer chat_channel)
Shows a dialog box on the avatar&apos;s screen with the message.
It contains a text box for input, and if entered that text is chatted on chat_channel.
</string>
@@ -3527,7 +3527,6 @@ This can be because you somehow have multiple copies running, or your system inc
If this message persists, restart your computer and try again.
If it continues to persist, you may need to completely uninstall [APP_NAME] and reinstall it.
</string>
<string name="MBRequiresAltiVec"> [APP_NAME] requires a processor with AltiVec (G4 or later).</string>
<string name="MBAlreadyRunning">
[APP_NAME] is already running.
Check your task bar for a minimized copy of the program.

View File

@@ -773,7 +773,7 @@ class LinuxManifest(ViewerManifest):
if self.prefix(src="", dst="bin/llplugin"):
self.path2basename("../plugins/filepicker", "libbasic_plugin_filepicker.so")
self.path2basename("../plugins/webkit", "libmedia_plugin_webkit.so")
self.path("../plugins/gstreamer010", "libmedia_plugin_gstreamer.so")
self.path("../plugins/gstreamer010/libmedia_plugin_gstreamer010.so", "libmedia_plugin_gstreamer.so")
self.end_prefix("bin/llplugin")
# llcommon

View File

@@ -1388,9 +1388,9 @@
<key>darwin</key>
<map>
<key>md5sum</key>
<string>8eb5462ea9d469bce4b0d22bd8f0c33b</string>
<string>68a8fab5ad3a180487598d3a3e0d57b1</string>
<key>url</key>
<uri>https://bitbucket.org/SingularityViewer/libraries/downloads/slvoice-4.6.0009.20030-darwin-20140312-rpk.tar.bz2</uri>
<uri>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slvoice_3p-update-slvoice/rev/298329/arch/Darwin/installer/slvoice-4.6.0017.21209.298329-darwin-298329.tar.bz2</uri>
</map>
<key>linux</key>
<map>
@@ -1409,16 +1409,16 @@
<key>windows</key>
<map>
<key>md5sum</key>
<string>4a6b9cf0f1e2767240de21af3338ffd7</string>
<string>399afab7047e6fa62e7b2fb1768059ea</string>
<key>url</key>
<uri>https://bitbucket.org/SingularityViewer/libraries/downloads/slvoice-4.6.0009.20030-windows-20140312-rpk.tar.bz2</uri>
<uri>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slvoice_3p-update-slvoice/rev/298329/arch/CYGWIN/installer/slvoice-4.6.0017.21209.298329-windows-298329.tar.bz2</uri>
</map>
<key>windows64</key>
<map>
<key>md5sum</key>
<string>4a6b9cf0f1e2767240de21af3338ffd7</string>
<string>399afab7047e6fa62e7b2fb1768059ea</string>
<key>url</key>
<uri>https://bitbucket.org/SingularityViewer/libraries/downloads/slvoice-4.6.0009.20030-windows-20140312-rpk.tar.bz2</uri>
<uri>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slvoice_3p-update-slvoice/rev/298329/arch/CYGWIN/installer/slvoice-4.6.0017.21209.298329-windows-298329.tar.bz2</uri>
</map>
</map>
</map>