FIRE-596: Make the radar a standalone floater
parent
aa0d4f442f
commit
fda3891887
|
|
@ -135,6 +135,7 @@ set(viewer_SOURCE_FILES
|
|||
fsfloaterplacedetails.cpp
|
||||
fsfloaterposestand.cpp
|
||||
fsfloaterprofile.cpp
|
||||
fsfloaterradar.cpp
|
||||
fsfloatersearch.cpp
|
||||
fsfloaterteleporthistory.cpp
|
||||
fsfloatervoicecontrols.cpp
|
||||
|
|
@ -157,7 +158,9 @@ set(viewer_SOURCE_FILES
|
|||
fspanelprofile.cpp
|
||||
fspanelprofileclassifieds.cpp
|
||||
fspose.cpp
|
||||
fsradar.cpp
|
||||
fsradarlistctrl.cpp
|
||||
fsradarmenu.cpp
|
||||
fsslurlcommand.cpp
|
||||
fswsassetblacklist.cpp
|
||||
groupchatlistener.cpp
|
||||
|
|
@ -796,6 +799,7 @@ set(viewer_HEADER_FILES
|
|||
fsfloaterplacedetails.h
|
||||
fsfloaterposestand.h
|
||||
fsfloaterprofile.h
|
||||
fsfloaterradar.h
|
||||
fsfloatersearch.h
|
||||
fsfloaterteleporthistory.h
|
||||
fsfloatervoicecontrols.h
|
||||
|
|
@ -819,7 +823,9 @@ set(viewer_HEADER_FILES
|
|||
fspanelprofile.h
|
||||
fspanelprofileclassifieds.h
|
||||
fspose.h
|
||||
fsradar.h
|
||||
fsradarlistctrl.h
|
||||
fsradarmenu.h
|
||||
fsslurl.h
|
||||
fsslurlcommand.h
|
||||
fswsassetblacklist.h
|
||||
|
|
|
|||
|
|
@ -465,4 +465,14 @@
|
|||
tooltip_ref="Command_Snapshot_To_Disk_Tooltip"
|
||||
execute_function="File.TakeSnapshotToDisk"
|
||||
/>
|
||||
<command name="radar"
|
||||
available_in_toybox="true"
|
||||
icon="radar"
|
||||
label_ref="Command_Radar_Label"
|
||||
tooltip_ref="Command_Radar_Tooltip"
|
||||
execute_function="Floater.Toggle"
|
||||
execute_parameters="fs_radar"
|
||||
is_running_function="Floater.IsOpen"
|
||||
is_running_parameters="fs_radar"
|
||||
/>
|
||||
</commands>
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
|
||||
#include "aoengine.h"
|
||||
#include "fscommon.h"
|
||||
#include "fsradar.h"
|
||||
#include "llagent.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llavatarlist.h"
|
||||
|
|
@ -47,7 +48,6 @@
|
|||
#include "llfloatersidepanelcontainer.h"
|
||||
#include "llinventorymodel.h"
|
||||
#include "llnotificationmanager.h"
|
||||
#include "llpanelpeople.h"
|
||||
#include "llparcel.h"
|
||||
#include "lltooldraganddrop.h"
|
||||
#include "lltrans.h"
|
||||
|
|
@ -1169,11 +1169,11 @@ LLUUID cmdline_partial_name2key(std::string partial_name)
|
|||
std::string av_name;
|
||||
LLStringUtil::toLower(partial_name);
|
||||
|
||||
LLPanelPeople* panel_people = getPeoplePanel();
|
||||
if (panel_people)
|
||||
FSRadar* radar = FSRadar::getInstance();
|
||||
if (radar)
|
||||
{
|
||||
std::vector<LLPanel*> items;
|
||||
LLAvatarList* nearbyList = panel_people->getNearbyList();
|
||||
LLAvatarList* nearbyList = radar->getNearbyList();
|
||||
nearbyList->getItems(items);
|
||||
|
||||
for (std::vector<LLPanel*>::const_iterator itItem = items.begin(); itItem != items.end(); ++itItem)
|
||||
|
|
@ -1195,10 +1195,10 @@ LLUUID cmdline_partial_name2key(std::string partial_name)
|
|||
void cmdline_tp2name(std::string target)
|
||||
{
|
||||
LLUUID avkey = cmdline_partial_name2key(target);
|
||||
LLPanelPeople* panel_people = getPeoplePanel();
|
||||
if (avkey.notNull() && panel_people)
|
||||
FSRadar* radar = FSRadar::getInstance();
|
||||
if (avkey.notNull() && radar)
|
||||
{
|
||||
LLAvatarListItem* avatar_list_item = panel_people->getNearbyList()->getAvatarListItem(avkey);
|
||||
LLAvatarListItem* avatar_list_item = radar->getNearbyList()->getAvatarListItem(avkey);
|
||||
if (avatar_list_item)
|
||||
{
|
||||
LLVector3d pos = avatar_list_item->getPosition();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,473 @@
|
|||
/**
|
||||
* @file fsfloaterradar.cpp
|
||||
* @brief Firestorm radar floater implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2013&license=viewerlgpl$
|
||||
* Copyright (c) 2013 Ansariel Hiller @ Second Life
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
|
||||
* http://www.firestormviewer.org
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "fsfloaterradar.h"
|
||||
|
||||
// libs
|
||||
#include "llfloaterreg.h"
|
||||
#include "lllayoutstack.h"
|
||||
#include "llmenugl.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "lleventtimer.h"
|
||||
#include "llfiltereditor.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llmenubutton.h"
|
||||
#include "lltoggleablemenu.h"
|
||||
|
||||
// newview
|
||||
#include "fsradarmenu.h"
|
||||
#include "llavataractions.h"
|
||||
#include "llfloatersidepanelcontainer.h"
|
||||
#include "llnetmap.h"
|
||||
#include "llviewercontrol.h" // for gSavedSettings
|
||||
#include "llviewermenu.h" // for gMenuHolder
|
||||
#include "llvoiceclient.h"
|
||||
#include "rlvhandler.h"
|
||||
|
||||
|
||||
/**
|
||||
* Update buttons on changes in our friend relations (STORM-557).
|
||||
*/
|
||||
class FSButtonsUpdater : public FSRadar::Updater, public LLFriendObserver
|
||||
{
|
||||
public:
|
||||
FSButtonsUpdater(callback_t cb)
|
||||
: FSRadar::Updater(cb)
|
||||
{
|
||||
LLAvatarTracker::instance().addObserver(this);
|
||||
}
|
||||
|
||||
~FSButtonsUpdater()
|
||||
{
|
||||
LLAvatarTracker::instance().removeObserver(this);
|
||||
}
|
||||
|
||||
/*virtual*/ void changed(U32 mask)
|
||||
{
|
||||
(void) mask;
|
||||
update();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//=============================================================================
|
||||
|
||||
FSFloaterRadar::FSFloaterRadar(const LLSD& key)
|
||||
: LLFloater(key),
|
||||
mFilterSubString(LLStringUtil::null),
|
||||
mFilterSubStringOrig(LLStringUtil::null),
|
||||
mFilterEditor(NULL),
|
||||
mRadarGearButton(NULL),
|
||||
mMiniMap(NULL),
|
||||
mRadarList(NULL)
|
||||
{
|
||||
mButtonsUpdater = new FSButtonsUpdater(boost::bind(&FSFloaterRadar::updateButtons, this));
|
||||
mCommitCallbackRegistrar.add("People.addFriend", boost::bind(&FSFloaterRadar::onAddFriendButtonClicked, this));
|
||||
}
|
||||
|
||||
FSFloaterRadar::~FSFloaterRadar()
|
||||
{
|
||||
mUpdateSignalConnection.disconnect();
|
||||
delete mButtonsUpdater;
|
||||
|
||||
if(LLVoiceClient::instanceExists())
|
||||
{
|
||||
LLVoiceClient::getInstance()->removeObserver(this);
|
||||
}
|
||||
|
||||
if (mRadarGearMenuHandle.get()) mRadarGearMenuHandle.get()->die();
|
||||
}
|
||||
|
||||
BOOL FSFloaterRadar::postBuild()
|
||||
{
|
||||
mFilterEditor = getChild<LLFilterEditor>("filter_input");
|
||||
mFilterEditor->setCommitCallback(boost::bind(&FSFloaterRadar::onFilterEdit, this, _2));
|
||||
|
||||
// AO: radarlist takes over for nearbylist for presentation.
|
||||
mRadarList = getChild<FSRadarListCtrl>("radar_list");
|
||||
mRadarList->sortByColumn("range", TRUE); // sort by range
|
||||
mRadarList->setFilterColumn(0);
|
||||
mRadarList->setContextMenu(&FSFloaterRadarMenu::gFSRadarMenu);
|
||||
mRadarList->setDoubleClickCallback(boost::bind(&FSFloaterRadar::onRadarListDoubleClicked, this));
|
||||
mRadarList->setCommitCallback(boost::bind(&FSFloaterRadar::onRadarListCommitted, this));
|
||||
|
||||
mMiniMap = getChild<LLNetMap>("Net Map");
|
||||
|
||||
buttonSetAction("view_profile_btn", boost::bind(&FSFloaterRadar::onViewProfileButtonClicked, this));
|
||||
buttonSetAction("im_btn", boost::bind(&FSFloaterRadar::onImButtonClicked, this));
|
||||
buttonSetAction("call_btn", boost::bind(&FSFloaterRadar::onCallButtonClicked, this));
|
||||
buttonSetAction("teleport_btn", boost::bind(&FSFloaterRadar::onTeleportButtonClicked, this));
|
||||
buttonSetAction("share_btn", boost::bind(&FSFloaterRadar::onShareButtonClicked, this));
|
||||
|
||||
// Create menus.
|
||||
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
|
||||
LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
|
||||
|
||||
registrar.add("Radar.Gear.Action", boost::bind(&FSFloaterRadar::onGearMenuItemClicked, this, _2));
|
||||
registrar.add("Radar.NameFmt", boost::bind(&FSRadar::onRadarNameFmtClicked, _2));
|
||||
registrar.add("Radar.ReportTo", boost::bind(&FSRadar::onRadarReportToClicked, _2));
|
||||
|
||||
enable_registrar.add("Radar.NameFmtCheck", boost::bind(&FSRadar::radarNameFmtCheck, _2));
|
||||
enable_registrar.add("Radar.ReportToCheck", boost::bind(&FSRadar::radarReportToCheck, _2));
|
||||
|
||||
mRadarGearButton = getChild<LLMenuButton>("nearby_view_sort_btn");
|
||||
|
||||
LLToggleableMenu* radar_gear = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_fs_radar_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
|
||||
if (radar_gear)
|
||||
{
|
||||
mRadarGearMenuHandle = radar_gear->getHandle();
|
||||
mRadarGearButton->setMenu(radar_gear);
|
||||
}
|
||||
|
||||
LLVoiceClient::getInstance()->addObserver(this);
|
||||
|
||||
// Register for radar updates
|
||||
mUpdateSignalConnection = FSRadar::getInstance()->setUpdateCallback(boost::bind(&FSFloaterRadar::updateNearby, this, _1, _2));
|
||||
|
||||
// call this method in case some list is empty and buttons can be in inconsistent state
|
||||
updateButtons();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// virtual
|
||||
void FSFloaterRadar::onOpen(const LLSD& key)
|
||||
{
|
||||
// Fill radar with most recent data so we don't have a blank window until next radar update
|
||||
FSRadar* radar = FSRadar::getInstance();
|
||||
if (radar)
|
||||
{
|
||||
std::vector<LLSD> entries;
|
||||
LLSD stats;
|
||||
radar->getCurrentData(entries, stats);
|
||||
updateNearby(entries, stats);
|
||||
}
|
||||
LLFloater::onOpen(key);
|
||||
}
|
||||
|
||||
// virtual
|
||||
void FSFloaterRadar::onChange(EStatusType status, const std::string &channelURI, bool proximal)
|
||||
{
|
||||
if (status == STATUS_JOINING || status == STATUS_LEFT_CHANNEL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
updateButtons();
|
||||
}
|
||||
|
||||
void FSFloaterRadar::buttonSetEnabled(const std::string& btn_name, bool enabled)
|
||||
{
|
||||
// To make sure we're referencing the right widget (a child of the button bar).
|
||||
LLButton* button = getChild<LLView>("button_bar")->getChild<LLButton>(btn_name);
|
||||
button->setEnabled(enabled);
|
||||
}
|
||||
|
||||
void FSFloaterRadar::buttonSetAction(const std::string& btn_name, const commit_signal_t::slot_type& cb)
|
||||
{
|
||||
// To make sure we're referencing the right widget (a child of the button bar).
|
||||
LLButton* button = getChild<LLView>("button_bar")->getChild<LLButton>(btn_name);
|
||||
button->setClickedCallback(cb);
|
||||
}
|
||||
|
||||
void FSFloaterRadar::updateButtons()
|
||||
{
|
||||
LLUUID selected_id;
|
||||
|
||||
uuid_vec_t selected_uuids;
|
||||
getCurrentItemIDs(selected_uuids);
|
||||
|
||||
bool item_selected = (selected_uuids.size() == 1);
|
||||
bool multiple_selected = (selected_uuids.size() >= 1);
|
||||
|
||||
// Check whether selected avatar is our friend.
|
||||
bool is_friend = true;
|
||||
if (item_selected)
|
||||
{
|
||||
selected_id = selected_uuids.front();
|
||||
is_friend = LLAvatarTracker::instance().getBuddyInfo(selected_id) != NULL;
|
||||
}
|
||||
getChildView("add_friend_btn_nearby")->setEnabled(!is_friend && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES));
|
||||
|
||||
|
||||
bool enable_calls = LLVoiceClient::getInstance()->isVoiceWorking() && LLVoiceClient::getInstance()->voiceEnabled();
|
||||
|
||||
// [RLVa:KB] - Checked: 2010-06-04 (RLVa-1.2.2a) | Modified: RLVa-1.2.0d
|
||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
|
||||
{
|
||||
item_selected = multiple_selected = false;
|
||||
}
|
||||
// [/RLBa:KB]
|
||||
|
||||
buttonSetEnabled("view_profile_btn",item_selected);
|
||||
buttonSetEnabled("share_btn", item_selected);
|
||||
buttonSetEnabled("im_btn", multiple_selected); // allow starting the friends conference for multiple selection
|
||||
buttonSetEnabled("call_btn", multiple_selected && enable_calls);
|
||||
buttonSetEnabled("teleport_btn", multiple_selected /* && LLAvatarActions::canOfferTeleport(selected_uuids) */ ); // LO - Dont block the TP button at all.
|
||||
}
|
||||
|
||||
LLUUID FSFloaterRadar::getCurrentItemID() const
|
||||
{
|
||||
LLScrollListItem* item = mRadarList->getFirstSelected();
|
||||
if (item)
|
||||
{
|
||||
return item->getColumn(mRadarList->getColumn("uuid")->mIndex)->getValue().asUUID();
|
||||
}
|
||||
|
||||
return LLUUID::null;
|
||||
}
|
||||
|
||||
void FSFloaterRadar::getCurrentItemIDs(uuid_vec_t& selected_uuids) const
|
||||
{
|
||||
for (size_t i = 0; i < mRadarList->getAllSelected().size(); ++i)
|
||||
{
|
||||
selected_uuids.push_back(mRadarList->getAllSelected().at(i)->getColumn(mRadarList->getColumn("uuid")->mIndex)->getValue().asUUID());
|
||||
}
|
||||
}
|
||||
|
||||
void FSFloaterRadar::onFilterEdit(const std::string& search_string)
|
||||
{
|
||||
mFilterSubStringOrig = search_string;
|
||||
LLStringUtil::trimHead(mFilterSubStringOrig);
|
||||
// Searches are case-insensitive
|
||||
std::string search_upper = mFilterSubStringOrig;
|
||||
LLStringUtil::toUpper(search_upper);
|
||||
|
||||
if (mFilterSubString == search_upper)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
mFilterSubString = search_upper;
|
||||
|
||||
// Apply new filter.
|
||||
mRadarList->setFilterString(mFilterSubStringOrig);
|
||||
}
|
||||
|
||||
void FSFloaterRadar::onRadarListDoubleClicked()
|
||||
{
|
||||
LLScrollListItem* item = mRadarList->getFirstSelected();
|
||||
if (!item)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLUUID clicked_id = item->getColumn(mRadarList->getColumn("uuid")->mIndex)->getValue().asUUID();
|
||||
std::string name = item->getColumn(mRadarList->getColumn("name")->mIndex)->getValue().asString();
|
||||
|
||||
FSRadar* radar = FSRadar::getInstance();
|
||||
if (radar)
|
||||
{
|
||||
radar->zoomAvatar(clicked_id, name);
|
||||
}
|
||||
}
|
||||
|
||||
void FSFloaterRadar::onRadarListCommitted()
|
||||
{
|
||||
uuid_vec_t selected_uuids;
|
||||
LLUUID sVal = mRadarList->getSelectedValue().asUUID();
|
||||
if (sVal.notNull())
|
||||
{
|
||||
selected_uuids.push_back(sVal);
|
||||
mMiniMap->setSelected(selected_uuids);
|
||||
}
|
||||
|
||||
updateButtons();
|
||||
}
|
||||
|
||||
void FSFloaterRadar::onViewProfileButtonClicked()
|
||||
{
|
||||
LLUUID id = getCurrentItemID();
|
||||
LLAvatarActions::showProfile(id);
|
||||
}
|
||||
|
||||
void FSFloaterRadar::onAddFriendButtonClicked()
|
||||
{
|
||||
LLUUID id = getCurrentItemID();
|
||||
if (id.notNull())
|
||||
{
|
||||
LLAvatarActions::requestFriendshipDialog(id);
|
||||
}
|
||||
}
|
||||
|
||||
void FSFloaterRadar::onImButtonClicked()
|
||||
{
|
||||
uuid_vec_t selected_uuids;
|
||||
getCurrentItemIDs(selected_uuids);
|
||||
if ( selected_uuids.size() == 1 )
|
||||
{
|
||||
// if selected only one person then start up IM
|
||||
LLAvatarActions::startIM(selected_uuids.at(0));
|
||||
}
|
||||
else if ( selected_uuids.size() > 1 )
|
||||
{
|
||||
// for multiple selection start up friends conference
|
||||
LLAvatarActions::startConference(selected_uuids);
|
||||
}
|
||||
}
|
||||
|
||||
void FSFloaterRadar::onCallButtonClicked()
|
||||
{
|
||||
uuid_vec_t selected_uuids;
|
||||
getCurrentItemIDs(selected_uuids);
|
||||
|
||||
if (selected_uuids.size() == 1)
|
||||
{
|
||||
// initiate a P2P voice chat with the selected user
|
||||
LLAvatarActions::startCall(getCurrentItemID());
|
||||
}
|
||||
else if (selected_uuids.size() > 1)
|
||||
{
|
||||
// initiate an ad-hoc voice chat with multiple users
|
||||
LLAvatarActions::startAdhocCall(selected_uuids);
|
||||
}
|
||||
}
|
||||
|
||||
void FSFloaterRadar::onTeleportButtonClicked()
|
||||
{
|
||||
uuid_vec_t selected_uuids;
|
||||
getCurrentItemIDs(selected_uuids);
|
||||
LLAvatarActions::offerTeleport(LLAvatarActions::canOfferTeleport(selected_uuids));
|
||||
}
|
||||
|
||||
void FSFloaterRadar::onShareButtonClicked()
|
||||
{
|
||||
LLAvatarActions::share(getCurrentItemID());
|
||||
}
|
||||
|
||||
void FSFloaterRadar::onGearMenuItemClicked(const LLSD& userdata)
|
||||
{
|
||||
std::string chosen_item = userdata.asString();
|
||||
|
||||
if (chosen_item == "panel_block_list_sidetray")
|
||||
{
|
||||
if (gSavedSettings.getBOOL("FSUseStandaloneBlocklistFloater"))
|
||||
{
|
||||
LLFloaterReg::showInstance("fs_blocklist", LLSD());
|
||||
}
|
||||
else
|
||||
{
|
||||
LLFloaterSidePanelContainer::showPanel("people", "panel_block_list_sidetray", LLSD());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FSFloaterRadar::updateNearby(const std::vector<LLSD>& entries, const LLSD& stats)
|
||||
{
|
||||
if (!getVisible())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mRadarList)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Store current selection and scroll position
|
||||
static S32 uuidColumnIndex = mRadarList->getColumn("uuid")->mIndex;
|
||||
std::vector<LLScrollListItem*> selected_items = mRadarList->getAllSelected();
|
||||
uuid_vec_t selected_ids;
|
||||
for (size_t i = 0; i < selected_items.size(); i++)
|
||||
{
|
||||
selected_ids.push_back(selected_items.at(i)->getColumn(uuidColumnIndex)->getValue().asUUID());
|
||||
}
|
||||
S32 lastScroll = mRadarList->getScrollPos();
|
||||
|
||||
// Update list
|
||||
mRadarList->clearRows();
|
||||
const std::vector<LLSD>::const_iterator it_end = entries.end();
|
||||
for (std::vector<LLSD>::const_iterator it = entries.begin(); it != it_end; ++it)
|
||||
{
|
||||
LLSD entry = (*it)["entry"];
|
||||
LLSD options = (*it)["options"];
|
||||
|
||||
LLSD row_data;
|
||||
row_data["value"] = entry["id"];
|
||||
row_data["columns"][0]["column"] = "name";
|
||||
row_data["columns"][0]["value"] = entry["name"];
|
||||
row_data["columns"][1]["column"] = "voice_level";
|
||||
row_data["columns"][1]["type"] = "icon";
|
||||
row_data["columns"][1]["value"] = ""; // Need to set it after the row has been created because it's to big for the row
|
||||
row_data["columns"][2]["column"] = "in_region";
|
||||
row_data["columns"][2]["type"] = "icon";
|
||||
row_data["columns"][2]["value"] = (entry["in_region"].asBoolean() ? "avatar_in_region" : "");
|
||||
row_data["columns"][3]["column"] = "flags";
|
||||
row_data["columns"][3]["value"] = entry["flags"];
|
||||
row_data["columns"][4]["column"] = "age";
|
||||
row_data["columns"][4]["value"] = entry["age"];
|
||||
row_data["columns"][5]["column"] = "seen";
|
||||
row_data["columns"][5]["value"] = entry["seen"];
|
||||
row_data["columns"][6]["column"] = "range";
|
||||
row_data["columns"][6]["value"] = entry["range"];
|
||||
row_data["columns"][7]["column"] = "uuid"; // invisible column for referencing av-key the row belongs to
|
||||
row_data["columns"][7]["value"] = entry["id"];
|
||||
|
||||
LLScrollListItem* row = mRadarList->addElement(row_data);
|
||||
|
||||
static S32 rangeColumnIndex = mRadarList->getColumn("range")->mIndex;
|
||||
static S32 nameColumnIndex = mRadarList->getColumn("name")->mIndex;
|
||||
static S32 voiceLevelColumnIndex = mRadarList->getColumn("voice_level")->mIndex;
|
||||
|
||||
LLScrollListText* radarRangeCell = (LLScrollListText*)row->getColumn(rangeColumnIndex);
|
||||
radarRangeCell->setColor(LLColor4(options["range_color"]));
|
||||
radarRangeCell->setFontStyle(options["range_style"].asInteger());
|
||||
|
||||
LLScrollListText* radarNameCell = (LLScrollListText*)row->getColumn(nameColumnIndex);
|
||||
radarNameCell->setFontStyle(options["name_style"].asInteger());
|
||||
if (options.has("name_color"))
|
||||
{
|
||||
radarNameCell->setColor(LLColor4(options["name_color"]));
|
||||
}
|
||||
|
||||
LLScrollListText* voiceLevelCell = (LLScrollListText*)row->getColumn(voiceLevelColumnIndex);
|
||||
if (entry.has("voice_level_icon"))
|
||||
{
|
||||
voiceLevelCell->setValue(entry["voice_level_icon"].asString());
|
||||
}
|
||||
}
|
||||
|
||||
LLStringUtil::format_map_t name_count_args;
|
||||
name_count_args["[TOTAL]"] = stats["total"].asString();
|
||||
name_count_args["[IN_REGION]"] = stats["region"].asString();
|
||||
name_count_args["[IN_CHAT_RANGE]"] = stats["chatrange"].asString();
|
||||
LLScrollListColumn* column = mRadarList->getColumn("name");
|
||||
column->mHeader->setLabel(getString("avatar_name_count", name_count_args));
|
||||
column->mHeader->setToolTipArgs(name_count_args);
|
||||
|
||||
// Restore scroll position
|
||||
mRadarList->setScrollPos(lastScroll);
|
||||
|
||||
// Restore selection list
|
||||
if (!selected_ids.empty())
|
||||
{
|
||||
mRadarList->selectMultiple(selected_ids);
|
||||
}
|
||||
|
||||
updateButtons();
|
||||
}
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
/**
|
||||
* @file fsfloaterradar.h
|
||||
* @brief Firestorm radar floater implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2013&license=viewerlgpl$
|
||||
* Copyright (c) 2013 Ansariel Hiller @ Second Life
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
|
||||
* http://www.firestormviewer.org
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef FS_FLOATERRADAR_H
|
||||
#define FS_FLOATERRADAR_H
|
||||
|
||||
#include "llfloater.h"
|
||||
|
||||
#include "fsradar.h"
|
||||
#include "fsradarlistctrl.h"
|
||||
#include "llcallingcard.h" // for avatar tracker
|
||||
#include "llvoiceclient.h"
|
||||
|
||||
class LLFilterEditor;
|
||||
class LLMenuButton;
|
||||
|
||||
class FSFloaterRadar
|
||||
: public LLFloater
|
||||
, public LLVoiceClientStatusObserver
|
||||
{
|
||||
LOG_CLASS(FSFloaterRadar);
|
||||
public:
|
||||
FSFloaterRadar(const LLSD &);
|
||||
virtual ~FSFloaterRadar();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
// Implements LLVoiceClientStatusObserver::onChange() to enable call buttons
|
||||
// when voice is available
|
||||
/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
|
||||
|
||||
static void onRadarNameFmtClicked(const LLSD& userdata);
|
||||
static bool radarNameFmtCheck(const LLSD& userdata);
|
||||
static void onRadarReportToClicked(const LLSD& userdata);
|
||||
static bool radarReportToCheck(const LLSD& userdata);
|
||||
|
||||
void updateNearby(const std::vector<LLSD>& entries, const LLSD& stats);
|
||||
|
||||
private:
|
||||
void updateButtons();
|
||||
LLUUID getCurrentItemID() const;
|
||||
void getCurrentItemIDs(uuid_vec_t& selected_uuids) const;
|
||||
void buttonSetEnabled(const std::string& btn_name, bool enabled);
|
||||
void buttonSetAction(const std::string& btn_name, const commit_signal_t::slot_type& cb);
|
||||
|
||||
// UI callbacks
|
||||
void onFilterEdit(const std::string& search_string);
|
||||
void onViewProfileButtonClicked();
|
||||
void onAddFriendButtonClicked();
|
||||
void onImButtonClicked();
|
||||
void onCallButtonClicked();
|
||||
void onTeleportButtonClicked();
|
||||
void onShareButtonClicked();
|
||||
void onRadarListCommitted();
|
||||
void onRadarListDoubleClicked();
|
||||
void onGearMenuItemClicked(const LLSD& userdata);
|
||||
|
||||
LLFilterEditor* mFilterEditor;
|
||||
FSRadarListCtrl* mRadarList;
|
||||
LLNetMap* mMiniMap;
|
||||
|
||||
LLHandle<LLView> mRadarGearMenuHandle;
|
||||
|
||||
FSRadar::Updater* mButtonsUpdater;
|
||||
|
||||
LLMenuButton* mRadarGearButton;
|
||||
|
||||
std::string mFilterSubString;
|
||||
std::string mFilterSubStringOrig;
|
||||
|
||||
boost::signals2::connection mUpdateSignalConnection;
|
||||
};
|
||||
|
||||
#endif // FS_FLOATERRADAR_H
|
||||
|
|
@ -33,7 +33,7 @@
|
|||
#include "fslslbridge.h"
|
||||
#include <string>
|
||||
#include <boost/tokenizer.hpp> // for radar
|
||||
#include "llpanelpeople.h"
|
||||
#include "fsradar.h"
|
||||
#include "llavatarlist.h"
|
||||
#include "llavatarlistitem.h"
|
||||
|
||||
|
|
@ -93,10 +93,10 @@ FSLSLBridgeRequestRadarPosResponder::FSLSLBridgeRequestRadarPosResponder()
|
|||
}
|
||||
void FSLSLBridgeRequestRadarPosResponder::result(const LLSD& content)
|
||||
{
|
||||
LLPanelPeople* panel_people = getPeoplePanel();
|
||||
if (panel_people)
|
||||
FSRadar* radar = FSRadar::getInstance();
|
||||
if (radar)
|
||||
{
|
||||
LLAvatarList* nearbyList = panel_people->getNearbyList();
|
||||
LLAvatarList* nearbyList = radar->getNearbyList();
|
||||
|
||||
std::string strContent = content.asString();
|
||||
//llinfos << "Got info: " << strContent << llendl;
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,143 @@
|
|||
/**
|
||||
* @file fsradar.h
|
||||
* @brief Firestorm radar implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2013&license=viewerlgpl$
|
||||
* Copyright (c) 2013 Ansariel Hiller @ Second Life
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
|
||||
* http://www.firestormviewer.org
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef FS_RADAR_H
|
||||
#define FS_RADAR_H
|
||||
|
||||
#include "llsingleton.h"
|
||||
|
||||
class LLAvatarList;
|
||||
class LLAvatarName;
|
||||
|
||||
const U32 FSRADAR_MAX_AVATARS_PER_ALERT = 6; // maximum number of UUIDs we can cram into a single channel radar alert message
|
||||
const U32 FSRADAR_COARSE_OFFSET_INTERVAL = 7; // seconds after which we query the bridge for a coarse location adjustment
|
||||
const U32 FSRADAR_MAX_OFFSET_REQUESTS = 60; // 2048 / UUID size, leaving overhead space
|
||||
const U32 FSRADAR_CHAT_MIN_SPACING = 6; // minimum delay between radar chat messages
|
||||
|
||||
const U32 FSRADAR_NAMEFORMAT_DISPLAYNAME = 0;
|
||||
const U32 FSRADAR_NAMEFORMAT_USERNAME = 1;
|
||||
const U32 FSRADAR_NAMEFORMAT_DISPLAYNAME_USERNAME = 2;
|
||||
const U32 FSRADAR_NAMEFORMAT_USERNAME_DISPLAYNAME = 3;
|
||||
|
||||
|
||||
class FSRadar
|
||||
: public LLSingleton<FSRadar>
|
||||
{
|
||||
LOG_CLASS(FSRadar);
|
||||
|
||||
friend class LLSingleton<FSRadar>;
|
||||
|
||||
public:
|
||||
// [RLVa:KB] - Checked: 2010-04-05 (RLVa-1.2.0d) | Added: RLVa-1.2.0d
|
||||
LLAvatarList* getNearbyList() { return mNearbyList; }
|
||||
// [/RLVa:KB]
|
||||
|
||||
void startTracking(const LLUUID& avatar_id);
|
||||
void zoomAvatar(const LLUUID& avatar_id, const std::string& name);
|
||||
void teleportToAvatar(const LLUUID& targetAv);
|
||||
void requestRadarChannelAlertSync();
|
||||
|
||||
static void onRadarNameFmtClicked(const LLSD& userdata);
|
||||
static bool radarNameFmtCheck(const LLSD& userdata);
|
||||
static void onRadarReportToClicked(const LLSD& userdata);
|
||||
static bool radarReportToCheck(const LLSD& userdata);
|
||||
|
||||
void getCurrentData(std::vector<LLSD>& entries, LLSD& stats) const { entries = mRadarEntriesData; stats = mAvatarStats; }
|
||||
|
||||
// internals
|
||||
class Updater
|
||||
{
|
||||
public:
|
||||
typedef boost::function<void()> callback_t;
|
||||
Updater(callback_t cb)
|
||||
: mCallback(cb)
|
||||
{ }
|
||||
|
||||
virtual ~Updater()
|
||||
{ }
|
||||
|
||||
protected:
|
||||
void update()
|
||||
{
|
||||
mCallback();
|
||||
}
|
||||
|
||||
callback_t mCallback;
|
||||
};
|
||||
|
||||
typedef boost::signals2::signal<void(const std::vector<LLSD>& entries, const LLSD& stats)> radar_update_callback_t;
|
||||
boost::signals2::connection setUpdateCallback(const radar_update_callback_t::slot_type& cb)
|
||||
{
|
||||
return mUpdateSignal.connect(cb);
|
||||
}
|
||||
|
||||
private:
|
||||
FSRadar();
|
||||
virtual ~FSRadar();
|
||||
|
||||
void updateRadarList();
|
||||
void updateTracking();
|
||||
void checkTracking();
|
||||
|
||||
std::string getRadarName(const LLUUID& avId);
|
||||
std::string getRadarName(const LLAvatarName& avName);
|
||||
void radarAlertMsg(const LLUUID& agent_id, const LLAvatarName& av_name, const std::string& postMsg);
|
||||
|
||||
LLAvatarList* mNearbyList;
|
||||
|
||||
Updater* mRadarListUpdater;
|
||||
|
||||
struct radarFields
|
||||
{
|
||||
std::string avName;
|
||||
F32 lastDistance;
|
||||
LLVector3d lastGlobalPos;
|
||||
LLUUID lastRegion;
|
||||
time_t firstSeen;
|
||||
S32 lastStatus;
|
||||
U32 ZOffset;
|
||||
time_t lastZOffsetTime;
|
||||
|
||||
};
|
||||
|
||||
std::multimap < LLUUID, radarFields > lastRadarSweep;
|
||||
std::vector <LLUUID> mRadarEnterAlerts;
|
||||
std::vector <LLUUID> mRadarLeaveAlerts;
|
||||
std::vector <LLUUID> mRadarOffsetRequests;
|
||||
std::vector <LLSD> mRadarEntriesData;
|
||||
|
||||
S32 mRadarFrameCount;
|
||||
bool mRadarAlertRequest;
|
||||
F32 mRadarLastRequestTime;
|
||||
U32 mRadarLastBulkOffsetRequestTime;
|
||||
|
||||
LLUUID mTrackedAvatarId;
|
||||
LLSD mAvatarStats;
|
||||
|
||||
radar_update_callback_t mUpdateSignal;
|
||||
};
|
||||
|
||||
#endif // FS_RADAR_H
|
||||
|
|
@ -0,0 +1,250 @@
|
|||
/**
|
||||
* @file fsradarmenu.cpp
|
||||
* @brief Menu used by Firestorm radar
|
||||
*
|
||||
* $LicenseInfo:firstyear=2013&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (c) 2013 Ansariel Hiller @ Second Life
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
|
||||
* http://www.firestormviewer.org
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
// libs
|
||||
#include "llmenugl.h"
|
||||
#include "lluictrlfactory.h"
|
||||
|
||||
#include "fsradarmenu.h"
|
||||
|
||||
// newview
|
||||
#include "fsradar.h"
|
||||
#include "llagent.h"
|
||||
#include "llagentdata.h" // for gAgentID
|
||||
#include "llavataractions.h"
|
||||
#include "llcallingcard.h" // for LLAvatarTracker
|
||||
#include "llviewermenu.h" // for gMenuHolder
|
||||
|
||||
namespace FSFloaterRadarMenu
|
||||
{
|
||||
|
||||
FSRadarMenu gFSRadarMenu;
|
||||
|
||||
//== NearbyMenu ===============================================================
|
||||
|
||||
LLContextMenu* FSRadarMenu::createMenu()
|
||||
{
|
||||
// set up the callbacks for all of the avatar menu items
|
||||
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
|
||||
LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
|
||||
|
||||
if ( mUUIDs.size() == 1 )
|
||||
{
|
||||
// Set up for one person selected menu
|
||||
|
||||
const LLUUID& id = mUUIDs.front();
|
||||
registrar.add("Avatar.Profile", boost::bind(&LLAvatarActions::showProfile, id));
|
||||
registrar.add("Avatar.AddFriend", boost::bind(&LLAvatarActions::requestFriendshipDialog, id));
|
||||
registrar.add("Avatar.RemoveFriend", boost::bind(&LLAvatarActions::removeFriendDialog, id));
|
||||
registrar.add("Avatar.IM", boost::bind(&LLAvatarActions::startIM, id));
|
||||
registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startCall, id));
|
||||
registrar.add("Avatar.OfferTeleport", boost::bind(&FSRadarMenu::offerTeleport, this));
|
||||
registrar.add("Avatar.GroupInvite", boost::bind(&LLAvatarActions::inviteToGroup, id));
|
||||
registrar.add("Avatar.getScriptInfo", boost::bind(&LLAvatarActions::getScriptInfo, id));
|
||||
registrar.add("Avatar.ShowOnMap", boost::bind(&LLAvatarActions::showOnMap, id));
|
||||
registrar.add("Avatar.Share", boost::bind(&LLAvatarActions::share, id));
|
||||
registrar.add("Avatar.Pay", boost::bind(&LLAvatarActions::pay, id));
|
||||
registrar.add("Avatar.BlockUnblock", boost::bind(&LLAvatarActions::toggleBlock, id));
|
||||
registrar.add("Avatar.ZoomIn", boost::bind(&LLAvatarActions::zoomIn, id));
|
||||
registrar.add("Avatar.Report", boost::bind(&LLAvatarActions::report, id));
|
||||
registrar.add("Avatar.Eject", boost::bind(&LLAvatarActions::landEject, id));
|
||||
registrar.add("Avatar.Freeze", boost::bind(&LLAvatarActions::landFreeze, id));
|
||||
registrar.add("Avatar.Kick", boost::bind(&LLAvatarActions::estateKick, id));
|
||||
registrar.add("Avatar.TeleportHome", boost::bind(&LLAvatarActions::estateTeleportHome, id));
|
||||
registrar.add("Avatar.EstateBan", boost::bind(&LLAvatarActions::estateBan, id));
|
||||
registrar.add("Avatar.Derender", boost::bind(&LLAvatarActions::derender, id, false));
|
||||
registrar.add("Avatar.DerenderPermanent", boost::bind(&LLAvatarActions::derender, id, true));
|
||||
registrar.add("Nearby.People.TeleportToAvatar", boost::bind(&FSRadarMenu::teleportToAvatar, this));
|
||||
registrar.add("Nearby.People.TrackAvatar", boost::bind(&FSRadarMenu::onTrackAvatarMenuItemClick, this));
|
||||
|
||||
enable_registrar.add("Avatar.EnableItem", boost::bind(&FSRadarMenu::enableContextMenuItem, this, _2));
|
||||
enable_registrar.add("Avatar.CheckItem", boost::bind(&FSRadarMenu::checkContextMenuItem, this, _2));
|
||||
enable_registrar.add("Avatar.VisibleZoomIn", boost::bind(&LLAvatarActions::canZoomIn, id));
|
||||
enable_registrar.add("Avatar.VisibleFreezeEject", boost::bind(&LLAvatarActions::canLandFreezeOrEject, id));
|
||||
enable_registrar.add("Avatar.VisibleKickTeleportHome", boost::bind(&LLAvatarActions::canEstateKickOrTeleportHome, id));
|
||||
|
||||
// create the context menu from the XUI
|
||||
return createFromFile("menu_fs_radar.xml");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set up for multi-selected People
|
||||
|
||||
// registrar.add("Avatar.AddFriend", boost::bind(&LLAvatarActions::requestFriendshipDialog, mUUIDs)); // *TODO: unimplemented
|
||||
registrar.add("Avatar.IM", boost::bind(&LLAvatarActions::startConference, mUUIDs));
|
||||
registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startAdhocCall, mUUIDs));
|
||||
registrar.add("Avatar.OfferTeleport", boost::bind(&FSRadarMenu::offerTeleport, this));
|
||||
registrar.add("Avatar.RemoveFriend", boost::bind(&LLAvatarActions::removeFriendsDialog, mUUIDs));
|
||||
// registrar.add("Avatar.Share", boost::bind(&LLAvatarActions::startIM, mUUIDs)); // *TODO: unimplemented
|
||||
// registrar.add("Avatar.Pay", boost::bind(&LLAvatarActions::pay, mUUIDs)); // *TODO: unimplemented
|
||||
registrar.add("Avatar.Eject", boost::bind(&LLAvatarActions::landEjectMultiple, mUUIDs));
|
||||
registrar.add("Avatar.Freeze", boost::bind(&LLAvatarActions::landFreezeMultiple, mUUIDs));
|
||||
registrar.add("Avatar.Kick", boost::bind(&LLAvatarActions::estateKickMultiple, mUUIDs));
|
||||
registrar.add("Avatar.TeleportHome", boost::bind(&LLAvatarActions::estateTeleportHomeMultiple, mUUIDs));
|
||||
registrar.add("Avatar.EstateBan", boost::bind(&LLAvatarActions::estateBanMultiple, mUUIDs));
|
||||
registrar.add("Avatar.Derender", boost::bind(&LLAvatarActions::derenderMultiple, mUUIDs, false));
|
||||
registrar.add("Avatar.DerenderPermanent", boost::bind(&LLAvatarActions::derenderMultiple, mUUIDs, true));
|
||||
|
||||
enable_registrar.add("Avatar.EnableItem", boost::bind(&FSRadarMenu::enableContextMenuItem, this, _2));
|
||||
enable_registrar.add("Avatar.VisibleFreezeEject", boost::bind(&LLAvatarActions::canLandFreezeOrEjectMultiple, mUUIDs, false));
|
||||
enable_registrar.add("Avatar.VisibleKickTeleportHome", boost::bind(&LLAvatarActions::canEstateKickOrTeleportHomeMultiple, mUUIDs, false));
|
||||
|
||||
// create the context menu from the XUI
|
||||
return createFromFile("menu_fs_radar_multiselect.xml");
|
||||
}
|
||||
}
|
||||
|
||||
bool FSRadarMenu::enableContextMenuItem(const LLSD& userdata)
|
||||
{
|
||||
std::string item = userdata.asString();
|
||||
|
||||
// Note: can_block and can_delete is used only for one person selected menu
|
||||
// so we don't need to go over all uuids.
|
||||
|
||||
if (item == std::string("can_block"))
|
||||
{
|
||||
const LLUUID& id = mUUIDs.front();
|
||||
return LLAvatarActions::canBlock(id);
|
||||
}
|
||||
else if (item == std::string("can_add"))
|
||||
{
|
||||
// We can add friends if:
|
||||
// - there are selected people
|
||||
// - and there are no friends among selection yet.
|
||||
|
||||
//EXT-7389 - disable for more than 1
|
||||
if(mUUIDs.size() > 1)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool result = (mUUIDs.size() > 0);
|
||||
|
||||
uuid_vec_t::const_iterator
|
||||
id = mUUIDs.begin(),
|
||||
uuids_end = mUUIDs.end();
|
||||
|
||||
for (;id != uuids_end; ++id)
|
||||
{
|
||||
if ( LLAvatarActions::isFriend(*id) )
|
||||
{
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
else if (item == std::string("can_delete"))
|
||||
{
|
||||
// We can remove friends if:
|
||||
// - there are selected people
|
||||
// - and there are only friends among selection.
|
||||
|
||||
bool result = (mUUIDs.size() > 0);
|
||||
|
||||
uuid_vec_t::const_iterator
|
||||
id = mUUIDs.begin(),
|
||||
uuids_end = mUUIDs.end();
|
||||
|
||||
for (;id != uuids_end; ++id)
|
||||
{
|
||||
if ( !LLAvatarActions::isFriend(*id) )
|
||||
{
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
else if (item == std::string("can_call"))
|
||||
{
|
||||
return LLAvatarActions::canCall();
|
||||
}
|
||||
else if (item == std::string("can_show_on_map"))
|
||||
{
|
||||
const LLUUID& id = mUUIDs.front();
|
||||
|
||||
return (LLAvatarTracker::instance().isBuddyOnline(id) && is_agent_mappable(id))
|
||||
|| gAgent.isGodlike();
|
||||
}
|
||||
// <FS> Prevent teleport button from being disabled when someone on your
|
||||
// friends list logs out but is still in the region and you have
|
||||
// multiple people selected.
|
||||
//else if(item == std::string("can_offer_teleport"))
|
||||
//{
|
||||
// return LLAvatarActions::canOfferTeleport(mUUIDs);
|
||||
//}
|
||||
// </FS>
|
||||
return false;
|
||||
}
|
||||
|
||||
bool FSRadarMenu::checkContextMenuItem(const LLSD& userdata)
|
||||
{
|
||||
std::string item = userdata.asString();
|
||||
const LLUUID& id = mUUIDs.front();
|
||||
|
||||
if (item == std::string("is_blocked"))
|
||||
{
|
||||
return LLAvatarActions::isBlocked(id);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void FSRadarMenu::offerTeleport()
|
||||
{
|
||||
// boost::bind cannot recognize overloaded method LLAvatarActions::offerTeleport(),
|
||||
// so we have to use a wrapper.
|
||||
LLAvatarActions::offerTeleport(mUUIDs);
|
||||
}
|
||||
|
||||
void FSRadarMenu::teleportToAvatar()
|
||||
// AO: wrapper for functionality managed by LLPanelPeople, because it manages the nearby avatar list.
|
||||
// Will only work for avatars within radar range.
|
||||
{
|
||||
FSRadar* radar = FSRadar::getInstance();
|
||||
if (radar)
|
||||
{
|
||||
radar->teleportToAvatar(mUUIDs.front());
|
||||
}
|
||||
}
|
||||
|
||||
// Ansariel: Avatar tracking feature
|
||||
void FSRadarMenu::onTrackAvatarMenuItemClick()
|
||||
{
|
||||
FSRadar* radar = FSRadar::getInstance();
|
||||
if (radar)
|
||||
{
|
||||
radar->startTracking(mUUIDs.front());
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace FSFloaterRadarMenu
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
/**
|
||||
* @file fsradarmenu.h
|
||||
* @brief Menu used by Firestorm radar
|
||||
*
|
||||
* $LicenseInfo:firstyear=2013&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (c) 2013 Ansariel Hiller @ Second Life
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
|
||||
* http://www.firestormviewer.org
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef FS_RADARMENU_H
|
||||
#define FS_RADARMENU_H
|
||||
|
||||
#include "lllistcontextmenu.h"
|
||||
|
||||
namespace FSFloaterRadarMenu
|
||||
{
|
||||
|
||||
/**
|
||||
* Menu used in the nearby people list.
|
||||
*/
|
||||
class FSRadarMenu : public LLListContextMenu
|
||||
{
|
||||
public:
|
||||
/*virtual*/ LLContextMenu* createMenu();
|
||||
private:
|
||||
bool enableContextMenuItem(const LLSD& userdata);
|
||||
bool checkContextMenuItem(const LLSD& userdata);
|
||||
void offerTeleport();
|
||||
void teleportToAvatar();
|
||||
void onTrackAvatarMenuItemClick();
|
||||
};
|
||||
|
||||
extern FSRadarMenu gFSRadarMenu;
|
||||
|
||||
} // namespace FSFloaterRadarMenu
|
||||
|
||||
#endif // FS_RADARMENU_H
|
||||
|
|
@ -28,22 +28,21 @@
|
|||
#include "fsslurlcommand.h"
|
||||
|
||||
#include "fscommon.h"
|
||||
#include "fsradar.h"
|
||||
#include "llagent.h"
|
||||
#include "llavataractions.h"
|
||||
#include "llavatarlist.h"
|
||||
#include "llavatarlistitem.h"
|
||||
#include "llcommandhandler.h"
|
||||
#include "llfloatersidepanelcontainer.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llpanelpeople.h"
|
||||
|
||||
|
||||
LLAvatarListItem* getAvatarListItem(const LLUUID& avatar_id)
|
||||
{
|
||||
LLPanelPeople* panel_people = getPeoplePanel();
|
||||
if (panel_people)
|
||||
FSRadar* radar = FSRadar::getInstance();
|
||||
if (radar)
|
||||
{
|
||||
return panel_people->getNearbyList()->getAvatarListItem(avatar_id);
|
||||
return radar->getNearbyList()->getAvatarListItem(avatar_id);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
|
@ -118,11 +117,11 @@ public:
|
|||
{
|
||||
if (gAgentID != target_id)
|
||||
{
|
||||
LLPanelPeople* panel_people = getPeoplePanel();
|
||||
FSRadar* radar = FSRadar::getInstance();
|
||||
LLAvatarListItem* avatar_list_item = getAvatarListItem(target_id);
|
||||
if (avatar_list_item && panel_people)
|
||||
if (avatar_list_item && radar)
|
||||
{
|
||||
panel_people->startTracking(target_id);
|
||||
radar->startTracking(target_id);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -77,17 +77,13 @@
|
|||
// [RLVa:KB] - Checked: 2010-04-19 (RLVa-1.2.0f)
|
||||
#include "rlvhandler.h"
|
||||
// [/RLVa:KB]
|
||||
#include "lltrans.h"
|
||||
#include "llmutelist.h"
|
||||
|
||||
// Ansariel: For accessing the radar data
|
||||
#include "llavatarlist.h"
|
||||
#include "llavatarlistitem.h"
|
||||
#include "llpanelpeople.h"
|
||||
#include "llfloatersidepanelcontainer.h"
|
||||
#include "fsradar.h"
|
||||
#include "lggcontactsets.h"
|
||||
|
||||
#include "llavataractions.h"
|
||||
#include "fscommon.h"
|
||||
|
||||
static LLDefaultChildRegistry::Register<LLNetMap> r1("net_map");
|
||||
|
|
@ -1018,10 +1014,10 @@ BOOL LLNetMap::handleToolTipAgent(const LLUUID& avatar_id)
|
|||
// aka radar when above 1020m.
|
||||
if (isHigher1020mBug)
|
||||
{
|
||||
LLPanelPeople* panel_people = getPeoplePanel();
|
||||
if (panel_people)
|
||||
FSRadar* radar = FSRadar::getInstance();
|
||||
if (radar)
|
||||
{
|
||||
LLAvatarListItem* avatar_list_item = panel_people->getNearbyList()->getAvatarListItem(avatar_id);
|
||||
LLAvatarListItem* avatar_list_item = radar->getNearbyList()->getAvatarListItem(avatar_id);
|
||||
if (avatar_list_item)
|
||||
{
|
||||
F32 radar_distance = avatar_list_item->getRange();
|
||||
|
|
@ -1710,10 +1706,10 @@ void LLNetMap::startTracking()
|
|||
{
|
||||
if (mClosestAgentRightClick.notNull())
|
||||
{
|
||||
LLPanelPeople* panel_people = getPeoplePanel();
|
||||
if (panel_people != NULL)
|
||||
FSRadar* radar = FSRadar::getInstance();
|
||||
if (radar)
|
||||
{
|
||||
panel_people->startTracking(mClosestAgentRightClick);
|
||||
radar->startTracking(mClosestAgentRightClick);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -31,29 +31,17 @@
|
|||
|
||||
#include "llcallingcard.h" // for avatar tracker
|
||||
#include "llvoiceclient.h"
|
||||
#include "llavatarnamecache.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "fsradarlistctrl.h"
|
||||
#include <map>
|
||||
#include <time.h>
|
||||
|
||||
class LLAvatarList;
|
||||
class LLAvatarName;
|
||||
class LLFilterEditor;
|
||||
class LLGroupList;
|
||||
class LLTabContainer;
|
||||
class LLMenuButton;
|
||||
class LLTabContainer;
|
||||
|
||||
// Firestorm declarations
|
||||
class LLMenuGL;
|
||||
|
||||
const U32 MAX_AVATARS_PER_ALERT = 6; // maximum number of UUIDs we can cram into a single channel radar alert message
|
||||
const U32 COARSE_OFFSET_INTERVAL = 7; // seconds after which we query the bridge for a coarse location adjustment
|
||||
const U32 MAX_OFFSET_REQUESTS = 60; // 2048 / UUID size, leaving overhead space
|
||||
const U32 NAMEFORMAT_DISPLAYNAME = 0;
|
||||
const U32 RADAR_CHAT_MIN_SPACING = 6; //minimum delay between radar chat messages
|
||||
|
||||
const U32 NAMEFORMAT_USERNAME = 1;
|
||||
const U32 NAMEFORMAT_DISPLAYNAME_USERNAME = 2;
|
||||
const U32 NAMEFORMAT_USERNAME_DISPLAYNAME = 3;
|
||||
class FSRadarListCtrl;
|
||||
|
||||
class LLPanelPeople
|
||||
: public LLPanel
|
||||
|
|
@ -67,17 +55,17 @@ public:
|
|||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
/*virtual*/ bool notifyChildren(const LLSD& info);
|
||||
void teleportToAvatar(LLUUID targetAv);
|
||||
void requestRadarChannelAlertSync();
|
||||
// Implements LLVoiceClientStatusObserver::onChange() to enable call buttons
|
||||
// when voice is available
|
||||
/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
|
||||
|
||||
// [RLVa:KB] - Checked: 2010-04-05 (RLVa-1.2.0d) | Added: RLVa-1.2.0d
|
||||
LLAvatarList* getNearbyList() { return mNearbyList; }
|
||||
// Externalized to FSRadar
|
||||
//LLAvatarList* getNearbyList() { return mNearbyList; }
|
||||
// [/RLVa:KB]
|
||||
|
||||
void startTracking(const LLUUID& avatar_id);
|
||||
// <FS:Ansariel> Firestorm radar
|
||||
void updateNearby(const std::vector<LLSD>& entries, const LLSD& stats);
|
||||
|
||||
// internals
|
||||
class Updater;
|
||||
|
|
@ -97,10 +85,7 @@ private:
|
|||
void updateFriendList();
|
||||
void updateNearbyList();
|
||||
void updateRecentList();
|
||||
void updateNearbyRange();
|
||||
void updateTracking();
|
||||
void checkTracking();
|
||||
|
||||
|
||||
bool isItemsFreeOfFriends(const uuid_vec_t& uuids);
|
||||
|
||||
void updateButtons();
|
||||
|
|
@ -112,10 +97,6 @@ private:
|
|||
void buttonSetAction(const std::string& btn_name, const commit_signal_t::slot_type& cb);
|
||||
void showGroupMenu(LLMenuGL* menu);
|
||||
void setSortOrder(LLAvatarList* list, ESortOrder order, bool save = true);
|
||||
void handleLimitRadarByRange(const LLSD& newalue);
|
||||
std::string getRadarName(LLUUID avId);
|
||||
std::string getRadarName(LLAvatarName avName);
|
||||
void radarAlertMsg(const LLUUID& agent_id, const LLAvatarName& av_name,std::string postMsg);
|
||||
|
||||
// UI callbacks
|
||||
void onFilterEdit(const std::string& search_string);
|
||||
|
|
@ -123,7 +104,6 @@ private:
|
|||
void onViewProfileButtonClicked();
|
||||
void onAddFriendButtonClicked();
|
||||
void onAddFriendWizButtonClicked();
|
||||
void onGlobalVisToggleButtonClicked();
|
||||
void onDeleteFriendButtonClicked();
|
||||
void onGroupInfoButtonClicked();
|
||||
void onChatButtonClicked();
|
||||
|
|
@ -134,14 +114,8 @@ private:
|
|||
void onShareButtonClicked();
|
||||
void onMoreButtonClicked();
|
||||
void onActivateButtonClicked();
|
||||
void onRecentViewSortButtonClicked();
|
||||
void onNearbyViewSortButtonClicked();
|
||||
void onFriendsViewSortButtonClicked();
|
||||
void onGroupsViewSortButtonClicked();
|
||||
void onAvatarListDoubleClicked(LLUICtrl* ctrl);
|
||||
void onNearbyListDoubleClicked(LLUICtrl* ctrl);
|
||||
void onAvatarListCommitted(LLAvatarList* list);
|
||||
void onRadarListDoubleClicked();
|
||||
void onGroupPlusButtonClicked();
|
||||
void onGroupMinusButtonClicked();
|
||||
void onGroupPlusMenuItemClicked(const LLSD& userdata);
|
||||
|
|
@ -150,10 +124,6 @@ private:
|
|||
void onNearbyViewSortMenuItemClicked(const LLSD& userdata);
|
||||
void onGroupsViewSortMenuItemClicked(const LLSD& userdata);
|
||||
void onRecentViewSortMenuItemClicked(const LLSD& userdata);
|
||||
void onRadarNameFmtClicked(const LLSD& userdata);
|
||||
bool radarNameFmtCheck(const LLSD& userdata);
|
||||
void onRadarReportToClicked(const LLSD& userdata); // <FS:CR> Milkshake-style Radar Alerts
|
||||
bool radarReportToCheck(const LLSD& userdata); // <FS:CR> Milkshake-style Radar Alerts
|
||||
|
||||
//returns false only if group is "none"
|
||||
bool isRealGroup();
|
||||
|
|
@ -177,14 +147,21 @@ private:
|
|||
bool isAccordionCollapsedByUser(LLUICtrl* acc_tab);
|
||||
bool isAccordionCollapsedByUser(const std::string& name);
|
||||
|
||||
// <FS:Ansariel> Firestorm callback handler
|
||||
void onRadarListDoubleClicked();
|
||||
void onGlobalVisToggleButtonClicked();
|
||||
// </FS:Ansariel> Firestorm callback handler
|
||||
|
||||
LLFilterEditor* mFilterEditor;
|
||||
LLTabContainer* mTabContainer;
|
||||
LLAvatarList* mOnlineFriendList;
|
||||
LLAvatarList* mAllFriendList;
|
||||
LLAvatarList* mNearbyList;
|
||||
// <FS:Ansariel> Firestorm radar
|
||||
FSRadarListCtrl* mRadarList;
|
||||
// </FS:Ansariel> Firestorm radar
|
||||
LLAvatarList* mRecentList;
|
||||
LLGroupList* mGroupList;
|
||||
FSRadarListCtrl* mRadarList;
|
||||
LLNetMap* mMiniMap;
|
||||
|
||||
LLHandle<LLView> mGroupPlusMenuHandle;
|
||||
|
|
@ -194,7 +171,9 @@ private:
|
|||
LLHandle<LLView> mRecentViewSortMenuHandle;
|
||||
|
||||
Updater* mFriendListUpdater;
|
||||
Updater* mNearbyListUpdater;
|
||||
// <FS:Ansariel> Firestorm radar
|
||||
//Updater* mNearbyListUpdater;
|
||||
// </FS:Ansariel> Firestorm radar
|
||||
Updater* mRecentListUpdater;
|
||||
Updater* mButtonsUpdater;
|
||||
|
||||
|
|
@ -205,34 +184,9 @@ private:
|
|||
|
||||
std::string mFilterSubString;
|
||||
std::string mFilterSubStringOrig;
|
||||
|
||||
LLUIColor mChatRangeColor;
|
||||
LLUIColor mShoutRangeColor;
|
||||
LLUIColor mFarRangeColor;
|
||||
|
||||
struct radarFields
|
||||
{
|
||||
std::string avName;
|
||||
F32 lastDistance;
|
||||
LLVector3d lastGlobalPos;
|
||||
LLUUID lastRegion;
|
||||
time_t firstSeen;
|
||||
S32 lastStatus;
|
||||
U32 ZOffset;
|
||||
time_t lastZOffsetTime;
|
||||
|
||||
};
|
||||
std::multimap < LLUUID, radarFields > lastRadarSweep;
|
||||
std::vector <LLUUID> mRadarEnterAlerts;
|
||||
std::vector <LLUUID> mRadarLeaveAlerts;
|
||||
std::vector <LLUUID> mRadarOffsetRequests;
|
||||
|
||||
S32 mRadarFrameCount;
|
||||
bool mRadarAlertRequest;
|
||||
F32 mRadarLastRequestTime;
|
||||
U32 mRadarLastBulkOffsetRequestTime;
|
||||
|
||||
LLUUID mTrackedAvatarId;
|
||||
// <FS:Ansariel> Firestorm radar
|
||||
boost::signals2::connection mNearbyUpdateSignalConnection;
|
||||
};
|
||||
|
||||
#endif //LL_LLPANELPEOPLE_H
|
||||
|
|
|
|||
|
|
@ -38,9 +38,6 @@
|
|||
#include "llavataractions.h"
|
||||
#include "llcallingcard.h" // for LLAvatarTracker
|
||||
#include "llviewermenu.h" // for gMenuHolder
|
||||
#include "llpanelpeople.h"
|
||||
|
||||
#include "fscommon.h"
|
||||
|
||||
namespace LLPanelPeopleMenus
|
||||
{
|
||||
|
|
@ -66,35 +63,13 @@ LLContextMenu* NearbyMenu::createMenu()
|
|||
registrar.add("Avatar.IM", boost::bind(&LLAvatarActions::startIM, id));
|
||||
registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startCall, id));
|
||||
registrar.add("Avatar.OfferTeleport", boost::bind(&NearbyMenu::offerTeleport, this));
|
||||
registrar.add("Avatar.GroupInvite", boost::bind(&LLAvatarActions::inviteToGroup, id));
|
||||
registrar.add("Avatar.getScriptInfo", boost::bind(&LLAvatarActions::getScriptInfo, id));
|
||||
registrar.add("Avatar.ShowOnMap", boost::bind(&LLAvatarActions::showOnMap, id));
|
||||
registrar.add("Avatar.Share", boost::bind(&LLAvatarActions::share, id));
|
||||
registrar.add("Avatar.Pay", boost::bind(&LLAvatarActions::pay, id));
|
||||
registrar.add("Avatar.BlockUnblock", boost::bind(&LLAvatarActions::toggleBlock, id));
|
||||
// [SL:KB] - Patch: UI-SidepanelPeople | Checked: 2010-12-03 (Catznip-2.4.0g) | Modified: Catznip-2.4.0g
|
||||
registrar.add("Avatar.ZoomIn", boost::bind(&LLAvatarActions::zoomIn, id));
|
||||
enable_registrar.add("Avatar.VisibleZoomIn", boost::bind(&LLAvatarActions::canZoomIn, id));
|
||||
registrar.add("Avatar.Report", boost::bind(&LLAvatarActions::report, id));
|
||||
registrar.add("Avatar.Eject", boost::bind(&LLAvatarActions::landEject, id));
|
||||
registrar.add("Avatar.Freeze", boost::bind(&LLAvatarActions::landFreeze, id));
|
||||
enable_registrar.add("Avatar.VisibleFreezeEject", boost::bind(&LLAvatarActions::canLandFreezeOrEject, id));
|
||||
registrar.add("Avatar.Kick", boost::bind(&LLAvatarActions::estateKick, id));
|
||||
registrar.add("Avatar.TeleportHome", boost::bind(&LLAvatarActions::estateTeleportHome, id));
|
||||
enable_registrar.add("Avatar.VisibleKickTeleportHome", boost::bind(&LLAvatarActions::canEstateKickOrTeleportHome, id));
|
||||
// [/SL:KB]
|
||||
// <FS:Ansariel> Estate ban user
|
||||
registrar.add("Avatar.EstateBan", boost::bind(&LLAvatarActions::estateBan, id));
|
||||
// <FS:Ansariel> Derender
|
||||
registrar.add("Avatar.Derender", boost::bind(&LLAvatarActions::derender, id, false));
|
||||
registrar.add("Avatar.DerenderPermanent", boost::bind(&LLAvatarActions::derender, id, true));
|
||||
// </FS:Ansariel> Derender
|
||||
|
||||
registrar.add("Nearby.People.TeleportToAvatar", boost::bind(&NearbyMenu::teleportToAvatar, this));
|
||||
registrar.add("Nearby.People.TrackAvatar", boost::bind(&NearbyMenu::onTrackAvatarMenuItemClick, this));
|
||||
// <FS:Ansariel> Firestorm additions
|
||||
registrar.add("Avatar.GroupInvite", boost::bind(&LLAvatarActions::inviteToGroup, id));
|
||||
|
||||
registrar.add("Avatar.ZoomIn", boost::bind(&LLAvatarActions::zoomIn, id));
|
||||
enable_registrar.add("Avatar.VisibleZoomIn", boost::bind(&LLAvatarActions::canZoomIn, id));
|
||||
enable_registrar.add("Avatar.EnableItem", boost::bind(&NearbyMenu::enableContextMenuItem, this, _2));
|
||||
enable_registrar.add("Avatar.CheckItem", boost::bind(&NearbyMenu::checkContextMenuItem, this, _2));
|
||||
|
||||
|
|
@ -113,21 +88,7 @@ LLContextMenu* NearbyMenu::createMenu()
|
|||
// registrar.add("Avatar.Share", boost::bind(&LLAvatarActions::startIM, mUUIDs)); // *TODO: unimplemented
|
||||
// registrar.add("Avatar.Pay", boost::bind(&LLAvatarActions::pay, mUUIDs)); // *TODO: unimplemented
|
||||
enable_registrar.add("Avatar.EnableItem", boost::bind(&NearbyMenu::enableContextMenuItem, this, _2));
|
||||
// [SL:KB] - Patch: UI-SidepanelPeople | Checked: 2010-11-05 (Catznip-2.4.0g) | Added: Catznip-2.4.0g
|
||||
registrar.add("Avatar.Eject", boost::bind(&LLAvatarActions::landEjectMultiple, mUUIDs));
|
||||
registrar.add("Avatar.Freeze", boost::bind(&LLAvatarActions::landFreezeMultiple, mUUIDs));
|
||||
enable_registrar.add("Avatar.VisibleFreezeEject", boost::bind(&LLAvatarActions::canLandFreezeOrEjectMultiple, mUUIDs, false));
|
||||
registrar.add("Avatar.Kick", boost::bind(&LLAvatarActions::estateKickMultiple, mUUIDs));
|
||||
registrar.add("Avatar.TeleportHome", boost::bind(&LLAvatarActions::estateTeleportHomeMultiple, mUUIDs));
|
||||
enable_registrar.add("Avatar.VisibleKickTeleportHome", boost::bind(&LLAvatarActions::canEstateKickOrTeleportHomeMultiple, mUUIDs, false));
|
||||
// [/SL:KB]
|
||||
// <FS:Ansariel> Estate ban user
|
||||
registrar.add("Avatar.EstateBan", boost::bind(&LLAvatarActions::estateBanMultiple, mUUIDs));
|
||||
// <FS:Ansariel> Derender
|
||||
registrar.add("Avatar.Derender", boost::bind(&LLAvatarActions::derenderMultiple, mUUIDs, false));
|
||||
registrar.add("Avatar.DerenderPermanent", boost::bind(&LLAvatarActions::derenderMultiple, mUUIDs, true));
|
||||
// </FS:Ansariel> Derender
|
||||
|
||||
|
||||
// create the context menu from the XUI
|
||||
return createFromFile("menu_people_nearby_multiselect.xml");
|
||||
}
|
||||
|
|
@ -238,26 +199,5 @@ void NearbyMenu::offerTeleport()
|
|||
// so we have to use a wrapper.
|
||||
LLAvatarActions::offerTeleport(mUUIDs);
|
||||
}
|
||||
|
||||
void NearbyMenu::teleportToAvatar()
|
||||
// AO: wrapper for functionality managed by LLPanelPeople, because it manages the nearby avatar list.
|
||||
// Will only work for avatars within radar range.
|
||||
{
|
||||
LLPanelPeople* peoplePanel = getPeoplePanel();
|
||||
if (peoplePanel)
|
||||
{
|
||||
peoplePanel->teleportToAvatar(mUUIDs.front());
|
||||
}
|
||||
}
|
||||
|
||||
// Ansariel: Avatar tracking feature
|
||||
void NearbyMenu::onTrackAvatarMenuItemClick()
|
||||
{
|
||||
LLPanelPeople* peoplePanel = getPeoplePanel();
|
||||
if (peoplePanel)
|
||||
{
|
||||
peoplePanel->startTracking(mUUIDs.front());
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace LLPanelPeopleMenus
|
||||
|
|
|
|||
|
|
@ -43,8 +43,6 @@ private:
|
|||
bool enableContextMenuItem(const LLSD& userdata);
|
||||
bool checkContextMenuItem(const LLSD& userdata);
|
||||
void offerTeleport();
|
||||
void teleportToAvatar();
|
||||
void onTrackAvatarMenuItemClick();
|
||||
};
|
||||
|
||||
extern NearbyMenu gNearbyMenu;
|
||||
|
|
|
|||
|
|
@ -219,6 +219,7 @@
|
|||
#include "fsdata.h"
|
||||
#include "fsfloatersearch.h"
|
||||
#include "fslslbridge.h"
|
||||
#include "fsradar.h"
|
||||
#include "fswsassetblacklist.h"
|
||||
#include "llfloatersearch.h"
|
||||
#include "llfloatersidepanelcontainer.h"
|
||||
|
|
@ -1680,12 +1681,15 @@ LLWorld::getInstance()->addRegion(gFirstSimHandle, gFirstSim, first_sim_size_x,
|
|||
llinfos << "Constructed " << pContacts->getTitle() << llendl;
|
||||
// </FS:ND>
|
||||
|
||||
// <FS:Ansariel> FIRE-8560/FIRE-8592: We neet to create the instance of the people
|
||||
// floater for the radar functions and the V2 friendlist here.
|
||||
// <FS:Ansariel> FIRE-8560/FIRE-8592: We neet to create the instance of the radar
|
||||
// for the radar functions and the V2 friendlist here.
|
||||
// This is because of the standalone group panels that will
|
||||
// prevent doing this at login when receiving the agent group
|
||||
// data update.
|
||||
LLFloaterSidePanelContainer::getPanel("people", "panel_people");
|
||||
FSRadar::instance();
|
||||
llinfos << "Radar initialized" << llendl;
|
||||
// </FS:Ansariel>
|
||||
|
||||
//gCacheName is required for nearby chat history loading
|
||||
//so I just moved nearby history loading a few states further
|
||||
|
|
|
|||
|
|
@ -162,6 +162,7 @@
|
|||
#include "fsfloaterplacedetails.h"
|
||||
#include "fsfloaterposestand.h"
|
||||
#include "fsfloaterprofile.h"
|
||||
#include "fsfloaterradar.h"
|
||||
#include "fsfloatersearch.h"
|
||||
#include "fsfloaterteleporthistory.h"
|
||||
#include "fsfloatervolumecontrols.h"
|
||||
|
|
@ -395,6 +396,7 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("fs_import", "floater_fs_import.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterImport>);
|
||||
LLFloaterReg::add("fs_posestand", "floater_fs_posestand.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterPoseStand>);
|
||||
LLFloaterReg::add("fs_placedetails", "floater_fs_placedetails.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterPlaceDetails>);
|
||||
LLFloaterReg::add("fs_radar", "floater_fs_radar.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterRadar>);
|
||||
LLFloaterReg::add("fs_teleporthistory", "floater_fs_teleporthistory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterTeleportHistory>);
|
||||
LLFloaterReg::add("fs_volume_controls", "floater_fs_volume_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterVolumeControls>);
|
||||
LLFloaterReg::add("group_titles", "floater_fs_group_titles.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSGroupTitles>);
|
||||
|
|
|
|||
|
|
@ -153,6 +153,7 @@ const static boost::regex NEWLINES("\\n{1}");
|
|||
#include "tea.h" // <FS:AW opensim currency support>
|
||||
#include "fscommon.h"
|
||||
#include "fslightshare.h" // <FS:CR> FIRE-5118 - Lightshare support
|
||||
#include "fsradar.h"
|
||||
|
||||
#if LL_MSVC
|
||||
// disable boost::lexical_cast warning
|
||||
|
|
@ -5591,10 +5592,10 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
|
|||
// sound assets as a request for a full radar update to a channel
|
||||
if ((owner_id == gAgent.getID()) && (sound_id.asString() == gSavedSettings.getString("RadarLegacyChannelAlertRefreshUUID")))
|
||||
{
|
||||
LLPanelPeople* pPeoplePanel = getPeoplePanel();
|
||||
if (pPeoplePanel)
|
||||
FSRadar* radar = FSRadar::getInstance();
|
||||
if (radar)
|
||||
{
|
||||
pPeoplePanel->requestRadarChannelAlertSync();
|
||||
radar->requestRadarChannelAlertSync();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,6 +47,8 @@
|
|||
#include "rlvhandler.h"
|
||||
#include "rlvextensions.h"
|
||||
|
||||
#include "fsradar.h"
|
||||
|
||||
// ============================================================================
|
||||
|
||||
// Checked: 2010-02-28 (RLVa-1.4.0a) | Added: RLVa-1.2.0a
|
||||
|
|
@ -364,10 +366,16 @@ void RlvUIEnabler::onToggleShowNames(bool fQuitting)
|
|||
bool fEnable = !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES);
|
||||
|
||||
// Refresh the nearby people list
|
||||
LLPanelPeople* pPeoplePanel = LLFloaterSidePanelContainer::getPanel<LLPanelPeople>("people", "panel_people");
|
||||
RLV_ASSERT( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) );
|
||||
if ( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) )
|
||||
pPeoplePanel->getNearbyList()->updateAvatarNames();
|
||||
// <FS:Ansariel> [Standalone radar]
|
||||
//LLPanelPeople* pPeoplePanel = LLFloaterSidePanelContainer::getPanel<LLPanelPeople>("people", "panel_people");
|
||||
//RLV_ASSERT( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) );
|
||||
//if ( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) )
|
||||
// pPeoplePanel->getNearbyList()->updateAvatarNames();
|
||||
FSRadar* pRadar = FSRadar::getInstance();
|
||||
RLV_ASSERT( (pRadar) && (pRadar->getNearbyList()) );
|
||||
if ( (pRadar) && (pRadar->getNearbyList()) )
|
||||
pRadar->getNearbyList()->updateAvatarNames();
|
||||
// </FS:Ansariel> [Standalone radar]
|
||||
|
||||
// Refresh the speaker list
|
||||
// <FS:Ansariel> [FS communication UI]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,342 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater
|
||||
name="radar"
|
||||
help_topic="fs_radar"
|
||||
title="Radar"
|
||||
width="333"
|
||||
height="415"
|
||||
min_width="250"
|
||||
min_height="150"
|
||||
save_rect="true"
|
||||
save_visibility="true"
|
||||
can_resize="true"
|
||||
can_minimize="true"
|
||||
can_close="true">
|
||||
<string
|
||||
name="no_one_near"
|
||||
value="No one nearby. Looking for people to hang out with? Use the search box to find topics or content you might be interested in, then visit those places to meet people with similar interests."/>
|
||||
<string
|
||||
name="MiniMapToolTipMsg"
|
||||
value="[REGION] (Double-click to open Map, shift-drag to pan)"/>
|
||||
<string
|
||||
name="AltMiniMapToolTipMsg"
|
||||
value="[REGION] (Double-click to teleport, shift-drag to pan)"/>
|
||||
<string
|
||||
name="avatar_name_count"
|
||||
value="Name [[TOTAL]/[IN_REGION]/[IN_CHAT_RANGE]]"/>
|
||||
<filter_editor
|
||||
follows="left|top|right"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="9"
|
||||
label="Filter People"
|
||||
max_length_chars="300"
|
||||
name="filter_input"
|
||||
text_pad_left="4"
|
||||
top="3"
|
||||
width="314"/>
|
||||
<panel
|
||||
background_opaque="false"
|
||||
background_visible="false"
|
||||
follows="all"
|
||||
height="383"
|
||||
label="Nearby"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
help_topic="people_nearby_tab"
|
||||
name="nearby_panel"
|
||||
top_pad="3"
|
||||
width="326">
|
||||
<layout_stack
|
||||
orientation="vertical"
|
||||
clip="true"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
left="0"
|
||||
height="356"
|
||||
width="326"
|
||||
mouse_opaque="false"
|
||||
name="radar_ls"
|
||||
auto_resize="false"
|
||||
user_resize="true">
|
||||
<layout_panel
|
||||
layout="topleft"
|
||||
top="0"
|
||||
left="3"
|
||||
height="140"
|
||||
width="326"
|
||||
min_dim="140"
|
||||
follows="top"
|
||||
mouse_opaque="false"
|
||||
visibility_control="ShowRadarMinimap"
|
||||
name="minimaplayout"
|
||||
auto_resize="false"
|
||||
user_resize="true">
|
||||
<net_map
|
||||
bg_color="NetMapBackgroundColor"
|
||||
visibility_control="ShowRadarMinimap"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
mouse_opaque="false"
|
||||
name="Net Map"
|
||||
width="326"
|
||||
height="140"
|
||||
top="0"/>
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
layout="topleft"
|
||||
top="0"
|
||||
left="0"
|
||||
height="216"
|
||||
width="326"
|
||||
mouse_opaque="false"
|
||||
follows="all"
|
||||
name="radarlayout">
|
||||
<radar_list
|
||||
draw_heading="true"
|
||||
follows="all"
|
||||
height="216"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
top_pad="0"
|
||||
sort_column="0"
|
||||
sort_ascending="true"
|
||||
name="radar_list"
|
||||
draw_stripes="true"
|
||||
multi_select="true"
|
||||
width="326">
|
||||
<radar_list.columns
|
||||
label="Name"
|
||||
name="name"
|
||||
tool_tip="[TOTAL] avatars, [IN_REGION] in the same region, [IN_CHAT_RANGE] in chat range"
|
||||
relative_width="0.37"/>
|
||||
<radar_list.columns
|
||||
label=""
|
||||
name="voice_level"
|
||||
tool_tip="Is talking on voice"
|
||||
relative_width="0.07"/>
|
||||
<radar_list.columns
|
||||
label=""
|
||||
name="in_region"
|
||||
tool_tip="Is in the same region"
|
||||
relative_width="0.03"/>
|
||||
<radar_list.columns
|
||||
label=""
|
||||
name="flags"
|
||||
tool_tip="Has payment info on file"
|
||||
relative_width="0.03"/>
|
||||
<radar_list.columns
|
||||
label="Age"
|
||||
name="age"
|
||||
relative_width="0.1"/>
|
||||
<radar_list.columns
|
||||
label="Seen"
|
||||
name="seen"
|
||||
relative_width="0.15"/>
|
||||
<radar_list.columns
|
||||
label="Range"
|
||||
name="range"
|
||||
relative_width="0.15"/>
|
||||
<radar_list.columns
|
||||
label="av_id"
|
||||
name="uuid"
|
||||
relative_width="0"/>
|
||||
</radar_list>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
||||
<!-- Buttons -->
|
||||
<panel
|
||||
background_visible="false"
|
||||
follows="left|right|bottom"
|
||||
height="27"
|
||||
label="bottom_panel"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="bottom_panel_nearby"
|
||||
top_pad="0"
|
||||
width="331">
|
||||
<menu_button
|
||||
follows="bottom|left"
|
||||
height="25"
|
||||
image_hover_unselected="Toolbar_Left_Over"
|
||||
image_overlay="OptionsMenu_Off"
|
||||
image_selected="Toolbar_Left_Selected"
|
||||
image_unselected="Toolbar_Left_Off"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="nearby_view_sort_btn"
|
||||
tool_tip="Options"
|
||||
top="1"
|
||||
width="31"/>
|
||||
<button
|
||||
follows="bottom|left"
|
||||
height="25"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_overlay="AddItem_Off"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
left_pad="1"
|
||||
name="add_friend_btn_nearby"
|
||||
tool_tip="Add selected Resident to your friends List"
|
||||
width="31">
|
||||
<commit_callback
|
||||
function="People.addFriend"/>
|
||||
</button>
|
||||
<icon
|
||||
follows="bottom|left|right"
|
||||
height="25"
|
||||
image_name="Toolbar_Right_Off"
|
||||
layout="topleft"
|
||||
left_pad="1"
|
||||
name="nearby_dummy_icon"
|
||||
width="262"/>
|
||||
<slider
|
||||
visibility_control="LimitRadarByRange"
|
||||
control_name="NearMeRange"
|
||||
decimal_digits="0"
|
||||
follows="bottom|left"
|
||||
height="16"
|
||||
increment="2"
|
||||
initial_value="96"
|
||||
label="Range(m):"
|
||||
label_width="70"
|
||||
layout="topleft"
|
||||
max_val="4096"
|
||||
min_val="20"
|
||||
name="NearMeRange"
|
||||
visible="True"
|
||||
left_delta="10"
|
||||
top_delta="6"
|
||||
width="220"/>
|
||||
</panel>
|
||||
</panel>
|
||||
|
||||
<!-- END NEARBY TAB -->
|
||||
<panel
|
||||
visible="false"
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
top_pad="1"
|
||||
name="button_bar"
|
||||
width="326">
|
||||
<layout_stack
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
name="bottom_bar_ls"
|
||||
orientation="horizontal"
|
||||
top_pad="0"
|
||||
width="326">
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
name="view_profile_btn_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
label="Profile"
|
||||
layout="topleft"
|
||||
left="1"
|
||||
name="view_profile_btn"
|
||||
tool_tip="Show picture, groups, and other Residents information"
|
||||
top="0"
|
||||
width="71"/>
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="1"
|
||||
name="im_btn_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
height="23"
|
||||
label="IM"
|
||||
layout="topleft"
|
||||
name="im_btn"
|
||||
tool_tip="Open instant message session"
|
||||
top="0"
|
||||
width="71"/>
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="3"
|
||||
name="call_btn_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
height="23"
|
||||
label="Call"
|
||||
layout="topleft"
|
||||
name="call_btn"
|
||||
tool_tip="Call this Resident"
|
||||
top="0"
|
||||
width="71"/>
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="3"
|
||||
name="share_btn_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
height="23"
|
||||
label="Share"
|
||||
layout="topleft"
|
||||
name="share_btn"
|
||||
tool_tip="Share an inventory item"
|
||||
top="0"
|
||||
width="71"/>
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="3"
|
||||
name="tp_btn_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
height="23"
|
||||
label="Teleport"
|
||||
layout="topleft"
|
||||
name="teleport_btn"
|
||||
tool_tip="Offer teleport"
|
||||
top="0"
|
||||
width="71"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -14,30 +14,6 @@
|
|||
<string
|
||||
name="high_server_load"
|
||||
value="Due to server load, mass toggling visibility can take a while to become effective. Please be patient."/>
|
||||
<string
|
||||
name="camera_no_focus"
|
||||
value="The camera cannot focus user [AVATARNAME] because they are outside your draw distance."/>
|
||||
<string
|
||||
name="entering_draw_distance"
|
||||
value="entered draw distance ([DISTANCE] m)."/>
|
||||
<string
|
||||
name="leaving_draw_distance"
|
||||
value="left draw distance."/>
|
||||
<string
|
||||
name="entering_chat_range"
|
||||
value="entered chat range ([DISTANCE] m)."/>
|
||||
<string
|
||||
name="leaving_chat_range"
|
||||
value="left chat range."/>
|
||||
<string
|
||||
name="entering_region"
|
||||
value="entered the region."/>
|
||||
<string
|
||||
name="entering_region_distance"
|
||||
value="entered the region ([DISTANCE] m)."/>
|
||||
<string
|
||||
name="leaving_region"
|
||||
value="left the region."/>
|
||||
<string
|
||||
name="no_recent_people"
|
||||
value="No recent people. Looking for people to hang out with? Use the search box to find topics or content you might be interested in, then visit those places to meet people with similar interests." />
|
||||
|
|
@ -146,7 +122,7 @@ Looking for people to hang out with? Use the search box to find topics or conten
|
|||
top="0" left="3"
|
||||
height="140"
|
||||
width="326"
|
||||
max_height="140"
|
||||
min_dim="140"
|
||||
follows="top"
|
||||
mouse_opaque="false"
|
||||
visibility_control="ShowRadarMinimap"
|
||||
|
|
@ -282,6 +258,7 @@ Looking for people to hang out with? Use the search box to find topics or conten
|
|||
name="nearby_dummy_icon"
|
||||
width="257" />
|
||||
<slider
|
||||
visibility_control="LimitRadarByRange"
|
||||
control_name="NearMeRange"
|
||||
decimal_digits="0"
|
||||
follows="bottom|left"
|
||||
|
|
|
|||
|
|
@ -722,6 +722,7 @@ with the same filename but different name
|
|||
<texture name="teleport_history" file_name="toolbar_icons/teleporthistory.png" preload="true" />
|
||||
<texture name="pose_stand" file_name="toolbar_icons/posestand.png" preload="true" />
|
||||
<texture name="Command_Snapshot_2_Disk_Icon" file_name="toolbar_icons/snapshot_to_disk.png" preload="true" />
|
||||
<texture name="radar" file_name="toolbar_icons/radar.png" preload="true" />
|
||||
|
||||
|
||||
<texture name="Unread_Chiclet" file_name="bottomtray/Unread_Chiclet.png" preload="false" />
|
||||
|
|
|
|||
|
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="radar" title="Radar">
|
||||
<string
|
||||
name="MiniMapToolTipMsg"
|
||||
value="[REGION] (Doppelklicken, um Karte zu öffnen; Umschalttaste gedrückt halten und ziehen, um zu schwenken)"/>
|
||||
<string
|
||||
name="AltMiniMapToolTipMsg"
|
||||
value="[REGION] (Doppelklicken, um zu teleportieren; Umschalttaste gedrückt halten und ziehen, um zu schwenken)"/>
|
||||
<string
|
||||
name="avatar_name_count"
|
||||
value="Name [[TOTAL]/[IN_REGION]/[IN_CHAT_RANGE]]"/>
|
||||
<filter_editor label="Nach Leuten filtern" name="filter_input"/>
|
||||
<panel label="In der Nähe" name="nearby_panel">
|
||||
<layout_stack name="radar_ls">
|
||||
<layout_panel name="radarlayout">
|
||||
<radar_list name="radar_list">
|
||||
<radar_list.columns label="Name" tool_tip="[TOTAL] Avatare, [IN_REGION] in derselben Region, [IN_CHAT_RANGE] in Chat-Reichweite" name="name"/>
|
||||
<radar_list.columns label="" tool_tip="Spricht via Voice" name="voice_level"/>
|
||||
<radar_list.columns label="" tool_tip="Ist in derselben Region" name="in_region"/>
|
||||
<radar_list.columns label="" tool_tip="Hat Zahlungsinformationen hinterlegt" name="flags"/>
|
||||
<radar_list.columns label="Alt." name="age"/>
|
||||
<radar_list.columns label="Zeit" name="seen"/>
|
||||
<radar_list.columns label="Dist." name="range"/>
|
||||
</radar_list>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<panel label="bottom_panel" name="bottom_panel_nearby">
|
||||
<menu_button name="nearby_view_sort_btn" tool_tip="Optionen"/>
|
||||
<button name="add_friend_btn_nearby" tool_tip="Ausgewählten Einwohner zur Freundeliste hinzufügen"/>
|
||||
<slider label="Distanz (m):" name="NearMeRange"/>
|
||||
</panel>
|
||||
</panel>
|
||||
<panel name="button_bar">
|
||||
<layout_stack name="bottom_bar_ls">
|
||||
<layout_panel name="view_profile_btn_lp" width="60">
|
||||
<button label="Profil" name="view_profile_btn" width="59" tool_tip="Bilder, Gruppen und andere Einwohner-Informationen anzeigen"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="im_btn_lp">
|
||||
<button label="IM" name="im_btn" tool_tip="IM-Sitzung öffnen"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="call_btn_lp">
|
||||
<button label="Anrufen" name="call_btn" tool_tip="Diesen Einwohner anrufen"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="share_btn_lp">
|
||||
<button label="Freigeben" name="share_btn" tool_tip="Inventarobjekt freigeben"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="tp_btn_lp" width="85">
|
||||
<button label="Teleportieren" name="teleport_btn" width="84" tool_tip="Teleport anbieten"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Avatar Context Menu">
|
||||
<menu_item_call label="Profil anzeigen" name="View Profile"/>
|
||||
<menu_item_call label="Freund hinzufügen" name="Add Friend"/>
|
||||
<menu_item_call label="Freund entfernen" name="Remove Friend"/>
|
||||
<menu_item_call label="IM" name="IM"/>
|
||||
<menu_item_call label="Anrufen" name="Call"/>
|
||||
<menu_item_call label="Karte" name="Map"/>
|
||||
<menu_item_call label="Verfolgen" name="Track"/>
|
||||
<menu_item_call label="Teilen" name="Share"/>
|
||||
<menu_item_call label="Bezahlen" name="Pay"/>
|
||||
<menu_item_call label="Teleport anbieten" name="teleport"/>
|
||||
<menu_item_call label="Teleportiere zu Avatar" name="teleport_to"/>
|
||||
<menu_item_call label="Heranzoomen" name="zoom_in"/>
|
||||
<menu_item_call label="Gruppeneinladung schicken" name="GroupInvite"/>
|
||||
<menu_item_call label="Skript-Info anzeigen" name="ScriptInfo"/>
|
||||
<menu_item_check label="Ignorieren/Freischalten" name="Block/Unblock"/>
|
||||
<menu_item_call label="Missbrauch melden" name="report"/>
|
||||
<menu_item_call label="Einfrieren" name="freeze"/>
|
||||
<menu_item_call label="Parzelle: Entfernen" name="eject"/>
|
||||
<menu_item_call label="Estate: Hinauswerfen" name="kick"/>
|
||||
<menu_item_call label="Estate: Teleport nach Hause" name="teleport_home"/>
|
||||
<menu_item_call label="Estate: Verbannen" name="estate_ban"/>
|
||||
<menu_item_call label="Nicht anzeigen" name="derender"/>
|
||||
<menu_item_call label="Nicht anzeigen + Blacklist" name="derender_permanent"/>
|
||||
</context_menu>
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<toggleable_menu name="menu_group_plus">
|
||||
<menu_item_check label="Karte oberhalb Radar anzeigen" name="ShowRadarMinimap"/>
|
||||
<menu_item_check label="Anzeige auf definierten Radius beschränken" name="LimitRadarByRange"/>
|
||||
<context_menu label="Radar-Namensformat" name="radarNameFormat">
|
||||
<menu_item_check label="Anzeigename" name="radarFmtDN"/>
|
||||
<menu_item_check label="Benutzername" name="radarFmtUN"/>
|
||||
<menu_item_check label="Anzeigename (Benutzername)" name="radarFmtDNUN"/>
|
||||
<menu_item_check label="Benutzername (Anzeigename)" name="radarFmtUNDN"/>
|
||||
</context_menu>
|
||||
<context_menu label="Melden via" name="report_to_menu">
|
||||
<menu_item_check label="Chat in der Nähe" name="radar_nearby_chat"/>
|
||||
<menu_item_check label="Benachrichtigungs-Toasts" name="radar_nearby_chat"/>
|
||||
</context_menu>
|
||||
<menu_item_check label="Chat-Reichweite auf Karte anzeigen" name="MiniMapChatRing"/>
|
||||
<menu_item_check label="Betreten der Draw Distance melden" name="RadarReportDrawRangeEnter"/>
|
||||
<menu_item_check label="Verlassen der Draw Distance melden" name="RadarReportDrawRangeLeave"/>
|
||||
<menu_item_check label="Betreten der Chat-Reichweite melden" name="RadarReportChatRangeEnter"/>
|
||||
<menu_item_check label="Verlassen der Chat-Reichweite melden" name="RadarReportChatRangeLeave"/>
|
||||
<menu_item_check label="Betreten der Region melden" name="RadarReportSimRangeEnter"/>
|
||||
<menu_item_check label="Verlassen der Region melden" name="RadarReportSimRangeLeave"/>
|
||||
<menu_item_check label="Eintrittsmeldungen an Skripte senden" name="RadarEnterChannelAlert"/>
|
||||
<menu_item_check label="Austrittsmeldungen an Skripte senden" name="RadarLeaveChannelAlert"/>
|
||||
<menu_item_call label="Ignorierte Einwohner & Objekte anzeigen" name="show_blocked_list"/>
|
||||
</toggleable_menu>
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Multi-Selected People Context Menu">
|
||||
<menu_item_call label="Freunde hinzufügen" name="Add Friends"/>
|
||||
<menu_item_call label="Freunde entfernen" name="Remove Friend"/>
|
||||
<menu_item_call label="IM" name="IM"/>
|
||||
<menu_item_call label="Anrufen" name="Call"/>
|
||||
<menu_item_call label="Teilen" name="Share"/>
|
||||
<menu_item_call label="Bezahlen" name="Pay"/>
|
||||
<menu_item_call label="Teleport anbieten" name="teleport"/>
|
||||
<menu_item_call label="Einfrieren" name="freeze"/>
|
||||
<menu_item_call label="Parzelle: Entfernen" name="eject"/>
|
||||
<menu_item_call label="Estate: Hinauswerfen" name="kick"/>
|
||||
<menu_item_call label="Estate: Teleport nach Hause" name="teleport_home"/>
|
||||
<menu_item_call label="Estate: Verbannen" name="estate_ban"/>
|
||||
<menu_item_call label="Nicht anzeigen" name="derender"/>
|
||||
<menu_item_call label="Nicht anzeigen + Blacklist" name="derender_permanent"/>
|
||||
</context_menu>
|
||||
|
|
@ -6,21 +6,9 @@
|
|||
<menu_item_call label="IM" name="IM"/>
|
||||
<menu_item_call label="Anrufen" name="Call"/>
|
||||
<menu_item_call label="Karte" name="Map"/>
|
||||
<menu_item_call label="Verfolgen" name="Track"/>
|
||||
<menu_item_call label="Teilen" name="Share"/>
|
||||
<menu_item_call label="Bezahlen" name="Pay"/>
|
||||
<menu_item_call label="Teleport anbieten" name="teleport"/>
|
||||
<menu_item_call label="Teleportiere zu Avatar" name="teleport_to"/>
|
||||
<menu_item_call label="Heranzoomen" name="zoom_in"/>
|
||||
<menu_item_call label="Gruppeneinladung schicken" name="GroupInvite"/>
|
||||
<menu_item_call label="Skript-Info anzeigen" name="ScriptInfo"/>
|
||||
<menu_item_check label="Ignorieren/Freischalten" name="Block/Unblock"/>
|
||||
<menu_item_call label="Missbrauch melden" name="report"/>
|
||||
<menu_item_call label="Einfrieren" name="freeze"/>
|
||||
<menu_item_call label="Parzelle: Entfernen" name="eject"/>
|
||||
<menu_item_call label="Estate: Hinauswerfen" name="kick"/>
|
||||
<menu_item_call label="Estate: Teleport nach Hause" name="teleport_home"/>
|
||||
<menu_item_call label="Estate: Verbannen" name="estate_ban"/>
|
||||
<menu_item_call label="Nicht anzeigen" name="derender"/>
|
||||
<menu_item_call label="Nicht anzeigen + Blacklist" name="derender_permanent"/>
|
||||
<menu_item_call label="Teleport anbieten" name="teleport"/>
|
||||
<menu_item_call label="Gruppeneinladung schicken" name="GroupInvite"/>
|
||||
</context_menu>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,4 @@
|
|||
<menu_item_call label="Teilen" name="Share"/>
|
||||
<menu_item_call label="Bezahlen" name="Pay"/>
|
||||
<menu_item_call label="Teleport anbieten" name="teleport"/>
|
||||
<menu_item_call label="Einfrieren" name="freeze"/>
|
||||
<menu_item_call label="Parzelle: Entfernen" name="eject"/>
|
||||
<menu_item_call label="Estate: Hinauswerfen" name="kick"/>
|
||||
<menu_item_call label="Estate: Teleport nach Hause" name="teleport_home"/>
|
||||
<menu_item_call label="Estate: Verbannen" name="estate_ban"/>
|
||||
<menu_item_call label="Nicht anzeigen" name="derender"/>
|
||||
<menu_item_call label="Nicht anzeigen + Blacklist" name="derender_permanent"/>
|
||||
</context_menu>
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@
|
|||
<menu label="Welt" name="World">
|
||||
<menu_item_call label="Animationen synchronisieren" name="Resync Animations"/>
|
||||
<menu_item_call label="Avatare in der Nähe" name="Active Speakers"/>
|
||||
<menu_item_check label="Radar" name="Radar"/>
|
||||
<menu_item_call label="Teleport-Liste" name="Teleport History"/>
|
||||
<menu_item_check label="Orte" name="Places"/>
|
||||
<menu_item_check label="Minikarte" name="Mini-Map"/>
|
||||
|
|
|
|||
|
|
@ -5113,6 +5113,9 @@ Setzen Sie den Editorpfad in Anführungszeichen
|
|||
<string name="Command_Snapshot_To_Disk_Label">
|
||||
Foto auf Datenträger
|
||||
</string>
|
||||
<string name="Command_Radar_Label">
|
||||
Radar
|
||||
</string>
|
||||
<string name="Command_AboutLand_Tooltip">
|
||||
Informationen zu dem von Ihnen besuchten Land
|
||||
</string>
|
||||
|
|
@ -5248,6 +5251,9 @@ Setzen Sie den Editorpfad in Anführungszeichen
|
|||
<string name="Command_Snapshot_To_Disk_Tooltip">
|
||||
Macht ein Foto und speichert es auf der Festplatte
|
||||
</string>
|
||||
<string name="Command_Radar_Tooltip">
|
||||
Öffnet das Radar für Avatare in der Nähe
|
||||
</string>
|
||||
<string name="Toolbar_Bottom_Tooltip">
|
||||
gegenwärtig in der unteren Symbolleiste
|
||||
</string>
|
||||
|
|
@ -5648,4 +5654,31 @@ Setzen Sie den Editorpfad in Anführungszeichen
|
|||
<string name="GroupChatMuteNotice">
|
||||
Ignoriere Gruppenchat von [NAME].
|
||||
</string>
|
||||
|
||||
<!-- <FS:Ansariel> Radar notifications -->
|
||||
<string name="camera_no_focus">
|
||||
Die Kamera kann nicht auf [AVATARNAME] fokussiert werden, da er/sie sich außerhalb der Draw Distance befindet.
|
||||
</string>
|
||||
<string name="entering_draw_distance">
|
||||
kommt in Draw Distance ([DISTANCE] m).
|
||||
</string>
|
||||
<string name="leaving_draw_distance">
|
||||
hat die Draw Distance verlassen.
|
||||
</string>
|
||||
<string name="entering_chat_range">
|
||||
kommt in Chat-Reichweite ([DISTANCE] m).
|
||||
</string>
|
||||
<string name="leaving_chat_range">
|
||||
hat die Chat-Reichweite verlassen.
|
||||
</string>
|
||||
<string nane="entering_region">
|
||||
hat die Region betreten.
|
||||
</string>
|
||||
<string name="entering_region_distance">
|
||||
hat die Region betreten ([DISTANCE] m).
|
||||
</string>
|
||||
<string name="leaving_region">
|
||||
hat die Region verlassen.
|
||||
</string>
|
||||
|
||||
</strings>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,341 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater
|
||||
name="radar"
|
||||
help_topic="fs_radar"
|
||||
title="Radar"
|
||||
width="333"
|
||||
height="440"
|
||||
min_width="250"
|
||||
min_height="150"
|
||||
save_rect="true"
|
||||
save_visibility="true"
|
||||
can_resize="true"
|
||||
can_minimize="true"
|
||||
can_close="true">
|
||||
<string
|
||||
name="no_one_near"
|
||||
value="No one nearby. Looking for people to hang out with? Use the search box to find topics or content you might be interested in, then visit those places to meet people with similar interests."/>
|
||||
<string
|
||||
name="MiniMapToolTipMsg"
|
||||
value="[REGION] (Double-click to open Map, shift-drag to pan)"/>
|
||||
<string
|
||||
name="AltMiniMapToolTipMsg"
|
||||
value="[REGION] (Double-click to teleport, shift-drag to pan)"/>
|
||||
<string
|
||||
name="avatar_name_count"
|
||||
value="Name [[TOTAL]/[IN_REGION]/[IN_CHAT_RANGE]]"/>
|
||||
<filter_editor
|
||||
follows="left|top|right"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="9"
|
||||
label="Filter People"
|
||||
max_length_chars="300"
|
||||
name="filter_input"
|
||||
text_pad_left="10"
|
||||
top="3"
|
||||
width="314"/>
|
||||
<panel
|
||||
background_opaque="false"
|
||||
background_visible="false"
|
||||
follows="all"
|
||||
height="383"
|
||||
label="Nearby"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
help_topic="people_nearby_tab"
|
||||
name="nearby_panel"
|
||||
top_pad="3"
|
||||
width="326">
|
||||
<layout_stack
|
||||
orientation="vertical"
|
||||
clip="true"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
left="0"
|
||||
height="356"
|
||||
width="326"
|
||||
mouse_opaque="false"
|
||||
name="radar_ls"
|
||||
auto_resize="false"
|
||||
user_resize="true">
|
||||
<layout_panel
|
||||
layout="topleft"
|
||||
top="0"
|
||||
left="3"
|
||||
height="140"
|
||||
width="326"
|
||||
min_dim="140"
|
||||
follows="top"
|
||||
mouse_opaque="false"
|
||||
visibility_control="ShowRadarMinimap"
|
||||
name="minimaplayout"
|
||||
auto_resize="false"
|
||||
user_resize="true">
|
||||
<net_map
|
||||
bg_color="NetMapBackgroundColor"
|
||||
visibility_control="ShowRadarMinimap"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
mouse_opaque="false"
|
||||
name="Net Map"
|
||||
width="326"
|
||||
height="140"
|
||||
top="0"/>
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
layout="topleft"
|
||||
top="0"
|
||||
left="0"
|
||||
height="216"
|
||||
width="326"
|
||||
mouse_opaque="false"
|
||||
follows="all"
|
||||
name="radarlayout">
|
||||
<radar_list
|
||||
draw_heading="true"
|
||||
follows="all"
|
||||
height="216"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
top_pad="0"
|
||||
sort_column="0"
|
||||
sort_ascending="true"
|
||||
name="radar_list"
|
||||
draw_stripes="true"
|
||||
multi_select="true"
|
||||
width="326">
|
||||
<radar_list.columns
|
||||
label="Name"
|
||||
name="name"
|
||||
tool_tip="[TOTAL] avatars, [IN_REGION] in the same region, [IN_CHAT_RANGE] in chat range"
|
||||
relative_width="0.37"/>
|
||||
<radar_list.columns
|
||||
label=""
|
||||
name="voice_level"
|
||||
tool_tip="Is talking on voice"
|
||||
relative_width="0.07"/>
|
||||
<radar_list.columns
|
||||
label=""
|
||||
name="in_region"
|
||||
tool_tip="Is in the same region"
|
||||
relative_width="0.03"/>
|
||||
<radar_list.columns
|
||||
label=""
|
||||
name="flags"
|
||||
tool_tip="Has payment info on file"
|
||||
relative_width="0.03"/>
|
||||
<radar_list.columns
|
||||
label="Age"
|
||||
name="age"
|
||||
relative_width="0.1"/>
|
||||
<radar_list.columns
|
||||
label="Seen"
|
||||
name="seen"
|
||||
relative_width="0.15"/>
|
||||
<radar_list.columns
|
||||
label="Range"
|
||||
name="range"
|
||||
relative_width="0.15"/>
|
||||
<radar_list.columns
|
||||
label="av_id"
|
||||
name="uuid"
|
||||
relative_width="0"/>
|
||||
</radar_list>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
||||
<!-- Buttons -->
|
||||
<panel
|
||||
background_visible="false"
|
||||
follows="left|right|bottom"
|
||||
height="27"
|
||||
label="bottom_panel"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="bottom_panel_nearby"
|
||||
top_pad="0"
|
||||
width="331">
|
||||
<menu_button
|
||||
follows="bottom|left"
|
||||
height="25"
|
||||
image_hover_unselected="Toolbar_Left_Over"
|
||||
image_overlay="OptionsMenu_Off"
|
||||
image_selected="Toolbar_Left_Selected"
|
||||
image_unselected="Toolbar_Left_Off"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="nearby_view_sort_btn"
|
||||
tool_tip="Options"
|
||||
top="1"
|
||||
width="31"/>
|
||||
<button
|
||||
follows="bottom|left"
|
||||
height="25"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_overlay="AddItem_Off"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
left_pad="1"
|
||||
name="add_friend_btn_nearby"
|
||||
tool_tip="Add selected Resident to your friends List"
|
||||
width="31">
|
||||
<commit_callback
|
||||
function="People.addFriend"/>
|
||||
</button>
|
||||
<icon
|
||||
follows="bottom|left|right"
|
||||
height="25"
|
||||
image_name="Toolbar_Right_Off"
|
||||
layout="topleft"
|
||||
left_pad="1"
|
||||
name="nearby_dummy_icon"
|
||||
width="262"/>
|
||||
<slider
|
||||
visibility_control="LimitRadarByRange"
|
||||
control_name="NearMeRange"
|
||||
decimal_digits="0"
|
||||
follows="bottom|left"
|
||||
height="16"
|
||||
increment="2"
|
||||
initial_value="96"
|
||||
label="Range(m):"
|
||||
label_width="70"
|
||||
layout="topleft"
|
||||
max_val="4096"
|
||||
min_val="20"
|
||||
name="NearMeRange"
|
||||
visible="True"
|
||||
left_delta="10"
|
||||
top_delta="6"
|
||||
width="220"/>
|
||||
</panel>
|
||||
</panel>
|
||||
|
||||
<!-- END NEARBY TAB -->
|
||||
<panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
top_pad="1"
|
||||
name="button_bar"
|
||||
width="326">
|
||||
<layout_stack
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
name="bottom_bar_ls"
|
||||
orientation="horizontal"
|
||||
top_pad="0"
|
||||
width="326">
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
name="view_profile_btn_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
label="Profile"
|
||||
layout="topleft"
|
||||
left="1"
|
||||
name="view_profile_btn"
|
||||
tool_tip="Show picture, groups, and other Residents information"
|
||||
top="0"
|
||||
width="71"/>
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="1"
|
||||
name="im_btn_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
height="23"
|
||||
label="IM"
|
||||
layout="topleft"
|
||||
name="im_btn"
|
||||
tool_tip="Open instant message session"
|
||||
top="0"
|
||||
width="71"/>
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="3"
|
||||
name="call_btn_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
height="23"
|
||||
label="Call"
|
||||
layout="topleft"
|
||||
name="call_btn"
|
||||
tool_tip="Call this Resident"
|
||||
top="0"
|
||||
width="71"/>
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="3"
|
||||
name="share_btn_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
height="23"
|
||||
label="Share"
|
||||
layout="topleft"
|
||||
name="share_btn"
|
||||
tool_tip="Share an inventory item"
|
||||
top="0"
|
||||
width="71"/>
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="3"
|
||||
name="tp_btn_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
height="23"
|
||||
label="Teleport"
|
||||
layout="topleft"
|
||||
name="teleport_btn"
|
||||
tool_tip="Offer teleport"
|
||||
top="0"
|
||||
width="71"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -0,0 +1,187 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<context_menu
|
||||
layout="topleft"
|
||||
name="Avatar Context Menu">
|
||||
<menu_item_call
|
||||
label="View Profile"
|
||||
layout="topleft"
|
||||
name="View Profile">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Profile" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Add Friend"
|
||||
layout="topleft"
|
||||
name="Add Friend">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.AddFriend" />
|
||||
<menu_item_call.on_enable
|
||||
function="Avatar.EnableItem"
|
||||
parameter="can_add" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Remove Friend"
|
||||
layout="topleft"
|
||||
name="Remove Friend">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.RemoveFriend" />
|
||||
<menu_item_call.on_enable
|
||||
function="Avatar.EnableItem"
|
||||
parameter="can_delete" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="IM"
|
||||
layout="topleft"
|
||||
name="IM">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.IM" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Call"
|
||||
layout="topleft"
|
||||
name="Call">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Call" />
|
||||
<menu_item_call.on_enable
|
||||
function="Avatar.EnableItem"
|
||||
parameter="can_call" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Map"
|
||||
layout="topleft"
|
||||
name="Map">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.ShowOnMap" />
|
||||
<menu_item_call.on_enable
|
||||
function="Avatar.EnableItem"
|
||||
parameter="can_show_on_map" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Track"
|
||||
layout="topleft"
|
||||
name="Track">
|
||||
<menu_item_call.on_click
|
||||
function="Nearby.People.TrackAvatar" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Share"
|
||||
layout="topleft"
|
||||
name="Share">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Share" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Pay"
|
||||
layout="topleft"
|
||||
name="Pay">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Pay" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Offer Teleport"
|
||||
name="teleport">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.OfferTeleport"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Teleport To"
|
||||
name="teleport_to">
|
||||
<menu_item_call.on_click
|
||||
function="Nearby.People.TeleportToAvatar"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Zoom In"
|
||||
name="zoom_in">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.ZoomIn"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleZoomIn"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Invite To Group"
|
||||
name="GroupInvite">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.GroupInvite" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Get Script Info"
|
||||
name="ScriptInfo">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.getScriptInfo" />
|
||||
</menu_item_call>
|
||||
|
||||
|
||||
<menu_item_separator />
|
||||
|
||||
<menu_item_check
|
||||
label="Block/Unblock"
|
||||
layout="topleft"
|
||||
name="Block/Unblock">
|
||||
<menu_item_check.on_click
|
||||
function="Avatar.BlockUnblock" />
|
||||
<menu_item_check.on_check
|
||||
function="Avatar.CheckItem"
|
||||
parameter="is_blocked" />
|
||||
<menu_item_check.on_enable
|
||||
function="Avatar.EnableItem"
|
||||
parameter="can_block" />
|
||||
</menu_item_check>
|
||||
<menu_item_call
|
||||
label="Report"
|
||||
name="report">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Report"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Freeze"
|
||||
name="freeze">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Freeze"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleFreezeEject"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Parcel Eject"
|
||||
name="eject">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Eject"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleFreezeEject"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Estate Kick"
|
||||
name="kick">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Kick"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleKickTeleportHome"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Estate Teleport Home"
|
||||
name="teleport_home">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.TeleportHome"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleKickTeleportHome"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Estate Ban"
|
||||
name="estate_ban">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.EstateBan"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleKickTeleportHome"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Derender"
|
||||
name="derender">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Derender"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Derender + Blacklist"
|
||||
name="derender_permanent">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.DerenderPermanent"/>
|
||||
</menu_item_call>
|
||||
</context_menu>
|
||||
|
|
@ -0,0 +1,202 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<toggleable_menu
|
||||
name="menu_group_plus"
|
||||
left="0" bottom="0" visible="false"
|
||||
mouse_opaque="false">
|
||||
|
||||
<menu_item_check
|
||||
label="Show Minimap above Radar"
|
||||
name="ShowRadarMinimap">
|
||||
<menu_item_check.on_check
|
||||
control="ShowRadarMinimap" />
|
||||
<menu_item_check.on_click
|
||||
function="ToggleControl"
|
||||
parameter="ShowRadarMinimap" />
|
||||
<menu_item_check.on_enable
|
||||
function="RLV.EnableIfNot"
|
||||
parameter="showminimap" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_check
|
||||
label="Limit Results to specific Radius"
|
||||
name="LimitRadarByRange">
|
||||
<menu_item_check.on_check
|
||||
control="LimitRadarByRange" />
|
||||
<menu_item_check.on_click
|
||||
function="ToggleControl"
|
||||
parameter="LimitRadarByRange" />
|
||||
</menu_item_check>
|
||||
|
||||
<context_menu
|
||||
label="Radar Name Format"
|
||||
name="radarNameFormat">
|
||||
<menu_item_check
|
||||
label="Display Name"
|
||||
name="radarFmtDN"
|
||||
enabled_control="UseDisplayNames">
|
||||
<menu_item_check.on_check
|
||||
function="Radar.NameFmtCheck"
|
||||
parameter="DN"/>
|
||||
<menu_item_check.on_click
|
||||
function="Radar.NameFmt"
|
||||
parameter="DN"/>
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Username"
|
||||
name="radarFmtUN">
|
||||
<menu_item_check.on_check
|
||||
function="Radar.NameFmtCheck"
|
||||
parameter="UN"/>
|
||||
<menu_item_check.on_click
|
||||
function="Radar.NameFmt"
|
||||
parameter="UN"/>
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Display Name (Username)"
|
||||
name="radarFmtDNUN"
|
||||
enabled_control="UseDisplayNames">
|
||||
<menu_item_check.on_check
|
||||
function="Radar.NameFmtCheck"
|
||||
parameter="DNUN"/>
|
||||
<menu_item_check.on_click
|
||||
function="Radar.NameFmt"
|
||||
parameter="DNUN"/>
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Username (Display Name)"
|
||||
name="radarFmtUNDN"
|
||||
enabled_control="UseDisplayNames">
|
||||
<menu_item_check.on_check
|
||||
function="Radar.NameFmtCheck"
|
||||
parameter="UNDN"/>
|
||||
<menu_item_check.on_click
|
||||
function="Radar.NameFmt"
|
||||
parameter="UNDN"/>
|
||||
</menu_item_check>
|
||||
</context_menu>
|
||||
|
||||
<menu_item_separator layout="topleft" />
|
||||
|
||||
<context_menu
|
||||
label="Report To"
|
||||
name="report_to_menu">
|
||||
<menu_item_check
|
||||
label="Nearby Chat"
|
||||
name="radar_nearby_chat">
|
||||
<menu_item_check.on_check
|
||||
function="Radar.ReportToCheck"
|
||||
parameter="radar_nearby_chat" />
|
||||
<menu_item_check.on_click
|
||||
function="Radar.ReportTo"
|
||||
parameter="radar_nearby_chat" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Notification Toasts"
|
||||
name="radar_nearby_chat">
|
||||
<menu_item_check.on_check
|
||||
function="Radar.ReportToCheck"
|
||||
parameter="radar_toasts" />
|
||||
<menu_item_check.on_click
|
||||
function="Radar.ReportTo"
|
||||
parameter="radar_toasts" />
|
||||
</menu_item_check>
|
||||
</context_menu>
|
||||
|
||||
<menu_item_check
|
||||
label="Local chat distance ring in Minimap"
|
||||
name="MiniMapChatRing">
|
||||
<menu_item_check.on_check
|
||||
control="MiniMapChatRing" />
|
||||
<menu_item_check.on_click
|
||||
function="ToggleControl"
|
||||
parameter="MiniMapChatRing" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_check
|
||||
label="Report Entering Draw Range"
|
||||
name="RadarReportDrawRangeEnter">
|
||||
<menu_item_check.on_check
|
||||
control="RadarReportDrawRangeEnter" />
|
||||
<menu_item_check.on_click
|
||||
function="ToggleControl"
|
||||
parameter="RadarReportDrawRangeEnter" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_check
|
||||
label="Report Leaving Draw Range"
|
||||
name="RadarReportDrawRangeLeave">
|
||||
<menu_item_check.on_check
|
||||
control="RadarReportDrawRangeLeave" />
|
||||
<menu_item_check.on_click
|
||||
function="ToggleControl"
|
||||
parameter="RadarReportDrawRangeLeave" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_check
|
||||
label="Report Entering Chat Range"
|
||||
name="RadarReportChatRangeEnter">
|
||||
<menu_item_check.on_check
|
||||
control="RadarReportChatRangeEnter" />
|
||||
<menu_item_check.on_click
|
||||
function="ToggleControl"
|
||||
parameter="RadarReportChatRangeEnter" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_check
|
||||
label="Report Leaving Chat Range"
|
||||
name="RadarReportChatRangeLeave">
|
||||
<menu_item_check.on_check
|
||||
control="RadarReportChatRangeLeave" />
|
||||
<menu_item_check.on_click
|
||||
function="ToggleControl"
|
||||
parameter="RadarReportChatRangeLeave" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_check
|
||||
label="Report Entering your Region"
|
||||
name="RadarReportSimRangeEnter">
|
||||
<menu_item_check.on_check
|
||||
control="RadarReportSimRangeEnter" />
|
||||
<menu_item_check.on_click
|
||||
function="ToggleControl"
|
||||
parameter="RadarReportSimRangeEnter" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_check
|
||||
label="Report Leaving your Region"
|
||||
name="RadarReportSimRangeLeave">
|
||||
<menu_item_check.on_check
|
||||
control="RadarReportSimRangeLeave" />
|
||||
<menu_item_check.on_click
|
||||
function="ToggleControl"
|
||||
parameter="RadarReportSimRangeLeave" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_check
|
||||
label="Report Enter Alerts to Scripts"
|
||||
name="RadarEnterChannelAlert">
|
||||
<menu_item_check.on_check
|
||||
control="RadarEnterChannelAlert" />
|
||||
<menu_item_check.on_click
|
||||
function="ToggleControl"
|
||||
parameter="RadarEnterChannelAlert" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_check
|
||||
label="Report Exit Alerts to Scripts"
|
||||
name="RadarLeaveChannelAlert">
|
||||
<menu_item_check.on_check
|
||||
control="RadarLeaveChannelAlert" />
|
||||
<menu_item_check.on_click
|
||||
function="ToggleControl"
|
||||
parameter="RadarLeaveChannelAlert" />
|
||||
<menu_item_check.on_enable
|
||||
function="RLV.EnableIfNot"
|
||||
parameter="showminimap" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_separator layout="topleft" />
|
||||
<menu_item_call name="show_blocked_list" label="Show Blocked Residents & Objects">
|
||||
<menu_item_call.on_click function="Radar.Gear.Action" userdata="panel_block_list_sidetray" />
|
||||
</menu_item_call>
|
||||
</toggleable_menu>
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<context_menu
|
||||
layout="topleft"
|
||||
name="Multi-Selected People Context Menu">
|
||||
<menu_item_call
|
||||
enabled="false"
|
||||
label="Add Friends"
|
||||
layout="topleft"
|
||||
name="Add Friends">
|
||||
<on_click
|
||||
function="Avatar.AddFriends" />
|
||||
<on_enable
|
||||
function="Avatar.EnableItem"
|
||||
parameter="can_add" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Remove Friends"
|
||||
layout="topleft"
|
||||
name="Remove Friend">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.RemoveFriend" />
|
||||
<menu_item_call.on_enable
|
||||
function="Avatar.EnableItem"
|
||||
parameter="can_delete" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="IM"
|
||||
layout="topleft"
|
||||
name="IM">
|
||||
<on_click
|
||||
function="Avatar.IM" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
enabled="false"
|
||||
label="Call"
|
||||
layout="topleft"
|
||||
name="Call">
|
||||
<on_click
|
||||
function="Avatar.Call" />
|
||||
<on_enable
|
||||
function="Avatar.EnableItem"
|
||||
parameter="can_call" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
enabled="false"
|
||||
label="Share"
|
||||
layout="topleft"
|
||||
name="Share">
|
||||
<on_click
|
||||
function="Avatar.Share" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
enabled="false"
|
||||
label="Pay"
|
||||
layout="topleft"
|
||||
name="Pay">
|
||||
<on_click
|
||||
function="Avatar.Pay" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Offer Teleport"
|
||||
name="teleport">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.OfferTeleport"/>
|
||||
</menu_item_call>
|
||||
|
||||
<menu_item_separator />
|
||||
|
||||
<menu_item_call
|
||||
label="Freeze"
|
||||
name="freeze">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Freeze"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleFreezeEject"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Parcel Eject"
|
||||
name="eject">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Eject"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleFreezeEject"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Estate Kick"
|
||||
name="kick">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Kick"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleKickTeleportHome"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Estate Teleport Home"
|
||||
name="teleport_home">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.TeleportHome"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleKickTeleportHome"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Estate Ban"
|
||||
name="estate_ban">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.EstateBan"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleKickTeleportHome"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Derender"
|
||||
name="derender">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Derender"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Derender + Blacklist"
|
||||
name="derender_permanent">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.DerenderPermanent"/>
|
||||
</menu_item_call>
|
||||
</context_menu>
|
||||
|
|
@ -56,13 +56,6 @@
|
|||
function="Avatar.EnableItem"
|
||||
parameter="can_show_on_map" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Track"
|
||||
layout="topleft"
|
||||
name="Track">
|
||||
<menu_item_call.on_click
|
||||
function="Nearby.People.TrackAvatar" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Share"
|
||||
layout="topleft"
|
||||
|
|
@ -77,42 +70,6 @@
|
|||
<menu_item_call.on_click
|
||||
function="Avatar.Pay" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Offer Teleport"
|
||||
name="teleport">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.OfferTeleport"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Teleport To"
|
||||
name="teleport_to">
|
||||
<menu_item_call.on_click
|
||||
function="Nearby.People.TeleportToAvatar"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Zoom In"
|
||||
name="zoom_in">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.ZoomIn"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleZoomIn"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Invite To Group"
|
||||
name="GroupInvite">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.GroupInvite" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Get Script Info"
|
||||
name="ScriptInfo">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.getScriptInfo" />
|
||||
</menu_item_call>
|
||||
|
||||
|
||||
<menu_item_separator />
|
||||
|
||||
<menu_item_check
|
||||
label="Block/Unblock"
|
||||
layout="topleft"
|
||||
|
|
@ -126,62 +83,16 @@
|
|||
function="Avatar.EnableItem"
|
||||
parameter="can_block" />
|
||||
</menu_item_check>
|
||||
<menu_item_call
|
||||
label="Report"
|
||||
name="report">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Report"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Freeze"
|
||||
name="freeze">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Freeze"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleFreezeEject"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Parcel Eject"
|
||||
name="eject">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Eject"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleFreezeEject"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Estate Kick"
|
||||
name="kick">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Kick"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleKickTeleportHome"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Estate Teleport Home"
|
||||
name="teleport_home">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.TeleportHome"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleKickTeleportHome"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Estate Ban"
|
||||
name="estate_ban">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.EstateBan"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleKickTeleportHome"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Derender"
|
||||
name="derender">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Derender"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Derender + Blacklist"
|
||||
name="derender_permanent">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.DerenderPermanent"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Offer Teleport"
|
||||
name="teleport">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.OfferTeleport"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Invite To Group"
|
||||
name="GroupInvite">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.GroupInvite" />
|
||||
</menu_item_call>
|
||||
</context_menu>
|
||||
|
|
|
|||
|
|
@ -63,59 +63,4 @@
|
|||
<menu_item_call.on_click
|
||||
function="Avatar.OfferTeleport"/>
|
||||
</menu_item_call>
|
||||
|
||||
<menu_item_separator />
|
||||
|
||||
<menu_item_call
|
||||
label="Freeze"
|
||||
name="freeze">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Freeze"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleFreezeEject"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Parcel Eject"
|
||||
name="eject">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Eject"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleFreezeEject"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Estate Kick"
|
||||
name="kick">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Kick"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleKickTeleportHome"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Estate Teleport Home"
|
||||
name="teleport_home">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.TeleportHome"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleKickTeleportHome"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Estate Ban"
|
||||
name="estate_ban">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.EstateBan"/>
|
||||
<menu_item_call.on_visible
|
||||
function="Avatar.VisibleKickTeleportHome"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Derender"
|
||||
name="derender">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Derender"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Derender + Blacklist"
|
||||
name="derender_permanent">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.DerenderPermanent"/>
|
||||
</menu_item_call>
|
||||
</context_menu>
|
||||
|
|
|
|||
|
|
@ -638,6 +638,17 @@
|
|||
parameter="nearby_panel" />
|
||||
</menu_item_call>
|
||||
|
||||
<menu_item_check
|
||||
label="Radar"
|
||||
name="Radar">
|
||||
<menu_item_check.on_check
|
||||
function="Floater.Visible"
|
||||
parameter="fs_radar" />
|
||||
<menu_item_check.on_click
|
||||
function="Floater.Toggle"
|
||||
parameter="fs_radar" />
|
||||
</menu_item_check>
|
||||
|
||||
<menu_item_call
|
||||
label="Teleport History"
|
||||
name="Teleport History"
|
||||
|
|
|
|||
|
|
@ -14,30 +14,6 @@
|
|||
<string
|
||||
name="high_server_load"
|
||||
value="Due to server load, mass toggling visibility can take a while to become effective. Please be patient."/>
|
||||
<string
|
||||
name="camera_no_focus"
|
||||
value="The camera cannot focus user [AVATARNAME] because they are outside your draw distance."/>
|
||||
<string
|
||||
name="entering_draw_distance"
|
||||
value="entered draw distance ([DISTANCE] m)."/>
|
||||
<string
|
||||
name="leaving_draw_distance"
|
||||
value="left draw distance."/>
|
||||
<string
|
||||
name="entering_chat_range"
|
||||
value="entered chat range ([DISTANCE] m)."/>
|
||||
<string
|
||||
name="leaving_chat_range"
|
||||
value="left chat range."/>
|
||||
<string
|
||||
name="entering_region"
|
||||
value="entered the region."/>
|
||||
<string
|
||||
name="entering_region_distance"
|
||||
value="entered the region ([DISTANCE] m)."/>
|
||||
<string
|
||||
name="leaving_region"
|
||||
value="left the region."/>
|
||||
<string
|
||||
name="no_recent_people"
|
||||
value="No recent people. Looking for people to hang out with? Use the search box to find topics or content you might be interested in, then visit those places to meet people with similar interests." />
|
||||
|
|
@ -146,7 +122,7 @@ Looking for people to hang out with? Use the search box to find topics or conten
|
|||
top="0" left="3"
|
||||
height="140"
|
||||
width="326"
|
||||
max_height="140"
|
||||
min_dim="140"
|
||||
follows="top"
|
||||
mouse_opaque="false"
|
||||
visibility_control="ShowRadarMinimap"
|
||||
|
|
@ -282,6 +258,7 @@ Looking for people to hang out with? Use the search box to find topics or conten
|
|||
name="nearby_dummy_icon"
|
||||
width="257" />
|
||||
<slider
|
||||
visibility_control="LimitRadarByRange"
|
||||
control_name="NearMeRange"
|
||||
decimal_digits="0"
|
||||
follows="bottom|left"
|
||||
|
|
|
|||
|
|
@ -4863,6 +4863,7 @@ Try enclosing path to the editor with double quotes.
|
|||
<string name="Command_Teleport_History_Label">Teleport History</string>
|
||||
<string name="Command_Pose_Stand_Label">Pose Stand</string>
|
||||
<string name="Command_Snapshot_To_Disk_Label">Snapshot to Disk</string>
|
||||
<string name="Command_Radar_Label">Radar</string>
|
||||
|
||||
|
||||
<string name="Command_AboutLand_Tooltip">Information about the land you're visiting</string>
|
||||
|
|
@ -4910,6 +4911,7 @@ Try enclosing path to the editor with double quotes.
|
|||
<string name="Command_Teleport_History_Tooltip">Opens Teleport History</string>
|
||||
<string name="Command_Pose_Stand_Tooltip">Avatar pose stand for adjusting attachments</string>
|
||||
<string name="Command_Snapshot_To_Disk_Tooltip">Takes a quick snapshot and saves it to harddisk</string>
|
||||
<string name="Command_Radar_Tooltip">Opens the radar for nearby avatars</string>
|
||||
|
||||
<string name="Toolbar_Bottom_Tooltip">currently in your bottom toolbar</string>
|
||||
<string name="Toolbar_Left_Tooltip" >currently in your left toolbar</string>
|
||||
|
|
@ -5082,4 +5084,14 @@ Try enclosing path to the editor with double quotes.
|
|||
<string name="QP_WL_None">None</string>
|
||||
|
||||
<string name="GroupChatMuteNotice">Muting group chat from [NAME].</string>
|
||||
|
||||
<!-- <FS:Ansariel> Radar notifications -->
|
||||
<string name="camera_no_focus">The camera cannot focus user [AVATARNAME] because they are outside your draw distance.</string>
|
||||
<string name="entering_draw_distance">entered draw distance ([DISTANCE] m).</string>
|
||||
<string name="leaving_draw_distance">left draw distance.</string>
|
||||
<string name="entering_chat_range">entered chat range ([DISTANCE] m).</string>
|
||||
<string name="leaving_chat_range">left chat range.</string>
|
||||
<string name="entering_region">entered the region.</string>
|
||||
<string name="entering_region_distance">entered the region ([DISTANCE] m).</string>
|
||||
<string name="leaving_region">left the region.</string>
|
||||
</strings>
|
||||
|
|
|
|||
|
|
@ -14,30 +14,6 @@
|
|||
<string
|
||||
name="high_server_load"
|
||||
value="Due to server load, mass toggling visibility can take a while to become effective. Please be patient."/>
|
||||
<string
|
||||
name="camera_no_focus"
|
||||
value="The camera cannot focus user [AVATARNAME] because they are outside your draw distance."/>
|
||||
<string
|
||||
name="entering_draw_distance"
|
||||
value="entered draw distance ([DISTANCE] m)."/>
|
||||
<string
|
||||
name="leaving_draw_distance"
|
||||
value="left draw distance."/>
|
||||
<string
|
||||
name="entering_chat_range"
|
||||
value="entered chat range ([DISTANCE] m)."/>
|
||||
<string
|
||||
name="leaving_chat_range"
|
||||
value="left chat range."/>
|
||||
<string
|
||||
name="entering_region"
|
||||
value="entered the region."/>
|
||||
<string
|
||||
name="entering_region_distance"
|
||||
value="entered the region ([DISTANCE] m)."/>
|
||||
<string
|
||||
name="leaving_region"
|
||||
value="left the region."/>
|
||||
<string
|
||||
name="no_recent_people"
|
||||
value="No recent people. Looking for people to hang out with? Use the search box to find topics or content you might be interested in, then visit those places to meet people with similar interests." />
|
||||
|
|
@ -146,7 +122,7 @@ Looking for people to hang out with? Use the search box to find topics or conten
|
|||
top="0" left="3"
|
||||
height="140"
|
||||
width="326"
|
||||
max_height="140"
|
||||
min_dim="140"
|
||||
follows="top"
|
||||
mouse_opaque="false"
|
||||
visibility_control="ShowRadarMinimap"
|
||||
|
|
@ -282,6 +258,7 @@ Looking for people to hang out with? Use the search box to find topics or conten
|
|||
name="nearby_dummy_icon"
|
||||
width="257" />
|
||||
<slider
|
||||
visibility_control="LimitRadarByRange"
|
||||
control_name="NearMeRange"
|
||||
decimal_digits="0"
|
||||
follows="bottom|left"
|
||||
|
|
|
|||
|
|
@ -13,30 +13,6 @@
|
|||
<string
|
||||
name="high_server_load"
|
||||
value="Due to server load, mass toggling visibility can take a while to become effective. Please be patient."/>
|
||||
<string
|
||||
name="camera_no_focus"
|
||||
value="The camera cannot focus user [AVATARNAME] because they are outside your draw distance."/>
|
||||
<string
|
||||
name="entering_draw_distance"
|
||||
value="entered draw distance ([DISTANCE] m)."/>
|
||||
<string
|
||||
name="leaving_draw_distance"
|
||||
value="left draw distance."/>
|
||||
<string
|
||||
name="entering_chat_range"
|
||||
value="entered chat range ([DISTANCE] m)."/>
|
||||
<string
|
||||
name="leaving_chat_range"
|
||||
value="left chat range."/>
|
||||
<string
|
||||
name="entering_region"
|
||||
value="entered the region."/>
|
||||
<string
|
||||
name="entering_region_distance"
|
||||
value="entered the region ([DISTANCE] m)."/>
|
||||
<string
|
||||
name="leaving_region"
|
||||
value="left the region."/>
|
||||
<string
|
||||
name="no_recent_people"
|
||||
value="No recent people. Looking for people to hang out with? Use the search box to find topics or content you might be interested in, then visit those places to meet people with similar interests." />
|
||||
|
|
@ -160,6 +136,7 @@ Looking for people to hang out with? Use the search box to find topics or conten
|
|||
height="140"
|
||||
width="313"
|
||||
follows="all"
|
||||
min_dim="140"
|
||||
mouse_opaque="false"
|
||||
visibility_control="ShowRadarMinimap"
|
||||
name="minimaplayout"
|
||||
|
|
@ -362,6 +339,7 @@ Looking for people to hang out with? Use the search box to find topics or conten
|
|||
layout="topleft"
|
||||
follows="left|top" />
|
||||
<slider
|
||||
visibility_control="LimitRadarByRange"
|
||||
enabled_control="LimitRadarByRange"
|
||||
control_name="NearMeRange"
|
||||
decimal_digits="0"
|
||||
|
|
|
|||
Loading…
Reference in New Issue