Merge branch 'master' of git://github.com/Lirusaito/SingularityViewer
This commit is contained in:
@@ -126,7 +126,7 @@ enum EInstantMessage
|
||||
IM_LURE_ACCEPTED = 23,
|
||||
IM_LURE_DECLINED = 24,
|
||||
IM_GODLIKE_LURE_USER = 25,
|
||||
IM_YET_TO_BE_USED = 26,
|
||||
IM_TELEPORT_REQUEST = 26,
|
||||
|
||||
// IM that notifie of a new group election.
|
||||
// Name is name of person who called vote.
|
||||
|
||||
@@ -114,6 +114,7 @@ LLView* LLFlyoutButton::fromXML(LLXMLNodePtr node, LLView* parent, LLUICtrlFacto
|
||||
if (child->hasName(LL_FLYOUT_BUTTON_ITEM_TAG))
|
||||
{
|
||||
std::string label(child->getTextContents());
|
||||
child->getAttributeString("label", label);
|
||||
std::string value(label);
|
||||
child->getAttributeString("value", value);
|
||||
|
||||
|
||||
@@ -1742,6 +1742,7 @@ BOOL LLScrollListCtrl::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
||||
}
|
||||
gFocusMgr.setKeyboardFocus(this); // Menu listeners rely on this
|
||||
mPopupMenu->buildDrawLabels();
|
||||
mPopupMenu->updateParent(LLMenuGL::sMenuContainer);
|
||||
LLMenuGL::showPopup(this, mPopupMenu, x, y);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -2556,7 +2557,6 @@ void LLScrollListCtrl::setScrollListParameters(LLXMLNodePtr node)
|
||||
std::string menu_file;
|
||||
node->getAttributeString("menu_file", menu_file);
|
||||
mPopupMenu = LLUICtrlFactory::getInstance()->buildMenu(menu_file, LLMenuGL::sMenuContainer);
|
||||
LLMenuGL::sMenuContainer->addChild(mPopupMenu);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1330,7 +1330,7 @@ This should be as low as possible, but too low may break functionality</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>AntiSpamTeleports</key>
|
||||
<key>AntiSpamTeleportRequests</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When true, dialogs from teleport requests from other residents will be blocked.</string>
|
||||
@@ -1341,6 +1341,17 @@ This should be as low as possible, but too low may break functionality</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>AntiSpamTeleports</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When true, dialogs from teleport offers from other residents will be blocked.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>_NACL_Antispam</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
||||
@@ -331,6 +331,7 @@ void LLPrefsAscentChat::refreshValues()
|
||||
mBlockItemOfferSpam = gSavedSettings.getBOOL("AntiSpamItemOffers");
|
||||
mBlockScriptSpam = gSavedSettings.getBOOL("AntiSpamScripts");
|
||||
mBlockTeleportSpam = gSavedSettings.getBOOL("AntiSpamTeleports");
|
||||
mBlockTeleportRequestSpam = gSavedSettings.getBOOL("AntiSpamTeleportRequests");
|
||||
mNotifyOnSpam = gSavedSettings.getBOOL("AntiSpamNotify");
|
||||
mSoundMulti = gSavedSettings.getU32("_NACL_AntiSpamSoundMulti");
|
||||
mNewLines = gSavedSettings.getU32("_NACL_AntiSpamNewlines");
|
||||
@@ -548,6 +549,7 @@ void LLPrefsAscentChat::cancel()
|
||||
gSavedSettings.setBOOL("AntiSpamItemOffers", mBlockItemOfferSpam);
|
||||
gSavedSettings.setBOOL("AntiSpamScripts", mBlockScriptSpam);
|
||||
gSavedSettings.setBOOL("AntiSpamTeleports", mBlockTeleportSpam);
|
||||
gSavedSettings.setBOOL("AntiSpamTeleportRequests", mBlockTeleportRequestSpam);
|
||||
gSavedSettings.setBOOL("AntiSpamNotify", mNotifyOnSpam);
|
||||
gSavedSettings.setU32("_NACL_AntiSpamSoundMulti", mSoundMulti);
|
||||
gSavedSettings.setU32("_NACL_AntiSpamNewlines", mNewLines);
|
||||
|
||||
@@ -107,6 +107,7 @@ protected:
|
||||
BOOL mBlockItemOfferSpam;
|
||||
BOOL mBlockScriptSpam;
|
||||
BOOL mBlockTeleportSpam;
|
||||
bool mBlockTeleportRequestSpam;
|
||||
BOOL mNotifyOnSpam;
|
||||
BOOL mSoundMulti;
|
||||
U32 mNewLines;
|
||||
|
||||
@@ -52,13 +52,19 @@ void LFSimFeatureHandler::setSupportedFeatures()
|
||||
{
|
||||
LLSD info;
|
||||
region->getSimulatorFeatures(info);
|
||||
//if (!gHippoGridManager->getCurrentGrid()->isSecondLife()) // Non-SL specific sim features
|
||||
if (info.has("OpenSimExtras")) // OpenSim specific sim features
|
||||
{
|
||||
// For definition of OpenSimExtras please see
|
||||
// http://opensimulator.org/wiki/SimulatorFeatures_Extras
|
||||
mSupportsExport = info["OpenSimExtras"]["ExportSupported"].asBoolean();
|
||||
mMapServerURL = info["OpenSimExtras"]["map-server-url"].asString();
|
||||
mSearchURL = info["OpenSimExtras"]["search-server-url"].asString();
|
||||
mSupportsExport = info["OpenSimExtras"].has("ExportSupported") ? info["OpenSimExtras"]["ExportSupported"].asBoolean() : false;
|
||||
mMapServerURL = info["OpenSimExtras"].has("map-server-url") ? info["OpenSimExtras"]["map-server-url"].asString() : "";
|
||||
mSearchURL = info["OpenSimExtras"].has("search-server-url") ? info["OpenSimExtras"]["search-server-url"].asString() : "";
|
||||
}
|
||||
else // OpenSim specifics are unsupported reset all to default
|
||||
{
|
||||
mSupportsExport = false;
|
||||
mMapServerURL = "";
|
||||
mSearchURL = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -68,3 +74,8 @@ boost::signals2::connection LFSimFeatureHandler::setSupportsExportCallback(const
|
||||
return mSupportsExport.connect(slot);
|
||||
}
|
||||
|
||||
boost::signals2::connection LFSimFeatureHandler::setSearchURLCallback(const boost::signals2::signal<void()>::slot_type& slot)
|
||||
{
|
||||
return mSearchURL.connect(slot);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ template<typename Type>
|
||||
class SignaledType
|
||||
{
|
||||
public:
|
||||
SignaledType() : mValue() {}
|
||||
SignaledType(Type b) : mValue(b) {}
|
||||
|
||||
template<typename Slot>
|
||||
@@ -57,6 +58,7 @@ public:
|
||||
|
||||
// Connection setters
|
||||
boost::signals2::connection setSupportsExportCallback(const boost::signals2::signal<void()>::slot_type& slot);
|
||||
boost::signals2::connection setSearchURLCallback(const boost::signals2::signal<void()>::slot_type& slot);
|
||||
|
||||
// Accessors
|
||||
bool simSupportsExport() const { return mSupportsExport; }
|
||||
@@ -67,7 +69,7 @@ private:
|
||||
// SignaledTypes
|
||||
SignaledType<bool> mSupportsExport;
|
||||
std::string mMapServerURL;
|
||||
std::string mSearchURL;
|
||||
SignaledType<std::string> mSearchURL;
|
||||
};
|
||||
|
||||
#endif //LFSIMFEATUREHANDLER_H
|
||||
|
||||
@@ -683,7 +683,7 @@ void LLUpdateTaskInventoryResponder::uploadComplete(const LLSD& content)
|
||||
}
|
||||
else
|
||||
{
|
||||
LLLiveLSLEditor* preview = LLLiveLSLEditor::find(item_id, task_id);
|
||||
LLLiveLSLEditor* preview = static_cast<LLLiveLSLEditor*>(LLPreview::find(item_id));
|
||||
if (preview)
|
||||
{
|
||||
// Bytecode save completed
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
#include "roles_constants.h" // for GP_MEMBER_INVITE
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llcallingcard.h" // LLAvatarTracker
|
||||
#include "llcallingcard.h" // for LLAvatarTracker
|
||||
#include "llfloateravatarinfo.h"
|
||||
#include "llfloatergroupinvite.h"
|
||||
#include "llfloatergroups.h"
|
||||
@@ -50,6 +50,8 @@
|
||||
#include "llvoiceclient.h"
|
||||
#include "llweb.h"
|
||||
#include "llslurl.h" // IDEVO
|
||||
#include "llavatarname.h"
|
||||
#include "llagentui.h"
|
||||
// [RLVa:KB] - Checked: 2011-04-11 (RLVa-1.3.0h) | Added: RLVa-1.3.0h
|
||||
#include "rlvhandler.h"
|
||||
// [/RLVa:KB]
|
||||
@@ -449,6 +451,77 @@ void LLAvatarActions::pay(const LLUUID& id)
|
||||
}
|
||||
}
|
||||
|
||||
void LLAvatarActions::teleport_request_callback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
S32 option;
|
||||
if (response.isInteger())
|
||||
{
|
||||
option = response.asInteger();
|
||||
}
|
||||
else
|
||||
{
|
||||
option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
}
|
||||
|
||||
if (0 == option)
|
||||
{
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
|
||||
msg->newMessageFast(_PREHASH_ImprovedInstantMessage);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
|
||||
msg->nextBlockFast(_PREHASH_MessageBlock);
|
||||
msg->addBOOLFast(_PREHASH_FromGroup, FALSE);
|
||||
msg->addUUIDFast(_PREHASH_ToAgentID, notification["substitutions"]["uuid"] );
|
||||
msg->addU8Fast(_PREHASH_Offline, IM_ONLINE);
|
||||
msg->addU8Fast(_PREHASH_Dialog, IM_TELEPORT_REQUEST);
|
||||
msg->addUUIDFast(_PREHASH_ID, LLUUID::null);
|
||||
msg->addU32Fast(_PREHASH_Timestamp, NO_TIMESTAMP); // no timestamp necessary
|
||||
|
||||
std::string name;
|
||||
LLAgentUI::buildFullname(name);
|
||||
|
||||
msg->addStringFast(_PREHASH_FromAgentName, name);
|
||||
msg->addStringFast(_PREHASH_Message, response["message"]);
|
||||
msg->addU32Fast(_PREHASH_ParentEstateID, 0);
|
||||
msg->addUUIDFast(_PREHASH_RegionID, LLUUID::null);
|
||||
msg->addVector3Fast(_PREHASH_Position, gAgent.getPositionAgent());
|
||||
|
||||
gMessageSystem->addBinaryDataFast(
|
||||
_PREHASH_BinaryBucket,
|
||||
EMPTY_BINARY_BUCKET,
|
||||
EMPTY_BINARY_BUCKET_SIZE);
|
||||
|
||||
gAgent.sendReliableMessage();
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLAvatarActions::teleportRequest(const LLUUID& id)
|
||||
{
|
||||
LLAvatarName av_name;
|
||||
if (LLAvatarNameCache::get(id, &av_name)) // Bypass expiration, open NOW!
|
||||
on_avatar_name_cache_teleport_request(id, av_name);
|
||||
else
|
||||
LLAvatarNameCache::get(id, boost::bind(&on_avatar_name_cache_teleport_request, _1, _2));
|
||||
}
|
||||
|
||||
// static
|
||||
void LLAvatarActions::on_avatar_name_cache_teleport_request(const LLUUID& id, const LLAvatarName& av_name)
|
||||
{
|
||||
LLSD notification;
|
||||
notification["uuid"] = id;
|
||||
//notification["NAME_SLURL"] = LLSLURL("agent", id, "about").getSLURLString();
|
||||
std::string name;
|
||||
LLAvatarNameCache::getPNSName(av_name, name);
|
||||
notification["NAME"] = name;
|
||||
LLSD payload;
|
||||
|
||||
LLNotificationsUtil::add("TeleportRequestPrompt", notification, payload, teleport_request_callback);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLAvatarActions::kick(const LLUUID& id)
|
||||
{
|
||||
|
||||
@@ -101,6 +101,13 @@ public:
|
||||
* Give money to the avatar.
|
||||
*/
|
||||
static void pay(const LLUUID& id);
|
||||
|
||||
/**
|
||||
* Request teleport from other avatar
|
||||
*/
|
||||
static void teleportRequest(const LLUUID& id);
|
||||
static void teleport_request_callback(const LLSD& notification, const LLSD& response);
|
||||
|
||||
/**
|
||||
* Block/unblock the avatar.
|
||||
*/
|
||||
@@ -211,6 +218,7 @@ private:
|
||||
static bool handleFreeze(const LLSD& notification, const LLSD& response);
|
||||
static bool handleUnfreeze(const LLSD& notification, const LLSD& response);
|
||||
static void callback_invite_to_group(LLUUID group_id, LLUUID id);
|
||||
static void on_avatar_name_cache_teleport_request(const LLUUID& id, const LLAvatarName& av_name);
|
||||
|
||||
public:
|
||||
// Just request friendship, no dialog.
|
||||
|
||||
@@ -561,16 +561,14 @@ BOOL LLFloaterIMPanel::postBuild()
|
||||
mInputEditor->setReplaceNewlinesWithSpaces( FALSE );
|
||||
mInputEditor->setPassDelete( TRUE );
|
||||
|
||||
if (LLButton* btn = findChild<LLButton>("profile_callee_btn"))
|
||||
if (LLUICtrl* ctrl = findChild<LLUICtrl>("instant_message_flyout"))
|
||||
{
|
||||
btn->setCommitCallback(boost::bind(LLAvatarActions::showProfile, mOtherParticipantUUID, false));
|
||||
if (!mProfileButtonEnabled) btn->setEnabled(false);
|
||||
ctrl->setCommitCallback(boost::bind(&LLFloaterIMPanel::onFlyoutCommit, this, _2));
|
||||
}
|
||||
if (LLButton* btn = findChild<LLButton>("profile_tele_btn"))
|
||||
btn->setCommitCallback(boost::bind(static_cast<void(*)(const LLUUID&)>(LLAvatarActions::offerTeleport), mOtherParticipantUUID));
|
||||
if (LLButton* btn = findChild<LLButton>("group_info_btn"))
|
||||
btn->setCommitCallback(boost::bind(LLGroupActions::show, mSessionUUID));
|
||||
childSetAction("history_btn", onClickHistory, this);
|
||||
if (LLUICtrl* ctrl = findChild<LLUICtrl>("history_btn"))
|
||||
ctrl->setCommitCallback(boost::bind(&LLFloaterIMPanel::onClickHistory, this));
|
||||
if (LLUICtrl* ctrl = findChild<LLUICtrl>("rp_mode"))
|
||||
ctrl->setCommitCallback(boost::bind(&LLFloaterIMPanel::onRPMode, this, _2));
|
||||
|
||||
@@ -1061,17 +1059,30 @@ void LLFloaterIMPanel::onRPMode(const LLSD& value)
|
||||
mRPMode = value.asBoolean();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterIMPanel::onClickHistory( void* userdata )
|
||||
void LLFloaterIMPanel::onFlyoutCommit(const LLSD& value)
|
||||
{
|
||||
LLFloaterIMPanel* self = (LLFloaterIMPanel*) userdata;
|
||||
|
||||
if (self->mOtherParticipantUUID.notNull())
|
||||
if (value.isUndefined())
|
||||
{
|
||||
LLAvatarActions::showProfile(mOtherParticipantUUID);
|
||||
return;
|
||||
}
|
||||
|
||||
int option = value.asInteger();
|
||||
if (option == 1) onClickHistory();
|
||||
else if (option == 2) LLAvatarActions::offerTeleport(mOtherParticipantUUID);
|
||||
else if (option == 3) LLAvatarActions::teleportRequest(mOtherParticipantUUID);
|
||||
else if (option == 4) LLAvatarActions::pay(mOtherParticipantUUID);
|
||||
else if (option == 5) LLAvatarActions::inviteToGroup(mOtherParticipantUUID);
|
||||
}
|
||||
|
||||
void LLFloaterIMPanel::onClickHistory()
|
||||
{
|
||||
if (mOtherParticipantUUID.notNull())
|
||||
{
|
||||
char command[256];
|
||||
// [Ansariel: Display name support]
|
||||
//std::string fullname(gDirUtilp->getScrubbedFileName(self->getTitle()));
|
||||
std::string fullname(gDirUtilp->getScrubbedFileName(self->mSessionLabel));
|
||||
//std::string fullname(gDirUtilp->getScrubbedFileName(getTitle()));
|
||||
std::string fullname(gDirUtilp->getScrubbedFileName(mSessionLabel));
|
||||
// [/Ansariel: Display name support]
|
||||
sprintf(command, "\"%s%s%s.txt\"", gDirUtilp->getPerAccountChatLogsDir().c_str(), gDirUtilp->getDirDelimiter().c_str(), fullname.c_str());
|
||||
gViewerWindow->getWindow()->ShellEx(command);
|
||||
|
||||
@@ -113,8 +113,9 @@ public:
|
||||
void onInputEditorKeystroke(LLLineEditor* caller);
|
||||
static void onTabClick( void* userdata );
|
||||
|
||||
static void onClickHistory( void* userdata );
|
||||
void onClickHistory();
|
||||
void onRPMode(const LLSD& value);
|
||||
void onFlyoutCommit(const LLSD& value);
|
||||
static void onClickStartCall( void* userdata );
|
||||
static void onClickEndCall( void* userdata );
|
||||
void onClickToggleActiveSpeakers(const LLSD& value);
|
||||
|
||||
@@ -4595,6 +4595,16 @@ void LLCallingCardBridge::performAction(LLInventoryModel* model, std::string act
|
||||
LLAvatarActions::offerTeleport(item->getCreatorUUID());
|
||||
}
|
||||
}
|
||||
else if ("request_lure" == action)
|
||||
{
|
||||
LLViewerInventoryItem *item = getItem();
|
||||
if (item && (item->getCreatorUUID() != gAgent.getID()) &&
|
||||
(!item->getCreatorUUID().isNull()))
|
||||
{
|
||||
LLAvatarActions::teleportRequest(item->getCreatorUUID());
|
||||
}
|
||||
}
|
||||
|
||||
else LLItemBridge::performAction(model, action);
|
||||
}
|
||||
|
||||
@@ -4678,6 +4688,7 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
||||
items.push_back(std::string("Send Instant Message Separator"));
|
||||
items.push_back(std::string("Send Instant Message"));
|
||||
items.push_back(std::string("Offer Teleport..."));
|
||||
items.push_back(std::string("Request Teleport..."));
|
||||
items.push_back(std::string("Conference Chat"));
|
||||
|
||||
if (!good_card)
|
||||
@@ -4687,6 +4698,7 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
||||
if (!good_card || !user_online)
|
||||
{
|
||||
disabled_items.push_back(std::string("Offer Teleport..."));
|
||||
disabled_items.push_back(std::string("Request Teleport..."));
|
||||
disabled_items.push_back(std::string("Conference Chat"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1394,6 +1394,7 @@ LLPanelAvatar::LLPanelAvatar(
|
||||
factory_map["My Notes"] = LLCallbackMap(createPanelAvatarNotes, this);
|
||||
|
||||
mCommitCallbackRegistrar.add("Profile.Web", boost::bind(LLAvatarActions::showProfile, boost::bind(&LLPanelAvatar::getAvatarID, this), true));
|
||||
mCommitCallbackRegistrar.add("Profile.TeleportRequest", boost::bind(LLAvatarActions::teleportRequest, boost::bind(&LLPanelAvatar::getAvatarID, this)));
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar.xml", &factory_map);
|
||||
|
||||
selectTab(0);
|
||||
|
||||
@@ -1250,7 +1250,7 @@ public:
|
||||
void LLTaskLSLBridge::openItem()
|
||||
{
|
||||
llinfos << "LLTaskLSLBridge::openItem() " << mUUID << llendl;
|
||||
if(LLLiveLSLEditor::show(mUUID, mPanel->getTaskUUID()))
|
||||
if(LLLiveLSLEditor::show(mUUID))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -1299,7 +1299,7 @@ void LLTaskLSLBridge::openItem()
|
||||
|
||||
BOOL LLTaskLSLBridge::removeItem()
|
||||
{
|
||||
LLLiveLSLEditor::hide(mUUID, mPanel->getTaskUUID());
|
||||
LLLiveLSLEditor::hide(mUUID);
|
||||
return LLTaskInvFVBridge::removeItem();
|
||||
}
|
||||
|
||||
|
||||
0
indra/newview/llpanelvoiceeffect.cpp
Executable file → Normal file
0
indra/newview/llpanelvoiceeffect.cpp
Executable file → Normal file
0
indra/newview/llpanelvoiceeffect.h
Executable file → Normal file
0
indra/newview/llpanelvoiceeffect.h
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
@@ -40,7 +40,6 @@
|
||||
#include "llcombobox.h"
|
||||
#include "lliconctrl.h"
|
||||
#include "llframetimer.h"
|
||||
#include "lleventtimer.h"
|
||||
|
||||
class LLLiveLSLFile;
|
||||
class LLMessageSystem;
|
||||
@@ -55,56 +54,59 @@ class LLKeywordToken;
|
||||
class AIFilePicker;
|
||||
|
||||
// Inner, implementation class. LLPreviewScript and LLLiveLSLEditor each own one of these.
|
||||
class LLScriptEdCore : public LLPanel, public LLEventTimer
|
||||
class LLScriptEdCore : public LLPanel
|
||||
{
|
||||
friend class LLPreviewScript;
|
||||
friend class LLPreviewLSL;
|
||||
friend class LLLiveLSLEditor;
|
||||
friend class LLFloaterSearchReplace;
|
||||
friend class LLScriptEdContainer;
|
||||
|
||||
public:
|
||||
static void parseFunctions(const std::string& filename);
|
||||
|
||||
protected:
|
||||
// Supposed to be invoked only by the container.
|
||||
LLScriptEdCore(
|
||||
const std::string& name,
|
||||
const LLRect& rect,
|
||||
LLScriptEdContainer* container,
|
||||
const std::string& sample,
|
||||
const std::string& help_url,
|
||||
const LLHandle<LLFloater>& floater_handle,
|
||||
void (*load_callback)(void* userdata),
|
||||
void (*save_callback)(void* userdata, BOOL close_after_save),
|
||||
void (*search_replace_callback)(void* userdata),
|
||||
void* userdata,
|
||||
LLUUID objectUUID,
|
||||
LLUUID itemUUID,
|
||||
S32 bottom_pad = 0); // pad below bottom row of buttons
|
||||
public:
|
||||
~LLScriptEdCore();
|
||||
|
||||
void initMenu();
|
||||
|
||||
virtual void draw();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
BOOL canClose();
|
||||
void setEnableEditing(bool enable);
|
||||
|
||||
void setScriptText(const std::string& text, BOOL is_valid);
|
||||
bool loadScriptText(const std::string& filename);
|
||||
bool writeToFile(const std::string& filename);
|
||||
void sync();
|
||||
std::string getTmpFileName();
|
||||
static void openInExternalEditor(void* userdata);
|
||||
bool onExternalChange(const std::string& filename);
|
||||
|
||||
void doSave( BOOL close_after_save );
|
||||
|
||||
bool handleSaveChangesDialog(const LLSD& notification, const LLSD& response);
|
||||
bool handleReloadFromServerDialog(const LLSD& notification, const LLSD& response);
|
||||
|
||||
static bool onHelpWebDialog(const LLSD& notification, const LLSD& response);
|
||||
static void onBtnHelp(void* userdata);
|
||||
static void onBtnDynamicHelp(void* userdata);
|
||||
void openInExternalEditor();
|
||||
|
||||
static void onCheckLock(LLUICtrl*, void*);
|
||||
static void onHelpComboCommit(LLUICtrl* ctrl, void* userdata);
|
||||
static void onClickBack(void* userdata);
|
||||
static void onClickForward(void* userdata);
|
||||
static void onBtnInsertSample(void*);
|
||||
static void onBtnInsertFunction(LLUICtrl*, void*);
|
||||
static void doSave( void* userdata, BOOL close_after_save, BOOL sync_external_editor = TRUE );
|
||||
|
||||
// Singu TODO: modernize the menu callbacks and get rid of/update this giant block of static functions
|
||||
static BOOL hasChanged(void* userdata);
|
||||
static void onBtnSave(void*);
|
||||
static void onBtnUndoChanges(void*);
|
||||
static void onSearchMenu(void* userdata);
|
||||
@@ -125,16 +127,18 @@ public:
|
||||
static BOOL enableSelectAllMenu(void* userdata);
|
||||
static BOOL enableDeselectMenu(void* userdata);
|
||||
|
||||
static BOOL hasChanged(void* userdata);
|
||||
private:
|
||||
static bool onHelpWebDialog(const LLSD& notification, const LLSD& response);
|
||||
static void onBtnHelp(void* userdata);
|
||||
static void onBtnDynamicHelp(void* userdata);
|
||||
void onBtnUndoChanges();
|
||||
|
||||
bool hasChanged();
|
||||
|
||||
void selectFirstError();
|
||||
|
||||
void autoSave();
|
||||
|
||||
virtual BOOL handleKeyHere(KEY key, MASK mask);
|
||||
|
||||
virtual BOOL tick();
|
||||
|
||||
void enableSave(BOOL b) {mEnableSave = b;}
|
||||
|
||||
protected:
|
||||
@@ -144,12 +148,8 @@ protected:
|
||||
void addHelpItemToHistory(const std::string& help_string);
|
||||
static void onErrorList(LLUICtrl*, void* user_data);
|
||||
|
||||
virtual const char *getTitleName() const { return "Script"; }
|
||||
|
||||
private:
|
||||
std::string mSampleText;
|
||||
std::string mAutosaveFilename;
|
||||
std::string mHelpURL;
|
||||
LLTextEditor* mEditor;
|
||||
void (*mLoadCallback)(void* userdata);
|
||||
void (*mSaveCallback)(void* userdata, BOOL close_after_save);
|
||||
@@ -157,7 +157,6 @@ private:
|
||||
void* mUserdata;
|
||||
LLComboBox *mFunctions;
|
||||
BOOL mForceClose;
|
||||
//LLPanel* mGuiPanel;
|
||||
LLPanel* mCodePanel;
|
||||
LLScrollListCtrl* mErrorList;
|
||||
LLDynamicArray<LLEntryAndEdCore*> mBridges;
|
||||
@@ -168,8 +167,8 @@ private:
|
||||
BOOL mEnableSave;
|
||||
BOOL mHasScriptData;
|
||||
LLLiveLSLFile* mLiveFile;
|
||||
LLUUID mObjectUUID;
|
||||
LLUUID mItemUUID;
|
||||
|
||||
LLScriptEdContainer* mContainer; // parent view
|
||||
|
||||
struct LSLFunctionProps
|
||||
{
|
||||
@@ -180,25 +179,47 @@ private:
|
||||
static std::vector<LSLFunctionProps> mParsedFunctions;
|
||||
};
|
||||
|
||||
class LLScriptEdContainer : public LLPreview
|
||||
{
|
||||
friend class LLScriptEdCore;
|
||||
friend class LLMultiPreview;
|
||||
|
||||
public:
|
||||
LLScriptEdContainer(const std::string& name, const LLRect& rect, const std::string& title, const LLUUID& item_id, const LLUUID& object_id = LLUUID::null);
|
||||
|
||||
protected:
|
||||
std::string getTmpFileName();
|
||||
bool onExternalChange(const std::string& filename);
|
||||
virtual void saveIfNeeded(bool sync = true) = 0;
|
||||
|
||||
LLTextEditor* getEditor() { return mScriptEd->mEditor; }
|
||||
/*virtual*/ const char *getTitleName() const { return "Script"; }
|
||||
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
|
||||
// <edit>
|
||||
/*virtual*/ BOOL canSaveAs() const;
|
||||
/*virtual*/ void saveAs();
|
||||
void saveAs_continued(AIFilePicker* filepicker);
|
||||
// </edit>
|
||||
|
||||
LLScriptEdCore* mScriptEd;
|
||||
};
|
||||
|
||||
// Used to view and edit a LSL from your inventory.
|
||||
class LLPreviewLSL : public LLPreview
|
||||
class LLPreviewLSL : public LLScriptEdContainer
|
||||
{
|
||||
public:
|
||||
LLPreviewLSL(const std::string& name, const LLRect& rect, const std::string& title,
|
||||
const LLUUID& item_uuid );
|
||||
LLPreviewLSL(const std::string& name, const LLRect& rect, const std::string& title, const LLUUID& item_uuid );
|
||||
virtual void callbackLSLCompileSucceeded();
|
||||
virtual void callbackLSLCompileFailed(const LLSD& compile_errors);
|
||||
|
||||
/*virtual*/ void open(); /*Flawfinder: ignore*/
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
protected:
|
||||
virtual BOOL canClose();
|
||||
void closeIfNeeded();
|
||||
virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
|
||||
|
||||
virtual void loadAsset();
|
||||
void saveIfNeeded();
|
||||
/*virtual*/ void saveIfNeeded(bool sync = true);
|
||||
void uploadAssetViaCaps(const std::string& url,
|
||||
const std::string& filename,
|
||||
const LLUUID& item_id);
|
||||
@@ -207,11 +228,6 @@ protected:
|
||||
const LLUUID& item_id,
|
||||
const LLTransactionID& tid);
|
||||
#endif
|
||||
// <edit>
|
||||
virtual BOOL canSaveAs() const;
|
||||
virtual void saveAs();
|
||||
void saveAs_continued(AIFilePicker* filepicker);
|
||||
// </edit>
|
||||
|
||||
static void onSearchReplace(void* userdata);
|
||||
static void onLoad(void* userdata);
|
||||
@@ -224,17 +240,13 @@ protected:
|
||||
static void onSaveComplete(const LLUUID& uuid, void* user_data, S32 status, LLExtStat ext_status);
|
||||
static void onSaveBytecodeComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status);
|
||||
#endif
|
||||
public:
|
||||
static LLPreviewLSL* getInstance(const LLUUID& uuid);
|
||||
LLTextEditor* getEditor() { return mScriptEd->mEditor; }
|
||||
|
||||
protected:
|
||||
static void* createScriptEdPanel(void* userdata);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
virtual const char *getTitleName() const { return "Script"; }
|
||||
LLScriptEdCore* mScriptEd;
|
||||
// Can safely close only after both text and bytecode are uploaded
|
||||
S32 mPendingUploads;
|
||||
|
||||
@@ -242,19 +254,13 @@ protected:
|
||||
|
||||
|
||||
// Used to view and edit an LSL that is attached to an object.
|
||||
class LLLiveLSLEditor : public LLPreview
|
||||
class LLLiveLSLEditor : public LLScriptEdContainer
|
||||
{
|
||||
friend class LLLiveLSLFile;
|
||||
public:
|
||||
LLLiveLSLEditor(const std::string& name, const LLRect& rect,
|
||||
const std::string& title,
|
||||
const LLUUID& object_id, const LLUUID& item_id);
|
||||
~LLLiveLSLEditor();
|
||||
LLLiveLSLEditor(const std::string& name, const LLRect& rect, const std::string& title, const LLUUID& object_id, const LLUUID& item_id);
|
||||
|
||||
|
||||
static LLLiveLSLEditor* show(const LLUUID& item_id, const LLUUID& object_id);
|
||||
static void hide(const LLUUID& item_id, const LLUUID& object_id);
|
||||
static LLLiveLSLEditor* find(const LLUUID& item_id, const LLUUID& object_id);
|
||||
|
||||
static void processScriptRunningReply(LLMessageSystem* msg, void**);
|
||||
|
||||
virtual void callbackLSLCompileSucceeded(const LLUUID& task_id,
|
||||
@@ -262,18 +268,18 @@ public:
|
||||
bool is_script_running);
|
||||
virtual void callbackLSLCompileFailed(const LLSD& compile_errors);
|
||||
|
||||
// Overide LLPreview::open() to avoid calling loadAsset twice.
|
||||
/*virtual*/ void open(); /*Flawfinder: ignore*/
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
protected:
|
||||
void setIsNew() { mIsNew = TRUE; }
|
||||
|
||||
private:
|
||||
virtual BOOL canClose();
|
||||
void closeIfNeeded();
|
||||
virtual void draw();
|
||||
virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
|
||||
|
||||
virtual void loadAsset();
|
||||
void loadAsset(BOOL is_new);
|
||||
void saveIfNeeded();
|
||||
/*virtual*/ void saveIfNeeded(bool sync = true);
|
||||
void uploadAssetViaCaps(const std::string& url,
|
||||
const std::string& filename,
|
||||
const LLUUID& task_id,
|
||||
@@ -285,11 +291,8 @@ protected:
|
||||
const LLTransactionID& tid,
|
||||
BOOL is_running);
|
||||
#endif
|
||||
// <edit>
|
||||
virtual BOOL canSaveAs() const;
|
||||
virtual void saveAs();
|
||||
void saveAs_continued(AIFilePicker* filepicker);
|
||||
// </edit>
|
||||
BOOL monoChecked() const;
|
||||
|
||||
|
||||
static void onSearchReplace(void* userdata);
|
||||
static void onLoad(void* userdata);
|
||||
@@ -305,19 +308,16 @@ protected:
|
||||
static void onRunningCheckboxClicked(LLUICtrl*, void* userdata);
|
||||
static void onReset(void* userdata);
|
||||
|
||||
// void loadScriptText(const std::string& filename); // unused
|
||||
void loadScriptText(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type);
|
||||
|
||||
static void onErrorList(LLUICtrl*, void* user_data);
|
||||
|
||||
static void* createScriptEdPanel(void* userdata);
|
||||
|
||||
static void onMonoCheckboxClicked(LLUICtrl*, void* userdata);
|
||||
|
||||
protected:
|
||||
LLUUID mObjectID;
|
||||
LLUUID mItemID; // The inventory item this script is associated with
|
||||
BOOL mIsNew;
|
||||
LLScriptEdCore* mScriptEd;
|
||||
private:
|
||||
bool mIsNew;
|
||||
//LLUUID mTransmitID;
|
||||
LLCheckBoxCtrl *mRunningCheckbox;
|
||||
BOOL mAskedForRunningInfo;
|
||||
@@ -328,14 +328,8 @@ protected:
|
||||
// need to save both text and script, so need to decide when done
|
||||
S32 mPendingUploads;
|
||||
|
||||
static LLMap<LLUUID, LLLiveLSLEditor*> sInstances;
|
||||
BOOL getIsModifiable() const { return mIsModifiable; } // Evaluated on load assert
|
||||
|
||||
private:
|
||||
|
||||
static void onMonoCheckboxClicked(LLUICtrl*, void* userdata);
|
||||
BOOL monoChecked() const;
|
||||
|
||||
LLCheckBoxCtrl* mMonoCheckbox;
|
||||
BOOL mIsModifiable;
|
||||
};
|
||||
|
||||
@@ -9316,6 +9316,17 @@ class ListCopyUUIDs : public view_listener_t
|
||||
}
|
||||
};
|
||||
|
||||
class ListInviteToGroup : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
LLScrollListCtrl* list = get_focused_list();
|
||||
if (!list) return false;
|
||||
LLAvatarActions::inviteToGroup(list->getStringUUIDSelectedItem());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class ListOfferTeleport : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
@@ -9360,6 +9371,17 @@ class ListRequestFriendship : public view_listener_t
|
||||
}
|
||||
};
|
||||
|
||||
class ListRequestTeleport : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
LLScrollListCtrl* list = get_focused_list();
|
||||
if (!list) return false;
|
||||
LLAvatarActions::teleportRequest(list->getStringUUIDSelectedItem());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class ListShowProfile : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
@@ -9473,8 +9495,7 @@ class ListFreeze : public view_listener_t
|
||||
void estate_bulk_eject(const uuid_vec_t& ids, bool ban, S32 zero)
|
||||
{
|
||||
if (ids.empty() || zero != 0) return;
|
||||
std::vector<std::string> strings;
|
||||
strings[0] = gAgentID.asString(); // [0] = our agent id
|
||||
std::vector<std::string> strings(2, gAgentID.asString()); // [0] = our agent id
|
||||
for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it)
|
||||
{
|
||||
LLUUID id(*it);
|
||||
@@ -9837,10 +9858,12 @@ void initialize_menus()
|
||||
addMenu(new ListEnableMute(), "List.EnableMute");
|
||||
addMenu(new ListEnableOfferTeleport(), "List.EnableOfferTeleport");
|
||||
addMenu(new ListCopyUUIDs(), "List.CopyUUIDs");
|
||||
addMenu(new ListInviteToGroup(), "List.InviteToGroup");
|
||||
addMenu(new ListOfferTeleport(), "List.OfferTeleport");
|
||||
addMenu(new ListPay(), "List.Pay");
|
||||
addMenu(new ListRemoveFriend(), "List.RemoveFriend");
|
||||
addMenu(new ListRequestFriendship(), "List.RequestFriendship");
|
||||
addMenu(new ListRequestTeleport(), "List.RequestTeleport");
|
||||
addMenu(new ListShowProfile(), "List.ShowProfile");
|
||||
addMenu(new ListStartAdhocCall(), "List.StartAdhocCall");
|
||||
addMenu(new ListStartCall(), "List.StartCall");
|
||||
|
||||
@@ -1960,7 +1960,7 @@ static std::string clean_name_from_im(const std::string& name, EInstantMessage t
|
||||
case IM_LURE_ACCEPTED:
|
||||
case IM_LURE_DECLINED:
|
||||
case IM_GODLIKE_LURE_USER:
|
||||
case IM_YET_TO_BE_USED:
|
||||
case IM_TELEPORT_REQUEST:
|
||||
case IM_GROUP_ELECTION_DEPRECATED:
|
||||
//IM_GOTO_URL
|
||||
//IM_FROM_TASK_AS_ALERT
|
||||
@@ -3020,8 +3020,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
break;
|
||||
|
||||
case IM_LURE_USER:
|
||||
case IM_TELEPORT_REQUEST:
|
||||
{
|
||||
if(antispam || gSavedSettings.getBOOL("AntiSpamTeleports")) return; //NaCl Antispam
|
||||
if (antispam || gSavedSettings.getBOOL(dialog == IM_LURE_USER ? "AntiSpamTeleports" : "AntiSpamTeleportRequests")) return; //NaCl Antispam
|
||||
// [RLVa:KB] - Checked: 2010-12-11 (RLVa-1.2.2c) | Added: RLVa-1.2.2c
|
||||
// If the lure sender is a specific @accepttp exception they will override muted and busy status
|
||||
bool fRlvSummon = (rlv_handler_t::isEnabled()) && (gRlvHandler.isException(RLV_BHVR_ACCEPTTP, from_id));
|
||||
@@ -3054,7 +3055,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
bool canUserAccessDstRegion = true;
|
||||
bool doesUserRequireMaturityIncrease = false;
|
||||
|
||||
if (parse_lure_bucket(region_info, region_handle, pos, look_at, region_access))
|
||||
// Do not parse the (empty) lure bucket for TELEPORT_REQUEST
|
||||
if (IM_TELEPORT_REQUEST != dialog && parse_lure_bucket(region_info, region_handle, pos, look_at, region_access))
|
||||
{
|
||||
region_access_str = LLViewerRegion::accessToString(region_access);
|
||||
region_access_icn = LLViewerRegion::getAccessIcon(region_access);
|
||||
@@ -3098,7 +3100,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
// [RLVa:KB] - Checked: 2010-12-11 (RLVa-1.2.2c) | Modified: RLVa-1.2.2c
|
||||
if (rlv_handler_t::isEnabled())
|
||||
{
|
||||
if (!gRlvHandler.canTeleportViaLure(from_id))
|
||||
if (IM_TELEPORT_REQUEST != dialog && !gRlvHandler.canTeleportViaLure(from_id))
|
||||
{
|
||||
RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_TPLURE_REMOTE));
|
||||
if (is_busy)
|
||||
@@ -3107,7 +3109,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
}
|
||||
|
||||
// Censor lure message if: 1) restricted from receiving IMs from the sender, or 2) @showloc=n restricted
|
||||
if ( (!gRlvHandler.canReceiveIM(from_id)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) )
|
||||
if ( (!gRlvHandler.canReceiveIM(from_id)) || (IM_TELEPORT_REQUEST != dialog && gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) )
|
||||
{
|
||||
message = RlvStrings::getString(RLV_STRING_HIDDEN);
|
||||
}
|
||||
@@ -3129,7 +3131,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
//LLNotificationsUtil::add("TeleportOffered", args, payload);
|
||||
|
||||
// [RLVa:KB] - Checked: 2010-12-11 (RLVa-1.2.2c) | Modified: RLVa-1.2.2c
|
||||
if ( (rlv_handler_t::isEnabled()) && ((gRlvHandler.hasBehaviour(RLV_BHVR_ACCEPTTP)) || (fRlvSummon)) )
|
||||
if ( IM_TELEPORT_REQUEST != dialog && (rlv_handler_t::isEnabled()) && ((gRlvHandler.hasBehaviour(RLV_BHVR_ACCEPTTP)) || (fRlvSummon)) )
|
||||
{
|
||||
gRlvHandler.setCanCancelTp(false);
|
||||
if (is_busy)
|
||||
@@ -3138,9 +3140,27 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotificationsUtil::add("TeleportOffered", args, payload);
|
||||
/* Singu Note: No default constructor for LLNotification::Params
|
||||
LLNotification::Params params;
|
||||
if (IM_LURE_USER == dialog)
|
||||
{
|
||||
params.name = "TeleportOffered";
|
||||
params.functor_name = "TeleportOffered";
|
||||
}
|
||||
else if (IM_TELEPORT_REQUEST == dialog)
|
||||
{
|
||||
params.name = "TeleportRequest";
|
||||
params.functor_name = "TeleportRequest";
|
||||
}
|
||||
*/
|
||||
LLNotification::Params params(IM_LURE_USER == dialog ? "TeleportOffered" : "TeleportRequest");
|
||||
|
||||
params.substitutions = args;
|
||||
params.payload = payload;
|
||||
LLNotifications::instance().add(params);
|
||||
// <edit>
|
||||
gAgent.showLureDestination(name, region_handle, pos.mV[VX], pos.mV[VY], pos.mV[VZ]);
|
||||
if (IM_LURE_USER == dialog)
|
||||
gAgent.showLureDestination(name, region_handle, pos.mV[VX], pos.mV[VY], pos.mV[VZ]);
|
||||
// </edit>
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
@@ -7440,6 +7460,49 @@ void send_group_notice(const LLUUID& group_id,
|
||||
bin_bucket_size);
|
||||
}
|
||||
|
||||
void send_lures(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
std::string text = response["message"].asString();
|
||||
LLSLURL slurl;
|
||||
LLAgentUI::buildSLURL(slurl);
|
||||
text.append("\r\n").append(slurl.getSLURLString());
|
||||
|
||||
// [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0c) | Modified: RLVa-1.3.0c
|
||||
if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SENDIM)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SENDIMTO)) )
|
||||
{
|
||||
// Filter the lure message if one of the recipients of the lure can't be sent an IM to
|
||||
for (LLSD::array_const_iterator it = notification["payload"]["ids"].beginArray();
|
||||
it != notification["payload"]["ids"].endArray(); ++it)
|
||||
{
|
||||
if (!gRlvHandler.canSendIM(it->asUUID()))
|
||||
{
|
||||
text = RlvStrings::getString(RLV_STRING_HIDDEN);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_StartLure);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->nextBlockFast(_PREHASH_Info);
|
||||
msg->addU8Fast(_PREHASH_LureType, (U8)0); // sim will fill this in.
|
||||
msg->addStringFast(_PREHASH_Message, text);
|
||||
for(LLSD::array_const_iterator it = notification["payload"]["ids"].beginArray();
|
||||
it != notification["payload"]["ids"].endArray();
|
||||
++it)
|
||||
{
|
||||
LLUUID target_id = it->asUUID();
|
||||
|
||||
msg->nextBlockFast(_PREHASH_TargetData);
|
||||
msg->addUUIDFast(_PREHASH_TargetID, target_id);
|
||||
}
|
||||
gAgent.sendReliableMessage();
|
||||
}
|
||||
|
||||
bool handle_lure_callback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
static const unsigned OFFER_RECIPIENT_LIMIT = 250;
|
||||
@@ -7453,49 +7516,12 @@ bool handle_lure_callback(const LLSD& notification, const LLSD& response)
|
||||
LLNotificationsUtil::add("TooManyTeleportOffers", args);
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string text = response["message"].asString();
|
||||
LLSLURL slurl;
|
||||
LLAgentUI::buildSLURL(slurl);
|
||||
text.append("\r\n").append(slurl.getSLURLString());
|
||||
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
|
||||
if(0 == option)
|
||||
{
|
||||
// [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0c) | Modified: RLVa-1.3.0c
|
||||
if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SENDIM)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SENDIMTO)) )
|
||||
{
|
||||
// Filter the lure message if one of the recipients of the lure can't be sent an IM to
|
||||
for (LLSD::array_const_iterator it = notification["payload"]["ids"].beginArray();
|
||||
it != notification["payload"]["ids"].endArray(); ++it)
|
||||
{
|
||||
if (!gRlvHandler.canSendIM(it->asUUID()))
|
||||
{
|
||||
text = RlvStrings::getString(RLV_STRING_HIDDEN);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_StartLure);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->nextBlockFast(_PREHASH_Info);
|
||||
msg->addU8Fast(_PREHASH_LureType, (U8)0); // sim will fill this in.
|
||||
msg->addStringFast(_PREHASH_Message, text);
|
||||
for(LLSD::array_const_iterator it = notification["payload"]["ids"].beginArray();
|
||||
it != notification["payload"]["ids"].endArray();
|
||||
++it)
|
||||
{
|
||||
LLUUID target_id = it->asUUID();
|
||||
|
||||
msg->nextBlockFast(_PREHASH_TargetData);
|
||||
msg->addUUIDFast(_PREHASH_TargetID, target_id);
|
||||
}
|
||||
gAgent.sendReliableMessage();
|
||||
send_lures(notification, response);
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -7551,6 +7577,66 @@ void handle_lure(const uuid_vec_t& ids)
|
||||
}
|
||||
}
|
||||
|
||||
bool teleport_request_callback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
LLUUID from_id = notification["payload"]["from_id"].asUUID();
|
||||
if(from_id.isNull())
|
||||
{
|
||||
llwarns << "from_id is NULL" << llendl;
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string from_name;
|
||||
gCacheName->getFullName(from_id, from_name);
|
||||
|
||||
if(LLMuteList::getInstance()->isMuted(from_id) && !LLMuteList::getInstance()->isLinden(from_name))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
S32 option = 0;
|
||||
if (response.isInteger())
|
||||
{
|
||||
option = response.asInteger();
|
||||
}
|
||||
else
|
||||
{
|
||||
option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
}
|
||||
|
||||
switch(option)
|
||||
{
|
||||
// Yes
|
||||
case 0:
|
||||
{
|
||||
LLSD dummy_notification;
|
||||
dummy_notification["payload"]["ids"][0] = from_id;
|
||||
|
||||
LLSD dummy_response;
|
||||
dummy_response["message"] = response["message"];
|
||||
|
||||
send_lures(dummy_notification, dummy_response);
|
||||
}
|
||||
break;
|
||||
|
||||
// Profile
|
||||
case 3:
|
||||
{
|
||||
LLAvatarActions::showProfile(from_id);
|
||||
LLNotificationsUtil::add(notification["name"], notification["substitutions"], notification["payload"]); //Respawn!
|
||||
}
|
||||
break;
|
||||
|
||||
// No
|
||||
case 1:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLNotificationFunctorRegistration teleport_request_callback_reg("TeleportRequest", teleport_request_callback);
|
||||
|
||||
void send_improved_im(const LLUUID& to_id,
|
||||
const std::string& name,
|
||||
|
||||
@@ -149,6 +149,7 @@ void ScriptCounter::inventoryChanged(LLViewerObject* obj, LLInventoryObject::obj
|
||||
//llinfos << "Deleting script " << id << " in " << objid << llendl;
|
||||
obj->removeInventory(id);
|
||||
--i; // Avoid iteration when removing, everything has shifted
|
||||
end = inv->end();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1383,7 +1383,7 @@ Select the thumbnail to choose a different texture.
|
||||
column_padding="0" draw_border="true" draw_heading="false" enabled="true"
|
||||
follows="top|bottom" heading_font="SansSerifSmall" heading_height="14"
|
||||
height="80" left="20" mouse_opaque="true" multi_select="true"
|
||||
name="AccessList" tool_tip="([LISTED] listed, [MAX] max)" width="195" />
|
||||
name="AccessList" tool_tip="([LISTED] listed, [MAX] max)" width="195" menu_file="menu_avs_list.xml"/>
|
||||
<button bottom_delta="-20" enabled="true" follows="bottom" font="SansSerifSmall"
|
||||
halign="center" height="16" label="Add..." label_selected="Add..."
|
||||
left_delta="5" mouse_opaque="true" name="add_allowed" scale_image="true"
|
||||
@@ -1403,7 +1403,7 @@ Select the thumbnail to choose a different texture.
|
||||
follows="top|bottom" heading_font="SansSerifSmall"
|
||||
heading_height="14" height="80" left_delta="0" mouse_opaque="true"
|
||||
multi_select="true" name="BannedList"
|
||||
tool_tip="([LISTED] listed, [MAX] max)" width="195" />
|
||||
tool_tip="([LISTED] listed, [MAX] max)" width="195" menu_file="menu_avs_list.xml"/>
|
||||
<button bottom_delta="-20" enabled="true" follows="bottom" font="SansSerifSmall"
|
||||
halign="center" height="16" label="Add..." label_selected="Add..."
|
||||
left_delta="5" mouse_opaque="true" name="add_banned" scale_image="true"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<layout_panel mouse_opaque="false" auto_resize="true" user_resize="false" name="active_speakers_panel" height="232">
|
||||
<scroll_list bottom="25" top="232" left="0" right="-1"
|
||||
draw_stripes="false" follows="all" can_resize="true" column_padding="0" draw_heading="true"
|
||||
multi_select="false" name="speakers_list" search_column="1" sort_column="2">
|
||||
multi_select="false" name="speakers_list" search_column="1" sort_column="2" menu_file="menu_avs_list.xml">
|
||||
<column name="icon_speaking_status" sort="speaking_status" width="20" />
|
||||
<column dynamicwidth="true" label="Name" name="speaker_name" />
|
||||
<column label="" name="speaking_status" width="0" />
|
||||
|
||||
@@ -612,7 +612,7 @@ To buy direct, visit the land and click on the place name in the title bar.
|
||||
label="Search" label_selected="Search" left="121" mouse_opaque="true"
|
||||
name="Search" width="95" />
|
||||
<scroll_list background_visible="true" bottom="-510" column_padding="0" draw_border="true"
|
||||
draw_heading="true"
|
||||
draw_heading="true" menu_file="menu_avs_list.xml"
|
||||
|
||||
follows="left|top|right|bottom" height="450" left="4" mouse_opaque="true"
|
||||
multi_select="false" name="results" search_column="2" width="326">
|
||||
|
||||
@@ -548,7 +548,7 @@ To buy direct, visit the land and click on the place name in the title bar.
|
||||
label="Search" label_selected="Search" left="121" mouse_opaque="true"
|
||||
name="Search" width="95" />
|
||||
<scroll_list background_visible="true" bottom="-510" column_padding="0" draw_border="true"
|
||||
draw_heading="true"
|
||||
draw_heading="true" menu_file="menu_avs_list.xml"
|
||||
|
||||
follows="left|top|right|bottom" height="450" left="4" mouse_opaque="true"
|
||||
multi_select="false" name="results" search_column="2" width="326">
|
||||
|
||||
@@ -671,7 +671,7 @@ To buy direct, visit the land and click on the place name in the title bar.
|
||||
label="Search" label_selected="Search" left="121" mouse_opaque="true"
|
||||
name="Search" width="95" />
|
||||
<scroll_list background_visible="true" bottom="-510" column_padding="0" draw_border="true"
|
||||
draw_heading="true"
|
||||
draw_heading="true" menu_file="menu_avs_list.xml"
|
||||
|
||||
follows="left|top|right|bottom" height="450" left="4" mouse_opaque="true"
|
||||
multi_select="false" name="results" search_column="2" width="326">
|
||||
|
||||
@@ -11,9 +11,13 @@
|
||||
<string name="default_text_label">Click here to instant message.</string>
|
||||
<string name="unavailable_text_label">Text chat is not available for this call.</string>
|
||||
<string name="inventory_item_offered">Inventory item offered</string>
|
||||
<button bottom="-37" height="20" label="Profile" left="5" name="profile_callee_btn" width="80"/>
|
||||
<button bottom="-37" follows="left|top" halign="center" height="20" label="History" left_delta="80" name="history_btn" visible="true" width="80"/>
|
||||
<button bottom="-37" height="20" label="Teleport" left_delta="80" name="profile_tele_btn" width="80"/>
|
||||
<flyout_button bottom="-37" height="20" label="Profile" left="5" name="instant_message_flyout" width="80" list_position="below">
|
||||
<flyout_button_item label="History" name="history_btn" value="1"/>
|
||||
<flyout_button_item label="Offer Teleport" name="profile_tele_btn" value="2"/>
|
||||
<flyout_button_item label="Request Teleport" name="profile_tele_btn" value="3"/>
|
||||
<flyout_button_item label="Pay" name="profile_tele_btn" value="4"/>
|
||||
<flyout_button_item label="Invite To Group" name="profile_tele_btn" value="5"/>
|
||||
</flyout_button>
|
||||
<check_box bottom="-37" follows="top" height="20" left_delta="80" name="rp_mode">RP Mode</check_box>
|
||||
<button bottom="-37" follows="left|top" height="20" image_overlay="icn_voice-call-start.tga" image_overlay_alignment="left" label="Call" left_delta="80" name="start_call_btn" width="80"/>
|
||||
<button bottom="-37" follows="top" height="20" image_overlay="icn_voice-call-end.tga" image_overlay_alignment="left" label="End" name="end_call_btn" visible="false" width="80"/>
|
||||
|
||||
@@ -11,10 +11,14 @@
|
||||
<string name="default_text_label">Click here to instant message.</string>
|
||||
<string name="unavailable_text_label">Text chat is not available for this call.</string>
|
||||
<string name="inventory_item_offered">Inventory item offered</string>
|
||||
<button bottom="-20" follows="right|top" height="20" label="Profile" left="135" name="profile_callee_btn" width="60"/>
|
||||
<button bottom="-20" follows="right|top" halign="center" height="20" label="History" left_delta="60" name="history_btn" visible="true" width="60"/>
|
||||
<button bottom="-20" follows="right|top" height="20" label="Teleport" left_delta="60" name="profile_tele_btn" width="70"/>
|
||||
<check_box bottom="-20" follows="right|top" height="20" left_delta="70" name="rp_mode">RP Mode</check_box>
|
||||
<flyout_button bottom="-20" follows="right|top" halign="center" height="20" label="Profile" left_delta="60" name="instant_message_flyout" width="80" list_position="below">
|
||||
<flyout_button_item label="History" name="history_btn" value="1"/>
|
||||
<flyout_button_item label="Offer Teleport" name="profile_tele_btn" value="2"/>
|
||||
<flyout_button_item label="Request Teleport" name="profile_tele_btn" value="3"/>
|
||||
<flyout_button_item label="Pay" name="profile_tele_btn" value="4"/>
|
||||
<flyout_button_item label="Invite To Group" name="profile_tele_btn" value="5"/>
|
||||
</flyout_button>
|
||||
<check_box bottom="-20" follows="right|top" height="20" left_delta="90" name="rp_mode">RP Mode</check_box>
|
||||
<button bottom="-20" follows="right|top" height="20" image_overlay="icn_voice-call-start.tga" image_overlay_alignment="left" label="Call" left_delta="67" name="start_call_btn" width="60"/>
|
||||
<button bottom="-20" follows="right|top" height="20" image_overlay="icn_voice-call-end.tga" image_overlay_alignment="left" scale_image="true" label="End" name="end_call_btn" width="24"/>
|
||||
<panel mouse_opaque="false" border="false" bottom="-20" follows="right|top" height="20" left_delta="16" name="speaker_controls" width="60">
|
||||
|
||||
65
indra/newview/skins/default/xui/en-us/menu_avs_list.xml
Normal file
65
indra/newview/skins/default/xui/en-us/menu_avs_list.xml
Normal file
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<menu name="Avatar Menu" create_jump_keys="true">
|
||||
<menu_item_call label="Profile" name="Profile">
|
||||
<on_click function="List.ShowProfile"/>
|
||||
<on_enable function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Pay" name="Pay">
|
||||
<on_click function="List.Pay"/>
|
||||
<on_enable function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Instant Message" name="Instant Message">
|
||||
<on_click function="List.StartIM"/>
|
||||
<on_visible function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Conference Chat" name="Conference Chat">
|
||||
<on_click function="List.StartConference"/>
|
||||
<on_visible function="List.EnableMultipleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Call" name="Call">
|
||||
<on_click function="List.StartCall"/>
|
||||
<on_enable function="List.EnableCall"/>
|
||||
<on_visible function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Conference Call" name="Conference Call">
|
||||
<on_click function="List.StartAdhocCall"/>
|
||||
<on_enable function="List.EnableCall"/>
|
||||
<on_visible function="List.EnableMultipleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Add Friend" name="Add Friend">
|
||||
<on_click function="List.RequestFriendship"/>
|
||||
<on_enable function="List.EnableSingleSelected"/>
|
||||
<on_visible function="List.EnableIsNotFriend"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Remove Friend" name="Remove Friend">
|
||||
<on_click function="List.RemoveFriend"/>
|
||||
<on_enable function="List.EnableSingleSelected"/>
|
||||
<on_visible function="List.EnableIsFriend"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Invite To Group" name="Invite To Group">
|
||||
<on_click function="List.InviteToGroup"/>
|
||||
<on_visible function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Offer Teleport" name="Offer Teleport">
|
||||
<on_click function="List.OfferTeleport"/>
|
||||
<on_enable function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Request Teleport" name="Request Teleport">
|
||||
<on_click function="List.RequestTeleport"/>
|
||||
<on_visible function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_separator/>
|
||||
<menu_item_call label="Mute/Unmute" name="Mute/Unmute">
|
||||
<on_click function="List.Mute"/>
|
||||
<on_enable function="List.EnableMute"/>
|
||||
<on_visible function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Report Abuse" name="Report Abuse">
|
||||
<on_click function="List.ReportAbuse"/>
|
||||
<on_visible function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Copy Key" name="Copy Key">
|
||||
<on_click function="List.CopyUUIDs"/>
|
||||
<on_enable function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
</menu>
|
||||
@@ -275,6 +275,9 @@
|
||||
mouse_opaque="true" name="Offer Teleport..." width="128">
|
||||
<on_click filter="" function="Inventory.DoToSelected" userdata="lure" />
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Request Teleport..." name="Request Teleport...">
|
||||
<on_click filter="" function="Inventory.DoToSelected" userdata="request_lure" />
|
||||
</menu_item_call>
|
||||
<menu_item_call bottom_delta="-18" height="18" label="Start Conference Chat" left="0"
|
||||
mouse_opaque="true" name="Conference Chat" width="128">
|
||||
<on_click filter="" function="Inventory.BeginIMSession" userdata="selected" />
|
||||
|
||||
@@ -37,6 +37,10 @@
|
||||
<on_enable function="List.EnableSingleSelected"/>
|
||||
<on_visible function="List.EnableIsFriend"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Invite To Group" name="Invite To Group">
|
||||
<on_click function="List.InviteToGroup"/>
|
||||
<on_visible function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Offer Teleport" name="Offer Teleport">
|
||||
<on_click function="List.OfferTeleport"/>
|
||||
<on_enable function="List.EnableAnySelected"/>
|
||||
@@ -45,6 +49,10 @@
|
||||
<on_click function="Radar.TeleportTo"/>
|
||||
<on_enable function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Request Teleport" name="Request Teleport">
|
||||
<on_click function="List.RequestTeleport"/>
|
||||
<on_visible function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Track/Untrack" name="Track/Untrack">
|
||||
<on_click function="Radar.Track"/>
|
||||
<on_enable function="List.EnableSingleSelected"/>
|
||||
|
||||
@@ -3615,6 +3615,27 @@ Join me in [REGION]
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="TeleportRequestPrompt"
|
||||
type="alertmodal">
|
||||
Request a teleport to [NAME] with the following message
|
||||
<tag>confirm</tag>
|
||||
<form name="form">
|
||||
<input name="message" type="text">
|
||||
Teleport me to your location, please.
|
||||
</input>
|
||||
<button
|
||||
default="true"
|
||||
index="0"
|
||||
name="OK"
|
||||
text="OK"/>
|
||||
<button
|
||||
index="1"
|
||||
name="Cancel"
|
||||
text="Cancel"/>
|
||||
</form>
|
||||
</notification>
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="TooManyTeleportOffers"
|
||||
@@ -6765,6 +6786,31 @@ An object named [OBJECTFROMNAME] owned by (an unknown user) has given you a [OBJ
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notify.tga"
|
||||
name="TeleportRequest"
|
||||
type="notify">
|
||||
[NAME] is requesting to be teleported to your location.
|
||||
[MESSAGE]
|
||||
|
||||
Offer a teleport?
|
||||
<tag>confirm</tag>
|
||||
<form name="form">
|
||||
<button
|
||||
index="0"
|
||||
name="Yes"
|
||||
text="Yes"/>
|
||||
<button
|
||||
index="1"
|
||||
name="No"
|
||||
text="No"/>
|
||||
<button
|
||||
index="3"
|
||||
name="Profile"
|
||||
text="Profile"/>
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notify.tga"
|
||||
name="GotoURL"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<panel border="true" name="friends">
|
||||
<string name="Multiple">Multiple friends...</string>
|
||||
<scroll_list bottom="10" can_resize="true" column_padding="0" draw_heading="true" follows="left|top|bottom|right" left="10" multi_select="true"
|
||||
name="friend_list" right="-100" search_column="1" tool_tip="Hold shift or control while clicking to select multiple friends" top="-40">
|
||||
name="friend_list" right="-100" search_column="1" tool_tip="Hold shift or control while clicking to select multiple friends" top="-40" menu_file="menu_avs_list.xml">
|
||||
<column image="ff_online_status_button.tga" name="icon_online_status" tool_tip="Online status" width="20"/>
|
||||
<column dynamicwidth="true" label="Name" name="friend_name" tool_tip="Name"/>
|
||||
<column image="ff_visible_online_button.tga" name="icon_visible_online" tool_tip="Friend can see when you're online" width="20"/>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<panel border="true" name="friends">
|
||||
<string name="Multiple">Multiple friends...</string>
|
||||
<scroll_list bottom="70" can_resize="true" column_padding="0" draw_heading="true" follows="left|top|bottom|right" left="5" multi_select="true"
|
||||
name="friend_list" right="-5" search_column="1" tool_tip="Hold shift or control while clicking to select multiple friends" top="-40">
|
||||
name="friend_list" right="-5" search_column="1" tool_tip="Hold shift or control while clicking to select multiple friends" top="-40" menu_file="menu_avs_list.xml">
|
||||
<column image="ff_online_status_button.tga" name="icon_online_status" tool_tip="Online status" width="20"/>
|
||||
<column dynamicwidth="true" label="Name" name="friend_name" tool_tip="Name"/>
|
||||
<column image="ff_visible_online_button.tga" name="icon_visible_online" tool_tip="Friend can see when you're online" width="20"/>
|
||||
|
||||
@@ -76,7 +76,7 @@ Hover your mouse over the options for more help.
|
||||
<name_list allow_calling_card_drop="false" background_visible="true" bottom_delta="-88"
|
||||
column_padding="0" draw_border="true" draw_heading="true"
|
||||
follows="left|top" heading_font="SansSerifSmall" heading_height="14"
|
||||
height="80" left="7" mouse_opaque="true" multi_select="false"
|
||||
height="80" left="7" mouse_opaque="true" menu_file="menu_avs_list.xml"
|
||||
name="visible_members" width="404">
|
||||
<column label="Member Name" name="name" relwidth="0.45" />
|
||||
<column label="Title" name="title" relwidth="0.30" />
|
||||
|
||||
@@ -111,6 +111,7 @@ The following wildcards are available to enhance your autoresponses: #n for user
|
||||
<check_box control_name="AntiSpamScripts" height="16" label="Scripts" name="Scripts" bottom_delta="0" left_delta="120"/>
|
||||
<check_box control_name="AntiSpamTeleports" height="16" label="Teleport Offers" name="Teleport Offers" bottom_delta="0" left_delta="120"/>
|
||||
<check_box control_name="AntiSpamGroupNotices" height="16" label="Group Notices" name="Group Notices" bottom_delta="0" left_delta="120"/>
|
||||
<check_box control_name="AntiSpamTeleportRequests" height="16" label="Teleport Requests" name="Teleport Requests" left="14" bottom_delta="-20"/>
|
||||
<check_box control_name="EnableGestureSounds" label="Enable Gesture Sounds" name="Enable Gesture Sounds" left="3" bottom_delta="-20"/>
|
||||
</panel>
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</combo_box>
|
||||
</layout_panel>
|
||||
<layout_panel auto_resize="true" bottom="0" can_resize="false" height="120" min_height="100" name="moderate_chat_panel" top_delta="0" user_resize="false" visible="true" width="140">
|
||||
<scroll_list bottom="78" can_resize="false" column_padding="0" draw_heading="true" draw_stripes="false" follows="left|top|bottom|right" left="0" multi_select="false" name="speakers_list" right="140" search_column="1" sort_column="2" top="113">
|
||||
<scroll_list bottom="78" can_resize="false" column_padding="0" draw_heading="true" draw_stripes="false" follows="left|top|bottom|right" left="0" multi_select="false" name="speakers_list" right="140" search_column="1" sort_column="2" top="113" menu_file="menu_avs_list.xml">
|
||||
<column name="icon_speaking_status" sort="speaking_status" width="20"/>
|
||||
<column dynamicwidth="true" label="Name" name="speaker_name"/>
|
||||
<column label="" name="speaking_status" width="0"/>
|
||||
|
||||
Reference in New Issue
Block a user