Merge branch 'master' of https://github.com/Lirusaito/SingularityViewer.git
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -192,7 +192,7 @@ private:
|
||||
LLVector3d mTrackedLocation;
|
||||
LLTracker::ETrackingStatus mTrackedStatus;
|
||||
std::string mTrackedSimName;
|
||||
std::string mTrackedAvatarName;
|
||||
LLUUID mTrackedAvatarID;
|
||||
LLSLURL mSLURL;
|
||||
|
||||
LLCtrlListInterface * mListFriendCombo;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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 & Visible Members
|
||||
</text>
|
||||
<text bottom_delta="-16" font="SansSerifSmall" left_delta="0"
|
||||
|
||||
@@ -1401,7 +1401,7 @@ integer llScriptDanger(vector pos)
|
||||
Returns TRUE if pos is over public land, sandbox land, land that doesn't allow everyone to edit and build, or land that doesn'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'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'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.
|
||||
|
||||
@@ -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
|
||||
|
||||
12
install.xml
12
install.xml
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user