commit
e87975284e
|
|
@ -7,6 +7,8 @@ syntax: glob
|
|||
# Emacs temp files
|
||||
*~
|
||||
.*.swp
|
||||
#OSX image cache file
|
||||
*.DS_Store
|
||||
LICENSES
|
||||
indra/.distcc
|
||||
indra/build-darwin-*
|
||||
|
|
|
|||
|
|
@ -0,0 +1,67 @@
|
|||
# DeploySharedLibs.cmake
|
||||
# This is a script to be run at build time! Its not part of the cmake configuration!
|
||||
# See indra/cmake/LLSharedLibs.cmake for a macro that simplifies adding a command to a target to run this script.
|
||||
|
||||
# This script requires a few cmake variable to be set on the command line:
|
||||
# BIN_NAME= The full path the the binary to search for dependecies.
|
||||
# SEARCH_DIRS= The full paths to dirs to search for dependencies.
|
||||
# DST_PATH= The full path where the dependecies will be copied.
|
||||
include(GetPrerequisites)
|
||||
message("Getting recursive dependencies for file: ${BIN_NAME}")
|
||||
set(EXCLUDE_SYSTEM 1)
|
||||
set(RECURSE 1)
|
||||
get_filename_component(EXE_PATH ${BIN_NAME} PATH)
|
||||
|
||||
get_prerequisites( ${BIN_NAME} RESULTS ${EXCLUDE_SYSTEM} ${RECURSE} "${EXE_PATH}" "${SEARCH_DIRS}" )
|
||||
|
||||
foreach(DEP ${RESULTS})
|
||||
Message("Processing dependency: ${DEP}")
|
||||
get_filename_component(DEP_FILE ${DEP} NAME)
|
||||
set(DEP_FILES ${DEP_FILES} ${DEP_FILE})
|
||||
endforeach(DEP)
|
||||
|
||||
if(DEP_FILES)
|
||||
list(REMOVE_DUPLICATES DEP_FILES)
|
||||
endif(DEP_FILES)
|
||||
|
||||
foreach(DEP_FILE ${DEP_FILES})
|
||||
if(FOUND_FILES)
|
||||
list(FIND FOUND_FILES ${DEP_FILE} FOUND)
|
||||
else(FOUND_FILES)
|
||||
set(FOUND -1)
|
||||
endif(FOUND_FILES)
|
||||
|
||||
if(FOUND EQUAL -1)
|
||||
find_path(DEP_PATH ${DEP_FILE} PATHS ${SEARCH_DIRS} NO_DEFAULT_PATH)
|
||||
if(DEP_PATH)
|
||||
set(FOUND_FILES ${FOUND_FILES} "${DEP_PATH}/${DEP_FILE}")
|
||||
set(DEP_PATH NOTFOUND) #reset DEP_PATH for the next find_path call.
|
||||
else(DEP_PATH)
|
||||
set(MISSING_FILES ${MISSING_FILES} ${DEP_FILE})
|
||||
endif(DEP_PATH)
|
||||
endif(FOUND EQUAL -1)
|
||||
endforeach(DEP_FILE)
|
||||
|
||||
if(MISSING_FILES)
|
||||
message("Missing:")
|
||||
foreach(FILE ${MISSING_FILES})
|
||||
message(" ${FILE}")
|
||||
endforeach(FILE)
|
||||
message("Searched in:")
|
||||
foreach(SEARCH_DIR ${SEARCH_DIRS})
|
||||
message(" ${SEARCH_DIR}")
|
||||
endforeach(SEARCH_DIR)
|
||||
message(FATAL_ERROR "Failed")
|
||||
endif(MISSING_FILES)
|
||||
|
||||
if(FOUND_FILES)
|
||||
foreach(FILE ${FOUND_FILES})
|
||||
get_filename_component(DST_FILE ${FILE} NAME)
|
||||
set(DST_FILE "${DST_PATH}/${DST_FILE}")
|
||||
message("Copying ${FILE} to ${DST_FILE}")
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${FILE} ${DST_FILE}
|
||||
)
|
||||
endforeach(FILE ${FOUND_FILES})
|
||||
endif(FOUND_FILES)
|
||||
message("Success!")
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
# ll_deploy_sharedlibs_command
|
||||
# target_exe: the cmake target of the executable for which the shared libs will be deployed.
|
||||
# search_dirs: a list of dirs to search for the dependencies
|
||||
# dst_path: path to copy deps to, relative to the output location of the target_exe
|
||||
macro(ll_deploy_sharedlibs_command target_exe search_dirs dst_path)
|
||||
get_target_property(OUTPUT_LOCATION ${target_exe} LOCATION)
|
||||
|
||||
if(DARWIN)
|
||||
get_target_property(IS_BUNDLE ${target_exe} MACOSX_BUNDLE)
|
||||
if(IS_BUNDLE)
|
||||
get_filename_component(TARGET_FILE ${OUTPUT_LOCATION} NAME)
|
||||
set(OUTPUT_PATH ${OUTPUT_LOCATION}.app/Contents/MacOS)
|
||||
set(OUTPUT_LOCATION ${OUTPUT_PATH}/${TARGET_FILE})
|
||||
endif(IS_BUNDLE)
|
||||
else(DARWIN)
|
||||
message(FATAL_ERROR "Only darwin currently supported!")
|
||||
endif(DARWIN)
|
||||
|
||||
add_custom_command(
|
||||
TARGET ${target_exe} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
ARGS
|
||||
"-DBIN_NAME=\"${OUTPUT_LOCATION}\""
|
||||
"-DSEARCH_DIRS=\"${search_dirs}\""
|
||||
"-DDST_PATH=\"${OUTPUT_PATH}/${dst_path}\""
|
||||
"-P"
|
||||
"${CMAKE_SOURCE_DIR}/cmake/DeploySharedLibs.cmake"
|
||||
)
|
||||
|
||||
endmacro(ll_deploy_sharedlibs_command)
|
||||
|
||||
|
|
@ -135,6 +135,7 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key)
|
|||
res->mKey = key;
|
||||
res->setInstanceName(name);
|
||||
res->applyRectControl(); // Can't apply rect control until setting instance name
|
||||
res->applyDockState();//same...
|
||||
if (res->mAutoTile && !res->getHost() && index > 0)
|
||||
{
|
||||
const LLRect& cur_rect = res->getRect();
|
||||
|
|
|
|||
|
|
@ -1419,6 +1419,7 @@ void LLTextBase::createUrlContextMenu(S32 x, S32 y, const std::string &in_url)
|
|||
registrar.add("Url.OpenExternal", boost::bind(&LLUrlAction::openURLExternal, url));
|
||||
registrar.add("Url.Execute", boost::bind(&LLUrlAction::executeSLURL, url));
|
||||
registrar.add("Url.Teleport", boost::bind(&LLUrlAction::teleportToLocation, url));
|
||||
registrar.add("Url.ShowOnMap", boost::bind(&LLUrlAction::showLocationOnMap, url));
|
||||
registrar.add("Url.CopyLabel", boost::bind(&LLUrlAction::copyLabelToClipboard, url));
|
||||
registrar.add("Url.CopyUrl", boost::bind(&LLUrlAction::copyURLToClipboard, url));
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,9 @@ LLTextBox::LLTextBox(const LLTextBox::Params& p)
|
|||
mClickedCallback(NULL)
|
||||
{}
|
||||
|
||||
LLTextBox::~LLTextBox()
|
||||
{}
|
||||
|
||||
BOOL LLTextBox::handleMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
BOOL handled = LLTextBase::handleMouseDown(x, y, mask);
|
||||
|
|
@ -97,6 +100,18 @@ BOOL LLTextBox::handleMouseUp(S32 x, S32 y, MASK mask)
|
|||
return handled;
|
||||
}
|
||||
|
||||
BOOL LLTextBox::handleHover(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
BOOL handled = LLTextBase::handleHover(x, y, mask);
|
||||
if (!handled && mClickedCallback)
|
||||
{
|
||||
// Clickable text boxes change the cursor to a hand
|
||||
LLUI::getWindow()->setCursor(UI_CURSOR_HAND);
|
||||
return TRUE;
|
||||
}
|
||||
return handled;
|
||||
}
|
||||
|
||||
void LLTextBox::setText(const LLStringExplicit& text)
|
||||
{
|
||||
// does string argument insertion
|
||||
|
|
@ -105,6 +120,11 @@ void LLTextBox::setText(const LLStringExplicit& text)
|
|||
LLTextBase::setText(mText.getString());
|
||||
}
|
||||
|
||||
void LLTextBox::setClickedCallback( boost::function<void (void*)> cb, void* userdata /*= NULL */ )
|
||||
{
|
||||
mClickedCallback = boost::bind(cb, userdata);
|
||||
}
|
||||
|
||||
S32 LLTextBox::getTextPixelWidth()
|
||||
{
|
||||
return getContentsRect().getWidth();
|
||||
|
|
@ -115,6 +135,12 @@ S32 LLTextBox::getTextPixelHeight()
|
|||
return getContentsRect().getHeight();
|
||||
}
|
||||
|
||||
|
||||
LLSD LLTextBox::getValue() const
|
||||
{
|
||||
return LLSD(getText());
|
||||
}
|
||||
|
||||
BOOL LLTextBox::setTextArg( const std::string& key, const LLStringExplicit& text )
|
||||
{
|
||||
mText.setArg(key, text);
|
||||
|
|
|
|||
|
|
@ -33,8 +33,6 @@
|
|||
#ifndef LL_LLTEXTBOX_H
|
||||
#define LL_LLTEXTBOX_H
|
||||
|
||||
#include "v4color.h"
|
||||
#include "llstring.h"
|
||||
#include "lluistring.h"
|
||||
#include "lltextbase.h"
|
||||
|
||||
|
|
@ -54,28 +52,25 @@ protected:
|
|||
friend class LLUICtrlFactory;
|
||||
|
||||
public:
|
||||
virtual ~LLTextBox() {}
|
||||
virtual ~LLTextBox();
|
||||
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
|
||||
|
||||
/*virtual*/ void setText( const LLStringExplicit& text );
|
||||
/*virtual*/ void setText( const LLStringExplicit& text );
|
||||
|
||||
void setRightAlign() { mHAlign = LLFontGL::RIGHT; }
|
||||
void setHAlign( LLFontGL::HAlign align ) { mHAlign = align; }
|
||||
void setClickedCallback( boost::function<void (void*)> cb, void* userdata = NULL ){ mClickedCallback = boost::bind(cb, userdata); } // mouse down and up within button
|
||||
|
||||
//const LLFontGL* getFont() const { return mDefaultFont; }
|
||||
//void setFont(const LLFontGL* font) { mDefaultFont = font; }
|
||||
void setClickedCallback( boost::function<void (void*)> cb, void* userdata = NULL );
|
||||
|
||||
void reshapeToFitText();
|
||||
|
||||
//const std::string& getText() const { return mText.getString(); }
|
||||
S32 getTextPixelWidth();
|
||||
S32 getTextPixelHeight();
|
||||
|
||||
virtual LLSD getValue() const { return LLSD(getText()); }
|
||||
virtual BOOL setTextArg( const std::string& key, const LLStringExplicit& text );
|
||||
/*virtual*/ LLSD getValue() const;
|
||||
/*virtual*/ BOOL setTextArg( const std::string& key, const LLStringExplicit& text );
|
||||
|
||||
protected:
|
||||
void onUrlLabelUpdated(const std::string &url, const std::string &label);
|
||||
|
|
|
|||
|
|
@ -121,6 +121,18 @@ void LLUrlAction::teleportToLocation(std::string url)
|
|||
}
|
||||
}
|
||||
|
||||
void LLUrlAction::showLocationOnMap(std::string url)
|
||||
{
|
||||
LLUrlMatch match;
|
||||
if (LLUrlRegistry::instance().findUrl(url, match))
|
||||
{
|
||||
if (! match.getLocation().empty())
|
||||
{
|
||||
executeSLURL("secondlife:///app/worldmap/" + match.getLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLUrlAction::copyURLToClipboard(std::string url)
|
||||
{
|
||||
LLView::getWindow()->copyTextToClipboard(utf8str_to_wstring(url));
|
||||
|
|
|
|||
|
|
@ -67,6 +67,9 @@ public:
|
|||
/// if the Url specifies an SL location, teleport there
|
||||
static void teleportToLocation(std::string url);
|
||||
|
||||
/// if the Url specifies an SL location, show it on a map
|
||||
static void showLocationOnMap(std::string url);
|
||||
|
||||
/// perform the appropriate action for left-clicking on a Url
|
||||
static void clickAction(std::string url);
|
||||
|
||||
|
|
|
|||
|
|
@ -468,6 +468,7 @@ std::string LLUrlEntryTeleport::getLabel(const std::string &url, const LLUrlLabe
|
|||
LLURI uri(url);
|
||||
LLSD path_array = uri.pathArray();
|
||||
S32 path_parts = path_array.size();
|
||||
const std::string label = LLTrans::getString("SLurlLabelTeleport");
|
||||
if (path_parts == 6)
|
||||
{
|
||||
// handle teleport url with (X,Y,Z) coordinates
|
||||
|
|
@ -475,7 +476,7 @@ std::string LLUrlEntryTeleport::getLabel(const std::string &url, const LLUrlLabe
|
|||
std::string x = path_array[path_parts-3];
|
||||
std::string y = path_array[path_parts-2];
|
||||
std::string z = path_array[path_parts-1];
|
||||
return "Teleport to " + location + " (" + x + "," + y + "," + z + ")";
|
||||
return label + " " + location + " (" + x + "," + y + "," + z + ")";
|
||||
}
|
||||
else if (path_parts == 5)
|
||||
{
|
||||
|
|
@ -483,20 +484,20 @@ std::string LLUrlEntryTeleport::getLabel(const std::string &url, const LLUrlLabe
|
|||
std::string location = unescapeUrl(path_array[path_parts-3]);
|
||||
std::string x = path_array[path_parts-2];
|
||||
std::string y = path_array[path_parts-1];
|
||||
return "Teleport to " + location + " (" + x + "," + y + ")";
|
||||
return label + " " + location + " (" + x + "," + y + ")";
|
||||
}
|
||||
else if (path_parts == 4)
|
||||
{
|
||||
// handle teleport url with (X) coordinate only
|
||||
std::string location = unescapeUrl(path_array[path_parts-2]);
|
||||
std::string x = path_array[path_parts-1];
|
||||
return "Teleport to " + location + " (" + x + ")";
|
||||
return label + " " + location + " (" + x + ")";
|
||||
}
|
||||
else if (path_parts == 3)
|
||||
{
|
||||
// handle teleport url with no coordinates
|
||||
std::string location = unescapeUrl(path_array[path_parts-1]);
|
||||
return "Teleport to " + location;
|
||||
return label + " " + location;
|
||||
}
|
||||
|
||||
return url;
|
||||
|
|
@ -599,3 +600,52 @@ std::string LLUrlEntrySLLabel::getUrl(const std::string &string)
|
|||
return getUrlFromWikiLink(string);
|
||||
}
|
||||
|
||||
//
|
||||
// LLUrlEntryWorldMap Describes secondlife:///<location> URLs
|
||||
//
|
||||
LLUrlEntryWorldMap::LLUrlEntryWorldMap()
|
||||
{
|
||||
mPattern = boost::regex("secondlife:///app/worldmap/\\S+/?(\\d+)?/?(\\d+)?/?(\\d+)?/?\\S*",
|
||||
boost::regex::perl|boost::regex::icase);
|
||||
mMenuName = "menu_url_map.xml";
|
||||
mTooltip = LLTrans::getString("TooltipMapUrl");
|
||||
}
|
||||
|
||||
std::string LLUrlEntryWorldMap::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
|
||||
{
|
||||
//
|
||||
// we handle SLURLs in the following formats:
|
||||
// - secondlife:///app/worldmap/PLACE/X/Y/Z
|
||||
// - secondlife:///app/worldmap/PLACE/X/Y
|
||||
// - secondlife:///app/worldmap/PLACE/X
|
||||
//
|
||||
LLURI uri(url);
|
||||
LLSD path_array = uri.pathArray();
|
||||
S32 path_parts = path_array.size();
|
||||
if (path_parts < 3)
|
||||
{
|
||||
return url;
|
||||
}
|
||||
|
||||
const std::string label = LLTrans::getString("SLurlLabelShowOnMap");
|
||||
std::string location = path_array[2];
|
||||
std::string x = (path_parts > 3) ? path_array[3] : "128";
|
||||
std::string y = (path_parts > 4) ? path_array[4] : "128";
|
||||
std::string z = (path_parts > 5) ? path_array[5] : "0";
|
||||
return label + " " + location + " (" + x + "," + y + "," + z + ")";
|
||||
}
|
||||
|
||||
std::string LLUrlEntryWorldMap::getLocation(const std::string &url) const
|
||||
{
|
||||
// return the part of the Url after secondlife:///app/worldmap/ part
|
||||
const std::string search_string = "//app/worldmap/";
|
||||
size_t pos = url.find(search_string);
|
||||
if (pos == std::string::npos)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
pos += search_string.size();
|
||||
return url.substr(pos, url.size() - pos);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -243,4 +243,16 @@ public:
|
|||
/*virtual*/ std::string getUrl(const std::string &string);
|
||||
};
|
||||
|
||||
///
|
||||
/// LLUrlEntryWorldMap Describes a Second Life worldmap Url, e.g.,
|
||||
/// secondlife:///app/worldmap/Ahern/50/50/50
|
||||
///
|
||||
class LLUrlEntryWorldMap : public LLUrlEntryBase
|
||||
{
|
||||
public:
|
||||
LLUrlEntryWorldMap();
|
||||
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
|
||||
/*virtual*/ std::string getLocation(const std::string &url) const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ LLUrlRegistry::LLUrlRegistry()
|
|||
registerUrl(new LLUrlEntryGroup());
|
||||
registerUrl(new LLUrlEntryParcel());
|
||||
registerUrl(new LLUrlEntryTeleport());
|
||||
registerUrl(new LLUrlEntryWorldMap());
|
||||
registerUrl(new LLUrlEntryObjectIM());
|
||||
registerUrl(new LLUrlEntryPlace());
|
||||
registerUrl(new LLUrlEntrySL());
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ include(LLMessage)
|
|||
include(LLVFS)
|
||||
include(LLXML)
|
||||
include(Linking)
|
||||
include(LLSharedLibs)
|
||||
|
||||
include_directories(
|
||||
${LLCOMMON_INCLUDE_DIRS}
|
||||
|
|
@ -74,3 +75,7 @@ add_custom_command(
|
|||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-crash-logger.app/Contents/Resources/CrashReporter.nib
|
||||
)
|
||||
|
||||
ll_deploy_sharedlibs_command(
|
||||
mac-crash-logger
|
||||
"${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR};${ARCH_PREBUILT_DIRS}"
|
||||
"../Resources")
|
||||
|
|
|
|||
|
|
@ -77,3 +77,7 @@ add_custom_command(
|
|||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-updater.app/Contents/Resources/AutoUpdater.nib
|
||||
)
|
||||
|
||||
ll_deploy_sharedlibs_command(
|
||||
mac-updater
|
||||
"${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR};${ARCH_PREBUILT_DIRS}"
|
||||
"../Resources")
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ class MediaPluginExample :
|
|||
|
||||
private:
|
||||
bool init();
|
||||
void update( int milliseconds );
|
||||
void update( F64 milliseconds );
|
||||
void write_pixel( int x, int y, unsigned char r, unsigned char g, unsigned char b );
|
||||
bool mFirstTime;
|
||||
|
||||
|
|
@ -276,7 +276,7 @@ void MediaPluginExample::receiveMessage( const char* message_string )
|
|||
if ( key == ' ')
|
||||
{
|
||||
mLastUpdateTime = 0;
|
||||
update( 0 );
|
||||
update( 0.0f );
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -293,7 +293,7 @@ void MediaPluginExample::receiveMessage( const char* message_string )
|
|||
mLastUpdateTime = 0;
|
||||
mFirstTime = true;
|
||||
mStopAction = false;
|
||||
update( 0 );
|
||||
update( 0.0f );
|
||||
}
|
||||
else
|
||||
if ( message_name == "browse_stop" )
|
||||
|
|
@ -302,7 +302,7 @@ void MediaPluginExample::receiveMessage( const char* message_string )
|
|||
mXInc[ n ] = mYInc[ n ] = 0;
|
||||
|
||||
mStopAction = true;
|
||||
update( 0 );
|
||||
update( 0.0f );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -339,7 +339,7 @@ void MediaPluginExample::write_pixel( int x, int y, unsigned char r, unsigned ch
|
|||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
void MediaPluginExample::update( int milliseconds )
|
||||
void MediaPluginExample::update( F64 milliseconds )
|
||||
{
|
||||
if ( mWidth < 1 || mWidth > 2048 || mHeight < 1 || mHeight > 2048 )
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -5294,7 +5294,6 @@
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
|
||||
<key>PluginInstancesCPULimit</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -5360,6 +5359,17 @@
|
|||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>13</integer>
|
||||
</map>
|
||||
<key>PrimMediaControlsUseHoverControlSet</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Whether or not hovering over prim media uses minimal "hover" controls or the authored control set.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>PrimMediaMaxRetries</key>
|
||||
<map>
|
||||
|
|
|
|||
|
|
@ -79,6 +79,8 @@ static const LLFlatListView::ItemReverseComparator REVERSE_NAME_COMPARATOR(NAME_
|
|||
LLAvatarList::Params::Params()
|
||||
: ignore_online_status("ignore_online_status", false)
|
||||
, show_last_interaction_time("show_last_interaction_time", false)
|
||||
, show_info_btn("show_info_btn", true)
|
||||
, show_profile_btn("show_profile_btn", true)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -89,6 +91,9 @@ LLAvatarList::LLAvatarList(const Params& p)
|
|||
, mContextMenu(NULL)
|
||||
, mDirty(true) // to force initial update
|
||||
, mLITUpdateTimer(NULL)
|
||||
, mShowIcons(true)
|
||||
, mShowInfoBtn(p.show_info_btn)
|
||||
, mShowProfileBtn(p.show_profile_btn)
|
||||
{
|
||||
setCommitOnSelectionChange(true);
|
||||
|
||||
|
|
@ -253,6 +258,8 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is
|
|||
|
||||
item->childSetVisible("info_btn", false);
|
||||
item->setAvatarIconVisible(mShowIcons);
|
||||
item->setShowInfoBtn(mShowInfoBtn);
|
||||
item->setShowProfileBtn(mShowProfileBtn);
|
||||
|
||||
addItem(item, id, pos);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,6 +59,8 @@ public:
|
|||
{
|
||||
Optional<bool> ignore_online_status; // show all items as online
|
||||
Optional<bool> show_last_interaction_time; // show most recent interaction time. *HACK: move this to a derived class
|
||||
Optional<bool> show_info_btn;
|
||||
Optional<bool> show_profile_btn;
|
||||
Params();
|
||||
};
|
||||
|
||||
|
|
@ -96,6 +98,8 @@ private:
|
|||
bool mShowLastInteractionTime;
|
||||
bool mDirty;
|
||||
bool mShowIcons;
|
||||
bool mShowInfoBtn;
|
||||
bool mShowProfileBtn;
|
||||
|
||||
LLTimer* mLITUpdateTimer; // last interaction time update timer
|
||||
std::string mIconParamName;
|
||||
|
|
|
|||
|
|
@ -42,8 +42,6 @@
|
|||
#include "llavatariconctrl.h"
|
||||
#include "llbutton.h"
|
||||
|
||||
S32 LLAvatarListItem::sIconWidth = 0;
|
||||
|
||||
LLAvatarListItem::LLAvatarListItem()
|
||||
: LLPanel(),
|
||||
mAvatarIcon(NULL),
|
||||
|
|
@ -53,15 +51,17 @@ LLAvatarListItem::LLAvatarListItem()
|
|||
mInfoBtn(NULL),
|
||||
mProfileBtn(NULL),
|
||||
mContextMenu(NULL),
|
||||
mOnlineStatus(E_UNKNOWN)
|
||||
mOnlineStatus(E_UNKNOWN),
|
||||
mShowInfoBtn(true),
|
||||
mShowProfileBtn(true)
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_list_item.xml");
|
||||
// Remember avatar icon width including its padding from the name text box,
|
||||
// so that we can hide and show the icon again later.
|
||||
if (!sIconWidth)
|
||||
{
|
||||
sIconWidth = mAvatarName->getRect().mLeft - mAvatarIcon->getRect().mLeft;
|
||||
}
|
||||
|
||||
mIconWidth = mAvatarName->getRect().mLeft - mAvatarIcon->getRect().mLeft;
|
||||
mInfoBtnWidth = mInfoBtn->getRect().mRight - mSpeakingIndicator->getRect().mRight;
|
||||
mProfileBtnWidth = mProfileBtn->getRect().mRight - mInfoBtn->getRect().mRight;
|
||||
}
|
||||
|
||||
LLAvatarListItem::~LLAvatarListItem()
|
||||
|
|
@ -116,8 +116,8 @@ BOOL LLAvatarListItem::postBuild()
|
|||
void LLAvatarListItem::onMouseEnter(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
childSetVisible("hovered_icon", true);
|
||||
mInfoBtn->setVisible(true);
|
||||
mProfileBtn->setVisible(true);
|
||||
mInfoBtn->setVisible(mShowInfoBtn);
|
||||
mProfileBtn->setVisible(mShowProfileBtn);
|
||||
|
||||
LLPanel::onMouseEnter(x, y, mask);
|
||||
}
|
||||
|
|
@ -202,6 +202,34 @@ void LLAvatarListItem::setLastInteractionTime(const std::string& val)
|
|||
mLastInteractionTime->setValue(val);
|
||||
}
|
||||
|
||||
void LLAvatarListItem::setShowInfoBtn(bool show)
|
||||
{
|
||||
// Already done? Then do nothing.
|
||||
if(mShowInfoBtn == show)
|
||||
return;
|
||||
mShowInfoBtn = show;
|
||||
S32 width_delta = show ? - mInfoBtnWidth : mInfoBtnWidth;
|
||||
|
||||
//Translating speaking indicator
|
||||
mSpeakingIndicator->translate(width_delta, 0);
|
||||
//Reshaping avatar name
|
||||
mAvatarName->reshape(mAvatarName->getRect().getWidth() + width_delta, mAvatarName->getRect().getHeight());
|
||||
}
|
||||
|
||||
void LLAvatarListItem::setShowProfileBtn(bool show)
|
||||
{
|
||||
// Already done? Then do nothing.
|
||||
if(mShowProfileBtn == show)
|
||||
return;
|
||||
mShowProfileBtn = show;
|
||||
S32 width_delta = show ? - mProfileBtnWidth : mProfileBtnWidth;
|
||||
|
||||
//Translating speaking indicator
|
||||
mSpeakingIndicator->translate(width_delta, 0);
|
||||
//Reshaping avatar name
|
||||
mAvatarName->reshape(mAvatarName->getRect().getWidth() + width_delta, mAvatarName->getRect().getHeight());
|
||||
}
|
||||
|
||||
void LLAvatarListItem::setAvatarIconVisible(bool visible)
|
||||
{
|
||||
// Already done? Then do nothing.
|
||||
|
|
@ -213,7 +241,7 @@ void LLAvatarListItem::setAvatarIconVisible(bool visible)
|
|||
|
||||
// Move the avatar name horizontally by icon size + its distance from the avatar name.
|
||||
LLRect name_rect = mAvatarName->getRect();
|
||||
name_rect.mLeft += visible ? sIconWidth : -sIconWidth;
|
||||
name_rect.mLeft += visible ? mIconWidth : -mIconWidth;
|
||||
mAvatarName->setRect(name_rect);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -64,6 +64,9 @@ public:
|
|||
void setName(const std::string& name);
|
||||
void setAvatarId(const LLUUID& id, bool ignore_status_changes = false);
|
||||
void setLastInteractionTime(const std::string& val);
|
||||
//Show/hide profile/info btn, translating speaker indicator and avatar name coordinates accordingly
|
||||
void setShowProfileBtn(bool hide);
|
||||
void setShowInfoBtn(bool hide);
|
||||
void setAvatarIconVisible(bool visible);
|
||||
|
||||
const LLUUID& getAvatarId() const;
|
||||
|
|
@ -99,7 +102,13 @@ private:
|
|||
|
||||
LLUUID mAvatarId;
|
||||
EOnlineStatus mOnlineStatus;
|
||||
static S32 sIconWidth; // icon width + padding
|
||||
//Flag indicating that info/profile button shouldn't be shown at all.
|
||||
//Speaker indicator and avatar name coords are translated accordingly
|
||||
bool mShowInfoBtn;
|
||||
bool mShowProfileBtn;
|
||||
S32 mIconWidth; // icon width + padding
|
||||
S32 mInfoBtnWidth; //info btn width + padding
|
||||
S32 mProfileBtnWidth; //profile btn width + padding
|
||||
};
|
||||
|
||||
#endif //LL_LLAVATARLISTITEM_H
|
||||
|
|
|
|||
|
|
@ -62,7 +62,6 @@
|
|||
#include "llviewerwindow.h"
|
||||
#include "llvoavatar.h"
|
||||
#include "llimview.h"
|
||||
#include "llimpanel.h"
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Local function declarations, constants, enums, and typedefs
|
||||
|
|
@ -719,18 +718,8 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
|
|||
|
||||
// If there's an open IM session with this agent, send a notification there too.
|
||||
LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, agent_id);
|
||||
LLFloaterIMPanel *floater = gIMMgr->findFloaterBySession(session_id);
|
||||
if (floater)
|
||||
{
|
||||
std::string notifyMsg = notification->getMessage();
|
||||
if (!notifyMsg.empty())
|
||||
{
|
||||
floater->addHistoryLine(notifyMsg,LLUIColorTable::instance().getColor("SystemChatColor"));
|
||||
}
|
||||
}
|
||||
|
||||
//*TODO instead of adding IM message about online/offline status
|
||||
//do something like graying avatar icon on messages from a user that went offline, and make it colored when online.
|
||||
std::string notify_msg = notification->getMessage();
|
||||
LLIMModel::instance().proccessOnlineOfflineNotification(session_id, notify_msg);
|
||||
}
|
||||
|
||||
mModifyMask |= LLFriendObserver::ONLINE;
|
||||
|
|
|
|||
|
|
@ -72,8 +72,6 @@ LLFloaterBulkPermission::LLFloaterBulkPermission(const LLSD& seed)
|
|||
|
||||
BOOL LLFloaterBulkPermission::postBuild()
|
||||
{
|
||||
// childSetAction("help", onHelpBtn, this); // this is not in use
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -157,12 +155,6 @@ void LLFloaterBulkPermission::onApplyBtn()
|
|||
doApply();
|
||||
}
|
||||
|
||||
// angela -- this is not in use
|
||||
//void LLFloaterBulkPermission::onHelpBtn(void* user_data)
|
||||
//{
|
||||
// LLNotifications::instance().add("HelpBulkPermission");
|
||||
//}
|
||||
|
||||
void LLFloaterBulkPermission::onCloseBtn()
|
||||
{
|
||||
closeFloater();
|
||||
|
|
|
|||
|
|
@ -79,7 +79,6 @@ private:
|
|||
U8 key,
|
||||
bool is_new);
|
||||
|
||||
// static void onHelpBtn(void* user_data);
|
||||
void onCloseBtn();
|
||||
void onApplyBtn();
|
||||
void onCommitCopy();
|
||||
|
|
|
|||
|
|
@ -105,20 +105,8 @@ LLFloaterDayCycle::~LLFloaterDayCycle()
|
|||
{
|
||||
}
|
||||
|
||||
void LLFloaterDayCycle::onClickHelp(std::string xml_alert)
|
||||
{
|
||||
LLNotifications::instance().add(contextualNotification(xml_alert));
|
||||
}
|
||||
|
||||
void LLFloaterDayCycle::initHelpBtn(const std::string& name, const std::string& xml_alert)
|
||||
{
|
||||
getChild<LLButton>(name)->setClickedCallback(boost::bind(&LLFloaterDayCycle::onClickHelp, this, xml_alert));
|
||||
}
|
||||
|
||||
void LLFloaterDayCycle::initCallbacks(void)
|
||||
{
|
||||
initHelpBtn("WLDayCycleHelp", "HelpDayCycle");
|
||||
|
||||
// WL Day Cycle
|
||||
getChild<LLUICtrl>("WLTimeSlider")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onTimeSliderMoved, this, _1));
|
||||
getChild<LLUICtrl>("WLDayCycleKeys")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onKeyTimeMoved, this, _1));
|
||||
|
|
|
|||
|
|
@ -59,9 +59,6 @@ public:
|
|||
LLFloaterDayCycle(const LLSD& key);
|
||||
virtual ~LLFloaterDayCycle();
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/// help button stuff
|
||||
void onClickHelp(std::string xml_alert);
|
||||
void initHelpBtn(const std::string& name, const std::string& xml_alert);
|
||||
|
||||
/// initialize all
|
||||
void initCallbacks(void);
|
||||
|
|
|
|||
|
|
@ -70,10 +70,6 @@ BOOL LLFloaterEnvSettings::postBuild()
|
|||
syncMenu();
|
||||
return TRUE;
|
||||
}
|
||||
void LLFloaterEnvSettings::onClickHelp()
|
||||
{
|
||||
LLNotifications::instance().add(contextualNotification("EnvSettingsHelpButton"));
|
||||
}
|
||||
|
||||
void LLFloaterEnvSettings::initCallbacks(void)
|
||||
{
|
||||
|
|
@ -89,10 +85,8 @@ void LLFloaterEnvSettings::initCallbacks(void)
|
|||
getChild<LLUICtrl>("EnvAdvancedSkyButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onOpenAdvancedSky, this));
|
||||
getChild<LLUICtrl>("EnvAdvancedWaterButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onOpenAdvancedWater, this));
|
||||
getChild<LLUICtrl>("EnvUseEstateTimeButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onUseEstateTime, this));
|
||||
getChild<LLUICtrl>("EnvSettingsHelpButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onClickHelp, this));
|
||||
}
|
||||
|
||||
|
||||
// menu maintenance functions
|
||||
|
||||
void LLFloaterEnvSettings::syncMenu()
|
||||
|
|
|
|||
|
|
@ -53,9 +53,6 @@ public:
|
|||
/// initialize all the callbacks for the menu
|
||||
void initCallbacks(void);
|
||||
|
||||
/// callback for the menus help button
|
||||
void onClickHelp();
|
||||
|
||||
/// handle if time of day is changed
|
||||
void onChangeDayTime(LLUICtrl* ctrl);
|
||||
|
||||
|
|
|
|||
|
|
@ -59,12 +59,6 @@ LLFloaterHardwareSettings::~LLFloaterHardwareSettings()
|
|||
{
|
||||
}
|
||||
|
||||
void LLFloaterHardwareSettings::onClickHelp(void* data)
|
||||
{
|
||||
const char* xml_alert = "HardwareSettingsHelpButton";
|
||||
LLNotifications::instance().add(xml_alert);
|
||||
}
|
||||
|
||||
void LLFloaterHardwareSettings::initCallbacks(void)
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,9 +50,6 @@ public:
|
|||
/// initialize all the callbacks for the menu
|
||||
void initCallbacks(void);
|
||||
|
||||
/// callback for the menus help button
|
||||
static void onClickHelp(void* data);
|
||||
|
||||
/// OK button
|
||||
static void onBtnOK( void* userdata );
|
||||
|
||||
|
|
|
|||
|
|
@ -1519,7 +1519,9 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
|
|||
}
|
||||
|
||||
// Placeholder for name.
|
||||
item_params.columns.add().font(FONT).column("name");
|
||||
std::string name;
|
||||
gCacheName->getFullName(owner_id, name);
|
||||
item_params.columns.add().value(name).font(FONT).column("name");
|
||||
|
||||
object_count_str = llformat("%d", object_count);
|
||||
item_params.columns.add().value(object_count_str).font(FONT).column("count");
|
||||
|
|
@ -1743,7 +1745,6 @@ LLPanelLandOptions::LLPanelLandOptions(LLParcelSelectionHandle& parcel)
|
|||
mClearBtn(NULL),
|
||||
mMatureCtrl(NULL),
|
||||
mPushRestrictionCtrl(NULL),
|
||||
mPublishHelpButton(NULL),
|
||||
mParcel(parcel)
|
||||
{
|
||||
}
|
||||
|
|
@ -1812,14 +1813,9 @@ BOOL LLPanelLandOptions::postBuild()
|
|||
mMatureCtrl = getChild<LLCheckBoxCtrl>( "MatureCheck");
|
||||
childSetCommitCallback("MatureCheck", onCommitAny, this);
|
||||
|
||||
mPublishHelpButton = getChild<LLButton>("?");
|
||||
mPublishHelpButton->setClickedCallback(onClickPublishHelp, this);
|
||||
|
||||
if (gAgent.wantsPGOnly())
|
||||
{
|
||||
// Disable these buttons if they are PG (Teen) users
|
||||
mPublishHelpButton->setVisible(FALSE);
|
||||
mPublishHelpButton->setEnabled(FALSE);
|
||||
mMatureCtrl->setVisible(FALSE);
|
||||
mMatureCtrl->setEnabled(FALSE);
|
||||
}
|
||||
|
|
@ -1912,7 +1908,6 @@ void LLPanelLandOptions::refresh()
|
|||
mClearBtn->setEnabled(FALSE);
|
||||
|
||||
mMatureCtrl->setEnabled(FALSE);
|
||||
mPublishHelpButton->setEnabled(FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1988,13 +1983,9 @@ void LLPanelLandOptions::refresh()
|
|||
mSetBtn->setEnabled( can_change_landing_point );
|
||||
mClearBtn->setEnabled( can_change_landing_point );
|
||||
|
||||
mPublishHelpButton->setEnabled( can_change_identity );
|
||||
|
||||
if (gAgent.wantsPGOnly())
|
||||
{
|
||||
// Disable these buttons if they are PG (Teen) users
|
||||
mPublishHelpButton->setVisible(FALSE);
|
||||
mPublishHelpButton->setEnabled(FALSE);
|
||||
mMatureCtrl->setVisible(FALSE);
|
||||
mMatureCtrl->setEnabled(FALSE);
|
||||
}
|
||||
|
|
@ -2247,28 +2238,6 @@ void LLPanelLandOptions::onClickClear(void* userdata)
|
|||
self->refresh();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelLandOptions::onClickPublishHelp(void*)
|
||||
{
|
||||
LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
|
||||
LLParcel *parcel = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection()->getParcel();
|
||||
llassert(region); // Region should never be null.
|
||||
|
||||
bool can_change_identity = region && parcel ?
|
||||
LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_IDENTITY) &&
|
||||
! (region->getRegionFlags() & REGION_FLAGS_BLOCK_PARCEL_SEARCH) : false;
|
||||
|
||||
if(! can_change_identity)
|
||||
{
|
||||
LLNotifications::instance().add("ClickPublishHelpLandDisabled");
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotifications::instance().add("ClickPublishHelpLand");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// LLPanelLandAccess
|
||||
|
|
|
|||
|
|
@ -320,7 +320,6 @@ private:
|
|||
static void onCommitAny(LLUICtrl* ctrl, void *userdata);
|
||||
static void onClickSet(void* userdata);
|
||||
static void onClickClear(void* userdata);
|
||||
static void onClickPublishHelp(void*);
|
||||
|
||||
private:
|
||||
LLCheckBoxCtrl* mCheckEditObjects;
|
||||
|
|
@ -345,7 +344,6 @@ private:
|
|||
|
||||
LLCheckBoxCtrl *mMatureCtrl;
|
||||
LLCheckBoxCtrl *mPushRestrictionCtrl;
|
||||
LLButton *mPublishHelpButton;
|
||||
|
||||
LLSafeHandle<LLParcelSelection>& mParcel;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -339,7 +339,6 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
|
|||
mCommitCallbackRegistrar.add("Pref.ClickDisablePopup", boost::bind(&LLFloaterPreference::onClickDisablePopup, this));
|
||||
mCommitCallbackRegistrar.add("Pref.LogPath", boost::bind(&LLFloaterPreference::onClickLogPath, this));
|
||||
mCommitCallbackRegistrar.add("Pref.Logging", boost::bind(&LLFloaterPreference::onCommitLogging, this));
|
||||
mCommitCallbackRegistrar.add("Pref.OpenHelp", boost::bind(&LLFloaterPreference::onOpenHelp, this));
|
||||
mCommitCallbackRegistrar.add("Pref.UpdateMeterText", boost::bind(&LLFloaterPreference::updateMeterText, this, _1));
|
||||
mCommitCallbackRegistrar.add("Pref.HardwareSettings", boost::bind(&LLFloaterPreference::onOpenHardwareSettings, this));
|
||||
mCommitCallbackRegistrar.add("Pref.HardwareDefaults", boost::bind(&LLFloaterPreference::setHardwareDefaults, this));
|
||||
|
|
@ -608,12 +607,6 @@ void LLFloaterPreference::onBtnOK()
|
|||
LLPanelLogin::refreshLocation( false );
|
||||
}
|
||||
|
||||
void LLFloaterPreference::onOpenHelp()
|
||||
{
|
||||
const char* xml_alert = "GraphicsPreferencesHelp";
|
||||
LLNotifications::instance().add(this->contextualNotification(xml_alert));
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterPreference::onBtnApply( )
|
||||
{
|
||||
|
|
@ -1043,11 +1036,15 @@ void LLFloaterPreference::onClickSetKey()
|
|||
void LLFloaterPreference::setKey(KEY key)
|
||||
{
|
||||
childSetValue("modifier_combo", LLKeyboard::stringFromKey(key));
|
||||
// update the control right away since we no longer wait for apply
|
||||
getChild<LLUICtrl>("modifier_combo")->onCommit();
|
||||
}
|
||||
|
||||
void LLFloaterPreference::onClickSetMiddleMouse()
|
||||
{
|
||||
childSetValue("modifier_combo", "MiddleMouse");
|
||||
// update the control right away since we no longer wait for apply
|
||||
getChild<LLUICtrl>("modifier_combo")->onCommit();
|
||||
}
|
||||
|
||||
void LLFloaterPreference::onClickSkipDialogs()
|
||||
|
|
|
|||
|
|
@ -84,7 +84,6 @@ protected:
|
|||
void onBtnOK();
|
||||
void onBtnCancel();
|
||||
void onBtnApply();
|
||||
void onOpenHelp();
|
||||
|
||||
// void onClickClearCache();
|
||||
void onClickBrowserClearCache();
|
||||
|
|
|
|||
|
|
@ -179,6 +179,8 @@ BOOL LLFloaterRegionInfo::postBuild()
|
|||
LLPanelRegionInfo* panel;
|
||||
panel = new LLPanelRegionGeneralInfo;
|
||||
mInfoPanels.push_back(panel);
|
||||
panel->getCommitCallbackRegistrar().add("RegionInfo.ManageTelehub", boost::bind(&LLPanelRegionInfo::onClickManageTelehub, panel));
|
||||
|
||||
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_general.xml");
|
||||
mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true));
|
||||
|
||||
|
|
@ -544,14 +546,10 @@ void LLPanelRegionInfo::initCtrl(const std::string& name)
|
|||
getChild<LLUICtrl>(name)->setCommitCallback(boost::bind(&LLPanelRegionInfo::onChangeAnything, this));
|
||||
}
|
||||
|
||||
void LLPanelRegionInfo::initHelpBtn(const std::string& name, const std::string& xml_alert)
|
||||
void LLPanelRegionInfo::onClickManageTelehub()
|
||||
{
|
||||
getChild<LLUICtrl>(name)->setCommitCallback(boost::bind(&LLPanelRegionInfo::onClickHelp, this, xml_alert));
|
||||
}
|
||||
|
||||
void LLPanelRegionInfo::onClickHelp(std::string xml_alert)
|
||||
{
|
||||
LLNotifications::instance().add(xml_alert);
|
||||
LLFloaterReg::hideInstance("region_info");
|
||||
LLFloaterReg::showInstance("telehubs");
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -589,22 +587,10 @@ BOOL LLPanelRegionGeneralInfo::postBuild()
|
|||
initCtrl("restrict_pushobject");
|
||||
initCtrl("block_parcel_search_check");
|
||||
|
||||
initHelpBtn("terraform_help", "HelpRegionBlockTerraform");
|
||||
initHelpBtn("fly_help", "HelpRegionBlockFly");
|
||||
initHelpBtn("damage_help", "HelpRegionAllowDamage");
|
||||
initHelpBtn("agent_limit_help", "HelpRegionAgentLimit");
|
||||
initHelpBtn("object_bonus_help", "HelpRegionObjectBonus");
|
||||
initHelpBtn("access_help", "HelpRegionMaturity");
|
||||
initHelpBtn("restrict_pushobject_help", "HelpRegionRestrictPushObject");
|
||||
initHelpBtn("land_resell_help", "HelpRegionLandResell");
|
||||
initHelpBtn("parcel_changes_help", "HelpParcelChanges");
|
||||
initHelpBtn("parcel_search_help", "HelpRegionSearch");
|
||||
|
||||
childSetAction("kick_btn", onClickKick, this);
|
||||
childSetAction("kick_all_btn", onClickKickAll, this);
|
||||
childSetAction("im_btn", onClickMessage, this);
|
||||
// childSetAction("manage_telehub_btn", onClickManageTelehub, this);
|
||||
mCommitCallbackRegistrar.add("RegionInfo.Cancel", boost::bind(&LLPanelRegionGeneralInfo::onClickManageTelehub, this));
|
||||
|
||||
return LLPanelRegionInfo::postBuild();
|
||||
}
|
||||
|
|
@ -712,11 +698,7 @@ bool LLPanelRegionGeneralInfo::onMessageCommit(const LLSD& notification, const L
|
|||
return false;
|
||||
}
|
||||
|
||||
void LLPanelRegionGeneralInfo::onClickManageTelehub()
|
||||
{
|
||||
LLFloaterReg::hideInstance("region_info");
|
||||
LLFloaterReg::showInstance("telehubs");
|
||||
}
|
||||
|
||||
|
||||
// setregioninfo
|
||||
// strings[0] = 'Y' - block terraform, 'N' - not
|
||||
|
|
@ -809,13 +791,6 @@ BOOL LLPanelRegionDebugInfo::postBuild()
|
|||
initCtrl("disable_collisions_check");
|
||||
initCtrl("disable_physics_check");
|
||||
|
||||
initHelpBtn("disable_scripts_help", "HelpRegionDisableScripts");
|
||||
initHelpBtn("disable_collisions_help", "HelpRegionDisableCollisions");
|
||||
initHelpBtn("disable_physics_help", "HelpRegionDisablePhysics");
|
||||
initHelpBtn("top_colliders_help", "HelpRegionTopColliders");
|
||||
initHelpBtn("top_scripts_help", "HelpRegionTopScripts");
|
||||
initHelpBtn("restart_help", "HelpRegionRestart");
|
||||
|
||||
childSetAction("choose_avatar_btn", onClickChooseAvatar, this);
|
||||
childSetAction("return_btn", onClickReturn, this);
|
||||
childSetAction("top_colliders_btn", onClickTopColliders, this);
|
||||
|
|
@ -1182,15 +1157,6 @@ BOOL LLPanelRegionTerrainInfo::postBuild()
|
|||
{
|
||||
LLPanelRegionInfo::postBuild();
|
||||
|
||||
initHelpBtn("water_height_help", "HelpRegionWaterHeight");
|
||||
initHelpBtn("terrain_raise_help", "HelpRegionTerrainRaise");
|
||||
initHelpBtn("terrain_lower_help", "HelpRegionTerrainLower");
|
||||
initHelpBtn("upload_raw_help", "HelpRegionUploadRaw");
|
||||
initHelpBtn("download_raw_help", "HelpRegionDownloadRaw");
|
||||
initHelpBtn("use_estate_sun_help", "HelpRegionUseEstateSun");
|
||||
initHelpBtn("fixed_sun_help", "HelpRegionFixedSun");
|
||||
initHelpBtn("bake_terrain_help", "HelpRegionBakeTerrain");
|
||||
|
||||
initCtrl("water_height_spin");
|
||||
initCtrl("terrain_raise_spin");
|
||||
initCtrl("terrain_lower_spin");
|
||||
|
|
@ -2103,20 +2069,6 @@ BOOL LLPanelEstateInfo::postBuild()
|
|||
getChild<LLUICtrl>("abuse_email_address")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeAnything, this));
|
||||
getChild<LLLineEditor>("abuse_email_address")->setKeystrokeCallback(onChangeText, this);
|
||||
|
||||
initHelpBtn("estate_manager_help", "HelpEstateEstateManager");
|
||||
initHelpBtn("use_global_time_help", "HelpEstateUseGlobalTime");
|
||||
initHelpBtn("fixed_sun_help", "HelpEstateFixedSun");
|
||||
initHelpBtn("WLEditSkyHelp", "HelpEditSky");
|
||||
initHelpBtn("WLEditDayCycleHelp", "HelpEditDayCycle");
|
||||
|
||||
initHelpBtn("externally_visible_help", "HelpEstateExternallyVisible");
|
||||
initHelpBtn("allow_direct_teleport_help", "HelpEstateAllowDirectTeleport");
|
||||
initHelpBtn("allow_resident_help", "HelpEstateAllowResident");
|
||||
initHelpBtn("allow_group_help", "HelpEstateAllowGroup");
|
||||
initHelpBtn("ban_resident_help", "HelpEstateBanResident");
|
||||
initHelpBtn("abuse_email_address_help", "HelpEstateAbuseEmailAddress");
|
||||
initHelpBtn("voice_chat_help", "HelpEstateVoiceChat");
|
||||
|
||||
// set up the use global time checkbox
|
||||
getChild<LLUICtrl>("use_global_time_check")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeUseGlobalTime, this));
|
||||
getChild<LLUICtrl>("fixed_sun_check")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeFixedSun, this));
|
||||
|
|
@ -2694,7 +2646,6 @@ bool LLPanelEstateCovenant::estateUpdate(LLMessageSystem* msg)
|
|||
// virtual
|
||||
BOOL LLPanelEstateCovenant::postBuild()
|
||||
{
|
||||
initHelpBtn("covenant_help", "HelpEstateCovenant");
|
||||
mEstateNameText = getChild<LLTextBox>("estate_name_text");
|
||||
mEstateOwnerText = getChild<LLTextBox>("estate_owner_text");
|
||||
mLastModifiedText = getChild<LLTextBox>("covenant_timestamp_text");
|
||||
|
|
|
|||
|
|
@ -123,12 +123,10 @@ public:
|
|||
void enableButton(const std::string& btn_name, BOOL enable = TRUE);
|
||||
void disableButton(const std::string& btn_name);
|
||||
|
||||
void onClickManageTelehub();
|
||||
|
||||
protected:
|
||||
void initCtrl(const std::string& name);
|
||||
void initHelpBtn(const std::string& name, const std::string& xml_alert);
|
||||
|
||||
// Callback for all help buttons, data is name of XML alert to show.
|
||||
void onClickHelp(std::string xml_alert);
|
||||
|
||||
// Returns TRUE if update sent and apply button should be
|
||||
// disabled.
|
||||
|
|
@ -152,6 +150,7 @@ protected:
|
|||
|
||||
class LLPanelRegionGeneralInfo : public LLPanelRegionInfo
|
||||
{
|
||||
|
||||
public:
|
||||
LLPanelRegionGeneralInfo()
|
||||
: LLPanelRegionInfo() {}
|
||||
|
|
@ -161,16 +160,16 @@ public:
|
|||
|
||||
// LLPanel
|
||||
virtual BOOL postBuild();
|
||||
|
||||
protected:
|
||||
virtual BOOL sendUpdate();
|
||||
|
||||
static void onClickKick(void* userdata);
|
||||
static void onKickCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata);
|
||||
static void onClickKickAll(void* userdata);
|
||||
bool onKickAllCommit(const LLSD& notification, const LLSD& response);
|
||||
static void onClickMessage(void* userdata);
|
||||
bool onMessageCommit(const LLSD& notification, const LLSD& response);
|
||||
void onClickManageTelehub();
|
||||
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -110,23 +110,6 @@ BOOL LLFloaterWater::postBuild()
|
|||
}
|
||||
void LLFloaterWater::initCallbacks(void) {
|
||||
|
||||
// help buttons
|
||||
initHelpBtn("WaterFogColorHelp", "HelpWaterFogColor");
|
||||
initHelpBtn("WaterFogDensityHelp", "HelpWaterFogDensity");
|
||||
initHelpBtn("WaterUnderWaterFogModHelp", "HelpUnderWaterFogMod");
|
||||
initHelpBtn("WaterGlowHelp", "HelpWaterGlow");
|
||||
initHelpBtn("WaterNormalScaleHelp", "HelpWaterNormalScale");
|
||||
initHelpBtn("WaterFresnelScaleHelp", "HelpWaterFresnelScale");
|
||||
initHelpBtn("WaterFresnelOffsetHelp", "HelpWaterFresnelOffset");
|
||||
|
||||
initHelpBtn("WaterBlurMultiplierHelp", "HelpWaterBlurMultiplier");
|
||||
initHelpBtn("WaterScaleBelowHelp", "HelpWaterScaleBelow");
|
||||
initHelpBtn("WaterScaleAboveHelp", "HelpWaterScaleAbove");
|
||||
|
||||
initHelpBtn("WaterNormalMapHelp", "HelpWaterNormalMap");
|
||||
initHelpBtn("WaterWave1Help", "HelpWaterWave1");
|
||||
initHelpBtn("WaterWave2Help", "HelpWaterWave2");
|
||||
|
||||
LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
|
||||
|
||||
getChild<LLUICtrl>("WaterFogColor")->setCommitCallback(boost::bind(&LLFloaterWater::onWaterFogColorMoved, this, _1, ¶m_mgr->mFogColor));
|
||||
|
|
@ -173,16 +156,6 @@ void LLFloaterWater::initCallbacks(void) {
|
|||
getChild<LLUICtrl>("WaterNormalMap")->setCommitCallback(boost::bind(&LLFloaterWater::onNormalMapPicked, this, _1));
|
||||
}
|
||||
|
||||
void LLFloaterWater::onClickHelp(std::string xml_alert)
|
||||
{
|
||||
LLNotifications::instance().add(contextualNotification(xml_alert));
|
||||
}
|
||||
|
||||
void LLFloaterWater::initHelpBtn(const std::string& name, const std::string& xml_alert)
|
||||
{
|
||||
getChild<LLButton>(name)->setClickedCallback(boost::bind(&LLFloaterWater::onClickHelp, this, xml_alert));
|
||||
}
|
||||
|
||||
bool LLFloaterWater::newPromptCallback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
std::string text = response["message"].asString();
|
||||
|
|
|
|||
|
|
@ -59,10 +59,6 @@ public:
|
|||
/// initialize all
|
||||
void initCallbacks(void);
|
||||
|
||||
// help button stuff
|
||||
void onClickHelp(std::string xml_alert);
|
||||
void initHelpBtn(const std::string& name, const std::string& xml_alert);
|
||||
|
||||
bool newPromptCallback(const LLSD& notification, const LLSD& response);
|
||||
|
||||
/// general purpose callbacks for dealing with color controllers
|
||||
|
|
|
|||
|
|
@ -119,36 +119,6 @@ BOOL LLFloaterWindLight::postBuild()
|
|||
}
|
||||
void LLFloaterWindLight::initCallbacks(void) {
|
||||
|
||||
// help buttons
|
||||
initHelpBtn("WLBlueHorizonHelp", "HelpBlueHorizon");
|
||||
initHelpBtn("WLHazeHorizonHelp", "HelpHazeHorizon");
|
||||
initHelpBtn("WLBlueDensityHelp", "HelpBlueDensity");
|
||||
initHelpBtn("WLHazeDensityHelp", "HelpHazeDensity");
|
||||
|
||||
initHelpBtn("WLDensityMultHelp", "HelpDensityMult");
|
||||
initHelpBtn("WLDistanceMultHelp", "HelpDistanceMult");
|
||||
initHelpBtn("WLMaxAltitudeHelp", "HelpMaxAltitude");
|
||||
|
||||
initHelpBtn("WLSunlightColorHelp", "HelpSunlightColor");
|
||||
initHelpBtn("WLAmbientHelp", "HelpSunAmbient");
|
||||
initHelpBtn("WLSunGlowHelp", "HelpSunGlow");
|
||||
initHelpBtn("WLTimeOfDayHelp", "HelpTimeOfDay");
|
||||
initHelpBtn("WLEastAngleHelp", "HelpEastAngle");
|
||||
|
||||
initHelpBtn("WLSceneGammaHelp", "HelpSceneGamma");
|
||||
initHelpBtn("WLStarBrightnessHelp", "HelpStarBrightness");
|
||||
|
||||
initHelpBtn("WLCloudColorHelp", "HelpCloudColor");
|
||||
initHelpBtn("WLCloudDetailHelp", "HelpCloudDetail");
|
||||
initHelpBtn("WLCloudDensityHelp", "HelpCloudDensity");
|
||||
initHelpBtn("WLCloudCoverageHelp", "HelpCloudCoverage");
|
||||
|
||||
initHelpBtn("WLCloudScaleHelp", "HelpCloudScale");
|
||||
initHelpBtn("WLCloudScrollXHelp", "HelpCloudScrollX");
|
||||
initHelpBtn("WLCloudScrollYHelp", "HelpCloudScrollY");
|
||||
|
||||
initHelpBtn("WLClassicCloudsHelp", "HelpClassicClouds");
|
||||
|
||||
LLWLParamManager * param_mgr = LLWLParamManager::instance();
|
||||
|
||||
// blue horizon
|
||||
|
|
@ -237,16 +207,6 @@ void LLFloaterWindLight::initCallbacks(void) {
|
|||
getChild<LLUICtrl>("WLStarAlpha")->setCommitCallback(boost::bind(&LLFloaterWindLight::onStarAlphaMoved, this, _1));
|
||||
}
|
||||
|
||||
void LLFloaterWindLight::onClickHelp(std::string xml_alert)
|
||||
{
|
||||
LLNotifications::instance().add(contextualNotification(xml_alert));
|
||||
}
|
||||
|
||||
void LLFloaterWindLight::initHelpBtn(const std::string& name, const std::string& xml_alert)
|
||||
{
|
||||
getChild<LLButton>(name)->setClickedCallback(boost::bind(&LLFloaterWindLight::onClickHelp, this, xml_alert));
|
||||
}
|
||||
|
||||
bool LLFloaterWindLight::newPromptCallback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
std::string text = response["message"].asString();
|
||||
|
|
|
|||
|
|
@ -57,10 +57,6 @@ public:
|
|||
/// initialize all
|
||||
void initCallbacks(void);
|
||||
|
||||
// help button stuff
|
||||
void onClickHelp(std::string alert);
|
||||
void initHelpBtn(const std::string& name, const std::string& xml_alert);
|
||||
|
||||
bool newPromptCallback(const LLSD& notification, const LLSD& response);
|
||||
|
||||
/// general purpose callbacks for dealing with color controllers
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@
|
|||
#include "llcallingcard.h"
|
||||
#include "llcombobox.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llcommandhandler.h"
|
||||
#include "lldraghandle.h"
|
||||
#include "llfirstuse.h"
|
||||
#include "llfloaterreg.h" // getTypedInstance()
|
||||
|
|
@ -96,6 +97,35 @@ static const F32 SIM_COORD_DEFAULT = 128.f;
|
|||
// Globals
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// handle secondlife:///app/worldmap/{NAME}/{COORDS} URLs
|
||||
class LLWorldMapHandler : public LLCommandHandler
|
||||
{
|
||||
public:
|
||||
// requires trusted browser to trigger
|
||||
LLWorldMapHandler() : LLCommandHandler("worldmap", UNTRUSTED_THROTTLE) { }
|
||||
|
||||
bool handle(const LLSD& params, const LLSD& query_map,
|
||||
LLMediaCtrl* web)
|
||||
{
|
||||
if (params.size() == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
const std::string region_name = params[0].asString();
|
||||
S32 x = (params.size() > 1) ? params[1].asInteger() : 128;
|
||||
S32 y = (params.size() > 2) ? params[2].asInteger() : 128;
|
||||
S32 z = (params.size() > 3) ? params[3].asInteger() : 0;
|
||||
|
||||
LLFloaterWorldMap::getInstance()->trackURL(region_name, x, y, z);
|
||||
LLFloaterReg::showInstance("world_map", "center");
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
LLWorldMapHandler gWorldMapHandler;
|
||||
|
||||
|
||||
LLFloaterWorldMap* gFloaterWorldMap = NULL;
|
||||
|
||||
class LLMapInventoryObserver : public LLInventoryObserver
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@
|
|||
#include "llviewerwindow.h"
|
||||
#include "llvoicechannel.h"
|
||||
#include "lltransientfloatermgr.h"
|
||||
#include "llinventorymodel.h"
|
||||
|
||||
|
||||
|
||||
|
|
@ -265,7 +266,7 @@ void LLIMFloater::draw()
|
|||
}
|
||||
}
|
||||
|
||||
LLFloater::draw();
|
||||
LLTransientDockableFloater::draw();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -602,6 +603,162 @@ void LLIMFloater::processSessionUpdate(const LLSD& session_update)
|
|||
}
|
||||
}
|
||||
|
||||
BOOL LLIMFloater::handleDragAndDrop(S32 x, S32 y, MASK mask,
|
||||
BOOL drop, EDragAndDropType cargo_type,
|
||||
void *cargo_data, EAcceptance *accept,
|
||||
std::string& tooltip_msg)
|
||||
{
|
||||
|
||||
if (mDialog == IM_NOTHING_SPECIAL)
|
||||
{
|
||||
LLToolDragAndDrop::handleGiveDragAndDrop(mOtherParticipantUUID, mSessionID, drop,
|
||||
cargo_type, cargo_data, accept);
|
||||
}
|
||||
|
||||
// handle case for dropping calling cards (and folders of calling cards) onto invitation panel for invites
|
||||
else if (isInviteAllowed())
|
||||
{
|
||||
*accept = ACCEPT_NO;
|
||||
|
||||
if (cargo_type == DAD_CALLINGCARD)
|
||||
{
|
||||
if (dropCallingCard((LLInventoryItem*)cargo_data, drop))
|
||||
{
|
||||
*accept = ACCEPT_YES_MULTI;
|
||||
}
|
||||
}
|
||||
else if (cargo_type == DAD_CATEGORY)
|
||||
{
|
||||
if (dropCategory((LLInventoryCategory*)cargo_data, drop))
|
||||
{
|
||||
*accept = ACCEPT_YES_MULTI;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLIMFloater::dropCallingCard(LLInventoryItem* item, BOOL drop)
|
||||
{
|
||||
BOOL rv = isInviteAllowed();
|
||||
if(rv && item && item->getCreatorUUID().notNull())
|
||||
{
|
||||
if(drop)
|
||||
{
|
||||
std::vector<LLUUID> ids;
|
||||
ids.push_back(item->getCreatorUUID());
|
||||
inviteToSession(ids);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// set to false if creator uuid is null.
|
||||
rv = FALSE;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
BOOL LLIMFloater::dropCategory(LLInventoryCategory* category, BOOL drop)
|
||||
{
|
||||
BOOL rv = isInviteAllowed();
|
||||
if(rv && category)
|
||||
{
|
||||
LLInventoryModel::cat_array_t cats;
|
||||
LLInventoryModel::item_array_t items;
|
||||
LLUniqueBuddyCollector buddies;
|
||||
gInventory.collectDescendentsIf(category->getUUID(),
|
||||
cats,
|
||||
items,
|
||||
LLInventoryModel::EXCLUDE_TRASH,
|
||||
buddies);
|
||||
S32 count = items.count();
|
||||
if(count == 0)
|
||||
{
|
||||
rv = FALSE;
|
||||
}
|
||||
else if(drop)
|
||||
{
|
||||
std::vector<LLUUID> ids;
|
||||
ids.reserve(count);
|
||||
for(S32 i = 0; i < count; ++i)
|
||||
{
|
||||
ids.push_back(items.get(i)->getCreatorUUID());
|
||||
}
|
||||
inviteToSession(ids);
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
BOOL LLIMFloater::isInviteAllowed() const
|
||||
{
|
||||
|
||||
return ( (IM_SESSION_CONFERENCE_START == mDialog)
|
||||
|| (IM_SESSION_INVITE == mDialog) );
|
||||
}
|
||||
|
||||
class LLSessionInviteResponder : public LLHTTPClient::Responder
|
||||
{
|
||||
public:
|
||||
LLSessionInviteResponder(const LLUUID& session_id)
|
||||
{
|
||||
mSessionID = session_id;
|
||||
}
|
||||
|
||||
void error(U32 statusNum, const std::string& reason)
|
||||
{
|
||||
llinfos << "Error inviting all agents to session" << llendl;
|
||||
//throw something back to the viewer here?
|
||||
}
|
||||
|
||||
private:
|
||||
LLUUID mSessionID;
|
||||
};
|
||||
|
||||
BOOL LLIMFloater::inviteToSession(const std::vector<LLUUID>& ids)
|
||||
{
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
if (!region)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
S32 count = ids.size();
|
||||
|
||||
if( isInviteAllowed() && (count > 0) )
|
||||
{
|
||||
llinfos << "LLIMFloater::inviteToSession() - inviting participants" << llendl;
|
||||
|
||||
std::string url = region->getCapability("ChatSessionRequest");
|
||||
|
||||
LLSD data;
|
||||
|
||||
data["params"] = LLSD::emptyArray();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
data["params"].append(ids[i]);
|
||||
}
|
||||
|
||||
data["method"] = "invite";
|
||||
data["session-id"] = mSessionID;
|
||||
LLHTTPClient::post(
|
||||
url,
|
||||
data,
|
||||
new LLSessionInviteResponder(
|
||||
mSessionID));
|
||||
}
|
||||
else
|
||||
{
|
||||
llinfos << "LLIMFloater::inviteToSession -"
|
||||
<< " no need to invite agents for "
|
||||
<< mDialog << llendl;
|
||||
// successful add, because everyone that needed to get added
|
||||
// was added.
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLIMFloater::addTypingIndicator(const LLIMInfo* im_info)
|
||||
{
|
||||
// We may have lost a "stop-typing" packet, don't add it twice
|
||||
|
|
|
|||
|
|
@ -35,11 +35,13 @@
|
|||
|
||||
#include "lltransientdockablefloater.h"
|
||||
#include "lllogchat.h"
|
||||
#include "lltooldraganddrop.h"
|
||||
|
||||
class LLLineEditor;
|
||||
class LLPanelChatControlPanel;
|
||||
class LLChatHistory;
|
||||
|
||||
class LLInventoryItem;
|
||||
class LLInventoryCategory;
|
||||
|
||||
/**
|
||||
* Individual IM window that appears at the bottom of the screen,
|
||||
|
|
@ -90,10 +92,21 @@ public:
|
|||
void processIMTyping(const LLIMInfo* im_info, BOOL typing);
|
||||
void processSessionUpdate(const LLSD& session_update);
|
||||
|
||||
BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
|
||||
BOOL drop, EDragAndDropType cargo_type,
|
||||
void *cargo_data, EAcceptance *accept,
|
||||
std::string& tooltip_msg);
|
||||
|
||||
private:
|
||||
// process focus events to set a currently active session
|
||||
/* virtual */ void onFocusLost();
|
||||
/* virtual */ void onFocusReceived();
|
||||
|
||||
BOOL dropCallingCard(LLInventoryItem* item, BOOL drop);
|
||||
BOOL dropCategory(LLInventoryCategory* category, BOOL drop);
|
||||
|
||||
BOOL isInviteAllowed() const;
|
||||
BOOL inviteToSession(const std::vector<LLUUID>& agent_ids);
|
||||
|
||||
static void onInputEditorFocusReceived( LLFocusableElement* caller, void* userdata );
|
||||
static void onInputEditorFocusLost(LLFocusableElement* caller, void* userdata);
|
||||
|
|
|
|||
|
|
@ -89,9 +89,6 @@ LLIMMgr* gIMMgr = NULL;
|
|||
|
||||
const static std::string IM_SEPARATOR(": ");
|
||||
|
||||
std::map<LLUUID, LLIMModel::LLIMSession*> LLIMModel::sSessionsMap;
|
||||
|
||||
|
||||
|
||||
void toast_callback(const LLSD& msg){
|
||||
// do not show toast in busy mode or it goes from agent
|
||||
|
|
@ -105,7 +102,13 @@ void toast_callback(const LLSD& msg){
|
|||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Skip toasting for system messages
|
||||
if (msg["from_id"].asUUID() == LLUUID::null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLSD args;
|
||||
args["MESSAGE"] = msg["message"];
|
||||
args["TIME"] = msg["time"];
|
||||
|
|
@ -232,6 +235,12 @@ void LLIMModel::LLIMSession::addMessage(const std::string& from, const LLUUID& f
|
|||
message["index"] = (LLSD::Integer)mMsgs.size();
|
||||
|
||||
mMsgs.push_front(message);
|
||||
|
||||
if (mSpeakers && from_id.notNull())
|
||||
{
|
||||
mSpeakers->speakerChatted(from_id);
|
||||
mSpeakers->setSpeakerTyping(from_id, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
void LLIMModel::LLIMSession::chatFromLogFile(LLLogChat::ELogLineType type, const LLSD& msg, void* userdata)
|
||||
|
|
@ -252,12 +261,11 @@ void LLIMModel::LLIMSession::chatFromLogFile(LLLogChat::ELogLineType type, const
|
|||
|
||||
LLIMModel::LLIMSession* LLIMModel::findIMSession(const LLUUID& session_id) const
|
||||
{
|
||||
return get_if_there(LLIMModel::instance().sSessionsMap, session_id,
|
||||
return get_if_there(mId2SessionMap, session_id,
|
||||
(LLIMModel::LLIMSession*) NULL);
|
||||
}
|
||||
|
||||
//*TODO change name to represent session initialization aspect (IB)
|
||||
void LLIMModel::updateSessionID(const LLUUID& old_session_id, const LLUUID& new_session_id)
|
||||
void LLIMModel::processSessionInitializedReply(const LLUUID& old_session_id, const LLUUID& new_session_id)
|
||||
{
|
||||
LLIMSession* session = findIMSession(old_session_id);
|
||||
if (session)
|
||||
|
|
@ -266,8 +274,8 @@ void LLIMModel::updateSessionID(const LLUUID& old_session_id, const LLUUID& new_
|
|||
|
||||
if (old_session_id != new_session_id)
|
||||
{
|
||||
sSessionsMap.erase(old_session_id);
|
||||
sSessionsMap[new_session_id] = session;
|
||||
mId2SessionMap.erase(old_session_id);
|
||||
mId2SessionMap[new_session_id] = session;
|
||||
|
||||
gIMMgr->notifyObserverSessionIDUpdated(old_session_id, new_session_id);
|
||||
}
|
||||
|
|
@ -316,14 +324,14 @@ void LLIMModel::testMessages()
|
|||
bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type,
|
||||
const LLUUID& other_participant_id, const std::vector<LLUUID>& ids)
|
||||
{
|
||||
if (is_in_map(sSessionsMap, session_id))
|
||||
if (findIMSession(session_id))
|
||||
{
|
||||
llwarns << "IM Session " << session_id << " already exists" << llendl;
|
||||
return false;
|
||||
}
|
||||
|
||||
LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id, ids);
|
||||
sSessionsMap[session_id] = session;
|
||||
mId2SessionMap[session_id] = session;
|
||||
|
||||
LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, name, other_participant_id);
|
||||
|
||||
|
|
@ -333,9 +341,9 @@ bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, co
|
|||
|
||||
bool LLIMModel::clearSession(const LLUUID& session_id)
|
||||
{
|
||||
if (sSessionsMap.find(session_id) == sSessionsMap.end()) return false;
|
||||
delete (sSessionsMap[session_id]);
|
||||
sSessionsMap.erase(session_id);
|
||||
if (mId2SessionMap.find(session_id) == mId2SessionMap.end()) return false;
|
||||
delete (mId2SessionMap[session_id]);
|
||||
mId2SessionMap.erase(session_id);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -383,7 +391,6 @@ bool LLIMModel::addToHistory(const LLUUID& session_id, const std::string& from,
|
|||
return true;
|
||||
}
|
||||
|
||||
//*TODO rewrite chat history persistence using LLSD serialization (IB)
|
||||
bool LLIMModel::logToFile(const LLUUID& session_id, const std::string& from, const LLUUID& from_id, const std::string& utf8_text)
|
||||
{
|
||||
S32 im_log_option = gSavedPerAccountSettings.getS32("IMLogOptions");
|
||||
|
|
@ -403,6 +410,23 @@ bool LLIMModel::logToFile(const LLUUID& session_id, const std::string& from, con
|
|||
return false;
|
||||
}
|
||||
|
||||
bool LLIMModel::proccessOnlineOfflineNotification(
|
||||
const LLUUID& session_id,
|
||||
const std::string& utf8_text)
|
||||
{
|
||||
// Add message to old one floater
|
||||
LLFloaterIMPanel *floater = gIMMgr->findFloaterBySession(session_id);
|
||||
if ( floater )
|
||||
{
|
||||
if ( !utf8_text.empty() )
|
||||
{
|
||||
floater->addHistoryLine(utf8_text, LLUIColorTable::instance().getColor("SystemChatColor"));
|
||||
}
|
||||
}
|
||||
// Add system message to history
|
||||
return addMessage(session_id, SYSTEM_FROM, LLUUID::null, utf8_text);
|
||||
}
|
||||
|
||||
bool LLIMModel::addMessage(const LLUUID& session_id, const std::string& from, const LLUUID& from_id,
|
||||
const std::string& utf8_text, bool log2file /* = true */) {
|
||||
LLIMSession* session = findIMSession(session_id);
|
||||
|
|
@ -547,8 +571,7 @@ void LLIMModel::sendLeaveSession(const LLUUID& session_id, const LLUUID& other_p
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
//*TODO update list of messages in a LLIMSession (IB)
|
||||
//*TODO this method is better be moved to the LLIMMgr
|
||||
void LLIMModel::sendMessage(const std::string& utf8_text,
|
||||
const LLUUID& im_session_id,
|
||||
const LLUUID& other_participant_id,
|
||||
|
|
@ -1443,14 +1466,6 @@ void LLIMMgr::addMessage(
|
|||
else
|
||||
{
|
||||
floater->addHistoryLine(msg, color, true, other_participant_id, from); // Insert linked name to front of message
|
||||
|
||||
//*TODO consider moving that speaker management stuff into model (IB)
|
||||
LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(new_session_id);
|
||||
if (speaker_mgr)
|
||||
{
|
||||
speaker_mgr->speakerChatted(gAgentID);
|
||||
speaker_mgr->setSpeakerTyping(gAgentID, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, msg);
|
||||
|
|
@ -1516,7 +1531,7 @@ S32 LLIMMgr::getNumberOfUnreadIM()
|
|||
std::map<LLUUID, LLIMModel::LLIMSession*>::iterator it;
|
||||
|
||||
S32 num = 0;
|
||||
for(it = LLIMModel::sSessionsMap.begin(); it != LLIMModel::sSessionsMap.end(); ++it)
|
||||
for(it = LLIMModel::getInstance()->mId2SessionMap.begin(); it != LLIMModel::getInstance()->mId2SessionMap.end(); ++it)
|
||||
{
|
||||
num += (*it).second->mNumUnread;
|
||||
}
|
||||
|
|
@ -1582,7 +1597,9 @@ LLUUID LLIMMgr::addSession(
|
|||
|
||||
LLUUID session_id = computeSessionID(dialog,other_participant_id);
|
||||
|
||||
if (!LLIMModel::getInstance()->findIMSession(session_id))
|
||||
bool new_session = !LLIMModel::getInstance()->findIMSession(session_id);
|
||||
|
||||
if (new_session)
|
||||
{
|
||||
LLIMModel::getInstance()->newSession(session_id, name, dialog, other_participant_id, ids);
|
||||
}
|
||||
|
|
@ -1604,6 +1621,9 @@ LLUUID LLIMMgr::addSession(
|
|||
ids);
|
||||
}
|
||||
|
||||
//we don't need to show notes about online/offline, mute/unmute users' statuses for existing sessions
|
||||
if (!new_session) return session_id;
|
||||
|
||||
noteOfflineUsers(session_id, floater, ids);
|
||||
|
||||
// Only warn for regular IMs - not group IMs
|
||||
|
|
@ -1612,8 +1632,6 @@ LLUUID LLIMMgr::addSession(
|
|||
noteMutedUsers(session_id, floater, ids);
|
||||
}
|
||||
|
||||
|
||||
|
||||
return session_id;
|
||||
}
|
||||
|
||||
|
|
@ -2013,7 +2031,7 @@ void LLIMMgr::noteOfflineUsers(
|
|||
{
|
||||
const LLRelationship* info = NULL;
|
||||
LLAvatarTracker& at = LLAvatarTracker::instance();
|
||||
LLIMModel* im_model = LLIMModel::getInstance();
|
||||
LLIMModel& im_model = LLIMModel::instance();
|
||||
for(S32 i = 0; i < count; ++i)
|
||||
{
|
||||
info = at.getBuddyInfo(ids.get(i));
|
||||
|
|
@ -2024,13 +2042,7 @@ void LLIMMgr::noteOfflineUsers(
|
|||
LLUIString offline = LLTrans::getString("offline_message");
|
||||
offline.setArg("[FIRST]", first);
|
||||
offline.setArg("[LAST]", last);
|
||||
|
||||
if (floater)
|
||||
{
|
||||
floater->addHistoryLine(offline, LLUIColorTable::instance().getColor("SystemChatColor"));
|
||||
}
|
||||
|
||||
im_model->addMessage(session_id, SYSTEM_FROM, LLUUID::null, offline);
|
||||
im_model.proccessOnlineOfflineNotification(session_id, offline);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2122,7 +2134,7 @@ public:
|
|||
{
|
||||
session_id = body["session_id"].asUUID();
|
||||
|
||||
LLIMModel::getInstance()->updateSessionID(temp_session_id, session_id);
|
||||
LLIMModel::getInstance()->processSessionInitializedReply(temp_session_id, session_id);
|
||||
|
||||
LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id);
|
||||
if (speaker_mgr)
|
||||
|
|
|
|||
|
|
@ -92,8 +92,8 @@ public:
|
|||
void resetActiveSessionID() { mActiveSessionID.setNull(); }
|
||||
LLUUID getActiveSessionID() { return mActiveSessionID; }
|
||||
|
||||
//*TODO make it non-static as LLIMMOdel is a singleton (IB)
|
||||
static std::map<LLUUID, LLIMSession*> sSessionsMap; //mapping session_id to session
|
||||
/** Session id to session object */
|
||||
std::map<LLUUID, LLIMSession*> mId2SessionMap;
|
||||
|
||||
typedef boost::signals2::signal<void(const LLSD&)> session_signal_t;
|
||||
typedef boost::function<void(const LLSD&)> session_callback_t;
|
||||
|
|
@ -109,7 +109,7 @@ public:
|
|||
/**
|
||||
* Rebind session data to a new session id.
|
||||
*/
|
||||
void updateSessionID(const LLUUID& old_session_id, const LLUUID& new_session_id);
|
||||
void processSessionInitializedReply(const LLUUID& old_session_id, const LLUUID& new_session_id);
|
||||
|
||||
boost::signals2::connection addNewMsgCallback( session_callback_t cb ) { return mNewMsgSignal.connect(cb); }
|
||||
boost::signals2::connection addNoUnreadMsgsCallback( session_callback_t cb ) { return mNoUnreadMsgsSignal.connect(cb); }
|
||||
|
|
@ -136,7 +136,12 @@ public:
|
|||
* It sends new message signal for each added message.
|
||||
*/
|
||||
bool addMessage(const LLUUID& session_id, const std::string& from, const LLUUID& other_participant_id, const std::string& utf8_text, bool log2file = true);
|
||||
|
||||
|
||||
/**
|
||||
* Add a system message to an IM Model
|
||||
*/
|
||||
bool proccessOnlineOfflineNotification(const LLUUID& session_id, const std::string& utf8_text);
|
||||
|
||||
/**
|
||||
* Get a session's name.
|
||||
* For a P2P chat - it's an avatar's name,
|
||||
|
|
|
|||
|
|
@ -107,9 +107,12 @@ private:
|
|||
void onClickPay();
|
||||
void onClickBlock();
|
||||
void onClickReport();
|
||||
void onClickFreeze();
|
||||
void onClickEject();
|
||||
void onClickZoomIn();
|
||||
void onClickFindOnMap();
|
||||
bool onVisibleFindOnMap();
|
||||
bool onVisibleFreezeEject();
|
||||
void onClickMuteVolume();
|
||||
void onVolumeChange(const LLSD& data);
|
||||
|
||||
|
|
@ -190,11 +193,16 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
|
|||
mCommitCallbackRegistrar.add("InspectAvatar.InviteToGroup", boost::bind(&LLInspectAvatar::onClickInviteToGroup, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.Pay", boost::bind(&LLInspectAvatar::onClickPay, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.Block", boost::bind(&LLInspectAvatar::onClickBlock, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.Freeze",
|
||||
boost::bind(&LLInspectAvatar::onClickFreeze, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.Eject",
|
||||
boost::bind(&LLInspectAvatar::onClickEject, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.Report", boost::bind(&LLInspectAvatar::onClickReport, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.FindOnMap", boost::bind(&LLInspectAvatar::onClickFindOnMap, this));
|
||||
mCommitCallbackRegistrar.add("InspectAvatar.ZoomIn", boost::bind(&LLInspectAvatar::onClickZoomIn, this));
|
||||
mVisibleCallbackRegistrar.add("InspectAvatar.VisibleFindOnMap", boost::bind(&LLInspectAvatar::onVisibleFindOnMap, this));
|
||||
|
||||
mVisibleCallbackRegistrar.add("InspectAvatar.VisibleFreezeEject",
|
||||
boost::bind(&LLInspectAvatar::onVisibleFreezeEject, this));
|
||||
|
||||
// can't make the properties request until the widgets are constructed
|
||||
// as it might return immediately, so do it in postBuild.
|
||||
|
|
@ -437,13 +445,13 @@ void LLInspectAvatar::nameUpdatedCallback(
|
|||
void LLInspectAvatar::onClickAddFriend()
|
||||
{
|
||||
LLAvatarActions::requestFriendshipDialog(mAvatarID, mAvatarName);
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLInspectAvatar::onClickViewProfile()
|
||||
{
|
||||
// hide inspector when showing profile
|
||||
setFocus(FALSE);
|
||||
LLAvatarActions::showProfile(mAvatarID);
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
bool LLInspectAvatar::onVisibleFindOnMap()
|
||||
|
|
@ -451,24 +459,33 @@ bool LLInspectAvatar::onVisibleFindOnMap()
|
|||
return gAgent.isGodlike() || is_agent_mappable(mAvatarID);
|
||||
}
|
||||
|
||||
bool LLInspectAvatar::onVisibleFreezeEject()
|
||||
{
|
||||
return enable_freeze_eject( LLSD(mAvatarID) );
|
||||
}
|
||||
|
||||
void LLInspectAvatar::onClickIM()
|
||||
{
|
||||
LLAvatarActions::startIM(mAvatarID);
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLInspectAvatar::onClickTeleport()
|
||||
{
|
||||
LLAvatarActions::offerTeleport(mAvatarID);
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLInspectAvatar::onClickInviteToGroup()
|
||||
{
|
||||
LLAvatarActions::inviteToGroup(mAvatarID);
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLInspectAvatar::onClickPay()
|
||||
{
|
||||
LLAvatarActions::pay(mAvatarID);
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLInspectAvatar::onClickBlock()
|
||||
|
|
@ -476,11 +493,25 @@ void LLInspectAvatar::onClickBlock()
|
|||
LLMute mute(mAvatarID, mAvatarName, LLMute::AGENT);
|
||||
LLMuteList::getInstance()->add(mute);
|
||||
LLPanelBlockedList::showPanelAndSelect(mute.mID);
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLInspectAvatar::onClickReport()
|
||||
{
|
||||
LLFloaterReporter::showFromObject(mAvatarID);
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLInspectAvatar::onClickFreeze()
|
||||
{
|
||||
handle_avatar_freeze( LLSD(mAvatarID) );
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLInspectAvatar::onClickEject()
|
||||
{
|
||||
handle_avatar_eject( LLSD(mAvatarID) );
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLInspectAvatar::onClickZoomIn()
|
||||
|
|
|
|||
|
|
@ -133,6 +133,33 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
// Returns true if the given inventory item is a landmark pointing to the current parcel.
|
||||
// Used to find out if there is at least one landmark from current parcel.
|
||||
class LLFistAgentParcelLandmark : public LLInventoryCollectFunctor
|
||||
{
|
||||
private:
|
||||
bool mFounded;// to avoid unnecessary check
|
||||
|
||||
public:
|
||||
LLFistAgentParcelLandmark(): mFounded(false){}
|
||||
|
||||
/*virtual*/ bool operator()(LLInventoryCategory* cat, LLInventoryItem* item)
|
||||
{
|
||||
if (mFounded || !item || item->getType() != LLAssetType::AT_LANDMARK)
|
||||
return false;
|
||||
|
||||
LLLandmark* landmark = gLandmarkList.getAsset(item->getAssetUUID());
|
||||
if (!landmark) // the landmark not been loaded yet
|
||||
return false;
|
||||
|
||||
LLVector3d landmark_global_pos;
|
||||
if (!landmark->getGlobalPos(landmark_global_pos))
|
||||
return false;
|
||||
mFounded = LLViewerParcelMgr::getInstance()->inAgentParcel(landmark_global_pos);
|
||||
return mFounded;
|
||||
}
|
||||
};
|
||||
|
||||
static void fetch_landmarks(LLInventoryModel::cat_array_t& cats,
|
||||
LLInventoryModel::item_array_t& items,
|
||||
LLInventoryCollectFunctor& add)
|
||||
|
|
@ -172,6 +199,16 @@ bool LLLandmarkActions::landmarkAlreadyExists()
|
|||
return findLandmarkForAgentPos() != NULL;
|
||||
}
|
||||
|
||||
//static
|
||||
bool LLLandmarkActions::hasParcelLandmark()
|
||||
{
|
||||
LLFistAgentParcelLandmark get_first_agent_landmark;
|
||||
LLInventoryModel::cat_array_t cats;
|
||||
LLInventoryModel::item_array_t items;
|
||||
fetch_landmarks(cats, items, get_first_agent_landmark);
|
||||
return !items.empty();
|
||||
|
||||
}
|
||||
|
||||
// *TODO: This could be made more efficient by only fetching the FIRST
|
||||
// landmark that meets the criteria
|
||||
|
|
|
|||
|
|
@ -50,9 +50,14 @@ public:
|
|||
*/
|
||||
static LLInventoryModel::item_array_t fetchLandmarksByName(std::string& name, BOOL if_use_substring);
|
||||
/**
|
||||
* @brief Checks whether landmark exists for current parcel.
|
||||
* @brief Checks whether landmark exists for current agent position.
|
||||
*/
|
||||
static bool landmarkAlreadyExists();
|
||||
|
||||
/**
|
||||
* @brief Checks whether landmark exists for current parcel.
|
||||
*/
|
||||
static bool hasParcelLandmark();
|
||||
|
||||
/**
|
||||
* @brief Searches landmark for global position.
|
||||
|
|
|
|||
|
|
@ -294,6 +294,11 @@ void LLLocationInputCtrl::hideList()
|
|||
|
||||
BOOL LLLocationInputCtrl::handleToolTip(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
|
||||
if(mAddLandmarkBtn->parentPointInView(x,y))
|
||||
{
|
||||
updateAddLandmarkTooltip();
|
||||
}
|
||||
// Let the buttons show their tooltips.
|
||||
if (LLUICtrl::handleToolTip(x, y, mask))
|
||||
{
|
||||
|
|
@ -602,11 +607,12 @@ void LLLocationInputCtrl::enableAddLandmarkButton(bool val)
|
|||
// depending on whether current parcel has been landmarked.
|
||||
void LLLocationInputCtrl::updateAddLandmarkButton()
|
||||
{
|
||||
bool landmark_exists = LLLandmarkActions::landmarkAlreadyExists();
|
||||
enableAddLandmarkButton(!landmark_exists);
|
||||
|
||||
enableAddLandmarkButton(LLLandmarkActions::hasParcelLandmark());
|
||||
}
|
||||
void LLLocationInputCtrl::updateAddLandmarkTooltip()
|
||||
{
|
||||
std::string tooltip;
|
||||
if(landmark_exists)
|
||||
if(LLLandmarkActions::landmarkAlreadyExists())
|
||||
{
|
||||
tooltip = mEditLandmarkTooltip;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -107,6 +107,7 @@ private:
|
|||
bool findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter);
|
||||
void setText(const LLStringExplicit& text);
|
||||
void updateAddLandmarkButton();
|
||||
void updateAddLandmarkTooltip();
|
||||
void updateContextMenu();
|
||||
void updateWidgetlayout();
|
||||
void changeLocationPresentation();
|
||||
|
|
|
|||
|
|
@ -77,7 +77,6 @@ private:
|
|||
void onBackOrForwardButtonHeldDown(const LLSD& param);
|
||||
void onForwardButtonClicked();
|
||||
void onHomeButtonClicked();
|
||||
void onHelpButtonClicked();
|
||||
void onLocationSelection();
|
||||
void onLocationPrearrange(const LLSD& data);
|
||||
void onSearchCommit();
|
||||
|
|
|
|||
|
|
@ -262,8 +262,9 @@ void LLNearbyChatScreenChannel::showToastsBottom()
|
|||
toast_rect.setLeftTopAndSize(getRect().mLeft , toast_top, toast_rect.getWidth() ,toast_rect.getHeight());
|
||||
|
||||
toast->setRect(toast_rect);
|
||||
|
||||
toast->setIsHidden(false);
|
||||
toast->setVisible(TRUE);
|
||||
|
||||
bottom = toast->getRect().mTop;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,23 +86,6 @@ BOOL LLPanelGroupTab::postBuild()
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void LLPanelGroupTab::handleClickHelp()
|
||||
{
|
||||
// Display the help text.
|
||||
std::string help_text( getHelpText() );
|
||||
if ( !help_text.empty() )
|
||||
{
|
||||
LLSD args;
|
||||
args["MESSAGE"] = help_text;
|
||||
LLFloater* parent_floater = gFloaterView->getParentFloater(this);
|
||||
LLNotification::Params params(parent_floater->contextualNotification("GenericAlert"));
|
||||
params.substitutions(args);
|
||||
LLNotifications::instance().add(params);
|
||||
}
|
||||
}
|
||||
|
||||
LLPanelGroup::LLPanelGroup()
|
||||
: LLPanel(),
|
||||
LLGroupMgrObserver( LLUUID() ),
|
||||
|
|
|
|||
|
|
@ -148,12 +148,6 @@ public:
|
|||
// Triggered when group information changes in the group manager.
|
||||
virtual void update(LLGroupChange gc) { }
|
||||
|
||||
// This is the text to be displayed when a help button is pressed.
|
||||
virtual std::string getHelpText() const { return mHelpText; }
|
||||
|
||||
// Display anything returned by getHelpText
|
||||
void handleClickHelp();
|
||||
|
||||
// This just connects the help button callback.
|
||||
virtual BOOL postBuild();
|
||||
|
||||
|
|
@ -171,11 +165,8 @@ public:
|
|||
|
||||
protected:
|
||||
LLUUID mGroupID;
|
||||
std::string mHelpText;
|
||||
|
||||
BOOL mAllowEdit;
|
||||
BOOL mHasModal;
|
||||
|
||||
};
|
||||
|
||||
#endif // LL_LLPANELGROUP_H
|
||||
|
|
|
|||
|
|
@ -361,20 +361,6 @@ void LLPanelGroupRoles::cancel()
|
|||
panelp->cancel();
|
||||
}
|
||||
|
||||
// Pass all of these messages to the currently visible sub tab.
|
||||
std::string LLPanelGroupRoles::getHelpText() const
|
||||
{
|
||||
LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
|
||||
if (panelp)
|
||||
{
|
||||
return panelp->getHelpText();
|
||||
}
|
||||
else
|
||||
{
|
||||
return mHelpText;
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelGroupRoles::update(LLGroupChange gc)
|
||||
{
|
||||
if (mGroupID.isNull()) return;
|
||||
|
|
|
|||
|
|
@ -78,7 +78,6 @@ public:
|
|||
bool onModalClose(const LLSD& notification, const LLSD& response);
|
||||
|
||||
// Most of these messages are just passed on to the current sub-tab.
|
||||
virtual std::string getHelpText() const;
|
||||
virtual void activate();
|
||||
virtual void deactivate();
|
||||
virtual bool needsApply(std::string& mesg);
|
||||
|
|
|
|||
|
|
@ -54,10 +54,16 @@ void LLPanelChatControlPanel::onEndCallButtonClicked()
|
|||
gIMMgr->endCall(mSessionId);
|
||||
}
|
||||
|
||||
void LLPanelChatControlPanel::onOpenVoiceControlsClicked()
|
||||
{
|
||||
// TODO: implement Voice Control Panel opening
|
||||
}
|
||||
|
||||
BOOL LLPanelChatControlPanel::postBuild()
|
||||
{
|
||||
childSetAction("call_btn", boost::bind(&LLPanelChatControlPanel::onCallButtonClicked, this));
|
||||
childSetAction("end_call_btn", boost::bind(&LLPanelChatControlPanel::onEndCallButtonClicked, this));
|
||||
childSetAction("voice_ctrls_btn", boost::bind(&LLPanelChatControlPanel::onOpenVoiceControlsClicked, this));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -73,8 +79,10 @@ void LLPanelChatControlPanel::draw()
|
|||
LLVoiceChannel* voice_channel = session->mVoiceChannel;
|
||||
if (voice_channel && voice_enabled)
|
||||
{
|
||||
childSetVisible("end_call_btn", voice_channel->getState() >= LLVoiceChannel::STATE_CALL_STARTED);
|
||||
childSetVisible("call_btn", voice_channel->getState() < LLVoiceChannel::STATE_CALL_STARTED);
|
||||
bool is_call_started = ( voice_channel->getState() >= LLVoiceChannel::STATE_CALL_STARTED );
|
||||
childSetVisible("end_call_btn", is_call_started);
|
||||
childSetVisible("voice_ctrls_btn", is_call_started);
|
||||
childSetVisible("call_btn", ! is_call_started);
|
||||
}
|
||||
|
||||
bool session_initialized = session->mSessionInitialized;
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ public:
|
|||
|
||||
void onCallButtonClicked();
|
||||
void onEndCallButtonClicked();
|
||||
void onOpenVoiceControlsClicked();
|
||||
|
||||
virtual void setSessionId(const LLUUID& session_id) { mSessionId = session_id; }
|
||||
|
||||
|
|
|
|||
|
|
@ -70,7 +70,6 @@ BOOL LLPanelLandInfo::postBuild()
|
|||
childSetAction("button subdivide land",onClickDivide,this);
|
||||
childSetAction("button join land",onClickJoin,this);
|
||||
childSetAction("button about land",onClickAbout,this);
|
||||
childSetAction("button show owners help", onShowOwnersHelp, this);
|
||||
|
||||
mCheckShowOwners = getChild<LLCheckBoxCtrl>("checkbox show owners");
|
||||
childSetValue("checkbox show owners", gSavedSettings.getBOOL("ShowParcelOwners"));
|
||||
|
|
@ -265,8 +264,3 @@ void LLPanelLandInfo::onClickAbout(void*)
|
|||
|
||||
LLFloaterReg::showInstance("about_land");
|
||||
}
|
||||
|
||||
void LLPanelLandInfo::onShowOwnersHelp(void* user_data)
|
||||
{
|
||||
LLNotifications::instance().add("ShowOwnersHelp");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,6 @@ protected:
|
|||
static void onClickDivide(void*);
|
||||
static void onClickJoin(void*);
|
||||
static void onClickAbout(void*);
|
||||
static void onShowOwnersHelp(void*);
|
||||
|
||||
protected:
|
||||
//LLTextBox* mTextPriceLabel;
|
||||
|
|
|
|||
|
|
@ -185,9 +185,9 @@ void LLLandmarksPanel::updateVerbs()
|
|||
if (!isTabVisible())
|
||||
return;
|
||||
|
||||
BOOL enabled = isLandmarkSelected();
|
||||
mTeleportBtn->setEnabled(enabled);
|
||||
mShowOnMapBtn->setEnabled(enabled);
|
||||
bool landmark_selected = isLandmarkSelected();
|
||||
mTeleportBtn->setEnabled(landmark_selected && isActionEnabled("teleport"));
|
||||
mShowOnMapBtn->setEnabled(landmark_selected && isActionEnabled("show_on_map"));
|
||||
|
||||
// TODO: mantipov: Uncomment when mShareBtn is supported
|
||||
// Share button should be enabled when neither a folder nor a landmark is selected
|
||||
|
|
|
|||
|
|
@ -1,339 +1,337 @@
|
|||
/**
|
||||
* @file llpanelmediasettingssecurity.cpp
|
||||
* @brief LLPanelMediaSettingsSecurity class implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llpanelmediasettingssecurity.h"
|
||||
#include "llpanelcontents.h"
|
||||
#include "llcheckboxctrl.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "llscrolllistitem.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llwindow.h"
|
||||
#include "llviewerwindow.h"
|
||||
#include "llsdutil.h"
|
||||
#include "llselectmgr.h"
|
||||
#include "llmediaentry.h"
|
||||
#include "llfloaterwhitelistentry.h"
|
||||
#include "llfloatermediasettings.h"
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
LLPanelMediaSettingsSecurity::LLPanelMediaSettingsSecurity() :
|
||||
mParent( NULL )
|
||||
{
|
||||
// build dialog from XML
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_security.xml");
|
||||
mCommitCallbackRegistrar.add("Media.whitelistAdd", boost::bind(&LLPanelMediaSettingsSecurity::onBtnAdd, this));
|
||||
mCommitCallbackRegistrar.add("Media.whitelistDelete", boost::bind(&LLPanelMediaSettingsSecurity::onBtnDel, this));
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
BOOL LLPanelMediaSettingsSecurity::postBuild()
|
||||
{
|
||||
mEnableWhiteList = getChild< LLCheckBoxCtrl >( LLMediaEntry::WHITELIST_ENABLE_KEY );
|
||||
mWhiteListList = getChild< LLScrollListCtrl >( LLMediaEntry::WHITELIST_KEY );
|
||||
|
||||
childSetAction("whitelist_add", onBtnAdd, this);
|
||||
childSetAction("whitelist_del", onBtnDel, this);
|
||||
|
||||
setDefaultBtn("whitelist_add");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// virtual
|
||||
LLPanelMediaSettingsSecurity::~LLPanelMediaSettingsSecurity()
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
void LLPanelMediaSettingsSecurity::draw()
|
||||
{
|
||||
// housekeeping
|
||||
LLPanel::draw();
|
||||
|
||||
// if list is empty, disable DEL button and checkbox to enable use of list
|
||||
if ( mWhiteListList->isEmpty() )
|
||||
{
|
||||
childSetEnabled( "whitelist_del", false );
|
||||
childSetEnabled( LLMediaEntry::WHITELIST_KEY, false );
|
||||
childSetEnabled( LLMediaEntry::WHITELIST_ENABLE_KEY, false );
|
||||
}
|
||||
else
|
||||
{
|
||||
childSetEnabled( "whitelist_del", true );
|
||||
childSetEnabled( LLMediaEntry::WHITELIST_KEY, true );
|
||||
childSetEnabled( LLMediaEntry::WHITELIST_ENABLE_KEY, true );
|
||||
};
|
||||
|
||||
// if nothing is selected, disable DEL button
|
||||
if ( mWhiteListList->getSelectedValue().asString().empty() )
|
||||
{
|
||||
childSetEnabled( "whitelist_del", false );
|
||||
}
|
||||
else
|
||||
{
|
||||
childSetEnabled( "whitelist_del", true );
|
||||
};
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
void LLPanelMediaSettingsSecurity::initValues( void* userdata, const LLSD& media_settings , bool editable)
|
||||
{
|
||||
LLPanelMediaSettingsSecurity *self =(LLPanelMediaSettingsSecurity *)userdata;
|
||||
|
||||
if ( LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo )
|
||||
{
|
||||
if(LLFloaterMediaSettings::getInstance()->mMultipleMedia)
|
||||
{
|
||||
self->clearValues(self, editable);
|
||||
// only show multiple
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if(LLFloaterMediaSettings::getInstance()->mMultipleValidMedia)
|
||||
{
|
||||
self->clearValues(self, editable);
|
||||
// only show multiple
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
std::string base_key( "" );
|
||||
std::string tentative_key( "" );
|
||||
|
||||
struct
|
||||
{
|
||||
std::string key_name;
|
||||
LLUICtrl* ctrl_ptr;
|
||||
std::string ctrl_type;
|
||||
|
||||
} data_set [] =
|
||||
{
|
||||
{ LLMediaEntry::WHITELIST_ENABLE_KEY, self->mEnableWhiteList, "LLCheckBoxCtrl" },
|
||||
{ LLMediaEntry::WHITELIST_KEY, self->mWhiteListList, "LLScrollListCtrl" },
|
||||
{ "", NULL , "" }
|
||||
};
|
||||
|
||||
for( int i = 0; data_set[ i ].key_name.length() > 0; ++i )
|
||||
{
|
||||
base_key = std::string( data_set[ i ].key_name );
|
||||
tentative_key = base_key + std::string( LLPanelContents::TENTATIVE_SUFFIX );
|
||||
|
||||
// TODO: CP - I bet there is a better way to do this using Boost
|
||||
if ( media_settings[ base_key ].isDefined() )
|
||||
{
|
||||
if ( data_set[ i ].ctrl_type == "LLCheckBoxCtrl" )
|
||||
{
|
||||
static_cast< LLCheckBoxCtrl* >( data_set[ i ].ctrl_ptr )->
|
||||
setValue( media_settings[ base_key ].asBoolean() );
|
||||
}
|
||||
else
|
||||
if ( data_set[ i ].ctrl_type == "LLScrollListCtrl" )
|
||||
{
|
||||
// get control
|
||||
LLScrollListCtrl* list = static_cast< LLScrollListCtrl* >( data_set[ i ].ctrl_ptr );
|
||||
list->deleteAllItems();
|
||||
|
||||
// points to list of white list URLs
|
||||
LLSD url_list = media_settings[ base_key ];
|
||||
|
||||
// iterate over them and add to scroll list
|
||||
LLSD::array_iterator iter = url_list.beginArray();
|
||||
while( iter != url_list.endArray() )
|
||||
{
|
||||
// TODO: is iter guaranteed to be valid here?
|
||||
std::string url = *iter;
|
||||
list->addSimpleElement( url );
|
||||
++iter;
|
||||
};
|
||||
};
|
||||
data_set[ i ].ctrl_ptr->setEnabled(editable);
|
||||
data_set[ i ].ctrl_ptr->setTentative( media_settings[ tentative_key ].asBoolean() );
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
void LLPanelMediaSettingsSecurity::clearValues( void* userdata , bool editable)
|
||||
{
|
||||
LLPanelMediaSettingsSecurity *self =(LLPanelMediaSettingsSecurity *)userdata;
|
||||
self->mEnableWhiteList->clear();
|
||||
self->mWhiteListList->deleteAllItems();
|
||||
self->mEnableWhiteList->setEnabled(editable);
|
||||
self->mWhiteListList->setEnabled(editable);
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
void LLPanelMediaSettingsSecurity::apply( void* userdata )
|
||||
{
|
||||
LLPanelMediaSettingsSecurity *self =(LLPanelMediaSettingsSecurity *)userdata;
|
||||
|
||||
// build LLSD Fragment
|
||||
LLSD media_data_security;
|
||||
self->getValues(media_data_security);
|
||||
// this merges contents of LLSD passed in with what's there so this is ok
|
||||
LLSelectMgr::getInstance()->selectionSetMediaData( media_data_security );
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
void LLPanelMediaSettingsSecurity::getValues( LLSD &fill_me_in )
|
||||
{
|
||||
fill_me_in[LLMediaEntry::WHITELIST_ENABLE_KEY] = mEnableWhiteList->getValue();
|
||||
|
||||
// iterate over white list and extract items
|
||||
std::vector< LLScrollListItem* > white_list_items = mWhiteListList->getAllData();
|
||||
std::vector< LLScrollListItem* >::iterator iter = white_list_items.begin();
|
||||
fill_me_in[LLMediaEntry::WHITELIST_KEY].clear();
|
||||
while( iter != white_list_items.end() )
|
||||
{
|
||||
std::string white_list_url = (*iter)->getValue().asString();
|
||||
fill_me_in[ LLMediaEntry::WHITELIST_KEY ].append( white_list_url );
|
||||
++iter;
|
||||
};
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Try to make a valid URL if a fragment (
|
||||
// white list list box widget and build a list to test against. Can also
|
||||
const std::string LLPanelMediaSettingsSecurity::makeValidUrl( const std::string& src_url )
|
||||
{
|
||||
// use LLURI to determine if we have a valid scheme
|
||||
/**
|
||||
* @file llpanelmediasettingssecurity.cpp
|
||||
* @brief LLPanelMediaSettingsSecurity class implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llpanelmediasettingssecurity.h"
|
||||
#include "llpanelcontents.h"
|
||||
#include "llcheckboxctrl.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "llscrolllistitem.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llwindow.h"
|
||||
#include "llviewerwindow.h"
|
||||
#include "llsdutil.h"
|
||||
#include "llselectmgr.h"
|
||||
#include "llmediaentry.h"
|
||||
#include "llfloaterwhitelistentry.h"
|
||||
#include "llfloatermediasettings.h"
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
LLPanelMediaSettingsSecurity::LLPanelMediaSettingsSecurity() :
|
||||
mParent( NULL )
|
||||
{
|
||||
mCommitCallbackRegistrar.add("Media.whitelistAdd", boost::bind(&LLPanelMediaSettingsSecurity::onBtnAdd, this));
|
||||
mCommitCallbackRegistrar.add("Media.whitelistDelete", boost::bind(&LLPanelMediaSettingsSecurity::onBtnDel, this));
|
||||
// build dialog from XML
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_security.xml");
|
||||
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
BOOL LLPanelMediaSettingsSecurity::postBuild()
|
||||
{
|
||||
mEnableWhiteList = getChild< LLCheckBoxCtrl >( LLMediaEntry::WHITELIST_ENABLE_KEY );
|
||||
mWhiteListList = getChild< LLScrollListCtrl >( LLMediaEntry::WHITELIST_KEY );
|
||||
|
||||
setDefaultBtn("whitelist_add");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// virtual
|
||||
LLPanelMediaSettingsSecurity::~LLPanelMediaSettingsSecurity()
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
void LLPanelMediaSettingsSecurity::draw()
|
||||
{
|
||||
// housekeeping
|
||||
LLPanel::draw();
|
||||
|
||||
// if list is empty, disable DEL button and checkbox to enable use of list
|
||||
if ( mWhiteListList->isEmpty() )
|
||||
{
|
||||
childSetEnabled( "whitelist_del", false );
|
||||
childSetEnabled( LLMediaEntry::WHITELIST_KEY, false );
|
||||
childSetEnabled( LLMediaEntry::WHITELIST_ENABLE_KEY, false );
|
||||
}
|
||||
else
|
||||
{
|
||||
childSetEnabled( "whitelist_del", true );
|
||||
childSetEnabled( LLMediaEntry::WHITELIST_KEY, true );
|
||||
childSetEnabled( LLMediaEntry::WHITELIST_ENABLE_KEY, true );
|
||||
};
|
||||
|
||||
// if nothing is selected, disable DEL button
|
||||
if ( mWhiteListList->getSelectedValue().asString().empty() )
|
||||
{
|
||||
childSetEnabled( "whitelist_del", false );
|
||||
}
|
||||
else
|
||||
{
|
||||
childSetEnabled( "whitelist_del", true );
|
||||
};
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
void LLPanelMediaSettingsSecurity::initValues( void* userdata, const LLSD& media_settings , bool editable)
|
||||
{
|
||||
LLPanelMediaSettingsSecurity *self =(LLPanelMediaSettingsSecurity *)userdata;
|
||||
|
||||
if ( LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo )
|
||||
{
|
||||
if(LLFloaterMediaSettings::getInstance()->mMultipleMedia)
|
||||
{
|
||||
self->clearValues(self, editable);
|
||||
// only show multiple
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if(LLFloaterMediaSettings::getInstance()->mMultipleValidMedia)
|
||||
{
|
||||
self->clearValues(self, editable);
|
||||
// only show multiple
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
std::string base_key( "" );
|
||||
std::string tentative_key( "" );
|
||||
|
||||
struct
|
||||
{
|
||||
std::string key_name;
|
||||
LLUICtrl* ctrl_ptr;
|
||||
std::string ctrl_type;
|
||||
|
||||
} data_set [] =
|
||||
{
|
||||
{ LLMediaEntry::WHITELIST_ENABLE_KEY, self->mEnableWhiteList, "LLCheckBoxCtrl" },
|
||||
{ LLMediaEntry::WHITELIST_KEY, self->mWhiteListList, "LLScrollListCtrl" },
|
||||
{ "", NULL , "" }
|
||||
};
|
||||
|
||||
for( int i = 0; data_set[ i ].key_name.length() > 0; ++i )
|
||||
{
|
||||
base_key = std::string( data_set[ i ].key_name );
|
||||
tentative_key = base_key + std::string( LLPanelContents::TENTATIVE_SUFFIX );
|
||||
|
||||
// TODO: CP - I bet there is a better way to do this using Boost
|
||||
if ( media_settings[ base_key ].isDefined() )
|
||||
{
|
||||
if ( data_set[ i ].ctrl_type == "LLCheckBoxCtrl" )
|
||||
{
|
||||
static_cast< LLCheckBoxCtrl* >( data_set[ i ].ctrl_ptr )->
|
||||
setValue( media_settings[ base_key ].asBoolean() );
|
||||
}
|
||||
else
|
||||
if ( data_set[ i ].ctrl_type == "LLScrollListCtrl" )
|
||||
{
|
||||
// get control
|
||||
LLScrollListCtrl* list = static_cast< LLScrollListCtrl* >( data_set[ i ].ctrl_ptr );
|
||||
list->deleteAllItems();
|
||||
|
||||
// points to list of white list URLs
|
||||
LLSD url_list = media_settings[ base_key ];
|
||||
|
||||
// iterate over them and add to scroll list
|
||||
LLSD::array_iterator iter = url_list.beginArray();
|
||||
while( iter != url_list.endArray() )
|
||||
{
|
||||
// TODO: is iter guaranteed to be valid here?
|
||||
std::string url = *iter;
|
||||
list->addSimpleElement( url );
|
||||
++iter;
|
||||
};
|
||||
};
|
||||
data_set[ i ].ctrl_ptr->setEnabled(editable);
|
||||
data_set[ i ].ctrl_ptr->setTentative( media_settings[ tentative_key ].asBoolean() );
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
void LLPanelMediaSettingsSecurity::clearValues( void* userdata , bool editable)
|
||||
{
|
||||
LLPanelMediaSettingsSecurity *self =(LLPanelMediaSettingsSecurity *)userdata;
|
||||
self->mEnableWhiteList->clear();
|
||||
self->mWhiteListList->deleteAllItems();
|
||||
self->mEnableWhiteList->setEnabled(editable);
|
||||
self->mWhiteListList->setEnabled(editable);
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
void LLPanelMediaSettingsSecurity::apply( void* userdata )
|
||||
{
|
||||
LLPanelMediaSettingsSecurity *self =(LLPanelMediaSettingsSecurity *)userdata;
|
||||
|
||||
// build LLSD Fragment
|
||||
LLSD media_data_security;
|
||||
self->getValues(media_data_security);
|
||||
// this merges contents of LLSD passed in with what's there so this is ok
|
||||
LLSelectMgr::getInstance()->selectionSetMediaData( media_data_security );
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
void LLPanelMediaSettingsSecurity::getValues( LLSD &fill_me_in )
|
||||
{
|
||||
fill_me_in[LLMediaEntry::WHITELIST_ENABLE_KEY] = mEnableWhiteList->getValue();
|
||||
|
||||
// iterate over white list and extract items
|
||||
std::vector< LLScrollListItem* > white_list_items = mWhiteListList->getAllData();
|
||||
std::vector< LLScrollListItem* >::iterator iter = white_list_items.begin();
|
||||
fill_me_in[LLMediaEntry::WHITELIST_KEY].clear();
|
||||
while( iter != white_list_items.end() )
|
||||
{
|
||||
std::string white_list_url = (*iter)->getValue().asString();
|
||||
fill_me_in[ LLMediaEntry::WHITELIST_KEY ].append( white_list_url );
|
||||
++iter;
|
||||
};
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Try to make a valid URL if a fragment (
|
||||
// white list list box widget and build a list to test against. Can also
|
||||
const std::string LLPanelMediaSettingsSecurity::makeValidUrl( const std::string& src_url )
|
||||
{
|
||||
// use LLURI to determine if we have a valid scheme
|
||||
LLURI candidate_url( src_url );
|
||||
if ( candidate_url.scheme().empty() )
|
||||
{
|
||||
// build a URL comprised of default scheme and the original fragment
|
||||
const std::string default_scheme( "http://" );
|
||||
return default_scheme + src_url;
|
||||
// build a URL comprised of default scheme and the original fragment
|
||||
const std::string default_scheme( "http://" );
|
||||
return default_scheme + src_url;
|
||||
};
|
||||
|
||||
// we *could* test the "default scheme" + "original fragment" URL again
|
||||
// using LLURI to see if it's valid but I think the outcome is the same
|
||||
// in either case - our only option is to return the original URL
|
||||
|
||||
// we *think* the original url passed in was valid
|
||||
return src_url;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// wrapper for testing a URL against the whitelist. We grab entries from
|
||||
// white list list box widget and build a list to test against. Can also
|
||||
// optionally pass the URL that you are trying to add to the widget since
|
||||
// it won't be added until this call returns.
|
||||
bool LLPanelMediaSettingsSecurity::passesWhiteList( const std::string& added_url,
|
||||
const std::string& test_url )
|
||||
{
|
||||
// the checkUrlAgainstWhitelist(..) function works on a vector
|
||||
// of strings for the white list entries - in this panel, the white list
|
||||
// is stored in the widgets themselves so we need to build something compatible.
|
||||
std::vector< std::string > whitelist_strings;
|
||||
whitelist_strings.clear(); // may not be required - I forget what the spec says.
|
||||
|
||||
// step through whitelist widget entries and grab them as strings
|
||||
std::vector< LLScrollListItem* > white_list_items = mWhiteListList->getAllData();
|
||||
std::vector< LLScrollListItem* >::iterator iter = white_list_items.begin();
|
||||
while( iter != white_list_items.end() )
|
||||
{
|
||||
const std::string whitelist_url = (*iter)->getValue().asString();
|
||||
whitelist_strings.push_back( whitelist_url );
|
||||
|
||||
++iter;
|
||||
};
|
||||
|
||||
// add in the URL that might be added to the whitelist so we can test that too
|
||||
if ( added_url.length() )
|
||||
whitelist_strings.push_back( added_url );
|
||||
|
||||
// possible the URL is just a fragment so we validize it
|
||||
const std::string valid_url = makeValidUrl( test_url );
|
||||
|
||||
// indicate if the URL passes whitelist
|
||||
return LLMediaEntry::checkUrlAgainstWhitelist( valid_url, whitelist_strings );
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
void LLPanelMediaSettingsSecurity::addWhiteListItem(const std::string& url)
|
||||
{
|
||||
// grab home URL from the general panel (via the parent floater)
|
||||
std::string home_url( "" );
|
||||
if ( mParent )
|
||||
home_url = mParent->getHomeUrl();
|
||||
|
||||
// if the home URL is blank (user hasn't entered it yet) then
|
||||
// don't bother to check if it passes the white list
|
||||
if ( home_url.empty() )
|
||||
{
|
||||
mWhiteListList->addSimpleElement( url );
|
||||
return;
|
||||
};
|
||||
|
||||
// if the URL passes the white list, add it
|
||||
if ( passesWhiteList( url, home_url ) )
|
||||
{
|
||||
mWhiteListList->addSimpleElement( url );
|
||||
}
|
||||
else
|
||||
// display a message indicating you can't do that
|
||||
{
|
||||
LLNotifications::instance().add("WhiteListInvalidatesHomeUrl");
|
||||
};
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
void LLPanelMediaSettingsSecurity::onBtnAdd( void* userdata )
|
||||
{
|
||||
LLFloaterReg::showInstance("whitelist_entry");
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
void LLPanelMediaSettingsSecurity::onBtnDel( void* userdata )
|
||||
{
|
||||
LLPanelMediaSettingsSecurity *self =(LLPanelMediaSettingsSecurity *)userdata;
|
||||
|
||||
self->mWhiteListList->deleteSelectedItems();
|
||||
}
|
||||
|
||||
|
||||
// we *think* the original url passed in was valid
|
||||
return src_url;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// wrapper for testing a URL against the whitelist. We grab entries from
|
||||
// white list list box widget and build a list to test against. Can also
|
||||
// optionally pass the URL that you are trying to add to the widget since
|
||||
// it won't be added until this call returns.
|
||||
bool LLPanelMediaSettingsSecurity::passesWhiteList( const std::string& added_url,
|
||||
const std::string& test_url )
|
||||
{
|
||||
// the checkUrlAgainstWhitelist(..) function works on a vector
|
||||
// of strings for the white list entries - in this panel, the white list
|
||||
// is stored in the widgets themselves so we need to build something compatible.
|
||||
std::vector< std::string > whitelist_strings;
|
||||
whitelist_strings.clear(); // may not be required - I forget what the spec says.
|
||||
|
||||
// step through whitelist widget entries and grab them as strings
|
||||
std::vector< LLScrollListItem* > white_list_items = mWhiteListList->getAllData();
|
||||
std::vector< LLScrollListItem* >::iterator iter = white_list_items.begin();
|
||||
while( iter != white_list_items.end() )
|
||||
{
|
||||
const std::string whitelist_url = (*iter)->getValue().asString();
|
||||
whitelist_strings.push_back( whitelist_url );
|
||||
|
||||
++iter;
|
||||
};
|
||||
|
||||
// add in the URL that might be added to the whitelist so we can test that too
|
||||
if ( added_url.length() )
|
||||
whitelist_strings.push_back( added_url );
|
||||
|
||||
// possible the URL is just a fragment so we validize it
|
||||
const std::string valid_url = makeValidUrl( test_url );
|
||||
|
||||
// indicate if the URL passes whitelist
|
||||
return LLMediaEntry::checkUrlAgainstWhitelist( valid_url, whitelist_strings );
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
void LLPanelMediaSettingsSecurity::addWhiteListItem(const std::string& url)
|
||||
{
|
||||
// grab home URL from the general panel (via the parent floater)
|
||||
std::string home_url( "" );
|
||||
if ( mParent )
|
||||
home_url = mParent->getHomeUrl();
|
||||
|
||||
// if the home URL is blank (user hasn't entered it yet) then
|
||||
// don't bother to check if it passes the white list
|
||||
if ( home_url.empty() )
|
||||
{
|
||||
mWhiteListList->addSimpleElement( url );
|
||||
return;
|
||||
};
|
||||
|
||||
// if the URL passes the white list, add it
|
||||
if ( passesWhiteList( url, home_url ) )
|
||||
{
|
||||
mWhiteListList->addSimpleElement( url );
|
||||
}
|
||||
else
|
||||
// display a message indicating you can't do that
|
||||
{
|
||||
LLNotifications::instance().add("WhiteListInvalidatesHomeUrl");
|
||||
};
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
void LLPanelMediaSettingsSecurity::onBtnAdd( void* userdata )
|
||||
{
|
||||
LLFloaterReg::showInstance("whitelist_entry");
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
void LLPanelMediaSettingsSecurity::onBtnDel( void* userdata )
|
||||
{
|
||||
LLPanelMediaSettingsSecurity *self =(LLPanelMediaSettingsSecurity *)userdata;
|
||||
|
||||
self->mWhiteListList->deleteSelectedItems();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
void LLPanelMediaSettingsSecurity::setParent( LLFloaterMediaSettings* parent )
|
||||
|
|
|
|||
|
|
@ -289,10 +289,24 @@ const std::string& LLTaskInvFVBridge::getName() const
|
|||
const std::string& LLTaskInvFVBridge::getDisplayName() const
|
||||
{
|
||||
LLInventoryItem* item = findItem();
|
||||
|
||||
if(item)
|
||||
{
|
||||
mDisplayName.assign(item->getName());
|
||||
|
||||
if(item->getParentUUID().isNull())
|
||||
{
|
||||
if(item->getName() == "Contents")
|
||||
{
|
||||
mDisplayName.assign(LLTrans::getString("ViewerObjectContents"));
|
||||
}
|
||||
else
|
||||
{
|
||||
mDisplayName.assign(item->getName());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mDisplayName.assign(item->getName());
|
||||
}
|
||||
const LLPermissions& perm(item->getPermissions());
|
||||
BOOL copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE);
|
||||
BOOL mod = gAgent.allowOperation(PERM_MODIFY, perm, GP_OBJECT_MANIPULATE);
|
||||
|
|
@ -300,15 +314,15 @@ const std::string& LLTaskInvFVBridge::getDisplayName() const
|
|||
|
||||
if(!copy)
|
||||
{
|
||||
mDisplayName.append(" (no copy)");
|
||||
mDisplayName.append(LLTrans::getString("no_copy"));
|
||||
}
|
||||
if(!mod)
|
||||
{
|
||||
mDisplayName.append(" (no modify)");
|
||||
mDisplayName.append(LLTrans::getString("no_modify"));
|
||||
}
|
||||
if(!xfer)
|
||||
{
|
||||
mDisplayName.append(" (no transfer)");
|
||||
mDisplayName.append(LLTrans::getString("no_transfer"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@
|
|||
#include "llaccordionctrltab.h"
|
||||
#include "llagent.h"
|
||||
#include "llagentui.h"
|
||||
#include "llappviewer.h"
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
#include "llcallbacklist.h"
|
||||
#include "llexpandabletextbox.h"
|
||||
|
|
@ -1003,13 +1004,15 @@ void LLPanelPlaceInfo::updateYouAreHereBanner(void* userdata)
|
|||
LLPanelPlaceInfo* self = static_cast<LLPanelPlaceInfo*>(userdata);
|
||||
if(!self->getVisible())
|
||||
return;
|
||||
if(!gDisconnected)
|
||||
{
|
||||
static F32 radius = gSavedSettings.getF32("YouAreHereDistance");
|
||||
|
||||
static F32 radius = gSavedSettings.getF32("YouAreHereDistance");
|
||||
|
||||
BOOL display_banner = self->mLastSelectedRegionID == gAgent.getRegion()->getRegionID() &&
|
||||
BOOL display_banner = gAgent.getRegion()->getRegionID() == self->mLastSelectedRegionID &&
|
||||
LLAgentUI::checkAgentDistance(self->mPosRegion, radius);
|
||||
|
||||
self->mYouAreHerePanel->setVisible(display_banner);
|
||||
self->mYouAreHerePanel->setVisible(display_banner);
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelPlaceInfo::onForSaleBannerClick()
|
||||
|
|
|
|||
|
|
@ -228,7 +228,10 @@ void LLPanelPrimMediaControls::updateShape()
|
|||
|
||||
bool can_navigate = parcel->getMediaAllowNavigate();
|
||||
bool enabled = false;
|
||||
bool has_focus = media_impl->hasFocus();
|
||||
// There is no such thing as "has_focus" being different from normal controls set
|
||||
// anymore (as of user feedback from bri 10/09). So we cheat here and force 'has_focus'
|
||||
// to 'true' (or, actually, we use a setting)
|
||||
bool has_focus = (gSavedSettings.getBOOL("PrimMediaControlsUseHoverControlSet")) ? media_impl->hasFocus() : true;
|
||||
setVisible(enabled);
|
||||
|
||||
if (objectp)
|
||||
|
|
@ -310,8 +313,8 @@ void LLPanelPrimMediaControls::updateShape()
|
|||
fwd_ctrl->setEnabled(has_focus);
|
||||
media_address_ctrl->setVisible(false);
|
||||
media_address_ctrl->setEnabled(false);
|
||||
media_play_slider_panel->setVisible(!mini_controls);
|
||||
media_play_slider_panel->setEnabled(!mini_controls);
|
||||
media_play_slider_panel->setVisible(has_focus && !mini_controls);
|
||||
media_play_slider_panel->setEnabled(has_focus && !mini_controls);
|
||||
|
||||
volume_ctrl->setVisible(has_focus);
|
||||
volume_up_ctrl->setVisible(has_focus);
|
||||
|
|
|
|||
|
|
@ -59,17 +59,61 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
if (params[1].asString() == "about")
|
||||
const std::string verb = params[1].asString();
|
||||
if (verb == "about")
|
||||
{
|
||||
LLAvatarActions::showProfile(avatar_id);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (params[1].asString() == "inspect")
|
||||
if (verb == "inspect")
|
||||
{
|
||||
LLFloaterReg::showInstance("inspect_avatar", LLSD().insert("avatar_id", avatar_id));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (verb == "im")
|
||||
{
|
||||
LLAvatarActions::startIM(avatar_id);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (verb == "pay")
|
||||
{
|
||||
LLAvatarActions::pay(avatar_id);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (verb == "offerteleport")
|
||||
{
|
||||
LLAvatarActions::offerTeleport(avatar_id);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (verb == "requestfriend")
|
||||
{
|
||||
LLAvatarActions::requestFriendshipDialog(avatar_id);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (verb == "mute")
|
||||
{
|
||||
if (! LLAvatarActions::isBlocked(avatar_id))
|
||||
{
|
||||
LLAvatarActions::toggleBlock(avatar_id);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (verb == "unmute")
|
||||
{
|
||||
if (LLAvatarActions::isBlocked(avatar_id))
|
||||
{
|
||||
LLAvatarActions::toggleBlock(avatar_id);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -32,10 +32,12 @@
|
|||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llavatarconstants.h"
|
||||
#include "lluserrelations.h"
|
||||
|
||||
#include "llpanelprofileview.h"
|
||||
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
#include "llcallingcard.h"
|
||||
#include "llpanelavatar.h"
|
||||
#include "llpanelpicks.h"
|
||||
|
|
@ -48,14 +50,46 @@ static std::string PANEL_NOTES = "panel_notes";
|
|||
static const std::string PANEL_PROFILE = "panel_profile";
|
||||
static const std::string PANEL_PICKS = "panel_picks";
|
||||
|
||||
|
||||
class AvatarStatusObserver : public LLAvatarPropertiesObserver
|
||||
{
|
||||
public:
|
||||
AvatarStatusObserver(LLPanelProfileView* profile_view)
|
||||
{
|
||||
mProfileView = profile_view;
|
||||
}
|
||||
|
||||
void processProperties(void* data, EAvatarProcessorType type)
|
||||
{
|
||||
if(APT_PROPERTIES != type) return;
|
||||
const LLAvatarData* avatar_data = static_cast<const LLAvatarData*>(data);
|
||||
if(avatar_data && mProfileView->getAvatarId() == avatar_data->avatar_id)
|
||||
{
|
||||
mProfileView->processOnlineStatus(avatar_data->flags & AVATAR_ONLINE);
|
||||
LLAvatarPropertiesProcessor::instance().removeObserver(mProfileView->getAvatarId(), this);
|
||||
}
|
||||
}
|
||||
|
||||
void subscribe()
|
||||
{
|
||||
LLAvatarPropertiesProcessor::instance().addObserver(mProfileView->getAvatarId(), this);
|
||||
}
|
||||
|
||||
private:
|
||||
LLPanelProfileView* mProfileView;
|
||||
};
|
||||
|
||||
LLPanelProfileView::LLPanelProfileView()
|
||||
: LLPanelProfile()
|
||||
, mStatusText(NULL)
|
||||
, mAvatarStatusObserver(NULL)
|
||||
{
|
||||
mAvatarStatusObserver = new AvatarStatusObserver(this);
|
||||
}
|
||||
|
||||
LLPanelProfileView::~LLPanelProfileView(void)
|
||||
{
|
||||
delete mAvatarStatusObserver;
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
|
|
@ -66,6 +100,9 @@ void LLPanelProfileView::onOpen(const LLSD& key)
|
|||
{
|
||||
id = key["id"];
|
||||
}
|
||||
|
||||
// subscribe observer to get online status. Request will be sent by LLPanelAvatarProfile itself
|
||||
mAvatarStatusObserver->subscribe();
|
||||
if(id.notNull() && getAvatarId() != id)
|
||||
{
|
||||
setAvatarId(id);
|
||||
|
|
@ -74,10 +111,12 @@ void LLPanelProfileView::onOpen(const LLSD& key)
|
|||
// Update the avatar name.
|
||||
gCacheName->get(getAvatarId(), FALSE,
|
||||
boost::bind(&LLPanelProfileView::onAvatarNameCached, this, _1, _2, _3, _4));
|
||||
|
||||
/*
|
||||
// disable this part of code according to EXT-2022. See processOnlineStatus
|
||||
// status should only show if viewer has permission to view online/offline. EXT-453
|
||||
mStatusText->setVisible(isGrantedToSeeOnlineStatus());
|
||||
updateOnlineStatus();
|
||||
*/
|
||||
|
||||
LLPanelProfile::onOpen(key);
|
||||
}
|
||||
|
|
@ -93,6 +132,7 @@ BOOL LLPanelProfileView::postBuild()
|
|||
getTabContainer()[PANEL_PROFILE]->childSetVisible("status_combo", FALSE);
|
||||
|
||||
mStatusText = getChild<LLTextBox>("status");
|
||||
mStatusText->setVisible(false);
|
||||
|
||||
childSetCommitCallback("back",boost::bind(&LLPanelProfileView::onBackBtnClick,this),NULL);
|
||||
|
||||
|
|
@ -135,13 +175,18 @@ void LLPanelProfileView::updateOnlineStatus()
|
|||
return;
|
||||
|
||||
bool online = relationship->isOnline();
|
||||
// std::string statusName();
|
||||
|
||||
std::string status = getString(online ? "status_online" : "status_offline");
|
||||
|
||||
mStatusText->setValue(status);
|
||||
}
|
||||
|
||||
void LLPanelProfileView::processOnlineStatus(bool online)
|
||||
{
|
||||
mAvatarIsOnline = online;
|
||||
mStatusText->setVisible(online);
|
||||
}
|
||||
|
||||
void LLPanelProfileView::onAvatarNameCached(const LLUUID& id, const std::string& first_name, const std::string& last_name, BOOL is_group)
|
||||
{
|
||||
llassert(getAvatarId() == id);
|
||||
|
|
@ -155,7 +200,7 @@ void LLPanelProfileView::togglePanel(LLPanel* panel)
|
|||
{
|
||||
// LLPanelProfile::togglePanel shows/hides all children,
|
||||
// we don't want to display online status for non friends, so re-hide it here
|
||||
mStatusText->setVisible(isGrantedToSeeOnlineStatus());
|
||||
mStatusText->setVisible(mAvatarIsOnline);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@
|
|||
class LLPanelProfile;
|
||||
class LLPanelProfileTab;
|
||||
class LLTextBox;
|
||||
class AvatarStatusObserver;
|
||||
|
||||
/**
|
||||
* Panel for displaying Avatar's profile. It consists of three sub panels - Profile,
|
||||
|
|
@ -49,6 +50,7 @@ class LLPanelProfileView : public LLPanelProfile
|
|||
{
|
||||
LOG_CLASS(LLPanelProfileView);
|
||||
friend class LLUICtrlFactory;
|
||||
friend class AvatarStatusObserver;
|
||||
|
||||
public:
|
||||
|
||||
|
|
@ -65,8 +67,9 @@ public:
|
|||
protected:
|
||||
|
||||
void onBackBtnClick();
|
||||
bool isGrantedToSeeOnlineStatus();
|
||||
void updateOnlineStatus();
|
||||
bool isGrantedToSeeOnlineStatus(); // deprecated after EXT-2022 is implemented
|
||||
void updateOnlineStatus(); // deprecated after EXT-2022 is implemented
|
||||
void processOnlineStatus(bool online);
|
||||
|
||||
private:
|
||||
// LLCacheName will call this function when avatar name is loaded from server.
|
||||
|
|
@ -78,6 +81,8 @@ private:
|
|||
BOOL is_group);
|
||||
|
||||
LLTextBox* mStatusText;
|
||||
AvatarStatusObserver* mAvatarStatusObserver;
|
||||
bool mAvatarIsOnline;
|
||||
};
|
||||
|
||||
#endif //LL_LLPANELPROFILEVIEW_H
|
||||
|
|
|
|||
|
|
@ -451,7 +451,7 @@ bool LLScriptEdCore::hasChanged()
|
|||
{
|
||||
if (!mEditor) return false;
|
||||
|
||||
return !mEditor->isPristine();
|
||||
return ((!mEditor->isPristine() || mEnableSave) && mHasScriptData);
|
||||
}
|
||||
|
||||
void LLScriptEdCore::draw()
|
||||
|
|
|
|||
|
|
@ -801,6 +801,8 @@ LLObjectSelectionHandle LLSelectMgr::setHoverObject(LLViewerObject *objectp, S32
|
|||
return NULL;
|
||||
}
|
||||
|
||||
mHoverObjects->mPrimaryObject = objectp;
|
||||
|
||||
objectp = objectp->getRootEdit();
|
||||
|
||||
// is the requested object the same as the existing hover object root?
|
||||
|
|
@ -834,6 +836,11 @@ LLSelectNode *LLSelectMgr::getHoverNode()
|
|||
return mHoverObjects->getFirstRootNode();
|
||||
}
|
||||
|
||||
LLSelectNode *LLSelectMgr::getPrimaryHoverNode()
|
||||
{
|
||||
return mHoverObjects->mSelectNodeMap[mHoverObjects->mPrimaryObject];
|
||||
}
|
||||
|
||||
void LLSelectMgr::highlightObjectOnly(LLViewerObject* objectp)
|
||||
{
|
||||
if (!objectp)
|
||||
|
|
|
|||
|
|
@ -404,6 +404,7 @@ public:
|
|||
|
||||
LLObjectSelectionHandle setHoverObject(LLViewerObject *objectp, S32 face = -1);
|
||||
LLSelectNode *getHoverNode();
|
||||
LLSelectNode *getPrimaryHoverNode();
|
||||
|
||||
void highlightObjectOnly(LLViewerObject *objectp);
|
||||
void highlightObjectAndFamily(LLViewerObject *objectp);
|
||||
|
|
|
|||
|
|
@ -409,7 +409,6 @@ bool LLSysWellWindow::isWindowEmpty()
|
|||
void LLSysWellWindow::sessionAdded(const LLUUID& session_id,
|
||||
const std::string& name, const LLUUID& other_participant_id)
|
||||
{
|
||||
//*TODO get rid of get_session_value, session_id's are unique, cause performance degradation with lots chiclets (IB)
|
||||
if (mMessageList->getItemByValue(session_id) == NULL)
|
||||
{
|
||||
S32 chicletCounter = LLIMModel::getInstance()->getNumUnread(session_id);
|
||||
|
|
|
|||
|
|
@ -598,6 +598,9 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask)
|
|||
|
||||
static bool needs_tooltip(LLSelectNode* nodep)
|
||||
{
|
||||
if (!nodep)
|
||||
return false;
|
||||
|
||||
LLViewerObject* object = nodep->getObject();
|
||||
LLViewerObject *parent = (LLViewerObject *)object->getParent();
|
||||
if (object->flagHandleTouch()
|
||||
|
|
@ -773,7 +776,10 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
|
|||
}
|
||||
}
|
||||
|
||||
bool needs_tip = needs_tooltip(nodep);
|
||||
// also check the primary node since sometimes it can have an action even though
|
||||
// the root node doesn't
|
||||
bool needs_tip = needs_tooltip(nodep) ||
|
||||
needs_tooltip(LLSelectMgr::getInstance()->getPrimaryHoverNode());
|
||||
|
||||
if (show_all_object_tips || needs_tip)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -582,7 +582,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy)
|
|||
}
|
||||
else
|
||||
{
|
||||
gGL.getTexUnit(0)->bind(LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR));
|
||||
gGL.getTexUnit(0)->bind(LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT));
|
||||
}
|
||||
|
||||
if (gRenderForSelect)
|
||||
|
|
|
|||
|
|
@ -1189,6 +1189,17 @@ BOOL LLViewerMediaImpl::handleMouseUp(S32 x, S32 y, MASK mask)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
std::string LLViewerMediaImpl::getName() const
|
||||
{
|
||||
if (mMediaSource)
|
||||
{
|
||||
return mMediaSource->getMediaName();
|
||||
}
|
||||
|
||||
return LLStringUtil::null;
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
void LLViewerMediaImpl::navigateBack()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -228,7 +228,7 @@ public:
|
|||
/*virtual*/ BOOL handleToolTip(S32 x, S32 y, MASK mask) { return FALSE; };
|
||||
/*virtual*/ BOOL handleMiddleMouseDown(S32 x, S32 y, MASK mask) { return FALSE; };
|
||||
/*virtual*/ BOOL handleMiddleMouseUp(S32 x, S32 y, MASK mask) {return FALSE; };
|
||||
/*virtual*/ std::string getName() const { return LLStringUtil::null; };
|
||||
/*virtual*/ std::string getName() const;
|
||||
|
||||
/*virtual*/ void screenPointToLocal(S32 screen_x, S32 screen_y, S32* local_x, S32* local_y) const {};
|
||||
/*virtual*/ void localPointToScreen(S32 local_x, S32 local_y, S32* screen_x, S32* screen_y) const {};
|
||||
|
|
@ -258,7 +258,7 @@ public:
|
|||
void calculateInterest();
|
||||
F64 getInterest() const { return mInterest; };
|
||||
F64 getApproximateTextureInterest();
|
||||
S32 getProximity() { return mProximity; };
|
||||
S32 getProximity() const { return mProximity; };
|
||||
|
||||
// Mark this object as being used in a UI panel instead of on a prim
|
||||
// This will be used as part of the interest sorting algorithm.
|
||||
|
|
|
|||
|
|
@ -86,6 +86,9 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac
|
|||
mFocusedObjectID = objectp->getID();
|
||||
mFocusedObjectFace = face;
|
||||
mFocusedObjectNormal = pick_normal;
|
||||
|
||||
// Focusing on a media face clears its disable flag.
|
||||
media_impl->setDisabled(false);
|
||||
|
||||
LLTextureEntry* tep = objectp->getTE(face);
|
||||
if(tep->hasMedia())
|
||||
|
|
|
|||
|
|
@ -2964,11 +2964,20 @@ bool callback_freeze(const LLSD& notification, const LLSD& response)
|
|||
}
|
||||
|
||||
|
||||
class LLAvatarFreeze : public view_listener_t
|
||||
void handle_avatar_freeze(const LLSD& avatar_id)
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
|
||||
// Use avatar_id if available, otherwise default to right-click avatar
|
||||
LLVOAvatar* avatar = NULL;
|
||||
if (avatar_id.asUUID().notNull())
|
||||
{
|
||||
avatar = find_avatar_from_object(avatar_id.asUUID());
|
||||
}
|
||||
else
|
||||
{
|
||||
avatar = find_avatar_from_object(
|
||||
LLSelectMgr::getInstance()->getSelection()->getPrimaryObject());
|
||||
}
|
||||
|
||||
if( avatar )
|
||||
{
|
||||
std::string fullname = avatar->getFullname();
|
||||
|
|
@ -2992,9 +3001,7 @@ class LLAvatarFreeze : public view_listener_t
|
|||
callback_freeze);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
class LLAvatarVisibleDebug : public view_listener_t
|
||||
{
|
||||
|
|
@ -3004,14 +3011,6 @@ class LLAvatarVisibleDebug : public view_listener_t
|
|||
}
|
||||
};
|
||||
|
||||
class LLAvatarEnableDebug : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
return gAgent.isGodlike();
|
||||
}
|
||||
};
|
||||
|
||||
class LLAvatarDebug : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
|
|
@ -3088,11 +3087,20 @@ bool callback_eject(const LLSD& notification, const LLSD& response)
|
|||
return false;
|
||||
}
|
||||
|
||||
class LLAvatarEject : public view_listener_t
|
||||
void handle_avatar_eject(const LLSD& avatar_id)
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
|
||||
// Use avatar_id if available, otherwise default to right-click avatar
|
||||
LLVOAvatar* avatar = NULL;
|
||||
if (avatar_id.asUUID().notNull())
|
||||
{
|
||||
avatar = find_avatar_from_object(avatar_id.asUUID());
|
||||
}
|
||||
else
|
||||
{
|
||||
avatar = find_avatar_from_object(
|
||||
LLSelectMgr::getInstance()->getSelection()->getPrimaryObject());
|
||||
}
|
||||
|
||||
if( avatar )
|
||||
{
|
||||
LLSD payload;
|
||||
|
|
@ -3143,38 +3151,41 @@ class LLAvatarEject : public view_listener_t
|
|||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
class LLAvatarEnableFreezeEject : public view_listener_t
|
||||
bool enable_freeze_eject(const LLSD& avatar_id)
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
// Use avatar_id if available, otherwise default to right-click avatar
|
||||
LLVOAvatar* avatar = NULL;
|
||||
if (avatar_id.asUUID().notNull())
|
||||
{
|
||||
LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
|
||||
bool new_value = (avatar != NULL);
|
||||
|
||||
if (new_value)
|
||||
{
|
||||
const LLVector3& pos = avatar->getPositionRegion();
|
||||
const LLVector3d& pos_global = avatar->getPositionGlobal();
|
||||
LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel();
|
||||
LLViewerRegion* region = avatar->getRegion();
|
||||
new_value = (region != NULL);
|
||||
|
||||
if (new_value)
|
||||
{
|
||||
new_value = region->isOwnedSelf(pos);
|
||||
if (!new_value || region->isOwnedGroup(pos))
|
||||
{
|
||||
new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new_value;
|
||||
avatar = find_avatar_from_object(avatar_id.asUUID());
|
||||
}
|
||||
};
|
||||
else
|
||||
{
|
||||
avatar = find_avatar_from_object(
|
||||
LLSelectMgr::getInstance()->getSelection()->getPrimaryObject());
|
||||
}
|
||||
if (!avatar) return false;
|
||||
|
||||
// Gods can always freeze
|
||||
if (gAgent.isGodlike()) return true;
|
||||
|
||||
// Estate owners / managers can freeze
|
||||
// Parcel owners can also freeze
|
||||
const LLVector3& pos = avatar->getPositionRegion();
|
||||
const LLVector3d& pos_global = avatar->getPositionGlobal();
|
||||
LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel();
|
||||
LLViewerRegion* region = avatar->getRegion();
|
||||
if (!region) return false;
|
||||
|
||||
bool new_value = region->isOwnedSelf(pos);
|
||||
if (!new_value || region->isOwnedGroup(pos))
|
||||
{
|
||||
new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN);
|
||||
}
|
||||
return new_value;
|
||||
}
|
||||
|
||||
class LLAvatarGiveCard : public view_listener_t
|
||||
{
|
||||
|
|
@ -8022,18 +8033,18 @@ void initialize_menus()
|
|||
view_listener_t::addMenu(new LLObjectMute(), "Avatar.Mute");
|
||||
view_listener_t::addMenu(new LLAvatarAddFriend(), "Avatar.AddFriend");
|
||||
view_listener_t::addMenu(new LLAvatarAddContact(), "Avatar.AddContact");
|
||||
view_listener_t::addMenu(new LLAvatarFreeze(), "Avatar.Freeze");
|
||||
commit.add("Avatar.Freeze", boost::bind(&handle_avatar_freeze, LLSD()));
|
||||
view_listener_t::addMenu(new LLAvatarDebug(), "Avatar.Debug");
|
||||
view_listener_t::addMenu(new LLAvatarVisibleDebug(), "Avatar.VisibleDebug");
|
||||
view_listener_t::addMenu(new LLAvatarEnableDebug(), "Avatar.EnableDebug");
|
||||
view_listener_t::addMenu(new LLAvatarInviteToGroup(), "Avatar.InviteToGroup");
|
||||
view_listener_t::addMenu(new LLAvatarGiveCard(), "Avatar.GiveCard");
|
||||
view_listener_t::addMenu(new LLAvatarEject(), "Avatar.Eject");
|
||||
commit.add("Avatar.Eject", boost::bind(&handle_avatar_eject, LLSD()));
|
||||
view_listener_t::addMenu(new LLAvatarSendIM(), "Avatar.SendIM");
|
||||
view_listener_t::addMenu(new LLAvatarReportAbuse(), "Avatar.ReportAbuse");
|
||||
|
||||
view_listener_t::addMenu(new LLAvatarEnableAddFriend(), "Avatar.EnableAddFriend");
|
||||
view_listener_t::addMenu(new LLAvatarEnableFreezeEject(), "Avatar.EnableFreezeEject");
|
||||
enable.add("Avatar.EnableFreezeEject", boost::bind(&enable_freeze_eject, _2));
|
||||
visible.add("Avatar.EnableFreezeEject", boost::bind(&enable_freeze_eject, _2));
|
||||
|
||||
// Object pie menu
|
||||
view_listener_t::addMenu(new LLObjectBuild(), "Object.Build");
|
||||
|
|
|
|||
|
|
@ -101,6 +101,14 @@ void handle_take_copy();
|
|||
void handle_look_at_selection(const LLSD& param);
|
||||
void handle_zoom_to_object(LLUUID object_id);
|
||||
|
||||
// Takes avatar UUID, or if no UUID passed, uses last selected object
|
||||
void handle_avatar_freeze(const LLSD& avatar_id);
|
||||
|
||||
// Takes avatar UUID, or if no UUID passed, uses last selected object
|
||||
void handle_avatar_eject(const LLSD& avatar_id);
|
||||
|
||||
bool enable_freeze_eject(const LLSD& avatar_id);
|
||||
|
||||
// Can anyone take a free copy of the object?
|
||||
// *TODO: Move to separate file
|
||||
bool anyone_copy_selection(LLSelectNode* nodep);
|
||||
|
|
|
|||
|
|
@ -2381,7 +2381,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
|
|||
switch(chat.mChatType)
|
||||
{
|
||||
case CHAT_TYPE_WHISPER:
|
||||
verb = "(" + LLTrans::getString("whisper") + ")";
|
||||
verb = LLTrans::getString("whisper") + " ";
|
||||
break;
|
||||
case CHAT_TYPE_DEBUG_MSG:
|
||||
case CHAT_TYPE_OWNER:
|
||||
|
|
@ -2389,7 +2389,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
|
|||
verb = "";
|
||||
break;
|
||||
case CHAT_TYPE_SHOUT:
|
||||
verb = "(" + LLTrans::getString("shout") + ")";
|
||||
verb = LLTrans::getString("shout") + " ";
|
||||
break;
|
||||
case CHAT_TYPE_START:
|
||||
case CHAT_TYPE_STOP:
|
||||
|
|
|
|||
|
|
@ -7908,6 +7908,7 @@ void LLPipeline::generateHighlight(LLCamera& camera)
|
|||
|
||||
mHighlight.flush();
|
||||
gGL.setColorMask(true, false);
|
||||
gViewerWindow->setup3DViewport();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 332 B After Width: | Height: | Size: 3.1 KiB |
|
|
@ -492,6 +492,9 @@
|
|||
|
||||
<!--WARNING OLD ART *do not use*-->
|
||||
|
||||
<texture name="Banner_ForSale" file_name="Banner_ForSale.png" preload="false" />
|
||||
<texture name="Banner_YouAreHere" file_name="Banner_YouAreHere.png" preload="false" />
|
||||
|
||||
<texture name="btn_chatbar.tga" scale.left="20" scale.top="24" scale.right="44" scale.bottom="0" />
|
||||
<texture name="btn_chatbar_selected.tga" scale.left="20" scale.top="24" scale.right="44" scale.bottom="0" />
|
||||
|
||||
|
|
@ -536,15 +539,6 @@
|
|||
<texture name="move_down_in.tga" preload="false" />
|
||||
<texture name="move_down_out.tga" preload="false" />
|
||||
|
||||
<texture name="tool_grab.tga" />
|
||||
<texture name="tool_grab_active.tga" />
|
||||
|
||||
<texture name="tool_face.tga" />
|
||||
<texture name="tool_face_active.tga" />
|
||||
|
||||
<texture name="tool_create.tga" />
|
||||
<texture name="tool_create_active.tga" />
|
||||
|
||||
<texture name="up_arrow.tga" file_name="up_arrow.png" />
|
||||
<texture name="down_arrow.tga" file_name="down_arrow.png" />
|
||||
|
||||
|
|
@ -609,54 +603,6 @@
|
|||
<texture name="icon_popular.tga" />
|
||||
<texture name="icon_top_pick.tga" />
|
||||
|
||||
<texture name="inv_folder_animation.tga" />
|
||||
<texture name="inv_folder_bodypart.tga" />
|
||||
<texture name="inv_folder_callingcard.tga" />
|
||||
<texture name="inv_folder_clothing.tga" />
|
||||
<texture name="inv_folder_current_outfit.tga" />
|
||||
<texture name="inv_folder_gesture.tga" />
|
||||
<texture name="inv_folder_landmark.tga" />
|
||||
<texture name="inv_folder_lostandfound.tga" />
|
||||
<texture name="inv_folder_my_outfits.tga" />
|
||||
<texture name="inv_folder_notecard.tga" />
|
||||
<texture name="inv_folder_object.tga" />
|
||||
<texture name="inv_folder_outfit.tga" />
|
||||
<texture name="inv_folder_plain_closed.tga" />
|
||||
<texture name="inv_folder_script.tga" />
|
||||
<texture name="inv_folder_snapshot.tga" />
|
||||
<texture name="inv_folder_sound.tga" />
|
||||
<texture name="inv_folder_texture.tga" />
|
||||
<texture name="inv_folder_trash.tga" />
|
||||
|
||||
<texture name="inv_item_animation.tga" />
|
||||
<texture name="inv_item_skin.tga" />
|
||||
<texture name="inv_item_callingcard_offline.tga" />
|
||||
<texture name="inv_item_callingcard_online.tga" />
|
||||
<texture name="inv_item_eyes.tga" />
|
||||
<texture name="inv_item_gesture.tga" />
|
||||
<texture name="inv_item_gloves.tga" />
|
||||
<texture name="inv_item_hair.tga" />
|
||||
<texture name="inv_item_jacket.tga" />
|
||||
<texture name="inv_item_landmark.tga" />
|
||||
<texture name="inv_item_landmark_visited.tga" />
|
||||
<texture name="inv_item_linkitem.tga" />
|
||||
<texture name="inv_item_linkfolder.tga" />
|
||||
<texture name="inv_item_notecard.tga" />
|
||||
<texture name="inv_item_object.tga" />
|
||||
<texture name="inv_item_object_multi.tga" />
|
||||
<texture name="inv_item_pants.tga" />
|
||||
<texture name="inv_item_script.tga" />
|
||||
<texture name="inv_item_shape.tga" />
|
||||
<texture name="inv_item_shirt.tga" />
|
||||
<texture name="inv_item_shoes.tga" />
|
||||
<texture name="inv_item_skirt.tga" />
|
||||
<texture name="inv_item_snapshot.tga" />
|
||||
<texture name="inv_item_socks.tga" />
|
||||
<texture name="inv_item_sound.tga" />
|
||||
<texture name="inv_item_texture.tga" />
|
||||
<texture name="inv_item_underpants.tga" />
|
||||
<texture name="inv_item_undershirt.tga" />
|
||||
|
||||
<texture name="lag_status_critical.tga" />
|
||||
<texture name="lag_status_good.tga" />
|
||||
<texture name="lag_status_warning.tga" />
|
||||
|
|
@ -683,37 +629,6 @@
|
|||
<texture name="notify_next.png" preload="true" />
|
||||
<texture name="notify_box_icon.tga" />
|
||||
|
||||
<texture name="object_cone.tga" />
|
||||
<texture name="object_cone_active.tga" />
|
||||
<texture name="object_cube.tga" />
|
||||
<texture name="object_cube_active.tga" />
|
||||
<texture name="object_cylinder.tga" />
|
||||
<texture name="object_cylinder_active.tga" />
|
||||
<texture name="object_grass.tga" />
|
||||
<texture name="object_grass_active.tga" />
|
||||
<texture name="object_hemi_cone.tga" />
|
||||
<texture name="object_hemi_cone_active.tga" />
|
||||
<texture name="object_hemi_cylinder.tga" />
|
||||
<texture name="object_hemi_cylinder_active.tga" />
|
||||
<texture name="object_hemi_sphere.tga" />
|
||||
<texture name="object_hemi_sphere_active.tga" />
|
||||
<texture name="object_prism.tga" />
|
||||
<texture name="object_prism_active.tga" />
|
||||
<texture name="object_pyramid.tga" />
|
||||
<texture name="object_pyramid_active.tga" />
|
||||
<texture name="object_ring.tga" />
|
||||
<texture name="object_ring_active.tga" />
|
||||
<texture name="object_sphere.tga" />
|
||||
<texture name="object_sphere_active.tga" />
|
||||
<texture name="object_tetrahedron.tga" />
|
||||
<texture name="object_tetrahedron_active.tga" />
|
||||
<texture name="object_torus.tga" />
|
||||
<texture name="object_torus_active.tga" />
|
||||
<texture name="object_tree.tga" />
|
||||
<texture name="object_tree_active.tga" />
|
||||
<texture name="object_tube.tga" />
|
||||
<texture name="object_tube_active.tga" />
|
||||
|
||||
<texture name="pixiesmall.j2c" use_mips="true" />
|
||||
<texture name="script_error.j2c" use_mips="true" />
|
||||
<texture name="silhouette.j2c" use_mips="true" />
|
||||
|
|
@ -729,11 +644,6 @@
|
|||
<texture name="status_no_push.tga" />
|
||||
<texture name="status_no_scripts.tga" />
|
||||
|
||||
<texture name="tool_dozer.tga" />
|
||||
<texture name="tool_dozer_active.tga" />
|
||||
<texture name="tool_zoom.tga" />
|
||||
<texture name="tool_zoom_active.tga" />
|
||||
|
||||
<texture name="icn_active-speakers-dot-lvl0.tga" />
|
||||
<texture name="icn_active-speakers-dot-lvl1.tga" />
|
||||
<texture name="icn_active-speakers-dot-lvl2.tga" />
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater
|
||||
legacy_header_height="18"
|
||||
can_tear_off="false"
|
||||
height="420"
|
||||
layout="topleft"
|
||||
|
|
@ -26,28 +25,24 @@
|
|||
remaining
|
||||
</floater.string>
|
||||
<tab_container
|
||||
follows="all"
|
||||
follows="left|top|right|bottom"
|
||||
height="400"
|
||||
halign="center"
|
||||
layout="topleft"
|
||||
font="SansSerifSmall"
|
||||
left="1"
|
||||
tab_padding_right="5"
|
||||
tab_height="20"
|
||||
name="landtab"
|
||||
tab_position="top"
|
||||
top="20"
|
||||
width="459">
|
||||
<panel
|
||||
<panel
|
||||
border="true"
|
||||
follows="all"
|
||||
follows="left|top|right|bottom"
|
||||
height="380"
|
||||
label="General"
|
||||
layout="topleft"
|
||||
left="1"
|
||||
help_topic="land_general_tab"
|
||||
name="land_general_panel"
|
||||
top="0"
|
||||
top="-31"
|
||||
width="458">
|
||||
<panel.string
|
||||
name="new users only">
|
||||
|
|
@ -536,7 +531,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
</panel>
|
||||
<panel
|
||||
border="true"
|
||||
follows="all"
|
||||
follows="left|top|right|bottom"
|
||||
height="380"
|
||||
label="Covenant"
|
||||
layout="topleft"
|
||||
|
|
@ -632,7 +627,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
length="1"
|
||||
enabled="false"
|
||||
follows="left|top|right|bottom"
|
||||
handle_edit_keys_directly="true"
|
||||
handle_edit_keys_directly="true"
|
||||
height="115"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
|
|
@ -803,7 +798,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
</panel>
|
||||
<panel
|
||||
border="true"
|
||||
follows="all"
|
||||
follows="left|top|right|bottom"
|
||||
height="380"
|
||||
label="Objects"
|
||||
layout="topleft"
|
||||
|
|
@ -854,7 +849,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
left_delta="152"
|
||||
name="objects_available"
|
||||
top_delta="0"
|
||||
width="212">
|
||||
width="260">
|
||||
[COUNT] out of [MAX] ([AVAILABLE] available)
|
||||
</text>
|
||||
<text
|
||||
|
|
@ -875,7 +870,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_delta="152"
|
||||
left_delta="200"
|
||||
name="object_contrib_text"
|
||||
top_delta="0"
|
||||
width="212">
|
||||
|
|
@ -899,7 +894,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_delta="152"
|
||||
left_delta="200"
|
||||
name="total_objects_text"
|
||||
top_delta="0"
|
||||
width="48">
|
||||
|
|
@ -914,7 +909,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
left="28"
|
||||
name="Owned by parcel owner:"
|
||||
top="84"
|
||||
width="128">
|
||||
width="176">
|
||||
Owned by parcel owner:
|
||||
</text>
|
||||
<text
|
||||
|
|
@ -923,7 +918,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_delta="128"
|
||||
left_delta="176"
|
||||
name="owner_objects_text"
|
||||
top_delta="0"
|
||||
width="48">
|
||||
|
|
@ -939,7 +934,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
label_selected="Show"
|
||||
layout="topleft"
|
||||
name="ShowOwner"
|
||||
right="-190"
|
||||
right="-140"
|
||||
width="60" />
|
||||
<button
|
||||
bottom="100"
|
||||
|
|
@ -951,7 +946,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
label_selected="Return..."
|
||||
layout="topleft"
|
||||
name="ReturnOwner..."
|
||||
right="-60"
|
||||
right="-10"
|
||||
tool_tip="Return objects to their owners."
|
||||
width="119" />
|
||||
<text
|
||||
|
|
@ -963,7 +958,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
left="28"
|
||||
name="Set to group:"
|
||||
top="104"
|
||||
width="128">
|
||||
width="176">
|
||||
Set to group:
|
||||
</text>
|
||||
<text
|
||||
|
|
@ -972,7 +967,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_delta="128"
|
||||
left_delta="176"
|
||||
name="group_objects_text"
|
||||
top_delta="0"
|
||||
width="48">
|
||||
|
|
@ -988,7 +983,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
label_selected="Show"
|
||||
layout="topleft"
|
||||
name="ShowGroup"
|
||||
right="-190"
|
||||
right="-140"
|
||||
width="60" />
|
||||
<button
|
||||
bottom="120"
|
||||
|
|
@ -1000,7 +995,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
label_selected="Return..."
|
||||
layout="topleft"
|
||||
name="ReturnGroup..."
|
||||
right="-60"
|
||||
right="-10"
|
||||
tool_tip="Return objects to their owners."
|
||||
width="119" />
|
||||
<text
|
||||
|
|
@ -1012,7 +1007,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
left="28"
|
||||
name="Owned by others:"
|
||||
top="124"
|
||||
width="128">
|
||||
width="176">
|
||||
Owned by others:
|
||||
</text>
|
||||
<text
|
||||
|
|
@ -1021,7 +1016,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_delta="128"
|
||||
left_delta="176"
|
||||
name="other_objects_text"
|
||||
top_delta="0"
|
||||
width="48">
|
||||
|
|
@ -1037,7 +1032,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
label_selected="Show"
|
||||
layout="topleft"
|
||||
name="ShowOther"
|
||||
right="-190"
|
||||
right="-140"
|
||||
width="60" />
|
||||
<button
|
||||
bottom="140"
|
||||
|
|
@ -1049,7 +1044,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
label_selected="Return..."
|
||||
layout="topleft"
|
||||
name="ReturnOther..."
|
||||
right="-60"
|
||||
right="-10"
|
||||
tool_tip="Return objects to their owners."
|
||||
width="119" />
|
||||
<text
|
||||
|
|
@ -1061,7 +1056,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
left="28"
|
||||
name="Selected / sat upon:"
|
||||
top="144"
|
||||
width="128">
|
||||
width="176">
|
||||
Selected / sat upon:
|
||||
</text>
|
||||
<text
|
||||
|
|
@ -1070,7 +1065,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_delta="128"
|
||||
left_delta="176"
|
||||
name="selected_objects_text"
|
||||
top_delta="0"
|
||||
width="48">
|
||||
|
|
@ -1097,7 +1092,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
layout="topleft"
|
||||
max_length="6"
|
||||
name="clean other time"
|
||||
right="-100"
|
||||
right="-50"
|
||||
width="56" />
|
||||
<text
|
||||
type="string"
|
||||
|
|
@ -1169,7 +1164,7 @@ Go to World menu > About Land or select another parcel to show its details.
|
|||
</panel>
|
||||
<panel
|
||||
border="true"
|
||||
follows="all"
|
||||
follows="left|top|right|bottom"
|
||||
height="333"
|
||||
label="Options"
|
||||
layout="topleft"
|
||||
|
|
@ -1492,16 +1487,6 @@ Only large parcels can be listed in search.
|
|||
name="item12"
|
||||
value="other" />
|
||||
</combo_box>
|
||||
<button
|
||||
follows="left|top"
|
||||
height="18"
|
||||
label="?"
|
||||
label_selected="?"
|
||||
layout="topleft"
|
||||
left_pad="15"
|
||||
name="?"
|
||||
top_delta="0"
|
||||
width="18" />
|
||||
<check_box
|
||||
height="16"
|
||||
label="Mature Content"
|
||||
|
|
@ -1605,15 +1590,16 @@ Only large parcels can be listed in search.
|
|||
value="Anywhere" />
|
||||
</combo_box>
|
||||
</panel>
|
||||
<panel
|
||||
<panel
|
||||
border="true"
|
||||
follows="all"
|
||||
follows="left|top|right|bottom"
|
||||
height="363"
|
||||
label="Media"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
help_topic="land_media_tab"
|
||||
name="land_media_panel"
|
||||
top_delta="1"
|
||||
width="458">
|
||||
<text
|
||||
type="string"
|
||||
|
|
@ -1624,22 +1610,24 @@ Only large parcels can be listed in search.
|
|||
left="10"
|
||||
name="with media:"
|
||||
top="9"
|
||||
width="100">
|
||||
width="65">
|
||||
Type:
|
||||
</text>
|
||||
<combo_box
|
||||
height="20"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
left_pad="5"
|
||||
name="media type"
|
||||
tool_tip="Specify if the URL is a movie, web page, or other media"
|
||||
width="150" />
|
||||
top_delta="-2"
|
||||
width="120" />
|
||||
<text
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
name="mime_type"
|
||||
top_delta="2"
|
||||
width="200" />
|
||||
<text
|
||||
type="string"
|
||||
|
|
@ -1649,30 +1637,32 @@ Only large parcels can be listed in search.
|
|||
layout="topleft"
|
||||
left="10"
|
||||
name="at URL:"
|
||||
top_pad="10"
|
||||
width="100">
|
||||
top="29"
|
||||
width="65">
|
||||
Home URL:
|
||||
</text>
|
||||
<line_editor
|
||||
bottom_delta="0"
|
||||
follows="left|top"
|
||||
height="20"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
left="80"
|
||||
max_length="255"
|
||||
name="media_url"
|
||||
right="-80"
|
||||
select_on_focus="true"
|
||||
width="270"
|
||||
/>
|
||||
text_readonly_color="0.576471 0.662745 0.835294 1" />
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="20"
|
||||
label="Set"
|
||||
label_selected="Set"
|
||||
height="16"
|
||||
label="Set..."
|
||||
label_selected="Set..."
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
left_pad="8"
|
||||
name="set_media_url"
|
||||
width="50" />
|
||||
top_delta="0"
|
||||
width="60" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -1681,34 +1671,37 @@ Only large parcels can be listed in search.
|
|||
layout="topleft"
|
||||
left="10"
|
||||
name="CurrentURL:"
|
||||
top_pad="10"
|
||||
width="100">
|
||||
top="49"
|
||||
width="65">
|
||||
Current URL:
|
||||
</text>
|
||||
<text
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
left_pad="5"
|
||||
name="current_url"
|
||||
width="260">http://</text>
|
||||
top_delta="0"
|
||||
width="300" />
|
||||
<button
|
||||
follows="left|top"
|
||||
height="20"
|
||||
label="Reset"
|
||||
label_selected="Reset"
|
||||
font="SansSerifSmall"
|
||||
height="16"
|
||||
label="Reset..."
|
||||
label_selected="Reset..."
|
||||
layout="topleft"
|
||||
left_pad="6"
|
||||
name="reset_media_url"
|
||||
top_delta="0"
|
||||
width="60" />
|
||||
<check_box
|
||||
height="16"
|
||||
label="Hide URL"
|
||||
layout="topleft"
|
||||
left="120"
|
||||
left="100"
|
||||
name="hide_media_url"
|
||||
tool_tip="Checking this option will hide the media url to any non-authorized viewers of this parcel information. Note this is not available for HTML types."
|
||||
top_pad="2"
|
||||
top="89"
|
||||
width="200" />
|
||||
<text
|
||||
type="string"
|
||||
|
|
@ -1718,20 +1711,23 @@ Only large parcels can be listed in search.
|
|||
layout="topleft"
|
||||
left="10"
|
||||
name="Description:"
|
||||
top_pad="10"
|
||||
width="100">
|
||||
top="49"
|
||||
width="364">
|
||||
Description:
|
||||
</text>
|
||||
<line_editor
|
||||
border_style="line"
|
||||
border_thickness="1"
|
||||
bottom_delta="0"
|
||||
follows="left|top"
|
||||
height="35"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="80"
|
||||
max_length="255"
|
||||
name="url_description"
|
||||
left_pad="10"
|
||||
right="-80"
|
||||
select_on_focus="true"
|
||||
tool_tip="Text displayed next to play/load button"
|
||||
top_delta="0"
|
||||
width="270" />
|
||||
tool_tip="Text displayed next to play/load button" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -1740,9 +1736,10 @@ Only large parcels can be listed in search.
|
|||
layout="topleft"
|
||||
left="10"
|
||||
name="Media texture:"
|
||||
top_pad="10"
|
||||
width="100">
|
||||
Replace Texture:
|
||||
top="69"
|
||||
width="364">
|
||||
Replace
|
||||
Texture:
|
||||
</text>
|
||||
<texture_picker
|
||||
allow_no_texture="true"
|
||||
|
|
@ -1750,7 +1747,7 @@ Only large parcels can be listed in search.
|
|||
follows="left|top"
|
||||
height="80"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
left_delta="70"
|
||||
name="media texture"
|
||||
tool_tip="Click to choose a picture"
|
||||
top_delta="0"
|
||||
|
|
@ -1759,22 +1756,25 @@ Only large parcels can be listed in search.
|
|||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="50"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
left_delta="75"
|
||||
name="replace_texture_help"
|
||||
top_delta="0"
|
||||
word_wrap="true"
|
||||
width="240">
|
||||
Objects using this texture will show the movie or web page after you click the play arrow.
|
||||
top="85"
|
||||
width="270">
|
||||
Objects using this texture will show the movie or
|
||||
web page after you click the play arrow.
|
||||
|
||||
Select the thumbnail to choose a different texture.
|
||||
</text>
|
||||
<check_box
|
||||
height="16"
|
||||
label="Auto scale"
|
||||
layout="topleft"
|
||||
left_delta="70"
|
||||
name="media_auto_scale"
|
||||
tool_tip="Checking this option will scale the content for this parcel automatically. It may be slightly slower and lower quality visually but no other texture scaling or alignment will be required."
|
||||
top_pad="3"
|
||||
top_delta="0"
|
||||
width="200" />
|
||||
<text
|
||||
type="string"
|
||||
|
|
@ -1782,11 +1782,11 @@ Only large parcels can be listed in search.
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
top_pad="10"
|
||||
left="85"
|
||||
name="media_size"
|
||||
tool_tip="Size to render Web media, leave 0 for default."
|
||||
width="100">
|
||||
top="185"
|
||||
width="85">
|
||||
Size:
|
||||
</text>
|
||||
<spinner
|
||||
|
|
@ -1798,22 +1798,12 @@ Only large parcels can be listed in search.
|
|||
increment="1"
|
||||
initial_value="0"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
left_delta="65"
|
||||
max_val="1024"
|
||||
name="media_size_width"
|
||||
tool_tip="Size to render Web media, leave 0 for default."
|
||||
top_delta="0"
|
||||
width="64" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
name="pixels">
|
||||
px wide
|
||||
</text>
|
||||
<spinner
|
||||
decimal_digits="0"
|
||||
enabled="false"
|
||||
|
|
@ -1823,21 +1813,23 @@ Only large parcels can be listed in search.
|
|||
increment="1"
|
||||
initial_value="0"
|
||||
layout="topleft"
|
||||
left="120"
|
||||
top_pad="3"
|
||||
left_pad="16"
|
||||
max_val="1024"
|
||||
name="media_size_height"
|
||||
tool_tip="Size to render Web media, leave 0 for default."
|
||||
top_delta="0"
|
||||
width="64" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
bottom_delta="0"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
name="pixels">
|
||||
px high
|
||||
left_delta="70"
|
||||
name="pixels"
|
||||
right="-10">
|
||||
pixels
|
||||
</text>
|
||||
<text
|
||||
type="string"
|
||||
|
|
@ -1847,15 +1839,15 @@ Only large parcels can be listed in search.
|
|||
layout="topleft"
|
||||
left="10"
|
||||
name="Options:"
|
||||
top_pad="10"
|
||||
width="100">
|
||||
top="237"
|
||||
width="292">
|
||||
Options:
|
||||
</text>
|
||||
<check_box
|
||||
height="16"
|
||||
label="Loop"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
left_delta="70"
|
||||
name="media_loop"
|
||||
tool_tip="Play media in a loop. When the media has finished playing, it will restart from the beginning."
|
||||
top_delta="0"
|
||||
|
|
@ -1863,9 +1855,9 @@ Only large parcels can be listed in search.
|
|||
</panel>
|
||||
<panel
|
||||
border="true"
|
||||
follows="all"
|
||||
follows="left|top|right|bottom"
|
||||
height="363"
|
||||
label="Sound"
|
||||
label="Audio"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
help_topic="land_audio_tab"
|
||||
|
|
@ -1916,16 +1908,6 @@ Only large parcels can be listed in search.
|
|||
name="check sound local"
|
||||
top_delta="0"
|
||||
width="292" />
|
||||
<button
|
||||
follows="left|top"
|
||||
height="18"
|
||||
label="?"
|
||||
label_selected="?"
|
||||
layout="topleft"
|
||||
left_delta="292"
|
||||
name="?"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -1967,7 +1949,7 @@ Only large parcels can be listed in search.
|
|||
</panel>
|
||||
<panel
|
||||
border="true"
|
||||
follows="all"
|
||||
follows="left|top|right|bottom"
|
||||
height="333"
|
||||
label="Access"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -104,9 +104,9 @@
|
|||
layout="topleft"
|
||||
left="10"
|
||||
name="InstructSelectFriend"
|
||||
top="15"
|
||||
top="5"
|
||||
width="200">
|
||||
Select a friend(s):
|
||||
Select a person:
|
||||
</text>
|
||||
<button
|
||||
follows="top|right"
|
||||
|
|
|
|||
|
|
@ -28,16 +28,6 @@
|
|||
name="Day Cycle"
|
||||
top="0"
|
||||
width="642">
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="15"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left="612"
|
||||
name="WLDayCycleHelp"
|
||||
top="3"
|
||||
width="18" />
|
||||
<multi_slider
|
||||
can_edit_text="true"
|
||||
control_name="WLTimeSlider"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<multi_floater
|
||||
legacy_header_height="18"
|
||||
can_resize="true"
|
||||
follows="left|bottom"
|
||||
height="422"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
legacy_header_height="18"
|
||||
background_visible="true"
|
||||
follows="left|top|right|bottom"
|
||||
height="250"
|
||||
height="270"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="panel_im"
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
min_width="200"
|
||||
min_height="150">
|
||||
<layout_stack follows="left|top|right|bottom"
|
||||
height="235"
|
||||
height="255"
|
||||
width="365"
|
||||
layout="topleft"
|
||||
orientation="horizontal"
|
||||
|
|
@ -29,11 +29,11 @@
|
|||
layout="topleft"
|
||||
top_delta="-3"
|
||||
width="146"
|
||||
height="225"
|
||||
height="255"
|
||||
follows="left"
|
||||
label="IM Control Panel"
|
||||
user_resize="false" />
|
||||
<layout_panel height="235"
|
||||
<layout_panel height="255"
|
||||
width="200"
|
||||
left_delta="146"
|
||||
top="0"
|
||||
|
|
@ -56,7 +56,7 @@
|
|||
length="1"
|
||||
follows="left|top|right|bottom"
|
||||
font="SansSerif"
|
||||
height="185"
|
||||
height="205"
|
||||
layout="topleft"
|
||||
name="chat_history"
|
||||
parse_highlights="true"
|
||||
|
|
|
|||
|
|
@ -323,15 +323,6 @@
|
|||
left="40"
|
||||
name="server_lag_cause"
|
||||
right="-32" />
|
||||
<!--button
|
||||
bottom="145"
|
||||
follows="left|top"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
name="server_help"
|
||||
right="-10"
|
||||
width="18" /-->
|
||||
<button
|
||||
follows="left|top"
|
||||
height="20"
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater
|
||||
legacy_header_height="18"
|
||||
height="400"
|
||||
height="430"
|
||||
layout="topleft"
|
||||
name="land holdings floater"
|
||||
help_topic="land_holdings_floater"
|
||||
title="My Land"
|
||||
width="280">
|
||||
title="MY LAND"
|
||||
width="600">
|
||||
<floater.string
|
||||
name="area_string">
|
||||
[AREA] m²
|
||||
|
|
@ -15,81 +15,82 @@
|
|||
draw_heading="true"
|
||||
height="170"
|
||||
layout="topleft"
|
||||
left="8"
|
||||
left="10"
|
||||
name="parcel list"
|
||||
top="24"
|
||||
width="270">
|
||||
top="28"
|
||||
width="580">
|
||||
<scroll_list.columns
|
||||
label="Parcel"
|
||||
name="name"
|
||||
width="69" />
|
||||
width="167" />
|
||||
<scroll_list.columns
|
||||
label="Region"
|
||||
name="location"
|
||||
width="74" />
|
||||
width="180" />
|
||||
<scroll_list.columns
|
||||
label="Type"
|
||||
name="type"
|
||||
width="55" />
|
||||
width="145" />
|
||||
<scroll_list.columns
|
||||
label="Area"
|
||||
name="area"
|
||||
width="10" />
|
||||
width="88" />
|
||||
<scroll_list.columns
|
||||
label=""
|
||||
name="hidden"
|
||||
width="-1" />
|
||||
</scroll_list>
|
||||
<button
|
||||
height="20"
|
||||
font="SansSerifSmall"
|
||||
height="23"
|
||||
font="SansSerifBold"
|
||||
label="Teleport"
|
||||
label_selected="Teleport"
|
||||
layout="topleft"
|
||||
left_delta="4"
|
||||
top="208"
|
||||
left="10"
|
||||
name="Teleport"
|
||||
tool_tip="Teleport to the center of this land."
|
||||
top_pad="4"
|
||||
width="100" />
|
||||
width="80" />
|
||||
<button
|
||||
height="20"
|
||||
font="SansSerifSmall"
|
||||
height="23"
|
||||
font="SansSerifBold"
|
||||
label="Map"
|
||||
label_selected="Map"
|
||||
layout="topleft"
|
||||
left_pad="4"
|
||||
top="208"
|
||||
left="95"
|
||||
name="Show on Map"
|
||||
tool_tip="Show this land on the world map"
|
||||
top_delta="0"
|
||||
width="100" />
|
||||
width="80" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="12"
|
||||
top="251"
|
||||
left="10"
|
||||
name="contrib_label"
|
||||
top="222"
|
||||
width="480">
|
||||
height="16"
|
||||
width="580">
|
||||
Contributions to your groups:
|
||||
</text>
|
||||
<scroll_list
|
||||
draw_heading="true"
|
||||
height="75"
|
||||
layout="topleft"
|
||||
left_delta="-4"
|
||||
name="grant list"
|
||||
top_pad="4"
|
||||
width="270">
|
||||
top="271"
|
||||
left="10"
|
||||
width="580">
|
||||
<scroll_list.columns
|
||||
label="Group"
|
||||
name="group"
|
||||
width="125" />
|
||||
width="290"
|
||||
left_pad="10" />
|
||||
<scroll_list.columns
|
||||
label="Area"
|
||||
name="area"
|
||||
width="125" />
|
||||
width="290" />
|
||||
</scroll_list>
|
||||
<text
|
||||
type="string"
|
||||
|
|
@ -97,12 +98,11 @@
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_delta="4"
|
||||
name="allowed_label"
|
||||
top_pad="4"
|
||||
width="150">
|
||||
Allowed land holdings at
|
||||
current payment plan:
|
||||
top="366"
|
||||
left="10"
|
||||
width="290">
|
||||
Allowed land holdings at current payment plan:
|
||||
</text>
|
||||
<text
|
||||
type="string"
|
||||
|
|
@ -110,10 +110,10 @@ current payment plan:
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
name="allowed_text"
|
||||
top_delta="10"
|
||||
width="132">
|
||||
top="366"
|
||||
left="305"
|
||||
width="290">
|
||||
[AREA] m²
|
||||
</text>
|
||||
<text
|
||||
|
|
@ -122,10 +122,10 @@ current payment plan:
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="12"
|
||||
top="386"
|
||||
left="10"
|
||||
name="current_label"
|
||||
top_pad="5"
|
||||
width="150">
|
||||
width="290">
|
||||
Current land holdings:
|
||||
</text>
|
||||
<text
|
||||
|
|
@ -134,10 +134,10 @@ current payment plan:
|
|||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
top="386"
|
||||
left="305"
|
||||
name="current_text"
|
||||
top_delta="0"
|
||||
width="132">
|
||||
width="290">
|
||||
[AREA] m²
|
||||
</text>
|
||||
<text
|
||||
|
|
@ -147,12 +147,11 @@ current payment plan:
|
|||
font="SansSerifBold"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="12"
|
||||
top="406"
|
||||
left="10"
|
||||
name="available_label"
|
||||
top_pad="5"
|
||||
width="150">
|
||||
Available for land
|
||||
purchases:
|
||||
width="290">
|
||||
Available for land purchases:
|
||||
</text>
|
||||
<text
|
||||
type="string"
|
||||
|
|
@ -161,10 +160,10 @@ purchases:
|
|||
font="SansSerifBold"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
name="available_text"
|
||||
top_delta="5"
|
||||
width="140">
|
||||
top="406"
|
||||
left="305"
|
||||
width="290">
|
||||
[AREA] m²
|
||||
</text>
|
||||
</floater>
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
help_topic="nearby_chat"
|
||||
save_rect="true"
|
||||
title="Nearby Chat"
|
||||
save_dock_state="true"
|
||||
save_visibility="true"
|
||||
single_instance="true"
|
||||
width="320">
|
||||
|
|
|
|||
|
|
@ -17,20 +17,6 @@
|
|||
name="permissions"
|
||||
top="20"
|
||||
width="315">
|
||||
<button
|
||||
follows="left"
|
||||
height="18"
|
||||
label="?"
|
||||
label_selected="?"
|
||||
layout="topleft"
|
||||
left="260"
|
||||
name="help"
|
||||
top="7"
|
||||
width="22">
|
||||
<button.commit_callback
|
||||
function="Notification.Show"
|
||||
parameter="ClickUploadHelpPermissions" />
|
||||
</button>
|
||||
<check_box
|
||||
control_name="ShareWithGroup"
|
||||
height="16"
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@
|
|||
left="4"
|
||||
max_length="65536"
|
||||
name="Notecard Editor"
|
||||
allow_html="true"
|
||||
allow_html="false"
|
||||
handle_edit_keys_directly="true"
|
||||
tab_group="1"
|
||||
top="46"
|
||||
|
|
|
|||
|
|
@ -2868,15 +2868,6 @@
|
|||
tool_tip="Colorize the parcels according to the type of owner: Green = Your land Aqua = Your group's land Red = Owned by others Yellow = For sale Purple = For auction Grey = Public"
|
||||
top_pad="8"
|
||||
width="205" />
|
||||
<!--TODO: HOOK UP TO HELP VIEWER-->
|
||||
<!-- <button
|
||||
image_overlay="Arrow_Right_Off"
|
||||
picture_style="true"
|
||||
left_pad="5"
|
||||
name="button show owners help"
|
||||
tool_tip="See an explanation of colors"
|
||||
width="26"
|
||||
height="22" />-->
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
|
|||
|
|
@ -95,16 +95,6 @@
|
|||
width="355">
|
||||
Water Fog Color
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WaterFogColorHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<color_swatch
|
||||
border_color="0.45098 0.517647 0.607843 1"
|
||||
can_apply_immediately="true"
|
||||
|
|
@ -130,16 +120,6 @@
|
|||
width="355">
|
||||
Fog Density Exponent
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WaterFogDensityHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WaterFogDensity"
|
||||
decimal_digits="1"
|
||||
|
|
@ -165,16 +145,6 @@
|
|||
width="355">
|
||||
Underwater Fog Modifier
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WaterUnderWaterFogModHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
decimal_digits="2"
|
||||
follows="left"
|
||||
|
|
@ -200,16 +170,6 @@
|
|||
width="355">
|
||||
Reflection Wavelet Scale
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WaterNormalScaleHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -298,16 +258,6 @@
|
|||
width="355">
|
||||
Fresnel Scale
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WaterFresnelScaleHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WaterFresnelScale"
|
||||
decimal_digits="2"
|
||||
|
|
@ -333,16 +283,6 @@
|
|||
width="355">
|
||||
Fresnel Offset
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WaterFresnelOffsetHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WaterFresnelOffset"
|
||||
decimal_digits="2"
|
||||
|
|
@ -368,16 +308,6 @@
|
|||
width="355">
|
||||
Refract Scale Above
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WaterScaleAboveHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WaterScaleAbove"
|
||||
decimal_digits="2"
|
||||
|
|
@ -403,16 +333,6 @@
|
|||
width="355">
|
||||
Refract Scale Below
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WaterScaleBelowHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WaterScaleBelow"
|
||||
decimal_digits="2"
|
||||
|
|
@ -438,16 +358,6 @@
|
|||
width="355">
|
||||
Blur Multiplier
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WaterBlurMultiplierHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WaterBlurMult"
|
||||
follows="left"
|
||||
|
|
@ -486,16 +396,6 @@
|
|||
width="355">
|
||||
Big Wave Direction
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="145"
|
||||
name="WaterWave1Help"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -563,16 +463,6 @@
|
|||
width="355">
|
||||
Little Wave Direction
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="145"
|
||||
name="WaterWave2Help"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -640,16 +530,6 @@
|
|||
width="355">
|
||||
Normal Map
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="125"
|
||||
name="WaterNormalMapHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<texture_picker
|
||||
height="143"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -104,16 +104,6 @@
|
|||
width="355">
|
||||
Blue Horizon
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLBlueHorizonHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -227,16 +217,6 @@
|
|||
width="355">
|
||||
Haze Horizon
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLHazeHorizonHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WLHazeHorizon"
|
||||
decimal_digits="2"
|
||||
|
|
@ -262,16 +242,6 @@
|
|||
width="355">
|
||||
Blue Density
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLBlueDensityHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -385,16 +355,6 @@
|
|||
width="355">
|
||||
Haze Density
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLHazeDensityHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WLHazeDensity"
|
||||
decimal_digits="2"
|
||||
|
|
@ -421,16 +381,6 @@
|
|||
width="355">
|
||||
Density Multiplier
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLDensityMultHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WLDensityMult"
|
||||
decimal_digits="2"
|
||||
|
|
@ -457,16 +407,6 @@
|
|||
width="355">
|
||||
Distance Multiplier
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLDistanceMultHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WLDistancMult"
|
||||
decimal_digits="1"
|
||||
|
|
@ -492,16 +432,6 @@
|
|||
width="355">
|
||||
Max Altitude
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLMaxAltitudeHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WLMaxAltitude"
|
||||
decimal_digits="0"
|
||||
|
|
@ -540,16 +470,6 @@
|
|||
width="355">
|
||||
Sun/Moon Color
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLSunlightColorHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -663,16 +583,6 @@
|
|||
width="355">
|
||||
Sun/Moon Position
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLTimeOfDayHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<icon
|
||||
height="20"
|
||||
image_name="icon_diurnal.tga"
|
||||
|
|
@ -705,16 +615,6 @@
|
|||
width="355">
|
||||
Ambient
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLAmbientHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -828,16 +728,6 @@
|
|||
width="355">
|
||||
East Angle
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLEastAngleHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WLEastAngle"
|
||||
decimal_digits="2"
|
||||
|
|
@ -863,16 +753,6 @@
|
|||
width="355">
|
||||
Sun Glow
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLSunGlowHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WLGlowB"
|
||||
decimal_digits="2"
|
||||
|
|
@ -915,16 +795,6 @@
|
|||
width="200">
|
||||
Scene Gamma
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLSceneGammaHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WLGamma"
|
||||
decimal_digits="2"
|
||||
|
|
@ -951,16 +821,6 @@
|
|||
width="355">
|
||||
Star Brightness
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLStarBrightnessHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WLStarAlpha"
|
||||
decimal_digits="2"
|
||||
|
|
@ -1000,16 +860,6 @@
|
|||
width="355">
|
||||
Cloud Color
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLCloudColorHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -1123,16 +973,6 @@
|
|||
width="355">
|
||||
Cloud XY/Density
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLCloudDensityHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -1221,16 +1061,6 @@
|
|||
width="355">
|
||||
Cloud Coverage
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLCloudCoverageHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WLCloudCoverage"
|
||||
decimal_digits="2"
|
||||
|
|
@ -1256,16 +1086,6 @@
|
|||
width="355">
|
||||
Cloud Scale
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLCloudScaleHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<slider
|
||||
control_name="WLCloudScale"
|
||||
decimal_digits="2"
|
||||
|
|
@ -1292,16 +1112,6 @@
|
|||
width="355">
|
||||
Cloud Detail (XY/Density)
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="150"
|
||||
name="WLCloudDetailHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -1390,16 +1200,6 @@
|
|||
width="355">
|
||||
Cloud Scroll X
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="125"
|
||||
name="WLCloudScrollXHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<check_box
|
||||
control_name="WLCloudLockX"
|
||||
follows="left"
|
||||
|
|
@ -1436,16 +1236,6 @@
|
|||
width="355">
|
||||
Cloud Scroll Y
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left_delta="125"
|
||||
name="WLCloudScrollYHelp"
|
||||
top_delta="-2"
|
||||
width="18" />
|
||||
<check_box
|
||||
control_name="WLCloudLockY"
|
||||
follows="left"
|
||||
|
|
@ -1479,16 +1269,6 @@
|
|||
name="DrawClassicClouds"
|
||||
top="104"
|
||||
width="200" />
|
||||
<button
|
||||
follows="left|top"
|
||||
font="SansSerifSmall"
|
||||
height="18"
|
||||
label="?"
|
||||
layout="topleft"
|
||||
left="608"
|
||||
name="WLClassicCloudsHelp"
|
||||
top="84"
|
||||
width="18" />
|
||||
</panel>
|
||||
</tab_container>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -73,6 +73,8 @@ L$123 to join
|
|||
name="group_icon"
|
||||
top="24"
|
||||
width="38" />
|
||||
<!-- Must be tab_stop="true" so something can hold focus even when the
|
||||
other buttons are disabled or invisible, otherwise inspector closes -->
|
||||
<button
|
||||
follows="top|left"
|
||||
height="18"
|
||||
|
|
@ -84,7 +86,7 @@ L$123 to join
|
|||
right="-8"
|
||||
top="35"
|
||||
left_delta="110"
|
||||
tab_stop="false"
|
||||
tab_stop="true"
|
||||
width="18"
|
||||
commit_callback.function="InspectGroup.ViewProfile" />
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -1,112 +1,112 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu
|
||||
create_jump_keys="true"
|
||||
layout="topleft"
|
||||
mouse_opaque="false"
|
||||
visible="false"
|
||||
name="Gear Menu">
|
||||
<menu_item_call
|
||||
label="View Profile"
|
||||
layout="topleft"
|
||||
enabled="true"
|
||||
name="view_profile">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.ViewProfile"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Add Friend"
|
||||
layout="topleft"
|
||||
name="add_friend">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.AddFriend"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="IM"
|
||||
layout="topleft"
|
||||
name="im">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.IM"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Call"
|
||||
layout="topleft"
|
||||
enabled="true"
|
||||
name="call">
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Teleport"
|
||||
layout="topleft"
|
||||
name="teleport">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.Teleport"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Invite to Group"
|
||||
layout="topleft"
|
||||
name="invite_to_group">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.InviteToGroup"/>
|
||||
</menu_item_call>
|
||||
<menu_item_separator layout="topleft" />
|
||||
<menu_item_call
|
||||
label="Block"
|
||||
layout="topleft"
|
||||
name="block">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.Block"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Report"
|
||||
layout="topleft"
|
||||
name="report">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.Report"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Freeze"
|
||||
name="freeze">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.Freeze"/>
|
||||
<menu_item_call.on_visible
|
||||
function="IsGodCustomerService"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Eject"
|
||||
name="eject">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.Eject"/>
|
||||
<menu_item_call.on_visible
|
||||
function="IsGodCustomerService"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Debug"
|
||||
name="debug">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.Debug"/>
|
||||
<menu_item_call.on_visible
|
||||
function="IsGodCustomerService"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Find On Map"
|
||||
layout="topleft"
|
||||
name="find_on_map">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.FindOnMap"/>
|
||||
<menu_item_call.on_visible
|
||||
function="InspectAvatar.VisibleFindOnMap"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Zoom In"
|
||||
layout="topleft"
|
||||
name="zoom_in">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.ZoomIn"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Pay"
|
||||
layout="topleft"
|
||||
name="pay">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.Pay"/>
|
||||
</menu_item_call>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu
|
||||
create_jump_keys="true"
|
||||
layout="topleft"
|
||||
mouse_opaque="false"
|
||||
visible="false"
|
||||
name="Gear Menu">
|
||||
<menu_item_call
|
||||
label="View Profile"
|
||||
layout="topleft"
|
||||
enabled="true"
|
||||
name="view_profile">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.ViewProfile"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Add Friend"
|
||||
layout="topleft"
|
||||
name="add_friend">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.AddFriend"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="IM"
|
||||
layout="topleft"
|
||||
name="im">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.IM"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Call"
|
||||
layout="topleft"
|
||||
enabled="true"
|
||||
name="call">
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Teleport"
|
||||
layout="topleft"
|
||||
name="teleport">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.Teleport"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Invite to Group"
|
||||
layout="topleft"
|
||||
name="invite_to_group">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.InviteToGroup"/>
|
||||
</menu_item_call>
|
||||
<menu_item_separator layout="topleft" />
|
||||
<menu_item_call
|
||||
label="Block"
|
||||
layout="topleft"
|
||||
name="block">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.Block"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Report"
|
||||
layout="topleft"
|
||||
name="report">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.Report"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Freeze"
|
||||
name="freeze">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.Freeze"/>
|
||||
<menu_item_call.on_visible
|
||||
function="InspectAvatar.VisibleFreezeEject"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Eject"
|
||||
name="eject">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.Eject"/>
|
||||
<menu_item_call.on_visible
|
||||
function="InspectAvatar.VisibleFreezeEject"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Debug"
|
||||
name="debug">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.Debug"/>
|
||||
<menu_item_call.on_visible
|
||||
function="IsGodCustomerService"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Find On Map"
|
||||
layout="topleft"
|
||||
name="find_on_map">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.FindOnMap"/>
|
||||
<menu_item_call.on_visible
|
||||
function="InspectAvatar.VisibleFindOnMap"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Zoom In"
|
||||
layout="topleft"
|
||||
name="zoom_in">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.ZoomIn"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Pay"
|
||||
layout="topleft"
|
||||
name="pay">
|
||||
<menu_item_call.on_click
|
||||
function="InspectAvatar.Pay"/>
|
||||
</menu_item_call>
|
||||
</menu>
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<context_menu
|
||||
layout="topleft"
|
||||
name="Url Popup">
|
||||
<menu_item_call
|
||||
label="Show on Map"
|
||||
layout="topleft"
|
||||
name="show_on_map">
|
||||
<menu_item_call.on_click
|
||||
function="Url.Execute" />
|
||||
</menu_item_call>
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
<menu_item_call
|
||||
label="Teleport to Location"
|
||||
layout="topleft"
|
||||
name="teleport_to_location">
|
||||
<menu_item_call.on_click
|
||||
function="Url.Teleport" />
|
||||
</menu_item_call>
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
<menu_item_call
|
||||
label="Copy SLurl to clipboard"
|
||||
layout="topleft"
|
||||
name="url_copy">
|
||||
<menu_item_call.on_click
|
||||
function="Url.CopyUrl" />
|
||||
</menu_item_call>
|
||||
</context_menu>
|
||||
|
|
@ -11,6 +11,13 @@
|
|||
</menu_item_call>
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
<menu_item_call
|
||||
label="Show on Map"
|
||||
layout="topleft"
|
||||
name="show_on_map">
|
||||
<menu_item_call.on_click
|
||||
function="Url.ShowOnMap" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Teleport to Object Location"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -9,6 +9,15 @@
|
|||
<menu_item_call.on_click
|
||||
function="Url.Execute" />
|
||||
</menu_item_call>
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
<menu_item_call
|
||||
label="Show on Map"
|
||||
layout="topleft"
|
||||
name="show_on_map">
|
||||
<menu_item_call.on_click
|
||||
function="Url.ShowOnMap" />
|
||||
</menu_item_call>
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
<menu_item_call
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue