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

This commit is contained in:
Latif Khalifa
2013-07-31 22:19:30 +02:00
39 changed files with 805 additions and 714 deletions

View File

@@ -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.

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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>

View File

@@ -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);

View File

@@ -107,6 +107,7 @@ protected:
BOOL mBlockItemOfferSpam;
BOOL mBlockScriptSpam;
BOOL mBlockTeleportSpam;
bool mBlockTeleportRequestSpam;
BOOL mNotifyOnSpam;
BOOL mSoundMulti;
U32 mNewLines;

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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

View File

@@ -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)
{

View File

@@ -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.

View File

@@ -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);

View File

@@ -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);

View File

@@ -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"));
}
}

View File

@@ -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);

View File

@@ -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
View File

0
indra/newview/llpanelvoiceeffect.h Executable file → Normal file
View File

File diff suppressed because it is too large Load Diff

View File

@@ -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;
};

View File

@@ -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");

View File

@@ -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,

View File

@@ -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();
}
}
}

View File

@@ -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"

View File

@@ -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" />

View File

@@ -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">

View File

@@ -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">

View File

@@ -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">

View File

@@ -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"/>

View File

@@ -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">

View 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>

View File

@@ -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" />

View File

@@ -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"/>

View File

@@ -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"

View File

@@ -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"/>

View File

@@ -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"/>

View File

@@ -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" />

View File

@@ -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>

View File

@@ -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"/>