Merge branch 'master' of git://github.com/siana/SingularityViewer.git

This commit is contained in:
Shyotl
2011-02-11 20:28:16 -06:00
82 changed files with 1164 additions and 1130 deletions

View File

@@ -36,6 +36,8 @@
#include "lluuid.h"
#include "lltransactionflags.h"
#include "lltransactiontypes.h"
#include "../newview/hippogridmanager.h"
const U8 TRANSACTION_FLAGS_NONE = 0;
const U8 TRANSACTION_FLAG_SOURCE_GROUP = 1;
@@ -114,7 +116,7 @@ std::string build_transfer_message_to_source(
std::ostringstream ostr;
if(dest_id.isNull())
{
ostr << "You paid L$" << amount;
ostr << "You paid " << gHippoGridManager->getConnectedGrid()->getCurrencySymbol() << amount;
switch(transaction_type)
{
case TRANS_GROUP_CREATE:
@@ -132,7 +134,7 @@ std::string build_transfer_message_to_source(
}
else
{
ostr << "You paid " << dest_name << " L$" << amount;
ostr << "You paid " << dest_name << ' ' << gHippoGridManager->getConnectedGrid()->getCurrencySymbol() << amount;
append_reason(ostr, transaction_type, description);
}
ostr << ".";
@@ -160,7 +162,7 @@ std::string build_transfer_message_to_destination(
return description;
}
std::ostringstream ostr;
ostr << source_name << " paid you L$" << amount;
ostr << source_name << " paid you " << gHippoGridManager->getConnectedGrid()->getCurrencySymbol() << amount;
append_reason(ostr, transaction_type, description);
ostr << ".";
return ostr.str();

View File

@@ -37,6 +37,8 @@
#include "llnotifications.h"
#include "../newview/hippogridmanager.h"
#include <algorithm>
#if LL_MSVC
#pragma warning( disable : 4265 ) // "class has virtual functions, but destructor is not virtual"
@@ -605,7 +607,14 @@ void LLNotification::init(const std::string& template_name, const LLSD& form_ele
// add default substitutions
// TODO: change this to read from the translatable strings file!
mSubstitutions["SECOND_LIFE"] = "Second Life";
mSubstitutions["[SECOND_LIFE]"] = "Second Life";
mSubstitutions["[VIEWER_NAME]"] = LLNotifications::instance().getGlobalString("VIEWER_NAME");
mSubstitutions["[VIEWER_SITE]"] = LLNotifications::instance().getGlobalString("VIEWER_SITE");
mSubstitutions["[GRID_NAME]"] = gHippoGridManager->getConnectedGrid()->getGridName();
mSubstitutions["[GRID_SITE]"] = gHippoGridManager->getConnectedGrid()->getWebSite();
mSubstitutions["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
mSubstitutions["_URL"] = getURL();
mSubstitutions["_NAME"] = template_name;
// TODO: something like this so that a missing alert is sensible:

View File

@@ -579,7 +579,7 @@ void LLDir::setChatLogsDir(const std::string &path)
}
}
void LLDir::setPerAccountChatLogsDir(const std::string &first, const std::string &last)
void LLDir::setPerAccountChatLogsDir(const std::string &grid, const std::string &first, const std::string &last)
{
// if both first and last aren't set, assume we're grabbing the cached dir
if (!first.empty() && !last.empty())
@@ -595,6 +595,14 @@ void LLDir::setPerAccountChatLogsDir(const std::string &first, const std::string
mPerAccountChatLogsDir += firstlower;
mPerAccountChatLogsDir += "_";
mPerAccountChatLogsDir += lastlower;
if (!grid.empty())
{
std::string gridlower(grid);
LLStringUtil::toLower(gridlower);
mPerAccountChatLogsDir += "@";
mPerAccountChatLogsDir += gridlower;
}
}
else
{

View File

@@ -130,7 +130,7 @@ class LLDir
static std::string getForbiddenFileChars();
virtual void setChatLogsDir(const std::string &path); // Set the chat logs dir to this user's dir
virtual void setPerAccountChatLogsDir(const std::string &first, const std::string &last); // Set the per user chat log directory.
virtual void setPerAccountChatLogsDir(const std::string &grid, const std::string &first, const std::string &last); // Set the per user chat log directory.
virtual void setLindenUserDir(const std::string &first, const std::string &last); // Set the linden user dir to this user's dir
virtual void setSkinFolder(const std::string &skin_folder);
virtual bool setCacheDir(const std::string &path);

View File

@@ -8,6 +8,18 @@
<string>settings_sh.xml</string>
<string>settings_rlv.xml</string>
</array>
<key>LastSelectedGrid</key>
<map>
<key>Comment</key>
<string>Last grid selected from the grid pulldown</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string />
</map>
<key>CheckForGridUpdates</key>
<map>
@@ -10007,6 +10019,19 @@
<key>Value</key>
<string>http://search.secondlife.com/client_search.php?</string>
</map>
<key>SearchURLDefaultOpenSim</key>
<map>
<key>Comment</key>
<string>URL to load for empty OpenSim searches</string>
<key>Persist</key>
<integer>1</integer>
<key>HideFromEditor</key>
<integer>0</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>http://webi.metaverseink.com/opensim/results.jsp?</string>
</map>
<key>SearchURLQuery</key>
<map>
<key>Comment</key>

View File

@@ -1,19 +1,19 @@
// Ported to Imprudence from the Hippo OpenSim Viewer by Jacek Antonelli
#include "llviewerprecompiledheaders.h"
#include "hippogridmanager.h"
#include <cctype>
#include <climits>
#include <cstring>
#include <algorithm>
#include <stdtypes.h>
#include "lldir.h"
#include "lleconomy.h"
#include "llerror.h"
#include "llfile.h"
#include "llhttpclient.h"
#include "llsdserialize.h"
#include <lldir.h>
#include <lleconomy.h>
#include <llerror.h>
#include <llfile.h>
#include <llhttpclient.h>
#include <llsdserialize.h>
#include "lltrans.h"
#include "llviewercontrol.h"
#include "llweb.h"
@@ -23,7 +23,7 @@
// ********************************************************************
// Global Variables
HippoGridManager *gHippoGridManager = 0;
HippoGridManager* gHippoGridManager = 0;
HippoGridInfo HippoGridInfo::FALLBACK_GRIDINFO("");
@@ -39,82 +39,352 @@ HippoGridInfo HippoGridInfo::FALLBACK_GRIDINFO("");
// ********************************************************************
// Initialize
HippoGridInfo::HippoGridInfo(const std::string &gridNick) :
mPlatform(PLATFORM_OTHER),
HippoGridInfo::HippoGridInfo(const std::string& gridNick) :
mPlatform(PLATFORM_OPENSIM),
mGridNick(gridNick),
mGridName(LLStringUtil::null),
mLoginUri(LLStringUtil::null),
mLoginPage(LLStringUtil::null),
mHelperUri(LLStringUtil::null),
mWebSite(LLStringUtil::null),
mSupportUrl(LLStringUtil::null),
mRegisterUrl(LLStringUtil::null),
mPasswordUrl(LLStringUtil::null),
mSearchUrl(LLStringUtil::null),
mFirstName(LLStringUtil::null),
mLastName(LLStringUtil::null),
mAvatarPassword(LLStringUtil::null),
mXmlState(XML_VOID),
mVoiceConnector("SLVoice"),
mRenderCompat(true),
mMaxAgentGroups(-1),
mVersion(0),
mCurrencySymbol("OS$"),
mRealCurrencySymbol("US$"),
mDirectoryFee(30)
{
cleanUpGridNick(mGridNick);
std::string nick = gridNick;
mGridNick = sanitizeGridNick( nick );
}
// ********************************************************************
// Getters
HippoGridInfo::Platform HippoGridInfo::getPlatform()
{
return mPlatform;
}
bool HippoGridInfo::isOpenSimulator() const
{
return (mPlatform == HippoGridInfo::PLATFORM_OPENSIM);
}
bool HippoGridInfo::isSecondLife() const
{
return (mPlatform == HippoGridInfo::PLATFORM_SECONDLIFE);
}
const std::string& HippoGridInfo::getGridNick() const
{
return mGridNick;
}
const std::string& HippoGridInfo::getGridName() const
{
return mGridName;
}
const std::string& HippoGridInfo::getLoginUri() const
{
return mLoginUri;
}
const std::string& HippoGridInfo::getLoginPage() const
{
return mLoginPage;
}
const std::string& HippoGridInfo::getHelperUri() const
{
return mHelperUri;
}
const std::string& HippoGridInfo::getWebSite() const
{
return mWebSite;
}
const std::string& HippoGridInfo::getSupportUrl() const
{
return mSupportUrl;
}
const std::string& HippoGridInfo::getRegisterUrl() const
{
return mRegisterUrl;
}
const std::string& HippoGridInfo::getPasswordUrl() const
{
return mPasswordUrl;
}
const std::string& HippoGridInfo::getSearchUrl() const
{
return mSearchUrl;
}
const std::string& HippoGridInfo::getFirstName() const
{
return mFirstName;
}
const std::string& HippoGridInfo::getLastName() const
{
return mLastName;
}
const std::string& HippoGridInfo::getAvatarPassword() const
{
return mAvatarPassword;
}
bool HippoGridInfo::isRenderCompat() const
{
return mRenderCompat;
}
const std::string& HippoGridInfo::getCurrencySymbol() const
{
return mCurrencySymbol;
}
const std::string& HippoGridInfo::getRealCurrencySymbol() const
{
return mRealCurrencySymbol;
}
// ********************************************************************
// Setters
void HippoGridInfo::setPlatform(Platform platform)
{
mPlatform = platform;
if (mPlatform == PLATFORM_SECONDLIFE) mCurrencySymbol = "L$";
if (mPlatform == PLATFORM_SECONDLIFE)
{
mCurrencySymbol = "L$";
}
}
void HippoGridInfo::setPlatform(const std::string &platform)
void HippoGridInfo::setPlatform(const std::string& platform)
{
std::string tmp = platform;
for (unsigned i=0; i<platform.size(); i++)
tmp[i] = tolower(tmp[i]);
if (tmp == "opensim") {
if (tmp == "opensim")
{
setPlatform(PLATFORM_OPENSIM);
} else if (tmp == "secondlife") {
}
else if (tmp == "secondlife")
{
setPlatform(PLATFORM_SECONDLIFE);
} else {
}
else
{
setPlatform(PLATFORM_OTHER);
llwarns << "Unknown platform '" << platform << "'." << llendl;
}
}
void HippoGridInfo::setGridName(const std::string& gridName)
{
mGridName = gridName;
}
void HippoGridInfo::setLoginUri(const std::string& loginUri)
{
std::string uri = loginUri;
mLoginUri = sanitizeUri(uri);
}
void HippoGridInfo::setLoginPage(const std::string& loginPage)
{
mLoginPage = loginPage;
}
void HippoGridInfo::setHelperUri(const std::string& helperUri)
{
std::string uri = helperUri;
mHelperUri = sanitizeUri(uri);
}
void HippoGridInfo::setWebSite(const std::string& website)
{
mWebSite = website;
}
void HippoGridInfo::setSupportUrl(const std::string& url)
{
mSupportUrl = url;
}
void HippoGridInfo::setRegisterUrl(const std::string& url)
{
mRegisterUrl = url;
}
void HippoGridInfo::setPasswordUrl(const std::string& url)
{
mPasswordUrl = url;
}
void HippoGridInfo::setSearchUrl(const std::string& url)
{
mSearchUrl = url;
}
void HippoGridInfo::setFirstName(const std::string& firstName)
{
mFirstName = firstName;
}
void HippoGridInfo::setLastName(const std::string& lastName)
{
mLastName = lastName;
}
void HippoGridInfo::setAvatarPassword(const std::string& avatarPassword)
{
mAvatarPassword = avatarPassword;
}
void HippoGridInfo::setRenderCompat(bool compat)
{
mRenderCompat = compat;
}
void HippoGridInfo::setCurrencySymbol(const std::string& sym)
{
mCurrencySymbol = sym.substr(0, 3);
}
void HippoGridInfo::setRealCurrencySymbol(const std::string& sym)
{
mRealCurrencySymbol = sym.substr(0, 3);
}
void HippoGridInfo::setDirectoryFee(int fee)
{
mDirectoryFee = fee;
}
// ********************************************************************
// Grid Info
std::string HippoGridInfo::getSearchUrl(SearchType ty) const
std::string HippoGridInfo::getSearchUrl(SearchType ty, bool is_web) const
{
if ((mPlatform == PLATFORM_SECONDLIFE) || mSearchUrl.empty()) {
// Second Life defaults
if (ty == SEARCH_ALL_EMPTY) {
return gSavedSettings.getString("SearchURLDefault");
} else if (ty == SEARCH_ALL_QUERY) {
return gSavedSettings.getString("SearchURLQuery");
} else if (ty == SEARCH_ALL_TEMPLATE) {
return gSavedSettings.getString("SearchURLSuffix2");
} else {
llinfos << "Illegal search URL type " << ty << llendl;
return "";
// Don't worry about whether or not mSearchUrl is empty here anymore -- MC
if (is_web)
{
if (mPlatform == PLATFORM_SECONDLIFE)
{
// Second Life defaults
if (ty == SEARCH_ALL_EMPTY)
{
return gSavedSettings.getString("SearchURLDefault");
}
else if (ty == SEARCH_ALL_QUERY)
{
return gSavedSettings.getString("SearchURLQuery");
}
else if (ty == SEARCH_ALL_TEMPLATE)
{
return gSavedSettings.getString("SearchURLSuffix2");
}
else
{
llinfos << "Illegal search URL type " << ty << llendl;
return "";
}
}
} else {
// OpenSim and other
if (ty == SEARCH_ALL_EMPTY) {
return (mSearchUrl + "panel=All&");
} else if (ty == SEARCH_ALL_QUERY) {
return (mSearchUrl + "q=[QUERY]&s=[COLLECTION]&");
} else if (ty == SEARCH_ALL_TEMPLATE) {
return "lang=[LANG]&m=[MATURE]&t=[TEEN]&region=[REGION]&x=[X]&y=[Y]&z=[Z]&session=[SESSION]";
} else {
llinfos << "Illegal search URL type " << ty << llendl;
return "";
else if (!mSearchUrl.empty())
{
// Search url sent to us in the login response
if (ty == SEARCH_ALL_EMPTY)
{
return (mSearchUrl);
}
else if (ty == SEARCH_ALL_QUERY)
{
return (mSearchUrl + "q=[QUERY]&s=[COLLECTION]&");
}
else if (ty == SEARCH_ALL_TEMPLATE)
{
return "lang=[LANG]&mat=[MATURITY]&t=[TEEN]&region=[REGION]&x=[X]&y=[Y]&z=[Z]&session=[SESSION]";
}
else
{
llinfos << "Illegal search URL type " << ty << llendl;
return "";
}
}
else
{
// OpenSim and other web search defaults
if (ty == SEARCH_ALL_EMPTY)
{
return gSavedSettings.getString("SearchURLDefaultOpenSim");
}
else if (ty == SEARCH_ALL_QUERY)
{
return gSavedSettings.getString("SearchURLQueryOpenSim");
}
else if (ty == SEARCH_ALL_TEMPLATE)
{
return gSavedSettings.getString("SearchURLSuffixOpenSim");
}
else
{
llinfos << "Illegal search URL type " << ty << llendl;
return "";
}
}
}
else
{
// Use the old search all
if (ty == SEARCH_ALL_EMPTY)
{
return (mSearchUrl + "panel=All&");
}
else if (ty == SEARCH_ALL_QUERY)
{
return (mSearchUrl + "q=[QUERY]&s=[COLLECTION]&");
}
else if (ty == SEARCH_ALL_TEMPLATE)
{
return "lang=[LANG]&m=[MATURITY]&t=[TEEN]&region=[REGION]&x=[X]&y=[Y]&z=[Z]&session=[SESSION]";
}
else
{
llinfos << "Illegal search URL type " << ty << llendl;
return "";
}
}
}
//static
void HippoGridInfo::onXmlElementStart(void *userData, const XML_Char *name, const XML_Char **atts)
void HippoGridInfo::onXmlElementStart(void* userData, const XML_Char* name, const XML_Char** atts)
{
HippoGridInfo *self = (HippoGridInfo*)userData;
HippoGridInfo* self = (HippoGridInfo*)userData;
if (strcasecmp(name, "gridnick") == 0)
self->mXmlState = XML_GRIDNICK;
else if (strcasecmp(name, "gridname") == 0)
@@ -135,48 +405,57 @@ void HippoGridInfo::onXmlElementStart(void *userData, const XML_Char *name, cons
self->mXmlState = XML_REGISTER;
else if (strcasecmp(name, "password") == 0)
self->mXmlState = XML_PASSWORD;
//else if (strcasecmp(name, "search") == 0)
//self->mXmlState = XML_SEARCH;
else if (strcasecmp(name, "search") == 0)
self->mXmlState = XML_SEARCH;
}
//static
void HippoGridInfo::onXmlElementEnd(void *userData, const XML_Char *name)
void HippoGridInfo::onXmlElementEnd(void* userData, const XML_Char* name)
{
HippoGridInfo *self = (HippoGridInfo*)userData;
HippoGridInfo* self = (HippoGridInfo*)userData;
self->mXmlState = XML_VOID;
}
//static
void HippoGridInfo::onXmlCharacterData(void *userData, const XML_Char *s, int len)
void HippoGridInfo::onXmlCharacterData(void* userData, const XML_Char* s, int len)
{
HippoGridInfo *self = (HippoGridInfo*)userData;
switch (self->mXmlState) {
case XML_GRIDNICK:
HippoGridInfo* self = (HippoGridInfo*)userData;
switch (self->mXmlState)
{
case XML_GRIDNICK:
{
if (self->mGridNick == "") self->mGridNick.assign(s, len);
cleanUpGridNick(self->mGridNick);
break;
case XML_PLATFORM: {
std::string platform(s, len);
self->setPlatform(platform);
self->mGridNick = sanitizeGridNick(self->mGridNick);
break;
}
case XML_LOGINURI:
self->mLoginUri.assign(s, len);
cleanUpUri(self->mLoginUri);
case XML_PLATFORM:
{
std::string platform(s, len);
self->setPlatform(platform);
break;
}
case XML_HELPERURI:
self->mHelperUri.assign(s, len);
cleanUpUri(self->mHelperUri);
case XML_LOGINURI:
{
std::string loginuri(s, len);
self->mLoginUri = sanitizeUri( loginuri );
break;
}
case XML_SEARCH:
//self->mSearchUrl.assign(s, len);
//cleanUpQueryUrl(mSearchUrl);
case XML_HELPERURI:
{
std::string helperuri(s, len);
self->mHelperUri = sanitizeUri( helperuri );
break;
}
case XML_SEARCH:
{
self->mSearchUrl.assign(s, len);
//sanitizeQueryUrl(mSearchUrl);
break;
}
case XML_GRIDNAME: self->mGridName.assign(s, len); break;
case XML_LOGINPAGE: self->mLoginPage.assign(s, len); break;
@@ -212,7 +491,8 @@ bool HippoGridInfo::retrieveGridInfo()
XML_SetElementHandler(parser, onXmlElementStart, onXmlElementEnd);
XML_SetCharacterDataHandler(parser, onXmlCharacterData);
mXmlState = XML_VOID;
if (!XML_Parse(parser, reply.data(), reply.size(), TRUE)) {
if (!XML_Parse(parser, reply.data(), reply.size(), TRUE))
{
llwarns << "XML Parse Error: " << XML_ErrorString(XML_GetErrorCode(parser)) << llendl;
success = false;
}
@@ -240,15 +520,18 @@ std::string HippoGridInfo::getDirectoryFee() const
{
std::string fee;
formatFee(fee, mDirectoryFee, true);
if (fee != "free") fee += "/week";
if (fee != LLTrans::getString("hippo_label_free")) fee += "/" + LLTrans::getString("hippo_label_week");
return fee;
}
void HippoGridInfo::formatFee(std::string &fee, int cost, bool showFree) const
{
if (showFree && (cost == 0)) {
fee = "free";
} else {
if (showFree && (cost == 0))
{
fee = LLTrans::getString("hippo_label_free");
}
else
{
fee = llformat("%s%d", getCurrencySymbol().c_str(), cost);
}
}
@@ -258,9 +541,10 @@ void HippoGridInfo::formatFee(std::string &fee, int cost, bool showFree) const
// Static Helpers
// static
const char *HippoGridInfo::getPlatformString(Platform platform)
const char* HippoGridInfo::getPlatformString(Platform platform)
{
static const char *platformStrings[PLATFORM_LAST] = {
static const char* platformStrings[PLATFORM_LAST] =
{
"Other", "OpenSim", "SecondLife"
};
@@ -271,39 +555,49 @@ const char *HippoGridInfo::getPlatformString(Platform platform)
// static
void HippoGridInfo::cleanUpGridNick(std::string &gridnick)
std::string HippoGridInfo::sanitizeGridNick(std::string &gridnick)
{
std::string tmp;
int size = gridnick.size();
for (int i=0; i<size; i++) {
for (int i=0; i<size; i++)
{
char c = gridnick[i];
if ((c == '_') || isalnum(c)) {
if ((c == '_') || isalnum(c))
{
tmp += tolower(c);
} else if (isspace(c)) {
}
else if (isspace(c))
{
tmp += "_";
}
}
gridnick = tmp;
return tmp;
}
// static
void HippoGridInfo::cleanUpUri(std::string &uri)
std::string HippoGridInfo::sanitizeUri(std::string &uri)
{
std::string::size_type n = uri.rfind('/');
if ((n == std::string::npos) || (n < 10))
uri += '/';
// if (uri.empty()) {
// return "";
// }
// // If last character in uri is not "/"
// // NOTE: This wrongly assumes that all URIs should end with "/"!
// if (uri.compare(uri.length()-1, 1, "/") != 0) {
// return uri + '/';
// }
return uri;
}
void HippoGridInfo::initFallback()
{
FALLBACK_GRIDINFO.mGridNick = "secondlife";
FALLBACK_GRIDINFO.setPlatform(PLATFORM_SECONDLIFE);
FALLBACK_GRIDINFO.setGridName("secondlife");
FALLBACK_GRIDINFO.setLoginUri("https://login.agni.lindenlab.com/cgi-bin/login.cgi");
FALLBACK_GRIDINFO.setLoginPage("http://phoenixviewer.com/app/login/");
FALLBACK_GRIDINFO.setHelperUri("https://secondlife.com/helpers/");
FALLBACK_GRIDINFO.setWebSite("http://secondlife.com/");
FALLBACK_GRIDINFO.mGridNick = "localhost";
FALLBACK_GRIDINFO.setPlatform(PLATFORM_OPENSIM);
FALLBACK_GRIDINFO.setGridName("Local Host");
FALLBACK_GRIDINFO.setLoginUri("http://127.0.0.1:9000/");
FALLBACK_GRIDINFO.setHelperUri("http://127.0.0.1:9000/");
}
@@ -319,7 +613,10 @@ void HippoGridInfo::initFallback()
// Initialize
HippoGridManager::HippoGridManager() :
mConnectedGrid(0)
mConnectedGrid(0),
mDefaultGridsVersion(0),
mCurrentGrid("osgrid"),
mDefaultGrid("osgrid")
{
}
@@ -332,7 +629,8 @@ HippoGridManager::~HippoGridManager()
void HippoGridManager::cleanup()
{
std::map<std::string, HippoGridInfo*>::iterator it, end = mGridInfo.end();
for (it=mGridInfo.begin(); it != end; ++it) {
for (it=mGridInfo.begin(); it != end; ++it)
{
delete it->second;
}
mGridInfo.clear();
@@ -351,42 +649,82 @@ void HippoGridManager::init()
}
void HippoGridManager::discardAndReload()
{
cleanup();
loadFromFile();
}
// ********************************************************************
// Public Access
HippoGridInfo *HippoGridManager::getGrid(const std::string &grid) const
HippoGridInfo* HippoGridManager::getGrid(const std::string& grid) const
{
std::map<std::string, HippoGridInfo*>::const_iterator it;
it = mGridInfo.find(grid);
if (it != mGridInfo.end()) {
if (it != mGridInfo.end())
{
return it->second;
} else {
}
else
{
return 0;
}
}
HippoGridInfo *HippoGridManager::getCurrentGrid() const
HippoGridInfo* HippoGridManager::getConnectedGrid() const
{
HippoGridInfo *grid = getGrid(mCurrentGrid);
if (grid) {
return (mConnectedGrid)? mConnectedGrid: getCurrentGrid();
}
HippoGridInfo* HippoGridManager::getCurrentGrid() const
{
HippoGridInfo* grid = getGrid(mCurrentGrid);
if (grid)
{
return grid;
} else {
}
else
{
return &HippoGridInfo::FALLBACK_GRIDINFO;
}
}
const std::string& HippoGridManager::getDefaultGridNick() const
{
return mDefaultGrid;
}
void HippoGridManager::addGrid(HippoGridInfo *grid)
const std::string& HippoGridManager::getCurrentGridNick() const
{
if (mCurrentGrid.empty())
{
return mDefaultGrid;
}
return mCurrentGrid;
}
void HippoGridManager::setCurrentGridAsConnected()
{
mConnectedGrid = getCurrentGrid();
}
void HippoGridManager::addGrid(HippoGridInfo* grid)
{
if (!grid) return;
const std::string &nick = grid->getGridNick();
if (nick == "") {
const std::string& nick = grid->getGridNick();
if (nick == "")
{
llwarns << "Ignoring to try adding grid with empty nick." << llendl;
delete grid;
return;
}
if (mGridInfo.find(nick) != mGridInfo.end()) {
if (mGridInfo.find(nick) != mGridInfo.end())
{
llwarns << "Ignoring to try adding existing grid " << nick << '.' << llendl;
delete grid;
return;
@@ -395,7 +733,7 @@ void HippoGridManager::addGrid(HippoGridInfo *grid)
}
void HippoGridManager::deleteGrid(const std::string &grid)
void HippoGridManager::deleteGrid(const std::string& grid)
{
GridIterator it = mGridInfo.find(grid);
if (it == mGridInfo.end()) {
@@ -406,35 +744,45 @@ void HippoGridManager::deleteGrid(const std::string &grid)
llinfos << "Number of grids now: " << mGridInfo.size() << llendl;
if (mGridInfo.empty()) llinfos << "Grid info map is empty." << llendl;
if (grid == mDefaultGrid)
setDefaultGrid(""); // sets first grid, if map not empty
setDefaultGrid(LLStringUtil::null); // sets first grid, if map not empty
if (grid == mCurrentGrid)
mCurrentGrid = mDefaultGrid;
}
void HippoGridManager::setDefaultGrid(const std::string &grid)
void HippoGridManager::setDefaultGrid(const std::string& grid)
{
GridIterator it = mGridInfo.find(grid);
if (it != mGridInfo.end()) {
if (it != mGridInfo.end())
{
mDefaultGrid = grid;
} else if (mGridInfo.find("secondlife") != mGridInfo.end()) {
}
else if (mGridInfo.find("secondlife") != mGridInfo.end())
{
mDefaultGrid = "secondlife";
} else if (!mGridInfo.empty()) {
mDefaultGrid = mGridInfo.begin()->first;
} else {
}
else if (!mGridInfo.empty())
{
mDefaultGrid = mGridInfo.begin()->first;
}
else
{
mDefaultGrid = "";
}
}
void HippoGridManager::setCurrentGrid(const std::string &grid)
void HippoGridManager::setCurrentGrid(const std::string& grid)
{
GridIterator it = mGridInfo.find(grid);
if (it != mGridInfo.end()) {
if (it != mGridInfo.end())
{
mCurrentGrid = grid;
} else if (!mGridInfo.empty()) {
}
else if (!mGridInfo.empty())
{
llwarns << "Unknown grid '" << grid << "'. Setting to default grid." << llendl;
mCurrentGrid = mDefaultGrid;
mCurrentGrid = mDefaultGrid;
}
}
@@ -444,20 +792,23 @@ void HippoGridManager::setCurrentGrid(const std::string &grid)
void HippoGridManager::loadFromFile()
{
mDefaultGridsVersion = 0;
// load user grid info
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("http://opensim-viewer.sourceforge.net/db/grids.php", !mGridInfo.empty());
parseUrl(gSavedSettings.getString("GridUpdateList"), !mGridInfo.empty());
setDefaultGrid(gSavedSettings.getString("DefaultGrid"));
setCurrentGrid(gSavedSettings.getString("CmdLineGridChoice"));
std::string last_grid = gSavedSettings.getString("LastSelectedGrid");
if (last_grid.empty()) last_grid = gSavedSettings.getString("DefaultGrid");
setDefaultGrid(last_grid);
setCurrentGrid(last_grid);
}
void HippoGridManager::parseUrl(const char *url, bool mergeIfNewer)
void HippoGridManager::parseUrl(const std::string url, bool mergeIfNewer)
{
llinfos << "Loading grid info from '" << url << "'." << llendl;
@@ -467,7 +818,8 @@ void HippoGridManager::parseUrl(const char *url, bool mergeIfNewer)
// check response, return on error
S32 status = response["status"].asInteger();
if ((status != 200) || !response["body"].isArray()) {
if ((status != 200) || !response["body"].isArray())
{
llinfos << "GridInfo Update failed (" << status << "): "
<< (response["body"].isString()? response["body"].asString(): "<unknown error>")
<< llendl;
@@ -478,18 +830,20 @@ void HippoGridManager::parseUrl(const char *url, bool mergeIfNewer)
parseData(gridInfo, mergeIfNewer);
}
void HippoGridManager::parseFile(const std::string &fileName, bool mergeIfNewer)
void HippoGridManager::parseFile(const std::string& fileName, bool mergeIfNewer)
{
llifstream infile;
infile.open(fileName.c_str());
if(!infile.is_open()) {
if (!infile.is_open())
{
llwarns << "Cannot find grid info file " << fileName << " to load." << llendl;
return;
}
LLSD gridInfo;
if (LLSDSerialize::fromXML(gridInfo, infile) <= 0) {
llwarns << "Unable to parse grid info file " << fileName << '.' << llendl;
if (LLSDSerialize::fromXML(gridInfo, infile) <= 0)
{
llwarns << "Unable to parse grid info file " << fileName << '.' << llendl;
return;
}
@@ -500,46 +854,66 @@ void HippoGridManager::parseFile(const std::string &fileName, bool mergeIfNewer)
void HippoGridManager::parseData(LLSD &gridInfo, bool mergeIfNewer)
{
if (mergeIfNewer)
{
LLSD::array_const_iterator it, end = gridInfo.endArray();
for (it = gridInfo.beginArray(); it != end; ++it)
{
LLSD gridMap = *it;
if (gridMap.has("default_grids_version"))
{
int version = gridMap["default_grids_version"];
if (version <= mDefaultGridsVersion) return;
else break;
}
}
if (it == end)
{
llwarns << "Grid data has no version number." << llendl;
return;
}
}
llinfos << "Loading grid data." << llendl;
LLSD::array_const_iterator it, end = gridInfo.endArray();
for (it = gridInfo.beginArray(); it != end; ++it) {
for (it = gridInfo.beginArray(); it != end; ++it)
{
LLSD gridMap = *it;
if (gridMap.has("gridnick") && gridMap.has("loginuri")) {
if (gridMap.has("default_grids_version"))
{
mDefaultGridsVersion = gridMap["default_grids_version"];
}
else if (gridMap.has("gridnick") && gridMap.has("loginuri"))
{
std::string gridnick = gridMap["gridnick"];
HippoGridInfo *grid;
HippoGridInfo* grid;
GridIterator it = mGridInfo.find(gridnick);
bool newGrid = (it == mGridInfo.end());
if (gridMap.has("version")) {
int version = gridMap["version"];
if (version == -1) {
// delete grid
if (!newGrid) mGridInfo.erase(it);
continue;
} else if (mergeIfNewer && !newGrid && (version <= it->second->getVersion())) {
// don't update if version is not newer
continue;
}
}
if (newGrid) {
if (newGrid)
{
// create new grid info
grid = new HippoGridInfo(gridnick);
} else {
}
else
{
// update existing grid info
grid = it->second;
}
grid->setLoginUri(gridMap["loginuri"]);
if (gridMap.has("platform")) grid->setPlatform(gridMap["platform"]);
if (gridMap.has("gridname")) grid->setGridName(gridMap["gridname"]);
if (gridMap.has("lastlogin_fname")) grid->setLastFName(gridMap["lastlogin_fname"]);
if (gridMap.has("lastlogin_lname")) grid->setLastLName(gridMap["lastlogin_lname"]);
if (gridMap.has("loginpage")) grid->setLoginPage(gridMap["loginpage"]);
if (gridMap.has("helperuri")) grid->setHelperUri(gridMap["helperuri"]);
if (gridMap.has("website")) grid->setWebSite(gridMap["website"]);
if (gridMap.has("support")) grid->setSupportUrl(gridMap["support"]);
if (gridMap.has("register")) grid->setRegisterUrl(gridMap["register"]);
if (gridMap.has("password")) grid->setPasswordUrl(gridMap["password"]);
//if (gridMap.has("search")) grid->setSearchUrl(gridMap["search"]);
if (gridMap.has("search")) grid->setSearchUrl(gridMap["search"]);
if (gridMap.has("render_compat")) grid->setRenderCompat(gridMap["render_compat"]);
if (gridMap.has("version")) grid->setVersion(gridMap["version"]);
// if (gridMap.has("firstname")) grid->setFirstName(gridMap["firstname"]);
// if (gridMap.has("lastname")) grid->setLastName(gridMap["lastname"]);
// if (gridMap.has("avatarpassword")) grid->setAvatarPassword(gridMap["avatarpassword"]);
if (newGrid) addGrid(grid);
}
}
@@ -553,15 +927,17 @@ void HippoGridManager::saveFile()
// build LLSD
LLSD gridInfo;
S32 i = 0;
gridInfo[0]["default_grids_version"] = mDefaultGridsVersion;
// add grids
S32 i = 1;
GridIterator it, end = mGridInfo.end();
for (it = mGridInfo.begin(); it != end; ++it, i++) {
HippoGridInfo *grid = it->second;
for (it = mGridInfo.begin(); it != end; ++it, i++)
{
HippoGridInfo* grid = it->second;
gridInfo[i]["gridnick"] = grid->getGridNick();
gridInfo[i]["platform"] = HippoGridInfo::getPlatformString(grid->getPlatform());
gridInfo[i]["gridname"] = grid->getGridName();
if (!grid->getLastFName().empty()) gridInfo[i]["lastlogin_fname"] = grid->getLastFName();
if (!grid->getLastLName().empty()) gridInfo[i]["lastlogin_lname"] = grid->getLastLName();
gridInfo[i]["loginuri"] = grid->getLoginUri();
gridInfo[i]["loginpage"] = grid->getLoginPage();
gridInfo[i]["helperuri"] = grid->getHelperUri();
@@ -569,20 +945,26 @@ void HippoGridManager::saveFile()
gridInfo[i]["support"] = grid->getSupportUrl();
gridInfo[i]["register"] = grid->getRegisterUrl();
gridInfo[i]["password"] = grid->getPasswordUrl();
//gridInfo[i]["search"] = grid->getSearchUrl();
// gridInfo[i]["firstname"] = grid->getFirstName();
// gridInfo[i]["lastname"] = grid->getLastName();
// gridInfo[i]["avatarpassword"] = grid->getAvatarPassword();
gridInfo[i]["search"] = grid->getSearchUrl();
gridInfo[i]["render_compat"] = grid->isRenderCompat();
gridInfo[i]["version"] = grid->getVersion();
}
// write client grid info file
std::string fileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "grids_sg1.xml");
std::string fileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "grid_info.xml");
llofstream file;
file.open(fileName.c_str());
if (file.is_open()) {
if (file.is_open())
{
LLSDSerialize::toPrettyXML(gridInfo, file);
file.close();
llinfos << "Saved grids to " << fileName << llendl;
} else {
}
else
{
llerrs << "Unable to open grid info file: " << fileName << llendl;
}
}

View File

@@ -8,10 +8,11 @@
#ifndef XML_STATIC
#define XML_STATIC
#endif
#ifdef LL_STANDALONE
# include "expat.h"
#include <expat.h>
#else
# include <expat/expat.h>
#include "expat/expat.h"
#endif
class LLSD;
@@ -19,7 +20,6 @@ class LLSD;
class HippoGridInfo
{
LOG_CLASS(HippoGridInfo);
public:
enum Platform {
PLATFORM_OTHER = 0,
@@ -33,62 +33,63 @@ public:
SEARCH_ALL_TEMPLATE
};
explicit HippoGridInfo(const std::string &gridNick);
explicit HippoGridInfo(const std::string& gridNick);
Platform getPlatform() const { return mPlatform; }
const std::string &getGridNick() const { return mGridNick; }
const std::string &getGridName() const { return mGridName; }
const std::string &getLastFName() const { return mLastFName; }
const std::string &getLastLName() const { return mLastLName; }
const std::string &getLoginUri() const { return mLoginUri; }
const std::string &getLoginPage() const { return mLoginPage; }
const std::string &getHelperUri() const { return mHelperUri; }
const std::string &getWebSite() const { return mWebSite; }
const std::string &getSupportUrl() const { return mSupportUrl; }
const std::string &getRegisterUrl() const { return mRegisterUrl; }
const std::string &getPasswordUrl() const { return mPasswordUrl; }
const std::string &getSearchUrl() const { return mSearchUrl; }
const std::string &getVoiceConnector() const { return mVoiceConnector; }
std::string getSearchUrl(SearchType ty) const;
bool isRenderCompat() const { return mRenderCompat; }
Platform getPlatform();
bool isOpenSimulator() const;
bool isSecondLife() const;
const std::string& getGridNick() const;
const std::string& getGridName() const;
const std::string& getLoginUri() const;
const std::string& getLoginPage() const;
const std::string& getHelperUri() const;
const std::string& getWebSite() const;
const std::string& getSupportUrl() const;
const std::string& getRegisterUrl() const;
const std::string& getPasswordUrl() const;
// Returns the url base used for the Web Search tab
const std::string& getSearchUrl() const;
const std::string& getFirstName() const;
const std::string& getLastName() const;
const std::string& getAvatarPassword() const;
const std::string& getVoiceConnector() const { return mVoiceConnector; }
std::string getSearchUrl(SearchType ty, bool is_web) const;
bool isRenderCompat() const;
int getMaxAgentGroups() const { return mMaxAgentGroups; }
int getVersion() const { return mVersion; }
const std::string &getCurrencySymbol() const { return mCurrencySymbol; }
const std::string &getRealCurrencySymbol() const { return mRealCurrencySymbol; }
std::string getUploadFee() const;
std::string getGroupCreationFee() const;
std::string getDirectoryFee() const;
const std::string& getCurrencySymbol() const;
const std::string& getRealCurrencySymbol() const;
std::string getUploadFee() const;
std::string getGroupCreationFee() const;
std::string getDirectoryFee() const;
bool isOpenSimulator() const { return (mPlatform == PLATFORM_OPENSIM ); }
bool isSecondLife() const { return (mPlatform == PLATFORM_SECONDLIFE); }
void setPlatform (const std::string &platform);
void setPlatform (Platform platform);
void setGridName (const std::string &gridName) { mGridName = gridName; }
void setLastFName (const std::string &firstName) { mLastFName = firstName; }
void setLastLName (const std::string &lastName) { mLastLName = lastName; }
void setLoginUri (const std::string &loginUri) { mLoginUri = loginUri; cleanUpUri(mLoginUri); }
void setLoginPage (const std::string &loginPage) { mLoginPage = loginPage; }
void setHelperUri (const std::string &helperUri) { mHelperUri = helperUri; cleanUpUri(mHelperUri); }
void setWebSite (const std::string &website) { mWebSite = website; }
void setSupportUrl (const std::string &url) { mSupportUrl = url; }
void setRegisterUrl(const std::string &url) { mRegisterUrl = url; }
void setPasswordUrl(const std::string &url) { mPasswordUrl = url; }
void setSearchUrl (const std::string &url) { mSearchUrl = url; }
void setRenderCompat(bool compat) { mRenderCompat = compat; }
void setPlatform (const std::string& platform);
void setPlatform (Platform platform);
void setGridName (const std::string& gridName);
void setLoginUri (const std::string& loginUri);
void setLoginPage(const std::string& loginPage);
void setHelperUri(const std::string& helperUri);
void setWebSite (const std::string& website);
void setSupportUrl(const std::string& url);
void setRegisterUrl(const std::string& url);
void setPasswordUrl(const std::string& url);
// sets the url base used for the Web Search tab
void setSearchUrl(const std::string& url);
void setRenderCompat(bool compat);
void setMaxAgentGroups(int max) { mMaxAgentGroups = max; }
void setVersion(int version) { mVersion = version; }
void setVoiceConnector(const std::string &vc) { mVoiceConnector = vc; }
void setFirstName(const std::string& firstName);
void setLastName(const std::string& lastName);
void setAvatarPassword(const std::string& avatarPassword);
void setVoiceConnector(const std::string& vc) { mVoiceConnector = vc; }
void setCurrencySymbol(const std::string &sym) { mCurrencySymbol = sym.substr(0, 3); }
void setRealCurrencySymbol(const std::string &sym) { mRealCurrencySymbol = sym.substr(0, 3); }
void setDirectoryFee(int fee) { mDirectoryFee = fee; }
void setCurrencySymbol(const std::string& sym);
void setRealCurrencySymbol(const std::string& sym);
void setDirectoryFee(int fee);
bool retrieveGridInfo();
static const char *getPlatformString(Platform platform);
static void cleanUpGridNick(std::string &gridnick);
static const char* getPlatformString(Platform platform);
static std::string sanitizeGridNick(std::string &gridnick);
static HippoGridInfo FALLBACK_GRIDINFO;
static void initFallback();
@@ -97,8 +98,6 @@ private:
Platform mPlatform;
std::string mGridNick;
std::string mGridName;
std::string mLastFName;
std::string mLastLName;
std::string mLoginUri;
std::string mLoginPage;
std::string mHelperUri;
@@ -108,53 +107,56 @@ private:
std::string mPasswordUrl;
std::string mSearchUrl;
std::string mVoiceConnector;
std::string mFirstName;
std::string mLastName;
std::string mAvatarPassword;
bool mRenderCompat;
int mMaxAgentGroups;
int mVersion;
std::string mCurrencySymbol;
std::string mRealCurrencySymbol;
int mDirectoryFee;
// for parsing grid info XML
enum XmlState {
enum XmlState
{
XML_VOID, XML_GRIDNICK, XML_PLATFORM, XML_GRIDNAME,
XML_LOGINURI, XML_LOGINPAGE, XML_HELPERURI,
XML_WEBSITE, XML_SUPPORT, XML_REGISTER, XML_PASSWORD, XML_SEARCH
};
XmlState mXmlState;
static void cleanUpUri(std::string &uri);
static std::string sanitizeUri(std::string &uri);
void formatFee(std::string &fee, int cost, bool showFree) const;
static void onXmlElementStart(void *userData, const XML_Char *name, const XML_Char **atts);
static void onXmlElementEnd(void *userData, const XML_Char *name);
static void onXmlCharacterData(void *userData, const XML_Char *s, int len);
static void onXmlElementStart(void* userData, const XML_Char* name, const XML_Char** atts);
static void onXmlElementEnd(void* userData, const XML_Char* name);
static void onXmlCharacterData(void* userData, const XML_Char* s, int len);
};
class HippoGridManager
{
LOG_CLASS(HippoGridManager);
public:
HippoGridManager();
~HippoGridManager();
void init();
void saveFile();
void discardAndReload();
HippoGridInfo *getGrid(const std::string &grid) const;
HippoGridInfo *getConnectedGrid() const { return (mConnectedGrid)? mConnectedGrid: getCurrentGrid(); }
HippoGridInfo *getCurrentGrid() const;
const std::string &getDefaultGridNick() const { return mDefaultGrid; }
const std::string &getCurrentGridNick() const { return mCurrentGrid; }
HippoGridInfo* getGrid(const std::string& grid) const;
HippoGridInfo* getConnectedGrid() const;
HippoGridInfo* getCurrentGrid() const;
const std::string& getDefaultGridNick() const;
const std::string& getCurrentGridNick() const;
void setDefaultGrid(const std::string &grid);
void setCurrentGrid(const std::string &grid);
void setCurrentGridAsConnected() { mConnectedGrid = getCurrentGrid(); }
void setDefaultGrid(const std::string& grid);
void setCurrentGrid(const std::string& grid);
void setCurrentGridAsConnected();
void addGrid(HippoGridInfo *grid);
void deleteGrid(const std::string &grid);
void addGrid(HippoGridInfo* grid);
void deleteGrid(const std::string& grid);
typedef std::map<std::string, HippoGridInfo*>::iterator GridIterator;
GridIterator beginGrid() { return mGridInfo.begin(); }
@@ -164,17 +166,18 @@ private:
std::map<std::string, HippoGridInfo*> mGridInfo;
std::string mDefaultGrid;
std::string mCurrentGrid;
HippoGridInfo *mConnectedGrid;
HippoGridInfo* mConnectedGrid;
int mDefaultGridsVersion;
void cleanup();
void loadFromFile();
void parseFile(const std::string &fileName, bool mergeIfNewer);
void parseUrl(const char *url, bool mergeIfNewer);
void parseFile(const std::string& fileName, bool mergeIfNewer);
void parseUrl(const std::string url, bool mergeIfNewer);
void parseData(LLSD &gridInfo, bool mergeIfNewer);
};
extern HippoGridManager *gHippoGridManager;
extern HippoGridManager* gHippoGridManager;
#endif

View File

@@ -304,7 +304,7 @@ bool HippoPanelGridsImpl::saveCurGrid()
// check nickname
std::string gridnick = childGetValue("gridnick");
if (gridnick == "<required>") gridnick = "";
HippoGridInfo::cleanUpGridNick(gridnick);
HippoGridInfo::sanitizeGridNick(gridnick);
childSetValue("gridnick", (gridnick != "")? gridnick: "<required>");
if (gridnick == "") {
LLNotifications::instance().add("GridsNoNick");

View File

@@ -3133,9 +3133,6 @@ void LLAppViewer::badNetworkHandler()
// Flush all of our caches on exit in the case of disconnect due to
// invalid packets.
// <edit>
if(1) return;
// </edit>
mPurgeOnExit = TRUE;
@@ -3146,17 +3143,23 @@ void LLAppViewer::badNetworkHandler()
LLAppViewer::handleSyncViewerCrash();
LLAppViewer::handleViewerCrash();
std::string grid_support_msg = "";
if (!gHippoGridManager->getCurrentGrid()->getSupportUrl().empty())
{
grid_support_msg = "\n\nOr visit the gird support page at: \n "
+ gHippoGridManager->getCurrentGrid()->getSupportUrl();
}
std::ostringstream message;
message <<
"The viewer has detected mangled network data indicative\n"
"of a bad upstream network connection or an incomplete\n"
"local installation of " << LLAppViewer::instance()->getSecondLifeTitle() << ". \n"
"local installation of " << gSecondLife << ". \n"
" \n"
"Try uninstalling and reinstalling to see if this resolves \n"
"the issue. \n"
" \n"
"If the problem continues, see the Tech Support FAQ at: \n"
"www.secondlife.com/support";
"If the problem continues, please report the issue at: \n"
"http://www.singularityviewer.org" << grid_support_msg;
forceDisconnect(message.str());
}

View File

@@ -63,6 +63,8 @@
#include "llscrolllistctrl.h"
#include "llsdserialize.h"
#include "hippogridmanager.h"
// When uploading multiple files, don't display any of them when uploading more than this number.
static const S32 FILE_COUNT_DISPLAY_THRESHOLD = 5;
@@ -228,6 +230,7 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content)
LLSD args;
args["AMOUNT"] = llformat("%d", expected_upload_cost);
args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
LLNotifications::instance().add("UploadPayment", args);
}

View File

@@ -47,6 +47,8 @@
#include "llxmlrpctransaction.h"
#include "llviewernetwork.h"
#include "hippogridmanager.h"
const F64 CURRENCY_ESTIMATE_FREQUENCY = 2.0;
// how long of a pause in typing a currency buy amount before an
@@ -372,6 +374,7 @@ void LLCurrencyUIManager::Impl::updateUI()
}
mPanel.childShow("currency_action");
mPanel.childSetTextArg("currency_action", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
LLLineEditor* lindenAmount = mPanel.getChild<LLLineEditor>("currency_amt");
if (lindenAmount)
@@ -478,7 +481,9 @@ void LLCurrencyUIManager::buy(const std::string& buy_msg)
LLUIString msg = buy_msg;
msg.setArg("[LINDENS]", llformat("%d", impl.mUserCurrencyBuy));
msg.setArg("[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
msg.setArg("[USD]", llformat("%#.2f", impl.mSiteCurrencyEstimatedCost / 100.0));
msg.setArg("[REALCURRENCY]", gHippoGridManager->getConnectedGrid()->getRealCurrencySymbol());
LLConfirmationManager::confirm(impl.mSiteConfirm,
msg,
impl,

View File

@@ -47,6 +47,9 @@
#include "floatervoicelicense.h"
#include "llstartup.h"
#include "hippogridmanager.h"
// static
std::set<std::string> LLFirstUse::sConfigVariables;
@@ -90,6 +93,7 @@ void LLFirstUse::useBalanceIncrease(S32 delta)
LLSD args;
args["AMOUNT"] = llformat("%d",delta);
args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
LLNotifications::instance().add("FirstBalanceIncrease", args);
}
}
@@ -104,6 +108,7 @@ void LLFirstUse::useBalanceDecrease(S32 delta)
LLSD args;
args["AMOUNT"] = llformat("%d",-delta);
args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
LLNotifications::instance().add("FirstBalanceDecrease", args);
}
}

View File

@@ -60,6 +60,8 @@
#include "llglheaders.h"
#include "llwindow.h"
#include "hippogridmanager.h"
// [RLVa:KB]
#include "rlvhandler.h"
// [/RLVa:KB]
@@ -133,6 +135,8 @@ LLFloaterAbout::LLFloaterAbout()
std::string support;
support.append("\n\n");
support.append("Grid: " + gHippoGridManager->getConnectedGrid()->getGridName()
+ " (" + gHippoGridManager->getConnectedGrid()->getGridNick() + ")\n\n");
#if LL_MSVC
support.append(llformat("Built with MSVC version %d\n\n", _MSC_VER));

View File

@@ -68,6 +68,8 @@
#include "lluictrlfactory.h"
#include "llviewercontrol.h"
#include "hippogridmanager.h"
//<edit>
#include "llinventorymodel.h" // gInventoryModel
//</edit>
@@ -194,7 +196,7 @@ BOOL LLFloaterAnimPreview::postBuild()
childSetMaxValue("priority", 7);
}
childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d",sUploadAmount));
childSetLabelArg("ok_btn", "[UPLOADFEE]", gHippoGridManager->getConnectedGrid()->getUploadFee());
childSetAction("ok_btn", onBtnOK, this);
setDefaultBtn();

View File

@@ -50,6 +50,8 @@
#include "lluictrlfactory.h"
#include "llviewerwindow.h"
#include "hippogridmanager.h"
LLFloaterBuy* LLFloaterBuy::sInstance = NULL;
LLFloaterBuy::LLFloaterBuy()
@@ -184,6 +186,7 @@ void LLFloaterBuy::show(const LLSaleInfo& sale_info)
// Add after columns added so appropriate heights are correct.
object_list->addElement(row);
sInstance->childSetTextArg("buy_text", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
sInstance->childSetTextArg("buy_text", "[AMOUNT]", llformat("%d", sale_info.getSalePrice()));
sInstance->childSetTextArg("buy_text", "[NAME]", owner_name);

View File

@@ -54,6 +54,8 @@
#include "lluictrlfactory.h"
#include "llviewerwindow.h"
#include "hippogridmanager.h"
LLFloaterBuyContents* LLFloaterBuyContents::sInstance = NULL;
LLFloaterBuyContents::LLFloaterBuyContents()
@@ -129,6 +131,7 @@ void LLFloaterBuyContents::show(const LLSaleInfo& sale_info)
}
sInstance->childSetTextArg("contains_text", "[NAME]", node->mName);
sInstance->childSetTextArg("buy_text", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
sInstance->childSetTextArg("buy_text", "[AMOUNT]", llformat("%d", sale_info.getSalePrice()));
sInstance->childSetTextArg("buy_text", "[NAME]", owner_name);

View File

@@ -46,6 +46,8 @@
#include "llwindow.h"
#include "llappviewer.h"
#include "hippogridmanager.h"
static const S32 STANDARD_BUY_AMOUNT = 2000;
static const S32 MINIMUM_BALANCE_AMOUNT = 0;
@@ -263,9 +265,11 @@ void LLFloaterBuyCurrencyUI::updateUI()
childSetVisible("buy_action", true);
childSetTextArg("buy_action", "[NAME]", mTargetName);
childSetTextArg("buy_action", "[PRICE]", llformat("%d",mTargetPrice));
childSetTextArg("buy_action", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
}
else
{
childSetTextArg("buy_action_unknown", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
childSetVisible("buy_action_unknown", true);
}
}
@@ -274,16 +278,19 @@ void LLFloaterBuyCurrencyUI::updateUI()
childShow("balance_label");
childShow("balance_amount");
childSetTextArg("balance_amount", "[AMT]", llformat("%d", balance));
childSetTextArg("balance_amount", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
S32 buying = mManager.getAmount();
childShow("buying_label");
childShow("buying_amount");
childSetTextArg("buying_amount", "[AMT]", llformat("%d", buying));
childSetTextArg("buying_amount", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
S32 total = balance + buying;
childShow("total_label");
childShow("total_amount");
childSetTextArg("total_amount", "[AMT]", llformat("%d", total));
childSetTextArg("total_amount", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
childSetVisible("purchase_warning_repurchase", false);
childSetVisible("purchase_warning_notenough", false);

View File

@@ -66,6 +66,8 @@
#include "llviewernetwork.h"
#include "roles_constants.h"
#include "hippogridmanager.h"
// NOTE: This is duplicated in lldatamoney.cpp ...
const F32 GROUP_LAND_BONUS_FACTOR = 1.1f;
const F64 CURRENCY_ESTIMATE_FREQUENCY = 0.5;
@@ -1024,6 +1026,7 @@ void LLFloaterBuyLandUI::refreshUI()
LLStringUtil::format_map_t string_args;
string_args["[AMOUNT]"] = llformat("%d", mParcelActualArea);
string_args["[AMOUNT2]"] = llformat("%d", mParcelSupportedObjects);
string_args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
childSetText("info_size", getString("meters_supports_object", string_args));
@@ -1227,7 +1230,8 @@ void LLFloaterBuyLandUI::refreshUI()
childSetText("purchase_action",
llformat(
"Pay L$ %d to %s for this land",
"Pay %s %d to %s for this land",
gHippoGridManager->getConnectedGrid()->getCurrencySymbol().c_str(),
mParcelPrice,
mParcelSellerName.c_str()
));
@@ -1239,6 +1243,7 @@ void LLFloaterBuyLandUI::refreshUI()
{
LLStringUtil::format_map_t string_args;
string_args["[AMOUNT]"] = llformat("%d", mAgentCashBalance);
string_args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
childSetText("currency_reason", getString("have_enough_lindens", string_args));
}
@@ -1247,6 +1252,7 @@ void LLFloaterBuyLandUI::refreshUI()
LLStringUtil::format_map_t string_args;
string_args["[AMOUNT]"] = llformat("%d", mAgentCashBalance);
string_args["[AMOUNT2]"] = llformat("%d", mParcelPrice - mAgentCashBalance);
string_args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
childSetText("currency_reason", getString("not_enough_lindens", string_args));
@@ -1257,6 +1263,7 @@ void LLFloaterBuyLandUI::refreshUI()
{
LLStringUtil::format_map_t string_args;
string_args["[AMOUNT]"] = llformat("%d", finalBalance);
string_args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
childSetText("currency_balance", getString("balance_left", string_args));
@@ -1265,6 +1272,7 @@ void LLFloaterBuyLandUI::refreshUI()
{
LLStringUtil::format_map_t string_args;
string_args["[AMOUNT]"] = llformat("%d", mParcelPrice - mAgentCashBalance);
string_args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
childSetText("currency_balance", getString("balance_needed", string_args));
@@ -1331,6 +1339,7 @@ void LLFloaterBuyLandUI::startBuyPreConfirm()
LLStringUtil::format_map_t string_args;
string_args["[AMOUNT]"] = llformat("%d", mCurrency.getAmount());
string_args["[AMOUNT2]"] = llformat("%#.2f", mCurrency.getEstimate() / 100.0);
string_args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
action += getString("buy_for_US", string_args);
}
@@ -1338,6 +1347,7 @@ void LLFloaterBuyLandUI::startBuyPreConfirm()
LLStringUtil::format_map_t string_args;
string_args["[AMOUNT]"] = llformat("%d", mParcelPrice);
string_args["[SELLER]"] = mParcelSellerName;
string_args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
action += getString("pay_to_for_land", string_args);

View File

@@ -77,6 +77,8 @@
#include "lltransfertargetfile.h"
#include "lltransfersourcefile.h"
#include "hippogridmanager.h"
const F32 SECONDS_BETWEEN_UPDATE_REQUESTS = 5.0f;
static LLFloaterGodTools* sGodTools = NULL;
@@ -135,6 +137,8 @@ LLFloaterGodTools::LLFloaterGodTools()
sendRegionInfoRequest();
childShowTab("GodTools Tabs", "region");
childSetTextArg("land cost text", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
}
// static

View File

@@ -62,6 +62,8 @@
#include "llviewercontrol.h"
// </edit>
#include "hippogridmanager.h"
//static
S32 LLFloaterImagePreview::sUploadAmount = 10;
@@ -107,7 +109,7 @@ BOOL LLFloaterImagePreview::postBuild()
return FALSE;
}
childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d",sUploadAmount));
childSetLabelArg("ok_btn", "[UPLOADFEE]", gHippoGridManager->getConnectedGrid()->getUploadFee());
LLCtrlSelectionInterface* iface = childGetSelectionInterface("clothing_type_combo");
if (iface)

View File

@@ -79,7 +79,7 @@
#include "roles_constants.h"
#include "llworld.h"
#include "hippogridmanager.h"
@@ -668,6 +668,7 @@ void LLPanelLandGeneral::refresh()
mSaleInfoForSaleNoObjects->setVisible(TRUE);
}
mSaleInfoNotForSale->setVisible(FALSE);
mSaleInfoForSale1->setTextArg("[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
F32 cost_per_sqm = 0.0f;
if (area > 0)
@@ -926,6 +927,7 @@ void LLPanelLandGeneral::onClickBuyPass(void* data)
LLSD args;
args["COST"] = cost;
args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
args["PARCEL_NAME"] = parcel_name;
args["TIME"] = time;
@@ -2124,6 +2126,7 @@ void LLPanelLandOptions::refreshSearch()
}
BOOL show_directory = parcel->getParcelFlag(PF_SHOW_DIRECTORY);
mCheckShowDirectory ->set(show_directory);
mCheckShowDirectory->setLabelArg("[DIRECTORYFEE]", gHippoGridManager->getConnectedGrid()->getDirectoryFee());
// Set by string in case the order in UI doesn't match the order by index.
// *TODO:Translate
@@ -2491,6 +2494,7 @@ void LLPanelLandAccess::refresh()
S32 pass_price = parcel->getPassPrice();
childSetValue( "PriceSpin", (F32)pass_price );
childSetLabelArg("PriceSpin", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
F32 pass_hours = parcel->getPassHours();
childSetValue( "HoursSpin", pass_hours );

View File

@@ -55,6 +55,8 @@
#include "llassetstorage.h"
#include "llinventorytype.h"
#include "hippogridmanager.h"
const S32 PREVIEW_LINE_HEIGHT = 19;
const S32 PREVIEW_CLOSE_BOX_SIZE = 16;
const S32 PREVIEW_BORDER_WIDTH = 2;
@@ -154,6 +156,7 @@ BOOL LLFloaterNameDesc::postBuild()
childSetAction("cancel_btn", onBtnCancel, this);
// OK button
childSetLabelArg("ok_btn", "[UPLOADFEE]", gHippoGridManager->getConnectedGrid()->getUploadFee());
childSetAction("ok_btn", onBtnOK, this);
setDefaultBtn("ok_btn");

View File

@@ -64,6 +64,8 @@
#include "llassetuploadresponders.h"
#include "hippogridmanager.h"
#if LL_MSVC
#pragma warning( disable : 4265 ) // "class has virtual functions, but destructor is not virtual"
#endif
@@ -358,7 +360,12 @@ bool LLFloaterPostcard::missingSubjMsgAlertCallback(const LLSD& notification, co
if((childGetValue("subject_form").asString()).empty())
{
// Stuff the subject back into the form.
childSetValue("subject_form", getString("default_subject"));
LLStringUtil::format_map_t targs;
targs["[GRID_NAME]"] = gHippoGridManager->getConnectedGrid()->getGridName();
std::string subj = getString("default_subject");
LLStringUtil::format(subj, targs);
childSetValue("subject_form", subj);
}
if(!mHasFirstMsgFocus)

View File

@@ -59,6 +59,8 @@
#include "lluictrlfactory.h"
#include "hippogridmanager.h"
// <edit>
#include "llclipboard.h"
// </edit>
@@ -175,6 +177,8 @@ LLFloaterProperties::LLFloaterProperties(const std::string& name, const LLRect&
}
sPropertiesObserverCount++;
childSetTextArg("TextPrice", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
// add the object to the static structure
LLUUID key = mItemID ^ mObjectID;
sInstances.insert(instance_map::value_type(key, this));

View File

@@ -46,6 +46,8 @@
#include "lluictrlfactory.h"
#include "llviewerwindow.h"
#include "hippogridmanager.h"
// defined in llfloaterland.cpp
void send_parcel_select_objects(S32 parcel_local_id, U32 return_type,
uuid_list_t* return_ids = NULL);
@@ -284,6 +286,8 @@ void LLFloaterSellLandUI::refreshUI()
childSetText("info_parcel", parcelp->getName());
childSetTextArg("info_size", "[AREA]", llformat("%d", mParcelActualArea));
childSetTextArg("price_ld", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
std::string price_str = childGetValue("price").asString();
bool valid_price = false;
valid_price = (price_str != "") && LLLineEditor::prevalidateNonNegativeS32(utf8str_to_wstring(price_str));

View File

@@ -77,6 +77,8 @@
#include "llvfile.h"
#include "llvfs.h"
#include "hippogridmanager.h"
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
///----------------------------------------------------------------------------
@@ -1232,6 +1234,9 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
// static
void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
{
std::string fee = gHippoGridManager->getConnectedGrid()->getUploadFee();
floater->childSetLabelArg("upload_btn", "[UPLOADFEE]", fee);
LLRadioGroup* snapshot_type_radio = floater->getChild<LLRadioGroup>("snapshot_type_radio");
snapshot_type_radio->setSelectedIndex(gSavedSettings.getS32("LastSnapshotType"));
LLSnapshotLivePreview::ESnapshotType shot_type = getTypeIndex(floater);

View File

@@ -52,6 +52,8 @@
#include "lltransactiontypes.h"
#include "lluictrlfactory.h"
#include "hippogridmanager.h"
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
///----------------------------------------------------------------------------
@@ -111,6 +113,8 @@ LLFloaterPay::LLFloaterPay(const std::string& name,
childSetAction("fastpay 1",&LLFloaterPay::onGive,info);
childSetVisible("fastpay 1", FALSE);
childSetLabelArg("fastpay 1", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
mQuickPayButton[i] = getChild<LLButton>("fastpay 1");
mQuickPayInfo[i] = info;
@@ -121,6 +125,7 @@ LLFloaterPay::LLFloaterPay(const std::string& name,
childSetAction("fastpay 5",&LLFloaterPay::onGive,info);
childSetVisible("fastpay 5", FALSE);
childSetLabelArg("fastpay 5", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
mQuickPayButton[i] = getChild<LLButton>("fastpay 5");
mQuickPayInfo[i] = info;
@@ -131,6 +136,7 @@ LLFloaterPay::LLFloaterPay(const std::string& name,
childSetAction("fastpay 10",&LLFloaterPay::onGive,info);
childSetVisible("fastpay 10", FALSE);
childSetLabelArg("fastpay 10", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
mQuickPayButton[i] = getChild<LLButton>("fastpay 10");
mQuickPayInfo[i] = info;
@@ -141,6 +147,7 @@ LLFloaterPay::LLFloaterPay(const std::string& name,
childSetAction("fastpay 20",&LLFloaterPay::onGive,info);
childSetVisible("fastpay 20", FALSE);
childSetLabelArg("fastpay 20", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
mQuickPayButton[i] = getChild<LLButton>("fastpay 20");
mQuickPayInfo[i] = info;
@@ -148,6 +155,8 @@ LLFloaterPay::LLFloaterPay(const std::string& name,
childSetVisible("amount text", FALSE);
childSetVisible("currency text", FALSE);
childSetTextArg("currency text", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
std::string last_amount;
if(sLastAmount > 0)
@@ -207,12 +216,14 @@ void LLFloaterPay::processPayPriceReply(LLMessageSystem* msg, void **userdata)
self->childSetVisible("amount", FALSE);
self->childSetVisible("pay btn", FALSE);
self->childSetVisible("amount text", FALSE);
self->childSetVisible("currency text", FALSE);
}
else if (PAY_PRICE_DEFAULT == price)
{
self->childSetVisible("amount", TRUE);
self->childSetVisible("pay btn", TRUE);
self->childSetVisible("amount text", TRUE);
self->childSetVisible("currency text", TRUE);
}
else
{
@@ -223,6 +234,7 @@ void LLFloaterPay::processPayPriceReply(LLMessageSystem* msg, void **userdata)
self->childSetVisible("pay btn", TRUE);
self->childSetEnabled("pay btn", TRUE);
self->childSetVisible("amount text", TRUE);
self->childSetVisible("currency text", TRUE);
self->childSetText("amount", llformat("%d", llabs(price)));
}
@@ -240,7 +252,7 @@ void LLFloaterPay::processPayPriceReply(LLMessageSystem* msg, void **userdata)
msg->getS32Fast(_PREHASH_ButtonData,_PREHASH_PayButton,pay_button,i);
if (pay_button > 0)
{
std::string button_str = "L$";
std::string button_str = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
button_str += LLResMgr::getInstance()->getMonetaryString( pay_button );
self->mQuickPayButton[i]->setLabelSelected(button_str);
@@ -261,7 +273,7 @@ void LLFloaterPay::processPayPriceReply(LLMessageSystem* msg, void **userdata)
}
// build a string containing the maximum value and calc nerw button width from it.
std::string balance_str = "L$";
std::string balance_str = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
balance_str += LLResMgr::getInstance()->getMonetaryString( max_pay_amount );
const LLFontGL* font = LLResMgr::getInstance()->getRes(LLFONT_SANSSERIF);
S32 new_button_width = font->getWidth( std::string(balance_str));
@@ -323,7 +335,9 @@ void LLFloaterPay::payViaObject(money_callback callback, const LLUUID& object_id
LLViewerObject* object = gObjectList.findObject(object_id);
if (!object) return;
LLFloaterPay *floater = new LLFloaterPay("Give L$", callback, object_id, TRUE);
LLFloaterPay *floater = new LLFloaterPay(
"Give " + gHippoGridManager->getConnectedGrid()->getCurrencySymbol(),
callback, object_id, TRUE);
if (!floater) return;
LLSelectNode* node = floater->mObjectSelection->getFirstRootNode();
@@ -356,12 +370,15 @@ void LLFloaterPay::payDirectly(money_callback callback,
const LLUUID& target_id,
BOOL is_group)
{
LLFloaterPay *floater = new LLFloaterPay("Give L$", callback, target_id, FALSE);
LLFloaterPay *floater = new LLFloaterPay(
"Give " + gHippoGridManager->getConnectedGrid()->getCurrencySymbol(),
callback, target_id, FALSE);
if (!floater) return;
floater->childSetVisible("amount", TRUE);
floater->childSetVisible("pay btn", TRUE);
floater->childSetVisible("amount text", TRUE);
floater->childSetVisible("currency text", TRUE);
floater->childSetVisible("fastpay text",TRUE);
for(S32 i=0;i<MAX_PAY_BUTTONS;++i)

View File

@@ -73,6 +73,8 @@
#include "llhudmanager.h" // For testing effects
#include "llhudeffect.h"
#include "hippogridmanager.h"
// [RLVa:KB]
#include "rlvhandler.h"
// [/RLVa:KB]
@@ -433,7 +435,7 @@ void LLHoverView::updateText()
if (object->flagTakesMoney() || (parent && parent->flagTakesMoney()) )
{
line.append(LLTrans::getString("TooltipFlagL$") + " ");
line.append(gHippoGridManager->getConnectedGrid()->getCurrencySymbol() + " ");
suppressObjectHoverDisplay = FALSE; // Show tip
}
@@ -479,6 +481,7 @@ void LLHoverView::updateText()
else if (for_sale)
{
LLStringUtil::format_map_t args;
args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
args["[AMOUNT]"] = llformat("%d", nodep->mSaleInfo.getSalePrice());
line.append(LLTrans::getString("TooltipForSaleL$", args));
suppressObjectHoverDisplay = FALSE; // Show tip
@@ -661,6 +664,7 @@ void LLHoverView::updateText()
if (hover_parcel && hover_parcel->getParcelFlag(PF_FOR_SALE))
{
LLStringUtil::format_map_t args;
args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
args["[AMOUNT]"] = llformat("%d", hover_parcel->getSalePrice());
line = LLTrans::getString("TooltipForSaleL$", args);
mText.push_back(line);

View File

@@ -55,6 +55,8 @@
#include "lloverlaybar.h" // for gOverlayBar
#include "lluictrlfactory.h"
#include "hippogridmanager.h"
// [RLVa:KB] - Version: 1.23.4
#include "rlvhandler.h"
// [/RLVa:KB]
@@ -579,7 +581,10 @@ void LLNotifyBox::format(std::string& msg, const LLStringUtil::format_map_t& arg
{
// XUI:translate!
LLStringUtil::format_map_t targs = args;
targs["[SECOND_LIFE]"] = "Second Life";
targs["[SECOND_LIFE]"] = gHippoGridManager->getConnectedGrid()->getGridName();
targs["[GRID_NAME]"] = gHippoGridManager->getConnectedGrid()->getGridName();
targs["[GRID_SITE]"] = gHippoGridManager->getConnectedGrid()->getWebSite();
targs["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
targs["[VIEWER_NAME]"] = "Singularity Viewer";
LLStringUtil::format(msg, targs);
}

View File

@@ -62,6 +62,8 @@
#include "llviewerwindow.h"
#include "llviewercontrol.h"
#include "hippogridmanager.h"
//
// Static functions
//
@@ -88,6 +90,8 @@ LLPanelAudioPrefs::~LLPanelAudioPrefs()
BOOL LLPanelAudioPrefs::postBuild()
{
refreshValues(); // initialize member data from saved settings
childSetLabelArg("currency_change_threshold", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
return TRUE;
}

View File

@@ -71,6 +71,8 @@
#include "llviewerwindow.h" // for window width, height
#include "llappviewer.h" // abortQuit()
#include "hippogridmanager.h"
// [RLVa:KB]
#include "rlvhandler.h"
// [/RLVa:KB]
@@ -682,6 +684,7 @@ void LLPanelClassified::processClassifiedInfoReply(LLMessageSystem *msg, void **
timeStructToFormattedString(now, gSavedSettings.getString("ShortDateFormat"), datestr);
LLStringUtil::format_map_t string_args;
string_args["[DATE]"] = datestr;
string_args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
string_args["[AMT]"] = llformat("%d", price_for_listing);
self->childSetText("classified_info_text", self->getString("ad_placed_paid", string_args));
@@ -878,6 +881,7 @@ void LLPanelClassified::callbackGotPriceForListing(S32 option, std::string text,
LLSD args;
std::string price_text = llformat("%d", MINIMUM_PRICE_FOR_LISTING);
args["MIN_PRICE"] = price_text;
args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
LLNotifications::instance().add("MinClassifiedPrice", args);
return;
@@ -889,6 +893,7 @@ void LLPanelClassified::callbackGotPriceForListing(S32 option, std::string text,
LLSD args;
args["AMOUNT"] = llformat("%d", price_for_listing);
args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
LLNotifications::instance().add("PublishClassified", args, LLSD(),
boost::bind(&LLPanelClassified::confirmPublish, self, _1, _2));
}

View File

@@ -63,6 +63,8 @@
#include "llfloaterdirectory.h"
#include "llpaneldirbrowser.h"
#include "hippogridmanager.h"
#if LL_MSVC
// disable boost::lexical_cast warning
#pragma warning (disable:4702)
@@ -220,8 +222,20 @@ void LLPanelDirFindAll::search(const std::string& search_text)
if (!search_text.empty())
{
// Check whether or not we're on the old or web search All -- MC
bool is_web = false;
LLPanel* tabs_panel = mFloaterDirectory->getChild<LLTabContainer>("Directory Tabs")->getCurrentPanel();
if (tabs_panel)
{
is_web = tabs_panel->getName() == "find_all_panel";
}
else
{
llwarns << "search panel not found! How can this be?!" << llendl;
}
std::string selected_collection = childGetValue( "Category" ).asString();
std::string url = buildSearchURL(search_text, selected_collection, inc_pg, inc_mature, inc_adult);
std::string url = buildSearchURL(search_text, selected_collection, inc_pg, inc_mature, inc_adult, is_web);
if (mWebBrowser)
{
mWebBrowser->navigateTo(url);
@@ -243,20 +257,48 @@ void LLPanelDirFind::focus()
void LLPanelDirFind::navigateToDefaultPage()
{
std::string start_url = getString("default_search_page");
BOOL inc_pg = childGetValue("incpg").asBoolean();
BOOL inc_mature = childGetValue("incmature").asBoolean();
BOOL inc_adult = childGetValue("incadult").asBoolean();
if (!(inc_pg || inc_mature || inc_adult))
std::string start_url = "";
// Note: we use the web panel in OpenSim as well as Second Life -- MC
if (gHippoGridManager->getConnectedGrid()->getSearchUrl().empty() &&
!gHippoGridManager->getConnectedGrid()->isSecondLife())
{
// if nothing's checked, just go for pg; we don't notify in
// this case because it's a default page.
inc_pg = true;
// OS-based but doesn't have its own web search url -- MC
start_url = gSavedSettings.getString("SearchURLDefaultOpenSim");
}
start_url += getSearchURLSuffix(inc_pg, inc_mature, inc_adult);
else
{
if (gHippoGridManager->getConnectedGrid()->isSecondLife())
{
if (mBrowserName == "showcase_browser")
{
// note that the showcase URL in floater_directory.xml is no longer used
start_url = gSavedSettings.getString("ShowcaseURLDefault");
}
else
{
start_url = gSavedSettings.getString("SearchURLDefault");
}
}
else
{
// OS-based but has its own web search url -- MC
start_url = gHippoGridManager->getConnectedGrid()->getSearchUrl();
}
llinfos << "default url: " << start_url << llendl;
BOOL inc_pg = childGetValue("incpg").asBoolean();
BOOL inc_mature = childGetValue("incmature").asBoolean();
BOOL inc_adult = childGetValue("incadult").asBoolean();
if (!(inc_pg || inc_mature || inc_adult))
{
// if nothing's checked, just go for pg; we don't notify in
// this case because it's a default page.
inc_pg = true;
}
start_url += getSearchURLSuffix(inc_pg, inc_mature, inc_adult, true);
}
llinfos << "default web search url: " << start_url << llendl;
if (mWebBrowser)
{
@@ -265,10 +307,14 @@ void LLPanelDirFind::navigateToDefaultPage()
}
// static
std::string LLPanelDirFind::buildSearchURL(const std::string& search_text, const std::string& collection,
bool inc_pg, bool inc_mature, bool inc_adult)
bool inc_pg, bool inc_mature, bool inc_adult, bool is_web)
{
std::string url = gSavedSettings.getString("SearchURLDefault");
if (!search_text.empty())
std::string url;
if (search_text.empty())
{
url = gHippoGridManager->getConnectedGrid()->getSearchUrl(HippoGridInfo::SEARCH_ALL_EMPTY, is_web);
}
else
{
// Replace spaces with "+" for use by Google search appliance
// Yes, this actually works for double-spaces
@@ -291,7 +337,7 @@ std::string LLPanelDirFind::buildSearchURL(const std::string& search_text, const
"-._~$+!*'()";
std::string query = LLURI::escape(search_text_with_plus, allowed);
url = gSavedSettings.getString("SearchURLQuery");
url = gHippoGridManager->getConnectedGrid()->getSearchUrl(HippoGridInfo::SEARCH_ALL_QUERY, is_web);
std::string substring = "[QUERY]";
std::string::size_type where = url.find(substring);
if (where != std::string::npos)
@@ -309,66 +355,74 @@ std::string LLPanelDirFind::buildSearchURL(const std::string& search_text, const
}
}
url += getSearchURLSuffix(inc_pg, inc_mature, inc_adult);
llinfos << "search url " << url << llendl;
url += getSearchURLSuffix(inc_pg, inc_mature, inc_adult, is_web);
llinfos << "web search url " << url << llendl;
return url;
}
// static
std::string LLPanelDirFind::getSearchURLSuffix(bool inc_pg, bool inc_mature, bool inc_adult)
std::string LLPanelDirFind::getSearchURLSuffix(bool inc_pg, bool inc_mature, bool inc_adult, bool is_web)
{
std::string url = gSavedSettings.getString("SearchURLSuffix2");
std::string url = gHippoGridManager->getConnectedGrid()->getSearchUrl(HippoGridInfo::SEARCH_ALL_TEMPLATE, is_web);
// if the mature checkbox is unchecked, modify query to remove
// terms with given phrase from the result set
// This builds a value from 1-7 by or-ing together the flags, and then converts
// it to a string.
std::string substring="[MATURITY]";
S32 maturityFlag =
(inc_pg ? SEARCH_PG : SEARCH_NONE) |
(inc_mature ? SEARCH_MATURE : SEARCH_NONE) |
(inc_adult ? SEARCH_ADULT : SEARCH_NONE);
url.replace(url.find(substring), substring.length(), boost::lexical_cast<std::string>(maturityFlag));
// Include region and x/y position, not for the GSA, but
// just to get logs on the web server for search_proxy.php
// showing where people were standing when they searched.
std::string region_name;
LLViewerRegion* region = gAgent.getRegion();
if (region)
if (!url.empty())
{
region_name = region->getName();
// Note: opensim's default template (SearchURLSuffixOpenSim) is currently empty -- MC
if (gHippoGridManager->getConnectedGrid()->isSecondLife() ||
!gHippoGridManager->getConnectedGrid()->getSearchUrl().empty())
{
// if the mature checkbox is unchecked, modify query to remove
// terms with given phrase from the result set
// This builds a value from 1-7 by or-ing together the flags, and then converts
// it to a string.
std::string substring="[MATURITY]";
S32 maturityFlag =
(inc_pg ? SEARCH_PG : SEARCH_NONE) |
(inc_mature ? SEARCH_MATURE : SEARCH_NONE) |
(inc_adult ? SEARCH_ADULT : SEARCH_NONE);
url.replace(url.find(substring), substring.length(), boost::lexical_cast<std::string>(maturityFlag));
// Include region and x/y position, not for the GSA, but
// just to get logs on the web server for search_proxy.php
// showing where people were standing when they searched.
std::string region_name;
LLViewerRegion* region = gAgent.getRegion();
if (region)
{
region_name = region->getName();
}
// take care of spaces in names
region_name = LLURI::escape(region_name);
substring = "[REGION]";
url.replace(url.find(substring), substring.length(), region_name);
LLVector3 pos_region = gAgent.getPositionAgent();
std::string x = llformat("%.0f", pos_region.mV[VX]);
substring = "[X]";
url.replace(url.find(substring), substring.length(), x);
std::string y = llformat("%.0f", pos_region.mV[VY]);
substring = "[Y]";
url.replace(url.find(substring), substring.length(), y);
std::string z = llformat("%.0f", pos_region.mV[VZ]);
substring = "[Z]";
url.replace(url.find(substring), substring.length(), z);
LLUUID session_id = gAgent.getSessionID();
std::string session_string = session_id.getString();
substring = "[SESSION]";
url.replace(url.find(substring), substring.length(), session_string);
// set the currently selected language by asking the pref setting
std::string language_string = LLUI::getLanguage();
std::string language_tag = "[LANG]";
url.replace( url.find( language_tag ), language_tag.length(), language_string );
// and set the flag for the teen grid
std::string teen_string = gAgent.isTeen() ? "y" : "n";
std::string teen_tag = "[TEEN]";
url.replace( url.find( teen_tag ), teen_tag.length(), teen_string );
}
}
// take care of spaces in names
region_name = LLURI::escape(region_name);
substring = "[REGION]";
url.replace(url.find(substring), substring.length(), region_name);
LLVector3 pos_region = gAgent.getPositionAgent();
std::string x = llformat("%.0f", pos_region.mV[VX]);
substring = "[X]";
url.replace(url.find(substring), substring.length(), x);
std::string y = llformat("%.0f", pos_region.mV[VY]);
substring = "[Y]";
url.replace(url.find(substring), substring.length(), y);
std::string z = llformat("%.0f", pos_region.mV[VZ]);
substring = "[Z]";
url.replace(url.find(substring), substring.length(), z);
LLUUID session_id = gAgent.getSessionID();
std::string session_string = session_id.getString();
substring = "[SESSION]";
url.replace(url.find(substring), substring.length(), session_string);
// set the currently selected language by asking the pref setting
std::string language_string = LLUI::getLanguage();
std::string language_tag = "[LANG]";
url.replace( url.find( language_tag ), language_tag.length(), language_string );
// and set the flag for the teen grid
std::string teen_string = gAgent.isTeen() ? "y" : "n";
std::string teen_tag = "[TEEN]";
url.replace( url.find( teen_tag ), teen_tag.length(), teen_string );
return url;
}

View File

@@ -61,8 +61,8 @@ public:
virtual void navigateToDefaultPage();
void focus();
static std::string buildSearchURL(const std::string& search_text, const std::string& collection, bool inc_pg, bool inc_mature, bool inc_adult);
static std::string getSearchURLSuffix(bool inc_pg, bool inc_mature, bool inc_adult);
static std::string buildSearchURL(const std::string& search_text, const std::string& collection, bool inc_pg, bool inc_mature, bool inc_adult, bool is_web);
static std::string getSearchURLSuffix(bool inc_pg, bool inc_mature, bool inc_adult, bool is_web);
private:
static void onClickBack( void* data );

View File

@@ -57,7 +57,7 @@ void LLPanelDirGroups::search(const std::string& search_text)
}
std::string selected_collection = "Groups";
std::string url = buildSearchURL(search_text, selected_collection, inc_pg, inc_mature, inc_adult);
std::string url = buildSearchURL(search_text, selected_collection, inc_pg, inc_mature, inc_adult, true);
if (mWebBrowser)
{
mWebBrowser->navigateTo(url);

View File

@@ -52,6 +52,9 @@
#include "llviewercontrol.h"
#include "llviewermessage.h"
#include "llnotify.h"
#include "hippogridmanager.h"
//-----------------------------------------------------------------------------
// Constants
//-----------------------------------------------------------------------------
@@ -99,6 +102,10 @@ BOOL LLPanelDirLand::postBuild()
childSetAction("Search", onClickSearchCore, this);
setDefaultBtn("Search");
childSetTextArg("land", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
childSetTextArg("pricecheck_symbol", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
childSetLabelArg("pricecheck", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
mCurrentSortColumn = "per_meter";
LLScrollListCtrl* results = getChild<LLScrollListCtrl>("results");
@@ -106,6 +113,16 @@ BOOL LLPanelDirLand::postBuild()
{
results->setSortChangedCallback(onClickSort);
results->sortByColumn(mCurrentSortColumn,mCurrentSortAscending);
LLStringUtil::format_map_t args;
args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
int n = results->getNumColumns();
for (int i=0; i<n; i++) {
LLScrollListColumn *col = results->getColumn(i);
std::string label = col->mLabel;
LLStringUtil::format(label, args);
results->setColumnLabel(col->mName, label);
}
}
return TRUE;

View File

@@ -57,6 +57,8 @@
#include "llviewercontrol.h"
#include "llviewerwindow.h"
#include "hippogridmanager.h"
// consts
const S32 MATURE_CONTENT = 1;
const S32 NON_MATURE_CONTENT = 2;
@@ -187,6 +189,7 @@ BOOL LLPanelGroupGeneral::postBuild()
mCtrlEnrollmentFee = getChild<LLCheckBoxCtrl>("check_enrollment_fee", recurse);
if (mCtrlEnrollmentFee)
{
mCtrlEnrollmentFee->setLabelArg("[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
mCtrlEnrollmentFee->setCommitCallback(onCommitEnrollment);
mCtrlEnrollmentFee->setCallbackUserData(this);
}
@@ -237,6 +240,8 @@ BOOL LLPanelGroupGeneral::postBuild()
mComboActiveTitle->resetDirty();
}
LLStringUtil::format_map_t args;
args["[GROUPCREATEFEE]"] = gHippoGridManager->getConnectedGrid()->getGroupCreationFee();
mIncompleteMemberDataStr = getString("incomplete_member_data_str");
mConfirmGroupCreateStr = getString("confirm_group_create_str");
@@ -257,9 +262,6 @@ BOOL LLPanelGroupGeneral::postBuild()
mGroupName->setVisible(FALSE);
}
return LLPanelGroupTab::postBuild();
}
@@ -356,6 +358,7 @@ void LLPanelGroupGeneral::onClickJoin(void *userdata)
S32 cost = gdatap->mMembershipFee;
LLSD args;
args["COST"] = llformat("%d", cost);
args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
LLSD payload;
payload["group_id"] = self->mGroupID;
@@ -735,7 +738,9 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
if ( visible )
{
fee_buff = llformat( "Join (L$%d)", gdatap->mMembershipFee);
fee_buff = llformat( "Join (%s%d)",
gHippoGridManager->getConnectedGrid()->getCurrencySymbol().c_str(),
gdatap->mMembershipFee);
mBtnJoinGroup->setLabelSelected(fee_buff);
mBtnJoinGroup->setLabelUnselected(fee_buff);
}

View File

@@ -55,6 +55,8 @@
#include "llfloaterworldmap.h"
#include "llviewermessage.h"
#include "hippogridmanager.h"
////////////////////////////////////////////////////////////////////////////
class LLGroupMoneyTabEventHandler
@@ -527,6 +529,9 @@ void LLPanelGroupLandMoney::activate()
tabp->selectFirstTab();
mImplementationp->mBeenActivated = true;
}
setLabelArg("[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
childSetTextArg("group_money_heading", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
//fill in the max contribution
@@ -779,7 +784,9 @@ void LLPanelGroupLandMoney::processPlacesReply(LLMessageSystem* msg, void**)
LLPanelGroupLandMoney* selfp = sGroupIDs.getIfThere(group_id);
if(!selfp)
{
llinfos << "Group Panel Land L$ " << group_id << " no longer in existence."
llinfos << "Group Panel Land "
<< gHippoGridManager->getConnectedGrid()->getCurrencySymbol()
<< ' ' << group_id << " no longer in existence."
<< llendl;
return;
}
@@ -1116,7 +1123,9 @@ void LLPanelGroupLandMoney::processGroupAccountDetailsReply(LLMessageSystem* msg
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
if (gAgent.getID() != agent_id)
{
llwarns << "Got group L$ history reply for another agent!" << llendl;
llwarns << "Got group "
<< gHippoGridManager->getConnectedGrid()->getCurrencySymbol()
<< " history reply for another agent!" << llendl;
return;
}
@@ -1287,7 +1296,9 @@ void LLPanelGroupLandMoney::processGroupAccountTransactionsReply(LLMessageSystem
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
if (gAgent.getID() != agent_id)
{
llwarns << "Got group L$ history reply for another agent!" << llendl;
llwarns << "Got group "
<< gHippoGridManager->getConnectedGrid()->getCurrencySymbol()
<< " history reply for another agent!" << llendl;
return;
}
@@ -1428,7 +1439,9 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
text.append("The next stipend day is ");
text.append(next_stipend_date);
text.append("\n\n");
text.append(llformat("%-24sL$%6d\n", "Balance", balance ));
text.append(llformat("%-24s%s%6d\n", "Balance",
gHippoGridManager->getConnectedGrid()->getCurrencySymbol().c_str(),
balance));
text.append(1, '\n');
}
@@ -1458,7 +1471,9 @@ void LLPanelGroupLandMoney::processGroupAccountSummaryReply(LLMessageSystem* msg
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
if (gAgent.getID() != agent_id)
{
llwarns << "Got group L$ history reply for another agent!" << llendl;
llwarns << "Got group "
<< gHippoGridManager->getConnectedGrid()->getCurrencySymbol()
<< " history reply for another agent!" << llendl;
return;
}
@@ -1470,7 +1485,9 @@ void LLPanelGroupLandMoney::processGroupAccountSummaryReply(LLMessageSystem* msg
self = LLGroupMoneyTabEventHandler::sInstanceIDs.getIfThere(request_id);
if (!self)
{
llwarns << "GroupAccountSummary recieved for non-existent group L$ planning tab." << llendl;
llwarns << "GroupAccountSummary recieved for non-existent group "
<< gHippoGridManager->getConnectedGrid()->getCurrencySymbol()
<< " planning tab." << llendl;
return;
}

View File

@@ -85,6 +85,8 @@
#include "rlvhandler.h"
// [/RLVa:KB]
#include "hippogridmanager.h"
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
///----------------------------------------------------------------------------
@@ -237,6 +239,7 @@ void LLTaskInvFVBridge::buyItem()
{
LLSD args;
args["PRICE"] = llformat("%d",sale_info.getSalePrice());
args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
args["OWNER"] = owner_name;
if (sale_info.getSaleType() != LLSaleInfo::FS_CONTENTS)
{
@@ -730,7 +733,7 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
else
{
std::ostringstream info;
info << "Buy for L$" << price;
info << "Buy for " << gHippoGridManager->getConnectedGrid()->getCurrencySymbol() << price;
label.assign(info.str());
}
@@ -1120,7 +1123,7 @@ void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
else
{
std::ostringstream info;
info << "Buy for L$" << price;
info << "Buy for " << gHippoGridManager->getConnectedGrid()->getCurrencySymbol() << price;
label.assign(info.str());
}

View File

@@ -49,6 +49,8 @@
#include "lluictrlfactory.h"
#include "hippogridmanager.h"
// [RLVa:KB]
#include "rlvhandler.h"
// [/RLVa:KB]
@@ -217,6 +219,7 @@ void LLPanelLandInfo::refresh()
&dwell);
if(is_public || (is_for_sale && LLViewerParcelMgr::getInstance()->getParcelSelection()->getWholeParcelSelected()))
{
childSetTextArg("label_area_price","[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
childSetTextArg("label_area_price","[PRICE]", llformat("%d",claim_price));
childSetTextArg("label_area_price","[AREA]", llformat("%d",area));
childSetVisible("label_area_price",true);

View File

@@ -65,7 +65,7 @@
#include "lluictrlfactory.h"
#include "roles_constants.h"
#include "hippogridmanager.h"
@@ -145,6 +145,10 @@ LLPanelPermissions::~LLPanelPermissions()
void LLPanelPermissions::refresh()
{
LLStringUtil::format_map_t argsCurrency;
argsCurrency["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
LLButton* BtnDeedToGroup = getChild<LLButton>("button deed");
if(BtnDeedToGroup)
{
@@ -246,7 +250,7 @@ void LLPanelPermissions::refresh()
}
childSetEnabled("Cost",false);
childSetText("Cost",getString("Cost Default"));
childSetText("Cost", getString("Cost Default", argsCurrency));
childSetText("Edit Cost",LLStringUtil::null);
childSetEnabled("Edit Cost",false);
@@ -464,11 +468,11 @@ void LLPanelPermissions::refresh()
// If there are multiple items for sale then set text to PRICE PER UNIT.
if (num_for_sale > 1)
{
childSetText("Cost",getString("Cost Per Unit"));
childSetText("Cost",getString("Cost Per Unit", argsCurrency));
}
else
{
childSetText("Cost",getString("Cost Default"));
childSetText("Cost",getString("Cost Default", argsCurrency));
}
LLLineEditor *editPrice = getChild<LLLineEditor>("Edit Cost");
@@ -509,15 +513,15 @@ void LLPanelPermissions::refresh()
// If multiple items are for sale, set text to TOTAL PRICE.
if (num_for_sale > 1)
childSetText("Cost",getString("Cost Total"));
childSetText("Cost", getString("Cost Total", argsCurrency));
else
childSetText("Cost",getString("Cost Default"));
childSetText("Cost", getString("Cost Default", argsCurrency));
}
// This is a public object.
else
{
childSetEnabled("Cost",false);
childSetText("Cost",getString("Cost Default"));
childSetText("Cost", getString("Cost Default", argsCurrency));
childSetText("Edit Cost",LLStringUtil::null);
childSetEnabled("Edit Cost",false);
@@ -1091,6 +1095,9 @@ void LLPanelPermissions::setAllSaleInfo()
{
llinfos << "LLPanelPermissions::setAllSaleInfo()" << llendl;
LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_NOT;
LLStringUtil::format_map_t argsCurrency;
argsCurrency["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
LLCheckBoxCtrl *checkPurchase = getChild<LLCheckBoxCtrl>("checkbox for sale");
@@ -1125,7 +1132,8 @@ void LLPanelPermissions::setAllSaleInfo()
{
// Don't extract the price if it's labeled as MIXED or is empty.
const std::string& editPriceString = editPrice->getText();
if (editPriceString != getString("Cost Mixed") && editPriceString != getString("Sale Mixed") &&
if (editPriceString != getString("Cost Mixed", argsCurrency) &&
editPriceString != getString("Sale Mixed", argsCurrency) &&
!editPriceString.empty())
{
price = atoi(editPriceString.c_str());

View File

@@ -58,6 +58,8 @@
#include "llweb.h"
#include "llsdutil.h"
#include "hippogridmanager.h"
//static
std::list<LLPanelPlace*> LLPanelPlace::sAllPanels;
@@ -311,6 +313,7 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
if (flags & DFQ_FOR_SALE)
{
LLUIString forsale = self->getString("forsale_text");
forsale.setArg("[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
forsale.setArg("[PRICE]", llformat("%d", sale_price));
info_text += forsale;
}

View File

@@ -47,6 +47,8 @@
#include "lldirpicker.h"
#include "hippogridmanager.h"
// [RLVa:KB]
#include "rlvhandler.h"
// [/RLVa:KB]
@@ -186,9 +188,16 @@ void LLPrefsIMImpl::apply()
gDirUtilp->setChatLogsDir(gSavedPerAccountSettings.getString("InstantMessageLogPath"));
gDirUtilp->setPerAccountChatLogsDir(gSavedSettings.getString("FirstName"),
gSavedSettings.getString("LastName") );
LLFile::mkdir(gDirUtilp->getPerAccountChatLogsDir());
if (gHippoGridManager->getCurrentGrid()->isSecondLife())
{
gDirUtilp->setPerAccountChatLogsDir(LLStringUtil::null,
gSavedSettings.getString("FirstName"), gSavedSettings.getString("LastName") );
}
else
{
gDirUtilp->setPerAccountChatLogsDir(gHippoGridManager->getCurrentGridNick(),
gSavedSettings.getString("FirstName"), gSavedSettings.getString("LastName") );
}
bool new_im_via_email = childGetValue("send_im_to_email").asBoolean();
bool new_hide_online = childGetValue("online_visibility").asBoolean();

View File

@@ -1005,8 +1005,6 @@ bool idle_startup()
gDirUtilp->setChatLogsDir(gSavedPerAccountSettings.getString("InstantMessageLogPath"));
}
gDirUtilp->setPerAccountChatLogsDir(firstname, lastname);
LLFile::mkdir(gDirUtilp->getChatLogsDir());
LLFile::mkdir(gDirUtilp->getPerAccountChatLogsDir());

View File

@@ -86,6 +86,8 @@
// system includes
#include <iomanip>
#include "hippogridmanager.h"
// [RLVa:KB]
#include "rlvhandler.h"
// [/RLVa:KB]
@@ -178,6 +180,11 @@ mSquareMetersCommitted(0)
childSetActionTextbox("ParcelNameText", onClickParcelInfo );
childSetActionTextbox("BalanceText", onClickBalance );
// TODO: Disable buying currency when connected to non-SL grids
// that don't support currency yet -- MC
LLButton* buybtn = getChild<LLButton>("buycurrency");
buybtn->setLabelArg("[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
// Adding Net Stat Graph
S32 x = getRect().getWidth() - 2;
S32 y = 0;
@@ -663,10 +670,8 @@ void LLStatusBar::creditBalance(S32 credit)
void LLStatusBar::setBalance(S32 balance)
{
std::string money_str = LLResMgr::getInstance()->getMonetaryString( balance );
std::string balance_str = "L$";
balance_str += money_str;
mTextBalance->setText( balance_str );
mTextBalance->setText(gHippoGridManager->getConnectedGrid()->getCurrencySymbol().c_str() +
LLResMgr::getInstance()->getMonetaryString(balance));
if (mBalance && (fabs((F32)(mBalance - balance)) > gSavedSettings.getF32("UISndMoneyChangeThreshold")))
{

View File

@@ -253,6 +253,8 @@
#include "llfloaterdisplayname.h"
#include "llavatarnamecache.h"
#include "hippogridmanager.h"
using namespace LLVOAvatarDefines;
void init_client_menu(LLMenuGL* menu);
void init_server_menu(LLMenuGL* menu);
@@ -740,10 +742,16 @@ void init_menus()
// Assume L$10 for now, the server will tell us the real cost at login
const std::string upload_cost("10");
gMenuHolder->childSetLabelArg("Upload Image", "[COST]", upload_cost);
gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", upload_cost);
gMenuHolder->childSetLabelArg("Upload Animation", "[COST]", upload_cost);
gMenuHolder->childSetLabelArg("Bulk Upload", "[COST]", upload_cost);
std::string fee = gHippoGridManager->getConnectedGrid()->getCurrencySymbol() + "10";
gMenuHolder->childSetLabelArg("Upload Image", "[UPLOADFEE]", fee);
gMenuHolder->childSetLabelArg("Upload Sound", "[UPLOADFEE]", fee);
gMenuHolder->childSetLabelArg("Upload Animation", "[UPLOADFEE]", fee);
gMenuHolder->childSetLabelArg("Bulk Upload", "[UPLOADFEE]", fee);
gMenuHolder->childSetLabelArg("ImportUpload", "[UPLOADFEE]", fee);
gMenuHolder->childSetLabelArg("Buy and Sell L$...", "[CURRENCY]",
gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
gMenuHolder->childSetLabelArg("Reload Balance", "[CURRENCY]",
gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
gAFKMenu = gMenuBarView->getChild<LLMenuItemCallGL>("Set Away", TRUE);
gBusyMenu = gMenuBarView->getChild<LLMenuItemCallGL>("Set Busy", TRUE);

View File

@@ -695,6 +695,7 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
delete_context_data = FALSE;
LLSD args;
args["COST"] = llformat("%d", fee);
args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
// Set the fee for next time to 0, so that we don't keep
// asking about a fee.
LLSD next_payload = notification["payload"];
@@ -5448,10 +5449,14 @@ void process_economy_data(LLMessageSystem *msg, void** /*user_data*/)
LLFloaterImagePreview::setUploadAmount(upload_cost);
LLFloaterAnimPreview::setUploadAmount(upload_cost);
gMenuHolder->childSetLabelArg("Upload Image", "[COST]", llformat("%d", upload_cost));
gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", llformat("%d", upload_cost));
gMenuHolder->childSetLabelArg("Upload Animation", "[COST]", llformat("%d", upload_cost));
gMenuHolder->childSetLabelArg("Bulk Upload", "[COST]", llformat("%d", upload_cost));
std::string fee = gHippoGridManager->getConnectedGrid()->getUploadFee();
gMenuHolder->childSetLabelArg("Upload Image", "[UPLOADFEE]", fee);
gMenuHolder->childSetLabelArg("Upload Sound", "[UPLOADFEE]", fee);
gMenuHolder->childSetLabelArg("Upload Animation", "[UPLOADFEE]", fee);
gMenuHolder->childSetLabelArg("Bulk Upload", "[UPLOADFEE]", fee);
gMenuHolder->childSetLabelArg("ImportUpload", "[UPLOADFEE]", fee);
gMenuHolder->childSetLabelArg("Buy and Sell L$...", "[CURRENCY]",
gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
}
void notify_cautioned_script_question(const LLSD& notification, const LLSD& response, S32 orig_questions, BOOL granted)
@@ -5525,7 +5530,9 @@ void notify_cautioned_script_question(const LLSD& notification, const LLSD& resp
perms.append(", ");
}
perms.append(LLFloaterChat::getInstance()->getString(SCRIPT_QUESTIONS[i]));
LLStringUtil::format_map_t args;
args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
perms.append(LLFloaterChat::getInstance()->getString(SCRIPT_QUESTIONS[i], args));
}
}
@@ -5686,8 +5693,11 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
{
if (questions & LSCRIPTRunTimePermissionBits[i])
{
LLStringUtil::format_map_t args;
args["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
count++;
script_question += " " + LLFloaterChat::getInstance()->getString(SCRIPT_QUESTIONS[i]) + "\n";
script_question += " " + LLFloaterChat::getInstance()->getString(SCRIPT_QUESTIONS[i], args) + "\n";
// check whether permission question should cause special caution dialog
caution |= (SCRIPT_QUESTION_IS_CAUTION[i]);

View File

@@ -42,6 +42,8 @@
#include "llviewerimage.h"
#include "llviewerimagelist.h"
#include "hippogridmanager.h"
// Timers to temporise database requests
const F32 AGENTS_UPDATE_TIMER = 60.0; // Seconds between 2 agent requests for a region
const F32 REQUEST_ITEMS_TIMER = 10.f * 60.f; // Seconds before we consider re-requesting item data for the grid
@@ -525,7 +527,10 @@ bool LLWorldMap::insertItem(U32 x_world, U32 y_world, std::string& name, LLUUID&
case MAP_ITEM_LAND_FOR_SALE: // land for sale
case MAP_ITEM_LAND_FOR_SALE_ADULT: // adult land for sale
{
std::string tooltip = llformat("%d sq. m. L$%d", extra, extra2);
std::string tooltip = llformat("%d sq. m. %s%d",
extra,
gHippoGridManager->getConnectedGrid()->getCurrencySymbol().c_str(),
extra2);
new_item.setTooltip(tooltip);
if (type == MAP_ITEM_LAND_FOR_SALE)
{

View File

@@ -42,6 +42,8 @@
#include "llappviewer.h"
#include "hippogridmanager.h"
LLXMLRPCValue LLXMLRPCValue::operator[](const char* id) const
{
return LLXMLRPCValue(XMLRPC_VectorGetValueWithID(mV, id));
@@ -422,13 +424,15 @@ void LLXMLRPCTransaction::Impl::setStatus(Status status,
default:
// Usually this means that there's a problem with the login server,
// not with the client. Direct user to status page.
// NOTE: these should really be gHippoGridManager->getCurrentGrid()->getGridName()
// but apparently that's broken as of 1.3 b2 -- MC
mStatusMessage =
"Despite our best efforts, something unexpected has gone wrong. \n"
" \n"
"Please check secondlife.com/status \n"
"Please check " + gHippoGridManager->getCurrentGrid()->getGridNick() + "'s status \n"
"to see if there is a known problem with the service.";
mStatusURI = "http://secondlife.com/status/";
//mStatusURI = "http://secondlife.com/status/";
}
}
}
@@ -436,14 +440,14 @@ void LLXMLRPCTransaction::Impl::setStatus(Status status,
void LLXMLRPCTransaction::Impl::setCurlStatus(CURLcode code)
{
std::string message;
std::string uri = "http://secondlife.com/community/support.php";
std::string uri = gHippoGridManager->getCurrentGrid()->getSupportUrl();
switch (code)
{
case CURLE_COULDNT_RESOLVE_HOST:
message =
"DNS could not resolve the host name.\n"
"Please verify that you can connect to the www.secondlife.com\n"
"Please verify that you can connect to " + gHippoGridManager->getCurrentGrid()->getGridNick() + "'s\n"
"web site. If you can, but continue to receive this error,\n"
"please go to the support section and report this problem.";
break;
@@ -452,7 +456,7 @@ void LLXMLRPCTransaction::Impl::setCurlStatus(CURLcode code)
message =
"The login server couldn't verify itself via SSL.\n"
"If you continue to receive this error, please go\n"
"to the Support section of the SecondLife.com web site\n"
"to the Support section of " + gHippoGridManager->getCurrentGrid()->getGridNick() + "'s web site\n"
"and report the problem.";
break;
@@ -464,7 +468,7 @@ void LLXMLRPCTransaction::Impl::setCurlStatus(CURLcode code)
"are set correctly.\n"
"\n"
"If you continue to receive this error, please go\n"
"to the Support section of the SecondLife.com web site\n"
"to the Support section of " + gHippoGridManager->getCurrentGrid()->getGridNick() + "'s web site\n"
"and report the problem.";
break;

View File

@@ -121,7 +121,7 @@
bottom="-220" drop_shadow_visible="true" enabled="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="96"
mouse_opaque="true" name="For Sale: Price L$[PRICE]." v_pad="0" width="226">
Price: L$[PRICE] (L$[PRICE_PER_SQM]/sq.m.).
Price: [CURRENCY][PRICE] ([CURRENCY][PRICE_PER_SQM]/sq.m.).
</text>
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-240" drop_shadow_visible="true" enabled="false" follows="left|top"
@@ -627,7 +627,7 @@ Go to World menu > About Land or select another parcel to show its details.
width="119" />
<check_box bottom="-140" enabled="true" follows="left|top" font="SansSerifSmall"
height="16" initial_value="false"
label="Show Place in Search (L$30/week) under" left="14"
label="Show Place in Search ([DIRECTORYFEE]) under" left="14"
mouse_opaque="true" name="ShowDirectoryCheck" radio_style="false"
tool_tip="Let people see this parcel in search results" width="268" />
<string name="search_enabled_tooltip">
@@ -1484,7 +1484,7 @@ Select the thumbnail to choose a different texture.
</combo_item>
</combo_box>
<spinner bottom_delta="-20" enabled="false" follows="left|top" height="16" increment="1"
initial_val="10" label="Price in L$:" label_width="120" left="28"
initial_val="10" label="Price in [CURRENCY]:" label_width="120" left="28"
max_val="500" min_val="1" mouse_opaque="true" name="PriceSpin" width="180" />
<spinner bottom_delta="-20" enabled="false" follows="left|top" height="16"
increment="0.25" initial_val="1" label="Hours of access:" label_width="120"

View File

@@ -187,7 +187,7 @@ We recommend BVH files exported from Poser 4.
</text>
<button bottom="10" follows="bottom|right" height="20" label="Cancel" name="cancel_btn"
right="290" width="123" />
<button bottom="10" follows="bottom|left" height="20" label="Upload (L$[AMOUNT])"
<button bottom="10" follows="bottom|left" height="20" label="Upload ([UPLOADFEE])"
left_delta="-129" name="ok_btn" width="123" />
<string name="failed_to_initialize">
Failed to initialize motion

View File

@@ -19,7 +19,7 @@
bottom_delta="-28" drop_shadow_visible="true" follows="left|right|bottom"
font="SansSerif" h_pad="0" halign="left" height="24" left="15"
mouse_opaque="true" name="buy_text" v_pad="0" width="281">
Buy for L$[AMOUNT] from [NAME]?
Buy for [CURRENCY][AMOUNT] from [NAME]?
</text>
<button bottom="-244" follows="right|bottom" font="SansSerif" halign="center"
height="20" label="Cancel" label_selected="Cancel" left="216"

View File

@@ -30,15 +30,15 @@
</text>
<text bottom_delta="0" follows="top|left" height="16" left="72"
name="buy_action_unknown" right="-20" >
Buy L$ on the LindeX currency exchange
Buy [CURRENCY] on the LindeX currency exchange
</text>
<text bottom_delta="0" follows="top|left" height="16" left="72" name="buy_action"
right="-20" >
[NAME] L$ [PRICE]
[NAME] [CURRENCY] [PRICE]
</text>
<text bottom_delta="-20" follows="top|left" height="16" left="72"
name="currency_action" width="40">
Buy L$
Buy [CURRENCY]
</text>
<line_editor bottom_delta="0" follows="top|right" height="16" left_delta="45"
name="currency_amt" width="80">
@@ -58,7 +58,7 @@
</text>
<text bottom_delta="0" follows="top|left" halign="right" height="16" left="80"
name="balance_amount" width="240">
L$ [AMT]
[CURRENCY] [AMT]
</text>
<text bottom_delta="-20" follows="top|left" height="16" left="80" name="buying_label"
width="240">
@@ -66,7 +66,7 @@
</text>
<text bottom_delta="0" follows="top|left" halign="right" height="16" left="80"
name="buying_amount" width="240">
L$ [AMT]
[CURRENCY] [AMT]
</text>
<text bottom_delta="-20" follows="top|left" height="16" left="80" name="total_label"
width="240">
@@ -74,7 +74,7 @@
</text>
<text bottom_delta="0" follows="top|left" halign="right" height="16" left="80"
name="total_amount" width="240">
L$ [AMT]
[CURRENCY] [AMT]
</text>
<text bottom_delta="-48" follows="top|left" height="32" left="72"
name="purchase_warning_repurchase" right="-20" >
@@ -91,6 +91,6 @@ Increase the amount to buy.
<button bottom_delta="0" follows="bottom|left" height="20" label="Purchase"
left_delta="-96" name="buy_btn" width="90" />
<string name="buy_currency">
Buy L$ [LINDENS] for approx. US$ [USD]
Buy [CURRENCY] [LINDENS] for approx. US$ [USD]
</string>
</floater>

View File

@@ -159,7 +159,7 @@ This parcel is 512 sq.m. of land.
</text>
<text bottom_delta="-25" follows="top|left" height="16" left="72"
name="currency_action" width="90">
Buy additional L$
Buy additional [CURRENCY]
</text>
<pad height="0" width="8" />
<line_editor bottom_delta="5" follows="top|right" height="16" left="170" name="currency_amt"
@@ -258,10 +258,10 @@ Try selecting a smaller area.
You hold [BUYER] sq.m. of land.
</string>
<string name="pay_to_for_land">
Pay L$ [AMOUNT] to [SELLER] for this land
Pay [CURRENCY] [AMOUNT] to [SELLER] for this land
</string>
<string name="buy_for_US">
Buy L$ [AMOUNT] for approx. US$ [AMOUNT2],
Buy [CURRENCY] [AMOUNT] for approx. US$ [AMOUNT2],
</string>
<string name="parcel_meters">
This parcel is [AMOUNT] sq.m.
@@ -283,29 +283,29 @@ supports [AMOUNT2] objects
objects not included
</string>
<string name="info_price_string">
L$ [PRICE]
(L$ [PRICE_PER_SQM]/sq.m.)
[CURRENCY] [PRICE]
([CURRENCY] [PRICE_PER_SQM]/sq.m.)
[SOLD_WITH_OBJECTS]
</string>
<string name="insufficient_land_credits">
The group [GROUP] will need sufficient contributed land use credits to cover this parcel before the purchase will complete.
</string>
<string name="have_enough_lindens">
You have L$ [AMOUNT], which is enough to buy this land.
You have [CURRENCY] [AMOUNT], which is enough to buy this land.
</string>
<string name="not_enough_lindens">
You have only L$ [AMOUNT], and need L$ [AMOUNT2] more.
You have only [CURRENCY] [AMOUNT], and need [CURRENCY] [AMOUNT2] more.
</string>
<string name="balance_left">
After the purchase, you will have L$ [AMOUNT] left.
After the purchase, you will have [CURRENCY] [AMOUNT] left.
</string>
<string name="balance_needed">
You need to buy at least L$ [AMOUNT] to afford this land.
You need to buy at least [CURRENCY] [AMOUNT] to afford this land.
</string>
<string name="no_parcel_selected">
(no parcel selected)
</string>
<string name="buy_currency">
Buy L$ [LINDENS] for approx. US$ [USD]
Buy [CURRENCY] [LINDENS] for approx. US$ [USD]
</string>
</floater>

View File

@@ -26,7 +26,7 @@
bottom_delta="-28" drop_shadow_visible="true" follows="left|right|bottom"
font="SansSerif" h_pad="0" halign="left" height="24" left="15"
mouse_opaque="true" name="buy_text" v_pad="0" width="281">
Buy for L$[AMOUNT] from [NAME]?
Buy for [CURRENCY] [AMOUNT] from [NAME]?
</text>
<button bottom="-244" follows="right|bottom" font="SansSerif" halign="center"
height="20" label="Cancel" label_selected="Cancel" left="216"

View File

@@ -32,7 +32,7 @@
'[OBJECTNAME]', an object owned by '[OWNERNAME]', located in [REGIONNAME] at [REGIONPOS], has been denied permission to: [PERMISSIONS].
</string>
<string name="ScriptTakeMoney">
Take Linden dollars (L$) from you
Take in-world money ([CURRENCY]) from you
</string>
<string name="ActOnControlInputs">
Act on your control inputs

View File

@@ -348,7 +348,7 @@
None Found.
</string>
<string name="land_help_text">
Land can be bought direct for Linden Dollars (L$) or at auction for either L$ or US$.
Land can be bought direct for in-world money ([CURRENCY]) or at auction for either [CURRENCY] or US$.
To buy direct, visit the land and click on the place name in the title bar.
</string>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
@@ -391,7 +391,7 @@ To buy direct, visit the land and click on the place name in the title bar.
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" follows="left|top"
bottom="-24" font="SansSerifSmall" halign="left" height="16" left="116" mouse_opaque="true"
name="pricecheck_symbol" width="15">
L$
[CURRENCY]
</text>
<check_box bottom_delta="-18" control_name="FindLandArea" follows="left|top"
font="SansSerifSmall" height="16" initial_value="true"
@@ -418,9 +418,9 @@ To buy direct, visit the land and click on the place name in the title bar.
<column label="" name="type" width="-1" />
<column dynamicwidth="true" label="Name" name="name" />
<column label="Type" name="landtype" width="50" />
<column label="L$ Price" name="price" width="65" />
<column label="[CURRENCY] Price" name="price" width="65" />
<column label="Area" name="area" width="50" />
<column label="L$/m²" name="per_meter" width="65" />
<column label="[CURRENCY]/m²" name="per_meter" width="65" />
</scroll_list>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom"

View File

@@ -133,7 +133,7 @@
bottom="-146" drop_shadow_visible="true" follows="left|top"
font="SansSerif" h_pad="0" halign="left" height="16" left_delta="-108"
mouse_opaque="true" name="land cost text" v_pad="0" width="110">
L$ per sq. meter:
[CURRENCY] per sq. meter:
</text>
<button bottom="-170" follows="top|right" font="SansSerifSmall" halign="center"
height="20" label="Refresh" label_selected="Refresh" left="278"

View File

@@ -1,657 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater can_close="true" can_drag_on_left="false" can_minimize="true"
can_resize="false" height="360" min_height="100" min_width="100"
name="groupinfo" title="The Lindens - Group Information" width="458">
<tab_container bottom="-330" height="306" left="0" mouse_opaque="false" name="tab"
tab_position="top" width="458">
<panel bottom="-305" follows="left|top|right|bottom" height="289" label="General"
left="1" mouse_opaque="true" name="gen" width="456">
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif"
h_pad="0" halign="left" height="16" left="12" mouse_opaque="true"
name="title_box" v_pad="0" width="436">
Group Info
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-18" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="txt" v_pad="0" width="436">
Groups are a fun way to collaborate with your friends.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="txt2" v_pad="0" width="436">
Groups let you have titles and insignia and vote.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="txt3" v_pad="0" width="436">
Anyone may create a group. Each person may belong to up to 15 groups.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="txt4" v_pad="0" width="436">
Groups must have at least 3 members to stay active.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="group_create_text" v_pad="0" width="436">
Creating a group costs L$100.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-32" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="16" left="12"
mouse_opaque="true" name="lbl" v_pad="0" width="70">
Name:
</text>
<line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line"
border_thickness="1" bottom="-138" follows="left|top" font="SansSerifSmall"
height="16" left_delta="75" max_length="35" mouse_opaque="true" name="name"
text_readonly_color="1, 1, 1, 1" width="361" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-156" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="16" left="12"
mouse_opaque="true" name="founder_label" v_pad="0" width="70">
Founder:
</text>
<name_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line"
border_thickness="1" bottom="-156" follows="left|top" font="SansSerifSmall"
height="16" left_delta="75" max_length="35" mouse_opaque="true"
name="founder" text_readonly_color="1, 1, 1, 1" width="361" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-174" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="16" left="12"
mouse_opaque="true" name="lbl2" v_pad="0" width="70">
Charter:
</text>
<text_editor bg_readonly_color="0, 0, 0, 0" bottom="-206" embedded_items="false"
follows="left|top" font="SansSerifSmall" height="48" left="87"
max_length="511" mouse_opaque="true" name="charter"
text_readonly_color="1, 1, 1, 1" width="361" word_wrap="true" />
<check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16"
initial_value="true" label="Show In Group List" left="87"
mouse_opaque="true" name="sho" radio_style="false" width="361" />
<check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16"
initial_value="false" label="Show Members In Group List" left="87"
mouse_opaque="true" name="sho_mem" radio_style="false" width="361" />
<check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16"
initial_value="false" label="Publish on the web." left="87"
mouse_opaque="true" name="allow_publish" radio_style="false"
tool_tip="Publish your profile information on the web." width="361" />
<button bottom="-260" follows="left|top" font="SansSerif" halign="center" height="16"
label="?" label_selected="?" left_delta="130" mouse_opaque="true"
name="publish_help_btn" width="20" />
<check_box bottom="-278" follows="left|top" font="SansSerifSmall" height="16"
initial_value="false" label="Mature" left="87" mouse_opaque="true"
name="mature" radio_style="false"
tool_tip="Your profile information is considered mature." width="361" />
</panel>
<panel bottom="-305" follows="left|top|right|bottom" height="289" label="Titles"
left="1" mouse_opaque="true" name="tit" width="456">
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif"
h_pad="0" halign="left" height="16" left="12" mouse_opaque="true"
name="txt" v_pad="0" width="436">
Group Titles
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-18" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="txt2" v_pad="0" width="436">
Groups can have officers and members, both of whom can have special titles.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="txt3" v_pad="0" width="436">
These titles appear before their names in the world, in chat, and in IM.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-32" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="16" left="12"
mouse_opaque="true" name="lbl" v_pad="0" width="70">
Officer Title:
</text>
<line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line"
border_thickness="1" bottom="-90" follows="left|top" font="SansSerifSmall"
height="16" left_delta="75" max_length="20" mouse_opaque="true" name="ohon"
text_readonly_color="1, 1, 1, 1" width="105" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-90" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="16" left_delta="110"
mouse_opaque="true" name="lbl2" v_pad="0" width="70">
Member Title:
</text>
<line_editor bevel_style="in" bg_readonly_color="0, 0, 0, 0" border_style="line"
border_thickness="1" bottom="-90" follows="left|top" font="SansSerifSmall"
height="16" left_delta="75" max_length="20" mouse_opaque="true" name="mhon"
text_readonly_color="1, 1, 1, 1" width="105" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-124" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="lbl3" v_pad="0" width="436">
Drag a texture out of your inventory to set the group&apos;s insignia.
</text>
<texture_picker bottom="-220" follows="left|top" height="80" left="87" mouse_opaque="true"
name="insig" tool_tip="Click to choose a picture" width="64" />
</panel>
<panel bottom="-305" follows="left|top|right|bottom" height="289" label="Members"
left="1" mouse_opaque="true" name="mem" width="456">
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif"
h_pad="0" halign="left" height="16" left="12" mouse_opaque="true"
name="txt" v_pad="0" width="436">
Group Members
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-18" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="txt2" v_pad="0" width="436">
Current Group officers and members.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="txt3" v_pad="0" width="436">
Click on a name to view to the member&apos;s profile.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-18" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="16" left="12"
mouse_opaque="true" name="lbl" v_pad="0" width="70">
Officers:
</text>
<name_list allow_calling_card_drop="false" background_visible="false"
bg_selected_color="0.243137, 0.243137, 0.243137, 1" bottom="-132"
column_padding="0" draw_border="true" fg_disable_color="1, 1, 1, 1"
fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
follows="left|top" height="72" left="87" mouse_opaque="true"
multi_select="false" name="officers" width="361" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-150" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="16" left="12"
mouse_opaque="true" name="members_label" v_pad="0" width="70">
Members:
</text>
<name_list allow_calling_card_drop="false" background_visible="false" bottom="-254"
column_padding="0" draw_border="true" fg_disable_color="1, 1, 1, 1"
fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
follows="left|top" height="120" left="87" mouse_opaque="true"
multi_select="false" name="members" width="361" />
<button bottom_delta="-27" follows="left|bottom" font="SansSerif" halign="center"
height="20" label="Eject Member" label_selected="Eject Member" left="87"
mouse_opaque="true" name="eject_member_btn" width="120" />
</panel>
<panel bottom="-305" follows="left|top|right|bottom" height="289" label="Voting"
left="1" mouse_opaque="true" name="voting" width="456">
<tab_container bottom="-289" height="285" left="30" mouse_opaque="false" name="tab"
tab_position="top" width="400">
<panel bottom="-284" follows="left|top|right|bottom" height="268" label="Election"
left="1" mouse_opaque="true" name="recall" width="398">
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-18" drop_shadow_visible="true" follows="left|top" font="SansSerif"
h_pad="0" halign="left" height="10" left="12" mouse_opaque="false"
name="txt" v_pad="0" width="363">
Group Election
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-24" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="false" name="instructions" v_pad="0" width="350">
Press the Start Election button to start a new election.
The candidates will include all non-officer group members.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-26" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="10" left="12"
mouse_opaque="false" name="lbl" v_pad="0" width="70">
Candidates:
</text>
<name_list allow_calling_card_drop="false" background_visible="false"
bg_selected_color="0.243137, 0.243137, 0.243137, 1" bottom="-150"
column_padding="0" draw_border="true" fg_disable_color="1, 1, 1, 1"
fg_selected_color="1, 1, 1, 1" fg_unselected_color="1, 1, 1, 1"
follows="left|top" height="94" left="87" mouse_opaque="true"
multi_select="false" name="candidates" width="290" />
<button bottom_delta="-116" follows="top" font="SansSerif" halign="center" height="20"
label="Vote" label_selected="Vote" left="87" mouse_opaque="true"
name="btn_vote" width="60" />
<button bottom="-266" follows="left|top" font="SansSerif" halign="center" height="20"
label="Abstain" label_selected="Abstain" left_delta="68"
mouse_opaque="true" name="btn_abstain" width="60" />
<button bottom="-260" follows="top|right" font="SansSerif" halign="center" height="20"
label="Start Election" label_selected="Start Election" left="218"
mouse_opaque="true" name="btn_start_election" width="160" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-172" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="20" left="12"
mouse_opaque="false" name="lbl2" v_pad="0" width="70">
Quorum:
</text>
<spinner bottom="-172" decimal_digits="0" follows="left|top" height="20" increment="1"
initial_val="1" left_delta="75" max_val="111" min_val="1"
mouse_opaque="true" name="quorum"
tool_tip="# of total voting members needed for election results to be binding."
width="40" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-172" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="20" left_delta="45"
mouse_opaque="false" name="quorum_text" v_pad="0" width="300">
out of 111 total group members.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-196" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="20" left="210"
mouse_opaque="false" name="lbl3" v_pad="0" width="65">
Majority:
</text>
<radio_group bottom="-232" follows="left|top" height="60" left="270" mouse_opaque="true"
name="majority" tool_tip="Majority of total votes needed to win."
width="105">
<radio_item bottom="-19" follows="left|top" height="15" left="4" mouse_opaque="true"
name="radio" width="99">
Simple Majority
</radio_item>
<radio_item bottom_delta="-19" follows="left|top" height="15" left="4" mouse_opaque="true"
name="radio2" width="93">
2/3 Majority
</radio_item>
<radio_item bottom_delta="-19" follows="left|top" height="15" left="4" mouse_opaque="true"
name="radio3" width="93">
Unanimous
</radio_item>
</radio_group>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-203" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="20" left="12"
mouse_opaque="false" name="duration_lbl" v_pad="0" width="70">
Duration:
</text>
<spinner bottom="-200" decimal_digits="0" follows="left|top" height="20" increment="1"
initial_val="7" left_delta="75" max_val="30" min_val="1"
mouse_opaque="true" name="duration"
tool_tip="# of days the election will last." width="40" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-203" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="20" left_delta="45"
mouse_opaque="false" name="duration_days" v_pad="0" width="300">
days
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-224" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="20" left="12"
mouse_opaque="false" name="start_lbl" v_pad="0" width="70">
Election Start:
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-224" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="20" left_delta="75"
mouse_opaque="false" name="start_date" v_pad="0" width="200" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-242" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="20" left="12"
mouse_opaque="false" name="end_lbl" v_pad="0" width="70">
Election Ends:
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-242" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="20" left_delta="75"
mouse_opaque="false" name="end_date" v_pad="0" width="200" />
</panel>
<panel bottom="-284" follows="left|top|right|bottom" height="268" label="Proposal"
left="1" mouse_opaque="true" name="panel_group_proposals" width="398">
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-18" drop_shadow_visible="true" follows="left|top" font="SansSerif"
h_pad="0" halign="left" height="10" left="12" mouse_opaque="false"
name="txt" v_pad="0" width="363">
Group Proposals
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-24" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="false" name="instructions" v_pad="0" width="350">
There are no active proposals. Press the Create Proposal button to
create a new proposal.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-26" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="10" left="12"
mouse_opaque="false" name="proposal_lbl" v_pad="0" width="70">
Proposals:
</text>
<scroll_list background_visible="false" bg_selected_color="0.243137, 0.243137, 0.243137, 1"
bottom="-190" column_padding="5" draw_border="true"
fg_disable_color="1, 1, 1, 1" fg_selected_color="0, 0, 0, 1"
fg_unselected_color="1, 1, 1, 1" follows="left|top" height="134" left="87"
mouse_opaque="true" multi_select="false" name="proposals" width="290" />
<text_editor bg_readonly_color="0, 0, 0, 0" bg_writeable_color="1, 1, 1, 1"
bottom_delta="40" embedded_items="false" follows="left|top"
font="SansSerif" height="94" left="87" max_length="255" mouse_opaque="true"
name="proposal_text" text_readonly_color="1, 1, 1, 1" width="290"
word_wrap="false" />
<button bottom_delta="-22" follows="top" font="SansSerif" halign="center" height="20"
label="Yes" label_selected="Yes" left="87" mouse_opaque="true"
name="btn_yes" width="60" />
<button bottom="-172" follows="left|top" font="SansSerif" halign="center" height="20"
label="No" label_selected="No" left_delta="68" mouse_opaque="true"
name="btn_no" width="60" />
<button bottom="-172" follows="left|top" font="SansSerif" halign="center" height="20"
label="Abstain" label_selected="Abstain" left_delta="68"
mouse_opaque="true" name="btn_abstain" width="60" />
<button bottom="-172" follows="left|top" font="SansSerif" halign="center" height="20"
label="View List" label_selected="View List" left_delta="68"
mouse_opaque="true" name="btn_view_list" width="90" />
<button bottom_delta="-44" follows="left|top" font="SansSerif" halign="center"
height="20" label="View Item" label_selected="View Item" left="291"
mouse_opaque="true" name="btn_view_item" width="90" />
<button bottom="-216" follows="left|top" font="SansSerif" halign="center" height="20"
label="Create Proposal" label_selected="Create Proposal" left_delta="-204"
mouse_opaque="true" name="btn_proposal" width="160" />
<button bottom_delta="-50" follows="left|top" font="SansSerif" halign="center"
height="20" label="Submit" label_selected="Submit" left="87"
mouse_opaque="true" name="btn_submit" width="60" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-200" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="20" left="12"
mouse_opaque="false" name="quorum_lbl" v_pad="0" width="70">
Quorum:
</text>
<spinner bottom="-200" decimal_digits="0" follows="left|top" height="20" increment="1"
initial_val="0" left_delta="75" max_val="111" min_val="1"
mouse_opaque="true" name="quorum"
tool_tip="# of total voting members needed for election results to be binding."
width="40" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-200" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="20" left_delta="45"
mouse_opaque="false" name="quorum_text" v_pad="0" width="300">
out of 111 total group members.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-224" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="20" left="210"
mouse_opaque="false" name="majority_lbl" v_pad="0" width="65">
Majority:
</text>
<radio_group bottom="-260" follows="left|top" height="60" left="270" mouse_opaque="true"
name="majority" tool_tip="Majority of total votes needed to win."
width="105">
<radio_item bottom="-19" follows="left|top" height="15" left="4" mouse_opaque="true"
name="radio" width="99">
Simple Majority
</radio_item>
<radio_item bottom_delta="-19" follows="left|top" height="15" left="4" mouse_opaque="true"
name="radio2" width="93">
2/3 Majority
</radio_item>
<radio_item bottom_delta="-19" follows="left|top" height="15" left="4" mouse_opaque="true"
name="radio3" width="93">
Unanimous
</radio_item>
</radio_group>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-227" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="20" left="12"
mouse_opaque="false" name="duration_lbl" v_pad="0" width="70">
Duration:
</text>
<spinner bottom="-224" decimal_digits="0" follows="left|top" height="20" increment="1"
initial_val="7" left_delta="75" max_val="30" min_val="1"
mouse_opaque="true" name="duration"
tool_tip="# of days the election will last." width="40" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-227" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="20" left_delta="45"
mouse_opaque="false" name="duration_text" v_pad="0" width="300">
days
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-248" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="20" left="12"
mouse_opaque="false" name="start_lbl" v_pad="0" width="70">
Voting Start:
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-248" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="20" left_delta="75"
mouse_opaque="false" name="start_date" v_pad="0" width="200" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-266" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="20" left="12"
mouse_opaque="false" name="end_lbl" v_pad="0" width="70">
Voting Ends:
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-266" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="20" left_delta="75"
mouse_opaque="false" name="end_date" v_pad="0" width="200" />
</panel>
<panel bottom="-284" follows="left|top|right|bottom" height="268" label="History"
left="1" mouse_opaque="true" name="History" width="398">
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-18" drop_shadow_visible="true" follows="left|top" font="SansSerif"
h_pad="0" halign="left" height="10" left="12" mouse_opaque="false"
name="txt" v_pad="0" width="363">
Group Voting History
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-24" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="false" name="instructions" v_pad="0" width="350">
You may view past group vote results by selecting the vote and.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-14" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="false" name="instructions2" v_pad="0" width="350">
pressing View Item.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-12" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="10" left="12"
mouse_opaque="false" name="history_list_lbl" v_pad="0" width="70">
Past Votes:
</text>
<scroll_list background_visible="false" bg_selected_color="1, 1, 1, 1" bottom="-230"
column_padding="10" draw_border="true" fg_disable_color="1, 1, 1, 1"
fg_selected_color="0, 0, 0, 1" fg_unselected_color="1, 1, 1, 1"
follows="left|top" height="170" left="87" mouse_opaque="true"
multi_select="false" name="history_list" width="300" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-68" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="10" left="12"
mouse_opaque="false" name="vote_text_lbl" v_pad="0" width="70">
Vote Results:
</text>
<text_editor bg_readonly_color="0, 0, 0, 0" bg_writeable_color="1, 1, 1, 1" bottom="-230"
embedded_items="false" follows="left|top" font="SansSerif" height="170"
left="87" max_length="1024" mouse_opaque="true" name="vote_text"
text_readonly_color="1, 1, 1, 1" width="300" word_wrap="false" />
<button bottom="-260" follows="top" font="SansSerif" halign="center" height="20"
label="View List" label_selected="View List" left="291" mouse_opaque="true"
name="btn_view_list" width="90" />
<button bottom_delta="0" follows="top" font="SansSerif" halign="center" height="20"
label="View Item" label_selected="View Item" left_delta="0"
mouse_opaque="true" name="btn_view_item" width="90" />
</panel>
</tab_container>
</panel>
<panel bottom="-305" follows="left|top|right|bottom" height="289" label="Invite"
left="1" mouse_opaque="true" name="inv" width="456">
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif"
h_pad="0" halign="left" height="16" left="12" mouse_opaque="true"
name="txt" v_pad="0" width="436">
Group Invitations
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-18" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="txt2" v_pad="0" width="436">
Invitations are sent via instant message.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="txt3" v_pad="0" width="436">
Click on the add button to add users to the list.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-32" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="16" left="12"
mouse_opaque="true" name="lbl" v_pad="0" width="70">
Officers:
</text>
<name_list allow_calling_card_drop="true" background_visible="true" bottom="-134"
column_padding="5" draw_border="true" follows="top" height="60" left="87"
mouse_opaque="true" multi_select="false" name="inv officers" width="290" />
<button bottom_delta="-22" follows="top" font="SansSerif" halign="center" height="20"
label="Add Officer..." label_selected="Add Officer..." left="87"
mouse_opaque="true" name="add_officer_btn" width="120" />
<button bottom="-156" follows="top" font="SansSerif" halign="center" height="20"
label="Remove Selected" label_selected="Remove Selected" left_delta="128"
mouse_opaque="true" name="remove_officer_btn" width="120" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-174" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="16" left="12"
mouse_opaque="true" name="lbl2" v_pad="0" width="70">
Members:
</text>
<name_list allow_calling_card_drop="true" background_visible="true" bottom="-218"
column_padding="5" draw_border="true" follows="top" height="60" left="87"
mouse_opaque="true" multi_select="false" name="inv members" width="290" />
<button bottom_delta="-22" follows="top" font="SansSerif" halign="center" height="20"
label="Add Member..." label_selected="Add Member..." left="87"
mouse_opaque="true" name="add_member_btn" width="120" />
<button bottom="-240" follows="top" font="SansSerif" halign="center" height="20"
label="Remove Selected" label_selected="Remove Selected" left_delta="128"
mouse_opaque="true" name="remove_member_btn" width="120" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-258" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="right" height="16" left="12"
mouse_opaque="true" name="lbl3" v_pad="0" width="70">
Signup Fee:
</text>
<spinner bottom="-258" decimal_digits="0" follows="left|top" height="16" increment="1"
initial_val="0" left_delta="75" max_val="1e+007" min_val="0"
mouse_opaque="true" name="fee" width="60" />
<check_box bottom_delta="-24" follows="left|top" font="SansSerifSmall" height="16"
initial_value="false" label="Open enrollment (no invite necessary)"
left="87" mouse_opaque="true" name="open" radio_style="false" width="361" />
</panel>
<panel bottom="-305" follows="left|top|right|bottom" height="289" label="Land"
left="1" mouse_opaque="true" name="land" width="456">
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-24" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="txt" v_pad="0" width="436">
Group Owned Land
</text>
<scroll_list background_visible="true" bottom_delta="-152" column_padding="5"
draw_border="true" follows="top" height="150" left="8" mouse_opaque="true"
multi_select="false" name="parcel list" width="440" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-18" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="lbl" v_pad="0" width="180">
Total Contributed Land:
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-210" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="32" left="192"
mouse_opaque="true" name="total" v_pad="0" width="75" />
<button bottom="-198" follows="top" font="SansSerif" halign="center" height="20"
label="Map..." label_selected="Map..." left="380" mouse_opaque="true"
name="map_btn" width="60" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-216" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="lbl2" v_pad="0" width="180">
Total Land In Use:
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-232" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="32" left="192"
mouse_opaque="true" name="committed" v_pad="0" width="75" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-238" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="lbl3" v_pad="0" width="180">
Land Available:
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-254" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="32" left="192"
mouse_opaque="true" name="avail" v_pad="0" width="75" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-260" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="your_contrib_label" v_pad="0" width="180" />
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-260"
follows="left|top" font="SansSerifSmall" height="16" left_delta="185"
max_length="10" mouse_opaque="true" name="your_contrib" width="60" />
<button bottom="-264" follows="top" font="SansSerif" halign="center" height="20"
label="Set Contribution" label_selected="Set Contribution" left_delta="103"
mouse_opaque="true" name="set_contrib_btn" width="140" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-284" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="warning_label" v_pad="0" width="436">
WARNING: Group maintains too much land. Group members need to contribute more.
</text>
</panel>
<panel bottom="-305" follows="left|top|right|bottom" height="289" label="Money"
left="1" mouse_opaque="true" name="mon" width="456">
<tab_container bottom="-289" height="285" left="0" mouse_opaque="false"
name="group money history tab" tab_position="top" width="400">
<panel bottom="-284" follows="left|top|right|bottom" height="268" label="Planning"
left="1" mouse_opaque="true" name="money panel" width="398">
<text_editor bg_readonly_color="0.784314, 0.819608, 0.8, 1" bottom="-260"
embedded_items="false" follows="left|top|right|bottom" font="Monospace"
height="252" left="8" max_length="2147483647" mouse_opaque="true"
name="money text" width="382" word_wrap="false" />
</panel>
<panel bottom="-284" follows="left|top|right|bottom" height="268" label="Details"
left="1" mouse_opaque="true" name="money panel2" width="398">
<text_editor bg_readonly_color="0.784314, 0.819608, 0.8, 1" bottom="-232"
embedded_items="false" follows="left|top|right|bottom" font="Monospace"
height="224" left="8" max_length="2147483647" mouse_opaque="true"
name="money text" width="382" word_wrap="false" />
<button bottom="-260" follows="left|bottom" font="SansSerif" halign="center"
height="20" label="&lt; Earlier" label_selected="&lt; Earlier" left="24"
mouse_opaque="true" name="&lt; Earlier" tool_tip="Go back in time"
width="80" />
<button bottom="-260" follows="right|bottom" font="SansSerif" halign="center"
height="20" label="Later &gt;" label_selected="Later &gt;" left_delta="270"
mouse_opaque="true" name="Later &gt;" tool_tip="Go forward in time"
width="80" />
</panel>
<panel bottom="-284" follows="left|top|right|bottom" height="268" label="Sales"
left="1" mouse_opaque="true" name="money panel3" width="398">
<text_editor bg_readonly_color="0.784314, 0.819608, 0.8, 1" bottom="-232"
embedded_items="false" follows="left|top|right|bottom" font="Monospace"
height="224" left="8" max_length="2147483647" mouse_opaque="true"
name="money text" width="382" word_wrap="false" />
<button bottom="-260" follows="left|bottom" font="SansSerif" halign="center"
height="20" label="&lt; Earlier" label_selected="&lt; Earlier" left="24"
mouse_opaque="true" name="&lt; Earlier" tool_tip="Go back in time"
width="80" />
<button bottom="-260" follows="right|bottom" font="SansSerif" halign="center"
height="20" label="Later &gt;" label_selected="Later &gt;" left_delta="270"
mouse_opaque="true" name="Later &gt;" tool_tip="Go forward in time"
width="80" />
</panel>
</tab_container>
</panel>
</tab_container>
<button bottom="-352" follows="left|bottom" font="SansSerif" halign="center"
height="20" label="OK" label_selected="OK" left="320" mouse_opaque="true"
name="OK" width="60" />
<button bottom="-352" follows="left|bottom" font="SansSerif" halign="center"
height="20" label="Cancel" label_selected="Cancel" left_delta="68"
mouse_opaque="true" name="Cancel" width="60" />
</floater>

View File

@@ -63,6 +63,6 @@ Try saving image as 24 bit Targa (.tga).
left_delta="155" name="temp_check" width="280" tooltip="Sets the asset to be temporary, meaning its free, but in return, only good for a short time before it ceases to exist." />
<button bottom="10" follows="bottom|right" height="20" label="Cancel" left="165"
name="cancel_btn" width="125" />
<button bottom="10" follows="bottom|left" height="20" label="Upload (L$[AMOUNT])"
<button bottom="10" follows="bottom|left" height="20" label="Upload ([UPLOADFEE])"
left="15" name="ok_btn" width="125" />
</floater>

View File

@@ -15,7 +15,7 @@
<scroll_list draw_border="true" height="280" left="10" multi_select="true"
name="upload_list" top="-30" width="400" />
<button bottom="10" height="20" label="Cancel" left="182" name="cancel_btn" width="64" />
<button bottom="10" height="20" label="Upload (L$10)" left="31" name="ok_btn"
<button bottom="10" height="20" label="Upload ([ULOADFEE])" left="31" name="ok_btn"
width="110" />
<text bottom="356" height="15" left="420" name="preview_label2">
Image Preview:

View File

@@ -161,7 +161,7 @@
bottom="-315" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="42"
mouse_opaque="true" name="TextPrice" v_pad="0" width="56">
Price: L$
Price: [CURRENCY]
</text>
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-315"
enabled="true" follows="left|top|right" font="SansSerifSmall" height="16"

View File

@@ -14,6 +14,6 @@
width="280" />
<button bottom="10" follows="bottom|right" height="20" label="Cancel" left="182"
name="cancel_btn" width="64" />
<button bottom="10" follows="bottom|left" height="20" label="Upload (L$[AMOUNT])" left="31"
<button bottom="10" follows="bottom|left" height="20" label="Upload ([UPLOADFEE])" left="31"
name="ok_btn" width="110" />
</floater>

View File

@@ -36,14 +36,14 @@
</text_editor>
<text bottom_delta="-37" follows="left|bottom" font="SansSerifSmall" left="12"
name="fine_print">
If your recipient joins SL, you&apos;ll get a referral bonus.
If your recipient joins our universe, you&apos;ll get a referral bonus.
</text>
<button bottom_delta="-32" follows="right|bottom" height="20" label="Cancel"
name="cancel_btn" right="-10" width="100" />
<button bottom_delta="0" follows="right|bottom" height="20" label="Send"
left_delta="-106" name="send_btn" width="100" />
<string name="default_subject">
Postcard from Second Life.
Postcard from [GRID_NAME].
</string>
<string name="default_message">
Check this out!

View File

@@ -14,7 +14,7 @@ and appear higher in searches.
</text>
<text bottom="50" follows="top|left" font="SansSerif" height="20" left="15"
name="price_text" width="120">
Price for Ad (L$):
Price for Ad ([CURRENCY]):
</text>
<line_editor bottom_delta="2" follows="top|left" height="20" left="125" max_length="6"
name="price_edit" width="60" />

View File

@@ -34,12 +34,12 @@
Choose an appropriate price for this land.
</text>
<text height="16" left="72" name="price_ld" width="20">
L$
[CURRENCY]
</text>
<line_editor bottom_delta="0" follows="top|left" height="16" increment="1" initial_val="0"
left_delta="20" max_val="999999999" min_val="0" name="price" width="100" />
<text bottom_delta="0" height="16" left_delta="110" name="price_per_m" width="200">
(L$[PER_METER] per square meter)
([CURRENCY][PER_METER] per square meter)
</text>
<icon follows="top|left" height="64" image_name="badge_note.j2c" left="0"
name="step_sell_to" width="64" />

View File

@@ -12,7 +12,7 @@
Send via email
</radio_item>
<radio_item bottom="-38" height="16" name="texture">
Save to your inventory (L$[AMOUNT])
Save to your inventory ([UPLOADFEE])
</radio_item>
<radio_item bottom="-57" height="16" name="local">
Save to your hard drive
@@ -26,7 +26,7 @@
name="new_snapshot_btn" width="195" />
<button bottom_delta="-22" follows="left|top" height="20" label="Send" left="10"
name="send_btn" width="105" />
<button bottom_delta="0" follows="left|top" height="20" label="Save (L$[AMOUNT])" left="10"
<button bottom_delta="0" follows="left|top" height="20" label="Save ([UPLOADFEE])" left="10"
name="upload_btn" width="105" />
<flyout_button bottom_delta="0" follows="left|top" height="20" label="Save" left="10"
list_position="below" mouse_opaque="true" name="save_btn" tool_tip="Save image to a file"

View File

@@ -24,6 +24,6 @@
height="20" label="Cancel" label_selected="Cancel" left="200"
mouse_opaque="true" name="cancel_btn" width="90" />
<button bottom="-180" follows="left|bottom" font="SansSerif" halign="center"
height="20" label="Upload (L$[AMOUNT])"
height="20" label="Upload ([UPLOADFEE])"
left_delta="-135" mouse_opaque="true" name="ok_btn" width="130" />
</floater>

View File

@@ -443,7 +443,7 @@
bottom_delta="0" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="90"
mouse_opaque="true" name="Cost" v_pad="0" width="78">
Price: L$
Price: [CURRENCY]
</text>
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
follows="left|top|right" font="SansSerifSmall" height="16" left_delta="80"
@@ -567,13 +567,13 @@
Must select entire object to set permissions.
</string>
<string name="Cost Default">
Price: L$
Price: [CURRENCY]
</string>
<string name="Cost Total">
Total Price: L$
Total Price: [CURRENCY]
</string>
<string name="Cost Per Unit">
Price Per: L$
Price Per: [CURRENCY]
</string>
<string name="Cost Mixed">
Mixed Price
@@ -1335,7 +1335,7 @@
bottom_delta="-24" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="48"
mouse_opaque="true" name="label_area_price" v_pad="0" width="150">
Price: L$[PRICE] for [AREA] sq. m.
Price: [CURRENCY][PRICE] for [AREA] sq. m.
</text>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="0" drop_shadow_visible="true" follows="left|top"

View File

@@ -137,7 +137,7 @@ Try saving image as 24 bit Targa (.tga).
<slider bottom_delta="0" can_edit_text="false" enabled="false" width="185" height="16" mouse_opaque="true"
decimal_digits="0" increment="1" initial_val="16" left="30" min_val="1.0" max_val="16.0" visible="false"
name="timeline" show_text="false" value="1" control_name="AnimationTimelineScrubber"/>
<button bottom="9" follows="bottom|left" height="22" label="Upload (L$10)"
<button bottom="9" follows="bottom|left" height="22" label="Upload ([UPLOADFEE])"
left="325" name="upload_button" width="120" />
<button bottom_delta="0" follows="bottom|left" height="22" label="Temp Upload"
left_delta="125" name="upload_button" tool_tip="Uploads a temporary version of the texture. It's free, but has a limited lifespan and area it can be used."

View File

@@ -5,22 +5,22 @@
<menu bottom="273" create_jump_keys="true" drop_shadow="true" enabled="true"
height="263" label="File" left="0" mouse_opaque="false" name="File"
opaque="true" tear_off="true" width="243">
<menu_item_call enabled="true" label="Image (L$[COST])..."
<menu_item_call enabled="true" label="Image ([UPLOADFEE])..."
mouse_opaque="true" name="Upload Image" shortcut="control|U" >
<on_click function="File.UploadImage" userdata="" />
<on_enable function="File.EnableUpload" />
</menu_item_call>
<menu_item_call label="Sound (L$[COST])..." name="Upload Sound"
<menu_item_call label="Sound ([UPLOADFEE])..." name="Upload Sound"
mouse_opaque="true" enabled="true" >
<on_click function="File.UploadSound" userdata="" />
<on_enable function="File.EnableUpload" />
</menu_item_call>
<menu_item_call label="Animation (L$[COST])..." name="Upload Animation"
<menu_item_call label="Animation ([UPLOADFEE])..." name="Upload Animation"
mouse_opaque="true" enabled="true" >
<on_click function="File.UploadAnim" userdata="" />
<on_enable function="File.EnableUpload" />
</menu_item_call>
<menu_item_call label="Bulk (L$[COST] per file)..." name="Bulk Upload"
<menu_item_call label="Bulk ([UPLOADFEE] per file)..." name="Bulk Upload"
mouse_opaque="true" enabled="true" >
<on_click function="File.UploadBulk" userdata="" />
</menu_item_call>
@@ -610,7 +610,7 @@
<on_click function="PromptShowURL" name="ManageMyAccount_url"
userdata="WebLaunchJoinNow,http://secondlife.com/account/" />
</menu_item_call>
<menu_item_call bottom="-286" enabled="true" height="19" label="Buy L$..." left="0"
<menu_item_call bottom="-286" enabled="true" height="19" label="Buy [CURRENCY]..." left="0"
mouse_opaque="true" name="Buy and Sell L$..." width="166">
<on_click function="ShowFloater" userdata="buy currency" />
</menu_item_call>

View File

@@ -496,7 +496,7 @@ Other residents can visit the URL you set when they look at your profile.
icon="alertmodal.tga"
name="JoinGroupCanAfford"
type="alertmodal">
Joining this group costs L$[COST].
Joining this group costs [CURRENCY][COST].
Do you wish to proceed?
<usetemplate
name="okcancelbuttons"
@@ -508,15 +508,15 @@ Do you wish to proceed?
icon="alertmodal.tga"
name="JoinGroupCannotAfford"
type="alertmodal">
Joining this group costs L$[COST].
You do not have enough L$ to join this group.
Joining this group costs [CURRENCY][COST].
You do not have enough [CURRENCY] to join this group.
</notification>
<notification
icon="alertmodal.tga"
name="LandBuyPass"
type="alertmodal">
For L$[COST] you can enter this land (&apos;[PARCEL_NAME]&apos;) for [TIME] hours. Buy a pass?
For [CURRENCY][COST] you can enter this land (&apos;[PARCEL_NAME]&apos;) for [TIME] hours. Buy a pass?
<usetemplate
name="okcancelbuttons"
notext="Cancel"
@@ -527,8 +527,8 @@ For L$[COST] you can enter this land (&apos;[PARCEL_NAME]&apos;) for [TIME] hour
icon="alertmodal.tga"
name="SalePriceRestriction"
type="alertmodal">
Sale price must be set to more than L$0 if selling to anyone.
Please select an individual to sell to if selling for L$0.
Sale price must be set to more than [CURRENCY]0 if selling to anyone.
Please select an individual to sell to if selling for [CURRENCY]0.
</notification>
<notification
@@ -537,7 +537,7 @@ Please select an individual to sell to if selling for L$0.
priority="high"
type="alertmodal">
The selected [LAND_SIZE] m² land is being set for sale.
Your selling price will be L$[SALE_PRICE] and will be authorized for sale to [NAME].
Your selling price will be [CURRENCY][SALE_PRICE] and will be authorized for sale to [NAME].
<usetemplate
name="okcancelbuttons"
notext="Cancel"
@@ -551,7 +551,7 @@ Your selling price will be L$[SALE_PRICE] and will be authorized for sale to [NA
ATTENTION: Clicking &apos;sell to anyone&apos; makes your land available to the entire Second Life community, even those not in this region.
The selected [LAND_SIZE] m² land is being set for sale.
Your selling price will be L$[SALE_PRICE] and will be authorized for sale to [NAME].
Your selling price will be [CURRENCY][SALE_PRICE] and will be authorized for sale to [NAME].
<usetemplate
name="okcancelbuttons"
notext="Cancel"
@@ -1911,7 +1911,7 @@ Select an entire parcel, or divide your parcel first.
name="ReleaseLandWarning"
type="alertmodal">
You are about to release [AREA] m² of land.
Releasing this parcel will remove it from your land holdings, but will not grant any L$.
Releasing this parcel will remove it from your land holdings, but will not grant any [CURRENCY].
Release this land?
<usetemplate
@@ -2221,7 +2221,7 @@ You must specify a name for your classified.
icon="alertmodal.tga"
name="MinClassifiedPrice"
type="alertmodal">
Price to pay for listing must be at least L$[MIN_PRICE].
Price to pay for listing must be at least [CURRENCY][MIN_PRICE].
Please enter a higher price.
</notification>
@@ -2501,7 +2501,7 @@ Please choose the male or female avatar. You can change your mind later.
icon="alertmodal.tga"
name="NotEnoughCurrency"
type="alertmodal">
[NAME] L$ [PRICE] You don&apos;t have enough L$ to do that.
[NAME] [CURRENCY] [PRICE] You don&apos;t have enough [CURRENCY] to do that.
</notification>
<notification
@@ -2776,7 +2776,7 @@ Download to your Applications folder?
name="DeedObjectToGroup"
type="alertmodal">
Deeding this object will cause the group to:
* Receive L$ paid into the object
* Receive [CURRENCY] paid into the object
<usetemplate
ignoretext="When deeding objects to groups"
name="okcancelignore"
@@ -3207,7 +3207,7 @@ Proceed?
type="alert">
You are about to change the access list for a Linden owned estate (mainland, teen grid, orientation, etc.).
This is DANGEROUS and should only be done to invoke the hack allowing objects/L$ to be transfered in/out of a grid.
This is DANGEROUS and should only be done to invoke the hack allowing objects/[CURRENCY] to be transfered in/out of a grid.
It will change thousands of regions and make the spaceserver hiccup.
<usetemplate
name="okcancelbuttons"
@@ -3569,7 +3569,7 @@ Asset ID for notecard is missing from database.
type="alert">
Remember: Classified ad fees are non-refundable.
Publish this classified now for L$[AMOUNT]?
Publish this classified now for [CURRENCY][AMOUNT]?
<usetemplate
name="okcancelbuttons"
notext="Cancel"
@@ -4065,7 +4065,7 @@ Please select only one object and try again.
icon="alertmodal.tga"
name="BuyOriginal"
type="alertmodal">
Buy original object from [OWNER] for L$[PRICE]?
Buy original object from [OWNER] for [CURRENCY][PRICE]?
You will become the owner of this object.
You will be able to:
Modify: [MODIFYPERM]
@@ -4081,7 +4081,7 @@ You will be able to:
icon="alertmodal.tga"
name="BuyOriginalNoOwner"
type="alertmodal">
Buy original object for L$[PRICE]?
Buy original object for [CURRENCY][PRICE]?
You will become the owner of this object.
You will be able to:
Modify: [MODIFYPERM]
@@ -4097,7 +4097,7 @@ You will be able to:
icon="alertmodal.tga"
name="BuyCopy"
type="alertmodal">
Buy a copy from [OWNER] for L$[PRICE]?
Buy a copy from [OWNER] for [CURRENCY][PRICE]?
The object will be copied to your inventory.
You will be able to:
Modify: [MODIFYPERM]
@@ -4113,7 +4113,7 @@ You will be able to:
icon="alertmodal.tga"
name="BuyCopyNoOwner"
type="alertmodal">
Buy a copy for L$[PRICE]?
Buy a copy for [CURRENCY][PRICE]?
The object will be copied to your inventory.
You will be able to:
Modify: [MODIFYPERM]
@@ -4129,7 +4129,7 @@ You will be able to:
icon="alertmodal.tga"
name="BuyContents"
type="alertmodal">
Buy contents from [OWNER] for L$[PRICE]?
Buy contents from [OWNER] for [CURRENCY][PRICE]?
They will be copied to your inventory.
<usetemplate
name="okcancelbuttons"
@@ -4141,7 +4141,7 @@ They will be copied to your inventory.
icon="alertmodal.tga"
name="BuyContentsNoOwner"
type="alertmodal">
Buy contents for L$[PRICE]?
Buy contents for [CURRENCY][PRICE]?
They will be copied to your inventory.
<usetemplate
name="okcancelbuttons"
@@ -5057,7 +5057,7 @@ Items may not be purchased while they are part of an attachment.
label="About Requests for the Debit Permission"
name="DebitPermissionDetails"
type="alertmodal">
Granting this request gives a script ongoing permission to take Linden dollars (L$) from your account. To revoke this permission, the object owner must delete the object or reset the scripts in the object.
Granting this request gives a script ongoing permission to take in-world money ([CURRENCY]) from your account. To revoke this permission, the object owner must delete the object or reset the scripts in the object.
<usetemplate
name="okbutton"
yestext="OK"/>
@@ -5236,12 +5236,12 @@ Uploading in-world and web site snapshots...
(Takes about 5 minutes.)
</notification>
<notification
<notification
icon="notify.tga"
name="UploadPayment"
type="notify">
You paid L$[AMOUNT] to upload.
</notification>
You paid [CURRENCY][AMOUNT] to upload.
</notification>
<notification
icon="notifytip.tga"
@@ -6285,8 +6285,8 @@ Grant this request?
icon="notify.tga"
name="FirstBalanceIncrease"
type="notify">
You just received L$[AMOUNT].
Objects and other users may give you L$.
You just received [CURRENCY][AMOUNT].
Objects and other users may give you [CURRENCY].
Your balance is shown in the upper-right corner of the screen.
</notification>
@@ -6294,7 +6294,7 @@ Your balance is shown in the upper-right corner of the screen.
icon="notify.tga"
name="FirstBalanceDecrease"
type="notify">
You just paid L$[AMOUNT].
You just paid [CURRENCY][AMOUNT].
Your balance is shown in the upper-right corner of the screen.
</notification>

View File

@@ -52,7 +52,7 @@
height="20" label="Auto-renew each week" left="10" name="auto_renew_check"
width="120" />
<string name="ad_placed_paid">
Ad placed: [DATE], Paid L$[AMT] for listing.
Ad placed: [DATE], Paid [CURRENCY][AMT] for listing.
</string>
<string name="update_txt">
Update

View File

@@ -40,7 +40,7 @@
<button bottom="400" follows="left|top" height="20" label="Update" left="30"
name="classified_update_btn" width="70" />
<string name="ad_placed_paid">
Ad placed: [DATE], Paid L$[AMT] for listing.
Ad placed: [DATE], Paid [CURRENCY][AMT] for listing.
</string>
<string name="update_txt">
Update

View File

@@ -61,7 +61,7 @@
tool_tip="Offer this friend a teleport to your current location" width="80" />
<button bottom_delta="-25" follows="top|right" height="22" label="Pay..."
left_delta="0" name="pay_btn"
tool_tip="Give Linden dollars (L$) to this friend" width="80" />
tool_tip="Give in-world money ([CURRENCY]) to this friend" width="80" />
<button bottom_delta="-25" follows="top|right" height="22" label="Remove..."
left_delta="0" name="remove_btn"
tool_tip="Remove this person from your friends list" width="80" />

View File

@@ -59,7 +59,7 @@ Hover your mouse over the options for more help.
Group Charter
</text_editor>
<button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
height="22" label="Join (L$0)" label_selected="Join (L$0)" left="7"
height="22" label="Join ([CURRENCY]0)" label_selected="Join ([CURRENCY]0)" left="7"
mouse_opaque="true" name="join_button" width="128" />
<button bottom_delta="0" follows="left|top" font="SansSerif" halign="center"
height="22" label="Detailed View" label_selected="Detailed View"
@@ -97,7 +97,7 @@ Hover your mouse over the options for more help.
tool_tip="Sets whether this group allows new members to join without being invited."
width="95" />
<check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16"
initial_value="false" label="Enrollment fee: L$" left_delta="16"
initial_value="false" label="Enrollment fee: [CURRENCY]" left_delta="16"
max_length="5" mouse_opaque="true" name="check_enrollment_fee"
radio_style="false"
tool_tip="Sets whether to require an enrollment fee to join the group."
@@ -147,8 +147,8 @@ Hover your mouse over the options for more help.
Retrieving member data
</string>
<string name="confirm_group_create_str">
Creating this group will cost L$100.
Are you really, really, REALLY sure you want to spend L$100 to create this group?
Creating this group will cost [GROUPCREATEFEE].
Are you really, really, REALLY sure you want to spend [GROUPCREATEFEE] to create this group?
Be aware that if nobody else joins this group within 48 hours, it will be disbanded and the group&apos;s name will be unavailable for future use.
</string>
</panel>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel border="true" bottom="0" follows="all" height="470" label="Land &amp; L$"
<panel border="true" bottom="0" follows="all" height="470" label="Land &amp; Money"
left="1" mouse_opaque="true" name="land_money_tab" select="false"
width="418">
<string name="help_text">
@@ -107,7 +107,7 @@
bottom_delta="-25" drop_shadow_visible="true" follows="left|top"
font="SansSerifBig" h_pad="0" halign="left" height="16" left="12"
mouse_opaque="true" name="group_money_heading" v_pad="0" width="150">
Group L$
Group [CURRENCY]
</text>
<tab_container border="false" bottom_delta="-189" height="180" left="6" mouse_opaque="false"
name="group_money_tab_container" tab_position="top" width="406">

View File

@@ -35,10 +35,10 @@
Traffic: [TRAFFIC]
</string>
<string name="area_text">
Area: [AREA] m². 
Area: [AREA] m².
</string>
<string name="forsale_text">
For Sale for L$[PRICE]
For Sale for [CURRENCY][PRICE]
</string>
<string name="auction_text">
Auction ID [ID].

View File

@@ -40,10 +40,10 @@
Traffic: [TRAFFIC]
</string>
<string name="area_text">
Area: [AREA] m². 
Area: [AREA] m².
</string>
<string name="forsale_text">
For Sale for L$[PRICE]
For Sale for [CURRENCY][PRICE]
</string>
<string name="auction_text">
Auction ID [ID].

View File

@@ -54,8 +54,8 @@
show_text="true" width="250" />
<spinner bottom_delta="-20" control_name="UISndMoneyChangeThreshold" decimal_digits="0"
enabled="true" follows="left|top" height="16" increment="10"
initial_val="10" label="L$ Change Threshold" label_width="128" left="148"
max_val="10000" min_val="0" mouse_opaque="true" name="L$ Change Threshold"
initial_val="10" label="[CURRENCY] change threshold:" label_width="128" left="148"
max_val="10000" min_val="0" mouse_opaque="true" name="currency_change_threshold"
width="192" />
<spinner bottom_delta="-20" control_name="UISndHealthReductionThreshold"
decimal_digits="0" enabled="true" follows="left|top" height="16"

View File

@@ -88,7 +88,7 @@
min_val="30" mouse_opaque="true" name="afk_timeout_spinner" width="202" />
<check_box bottom="-265" enabled="true"
follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
label="Notify when Linden dollars (L$) spent or received" left="151"
label="Notify when in-world money ([CURRENCY]) spent or received" left="151"
mouse_opaque="true" name="notify_money_change_checkbox" radio_style="false"
width="256" />
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"

View File

@@ -20,12 +20,12 @@
v_pad="2" width="76">
Loading...
</text>
<button bottom="-17" enabled="true" follows="right|bottom" font="SansSerif"
halign="center" height="16"
image_selected="status_buy_currency_pressed.tga"
image_unselected="status_buy_currency.tga" label="" label_selected=""
<button bottom="-18" enabled="true" follows="right|bottom" font="SansSerifSmall"
halign="center" height="18"
image_selected="button_enabled_selected_32x128.tga"
image_unselected="button_enabled_32x128.tga" label="[CURRENCY]"
left="-210" mouse_opaque="true" name="buycurrency" scale_image="true"
tool_tip="Buy currency" width="16" />
tool_tip="Buy currency" width="36" />
<text type="string" length="12" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-20" disabled_color="TimeTextColor" drop_shadow_visible="true"
enabled="true" follows="right|bottom" font="SansSerifSmall" h_pad="0"

View File

@@ -44,7 +44,7 @@
<string name="TooltipFlagTemporary">Temporary</string>
<string name="TooltipFlagRightClickMenu">(Right-click for menu)</string>
<string name="TooltipFreeToCopy">Free to copy</string>
<string name="TooltipForSaleL$">For Sale: L$[AMOUNT]</string> <!-- L$ version -->
<string name="TooltipForSaleL$">For Sale: [CURRENCY][AMOUNT]</string> <!-- L$ version -->
<string name="TooltipForSaleMsg">For Sale: [MESSAGE]</string> <!-- Message (RetrievingData) -->
<string name="TooltipFlagGroupBuild">Group Build</string>
<string name="TooltipFlagNoBuild">No Build</string>
@@ -611,7 +611,7 @@ Returns a string that is src with all lower-case characters
</string>
<string name="LSLTipText_llGiveMoney">
llGiveMoney(key destination, integer amount)
Transfers amount of L$ from script owner to destination
Transfers amount of [CURRENCY] from script owner to destination
</string>
<string name="LSLTipText_llMakeExplosion">
llMakeExplosion(integer particles, float scale, float vel, float lifetime, float arc, string texture, vector offset)
@@ -1431,7 +1431,7 @@ Returns a list containing results of the sent query
</string>
<string name="LSLTipText_llModPow">
integer llModPow(integer a, integer b, integer c)
Returns a raised to the b power, mod c. ( (a**b)%c )
Returns a raised to the b power, mod c. ( (a**b)%c )
b is capped at 0xFFFF (16 bits).
</string>
<string name="LSLTipText_llGetInventoryType">