Automated merge up from viewer-development
commit
ee0055f5af
1
.hgtags
1
.hgtags
|
|
@ -42,3 +42,4 @@ dbc206fc61d89ff4cfe15aade0bf0c7bc7fee1c9 2.4.0-start
|
|||
dc6483491b4af559060bccaef8e9045a303212dd 2.4.0-beta1
|
||||
dc6483491b4af559060bccaef8e9045a303212dd 2.4.0-beta1
|
||||
3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e 2.4.0-beta1
|
||||
25bd6007e3d2fc15db9326ed4b18a24a5969a46a 2.4.0-beta2
|
||||
|
|
|
|||
|
|
@ -46,9 +46,6 @@ viewer-beta.viewer_channel = "Second Life Beta Viewer"
|
|||
viewer-beta.login_channel = "Second Life Beta Viewer"
|
||||
viewer-beta.build_debug_release_separately = true
|
||||
viewer-beta.build_viewer_update_version_manager = true
|
||||
# Settings to test new code ticket service
|
||||
viewer-beta.codeticket_server_url = "http://pdp75.lindenlab.com:8000/codeticket/linden/"
|
||||
viewer-beta.codeticket_add_context = true
|
||||
|
||||
# ========================================
|
||||
# Viewer Release
|
||||
|
|
|
|||
|
|
@ -608,6 +608,7 @@ Sammy Frederix
|
|||
VWR-6186
|
||||
Satomi Ahn
|
||||
STORM-501
|
||||
STORM-229
|
||||
Scrippy Scofield
|
||||
VWR-3748
|
||||
Seg Baphomet
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# -*- cmake -*-
|
||||
include(Prebuilt)
|
||||
|
||||
set(PULSEAUDIO ON CACHE BOOL "Build with PulseAudio support, if available.")
|
||||
set(PULSEAUDIO OFF CACHE BOOL "Build with PulseAudio support, if available.")
|
||||
|
||||
if (PULSEAUDIO)
|
||||
if (STANDALONE)
|
||||
|
|
|
|||
|
|
@ -265,14 +265,7 @@ int LLProcessLauncher::launch(void)
|
|||
delete[] fake_argv;
|
||||
|
||||
mProcessID = id;
|
||||
|
||||
// At this point, the child process will have been created (since that's how vfork works -- the child borrowed our execution context until it forked)
|
||||
// If the process doesn't exist at this point, the exec failed.
|
||||
if(!isRunning())
|
||||
{
|
||||
result = -1;
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -277,6 +277,8 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :
|
|||
mHPad += UI_TEXTEDITOR_LINE_NUMBER_MARGIN;
|
||||
updateRects();
|
||||
}
|
||||
|
||||
mParseOnTheFly = TRUE;
|
||||
}
|
||||
|
||||
void LLTextEditor::initFromParams( const LLTextEditor::Params& p)
|
||||
|
|
@ -324,8 +326,10 @@ void LLTextEditor::setText(const LLStringExplicit &utf8str, const LLStyle::Param
|
|||
|
||||
blockUndo();
|
||||
deselect();
|
||||
|
||||
|
||||
mParseOnTheFly = FALSE;
|
||||
LLTextBase::setText(utf8str, input_params);
|
||||
mParseOnTheFly = TRUE;
|
||||
|
||||
resetDirty();
|
||||
}
|
||||
|
|
@ -1367,6 +1371,7 @@ void LLTextEditor::pastePrimary()
|
|||
// paste from primary (itsprimary==true) or clipboard (itsprimary==false)
|
||||
void LLTextEditor::pasteHelper(bool is_primary)
|
||||
{
|
||||
mParseOnTheFly = FALSE;
|
||||
bool can_paste_it;
|
||||
if (is_primary)
|
||||
{
|
||||
|
|
@ -1450,6 +1455,7 @@ void LLTextEditor::pasteHelper(bool is_primary)
|
|||
deselect();
|
||||
|
||||
onKeyStroke();
|
||||
mParseOnTheFly = TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -2385,7 +2391,7 @@ void LLTextEditor::loadKeywords(const std::string& filename,
|
|||
|
||||
void LLTextEditor::updateSegments()
|
||||
{
|
||||
if (mReflowIndex < S32_MAX && mKeywords.isLoaded())
|
||||
if (mReflowIndex < S32_MAX && mKeywords.isLoaded() && mParseOnTheFly)
|
||||
{
|
||||
LLFastTimer ft(FTM_SYNTAX_HIGHLIGHTING);
|
||||
// HACK: No non-ascii keywords for now
|
||||
|
|
|
|||
|
|
@ -315,6 +315,7 @@ private:
|
|||
|
||||
BOOL mAllowEmbeddedItems;
|
||||
bool mShowContextMenu;
|
||||
bool mParseOnTheFly;
|
||||
|
||||
LLUUID mSourceID;
|
||||
|
||||
|
|
|
|||
|
|
@ -366,7 +366,9 @@ void LLFloaterPostcard::sendPostcard()
|
|||
{
|
||||
gAssetStorage->storeAssetData(mTransactionID, LLAssetType::AT_IMAGE_JPEG, &uploadCallback, (void *)this, FALSE);
|
||||
}
|
||||
|
||||
|
||||
// give user feedback of the event
|
||||
gViewerWindow->playSnapshotAnimAndSound();
|
||||
LLUploadDialog::modalUploadDialog(getString("upload_message"));
|
||||
|
||||
// don't destroy the window until the upload is done
|
||||
|
|
|
|||
|
|
@ -908,8 +908,6 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
|
|||
previewp->mPosTakenGlobal = gAgentCamera.getCameraPositionGlobal();
|
||||
previewp->mShineCountdown = 4; // wait a few frames to avoid animation glitch due to readback this frame
|
||||
}
|
||||
|
||||
gViewerWindow->playSnapshotAnimAndSound();
|
||||
}
|
||||
previewp->getWindow()->decBusyCount();
|
||||
// only show fullscreen preview when in freeze frame mode
|
||||
|
|
@ -1006,6 +1004,7 @@ void LLSnapshotLivePreview::saveTexture()
|
|||
LLFloaterPerms::getEveryonePerms(),
|
||||
"Snapshot : " + pos_string,
|
||||
callback, expected_upload_cost, userdata);
|
||||
gViewerWindow->playSnapshotAnimAndSound();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1027,6 +1026,10 @@ BOOL LLSnapshotLivePreview::saveLocal()
|
|||
mDataSize = 0;
|
||||
updateSnapshot(FALSE, FALSE);
|
||||
|
||||
if(success)
|
||||
{
|
||||
gViewerWindow->playSnapshotAnimAndSound();
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
|
|
@ -1046,6 +1049,8 @@ void LLSnapshotLivePreview::saveWeb()
|
|||
|
||||
LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(gAgentCamera.getCameraPositionGlobal(),
|
||||
boost::bind(&LLSnapshotLivePreview::regionNameCallback, this, jpg, metadata, _1, _2, _3, _4));
|
||||
|
||||
gViewerWindow->playSnapshotAnimAndSound();
|
||||
}
|
||||
|
||||
void LLSnapshotLivePreview::regionNameCallback(LLImageJPEG* snapshot, LLSD& metadata, const std::string& name, S32 x, S32 y, S32 z)
|
||||
|
|
|
|||
|
|
@ -104,6 +104,7 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_
|
|||
bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*);
|
||||
bool confirm_attachment_rez(const LLSD& notification, const LLSD& response);
|
||||
void teleport_via_landmark(const LLUUID& asset_id);
|
||||
static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit);
|
||||
|
||||
// +=================================================+
|
||||
// | LLInvFVBridge |
|
||||
|
|
@ -2352,6 +2353,10 @@ void LLFolderBridge::pasteFromClipboard()
|
|||
LLInventoryModel* model = getInventoryModel();
|
||||
if(model && isClipboardPasteable())
|
||||
{
|
||||
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
|
||||
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
|
||||
const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
|
||||
|
||||
const LLUUID parent_id(mUUID);
|
||||
|
||||
LLDynamicArray<LLUUID> objects;
|
||||
|
|
@ -2364,7 +2369,14 @@ void LLFolderBridge::pasteFromClipboard()
|
|||
LLInventoryItem *item = model->getItem(item_id);
|
||||
if (item)
|
||||
{
|
||||
if(LLInventoryClipboard::instance().isCutMode())
|
||||
if (move_is_into_current_outfit || move_is_into_outfit)
|
||||
{
|
||||
if (can_move_to_outfit(item, move_is_into_current_outfit))
|
||||
{
|
||||
dropToOutfit(item, move_is_into_current_outfit);
|
||||
}
|
||||
}
|
||||
else if(LLInventoryClipboard::instance().isCutMode())
|
||||
{
|
||||
// move_inventory_item() is not enough,
|
||||
//we have to update inventory locally too
|
||||
|
|
@ -2392,9 +2404,13 @@ void LLFolderBridge::pasteFromClipboard()
|
|||
|
||||
void LLFolderBridge::pasteLinkFromClipboard()
|
||||
{
|
||||
const LLInventoryModel* model = getInventoryModel();
|
||||
LLInventoryModel* model = getInventoryModel();
|
||||
if(model)
|
||||
{
|
||||
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
|
||||
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
|
||||
const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
|
||||
|
||||
const LLUUID parent_id(mUUID);
|
||||
|
||||
LLDynamicArray<LLUUID> objects;
|
||||
|
|
@ -2404,7 +2420,15 @@ void LLFolderBridge::pasteLinkFromClipboard()
|
|||
++iter)
|
||||
{
|
||||
const LLUUID &object_id = (*iter);
|
||||
if (LLInventoryCategory *cat = model->getCategory(object_id))
|
||||
if (move_is_into_current_outfit || move_is_into_outfit)
|
||||
{
|
||||
LLInventoryItem *item = model->getItem(object_id);
|
||||
if (item && can_move_to_outfit(item, move_is_into_current_outfit))
|
||||
{
|
||||
dropToOutfit(item, move_is_into_current_outfit);
|
||||
}
|
||||
}
|
||||
else if (LLInventoryCategory *cat = model->getCategory(object_id))
|
||||
{
|
||||
const std::string empty_description = "";
|
||||
link_inventory_item(
|
||||
|
|
|
|||
|
|
@ -114,11 +114,109 @@ public:
|
|||
LLAgentHandler gAgentHandler;
|
||||
|
||||
|
||||
//-- LLPanelProfile::ChildStack begins ----------------------------------------
|
||||
LLPanelProfile::ChildStack::ChildStack()
|
||||
: mParent(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
void LLPanelProfile::ChildStack::setParent(LLPanel* parent)
|
||||
{
|
||||
llassert_always(parent != NULL);
|
||||
mParent = parent;
|
||||
}
|
||||
|
||||
/// Save current parent's child views and remove them from the child list.
|
||||
bool LLPanelProfile::ChildStack::push()
|
||||
{
|
||||
view_list_t vlist = *mParent->getChildList();
|
||||
|
||||
for (view_list_t::const_iterator it = vlist.begin(); it != vlist.end(); ++it)
|
||||
{
|
||||
LLView* viewp = *it;
|
||||
mParent->removeChild(viewp);
|
||||
}
|
||||
|
||||
mStack.push_back(vlist);
|
||||
dump();
|
||||
return true;
|
||||
}
|
||||
|
||||
/// Restore saved children (adding them back to the child list).
|
||||
bool LLPanelProfile::ChildStack::pop()
|
||||
{
|
||||
if (mStack.size() == 0)
|
||||
{
|
||||
llwarns << "Empty stack" << llendl;
|
||||
llassert(mStack.size() == 0);
|
||||
return false;
|
||||
}
|
||||
|
||||
view_list_t& top = mStack.back();
|
||||
for (view_list_t::const_iterator it = top.begin(); it != top.end(); ++it)
|
||||
{
|
||||
LLView* viewp = *it;
|
||||
mParent->addChild(viewp);
|
||||
}
|
||||
|
||||
mStack.pop_back();
|
||||
dump();
|
||||
return true;
|
||||
}
|
||||
|
||||
/// Temporarily add all saved children back.
|
||||
void LLPanelProfile::ChildStack::preParentReshape()
|
||||
{
|
||||
mSavedStack = mStack;
|
||||
while(mStack.size() > 0)
|
||||
{
|
||||
pop();
|
||||
}
|
||||
}
|
||||
|
||||
/// Add the temporarily saved children back.
|
||||
void LLPanelProfile::ChildStack::postParentReshape()
|
||||
{
|
||||
mStack = mSavedStack;
|
||||
mSavedStack = stack_t();
|
||||
|
||||
for (stack_t::const_iterator stack_it = mStack.begin(); stack_it != mStack.end(); ++stack_it)
|
||||
{
|
||||
const view_list_t& vlist = (*stack_it);
|
||||
for (view_list_t::const_iterator list_it = vlist.begin(); list_it != vlist.end(); ++list_it)
|
||||
{
|
||||
LLView* viewp = *list_it;
|
||||
lldebugs << "removing " << viewp->getName() << llendl;
|
||||
mParent->removeChild(viewp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfile::ChildStack::dump()
|
||||
{
|
||||
unsigned lvl = 0;
|
||||
lldebugs << "child stack dump:" << llendl;
|
||||
for (stack_t::const_iterator stack_it = mStack.begin(); stack_it != mStack.end(); ++stack_it, ++lvl)
|
||||
{
|
||||
std::ostringstream dbg_line;
|
||||
dbg_line << "lvl #" << lvl << ":";
|
||||
const view_list_t& vlist = (*stack_it);
|
||||
for (view_list_t::const_iterator list_it = vlist.begin(); list_it != vlist.end(); ++list_it)
|
||||
{
|
||||
dbg_line << " " << (*list_it)->getName();
|
||||
}
|
||||
lldebugs << dbg_line.str() << llendl;
|
||||
}
|
||||
}
|
||||
|
||||
//-- LLPanelProfile::ChildStack ends ------------------------------------------
|
||||
|
||||
LLPanelProfile::LLPanelProfile()
|
||||
: LLPanel()
|
||||
, mTabCtrl(NULL)
|
||||
, mAvatarId(LLUUID::null)
|
||||
{
|
||||
mChildStack.setParent(this);
|
||||
}
|
||||
|
||||
BOOL LLPanelProfile::postBuild()
|
||||
|
|
@ -136,6 +234,15 @@ BOOL LLPanelProfile::postBuild()
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLPanelProfile::reshape(S32 width, S32 height, BOOL called_from_parent)
|
||||
{
|
||||
// Temporarily add saved children back and reshape them.
|
||||
mChildStack.preParentReshape();
|
||||
LLPanel::reshape(width, height, called_from_parent);
|
||||
mChildStack.postParentReshape();
|
||||
}
|
||||
|
||||
void LLPanelProfile::onOpen(const LLSD& key)
|
||||
{
|
||||
// open the desired panel
|
||||
|
|
@ -177,7 +284,6 @@ void LLPanelProfile::onOpen(const LLSD& key)
|
|||
}
|
||||
}
|
||||
|
||||
//*TODO redo panel toggling
|
||||
void LLPanelProfile::togglePanel(LLPanel* panel, const LLSD& key)
|
||||
{
|
||||
// TRUE - we need to open/expand "panel"
|
||||
|
|
@ -204,21 +310,10 @@ void LLPanelProfile::onTabSelected(const LLSD& param)
|
|||
}
|
||||
}
|
||||
|
||||
void LLPanelProfile::setAllChildrenVisible(BOOL visible)
|
||||
{
|
||||
const child_list_t* child_list = getChildList();
|
||||
child_list_const_iter_t child_it = child_list->begin();
|
||||
for (; child_it != child_list->end(); ++child_it)
|
||||
{
|
||||
LLView* viewp = *child_it;
|
||||
viewp->setVisible(visible);
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelProfile::openPanel(LLPanel* panel, const LLSD& params)
|
||||
{
|
||||
// Hide currently visible panel (STORM-690).
|
||||
setAllChildrenVisible(FALSE);
|
||||
mChildStack.push();
|
||||
|
||||
// Add the panel or bring it to front.
|
||||
if (panel->getParent() != this)
|
||||
|
|
@ -231,7 +326,7 @@ void LLPanelProfile::openPanel(LLPanel* panel, const LLSD& params)
|
|||
}
|
||||
|
||||
panel->setVisible(TRUE);
|
||||
|
||||
panel->setFocus(TRUE); // prevent losing focus by the floater
|
||||
panel->onOpen(params);
|
||||
|
||||
LLRect new_rect = getRect();
|
||||
|
|
@ -249,15 +344,17 @@ void LLPanelProfile::closePanel(LLPanel* panel)
|
|||
removeChild(panel);
|
||||
|
||||
// Make the underlying panel visible.
|
||||
mChildStack.pop();
|
||||
|
||||
// Prevent losing focus by the floater
|
||||
const child_list_t* child_list = getChildList();
|
||||
if (child_list->size() > 0)
|
||||
{
|
||||
child_list->front()->setVisible(TRUE);
|
||||
child_list->front()->setFocus(TRUE); // prevent losing focus by the floater
|
||||
child_list->front()->setFocus(TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
llwarns << "No underlying panel to make visible." << llendl;
|
||||
llwarns << "No underlying panel to focus." << llendl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ class LLPanelProfile : public LLPanel
|
|||
|
||||
public:
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
virtual void togglePanel(LLPanel*, const LLSD& key = LLSD());
|
||||
|
|
@ -58,8 +58,6 @@ protected:
|
|||
|
||||
virtual void onTabSelected(const LLSD& param);
|
||||
|
||||
virtual void setAllChildrenVisible(BOOL visible);
|
||||
|
||||
LLTabContainer* getTabCtrl() { return mTabCtrl; }
|
||||
|
||||
const LLUUID& getAvatarId() { return mAvatarId; }
|
||||
|
|
@ -72,8 +70,34 @@ protected:
|
|||
|
||||
private:
|
||||
|
||||
//-- ChildStack begins ----------------------------------------------------
|
||||
class ChildStack
|
||||
{
|
||||
LOG_CLASS(LLPanelProfile::ChildStack);
|
||||
public:
|
||||
ChildStack();
|
||||
void setParent(LLPanel* parent);
|
||||
|
||||
bool push();
|
||||
bool pop();
|
||||
void preParentReshape();
|
||||
void postParentReshape();
|
||||
|
||||
private:
|
||||
void dump();
|
||||
|
||||
typedef LLView::child_list_t view_list_t;
|
||||
typedef std::list<view_list_t> stack_t;
|
||||
|
||||
stack_t mStack;
|
||||
stack_t mSavedStack;
|
||||
LLPanel* mParent;
|
||||
};
|
||||
//-- ChildStack ends ------------------------------------------------------
|
||||
|
||||
LLTabContainer* mTabCtrl;
|
||||
profile_tabs_t mTabContainer;
|
||||
ChildStack mChildStack;
|
||||
LLUUID mAvatarId;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
#include "llsidetray.h"
|
||||
#include "llslurl.h"
|
||||
#include "llstatusbar.h"
|
||||
#include "lltrans.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewerinventory.h"
|
||||
#include "llviewermenu.h"
|
||||
|
|
@ -102,6 +103,13 @@ void LLPanelTopInfoBar::initParcelIcons()
|
|||
mParcelIcon[SCRIPTS_ICON] = getChild<LLIconCtrl>("scripts_icon");
|
||||
mParcelIcon[DAMAGE_ICON] = getChild<LLIconCtrl>("damage_icon");
|
||||
|
||||
mParcelIcon[VOICE_ICON]->setToolTip(LLTrans::getString("LocationCtrlVoiceTooltip"));
|
||||
mParcelIcon[FLY_ICON]->setToolTip(LLTrans::getString("LocationCtrlFlyTooltip"));
|
||||
mParcelIcon[PUSH_ICON]->setToolTip(LLTrans::getString("LocationCtrlPushTooltip"));
|
||||
mParcelIcon[BUILD_ICON]->setToolTip(LLTrans::getString("LocationCtrlBuildTooltip"));
|
||||
mParcelIcon[SCRIPTS_ICON]->setToolTip(LLTrans::getString("LocationCtrlScriptsTooltip"));
|
||||
mParcelIcon[DAMAGE_ICON]->setToolTip(LLTrans::getString("LocationCtrlDamageTooltip"));
|
||||
|
||||
mParcelIcon[VOICE_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, VOICE_ICON));
|
||||
mParcelIcon[FLY_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, FLY_ICON));
|
||||
mParcelIcon[PUSH_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, PUSH_ICON));
|
||||
|
|
@ -129,6 +137,7 @@ BOOL LLPanelTopInfoBar::postBuild()
|
|||
{
|
||||
mInfoBtn = getChild<LLButton>("place_info_btn");
|
||||
mInfoBtn->setClickedCallback(boost::bind(&LLPanelTopInfoBar::onInfoButtonClicked, this));
|
||||
mInfoBtn->setToolTip(LLTrans::getString("LocationCtrlInfoBtnTooltip"));
|
||||
|
||||
mParcelInfoText = getChild<LLTextBox>("parcel_info_text");
|
||||
mDamageText = getChild<LLTextBox>("damage_text");
|
||||
|
|
|
|||
|
|
@ -454,12 +454,13 @@ LLMultiPreview::LLMultiPreview()
|
|||
{
|
||||
// start with a rect in the top-left corner ; will get resized
|
||||
LLRect rect;
|
||||
rect.setLeftTopAndSize(0, gViewerWindow->getWindowHeightScaled(), 200, 200);
|
||||
rect.setLeftTopAndSize(0, gViewerWindow->getWindowHeightScaled(), 200, 400);
|
||||
setRect(rect);
|
||||
}
|
||||
setTitle(LLTrans::getString("MultiPreviewTitle"));
|
||||
buildTabContainer();
|
||||
setCanResize(TRUE);
|
||||
mAutoResize = FALSE;
|
||||
}
|
||||
|
||||
void LLMultiPreview::onOpen(const LLSD& key)
|
||||
|
|
|
|||
|
|
@ -2034,7 +2034,17 @@ bool LLLiveLSLEditor::writeToFile(const std::string& filename)
|
|||
|
||||
std::string LLLiveLSLEditor::getTmpFileName()
|
||||
{
|
||||
return std::string(LLFile::tmpdir()) + "sl_script_" + mObjectUUID.asString() + ".lsl";
|
||||
// Take script inventory item id (within the object inventory)
|
||||
// to consideration so that it's possible to edit multiple scripts
|
||||
// in the same object inventory simultaneously (STORM-781).
|
||||
std::string script_id = mObjectUUID.asString() + "_" + mItemUUID.asString();
|
||||
|
||||
// Use MD5 sum to make the file name shorter and not exceed maximum path length.
|
||||
char script_id_hash_str[33]; /* Flawfinder: ignore */
|
||||
LLMD5 script_id_hash((const U8 *)script_id.c_str());
|
||||
script_id_hash.hex_digest(script_id_hash_str);
|
||||
|
||||
return std::string(LLFile::tmpdir()) + "sl_script_" + script_id_hash_str + ".lsl";
|
||||
}
|
||||
|
||||
void LLLiveLSLEditor::uploadAssetViaCaps(const std::string& url,
|
||||
|
|
|
|||
|
|
@ -318,7 +318,7 @@ void LLPreviewTexture::reshape(S32 width, S32 height, BOOL called_from_parent)
|
|||
}
|
||||
}
|
||||
|
||||
mClientRect.setLeftTopAndSize(client_rect.getCenterX() - (client_width / 2), client_rect.getCenterY() + (client_height / 2), client_width, client_height);
|
||||
mClientRect.setLeftTopAndSize(client_rect.getCenterX() - (client_width / 2), client_rect.getCenterY() + (client_height / 2), client_width, client_height);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -400,7 +400,6 @@ void LLPreviewTexture::updateDimensions()
|
|||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
mUpdateDimensions = FALSE;
|
||||
|
||||
|
|
@ -408,80 +407,12 @@ void LLPreviewTexture::updateDimensions()
|
|||
getChild<LLUICtrl>("dimensions")->setTextArg("[HEIGHT]", llformat("%d", mImage->getFullHeight()));
|
||||
|
||||
|
||||
LLRect dim_rect(getChildView("dimensions")->getRect());
|
||||
|
||||
S32 horiz_pad = 2 * (LLPANEL_BORDER_WIDTH + PREVIEW_PAD) + PREVIEW_RESIZE_HANDLE_SIZE;
|
||||
|
||||
// add space for dimensions and aspect ratio
|
||||
S32 info_height = dim_rect.mTop + CLIENT_RECT_VPAD;
|
||||
|
||||
S32 screen_width = gFloaterView->getSnapRect().getWidth();
|
||||
S32 screen_height = gFloaterView->getSnapRect().getHeight();
|
||||
|
||||
S32 max_image_width = screen_width - 2*horiz_pad;
|
||||
S32 max_image_height = screen_height - (PREVIEW_HEADER_SIZE + CLIENT_RECT_VPAD)
|
||||
- (PREVIEW_BORDER + CLIENT_RECT_VPAD + info_height);
|
||||
|
||||
S32 client_width = llmin(max_image_width,mImage->getFullWidth());
|
||||
S32 client_height = llmin(max_image_height,mImage->getFullHeight());
|
||||
|
||||
if (mAspectRatio > 0.f)
|
||||
{
|
||||
if(mAspectRatio > 1.f)
|
||||
{
|
||||
client_height = llceil((F32)client_width / mAspectRatio);
|
||||
if(client_height > max_image_height)
|
||||
{
|
||||
client_height = max_image_height;
|
||||
client_width = llceil((F32)client_height * mAspectRatio);
|
||||
}
|
||||
}
|
||||
else//mAspectRatio < 1.f
|
||||
{
|
||||
client_width = llceil((F32)client_height * mAspectRatio);
|
||||
if(client_width > max_image_width)
|
||||
{
|
||||
client_width = max_image_width;
|
||||
client_height = llceil((F32)client_width / mAspectRatio);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if(client_height > max_image_height)
|
||||
{
|
||||
F32 ratio = (F32)max_image_height/client_height;
|
||||
client_height = max_image_height;
|
||||
client_width = llceil((F32)client_height * ratio);
|
||||
}
|
||||
|
||||
if(client_width > max_image_width)
|
||||
{
|
||||
F32 ratio = (F32)max_image_width/client_width;
|
||||
client_width = max_image_width;
|
||||
client_height = llceil((F32)client_width * ratio);
|
||||
}
|
||||
}
|
||||
|
||||
//now back to whole floater
|
||||
S32 floater_width = llmax(getMinWidth(),client_width + 2*horiz_pad);
|
||||
S32 floater_height = llmax(getMinHeight(),client_height + (PREVIEW_HEADER_SIZE + CLIENT_RECT_VPAD)
|
||||
+ (PREVIEW_BORDER + CLIENT_RECT_VPAD + info_height));
|
||||
|
||||
//reshape floater
|
||||
reshape( floater_width, floater_height );
|
||||
reshape(getRect().getWidth(), getRect().getHeight());
|
||||
|
||||
gFloaterView->adjustToFitScreen(this, FALSE);
|
||||
|
||||
//setup image rect...
|
||||
LLRect client_rect(horiz_pad, getRect().getHeight(), getRect().getWidth() - horiz_pad, 0);
|
||||
client_rect.mTop -= (PREVIEW_HEADER_SIZE + CLIENT_RECT_VPAD);
|
||||
client_rect.mBottom += PREVIEW_BORDER + CLIENT_RECT_VPAD + info_height ;
|
||||
|
||||
mClientRect.setLeftTopAndSize(client_rect.getCenterX() - (client_width / 2), client_rect.getCenterY() + (client_height / 2), client_width, client_height);
|
||||
|
||||
// Hide the aspect ratio label if the window is too narrow
|
||||
// Assumes the label should be to the right of the dimensions
|
||||
LLRect dim_rect(getChildView("dimensions")->getRect());
|
||||
LLRect aspect_label_rect(getChildView("aspect_ratio")->getRect());
|
||||
getChildView("aspect_ratio")->setVisible( dim_rect.mRight < aspect_label_rect.mLeft);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -595,20 +595,15 @@ void LLScreenChannel::showToastsBottom()
|
|||
}
|
||||
}
|
||||
|
||||
// Dismiss toasts we don't have space for (STORM-391).
|
||||
if(it != mToastList.rend())
|
||||
{
|
||||
mHiddenToastsNum = 0;
|
||||
for(; it != mToastList.rend(); it++)
|
||||
{
|
||||
(*it).toast->stopTimer();
|
||||
(*it).toast->setVisible(FALSE);
|
||||
mHiddenToastsNum++;
|
||||
(*it).toast->hide();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
closeOverflowToastPanel();
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
|
|
@ -731,7 +726,6 @@ void LLNotificationsUI::LLScreenChannel::startToastTimer(LLToast* toast)
|
|||
//--------------------------------------------------------------------------
|
||||
void LLScreenChannel::hideToastsFromScreen()
|
||||
{
|
||||
closeOverflowToastPanel();
|
||||
for(std::vector<ToastElem>::iterator it = mToastList.begin(); it != mToastList.end(); it++)
|
||||
(*it).toast->setVisible(FALSE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -81,9 +81,6 @@ public:
|
|||
// show all toasts in a channel
|
||||
virtual void redrawToasts() {};
|
||||
|
||||
virtual void closeOverflowToastPanel() {};
|
||||
virtual void hideOverflowToastPanel() {};
|
||||
|
||||
|
||||
// Channel's behavior-functions
|
||||
// set whether a channel will control hovering inside itself or not
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
#include "lltransientdockablefloater.h"
|
||||
#include "llnotificationptr.h"
|
||||
|
||||
class LLToastNotifyPanel;
|
||||
class LLToastPanel;
|
||||
|
||||
/**
|
||||
* Handles script notifications ("ScriptDialog" and "ScriptDialogGroup")
|
||||
|
|
@ -206,7 +206,7 @@ protected:
|
|||
private:
|
||||
bool isScriptTextbox(LLNotificationPtr notification);
|
||||
|
||||
LLToastNotifyPanel* mScriptForm;
|
||||
LLToastPanel* mScriptForm;
|
||||
LLUUID mNotificationId;
|
||||
LLUUID mObjectId;
|
||||
bool mSaveFloaterPosition;
|
||||
|
|
|
|||
|
|
@ -165,12 +165,16 @@ void LLScrollingPanelParam::draw()
|
|||
getChildView("max param text")->setVisible( FALSE );
|
||||
LLPanel::draw();
|
||||
|
||||
// If we're in a focused floater, don't apply the floater's alpha to visual param hint,
|
||||
// making its behavior similar to texture controls'.
|
||||
F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
|
||||
|
||||
// Draw the hints over the "less" and "more" buttons.
|
||||
gGL.pushUIMatrix();
|
||||
{
|
||||
const LLRect& r = mHintMin->getRect();
|
||||
gGL.translateUI((F32)r.mLeft, (F32)r.mBottom, 0.f);
|
||||
mHintMin->draw();
|
||||
mHintMin->draw(alpha);
|
||||
}
|
||||
gGL.popUIMatrix();
|
||||
|
||||
|
|
@ -178,7 +182,7 @@ void LLScrollingPanelParam::draw()
|
|||
{
|
||||
const LLRect& r = mHintMax->getRect();
|
||||
gGL.translateUI((F32)r.mLeft, (F32)r.mBottom, 0.f);
|
||||
mHintMax->draw();
|
||||
mHintMax->draw(alpha);
|
||||
}
|
||||
gGL.popUIMatrix();
|
||||
|
||||
|
|
|
|||
|
|
@ -131,6 +131,9 @@ void LLSearchComboBox::focusTextEntry()
|
|||
if (mTextEntry)
|
||||
{
|
||||
gFocusMgr.setKeyboardFocus(mTextEntry);
|
||||
|
||||
// Let the editor handle editing hotkeys (STORM-431).
|
||||
LLEditMenuHandler::gEditMenuHandler = mTextEntry;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -46,11 +46,16 @@
|
|||
|
||||
const S32 LLToastScriptTextbox::DEFAULT_MESSAGE_MAX_LINE_COUNT= 7;
|
||||
|
||||
LLToastScriptTextbox::LLToastScriptTextbox(LLNotificationPtr& notification)
|
||||
: LLToastNotifyPanel(notification)
|
||||
LLToastScriptTextbox::LLToastScriptTextbox(const LLNotificationPtr& notification)
|
||||
: LLToastPanel(notification)
|
||||
{
|
||||
buildFromFile( "panel_notify_textbox.xml");
|
||||
|
||||
LLTextEditor* text_editorp = getChild<LLTextEditor>("text_editor_box");
|
||||
text_editorp->setValue(notification->getMessage());
|
||||
|
||||
getChild<LLButton>("ignore_btn")->setClickedCallback(boost::bind(&LLToastScriptTextbox::onClickIgnore, this));
|
||||
|
||||
const LLSD& payload = notification->getPayload();
|
||||
|
||||
//message body
|
||||
|
|
@ -107,3 +112,10 @@ void LLToastScriptTextbox::onClickSubmit()
|
|||
llwarns << response << llendl;
|
||||
}
|
||||
}
|
||||
|
||||
void LLToastScriptTextbox::onClickIgnore()
|
||||
{
|
||||
LLSD response = mNotification->getResponseTemplate();
|
||||
mNotification->respond(response);
|
||||
close();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,13 +30,11 @@
|
|||
#include "lltoastnotifypanel.h"
|
||||
#include "llnotificationptr.h"
|
||||
|
||||
class LLButton;
|
||||
|
||||
/**
|
||||
* Toast panel for scripted llTextbox notifications.
|
||||
*/
|
||||
class LLToastScriptTextbox
|
||||
: public LLToastNotifyPanel
|
||||
: public LLToastPanel
|
||||
{
|
||||
public:
|
||||
void close();
|
||||
|
|
@ -46,12 +44,15 @@ public:
|
|||
// Non-transient messages. You can specify non-default button
|
||||
// layouts (like one for script dialogs) by passing various
|
||||
// numbers in for "layout".
|
||||
LLToastScriptTextbox(LLNotificationPtr& notification);
|
||||
LLToastScriptTextbox(const LLNotificationPtr& notification);
|
||||
|
||||
/*virtual*/ ~LLToastScriptTextbox();
|
||||
protected:
|
||||
void onClickSubmit();
|
||||
|
||||
private:
|
||||
|
||||
void onClickSubmit();
|
||||
void onClickIgnore();
|
||||
|
||||
static const S32 DEFAULT_MESSAGE_MAX_LINE_COUNT;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -244,13 +244,13 @@ BOOL LLVisualParamHint::render()
|
|||
//-----------------------------------------------------------------------------
|
||||
// draw()
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLVisualParamHint::draw()
|
||||
void LLVisualParamHint::draw(F32 alpha)
|
||||
{
|
||||
if (!mIsVisible) return;
|
||||
|
||||
gGL.getTexUnit(0)->bind(this);
|
||||
|
||||
gGL.color4f(1.f, 1.f, 1.f, 1.f);
|
||||
gGL.color4f(1.f, 1.f, 1.f, alpha);
|
||||
|
||||
LLGLSUIDefault gls_ui;
|
||||
gGL.begin(LLRender::QUADS);
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ public:
|
|||
BOOL render();
|
||||
void requestUpdate( S32 delay_frames ) {mNeedsUpdate = TRUE; mDelayFrames = delay_frames; }
|
||||
void setUpdateDelayFrames( S32 delay_frames ) { mDelayFrames = delay_frames; }
|
||||
void draw();
|
||||
void draw(F32 alpha);
|
||||
|
||||
LLViewerVisualParam* getVisualParam() { return mVisualParam; }
|
||||
F32 getVisualParamWeight() { return mVisualParamWeight; }
|
||||
|
|
|
|||
|
|
@ -517,6 +517,8 @@ class LLFileTakeSnapshotToDisk : public view_listener_t
|
|||
gSavedSettings.getBOOL("RenderUIInSnapshot"),
|
||||
FALSE))
|
||||
{
|
||||
gViewerWindow->playSnapshotAnimAndSound();
|
||||
|
||||
LLPointer<LLImageFormatted> formatted;
|
||||
switch(LLFloaterSnapshot::ESnapshotFormat(gSavedSettings.getS32("SnapshotFormat")))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6306,6 +6306,9 @@ bool handle_lure_callback(const LLSD& notification, const LLSD& response)
|
|||
payload["from_id"] = target_id;
|
||||
payload["SUPPRESS_TOAST"] = true;
|
||||
LLNotificationsUtil::add("TeleportOfferSent", args, payload);
|
||||
|
||||
// Add the recepient to the recent people list.
|
||||
LLRecentPeople::instance().add(target_id);
|
||||
}
|
||||
}
|
||||
gAgent.sendReliableMessage();
|
||||
|
|
|
|||
|
|
@ -594,6 +594,7 @@
|
|||
left_delta="14"
|
||||
top_pad="10"
|
||||
name="SkyDayCycle"
|
||||
use_draw_context_alpha="false"
|
||||
width="148" />
|
||||
<slider
|
||||
control_name="WLSunAngle"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
background_visible="true"
|
||||
height="230"
|
||||
height="220"
|
||||
label="instant_message"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
|
|
@ -14,55 +14,81 @@
|
|||
<panel
|
||||
bevel_style="none"
|
||||
follows="left|right|top"
|
||||
height="150"
|
||||
height="185"
|
||||
label="info_panel"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="info_panel"
|
||||
top="0"
|
||||
width="305">
|
||||
width="305">
|
||||
<text_editor
|
||||
bg_readonly_color="0.0 0.0 0.0 0"
|
||||
enabled="false"
|
||||
follows="left|right|top|bottom"
|
||||
font="SansSerif"
|
||||
height="110"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
mouse_opaque="false"
|
||||
name="text_editor_box"
|
||||
read_only="true"
|
||||
text_color="white"
|
||||
text_readonly_color="white"
|
||||
top="10"
|
||||
width="285"
|
||||
wrap="true"
|
||||
parse_highlights="true"
|
||||
parse_urls="true"/>
|
||||
<text_editor
|
||||
parse_urls="true"
|
||||
enabled="true"
|
||||
follows="all"
|
||||
height="60"
|
||||
height="50"
|
||||
layout="topleft"
|
||||
left="25"
|
||||
left="10"
|
||||
max_length="250"
|
||||
name="message"
|
||||
parse_highlights="true"
|
||||
read_only="false"
|
||||
top="40"
|
||||
top_pad="10"
|
||||
type="string"
|
||||
use_ellipses="true"
|
||||
value="message"
|
||||
width="260"
|
||||
word_wrap="true" >
|
||||
width="285"
|
||||
word_wrap="true"
|
||||
parse_url="false" >
|
||||
</text_editor>
|
||||
parse_urls="false"
|
||||
<button
|
||||
top="110"
|
||||
follows="top|left"
|
||||
height="20"
|
||||
label="Submit"
|
||||
layout="topleft"
|
||||
left="25"
|
||||
name="btn_submit"
|
||||
width="70" />
|
||||
</panel>
|
||||
<panel
|
||||
background_visible="false"
|
||||
follows="left|right|bottom"
|
||||
height="0"
|
||||
height="25"
|
||||
width="290"
|
||||
label="control_panel"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="control_panel"
|
||||
top_pad="5">
|
||||
top_pad="0">
|
||||
<!--
|
||||
Notes:
|
||||
This panel holds the Ignore button and possibly other buttons of notification.
|
||||
-->
|
||||
<button
|
||||
top="0"
|
||||
follows="top|left"
|
||||
height="20"
|
||||
label="Submit"
|
||||
layout="topleft"
|
||||
name="btn_submit"
|
||||
width="70" />
|
||||
<button
|
||||
follows="top|right"
|
||||
height="20"
|
||||
label="Ignore"
|
||||
layout="topleft"
|
||||
left="215"
|
||||
name="ignore_btn"
|
||||
top="0"
|
||||
width="70" />
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@
|
|||
left="0"
|
||||
name="profile_scroll"
|
||||
opaque="true"
|
||||
height="527"
|
||||
height="400"
|
||||
width="317"
|
||||
top="0">
|
||||
<panel
|
||||
|
|
|
|||
|
|
@ -5,5 +5,6 @@
|
|||
# to a marker file which should be created if the installer fails.q
|
||||
#
|
||||
|
||||
open ../Resources/mac-updater.app --args -dmg "$1" -name "Second Life Viewer 2" -marker "$2"
|
||||
cd "$(dirname "$0")"
|
||||
../Resources/mac-updater.app/Contents/MacOS/mac-updater -dmg "$1" -name "Second Life Viewer 2" -marker "$2" &
|
||||
exit 0
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
#! /bin/bash
|
||||
INSTALL_DIR=$(cd "$(dirname $0)/.." ; pwd)
|
||||
export LD_LIBRARY_PATH=$INSTALL_DIR/lib
|
||||
INSTALL_DIR=$(cd "$(dirname "$0")/.." ; pwd)
|
||||
export LD_LIBRARY_PATH="$INSTALL_DIR/lib"
|
||||
bin/linux-updater.bin --file "$1" --dest "$INSTALL_DIR" --name "Second Life Viewer 2" --stringsdir "$INSTALL_DIR/skins/default/xui/en" --stringsfile "strings.xml"
|
||||
|
||||
if [ $? -ne 0 ]
|
||||
then touch $2
|
||||
then touch "$2"
|
||||
fi
|
||||
|
||||
rm -f $1
|
||||
rm -f "$1"
|
||||
|
|
|
|||
Loading…
Reference in New Issue