diff options
29 files changed, 254 insertions, 196 deletions
diff --git a/indra/llcommon/indra_constants.h b/indra/llcommon/indra_constants.h index 9eda175242..c13860033e 100644 --- a/indra/llcommon/indra_constants.h +++ b/indra/llcommon/indra_constants.h @@ -306,7 +306,7 @@ const U32 MAP_ITEM_TELEHUB = 0x01; const U32 MAP_ITEM_PG_EVENT = 0x02; const U32 MAP_ITEM_MATURE_EVENT = 0x03; const U32 MAP_ITEM_POPULAR = 0x04; -const U32 MAP_ITEM_AGENT_COUNT = 0x05; +//const U32 MAP_ITEM_AGENT_COUNT = 0x05; const U32 MAP_ITEM_AGENT_LOCATIONS = 0x06; const U32 MAP_ITEM_LAND_FOR_SALE = 0x07; const U32 MAP_ITEM_CLASSIFIED = 0x08; diff --git a/indra/llcommon/llsecondlifeurls.cpp b/indra/llcommon/llsecondlifeurls.cpp index 9d5395ad07..28f171a9c0 100644 --- a/indra/llcommon/llsecondlifeurls.cpp +++ b/indra/llcommon/llsecondlifeurls.cpp @@ -57,7 +57,5 @@ const char LSL_DOC_URL[] = const char SL_KB_URL[] = "http://secondlife.com/knowledgebase/"; -const char ACCOUNT_TRANSACTIONS_URL[] = - "https://secondlife.com/account/transactions.php"; - const char RELEASE_NOTES[] = "releasenotes.txt"; + diff --git a/indra/llcommon/llsecondlifeurls.h b/indra/llcommon/llsecondlifeurls.h index 86d18d0eab..b07c18eb72 100644 --- a/indra/llcommon/llsecondlifeurls.h +++ b/indra/llcommon/llsecondlifeurls.h @@ -55,9 +55,6 @@ extern const char LSL_DOC_URL[]; // SL KnowledgeBase page extern const char SL_KB_URL[]; -// Account transactions -extern const char ACCOUNT_TRANSACTIONS_URL[]; - // Local Url Release Notes extern const char RELEASE_NOTES[]; diff --git a/indra/llmessage/lltransfermanager.cpp b/indra/llmessage/lltransfermanager.cpp index 51c3aafbbb..4eea7418af 100644 --- a/indra/llmessage/lltransfermanager.cpp +++ b/indra/llmessage/lltransfermanager.cpp @@ -719,8 +719,11 @@ LLTransferSourceChannel::LLTransferSourceChannel(const LLTransferChannelType cha LLTransferSourceChannel::~LLTransferSourceChannel() { - LLPriQueueMap<LLTransferSource *>::pqm_iter iter; - for (iter = mTransferSources.mMap.begin(); iter != mTransferSources.mMap.end(); iter++) + LLPriQueueMap<LLTransferSource*>::pqm_iter iter = + mTransferSources.mMap.begin(); + LLPriQueueMap<LLTransferSource*>::pqm_iter end = + mTransferSources.mMap.end(); + for (; iter != end; ++iter) { // Just kill off all of the transfers (*iter).second->abortTransfer(); diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index 7c0289b580..f42122b0ee 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -628,7 +628,7 @@ S32 LLFontGL::render(const LLWString &wstr, case LEFT: break; case RIGHT: - cur_x -= (F32)getWidth(wstr.c_str(), 0, length) * sScaleX; + cur_x -= llmin(scaled_max_pixels, llround(getWidthF32(wstr.c_str(), 0, length) * sScaleX)); break; case HCENTER: cur_x -= llmin(scaled_max_pixels, llround(getWidthF32(wstr.c_str(), 0, length) * sScaleX)) / 2; @@ -653,12 +653,13 @@ S32 LLFontGL::render(const LLWString &wstr, BOOL draw_ellipses = FALSE; - if (use_ellipses) + if (use_ellipses && halign == LEFT) { // check for too long of a string if (getWidthF32(wstr.c_str(), 0, max_chars) > scaled_max_pixels) { - const LLWString dots(utf8str_to_wstring(LLString("..."))); + // use four dots for ellipsis width to generate padding + const LLWString dots(utf8str_to_wstring(LLString("...."))); scaled_max_pixels = llmax(0, scaled_max_pixels - llround(getWidthF32(dots.c_str()))); draw_ellipses = TRUE; } diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 22d898c5ce..b56ae5167b 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1218,24 +1218,36 @@ void LLFloater::onClickEdit(void *userdata) } // static -void LLFloater::closeByMenu( void* userdata ) +void LLFloater::closeFocusedFloater() { - LLFloater* self = (LLFloater*) userdata; - if (!self || self->getHost()) return; + LLFloater* focused_floater = NULL; + + std::map<LLViewHandle, LLFloater*>::iterator iter; + for(iter = sFloaterMap.begin(); iter != sFloaterMap.end(); ++iter) + { + focused_floater = iter->second; + if (focused_floater->hasFocus()) + { + break; + } + } - LLFloaterView* parent = (LLFloaterView*) self->getParent(); + if (iter == sFloaterMap.end()) + { + // nothing found, return + return; + } - // grab focus status before close just in case floater is deleted - BOOL has_focus = gFocusMgr.childHasKeyboardFocus(self); - self->close(); + focused_floater->close(); - // if this floater used to have focus and now nothing took focus + // if nothing took focus after closing focused floater // give it to next floater (to allow closing multiple windows via keyboard in rapid succession) - if (has_focus && gFocusMgr.getKeyboardFocus() == NULL) + if (gFocusMgr.getKeyboardFocus() == NULL) { - parent->focusFrontFloater(); + // HACK: use gFloaterView directly in case we are using Ctrl-W to close snapshot window + // which sits in gSnapshotFloaterView, and needs to pass focus on to normal floater view + gFloaterView->focusFrontFloater(); } - } diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index a743081335..05e513ed1d 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -183,7 +183,8 @@ public: /*virtual*/ LLView* getRootMostFastFrameView(); - static void closeByMenu(void *userdata); + static void closeFocusedFloater(); + static void onClickClose(void *userdata); static void onClickMinimize(void *userdata); static void onClickTearOff(void *userdata); diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 7aaa306f05..9161ecb19f 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -1155,70 +1155,6 @@ void LLMenuItemToggleGL::doIt( void ) } -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLMenuItemBranchGL -// -// The LLMenuItemBranchGL represents a menu item that has a -// sub-menu. This is used to make cascading menus. -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -class LLMenuItemBranchGL : public LLMenuItemGL -{ -protected: - LLMenuGL* mBranch; - -public: - LLMenuItemBranchGL( const LLString& name, const LLString& label, LLMenuGL* branch, - KEY key = KEY_NONE, MASK mask = MASK_NONE ); - virtual LLXMLNodePtr getXML(bool save_children = true) const; - - virtual LLView* getChildByName(const LLString& name, BOOL recurse) const; - - virtual LLString getType() const { return "menu"; } - - virtual EWidgetType getWidgetType() const; - virtual LLString getWidgetTag() const; - - virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); - - virtual BOOL handleAcceleratorKey(KEY key, MASK mask); - - // check if we've used these accelerators already - virtual BOOL addToAcceleratorList(std::list <LLKeyBinding*> *listp); - - // called to rebuild the draw label - virtual void buildDrawLabel( void ); - - // doIt() - do the primary funcationality of the menu item. - virtual void doIt( void ); - - virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent); - virtual BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent); - - // set the hover status (called by it's menu) and if the object is - // active. This is used for behavior transfer. - virtual void setHighlight( BOOL highlight ); - - virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); - - virtual BOOL isActive() const; - - virtual BOOL isOpen() const; - - LLMenuGL *getBranch() const { return mBranch; } - - virtual void updateBranchParent( LLView* parentp ); - - // LLView Functionality - virtual void onVisibilityChange( BOOL curVisibilityIn ); - - virtual void draw(); - - virtual void setEnabledSubMenus(BOOL enabled); - - virtual void openMenu(); -}; - LLMenuItemBranchGL::LLMenuItemBranchGL( const LLString& name, const LLString& label, LLMenuGL* branch, KEY key, MASK mask ) : LLMenuItemGL( name, label, key, mask ), diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h index d43b4553c3..1b0b844bdc 100644 --- a/indra/llui/llmenugl.h +++ b/indra/llui/llmenugl.h @@ -542,6 +542,75 @@ protected: KEY mJumpKey; }; + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLMenuItemBranchGL +// +// The LLMenuItemBranchGL represents a menu item that has a +// sub-menu. This is used to make cascading menus. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +class LLMenuItemBranchGL : public LLMenuItemGL +{ +protected: + LLMenuGL* mBranch; + +public: + LLMenuItemBranchGL( const LLString& name, const LLString& label, LLMenuGL* branch, + KEY key = KEY_NONE, MASK mask = MASK_NONE ); + virtual LLXMLNodePtr getXML(bool save_children = true) const; + + virtual LLView* getChildByName(const LLString& name, BOOL recurse) const; + + virtual LLString getType() const { return "menu"; } + + virtual EWidgetType getWidgetType() const; + virtual LLString getWidgetTag() const; + + virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); + + virtual BOOL handleAcceleratorKey(KEY key, MASK mask); + + // check if we've used these accelerators already + virtual BOOL addToAcceleratorList(std::list <LLKeyBinding*> *listp); + + // called to rebuild the draw label + virtual void buildDrawLabel( void ); + + // doIt() - do the primary funcationality of the menu item. + virtual void doIt( void ); + + virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent); + virtual BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent); + + // set the hover status (called by it's menu) and if the object is + // active. This is used for behavior transfer. + virtual void setHighlight( BOOL highlight ); + + virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); + + virtual BOOL isActive() const; + + virtual BOOL isOpen() const; + + LLMenuGL *getBranch() const { return mBranch; } + + virtual void updateBranchParent( LLView* parentp ); + + // LLView Functionality + virtual void onVisibilityChange( BOOL curVisibilityIn ); + + virtual void draw(); + + virtual void setEnabledSubMenus(BOOL enabled); + + virtual void openMenu(); +}; + + + + //----------------------------------------------------------------------------- // class LLPieMenu // A circular menu of items, icons, etc. diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 91bf6befe7..de65ce14f6 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -338,16 +338,6 @@ BOOL LLPanel::handleKeyHere( KEY key, MASK mask, BOOL called_from_parent ) gFocusMgr.childHasKeyboardFocus(this) && !called_from_parent ) { LLUICtrl* cur_focus = gFocusMgr.getKeyboardFocus(); - if (key == KEY_RETURN && mask == MASK_NONE) - { - // set keyboard focus to self to trigger commitOnFocusLost behavior on current ctrl - if (cur_focus && cur_focus->acceptsTextInput()) - { - cur_focus->onCommit(); - handled = TRUE; - } - } - // If we have a default button, click it when // return is pressed, unless current focus is a return-capturing button // in which case *that* button will handle the return key @@ -363,6 +353,16 @@ BOOL LLPanel::handleKeyHere( KEY key, MASK mask, BOOL called_from_parent ) handled = TRUE; } } + + if (key == KEY_RETURN && mask == MASK_NONE) + { + // set keyboard focus to self to trigger commitOnFocusLost behavior on current ctrl + if (cur_focus && cur_focus->acceptsTextInput()) + { + cur_focus->onCommit(); + handled = TRUE; + } + } } return handled; diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 2b7cbe5cef..c168bbe5a8 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -137,10 +137,11 @@ BOOL LLScrollListCheck::handleClick() // U32 LLScrollListText::sCount = 0; -LLScrollListText::LLScrollListText( const LLString& text, const LLFontGL* font, S32 width, U8 font_style, LLColor4& color, BOOL use_color, BOOL visible) +LLScrollListText::LLScrollListText( const LLString& text, const LLFontGL* font, S32 width, U8 font_style, LLFontGL::HAlign font_alignment, LLColor4& color, BOOL use_color, BOOL visible) : mText( text ), mFont( font ), mFontStyle( font_style ), + mFontAlignment( font_alignment ), mWidth( width ), mVisible( visible ), mHighlightCount( 0 ), @@ -163,10 +164,6 @@ LLScrollListText::LLScrollListText( const LLString& text, const LLFontGL* font, { mRoundedRectImage = LLUI::sImageProvider->getUIImageByID(LLUUID(LLUI::sAssetsGroup->getString("rounded_square.tga"))); } - - // Yes, that's four dots, because we want it to have a little - // padding, in proportion to the font size. - mEllipsisWidth = (S32)mFont->getWidth("...."); } LLScrollListText::~LLScrollListText() @@ -202,7 +199,19 @@ void LLScrollListText::drawToWidth(S32 width, const LLColor4& color, const LLCol { mRoundedRectImage->bind(); glColor4fv(highlight_color.mV); - S32 left = mFont->getWidth(mText.getString(), 0, mHighlightOffset); + S32 left = 0; + switch(mFontAlignment) + { + case LLFontGL::LEFT: + left = mFont->getWidth(mText.getString(), 0, mHighlightOffset); + break; + case LLFontGL::RIGHT: + left = width - mFont->getWidth(mText.getString(), mHighlightOffset, S32_MAX); + break; + case LLFontGL::HCENTER: + left = (width - mFont->getWidth(mText.getString())) / 2; + break; + } gl_segmented_rect_2d_tex(left - 2, llround(mFont->getLineHeight()) + 1, left + mFont->getWidth(mText.getString(), mHighlightOffset, mHighlightCount) + 1, @@ -215,21 +224,28 @@ void LLScrollListText::drawToWidth(S32 width, const LLColor4& color, const LLCol // Try to draw the entire string F32 right_x; U32 string_chars = mText.length(); - U32 drawn_chars = mFont->render(mText.getWString(), 0, 0, 2, - *display_color, - LLFontGL::LEFT, - LLFontGL::BOTTOM, - mFontStyle, - string_chars, - width - mEllipsisWidth, - &right_x, FALSE); - - // If we didn't get the whole string, abbreviate - if (drawn_chars < string_chars && drawn_chars) - { - mFont->renderUTF8("...", 0, right_x, 0.f, color, LLFontGL::LEFT, LLFontGL::BOTTOM, mFontStyle, - S32_MAX, S32_MAX, NULL, FALSE); - } + F32 start_x = 0.f; + switch(mFontAlignment) + { + case LLFontGL::LEFT: + start_x = 0.f; + break; + case LLFontGL::RIGHT: + start_x = (F32)width; + break; + case LLFontGL::HCENTER: + start_x = (F32)width * 0.5f; + break; + } + mFont->render(mText.getWString(), 0, + start_x, 2.f, + *display_color, + mFontAlignment, + LLFontGL::BOTTOM, + mFontStyle, + string_chars, + width, + &right_x, FALSE, TRUE); } @@ -2171,7 +2187,7 @@ LLView* LLScrollListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFac NULL, multi_select, draw_border); - + scroll_list->setDisplayHeading(draw_heading); if (node->hasAttribute("heading_height")) { @@ -2226,6 +2242,8 @@ LLView* LLScrollListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFac F32 columnrelwidth = 0.f; child->getAttributeF32("relwidth", columnrelwidth); + LLFontGL::HAlign h_align = LLFontGL::LEFT; + h_align = LLView::selectFontHAlign(child); columns[index]["name"] = columnname; columns[index]["sort"] = sortname; @@ -2234,6 +2252,7 @@ LLView* LLScrollListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFac columns[index]["width"] = columnwidth; columns[index]["relwidth"] = columnrelwidth; columns[index]["dynamicwidth"] = columndynamicwidth; + columns[index]["halign"] = (S32)h_align; index++; } } @@ -2580,6 +2599,7 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& value, EAddPosition p S32 index = column_itor->second.mIndex; S32 width = column_itor->second.mWidth; + LLFontGL::HAlign font_alignment = column_itor->second.mFontAlignment; LLSD value = (*itor)["value"]; LLString fontname = (*itor)["font"].asString(); @@ -2607,7 +2627,7 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& value, EAddPosition p } else { - new_item->setColumn(index, new LLScrollListText(value.asString(), font, width, font_style)); + new_item->setColumn(index, new LLScrollListText(value.asString(), font, width, font_style, font_alignment)); } } @@ -2715,3 +2735,4 @@ void LLScrollListCtrl::onFocusLost() } } } + diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h index 985ccc12a5..9c16e4dff9 100644 --- a/indra/llui/llscrolllistctrl.h +++ b/indra/llui/llscrolllistctrl.h @@ -46,9 +46,8 @@ public: class LLScrollListText : public LLScrollListCell { - static U32 sCount; public: - LLScrollListText( const LLString& text, const LLFontGL* font, S32 width = 0, U8 font_style = LLFontGL::NORMAL, LLColor4& color = LLColor4::black, BOOL use_color = FALSE, BOOL visible = TRUE); + LLScrollListText( const LLString& text, const LLFontGL* font, S32 width = 0, U8 font_style = LLFontGL::NORMAL, LLFontGL::HAlign font_alignment = LLFontGL::LEFT, LLColor4& color = LLColor4::black, BOOL use_color = FALSE, BOOL visible = TRUE); /*virtual*/ ~LLScrollListText(); virtual void drawToWidth(S32 width, const LLColor4& color, const LLColor4& highlight_color) const; @@ -65,13 +64,15 @@ private: const LLFontGL* mFont; LLColor4* mColor; const U8 mFontStyle; + LLFontGL::HAlign mFontAlignment; S32 mWidth; - S32 mEllipsisWidth; // in pixels, of "..." BOOL mVisible; S32 mHighlightCount; S32 mHighlightOffset; LLPointer<LLImageGL> mRoundedRectImage; + + static U32 sCount; }; class LLScrollListIcon : public LLScrollListCell @@ -116,9 +117,10 @@ class LLScrollListColumn { public: // Default constructor - LLScrollListColumn() : mName(""), mSortingColumn(""), mLabel(""), mWidth(-1), mRelWidth(-1.0), mDynamicWidth(FALSE), mIndex(-1), mParentCtrl(NULL), mButton(NULL) { } + LLScrollListColumn() : mName(""), mSortingColumn(""), mLabel(""), mWidth(-1), mRelWidth(-1.0), mDynamicWidth(FALSE), mIndex(-1), mParentCtrl(NULL), mButton(NULL), mFontAlignment(LLFontGL::LEFT) + { } - LLScrollListColumn(LLString name, LLString label, S32 width, F32 relwidth) + LLScrollListColumn(LLString name, LLString label, S32 width, F32 relwidth) : mName(name), mSortingColumn(name), mLabel(label), mWidth(width), mRelWidth(relwidth), mDynamicWidth(FALSE), mIndex(-1), mParentCtrl(NULL), mButton(NULL) { } LLScrollListColumn(const LLSD &sd) @@ -150,20 +152,27 @@ public: mDynamicWidth = FALSE; mRelWidth = -1; } + + if (sd.has("halign")) + { + mFontAlignment = (LLFontGL::HAlign)llclamp(sd.get("halign").asInteger(), (S32)LLFontGL::LEFT, (S32)LLFontGL::HCENTER); + } + mIndex = -1; mParentCtrl = NULL; mButton = NULL; } - LLString mName; - LLString mSortingColumn; - LLString mLabel; - S32 mWidth; - F32 mRelWidth; - BOOL mDynamicWidth; - S32 mIndex; - LLScrollListCtrl *mParentCtrl; - LLButton *mButton; + LLString mName; + LLString mSortingColumn; + LLString mLabel; + S32 mWidth; + F32 mRelWidth; + BOOL mDynamicWidth; + S32 mIndex; + LLScrollListCtrl* mParentCtrl; + LLButton* mButton; + LLFontGL::HAlign mFontAlignment; }; class LLScrollListItem @@ -190,8 +199,8 @@ public: // If width = 0, just use the width of the text. Otherwise override with // specified width in pixels. - void addColumn( const LLString& text, const LLFontGL* font, S32 width = 0 , U8 font_style = LLFontGL::NORMAL, BOOL visible = TRUE) - { mColumns.push_back( new LLScrollListText(text, font, width, font_style, LLColor4::black, FALSE, visible) ); } + void addColumn( const LLString& text, const LLFontGL* font, S32 width = 0 , U8 font_style = LLFontGL::NORMAL, LLFontGL::HAlign font_alignment = LLFontGL::LEFT, BOOL visible = TRUE) + { mColumns.push_back( new LLScrollListText(text, font, width, font_style, font_alignment, LLColor4::black, FALSE, visible) ); } void addColumn( LLImageGL* icon, S32 width = 0 ) { mColumns.push_back( new LLScrollListIcon(icon, width) ); } diff --git a/indra/lscript/lscript_library/lscript_library.cpp b/indra/lscript/lscript_library/lscript_library.cpp index c0472926df..0a2e896aea 100644 --- a/indra/lscript/lscript_library/lscript_library.cpp +++ b/indra/lscript/lscript_library/lscript_library.cpp @@ -397,6 +397,11 @@ void LLScriptLibrary::init() addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetParcelPrimCount", "i", "vii","integer llGetParcelPrimCount(vector pos, integer category, integer sim_wide)\nGets the number of prims on the parcel of the given category.\nCategories: PARCEL_COUNT_TOTAL, _OWNER, _GROUP, _OTHER, _SELECTED, _TEMP.")); addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetParcelMaxPrims", "i", "vi","integer llGetParcelMaxPrims(vector pos, integer sim_wide)\nGets the maximum number of prims allowed on the parcel at pos.")); addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llGetParcelDetails", "l", "vl","list llGetParcelDetails(vector pos, list params)\nGets the parcel details specified in params for the parcel at pos.\nParams is one or more of: PARCEL_DETAILS_NAME, _DESC, _OWNER, _GROUP, _AREA")); + + + addFunction(new LLScriptLibraryFunction(10.f, 0.2f, dummy_func, "llSetLinkPrimitiveParams", NULL, "il", "llSetLinkPrimitiveParams(integer linknumber, list rules)\nSet primitive parameters for linknumber based on rules.")); + addFunction(new LLScriptLibraryFunction(10.f, 0.2f, dummy_func, "llSetLinkTexture", NULL, "isi", "llSetLinkTexture(integer link_pos, string texture, integer face)\nSets the texture of face for link_pos")); + // energy, sleep, dummy_func, name, return type, parameters, help text, gods-only @@ -421,10 +426,6 @@ void LLScriptLibrary::init() //addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llSetCamPositionLocked", NULL, "i", "llSetCamPositionLocked(TRUE or FALSE)\nLocks the camera position so it will not move")); //addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llSetCamFocusLocked", NULL, "i", "llSetCamFocusLocked(TRUE or FALSE)\nLocks the camera focus so it will not move")); -// These functions are being put on hold until we think through how we want them handled (security issues). DK 02/16/05 - //addFunction(new LLScriptLibraryFunction(10.f, 0.2f, dummy_func, "llSetLinkPrimitiveParams", NULL, "il", "llSetLinkPrimitiveParams(integer linknumber, list rules)\nSet primitive parameters for linknumber based on rules.")); - //addFunction(new LLScriptLibraryFunction(10.f, 0.2f, dummy_func, "llSetLinkTexture", NULL, "isi", "llSetLinkTexture(integer link_pos, string texture, integer face)\nSets the texture of face for link_pos")); - //addFunction(new LLScriptLibraryFunction(10.f, 0.f, dummy_func, "llSetForSale", "i", "ii", "integer llSetForSale(integer selltype, integer price)\nSets this object for sale in mode selltype for price. Returns TRUE if successfully set for sale.")); LLScriptLibraryFunction::LLScriptLibraryFunction(F32 eu, F32 st, void (*exec_func)(LLScriptLibData *, LLScriptLibData *, const LLUUID &), char *name, char *ret_type, char *args, char *desc, BOOL god_only) diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp index 55667b55e1..b49dfbff34 100644 --- a/indra/newview/llfloaterbuycurrency.cpp +++ b/indra/newview/llfloaterbuycurrency.cpp @@ -166,7 +166,7 @@ BOOL LLFloaterBuyCurrencyUI::canClose() void LLFloaterBuyCurrencyUI::onClose(bool app_quitting) { LLFloater::onClose(app_quitting); - delete this; + destroy(); } void LLFloaterBuyCurrencyUI::updateUI() diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index e0af892878..03a94aed63 100644 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -993,7 +993,7 @@ BOOL LLFloaterBuyLandUI::canClose() void LLFloaterBuyLandUI::onClose(bool app_quitting) { LLFloater::onClose(app_quitting); - delete this; + destroy(); } diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp index 098417d1b4..75a87233f0 100755 --- a/indra/newview/llfloatersellland.cpp +++ b/indra/newview/llfloatersellland.cpp @@ -148,7 +148,7 @@ void LLFloaterSellLandUI::SelectionObserver::changed() void LLFloaterSellLandUI::onClose(bool app_quitting) { LLFloater::onClose(app_quitting); - delete this; + destroy(); } BOOL LLFloaterSellLandUI::postBuild() diff --git a/indra/newview/llhudobject.cpp b/indra/newview/llhudobject.cpp index 403e6c6dff..1c8c45a078 100644 --- a/indra/newview/llhudobject.cpp +++ b/indra/newview/llhudobject.cpp @@ -148,7 +148,7 @@ LLHUDObject *LLHUDObject::addHUDObject(const U8 type) ((LLHUDEffectSpiral *)hud_objectp)->setColor(LLColor4U(255, 255, 255, 255)); break; case LL_HUD_EFFECT_GLOW: - llerrs << "Glow not implemented!" << llendl; + // deprecated break; case LL_HUD_EFFECT_POINT: hud_objectp = new LLHUDEffectSpiral(type); diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index b7a29b63b9..83c08ec602 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -592,7 +592,7 @@ void LLFloaterIMPanel::onInputEditorKeystroke(LLLineEditor* caller, void* userda } } -void LLFloaterIMPanel::close(bool app_quitting) +void LLFloaterIMPanel::onClose(bool app_quitting) { setTyping(FALSE); diff --git a/indra/newview/llimpanel.h b/indra/newview/llimpanel.h index caed94ebc1..d54ac794b7 100644 --- a/indra/newview/llimpanel.h +++ b/indra/newview/llimpanel.h @@ -37,7 +37,7 @@ public: // Check typing timeout timer. /*virtual*/ void draw(); - /*virtual*/ void close(bool app_quitting = FALSE); + /*virtual*/ void onClose(bool app_quitting = FALSE); // add target ids to the session. // Return TRUE if successful, otherwise FALSE. diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index b1b57fb003..f4280aae9c 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -327,6 +327,14 @@ void hideContextEntries(LLMenuGL& menu, for (itor = list->begin(); itor != list->end(); ++itor) { LLString name = (*itor)->getName(); + + // descend into split menus: + if ((name == "More") && (WIDGET_TYPE_MENU_ITEM_BRANCH == (*itor)->getWidgetType())) + { + hideContextEntries(*((LLMenuItemBranchGL *)(*itor))->getBranch(), entries_to_show, disabled_entries); + } + + bool found = false; std::vector<LLString>::const_iterator itor2; for (itor2 = entries_to_show.begin(); itor2 != entries_to_show.end(); ++itor2) @@ -1758,6 +1766,14 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) LLInventoryModel* model = mInventoryPanel->getModel(); if(!model) return; LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); + + if (lost_and_found_id == mUUID) + { + // This is the lost+found folder. + mItems.push_back("Empty Lost And Found"); + } + if(trash_id == mUUID) { // This is the trash. diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 7bd6c9ad82..fc95ebd067 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -63,7 +63,6 @@ #include "lleventnotifier.h" #include "llface.h" #include "llfeaturemanager.h" -#include "llfloateraccounthistory.h" #include "llfloaterchat.h" #include "llfloatergesture.h" #include "llfloaterland.h" @@ -2287,11 +2286,11 @@ BOOL idle_startup() // JC - 7/20/2002 gViewerWindow->sendShapeToSim(); + // Ignore stipend information for now. Money history is on the web site. // if needed, show the money history window - if (stipend_since_login && !gNoRender) - { - LLFloaterAccountHistory::show(NULL); - } + //if (stipend_since_login && !gNoRender) + //{ + //} if (!gAgent.isFirstLogin()) { @@ -3125,14 +3124,6 @@ void register_viewer_callbacks(LLMessageSystem* msg) msg->setHandlerFuncFast(_PREHASH_GrantGodlikePowers, process_grant_godlike_powers); - msg->setHandlerFuncFast(_PREHASH_MoneySummaryReply, - LLFloaterAccountHistory::processMoneySummaryReply); - msg->setHandlerFuncFast(_PREHASH_MoneyDetailsReply, - LLFloaterAccountHistory::processMoneyDetailsReply); - msg->setHandlerFuncFast(_PREHASH_MoneyTransactionsReply, - LLFloaterAccountHistory::processMoneyTransactionsReply); - - // ASDF msg->setHandlerFuncFast(_PREHASH_GroupAccountSummaryReply, LLGroupMoneyPlanningTabEventHandler::processGroupAccountSummaryReply); msg->setHandlerFuncFast(_PREHASH_GroupAccountDetailsReply, diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index b2f2a861ed..794281965e 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -212,7 +212,8 @@ LLFloaterTexturePicker::LLFloaterTexturePicker( mInventoryPanel->setAutoSelectOverride(true); mInventoryPanel->setFilterTypes(filter_types); - mInventoryPanel->setFilterPermMask(getFilterPermMask()); + //mInventoryPanel->setFilterPermMask(getFilterPermMask()); //Commented out due to no-copy texture loss. + mInventoryPanel->setFilterPermMask(immediate_filter_perm_mask); mInventoryPanel->setSelectCallback(onSelectionChange, this); mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); mInventoryPanel->setAllowMultiSelect(FALSE); @@ -350,7 +351,8 @@ BOOL LLFloaterTexturePicker::handleDragAndDrop( if (mod) item_perm_mask |= PERM_MODIFY; if (xfer) item_perm_mask |= PERM_TRANSFER; - PermissionMask filter_perm_mask = getFilterPermMask(); + //PermissionMask filter_perm_mask = getFilterPermMask(); Commented out due to no-copy texture loss. + PermissionMask filter_perm_mask = mImmediateFilterPermMask; if ( (item_perm_mask & filter_perm_mask) == filter_perm_mask ) { if (drop) @@ -729,7 +731,7 @@ void LLFloaterTexturePicker::onApplyImmediateCheck(LLUICtrl* ctrl, void *user_da void LLFloaterTexturePicker::updateFilterPermMask() { - mInventoryPanel->setFilterPermMask( getFilterPermMask() ); + //mInventoryPanel->setFilterPermMask( getFilterPermMask() ); Commented out due to no-copy texture loss. } void LLFloaterTexturePicker::onSearchEdit(const LLString& search_string, void* user_data ) @@ -1252,8 +1254,9 @@ BOOL LLTextureCtrl::allowDrop(LLInventoryItem* item) if (mod) item_perm_mask |= PERM_MODIFY; if (xfer) item_perm_mask |= PERM_TRANSFER; - PermissionMask filter_perm_mask = mCanApplyImmediately ? - mImmediateFilterPermMask : mNonImmediateFilterPermMask; +// PermissionMask filter_perm_mask = mCanApplyImmediately ? commented out due to no-copy texture loss. +// mImmediateFilterPermMask : mNonImmediateFilterPermMask; + PermissionMask filter_perm_mask = mImmediateFilterPermMask; if ( (item_perm_mask & filter_perm_mask) == filter_perm_mask ) { if(mDragCallback) diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 94b549b8e6..5d7b323660 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -1185,6 +1185,8 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj, return TRUE; } + if (!item) return FALSE; + LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item); if(!item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID())) { @@ -1217,6 +1219,7 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj, return FALSE; } } +std::cout << "ASSET ID: " << new_item->getAssetUUID() << "\n"; hit_obj->updateInventory(new_item, TASK_INVENTORY_ASSET_KEY, true); } else if(!item->getPermissions().allowOperationBy(PERM_TRANSFER, @@ -1230,6 +1233,7 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj, // *FIX: may want to make sure agent can paint hit_obj. // make sure the object has the texture in it's inventory. +std::cout << "ASSET ID: " << new_item->getAssetUUID() << "\n"; hit_obj->updateInventory(new_item, TASK_INVENTORY_ASSET_KEY, true); } return TRUE; @@ -2305,6 +2309,12 @@ EAcceptance LLToolDragAndDrop::dad3dTextureObject( { return ACCEPT_NO_LOCKED; } + //If texture !copyable don't texture or you'll never get it back. + if(!item->getPermissions().allowCopyBy(gAgent.getID())) + { + return ACCEPT_NO; + } + if(drop && (ACCEPT_YES_SINGLE <= rv)) { if((mask & MASK_SHIFT)) diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 99cae9979c..225d599838 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -86,7 +86,7 @@ BOOL LLFloaterSettingsDebug::postBuild() childSetUserData("boolean_combo", this); childSetCommitCallback("color_swatch", onCommitSettings); childSetUserData("color_swatch", this); - + childSetAction("default_btn", onClickDefault, this); mComment = (LLTextEditor*)getChildByName("comment_text"); return TRUE; } diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 7a48367a47..240100be61 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -655,7 +655,7 @@ void copy_inventory_item( msg->addUUIDFast(_PREHASH_OldAgentID, current_owner); msg->addUUIDFast(_PREHASH_OldItemID, item_id); msg->addUUIDFast(_PREHASH_NewFolderID, parent_id); - msg->addString("NewName", new_name); + msg->addStringFast(_PREHASH_NewName, new_name); gAgent.sendReliableMessage(); } @@ -672,11 +672,11 @@ void move_inventory_item( msg->nextBlockFast(_PREHASH_AgentData); msg->addUUIDFast(_PREHASH_AgentID, agent_id); msg->addUUIDFast(_PREHASH_SessionID, session_id); - msg->addBOOLFast(_PREHASH_Stamp, false); + msg->addBOOLFast(_PREHASH_Stamp, FALSE); msg->nextBlockFast(_PREHASH_InventoryData); msg->addUUIDFast(_PREHASH_ItemID, item_id); msg->addUUIDFast(_PREHASH_FolderID, parent_id); - msg->addString("NewName", new_name); + msg->addStringFast(_PREHASH_NewName, new_name); gAgent.sendReliableMessage(); } diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 9b6fc425fa..c7bd6b51e4 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -89,7 +89,6 @@ #include "llfloaterland.h" #include "llfloaterlandholdings.h" #include "llfloatermap.h" -#include "llfloateraccounthistory.h" #include "llfloaterimagepreview.h" #include "llfloatermute.h" #include "llfloaternamedesc.h" @@ -5215,15 +5214,23 @@ void upload_error(const char* error_message, const char* label, const std::strin LLFilePicker::instance().reset(); } +class LLFileEnableCloseWindow : public view_listener_t +{ + bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) + { + bool new_value = gFloaterView->getFocusedFloater() != NULL || gSnapshotFloaterView->getFocusedFloater() != NULL; + // horrendously opaque, this code + gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); + return true; + } +}; + class LLFileCloseWindow : public view_listener_t { bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) { - LLFloater *top = gFloaterView->getFrontmost(); - if (top && top->hasFocus()) - { - LLFloater::closeByMenu( top ); - } + LLFloater::closeFocusedFloater(); + return true; } }; @@ -6411,10 +6418,6 @@ class LLShowFloater : public view_listener_t { gDebugView->mStatViewp->setVisible(!gDebugView->mStatViewp->getVisible()); } - else if (floater_name == "account history") - { - LLFloaterAccountHistory::show(NULL); - } else if (floater_name == "my land") { LLFloaterLandHoldings::show(NULL); @@ -8615,6 +8618,7 @@ void initialize_menu_actions() (new LLFileUploadAnim())->registerListener(gMenuHolder, "File.UploadAnim"); (new LLFileUploadBulk())->registerListener(gMenuHolder, "File.UploadBulk"); (new LLFileCloseWindow())->registerListener(gMenuHolder, "File.CloseWindow"); + (new LLFileEnableCloseWindow())->registerListener(gMenuHolder, "File.EnableCloseWindow"); (new LLFileSaveTexture())->registerListener(gMenuHolder, "File.SaveTexture"); (new LLFileTakeSnapshot())->registerListener(gMenuHolder, "File.TakeSnapshot"); (new LLFileTakeSnapshotToDisk())->registerListener(gMenuHolder, "File.TakeSnapshotToDisk"); diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp index 7a6b89fcda..59587ef13c 100644 --- a/indra/newview/llworldmap.cpp +++ b/indra/newview/llworldmap.cpp @@ -247,7 +247,6 @@ void LLWorldMap::setCurrentLayer(S32 layer, bool request_layer) if (!mMapLoaded[layer] || request_layer) { sendMapLayerRequest(); - sendItemRequest(MAP_ITEM_AGENT_COUNT); } if (mTelehubs.size() == 0 || @@ -698,12 +697,6 @@ void LLWorldMap::processMapItemReply(LLMessageSystem* msg, void**) gWorldMap->mClassifieds.push_back(new_item); break; } - case MAP_ITEM_AGENT_COUNT: // agent counts - { - // We only ever receive one per region, i.e. this update superceeds any others - gWorldMap->mNumAgents[new_item.mRegionHandle] = new_item.mExtra; - break; - } case MAP_ITEM_AGENT_LOCATIONS: // agent locations { if (!siminfo) diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 3644bd0640..10994d38d2 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -148,8 +148,7 @@ LLWorldMapView::LLWorldMapView(const std::string& name, const LLRect& rect ) mMouseDownPanY( 0 ), mMouseDownX( 0 ), mMouseDownY( 0 ), - mSelectIDStart(0), - mAgentCountsUpdateTime(0) + mSelectIDStart(0) { sPixelsPerMeter = gMapScale / REGION_WIDTH_METERS; clearLastClick(); @@ -279,12 +278,6 @@ void LLWorldMapView::draw() F64 current_time = LLTimer::getElapsedSeconds(); - if (current_time - mAgentCountsUpdateTime > AGENT_COUNTS_UPDATE_TIME) - { - gWorldMap->sendItemRequest(MAP_ITEM_AGENT_COUNT); - mAgentCountsUpdateTime = current_time; - } - mVisibleRegions.clear(); // animate pan if necessary diff --git a/indra/newview/llworldmapview.h b/indra/newview/llworldmapview.h index 7cf0f655a1..d0a6aeacb2 100644 --- a/indra/newview/llworldmapview.h +++ b/indra/newview/llworldmapview.h @@ -33,8 +33,9 @@ class LLTextBox; #define SIM_MAP_AGENT_SCALE 20 // width in pixels, where we start drawing agents #define SIM_MAP_SCALE 90 // width in pixels, where we start drawing sim tiles +// Updates for agent locations. #define AGENTS_UPDATE_TIME 60.0 // in seconds -#define AGENT_COUNTS_UPDATE_TIME 60.0 // in seconds + class LLWorldMapView : public LLPanel { @@ -164,7 +165,6 @@ public: static BOOL sHandledLastClick; S32 mSelectIDStart; - F64 mAgentCountsUpdateTime; typedef std::vector<U64> handle_list_t; handle_list_t mVisibleRegions; // set every frame |