diff options
Diffstat (limited to 'indra/newview')
133 files changed, 2201 insertions, 680 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 611875a1e2..e632cbaaf2 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -325,7 +325,7 @@ set(viewer_SOURCE_FILES llpanelmediasettingsgeneral.cpp llpanelmediasettingspermissions.cpp llpanelmediasettingssecurity.cpp - llpanelmeprofile.cpp + llpanelme.cpp llpanelobject.cpp llpanelobjectinventory.cpp llpaneloutfitsinventory.cpp @@ -821,7 +821,7 @@ set(viewer_HEADER_FILES llpanelmediasettingsgeneral.h llpanelmediasettingspermissions.h llpanelmediasettingssecurity.h - llpanelmeprofile.h + llpanelme.h llpanelobject.h llpanelobjectinventory.h llpaneloutfitsinventory.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 994e546bd0..075aee46c7 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -7722,10 +7722,10 @@ <key>Value</key> <integer>0</integer> </map> - <key>ShowCoordinatesOption</key> + <key>NavBarShowCoordinates</key> <map> <key>Comment</key> - <string>Show Coordinates in Location Input Field</string> + <string>Show coordinates in navigation bar</string> <key>Persist</key> <integer>1</integer> <key>Type</key> @@ -7733,6 +7733,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>NavBarShowParcelProperties</key> + <map> + <key>Comment</key> + <string>Show parcel property icons in navigation bar</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>ShowCrosshairs</key> <map> <key>Comment</key> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index e287958697..2644235114 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -2799,7 +2799,8 @@ void LLAgent::endAnimationUpdateUI() LLBottomTray::getInstance()->setVisible(TRUE); - LLSideTray::getInstance()->setVisible(TRUE); + LLSideTray::getInstance()->getButtonsPanel()->setVisible(TRUE); + LLSideTray::getInstance()->updateSidetrayVisibility(); LLPanelStandStopFlying::getInstance()->setVisible(TRUE); @@ -2897,7 +2898,8 @@ void LLAgent::endAnimationUpdateUI() LLBottomTray::getInstance()->setVisible(FALSE); - LLSideTray::getInstance()->setVisible(FALSE); + LLSideTray::getInstance()->getButtonsPanel()->setVisible(FALSE); + LLSideTray::getInstance()->updateSidetrayVisibility(); LLPanelStandStopFlying::getInstance()->setVisible(FALSE); diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp index 568ac4164a..7404fe5bc4 100644 --- a/indra/newview/llagentui.cpp +++ b/indra/newview/llagentui.cpp @@ -130,6 +130,7 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const // create a default name and description for the landmark std::string parcel_name = LLViewerParcelMgr::getInstance()->getAgentParcelName(); std::string region_name = region->getName(); + std::string sim_access_string = region->getSimAccessString(); std::string buffer; if( parcel_name.empty() ) { @@ -142,7 +143,13 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const case LOCATION_FORMAT_NORMAL: buffer = llformat("%s", region_name.c_str()); break; - case LOCATION_FORMAT_WITHOUT_SIM: + case LOCATION_FORMAT_NO_COORDS: + buffer = llformat("%s%s%s", + region_name.c_str(), + sim_access_string.empty() ? "" : " - ", + sim_access_string.c_str()); + break; + case LOCATION_FORMAT_NO_MATURITY: case LOCATION_FORMAT_FULL: buffer = llformat("%s (%d, %d, %d)", region_name.c_str(), @@ -161,14 +168,20 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const case LOCATION_FORMAT_NORMAL: buffer = llformat("%s, %s", parcel_name.c_str(), region_name.c_str()); break; - case LOCATION_FORMAT_WITHOUT_SIM: + case LOCATION_FORMAT_NO_MATURITY: buffer = llformat("%s, %s (%d, %d, %d)", parcel_name.c_str(), region_name.c_str(), pos_x, pos_y, pos_z); break; + case LOCATION_FORMAT_NO_COORDS: + buffer = llformat("%s, %s%s%s", + parcel_name.c_str(), + region_name.c_str(), + sim_access_string.empty() ? "" : " - ", + sim_access_string.c_str()); + break; case LOCATION_FORMAT_FULL: - std::string sim_access_string = region->getSimAccessString(); buffer = llformat("%s, %s (%d, %d, %d)%s%s", parcel_name.c_str(), region_name.c_str(), diff --git a/indra/newview/llagentui.h b/indra/newview/llagentui.h index c7aafb71e7..3478793e38 100644 --- a/indra/newview/llagentui.h +++ b/indra/newview/llagentui.h @@ -38,10 +38,11 @@ class LLAgentUI public: enum ELocationFormat { - LOCATION_FORMAT_NORMAL, - LOCATION_FORMAT_LANDMARK, - LOCATION_FORMAT_WITHOUT_SIM, - LOCATION_FORMAT_FULL, + LOCATION_FORMAT_NORMAL, // Parcel + LOCATION_FORMAT_LANDMARK, // Parcel, Region + LOCATION_FORMAT_NO_MATURITY, // Parcel, Region (x, y, z) + LOCATION_FORMAT_NO_COORDS, // Parcel, Region - Maturity + LOCATION_FORMAT_FULL, // Parcel, Region (x, y, z) - Maturity }; static void buildName(std::string& name); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 7dd3c2ffd4..3e10c4b2b0 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -799,13 +799,6 @@ bool LLAppViewer::init() // call all self-registered classes LLInitClassList::instance().fireCallbacks(); - #if LL_LCD_COMPILE - // start up an LCD window on a logitech keyboard, if there is one - HINSTANCE hInstance = GetModuleHandle(NULL); - gLcdScreen = new LLLCD(hInstance); - CreateLCDDebugWindows(); -#endif - LLFolderViewItem::initClass(); // SJB: Needs to happen after initWindow(), not sure why but related to fonts gGLManager.getGLInfo(gDebugInfo); diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index eb8f069345..b08191ce15 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -297,7 +297,7 @@ void LLAvatarActions::showProfile(const LLUUID& id) //Show own profile if(gAgent.getID() == id) { - LLSideTray::getInstance()->showPanel("panel_me_profile", params); + LLSideTray::getInstance()->showPanel("panel_me", params); } //Show other user profile else diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 422aae3c25..2c9b38b82a 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -33,11 +33,9 @@ #include "llviewerprecompiledheaders.h" #include "llchathistory.h" #include "llpanel.h" -#include "lltextbox.h" #include "lluictrlfactory.h" #include "llscrollcontainer.h" #include "llavatariconctrl.h" - #include "llimview.h" #include "llcallingcard.h" //for LLAvatarTracker #include "llagentdata.h" @@ -185,11 +183,10 @@ public: mSourceType = CHAT_SOURCE_SYSTEM; } - LLTextBox* userName = getChild<LLTextBox>("user_name"); + LLTextEditor* userName = getChild<LLTextEditor>("user_name"); - LLUIColor color = style_params.color; - userName->setReadOnlyColor(color); - userName->setColor(color); + userName->setReadOnlyColor(style_params.readonly_color()); + userName->setColor(style_params.color()); if(!chat.mFromName.empty()) { @@ -202,10 +199,8 @@ public: userName->setValue(SL); } + setTimeField(chat.mTimeStr); - LLTextBox* timeBox = getChild<LLTextBox>("time_box"); - timeBox->setValue(chat.mTimeStr); - LLAvatarIconCtrl* icon = getChild<LLAvatarIconCtrl>("avatar_icon"); if(mSourceType != CHAT_SOURCE_AGENT) @@ -271,7 +266,28 @@ protected: } } - +private: + void setTimeField(const std::string& time_value) + { + LLTextBox* time_box = getChild<LLTextBox>("time_box"); + + LLRect rect_before = time_box->getRect(); + time_box->setValue(time_value); + + // set necessary textbox width to fit all text + time_box->reshapeToFitText(); + LLRect rect_after = time_box->getRect(); + + // move rect to the left to correct position... + S32 delta_pos_x = rect_before.getWidth() - rect_after.getWidth(); + S32 delta_pos_y = rect_before.getHeight() - rect_after.getHeight(); + time_box->translate(delta_pos_x, delta_pos_y); + + //... & change width of the name control + LLTextBox* user_name = getChild<LLTextBox>("user_name"); + const LLRect& user_rect = user_name->getRect(); + user_name->reshape(user_rect.getWidth() + delta_pos_x, user_rect.getHeight()); + } protected: LLHandle<LLView> mPopupMenuHandleAvatar; diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 433f70700c..90f246ddaf 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -165,7 +165,7 @@ LLChiclet::~LLChiclet() boost::signals2::connection LLChiclet::setLeftButtonClickCallback( const commit_callback_t& cb) { - return mCommitSignal.connect(cb); + return setCommitCallback(cb); } BOOL LLChiclet::handleMouseDown(S32 x, S32 y, MASK mask) @@ -985,7 +985,10 @@ void LLChicletPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param) void LLChicletPanel::onChicletClick(LLUICtrl*ctrl,const LLSD¶m) { - mCommitSignal(ctrl,param); + if (mCommitSignal) + { + (*mCommitSignal)(ctrl,param); + } } void LLChicletPanel::removeChiclet(chiclet_list_t::iterator it) @@ -1290,7 +1293,7 @@ void LLChicletPanel::onRightScrollHeldDown() boost::signals2::connection LLChicletPanel::setChicletClickedCallback( const commit_callback_t& cb) { - return mCommitSignal.connect(cb); + return setCommitCallback(cb); } BOOL LLChicletPanel::handleScrollWheel(S32 x, S32 y, S32 clicks) diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index ae5be8cc7c..8406ddeeca 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -232,13 +232,15 @@ public: virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) { - mMouseDownSignal(this, x, y, mask); + if (mMouseDownSignal) + (*mMouseDownSignal)(this, x, y, mask); return LLMenuItemCallGL::handleMouseDown(x, y, mask); } virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) { - mMouseUpSignal(this, x, y, mask); + if (mMouseUpSignal) + (*mMouseUpSignal)(this, x, y, mask); return LLMenuItemCallGL::handleMouseUp(x, y, mask); } diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 467796b4a3..976aaf8044 100644 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -903,7 +903,7 @@ void LLFloaterBuyLandUI::tellUserError( // virtual BOOL LLFloaterBuyLandUI::postBuild() { - mVisibleSignal.connect(boost::bind(&LLFloaterBuyLandUI::onVisibilityChange, this, _2)); + setVisibleCallback(boost::bind(&LLFloaterBuyLandUI::onVisibilityChange, this, _2)); mCurrency.prepare(); diff --git a/indra/newview/llfloaterchat.cpp b/indra/newview/llfloaterchat.cpp index 58025ef78b..57bb93d81a 100644 --- a/indra/newview/llfloaterchat.cpp +++ b/indra/newview/llfloaterchat.cpp @@ -129,7 +129,7 @@ void LLFloaterChat::draw() BOOL LLFloaterChat::postBuild() { // Hide the chat overlay when our history is visible. - mVisibleSignal.connect(boost::bind(&LLFloaterChat::updateConsoleVisibility, this)); + setVisibleCallback(boost::bind(&LLFloaterChat::updateConsoleVisibility, this)); mPanel = (LLPanelActiveSpeakers*)getChild<LLPanel>("active_speakers_panel"); diff --git a/indra/newview/llfloaterchatterbox.cpp b/indra/newview/llfloaterchatterbox.cpp index fbf09207fe..1b14ca573a 100644 --- a/indra/newview/llfloaterchatterbox.cpp +++ b/indra/newview/llfloaterchatterbox.cpp @@ -114,7 +114,7 @@ LLFloaterChatterBox::~LLFloaterChatterBox() BOOL LLFloaterChatterBox::postBuild() { - mVisibleSignal.connect(boost::bind(&LLFloaterChatterBox::onVisibilityChange, this, _2)); + setVisibleCallback(boost::bind(&LLFloaterChatterBox::onVisibilityChange, this, _2)); if (gSavedSettings.getBOOL("ContactsTornOff")) { diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 22d6098d5b..d855ab1dfa 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -239,7 +239,7 @@ LLFloaterLand::LLFloaterLand(const LLSD& seed) BOOL LLFloaterLand::postBuild() { - mVisibleSignal.connect(boost::bind(&LLFloaterLand::onVisibilityChange, this, _2)); + setVisibleCallback(boost::bind(&LLFloaterLand::onVisibilityChange, this, _2)); LLTabContainer* tab = getChild<LLTabContainer>("landtab"); diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp index 43fbe362d5..750a9d478f 100644 --- a/indra/newview/llglsandbox.cpp +++ b/indra/newview/llglsandbox.cpp @@ -67,7 +67,10 @@ #include "llresmgr.h" #include "pipeline.h" #include "llspatialpartition.h" - + +// Height of the yellow selection highlight posts for land +const F32 PARCEL_POST_HEIGHT = 0.666f; + BOOL LLAgent::setLookAt(ELookAtType target_type, LLViewerObject *object, LLVector3 position) { if(object && object->isAttachment()) diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index 0626a5c3d3..59537c1e65 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -52,6 +52,7 @@ #include "llviewerwindow.h" #include "llpanelgroup.h" #include "llgroupactions.h" +#include "llnotifications.h" #include "lluictrlfactory.h" #include <boost/regex.hpp> diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 795770d3db..ee93a9349a 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -110,10 +110,10 @@ void LLIMFloater::onFocusReceived() // virtual void LLIMFloater::onClose(bool app_quitting) { - if (!gIMMgr->hasSession(mSessionID)) return; - setTyping(false); - gIMMgr->leaveSession(mSessionID); + // SJB: We want the close button to hide the session window, not end it + // *NOTE: Yhis is functional, but not ideal - it's still closing the floater; we really want to change the behavior of the X button instead. + //gIMMgr->leaveSession(mSessionID); } /* static */ diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index 87b801d73b..e6ded5f371 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -216,7 +216,7 @@ LLFloaterIMPanel::~LLFloaterIMPanel() BOOL LLFloaterIMPanel::postBuild() { - mVisibleSignal.connect(boost::bind(&LLFloaterIMPanel::onVisibilityChange, this, _2)); + setVisibleCallback(boost::bind(&LLFloaterIMPanel::onVisibilityChange, this, _2)); mInputEditor = getChild<LLLineEditor>("chat_editor"); mInputEditor->setFocusReceivedCallback( boost::bind(onInputEditorFocusReceived, _1, this) ); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index c066f1f77a..ffa943092f 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -71,6 +71,7 @@ #include "llviewermessage.h" #include "llviewerwindow.h" #include "llnotify.h" +#include "llnearbychat.h" #include "llviewerregion.h" #include "llvoicechannel.h" #include "lltrans.h" @@ -1611,6 +1612,12 @@ void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& mess LLChat chat(message); chat.mSourceType = CHAT_SOURCE_SYSTEM; LLFloaterChat::addChatHistory(chat); + + LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD()); + if(nearby_chat) + { + nearby_chat->addMessage(chat); + } } else // going to IM session { diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h index 3a083e913b..73b25a8ed0 100644 --- a/indra/newview/llinventoryobserver.h +++ b/indra/newview/llinventoryobserver.h @@ -113,7 +113,7 @@ public: bool isEverythingComplete() const; void fetchItems(const item_ref_t& ids); - virtual void done() = 0; + virtual void done() {}; protected: bool mRetryIfMissing; diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 47201b2ccc..0c893dddd6 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -156,6 +156,8 @@ BOOL LLInventoryPanel::postBuild() initializeViews(); } + gIdleCallbacks.addFunction(onIdle, (void*)this); + if (mSortOrderSetting != INHERIT_SORT_ORDER) { setSortOrder(gSavedSettings.getU32(mSortOrderSetting)); @@ -255,13 +257,11 @@ void LLInventoryPanel::modelChanged(U32 mask) bool handled = false; - // inventory just initialized, do complete build - if ((mask & LLInventoryObserver::ADD) && mInventory->isInventoryUsable() && gInventory.getChangedIDs().empty() && !mViewsInitialized) + if (!mViewsInitialized) { - initializeViews(); return; } - + if (mask & LLInventoryObserver::LABEL) { handled = true; @@ -328,22 +328,26 @@ void LLInventoryPanel::modelChanged(U32 mask) // around in the panel's directory structure (i.e. reparented). if (model_item && view_item) { - LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID()); - - // Item has been moved. - if (view_item->getParentFolder() != new_parent) + // Don't process the item if it's hanging from the root, since its + // model_item's parent will be NULL. + if (view_item->getRoot() != view_item->getParent()) { - if (new_parent != NULL) - { - // Item is to be moved and we found its new parent in the panel's directory, so move the item's UI. - view_item->getParentFolder()->extractItem(view_item); - view_item->addToFolder(new_parent, mFolders); - } - else + LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID()); + // Item has been moved. + if (view_item->getParentFolder() != new_parent) { - // Item is to be moved outside the panel's directory (e.g. moved to trash for a panel that - // doesn't include trash). Just remove the item's UI. - view_item->destroyView(); + if (new_parent != NULL) + { + // Item is to be moved and we found its new parent in the panel's directory, so move the item's UI. + view_item->getParentFolder()->extractItem(view_item); + view_item->addToFolder(new_parent, mFolders); + } + else + { + // Item is to be moved outside the panel's directory (e.g. moved to trash for a panel that + // doesn't include trash). Just remove the item's UI. + view_item->destroyView(); + } } } } @@ -367,6 +371,20 @@ void LLInventoryPanel::modelChanged(U32 mask) } } +// static +void LLInventoryPanel::onIdle(void *userdata) +{ + LLInventoryPanel *self = (LLInventoryPanel*)userdata; + // inventory just initialized, do complete build + if (!self->mViewsInitialized && gInventory.isInventoryUsable()) + { + self->initializeViews(); + } + if (self->mViewsInitialized) + { + gIdleCallbacks.deleteFunction(onIdle, (void*)self); + } +} void LLInventoryPanel::initializeViews() { diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 5b1104936d..fd23b375fa 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -160,6 +160,8 @@ public: void openSelected(); void unSelectAll() { mFolders->setSelection(NULL, FALSE, FALSE); } + static void onIdle(void* user_data); + private: // Given the id and the parent, build all of the folder views. diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index 9aefbcbbb0..6b28edf0b6 100644 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -52,6 +52,7 @@ #include "llteleporthistory.h" #include "llsidetray.h" #include "llslurl.h" +#include "llstatusbar.h" // getHealth() #include "lltrans.h" #include "llviewerinventory.h" #include "llviewerparcelmgr.h" @@ -157,15 +158,22 @@ LLLocationInputCtrl::Params::Params() add_landmark_image_disabled("add_landmark_image_disabled"), add_landmark_image_hover("add_landmark_image_hover"), add_landmark_image_selected("add_landmark_image_selected"), + icon_hpad("icon_hpad", 0), add_landmark_button("add_landmark_button"), - add_landmark_hpad("add_landmark_hpad", 0), - info_button("info_button") + info_button("info_button"), + voice_icon("voice_icon"), + fly_icon("fly_icon"), + push_icon("push_icon"), + build_icon("build_icon"), + scripts_icon("scripts_icon"), + damage_icon("damage_icon"), + damage_text("damage_text") { } LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p) : LLComboBox(p), - mAddLandmarkHPad(p.add_landmark_hpad), + mIconHPad(p.icon_hpad), mInfoBtn(NULL), mLocationContextMenu(NULL), mAddLandmarkBtn(NULL), @@ -193,7 +201,7 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p) params.commit_on_focus_lost(false); params.follows.flags(FOLLOWS_ALL); mTextEntry = LLUICtrlFactory::create<LLURLLineEditor>(params); - this->addChild(mTextEntry); + addChild(mTextEntry); // LLLineEditor is replaced with LLLocationLineEditor // "Place information" button. @@ -229,6 +237,35 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p) mAddLandmarkBtn = LLUICtrlFactory::create<LLButton>(al_params); enableAddLandmarkButton(true); addChild(mAddLandmarkBtn); + + // Parcel property icons + LLIconCtrl::Params voice_icon = p.voice_icon; + mParcelIcon[VOICE_ICON] = LLUICtrlFactory::create<LLIconCtrl>(voice_icon); + addChild(mParcelIcon[VOICE_ICON]); + + LLIconCtrl::Params fly_icon = p.fly_icon; + mParcelIcon[FLY_ICON] = LLUICtrlFactory::create<LLIconCtrl>(fly_icon); + addChild(mParcelIcon[FLY_ICON]); + + LLIconCtrl::Params push_icon = p.push_icon; + mParcelIcon[PUSH_ICON] = LLUICtrlFactory::create<LLIconCtrl>(push_icon); + addChild(mParcelIcon[PUSH_ICON]); + + LLIconCtrl::Params build_icon = p.build_icon; + mParcelIcon[BUILD_ICON] = LLUICtrlFactory::create<LLIconCtrl>(build_icon); + addChild(mParcelIcon[BUILD_ICON]); + + LLIconCtrl::Params scripts_icon = p.scripts_icon; + mParcelIcon[SCRIPTS_ICON] = LLUICtrlFactory::create<LLIconCtrl>(scripts_icon); + addChild(mParcelIcon[SCRIPTS_ICON]); + + LLIconCtrl::Params damage_icon = p.damage_icon; + mParcelIcon[DAMAGE_ICON] = LLUICtrlFactory::create<LLIconCtrl>(damage_icon); + addChild(mParcelIcon[DAMAGE_ICON]); + + LLTextBox::Params damage_text = p.damage_text; + mDamageText = LLUICtrlFactory::create<LLTextBox>(damage_text); + addChild(mDamageText); // Register callbacks and load the location field context menu (NB: the order matters). LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Navbar.Action", boost::bind(&LLLocationInputCtrl::onLocationContextMenuItemClicked, this, _2)); @@ -372,11 +409,8 @@ void LLLocationInputCtrl::onTextEntry(LLLineEditor* line_editor) */ void LLLocationInputCtrl::setText(const LLStringExplicit& text) { - if (mTextEntry) - { - mTextEntry->setText(text); - mHasAutocompletedText = FALSE; - } + mTextEntry->setText(text); + mHasAutocompletedText = FALSE; } void LLLocationInputCtrl::setFocus(BOOL b) @@ -409,11 +443,20 @@ void LLLocationInputCtrl::onFocusLost() mTextEntry->deselect(); } } -void LLLocationInputCtrl::draw(){ - - if(!hasFocus() && gSavedSettings.getBOOL("ShowCoordinatesOption")){ + +void LLLocationInputCtrl::draw() +{ + static LLUICachedControl<bool> show_coords("NavBarShowCoordinates", false); + if(!hasFocus() && show_coords) + { refreshLocation(); } + + static LLUICachedControl<bool> show_icons("NavBarShowParcelProperties", false); + if (show_icons) + { + refreshHealth(); + } LLComboBox::draw(); } @@ -510,10 +553,12 @@ void LLLocationInputCtrl::onLocationPrearrange(const LLSD& data) mList->mouseOverHighlightNthItem(-1); // Clear highlight on the last selected item. } + bool LLLocationInputCtrl::findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter) { return item.mTitle.find(filter) != std::string::npos; } + void LLLocationInputCtrl::onTextEditorRightClicked(S32 x, S32 y, MASK mask) { if (mLocationContextMenu) @@ -531,6 +576,7 @@ void LLLocationInputCtrl::onTextEditorRightClicked(S32 x, S32 y, MASK mask) void LLLocationInputCtrl::refresh() { refreshLocation(); // update location string + refreshParcelIcons(); updateAddLandmarkButton(); // indicate whether current parcel has been landmarked } @@ -547,13 +593,98 @@ void LLLocationInputCtrl::refreshLocation() // Update location field. std::string location_name; - LLAgentUI::ELocationFormat format = (gSavedSettings.getBOOL("ShowCoordinatesOption") ? - LLAgentUI::LOCATION_FORMAT_WITHOUT_SIM: LLAgentUI::LOCATION_FORMAT_NORMAL); + LLAgentUI::ELocationFormat format = + (gSavedSettings.getBOOL("NavBarShowCoordinates") + ? LLAgentUI::LOCATION_FORMAT_FULL + : LLAgentUI::LOCATION_FORMAT_NO_COORDS); - if (!LLAgentUI::buildLocationString(location_name, format)) location_name = "Unknown"; + if (!LLAgentUI::buildLocationString(location_name, format)) + { + location_name = "???"; + } setText(location_name); } +void LLLocationInputCtrl::refreshParcelIcons() +{ + // Our "cursor" moving right to left + S32 x = mAddLandmarkBtn->getRect().mLeft - mIconHPad; + + static LLUICachedControl<bool> show_properties("NavBarShowParcelProperties", false); + if (show_properties) + { + LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance(); + // *TODO buy + //bool allow_buy = vpm->canAgentBuyParcel( vpm->getAgentParcel(), false); + bool allow_voice = vpm->allowAgentVoice(); + bool allow_fly = vpm->allowAgentFly(); + bool allow_push = vpm->allowAgentPush(); + bool allow_build = vpm->allowAgentBuild(); + bool allow_scripts = vpm->allowAgentScripts(); + bool allow_damage = vpm->allowAgentDamage(); + + // Most icons are "block this ability" + mParcelIcon[VOICE_ICON]->setVisible( !allow_voice ); + mParcelIcon[FLY_ICON]->setVisible( !allow_fly ); + mParcelIcon[PUSH_ICON]->setVisible( !allow_push ); + mParcelIcon[BUILD_ICON]->setVisible( !allow_build ); + mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts ); + mParcelIcon[DAMAGE_ICON]->setVisible( allow_damage ); + mDamageText->setVisible(allow_damage); + + // Slide the parcel icons rect from right to left, adjusting rectangles of + // visible icons. Assumes all icon rects are the same. + for (S32 i = 0; i < ICON_COUNT; ++i) + { + LLIconCtrl* icon = mParcelIcon[i]; + if (icon->getVisible()) + { + LLRect r = icon->getRect(); + r.mLeft = x - r.getWidth(); + r.mRight = x; + icon->setRect( r ); + x -= r.getWidth() + mIconHPad; + } + } + LLRect text_rect = mDamageText->getRect(); + text_rect.mLeft = x - text_rect.getWidth(); + text_rect.mRight = x; + mDamageText->setRect(text_rect); + x -= text_rect.getWidth() + mIconHPad; + } + else + { + for (S32 i = 0; i < ICON_COUNT; ++i) + { + mParcelIcon[i]->setVisible(false); + } + mDamageText->setVisible(false); + } + + S32 left_pad, right_pad; + mTextEntry->getTextPadding(&left_pad, &right_pad); + right_pad = mTextEntry->getRect().mRight - x; + llinfos << "JAMESDEBUG text entry rect " << mTextEntry->getRect() + << " x " << x << " left_pad " << left_pad << " right_pad " << right_pad << llendl; + mTextEntry->setTextPadding(left_pad, right_pad); +} + +void LLLocationInputCtrl::refreshHealth() +{ + // *FIXME: Status bar owns health information, should be in agent + if (gStatusBar) + { + static S32 last_health = -1; + S32 health = gStatusBar->getHealth(); + if (health != last_health) + { + std::string text = llformat("%d%%", health); + mDamageText->setText(text); + last_health = health; + } + } +} + void LLLocationInputCtrl::rebuildLocationHistory(std::string filter) { LLLocationHistory::location_list_t filtered_items; @@ -650,13 +781,11 @@ void LLLocationInputCtrl::updateWidgetlayout() mInfoBtn->setRect(info_btn_rect); // "Add Landmark" button - { - LLRect al_btn_rect = mAddLandmarkBtn->getRect(); - al_btn_rect.translate( - hist_btn_rect.mLeft - mAddLandmarkHPad - al_btn_rect.getWidth(), - (rect.getHeight() - al_btn_rect.getHeight()) / 2); - mAddLandmarkBtn->setRect(al_btn_rect); - } + LLRect al_btn_rect = mAddLandmarkBtn->getRect(); + al_btn_rect.translate( + hist_btn_rect.mLeft - mIconHPad - al_btn_rect.getWidth(), + (rect.getHeight() - al_btn_rect.getHeight()) / 2); + mAddLandmarkBtn->setRect(al_btn_rect); } void LLLocationInputCtrl::changeLocationPresentation() @@ -677,11 +806,17 @@ void LLLocationInputCtrl::onLocationContextMenuItemClicked(const LLSD& userdata) { std::string item = userdata.asString(); - if (item == std::string("show_coordinates")) + if (item == "show_coordinates") + { + gSavedSettings.setBOOL("NavBarShowCoordinates",!gSavedSettings.getBOOL("NavBarShowCoordinates")); + } + else if (item == "show_properties") { - gSavedSettings.setBOOL("ShowCoordinatesOption",!gSavedSettings.getBOOL("ShowCoordinatesOption")); + gSavedSettings.setBOOL("NavBarShowParcelProperties", + !gSavedSettings.getBOOL("NavBarShowParcelProperties")); + refreshParcelIcons(); } - else if (item == std::string("landmark")) + else if (item == "landmark") { LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos(); @@ -695,23 +830,23 @@ void LLLocationInputCtrl::onLocationContextMenuItemClicked(const LLSD& userdata) LLSD().insert("type", "landmark").insert("id",landmark->getUUID())); } } - else if (item == std::string("cut")) + else if (item == "cut") { mTextEntry->cut(); } - else if (item == std::string("copy")) + else if (item == "copy") { mTextEntry->copy(); } - else if (item == std::string("paste")) + else if (item == "paste") { mTextEntry->paste(); } - else if (item == std::string("delete")) + else if (item == "delete") { mTextEntry->deleteSelection(); } - else if (item == std::string("select_all")) + else if (item == "select_all") { mTextEntry->selectAll(); } @@ -721,29 +856,29 @@ bool LLLocationInputCtrl::onLocationContextMenuItemEnabled(const LLSD& userdata) { std::string item = userdata.asString(); - if (item == std::string("can_cut")) + if (item == "can_cut") { return mTextEntry->canCut(); } - else if (item == std::string("can_copy")) + else if (item == "can_copy") { return mTextEntry->canCopy(); } - else if (item == std::string("can_paste")) + else if (item == "can_paste") { return mTextEntry->canPaste(); } - else if (item == std::string("can_delete")) + else if (item == "can_delete") { return mTextEntry->canDeselect(); } - else if (item == std::string("can_select_all")) + else if (item == "can_select_all") { return mTextEntry->canSelectAll(); } - else if(item == std::string("show_coordinates")){ - - return gSavedSettings.getBOOL("ShowCoordinatesOption"); + else if(item == "show_coordinates") + { + return gSavedSettings.getBOOL("NavBarShowCoordinates"); } return false; diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h index 44dc0cb251..3bd23e80a9 100644 --- a/indra/newview/lllocationinputctrl.h +++ b/indra/newview/lllocationinputctrl.h @@ -33,7 +33,9 @@ #ifndef LL_LLLOCATIONINPUTCTRL_H #define LL_LLLOCATIONINPUTCTRL_H -#include <llcombobox.h> +#include "llcombobox.h" +#include "lliconctrl.h" // Params +#include "lltextbox.h" // Params class LLLandmark; @@ -63,9 +65,16 @@ public: add_landmark_image_disabled, add_landmark_image_hover, add_landmark_image_selected; - Optional<S32> add_landmark_hpad; + Optional<S32> icon_hpad; Optional<LLButton::Params> add_landmark_button, info_button; + Optional<LLIconCtrl::Params> voice_icon, + fly_icon, + push_icon, + build_icon, + scripts_icon, + damage_icon; + Optional<LLTextBox::Params> damage_text; Params(); }; @@ -103,6 +112,10 @@ private: void enableAddLandmarkButton(bool val); void refresh(); void refreshLocation(); + void refreshParcelIcons(); + // Refresh the value in the health percentage text field + void refreshHealth(); + void rebuildLocationHistory(std::string filter = ""); bool findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter); void setText(const LLStringExplicit& text); @@ -126,7 +139,20 @@ private: LLMenuGL* mLocationContextMenu; LLButton* mAddLandmarkBtn; LLButton* mInfoBtn; - S32 mAddLandmarkHPad; + S32 mIconHPad; + + enum EParcelIcon + { + VOICE_ICON = 0, + FLY_ICON, + PUSH_ICON, + BUILD_ICON, + SCRIPTS_ICON, + DAMAGE_ICON, + ICON_COUNT + }; + LLIconCtrl* mParcelIcon[ICON_COUNT]; + LLTextBox* mDamageText; LLAddLandmarkObserver* mAddLandmarkObserver; LLRemoveLandmarkObserver* mRemoveLandmarkObserver; diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 5cd40273f6..2376a3581d 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -356,7 +356,7 @@ void LLMediaCtrl::onFocusLost() // BOOL LLMediaCtrl::postBuild () { - mVisibleSignal.connect(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2)); + setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2)); return TRUE; } diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 93db337053..9e46a4422a 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -586,7 +586,8 @@ void LLPanelStandStopFlying::setVisible(BOOL visible) updatePosition(); } - LLPanel::setVisible(visible); + //change visibility of parent layout_panel to animate in/out + if (getParent()) getParent()->setVisible(visible); } BOOL LLPanelStandStopFlying::handleToolTip(S32 x, S32 y, MASK mask) diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index c032d01d2f..41376c4c09 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -238,6 +238,16 @@ BOOL LLNavigationBar::postBuild() return TRUE; } +void LLNavigationBar::setVisible(BOOL visible) +{ + // change visibility of grandparent layout_panel to animate in and out + if (getParent() && getParent()->getParent()) + { + getParent()->getParent()->setVisible(visible); + } +} + + void LLNavigationBar::fillSearchComboBox() { if(!mSearchComboBox) @@ -425,7 +435,7 @@ void LLNavigationBar::onTeleportFinished(const LLVector3d& global_agent_pos) * At this moment gAgent.getPositionAgent() contains previous coordinates. * according to EXT-65 agent position is being reseted on each frame. */ - LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_WITHOUT_SIM, + LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_NO_MATURITY, gAgent.getPosAgentFromGlobal(global_agent_pos)); std::string tooltip (LLSLURL::buildSLURLfromPosGlobal(gAgent.getRegion()->getName(), global_agent_pos, false)); diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h index cd3ba08db3..9d0687f193 100644 --- a/indra/newview/llnavigationbar.h +++ b/indra/newview/llnavigationbar.h @@ -56,6 +56,7 @@ public: /*virtual*/ void draw(); /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); /*virtual*/ BOOL postBuild(); + /*virtual*/ void setVisible(BOOL visible); void handleLoginComplete(); void clearHistoryCache(); diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index 110e05c7ab..f29a7b25a7 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -120,7 +120,7 @@ BOOL LLDropTarget::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, static LLDefaultChildRegistry::Register<LLDropTarget> r("drop_target"); static LLRegisterPanelClassWrapper<LLPanelAvatarProfile> t_panel_profile("panel_profile"); -static LLRegisterPanelClassWrapper<LLPanelAvatarMeProfile> t_panel_me_profile("panel_me_profile"); +static LLRegisterPanelClassWrapper<LLPanelMyProfile> t_panel_my_profile("panel_my_profile"); static LLRegisterPanelClassWrapper<LLPanelAvatarNotes> t_panel_notes("panel_notes"); //----------------------------------------------------------------------------- @@ -360,7 +360,7 @@ void LLPanelAvatarProfile::onOpen(const LLSD& key) { LLPanelProfileTab::onOpen(key); - mGroups.erase(); + mGroups.clear(); //Disable "Add Friend" button for friends. childSetEnabled("add_friend", !LLAvatarActions::isFriend(getAvatarId())); @@ -392,7 +392,7 @@ void LLPanelAvatarProfile::resetControls() void LLPanelAvatarProfile::resetData() { - mGroups.erase(); + mGroups.clear(); childSetValue("2nd_life_pic",LLUUID::null); childSetValue("real_world_pic",LLUUID::null); childSetValue("online_status",LLStringUtil::null); @@ -444,23 +444,29 @@ void LLPanelAvatarProfile::processGroupProperties(const LLAvatarGroups* avatar_g // Group properties may arrive in two callbacks, we need to save them across // different calls. We can't do that in textbox as textbox may change the text. - std::string groups = mGroups; LLAvatarGroups::group_list_t::const_iterator it = avatar_groups->group_list.begin(); const LLAvatarGroups::group_list_t::const_iterator it_end = avatar_groups->group_list.end(); - if(groups.empty() && it_end != it) - { - groups = (*it).group_name; - ++it; - } for(; it_end != it; ++it) { LLAvatarGroups::LLGroupData group_data = *it; - groups += ", "; - groups += group_data.group_name; + + // Check if there is no duplicates for this group + if (std::find(mGroups.begin(), mGroups.end(), group_data.group_name) == mGroups.end()) + mGroups.push_back(group_data.group_name); + } + + // Creating string, containing group list + std::string groups = ""; + for (group_list_t::const_iterator it = mGroups.begin(); it != mGroups.end(); ++it) + { + if (it != mGroups.begin()) + groups += ", "; + + groups += *it; } - mGroups = groups; - childSetValue("sl_groups",mGroups); + + childSetValue("sl_groups", groups); } void LLPanelAvatarProfile::fillCommonData(const LLAvatarData* avatar_data) @@ -595,19 +601,19 @@ void LLPanelAvatarProfile::onOverflowButtonClicked() ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// -LLPanelAvatarMeProfile::LLPanelAvatarMeProfile() +LLPanelMyProfile::LLPanelMyProfile() : LLPanelAvatarProfile() { } -BOOL LLPanelAvatarMeProfile::postBuild() +BOOL LLPanelMyProfile::postBuild() { LLPanelAvatarProfile::postBuild(); mStatusCombobox = getChild<LLComboBox>("status_combo"); - childSetCommitCallback("status_combo", boost::bind(&LLPanelAvatarMeProfile::onStatusChanged, this), NULL); - childSetCommitCallback("status_me_message_text", boost::bind(&LLPanelAvatarMeProfile::onStatusMessageChanged, this), NULL); + childSetCommitCallback("status_combo", boost::bind(&LLPanelMyProfile::onStatusChanged, this), NULL); + childSetCommitCallback("status_me_message_text", boost::bind(&LLPanelMyProfile::onStatusMessageChanged, this), NULL); resetControls(); resetData(); @@ -615,12 +621,12 @@ BOOL LLPanelAvatarMeProfile::postBuild() return TRUE; } -void LLPanelAvatarMeProfile::onOpen(const LLSD& key) +void LLPanelMyProfile::onOpen(const LLSD& key) { LLPanelProfileTab::onOpen(key); } -void LLPanelAvatarMeProfile::processProfileProperties(const LLAvatarData* avatar_data) +void LLPanelMyProfile::processProfileProperties(const LLAvatarData* avatar_data) { fillCommonData(avatar_data); @@ -631,7 +637,7 @@ void LLPanelAvatarMeProfile::processProfileProperties(const LLAvatarData* avatar fillAccountStatus(avatar_data); } -void LLPanelAvatarMeProfile::fillStatusData(const LLAvatarData* avatar_data) +void LLPanelMyProfile::fillStatusData(const LLAvatarData* avatar_data) { std::string status; if (gAgent.getAFK()) @@ -650,7 +656,7 @@ void LLPanelAvatarMeProfile::fillStatusData(const LLAvatarData* avatar_data) mStatusCombobox->setValue(status); } -void LLPanelAvatarMeProfile::resetControls() +void LLPanelMyProfile::resetControls() { childSetVisible("status_panel", false); childSetVisible("profile_buttons_panel", false); @@ -660,7 +666,7 @@ void LLPanelAvatarMeProfile::resetControls() childSetVisible("profile_me_buttons_panel", true); } -void LLPanelAvatarMeProfile::onStatusChanged() +void LLPanelMyProfile::onStatusChanged() { LLSD::String status = mStatusCombobox->getValue().asString(); @@ -682,7 +688,7 @@ void LLPanelAvatarMeProfile::onStatusChanged() } } -void LLPanelAvatarMeProfile::onStatusMessageChanged() +void LLPanelMyProfile::onStatusMessageChanged() { updateData(); } diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h index 587b9cabe9..527e1c0d34 100644 --- a/indra/newview/llpanelavatar.h +++ b/indra/newview/llpanelavatar.h @@ -47,7 +47,7 @@ enum EOnlineStatus }; /** -* Base class for any Profile View or Me Profile Panel. +* Base class for any Profile View or My Profile Panel. */ class LLPanelProfileTab : public LLPanel @@ -148,7 +148,7 @@ protected: virtual void processGroupProperties(const LLAvatarGroups* avatar_groups); /** - * Fills common for Avatar profile and Me Profile fields. + * Fills common for Avatar profile and My Profile fields. */ virtual void fillCommonData(const LLAvatarData* avatar_data); @@ -188,18 +188,20 @@ protected: private: - std::string mGroups; + typedef std::list<std::string> group_list_t; + group_list_t mGroups; + LLToggleableMenu* mProfileMenu; }; /** * Panel for displaying own first and second life related info. */ -class LLPanelAvatarMeProfile +class LLPanelMyProfile : public LLPanelAvatarProfile { public: - LLPanelAvatarMeProfile(); + LLPanelMyProfile(); /*virtual*/ BOOL postBuild(); diff --git a/indra/newview/llpanelavatartag.cpp b/indra/newview/llpanelavatartag.cpp index 03ad19f911..7563cc7f61 100644 --- a/indra/newview/llpanelavatartag.cpp +++ b/indra/newview/llpanelavatartag.cpp @@ -92,7 +92,7 @@ void LLPanelAvatarTag::setAvatarId(const LLUUID& avatar_id) boost::signals2::connection LLPanelAvatarTag::setLeftButtonClickCallback( const commit_callback_t& cb) { - return mCommitSignal.connect(cb); + return setCommitCallback(cb); } BOOL LLPanelAvatarTag::handleMouseDown(S32 x, S32 y, MASK mask) diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 78f3469f0e..ec0f8e303c 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -391,6 +391,10 @@ LLPanelLogin::~LLPanelLogin() //// We know we're done with the image, so be rid of it. //gTextureList.deleteImage( mLogoImage ); + + // Controls having keyboard focus by default + // must reset it on destroy. (EXT-2748) + gFocusMgr.setDefaultKeyboardFocus(NULL); } // virtual @@ -682,8 +686,6 @@ void LLPanelLogin::closePanel() if (sInstance) { gViewerWindow->getRootView()->removeChild( LLPanelLogin::sInstance ); - - gFocusMgr.setDefaultKeyboardFocus(NULL); delete sInstance; sInstance = NULL; diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp new file mode 100644 index 0000000000..046118cf75 --- /dev/null +++ b/indra/newview/llpanelme.cpp @@ -0,0 +1,272 @@ +/** + * @file llpanelme.cpp + * @brief Side tray "Me" (My Profile) panel + * + * $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 "llpanelprofile.h" +#include "llavatarconstants.h" +#include "llpanelme.h" +#include "llagent.h" +#include "llagentwearables.h" +#include "lliconctrl.h" +#include "llsidetray.h" +#include "lltabcontainer.h" +#include "lltexturectrl.h" + +#define PICKER_SECOND_LIFE "2nd_life_pic" +#define PICKER_FIRST_LIFE "real_world_pic" +#define PANEL_PROFILE "panel_profile" + +static LLRegisterPanelClassWrapper<LLPanelMyProfileEdit> t_panel_me_profile_edit("edit_profile_panel"); +static LLRegisterPanelClassWrapper<LLPanelMe> t_panel_me_profile("panel_me"); + +LLPanelMe::LLPanelMe(void) + : LLPanelProfile() + , mEditPanel(NULL) +{ + setAvatarId(gAgent.getID()); +} + +BOOL LLPanelMe::postBuild() +{ + LLPanelProfile::postBuild(); + + getTabContainer()[PANEL_PROFILE]->childSetAction("edit_profile_btn", boost::bind(&LLPanelMe::onEditProfileClicked, this), this); + getTabContainer()[PANEL_PROFILE]->childSetAction("edit_appearance_btn", boost::bind(&LLPanelMe::onEditAppearanceClicked, this), this); + + return TRUE; +} + +void LLPanelMe::onOpen(const LLSD& key) +{ + LLPanelProfile::onOpen(key); +} + +void LLPanelMe::notifyChildren(const LLSD& info) +{ + if (info.has("task-panel-action") && info["task-panel-action"].asString() == "handle-tri-state") + { + // Implement task panel tri-state behavior. + // + // When the button of an active open task panel is clicked, side tray + // calls notifyChildren() on the panel, passing task-panel-action=>handle-tri-state as an argument. + // The task panel is supposed to handle this by reverting to the default view, + // i.e. closing any dependent panels like "pick info" or "profile edit". + + bool on_default_view = true; + + const LLRect& task_panel_rect = getRect(); + for (LLView* child = getFirstChild(); child; child = findNextSibling(child)) + { + LLPanel* panel = dynamic_cast<LLPanel*>(child); + if (!panel) + continue; + + // *HACK: implement panel stack instead (e.g. me->pick_info->pick_edit). + if (panel->getRect().getWidth() == task_panel_rect.getWidth() && + panel->getRect().getHeight() == task_panel_rect.getHeight() && + panel->getVisible()) + { + panel->setVisible(FALSE); + on_default_view = false; + } + } + + if (on_default_view) + LLSideTray::getInstance()->collapseSideBar(); + + return; // this notification is only supposed to be handled by task panels + } + + LLPanel::notifyChildren(info); +} + +void LLPanelMe::buildEditPanel() +{ + if (NULL == mEditPanel) + { + mEditPanel = new LLPanelMyProfileEdit(); + mEditPanel->childSetAction("save_btn", boost::bind(&LLPanelMe::onSaveChangesClicked, this), this); + mEditPanel->childSetAction("cancel_btn", boost::bind(&LLPanelMe::onCancelClicked, this), this); + } +} + + +void LLPanelMe::onEditProfileClicked() +{ + buildEditPanel(); + togglePanel(mEditPanel, getAvatarId()); // open +} + +void LLPanelMe::onEditAppearanceClicked() +{ + if (gAgentWearables.areWearablesLoaded()) + { + gAgent.changeCameraToCustomizeAvatar(); + } +} + +void LLPanelMe::onSaveChangesClicked() +{ + LLAvatarData data = LLAvatarData(); + data.avatar_id = gAgent.getID(); + data.image_id = mEditPanel->getChild<LLTextureCtrl>(PICKER_SECOND_LIFE)->getImageAssetID(); + data.fl_image_id = mEditPanel->getChild<LLTextureCtrl>(PICKER_FIRST_LIFE)->getImageAssetID(); + data.about_text = mEditPanel->childGetValue("sl_description_edit").asString(); + data.fl_about_text = mEditPanel->childGetValue("fl_description_edit").asString(); + data.profile_url = mEditPanel->childGetValue("homepage_edit").asString(); + data.allow_publish = mEditPanel->childGetValue("show_in_search_checkbox"); + + LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesUpdate(&data); + togglePanel(mEditPanel); // close + onOpen(getAvatarId()); +} + +void LLPanelMe::onCancelClicked() +{ + togglePanel(mEditPanel); // close +} + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + +LLPanelMyProfileEdit::LLPanelMyProfileEdit() + : LLPanelMyProfile() +{ + LLUICtrlFactory::getInstance()->buildPanel(this, "panel_edit_profile.xml"); + + setAvatarId(gAgent.getID()); +} + +void LLPanelMyProfileEdit::onOpen(const LLSD& key) +{ + resetData(); + + // Disable editing until data is loaded, or edited fields will be overwritten when data + // is loaded. + enableEditing(false); + LLPanelMyProfile::onOpen(getAvatarId()); +} + +void LLPanelMyProfileEdit::processProperties(void* data, EAvatarProcessorType type) +{ + if(APT_PROPERTIES == type) + { + const LLAvatarData* avatar_data = static_cast<const LLAvatarData*>(data); + if(avatar_data && getAvatarId() == avatar_data->avatar_id) + { + // *TODO dzaporozhan + // Workaround for ticket EXT-1099, waiting for fix for ticket EXT-1128 + enableEditing(true); + processProfileProperties(avatar_data); + LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this); + } + } +} + +void LLPanelMyProfileEdit::processProfileProperties(const LLAvatarData* avatar_data) +{ + fillCommonData(avatar_data); + + fillOnlineStatus(avatar_data); + + fillPartnerData(avatar_data); + + fillAccountStatus(avatar_data); + + childSetValue("show_in_search_checkbox", (BOOL)(avatar_data->flags & AVATAR_ALLOW_PUBLISH)); + + std::string first, last; + BOOL found = gCacheName->getName(avatar_data->avatar_id, first, last); + if (found) + { + childSetTextArg("name_text", "[FIRST]", first); + childSetTextArg("name_text", "[LAST]", last); + } +} + +BOOL LLPanelMyProfileEdit::postBuild() +{ + initTexturePickerMouseEvents(); + + childSetTextArg("partner_edit_link", "[URL]", getString("partner_edit_link_url")); + + return LLPanelAvatarProfile::postBuild(); +} +/** + * Inits map with texture picker and appropriate edit icon. + * Sets callbacks of Mouse Enter and Mouse Leave signals of Texture Pickers + */ +void LLPanelMyProfileEdit::initTexturePickerMouseEvents() +{ + LLTextureCtrl* text_pic = getChild<LLTextureCtrl>(PICKER_SECOND_LIFE); + LLIconCtrl* text_icon = getChild<LLIconCtrl>("2nd_life_edit_icon"); + mTextureEditIconMap[text_pic->getName()] = text_icon; + text_pic->setMouseEnterCallback(boost::bind(&LLPanelMyProfileEdit::onTexturePickerMouseEnter, this, _1)); + text_pic->setMouseLeaveCallback(boost::bind(&LLPanelMyProfileEdit::onTexturePickerMouseLeave, this, _1)); + text_icon->setVisible(FALSE); + + text_pic = getChild<LLTextureCtrl>(PICKER_FIRST_LIFE); + text_icon = getChild<LLIconCtrl>("real_world_edit_icon"); + mTextureEditIconMap[text_pic->getName()] = text_icon; + text_pic->setMouseEnterCallback(boost::bind(&LLPanelMyProfileEdit::onTexturePickerMouseEnter, this, _1)); + text_pic->setMouseLeaveCallback(boost::bind(&LLPanelMyProfileEdit::onTexturePickerMouseLeave, this, _1)); + text_icon->setVisible(FALSE); +} + +void LLPanelMyProfileEdit::resetData() +{ + LLPanelMyProfile::resetData(); + + childSetTextArg("name_text", "[FIRST]", LLStringUtil::null); + childSetTextArg("name_text", "[LAST]", LLStringUtil::null); +} + +void LLPanelMyProfileEdit::onTexturePickerMouseEnter(LLUICtrl* ctrl) +{ + mTextureEditIconMap[ctrl->getName()]->setVisible(TRUE); +} +void LLPanelMyProfileEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl) +{ + mTextureEditIconMap[ctrl->getName()]->setVisible(FALSE); +} + +void LLPanelMyProfileEdit::enableEditing(bool enable) +{ + childSetEnabled("2nd_life_pic", enable); + childSetEnabled("real_world_pic", enable); + childSetEnabled("sl_description_edit", enable); + childSetEnabled("fl_description_edit", enable); + childSetEnabled("homepage_edit", enable); + childSetEnabled("show_in_search_checkbox", enable); +} diff --git a/indra/newview/llpanelme.h b/indra/newview/llpanelme.h new file mode 100644 index 0000000000..17d367132e --- /dev/null +++ b/indra/newview/llpanelme.h @@ -0,0 +1,111 @@ +/** + * @file llpanelme.h + * @brief Side tray "Me" (My Profile) panel + * + * $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$ + */ + +#ifndef LL_LLPANELMEPROFILE_H +#define LL_LLPANELMEPROFILE_H + +#include "llpanel.h" +#include "llpanelavatar.h" + +class LLPanelMyProfileEdit; +class LLPanelProfile; +class LLIconCtrl; + +/** +* Panel for displaying Agent's profile, it consists of two sub panels - Profile +* and Picks. +* LLPanelMe allows user to edit his profile and picks. +*/ +class LLPanelMe : public LLPanelProfile +{ + LOG_CLASS(LLPanelMe); + +public: + + LLPanelMe(); + + /*virtual*/ void onOpen(const LLSD& key); + /*virtual*/ void notifyChildren(const LLSD& info); + + /*virtual*/ BOOL postBuild(); + +private: + + void buildEditPanel(); + + void onEditProfileClicked(); + void onEditAppearanceClicked(); + void onSaveChangesClicked(); + void onCancelClicked(); + + LLPanelMyProfileEdit * mEditPanel; + +}; + +class LLPanelMyProfileEdit : public LLPanelMyProfile +{ + LOG_CLASS(LLPanelMyProfileEdit); + +public: + + LLPanelMyProfileEdit(); + + /*virtual*/void processProperties(void* data, EAvatarProcessorType type); + + /*virtual*/BOOL postBuild(); + + /*virtual*/ void onOpen(const LLSD& key); + +protected: + + /*virtual*/void resetData(); + + void processProfileProperties(const LLAvatarData* avatar_data); + +private: + void initTexturePickerMouseEvents(); + void onTexturePickerMouseEnter(LLUICtrl* ctrl); + void onTexturePickerMouseLeave(LLUICtrl* ctrl); + + /** + * Enabled/disables controls to prevent overwriting edited data upon receiving + * current data from server. + */ + void enableEditing(bool enable); + +private: + // map TexturePicker name => Edit Icon pointer should be visible while hovering Texture Picker + typedef std::map<std::string, LLIconCtrl*> texture_edit_icon_map_t; + texture_edit_icon_map_t mTextureEditIconMap; +}; + +#endif // LL_LLPANELMEPROFILE_H diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index dbe0ec3b86..4237681c80 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -41,6 +41,7 @@ #include "llpanelobjectinventory.h" +#include "llmenugl.h" #include "roles_constants.h" #include "llagent.h" diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 5a1b2f3066..e6b6ec64bd 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -56,6 +56,8 @@ #include "llgrouplist.h" #include "llinventoryobserver.h" #include "llpanelpeoplemenus.h" +#include "llsidetray.h" +#include "llsidetraypanelcontainer.h" #include "llrecentpeople.h" #include "llviewercontrol.h" // for gSavedSettings #include "llviewermenu.h" // for gMenuHolder @@ -483,7 +485,7 @@ void LLPanelPeople::onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAva BOOL LLPanelPeople::postBuild() { - mVisibleSignal.connect(boost::bind(&LLPanelPeople::onVisibilityChange, this, _2)); + setVisibleCallback(boost::bind(&LLPanelPeople::onVisibilityChange, this, _2)); mFilterEditor = getChild<LLFilterEditor>("filter_input"); mFilterEditor->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); @@ -1270,6 +1272,31 @@ void LLPanelPeople::onOpen(const LLSD& key) reSelectedCurrentTab(); } +void LLPanelPeople::notifyChildren(const LLSD& info) +{ + if (info.has("task-panel-action") && info["task-panel-action"].asString() == "handle-tri-state") + { + LLSideTrayPanelContainer* container = dynamic_cast<LLSideTrayPanelContainer*>(getParent()); + if (!container) + { + llwarns << "Cannot find People panel container" << llendl; + return; + } + + if (container->getCurrentPanelIndex() > 0) + { + // if not on the default panel, switch to it + container->onOpen(LLSD().insert(LLSideTrayPanelContainer::PARAM_SUB_PANEL_NAME, getName())); + } + else + LLSideTray::getInstance()->collapseSideBar(); + + return; // this notification is only supposed to be handled by task panels + } + + LLPanel::notifyChildren(info); +} + void LLPanelPeople::showAccordion(const std::string name, bool show) { if(name.empty()) diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index a369bcd3e2..d9dd76f3ac 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -50,8 +50,8 @@ public: virtual ~LLPanelPeople(); /*virtual*/ BOOL postBuild(); - - virtual void onOpen(const LLSD& key); + /*virtual*/ void onOpen(const LLSD& key); + /*virtual*/ void notifyChildren(const LLSD& info); // internals class Updater; diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h index 4b90ea5048..b17b6d6fe9 100644 --- a/indra/newview/llpanelpicks.h +++ b/indra/newview/llpanelpicks.h @@ -83,7 +83,7 @@ public: LLClassifiedItem* getSelectedClassifiedItem(); //*NOTE top down approch when panel toggling is done only by - // parent panels failed to work (picks related code was in me profile panel) + // parent panels failed to work (picks related code was in my profile panel) void setProfilePanel(LLPanelProfile* profile_panel); private: diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index 02f45c1b48..4d152a13f3 100644 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -158,28 +158,14 @@ void LLPanelProfile::onOpen(const LLSD& key) } //*TODO redo panel toggling -void LLPanelProfile::togglePanel(LLPanel* panel) +void LLPanelProfile::togglePanel(LLPanel* panel, const LLSD& key) { // TRUE - we need to open/expand "panel" bool expand = getChildList()->front() != panel; // mTabCtrl->getVisible(); if (expand) { - if (panel->getParent() != this) - { - addChild(panel); - } - else - { - sendChildToFront(panel); - } - - panel->setVisible(TRUE); - - LLRect new_rect = getRect(); - panel->reshape(new_rect.getWidth(), new_rect.getHeight()); - new_rect.setLeftTopAndSize(0, new_rect.getHeight(), new_rect.getWidth(), new_rect.getHeight()); - panel->setRect(new_rect); + openPanel(panel, key); } else { diff --git a/indra/newview/llpanelprofile.h b/indra/newview/llpanelprofile.h index e0b827c986..067beb248b 100644 --- a/indra/newview/llpanelprofile.h +++ b/indra/newview/llpanelprofile.h @@ -40,7 +40,7 @@ class LLTabContainer; /** -* Base class for Profile View and Me Profile. +* Base class for Profile View and My Profile. */ class LLPanelProfile : public LLPanel { @@ -51,7 +51,7 @@ public: /*virtual*/ void onOpen(const LLSD& key); - virtual void togglePanel(LLPanel*); + virtual void togglePanel(LLPanel*, const LLSD& key = LLSD()); virtual void openPanel(LLPanel* panel, const LLSD& params); diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp index d4ab5013f9..7832f63e6a 100644 --- a/indra/newview/llpanelprofileview.cpp +++ b/indra/newview/llpanelprofileview.cpp @@ -190,11 +190,13 @@ void LLPanelProfileView::processOnlineStatus(bool online) void LLPanelProfileView::onAvatarNameCached(const LLUUID& id, const std::string& first_name, const std::string& last_name, BOOL is_group) { llassert(getAvatarId() == id); - getChild<LLTextBox>("user_name", FALSE)->setValue(first_name + " " + last_name); + getChild<LLUICtrl>("user_name", FALSE)->setValue(first_name + " " + last_name); } -void LLPanelProfileView::togglePanel(LLPanel* panel) +void LLPanelProfileView::togglePanel(LLPanel* panel, const LLSD& key) { + // *TODO: unused method? + LLPanelProfile::togglePanel(panel); if(FALSE == panel->getVisible()) { diff --git a/indra/newview/llpanelprofileview.h b/indra/newview/llpanelprofileview.h index 45c2fc116e..5dc617d4a0 100644 --- a/indra/newview/llpanelprofileview.h +++ b/indra/newview/llpanelprofileview.h @@ -64,7 +64,7 @@ public: /*virtual*/ BOOL postBuild(); - /*virtual*/ void togglePanel(LLPanel* panel); + /*virtual*/ void togglePanel(LLPanel* panel, const LLSD& key = LLSD()); BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index 057cdde6f0..67d0e13786 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -262,6 +262,7 @@ BOOL LLTeleportHistoryPanel::postBuild() fl->setCommitOnSelectionChange(true); fl->setDoubleClickCallback(boost::bind(&LLTeleportHistoryPanel::onDoubleClickItem, this)); fl->setCommitCallback(boost::bind(&LLTeleportHistoryPanel::handleItemSelect, this, fl)); + fl->setReturnCallback(boost::bind(&LLTeleportHistoryPanel::onReturnKeyPressed, this)); } } } @@ -636,6 +637,12 @@ void LLTeleportHistoryPanel::handleItemSelect(LLFlatListView* selected) updateVerbs(); } +void LLTeleportHistoryPanel::onReturnKeyPressed() +{ + // Teleport to selected region as default action on return key pressed + onTeleport(); +} + void LLTeleportHistoryPanel::onDoubleClickItem() { // If item got doubleclick, then that item is already selected diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h index b34d9e876c..a31ff34cb6 100644 --- a/indra/newview/llpanelteleporthistory.h +++ b/indra/newview/llpanelteleporthistory.h @@ -80,6 +80,7 @@ public: private: void onDoubleClickItem(); + void onReturnKeyPressed(); void onAccordionTabRightClick(LLView *view, S32 x, S32 y, MASK mask); void onAccordionTabOpen(LLAccordionCtrlTab *tab); void onAccordionTabClose(LLAccordionCtrlTab *tab); diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index 49a2a3723d..3d2c529dda 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -355,7 +355,7 @@ LLPreviewGesture::~LLPreviewGesture() BOOL LLPreviewGesture::postBuild() { - mVisibleSignal.connect(boost::bind(&LLPreviewGesture::onVisibilityChange, this, _2)); + setVisibleCallback(boost::bind(&LLPreviewGesture::onVisibilityChange, this, _2)); LLLineEditor* edit; LLComboBox* combo; diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index fb9db42cf6..24ba288c49 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -115,7 +115,9 @@ void LLScreenChannelBase::init(S32 channel_left, S32 channel_right) // LLScreenChannel ////////////////////// //-------------------------------------------------------------------------- -LLScreenChannel::LLScreenChannel(LLUUID& id): LLScreenChannelBase(id) +LLScreenChannel::LLScreenChannel(LLUUID& id): +LLScreenChannelBase(id) +,mStartUpToastPanel(NULL) { } @@ -358,8 +360,6 @@ void LLScreenChannel::redrawToasts() if(mToastList.size() == 0 || isHovering()) return; - hideToastsFromScreen(); - switch(mToastAlignment) { case NA_TOP : @@ -383,6 +383,8 @@ void LLScreenChannel::showToastsBottom() S32 toast_margin = 0; std::vector<ToastElem>::reverse_iterator it; + closeOverflowToastPanel(); + for(it = mToastList.rbegin(); it != mToastList.rend(); ++it) { if(it != mToastList.rbegin()) @@ -408,7 +410,20 @@ void LLScreenChannel::showToastsBottom() if(stop_showing_toasts) break; - (*it).toast->setVisible(TRUE); + if( !(*it).toast->getVisible() ) + { + if((*it).toast->isFirstLook()) + { + (*it).toast->setVisible(TRUE); + } + else + { + // HACK + // EXT-2653: it is necessary to prevent overlapping for secondary showed toasts + (*it).toast->setVisible(TRUE); + gFloaterView->sendChildToBack((*it).toast); + } + } } if(it != mToastList.rend() && !mOverflowToastHidden) @@ -417,6 +432,7 @@ void LLScreenChannel::showToastsBottom() for(; it != mToastList.rend(); it++) { (*it).toast->stopTimer(); + (*it).toast->setVisible(FALSE); mHiddenToastsNum++; } createOverflowToast(bottom, gSavedSettings.getS32("NotificationTipToastLifeTime")); diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 8007e0fcec..d5f01418c6 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -32,6 +32,7 @@ #include "llviewerprecompiledheaders.h" #include "llsidepanelappearance.h" +#include "llaccordionctrltab.h" #include "llagent.h" #include "llagentwearables.h" #include "llappearancemgr.h" @@ -189,16 +190,22 @@ void LLSidepanelAppearance::onOpenOutfitButtonClicked() return; if (!outfit_link->getIsLinkType()) return; - LLInventoryPanel *inventory_panel = mPanelOutfitsInventory->getActivePanel(); - if (inventory_panel) + + LLAccordionCtrlTab* tab_outfits = mPanelOutfitsInventory->findChild<LLAccordionCtrlTab>("tab_outfits"); + if (tab_outfits) { - LLFolderView *folder = inventory_panel->getRootFolder(); - LLFolderViewItem *outfit_folder = folder->getItemByID(outfit_link->getLinkedUUID()); - if (outfit_folder) + tab_outfits->changeOpenClose(FALSE); + LLInventoryPanel *inventory_panel = tab_outfits->findChild<LLInventoryPanel>("outfitslist_accordionpanel"); + if (inventory_panel) { - outfit_folder->setOpen(!outfit_folder->isOpen()); - folder->setSelectionFromRoot(outfit_folder,TRUE); - folder->scrollToShowSelection(); + LLFolderView *folder = inventory_panel->getRootFolder(); + LLFolderViewItem *outfit_folder = folder->getItemByID(outfit_link->getLinkedUUID()); + if (outfit_folder) + { + outfit_folder->setOpen(!outfit_folder->isOpen()); + folder->setSelectionFromRoot(outfit_folder,TRUE); + folder->scrollToShowSelection(); + } } } } diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index 7711f3c733..ee5fa46c9c 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -34,6 +34,7 @@ #include "lltextbox.h" +#include "llagent.h" #include "llbottomtray.h" #include "llsidetray.h" #include "llviewerwindow.h" @@ -435,35 +436,16 @@ void LLSideTray::processTriState () expandSideBar(); else { - //!!!!!!!!!!!!!!!!! - //** HARDCODED!!!!! - //!!!!!!!!!!!!!!!!! - - //there is no common way to determine "default" panel for tab - //so default panels for now will be hardcoded - - //hardcoded for people tab and profile tab - - /*if(mActiveTab == getTab("sidebar_people")) - { - LLSideTrayPanelContainer* container = findChild<LLSideTrayPanelContainer>("panel_container"); - if(container && container->getCurrentPanelIndex()>0) - { - container->onOpen(LLSD().insert("sub_panel_name","panel_people")); - } - else - collapseSideBar(); - } - else if(mActiveTab == getTab("sidebar_me")) - { - LLTabContainer* tab_container = findChild<LLTabContainer>("tabs"); - if(tab_container && tab_container->getCurrentPanelIndex()>0) - tab_container->selectFirstTab(); - else - collapseSideBar(); - } - else*/ - collapseSideBar(); +#if 0 // *TODO: EXT-2092 + + // Tell the active task panel to switch to its default view + // or collapse side tray if already on the default view. + LLSD info; + info["task-panel-action"] = "handle-tri-state"; + mActiveTab->notifyChildren(info); +#else + collapseSideBar(); +#endif } } @@ -700,7 +682,7 @@ void LLSideTray::updateSidetrayVisibility() // set visibility of parent container based on collapsed state if (getParent()) { - getParent()->setVisible(!mCollapsed); + getParent()->setVisible(!mCollapsed && !gAgent.cameraMouselook()); } } diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h index 54652c1108..7321574681 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -120,7 +120,7 @@ public: void setVisible(BOOL visible) { - LLPanel::setVisible(visible); + if (getParent()) getParent()->setVisible(visible); } LLPanel* getButtonsPanel() { return mButtonsPanel; } @@ -141,6 +141,7 @@ public: void processTriState (); + void updateSidetrayVisibility(); protected: LLSideTrayTab* getTab (const std::string& name); @@ -153,10 +154,6 @@ protected: void toggleTabButton (LLSideTrayTab* tab); - void updateSidetrayVisibility(); - - - private: // Implementation of LLDestroyClass<LLSideTray> static void destroyClass() @@ -166,7 +163,6 @@ private: LLSideTray::getInstance()->setEnabled(FALSE); } - private: LLPanel* mButtonsPanel; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index d36ff1605e..736be67710 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2153,7 +2153,7 @@ void login_callback(S32 option, void *userdata) LLStartUp::setStartupState( STATE_LOGIN_CLEANUP ); return; } - else if (QUIT_OPTION == option) + else if (QUIT_OPTION == option) // *TODO: THIS CODE SEEMS TO BE UNREACHABLE!!!!! login_callback is never called with option equal to QUIT_OPTION { // Make sure we don't save the password if the user is trying to clear it. std::string first, last, password; diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h index 3ce3549961..bdaacce981 100644 --- a/indra/newview/llstatusbar.h +++ b/indra/newview/llstatusbar.h @@ -34,7 +34,6 @@ #define LL_LLSTATUSBAR_H #include "llpanel.h" -#include <llmenugl.h> // "Constants" loaded from settings.xml at start time extern S32 STATUS_BAR_HEIGHT; diff --git a/indra/newview/llteleporthistory.cpp b/indra/newview/llteleporthistory.cpp index bc886d5743..cc4689062e 100644 --- a/indra/newview/llteleporthistory.cpp +++ b/indra/newview/llteleporthistory.cpp @@ -52,7 +52,7 @@ const std::string& LLTeleportHistoryItem::getTitle() const { - return gSavedSettings.getBOOL("ShowCoordinatesOption") ? mFullTitle : mTitle; + return gSavedSettings.getBOOL("NavBarShowCoordinates") ? mFullTitle : mTitle; } ////////////////////////////////////////////////////////////////////////////// @@ -177,7 +177,7 @@ void LLTeleportHistory::purgeItems() std::string LLTeleportHistory::getCurrentLocationTitle(bool full, const LLVector3& local_pos_override) { std::string location_name; - LLAgentUI::ELocationFormat fmt = full ? LLAgentUI::LOCATION_FORMAT_WITHOUT_SIM : LLAgentUI::LOCATION_FORMAT_NORMAL; + LLAgentUI::ELocationFormat fmt = full ? LLAgentUI::LOCATION_FORMAT_NO_MATURITY : LLAgentUI::LOCATION_FORMAT_NORMAL; if (!LLAgentUI::buildLocationString(location_name, fmt, local_pos_override)) location_name = "Unknown"; return location_name; diff --git a/indra/newview/llteleporthistory.h b/indra/newview/llteleporthistory.h index 9f5563ed0b..a82bec7c4f 100644 --- a/indra/newview/llteleporthistory.h +++ b/indra/newview/llteleporthistory.h @@ -57,7 +57,8 @@ public: {} /** - * @return title formatted according to the current value of the ShowCoordinatesOption setting. + * @return title formatted according to the current value of the + * NavBarShowCoordinates setting. */ const std::string& getTitle() const; diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index ed2cedbd10..f9cbdc20d6 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -227,7 +227,7 @@ void LLToast::setVisible(BOOL show) } LLModalDialog::setFrontmost(FALSE); } - LLPanel::setVisible(show); + LLFloater::setVisible(show); if(mPanel) { if(!mPanel->isDead()) diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp index ded83debad..26b3bdb82e 100644 --- a/indra/newview/lltoolmgr.cpp +++ b/indra/newview/lltoolmgr.cpp @@ -247,7 +247,7 @@ bool LLToolMgr::inEdit() bool LLToolMgr::canEdit() { - return LLViewerParcelMgr::getInstance()->agentCanBuild(); + return LLViewerParcelMgr::getInstance()->allowAgentBuild(); } void LLToolMgr::toggleBuildMode() diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 87d256b60a..c6ec25c1cb 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -56,11 +56,43 @@ #include "lltrans.h" #include "llappearancemgr.h" #include "llfloatercustomize.h" +#include "llcommandhandler.h" +#include "llviewermessage.h" ///---------------------------------------------------------------------------- /// Local function declarations, constants, enums, and typedefs ///---------------------------------------------------------------------------- +class LLInventoryHandler : public LLCommandHandler +{ +public: + // requires trusted browser to trigger + LLInventoryHandler() : LLCommandHandler("inventory", UNTRUSTED_THROTTLE) { } + + bool handle(const LLSD& params, const LLSD& query_map, + LLMediaCtrl* web) + { + if (params.size() < 2) return false; + LLUUID inventory_id; + if (!inventory_id.set(params[0], FALSE)) + { + return false; + } + + const std::string verb = params[1].asString(); + if (verb == "select") + { + std::vector<LLUUID> items_to_open; + items_to_open.push_back(inventory_id); + open_inventory_offer(items_to_open, ""); + return true; + } + + return false; + } +}; +LLInventoryHandler gInventoryHandler; + ///---------------------------------------------------------------------------- /// Class LLViewerInventoryItem ///---------------------------------------------------------------------------- diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 625b816125..8bcf2c6281 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2736,7 +2736,7 @@ bool enable_object_edit() bool enable = false; if (gAgent.inPrelude()) { - enable = LLViewerParcelMgr::getInstance()->agentCanBuild() + enable = LLViewerParcelMgr::getInstance()->allowAgentBuild() || LLSelectMgr::getInstance()->getSelection()->isAttachment(); } else if (LLSelectMgr::getInstance()->selectGetModify()) @@ -6106,7 +6106,7 @@ class LLAttachmentEnableDrop : public view_listener_t { bool handleEvent(const LLSD& userdata) { - BOOL can_build = gAgent.isGodlike() || (LLViewerParcelMgr::getInstance()->agentCanBuild()); + BOOL can_build = gAgent.isGodlike() || (LLViewerParcelMgr::getInstance()->allowAgentBuild()); //Add an inventory observer to only allow dropping the newly attached item //once it exists in your inventory. Look at Jira 2422. diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 4d7d3ee8ac..adad06dc6f 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -170,7 +170,6 @@ static const F32 LLREQUEST_PERMISSION_THROTTLE_INTERVAL = 10.0f; // seconds extern BOOL gDebugClicks; // function prototypes -void open_offer(const std::vector<LLUUID>& items, const std::string& from_name); bool check_offer_throttle(const std::string& from_name, bool check_only); //inventory offer throttle globals @@ -727,7 +726,7 @@ public: LLOpenAgentOffer(const std::string& from_name) : mFromName(from_name) {} /*virtual*/ void done() { - open_offer(mComplete, mFromName); + open_inventory_offer(mComplete, mFromName); gInventory.removeObserver(this); delete this; } @@ -745,7 +744,7 @@ class LLOpenTaskOffer : public LLInventoryAddedObserver protected: /*virtual*/ void done() { - open_offer(mAdded, ""); + open_inventory_offer(mAdded, ""); mAdded.clear(); } }; @@ -876,7 +875,7 @@ bool check_offer_throttle(const std::string& from_name, bool check_only) } } -void open_offer(const std::vector<LLUUID>& items, const std::string& from_name) +void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& from_name) { std::vector<LLUUID>::const_iterator it = items.begin(); std::vector<LLUUID>::const_iterator end = items.end(); @@ -1066,12 +1065,60 @@ LLSD LLOfferInfo::asLLSD() return sd; } +void LLOfferInfo::send_auto_receive_response(void) +{ + LLMessageSystem* msg = gMessageSystem; + msg->newMessageFast(_PREHASH_ImprovedInstantMessage); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_MessageBlock); + msg->addBOOLFast(_PREHASH_FromGroup, FALSE); + msg->addUUIDFast(_PREHASH_ToAgentID, mFromID); + msg->addU8Fast(_PREHASH_Offline, IM_ONLINE); + msg->addUUIDFast(_PREHASH_ID, mTransactionID); + msg->addU32Fast(_PREHASH_Timestamp, NO_TIMESTAMP); // no timestamp necessary + std::string name; + LLAgentUI::buildFullname(name); + msg->addStringFast(_PREHASH_FromAgentName, name); + msg->addStringFast(_PREHASH_Message, ""); + msg->addU32Fast(_PREHASH_ParentEstateID, 0); + msg->addUUIDFast(_PREHASH_RegionID, LLUUID::null); + msg->addVector3Fast(_PREHASH_Position, gAgent.getPositionAgent()); + + // Auto Receive Message. The math for the dialog works, because the accept + // for inventory_offered, task_inventory_offer or + // group_notice_inventory is 1 greater than the offer integer value. + // Generates IM_INVENTORY_ACCEPTED, IM_TASK_INVENTORY_ACCEPTED, + // or IM_GROUP_NOTICE_INVENTORY_ACCEPTED + msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 1)); + msg->addBinaryDataFast(_PREHASH_BinaryBucket, &(mFolderID.mData), + sizeof(mFolderID.mData)); + // send the message + msg->sendReliable(mHost); + + if(IM_INVENTORY_OFFERED == mIM) + { + // add buddy to recent people list + LLRecentPeople::instance().add(mFromID); + } +} + bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& response) - { +{ LLChat chat; std::string log_message; S32 button = LLNotification::getSelectedOption(notification, response); - + + LLInventoryObserver* opener = NULL; + LLViewerInventoryCategory* catp = NULL; + catp = (LLViewerInventoryCategory*)gInventory.getCategory(mObjectID); + LLViewerInventoryItem* itemp = NULL; + if(!catp) + { + itemp = (LLViewerInventoryItem*)gInventory.getItem(mObjectID); + } + // For muting, we need to add the mute, then decline the offer. // This must be done here because: // * callback may be called immediately, @@ -1082,6 +1129,136 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& gCacheName->get(mFromID, mFromGroup, &inventory_offer_mute_callback); } + std::string from_string; // Used in the pop-up. + std::string chatHistory_string; // Used in chat history. + + // TODO: when task inventory offers can also be handled the new way, migrate the code that sets these strings here: + from_string = chatHistory_string = mFromName; + + bool busy=FALSE; + + switch(button) + { + case IOR_SHOW: + // we will want to open this item when it comes back. + LL_DEBUGS("Messaging") << "Initializing an opener for tid: " << mTransactionID + << LL_ENDL; + switch (mIM) + { + case IM_INVENTORY_OFFERED: + { + // This is an offer from an agent. In this case, the back + // end has already copied the items into your inventory, + // so we can fetch it out of our inventory. + LLInventoryFetchObserver::item_ref_t items; + items.push_back(mObjectID); + LLOpenAgentOffer* open_agent_offer = new LLOpenAgentOffer(from_string); + open_agent_offer->fetchItems(items); + if(catp || (itemp && itemp->isComplete())) + { + open_agent_offer->done(); + } + else + { + opener = open_agent_offer; + } + } + break; + case IM_TASK_INVENTORY_OFFERED: + case IM_GROUP_NOTICE: + case IM_GROUP_NOTICE_REQUESTED: + // This is an offer from a task or group. + // We don't use a new instance of an opener + // We instead use the singular observer gOpenTaskOffer + // Since it already exists, we don't need to actually do anything + break; + default: + LL_WARNS("Messaging") << "inventory_offer_callback: unknown offer type" << LL_ENDL; + break; + } // end switch (mIM) + + // Show falls through to accept. + + case IOR_ACCEPT: + //don't spam them if they are getting flooded + if (check_offer_throttle(mFromName, true)) + { + log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString("."); + chat.mText = log_message; + LLFloaterChat::addChatHistory(chat); + } + break; + + case IOR_BUSY: + //Busy falls through to decline. Says to make busy message. + busy=TRUE; + case IOR_MUTE: + // MUTE falls through to decline + case IOR_DECLINE: + { + log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +"."; + chat.mText = log_message; + if( LLMuteList::getInstance()->isMuted(mFromID ) && ! LLMuteList::getInstance()->isLinden(mFromName) ) // muting for SL-42269 + { + chat.mMuted = TRUE; + } + LLFloaterChat::addChatHistory(chat); + + LLInventoryFetchComboObserver::folder_ref_t folders; + LLInventoryFetchComboObserver::item_ref_t items; + items.push_back(mObjectID); + LLDiscardAgentOffer* discard_agent_offer; + discard_agent_offer = new LLDiscardAgentOffer(mFolderID, mObjectID); + discard_agent_offer->fetch(folders, items); + if(catp || (itemp && itemp->isComplete())) + { + discard_agent_offer->done(); + } + else + { + opener = discard_agent_offer; + } + + + if (busy && (!mFromGroup && !mFromObject)) + { + busy_message(gMessageSystem, mFromID); + } + break; + } + default: + // close button probably + // The item has already been fetched and is in your inventory, we simply won't highlight it + // OR delete it if the notification gets killed, since we don't want that to be a vector for + // losing inventory offers. + break; + } + + if(opener) + { + gInventory.addObserver(opener); + } + + delete this; + return false; +} + +bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const LLSD& response) +{ + LLChat chat; + std::string log_message; + S32 button = LLNotification::getSelectedOption(notification, response); + + // For muting, we need to add the mute, then decline the offer. + // This must be done here because: + // * callback may be called immediately, + // * adding the mute sends a message, + // * we can't build two messages at once. + if (2 == button) + { + gCacheName->get(mFromID, mFromGroup, &inventory_offer_mute_callback); + } + LLMessageSystem* msg = gMessageSystem; msg->newMessageFast(_PREHASH_ImprovedInstantMessage); msg->nextBlockFast(_PREHASH_AgentData); @@ -1108,7 +1285,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& { itemp = (LLViewerInventoryItem*)gInventory.getItem(mObjectID); } - + std::string from_string; // Used in the pop-up. std::string chatHistory_string; // Used in chat history. if (mFromObject == TRUE) @@ -1119,16 +1296,16 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& if (gCacheName->getGroupName(mFromID, group_name)) { from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+"'" - + mFromName + LLTrans::getString("'") +" " + LLTrans::getString("InvOfferOwnedByGroup") - + " "+ "'" + group_name + "'"; + + mFromName + LLTrans::getString("'") +" " + LLTrans::getString("InvOfferOwnedByGroup") + + " "+ "'" + group_name + "'"; chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedByGroup") - + " " + group_name + "'"; + + " " + group_name + "'"; } else { from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+"'" - + mFromName +"'"+ " " + LLTrans::getString("InvOfferOwnedByUnknownGroup"); + + mFromName +"'"+ " " + LLTrans::getString("InvOfferOwnedByUnknownGroup"); chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedByUnknownGroup"); } } @@ -1138,13 +1315,13 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& if (gCacheName->getName(mFromID, first_name, last_name)) { from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+ LLTrans::getString("'") + mFromName - + LLTrans::getString("'")+" " + LLTrans::getString("InvOfferOwnedBy") + first_name + " " + last_name; + + LLTrans::getString("'")+" " + LLTrans::getString("InvOfferOwnedBy") + first_name + " " + last_name; chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedBy") + " " + first_name + " " + last_name; } else { from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+LLTrans::getString("'") - + mFromName + LLTrans::getString("'")+" " + LLTrans::getString("InvOfferOwnedByUnknownUser"); + + mFromName + LLTrans::getString("'")+" " + LLTrans::getString("InvOfferOwnedByUnknownUser"); chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedByUnknownUser"); } } @@ -1158,137 +1335,90 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& switch(button) { - case IOR_ACCEPT: - // ACCEPT. The math for the dialog works, because the accept - // for inventory_offered, task_inventory_offer or - // group_notice_inventory is 1 greater than the offer integer value. - // Generates IM_INVENTORY_ACCEPTED, IM_TASK_INVENTORY_ACCEPTED, - // or IM_GROUP_NOTICE_INVENTORY_ACCEPTED - msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 1)); - msg->addBinaryDataFast(_PREHASH_BinaryBucket, &(mFolderID.mData), - sizeof(mFolderID.mData)); - // send the message - msg->sendReliable(mHost); - - //don't spam them if they are getting flooded - if (check_offer_throttle(mFromName, true)) - { - log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString("."); - chat.mText = log_message; - LLFloaterChat::addChatHistory(chat); - } - - // we will want to open this item when it comes back. - LL_DEBUGS("Messaging") << "Initializing an opener for tid: " << mTransactionID - << LL_ENDL; - switch (mIM) - { - case IM_INVENTORY_OFFERED: - { - // This is an offer from an agent. In this case, the back - // end has already copied the items into your inventory, - // so we can fetch it out of our inventory. - LLInventoryFetchObserver::item_ref_t items; - items.push_back(mObjectID); - LLOpenAgentOffer* open_agent_offer = new LLOpenAgentOffer(from_string); - open_agent_offer->fetchItems(items); - if(catp || (itemp && itemp->isComplete())) + case IOR_ACCEPT: + // ACCEPT. The math for the dialog works, because the accept + // for inventory_offered, task_inventory_offer or + // group_notice_inventory is 1 greater than the offer integer value. + // Generates IM_INVENTORY_ACCEPTED, IM_TASK_INVENTORY_ACCEPTED, + // or IM_GROUP_NOTICE_INVENTORY_ACCEPTED + msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 1)); + msg->addBinaryDataFast(_PREHASH_BinaryBucket, &(mFolderID.mData), + sizeof(mFolderID.mData)); + // send the message + msg->sendReliable(mHost); + + //don't spam them if they are getting flooded + if (check_offer_throttle(mFromName, true)) { - open_agent_offer->done(); + log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString("."); + chat.mText = log_message; + LLFloaterChat::addChatHistory(chat); } - else + + // we will want to open this item when it comes back. + LL_DEBUGS("Messaging") << "Initializing an opener for tid: " << mTransactionID + << LL_ENDL; + switch (mIM) + { + case IM_TASK_INVENTORY_OFFERED: + case IM_GROUP_NOTICE: + case IM_GROUP_NOTICE_REQUESTED: { - opener = open_agent_offer; + // This is an offer from a task or group. + // We don't use a new instance of an opener + // We instead use the singular observer gOpenTaskOffer + // Since it already exists, we don't need to actually do anything } - } + break; + default: + LL_WARNS("Messaging") << "inventory_offer_callback: unknown offer type" << LL_ENDL; + break; + } // end switch (mIM) break; - case IM_TASK_INVENTORY_OFFERED: - case IM_GROUP_NOTICE: - case IM_GROUP_NOTICE_REQUESTED: - { - // This is an offer from a task or group. - // We don't use a new instance of an opener - // We instead use the singular observer gOpenTaskOffer - // Since it already exists, we don't need to actually do anything - } - break; + + case IOR_BUSY: + //Busy falls through to decline. Says to make busy message. + busy=TRUE; + case IOR_MUTE: + // MUTE falls through to decline + case IOR_DECLINE: + // DECLINE. The math for the dialog works, because the decline + // for inventory_offered, task_inventory_offer or + // group_notice_inventory is 2 greater than the offer integer value. + // Generates IM_INVENTORY_DECLINED, IM_TASK_INVENTORY_DECLINED, + // or IM_GROUP_NOTICE_INVENTORY_DECLINED default: - LL_WARNS("Messaging") << "inventory_offer_callback: unknown offer type" << LL_ENDL; - break; - } // end switch (mIM) - break; - - case IOR_BUSY: - //Busy falls through to decline. Says to make busy message. - busy=TRUE; - case IOR_MUTE: - // MUTE falls through to decline - case IOR_DECLINE: - // DECLINE. The math for the dialog works, because the decline - // for inventory_offered, task_inventory_offer or - // group_notice_inventory is 2 greater than the offer integer value. - // Generates IM_INVENTORY_DECLINED, IM_TASK_INVENTORY_DECLINED, - // or IM_GROUP_NOTICE_INVENTORY_DECLINED - default: - // close button probably (or any of the fall-throughs from above) - msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 2)); - msg->addBinaryDataFast(_PREHASH_BinaryBucket, EMPTY_BINARY_BUCKET, EMPTY_BINARY_BUCKET_SIZE); - // send the message - msg->sendReliable(mHost); - - log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +"."; - chat.mText = log_message; - if( LLMuteList::getInstance()->isMuted(mFromID ) && ! LLMuteList::getInstance()->isLinden(mFromName) ) // muting for SL-42269 - { - chat.mMuted = TRUE; - } - LLFloaterChat::addChatHistory(chat); - - // If it's from an agent, we have to fetch the item to throw - // it away. If it's from a task or group, just denying the - // request will suffice to discard the item. - if(IM_INVENTORY_OFFERED == mIM) - { - LLInventoryFetchComboObserver::folder_ref_t folders; - LLInventoryFetchComboObserver::item_ref_t items; - items.push_back(mObjectID); - LLDiscardAgentOffer* discard_agent_offer; - discard_agent_offer = new LLDiscardAgentOffer(mFolderID, mObjectID); - discard_agent_offer->fetch(folders, items); - if(catp || (itemp && itemp->isComplete())) + // close button probably (or any of the fall-throughs from above) + msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 2)); + msg->addBinaryDataFast(_PREHASH_BinaryBucket, EMPTY_BINARY_BUCKET, EMPTY_BINARY_BUCKET_SIZE); + // send the message + msg->sendReliable(mHost); + + log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +"."; + chat.mText = log_message; + if( LLMuteList::getInstance()->isMuted(mFromID ) && ! LLMuteList::getInstance()->isLinden(mFromName) ) // muting for SL-42269 { - discard_agent_offer->done(); + chat.mMuted = TRUE; } - else + LLFloaterChat::addChatHistory(chat); + + if (busy && (!mFromGroup && !mFromObject)) { - opener = discard_agent_offer; + busy_message(msg,mFromID); } - - } - if (busy && (!mFromGroup && !mFromObject)) - { - busy_message(msg,mFromID); - } - break; - } - - if(IM_INVENTORY_OFFERED == mIM) - { - // add buddy to recent people list - LLRecentPeople::instance().add(mFromID); + break; } - + if(opener) { gInventory.addObserver(opener); } - + delete this; return false; } - -void inventory_offer_handler(LLOfferInfo* info, BOOL from_task) +void inventory_offer_handler(LLOfferInfo* info) { //Until throttling is implmented, busy mode should reject inventory instead of silently //accepting it. SEE SL-39554 @@ -1375,21 +1505,45 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task) args["OBJECTFROMNAME"] = info->mFromName; args["NAME"] = info->mFromName; args["NAME_SLURL"] = LLSLURL::buildCommand("agent", info->mFromID, "about"); - std::string verb = "highlight?name=" + msg; + std::string verb = "select?name=" + msg; args["ITEM_SLURL"] = LLSLURL::buildCommand("inventory", info->mObjectID, verb.c_str()); LLNotification::Params p("ObjectGiveItem"); - p.substitutions(args).payload(payload).functor.function(boost::bind(&LLOfferInfo::inventory_offer_callback, info, _1, _2)); - if (from_task) + // Object -> Agent Inventory Offer + if (info->mFromObject) { + // Inventory Slurls don't currently work for non agent transfers, so only display the object name. + args["ITEM_SLURL"] = msg; + // Note: sets inventory_task_offer_callback as the callback + p.substitutions(args).payload(payload).functor.function(boost::bind(&LLOfferInfo::inventory_task_offer_callback, info, _1, _2)); p.name = name_found ? "ObjectGiveItem" : "ObjectGiveItemUnknownUser"; } - else + else // Agent -> Agent Inventory Offer { + // Note: sets inventory_offer_callback as the callback + p.substitutions(args).payload(payload).functor.function(boost::bind(&LLOfferInfo::inventory_offer_callback, info, _1, _2)); p.name = "UserGiveItem"; + + // Prefetch the item into your local inventory. + LLInventoryFetchObserver::item_ref_t items; + items.push_back(info->mObjectID); + LLInventoryFetchObserver* fetch_item = new LLInventoryFetchObserver(); + fetch_item->fetchItems(items); + if(fetch_item->isEverythingComplete()) + { + fetch_item->done(); + } + else + { + gInventory.addObserver(fetch_item); + } + + // In viewer 2 we're now auto receiving inventory offers and messaging as such (not sending reject messages). + info->send_auto_receive_response(); } - + + // Pop up inv offer notification and let the user accept (keep), or reject (and silently delete) the inventory. LLNotifications::instance().add(p); } @@ -1885,7 +2039,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) } else { - inventory_offer_handler(info, dialog == IM_TASK_INVENTORY_OFFERED); + inventory_offer_handler(info); } } break; diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h index e24da2013d..1a98828010 100644 --- a/indra/newview/llviewermessage.h +++ b/indra/newview/llviewermessage.h @@ -59,7 +59,8 @@ enum InventoryOfferResponse IOR_ACCEPT, IOR_DECLINE, IOR_MUTE, - IOR_BUSY + IOR_BUSY, + IOR_SHOW }; BOOL can_afford_transaction(S32 cost); @@ -197,6 +198,7 @@ void invalid_message_callback(LLMessageSystem*, void*, EMessageException); void process_initiate_download(LLMessageSystem* msg, void**); void start_new_inventory_observer(); +void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& from_name); struct LLOfferInfo { @@ -218,7 +220,9 @@ struct LLOfferInfo LLHost mHost; LLSD asLLSD(); + void send_auto_receive_response(void); bool inventory_offer_callback(const LLSD& notification, const LLSD& response); + bool inventory_task_offer_callback(const LLSD& notification, const LLSD& response); }; diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index aa0987aa7d..fcaf49c884 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -650,7 +650,7 @@ LLParcel *LLViewerParcelMgr::getAgentParcel() const } // Return whether the agent can build on the land they are on -bool LLViewerParcelMgr::agentCanBuild() const +bool LLViewerParcelMgr::allowAgentBuild() const { if (mAgentParcel) { @@ -664,19 +664,47 @@ bool LLViewerParcelMgr::agentCanBuild() const } } -BOOL LLViewerParcelMgr::agentCanTakeDamage() const +bool LLViewerParcelMgr::allowAgentVoice() const { - return mAgentParcel->getAllowDamage(); + LLViewerRegion* region = gAgent.getRegion(); + return region && region->isVoiceEnabled() + && mAgentParcel && mAgentParcel->getParcelFlagAllowVoice(); } -BOOL LLViewerParcelMgr::agentCanFly() const +bool LLViewerParcelMgr::allowAgentFly() const { - return TRUE; + LLViewerRegion* region = gAgent.getRegion(); + return region && !region->getBlockFly() + && mAgentParcel && mAgentParcel->getAllowFly(); } -F32 LLViewerParcelMgr::agentDrawDistance() const +// Can the agent be pushed around by LLPushObject? +bool LLViewerParcelMgr::allowAgentPush() const { - return 512.f; + LLViewerRegion* region = gAgent.getRegion(); + return region && !region->getRestrictPushObject() + && mAgentParcel && !mAgentParcel->getRestrictPushObject(); +} + +bool LLViewerParcelMgr::allowAgentScripts() const +{ + LLViewerRegion* region = gAgent.getRegion(); + // *NOTE: This code does not take into account group-owned parcels + // and the flag to allow group-owned scripted objects to run. + // This mirrors the traditional menu bar parcel icon code, but is not + // technically correct. + return region + && !(region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) + && !(region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) + && mAgentParcel + && mAgentParcel->getAllowOtherScripts(); +} + +bool LLViewerParcelMgr::allowAgentDamage() const +{ + LLViewerRegion* region = gAgent.getRegion(); + return region && region->getAllowDamage() + && mAgentParcel && mAgentParcel->getAllowDamage(); } BOOL LLViewerParcelMgr::isOwnedAt(const LLVector3d& pos_global) const diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h index 1c8fe23dba..379190789b 100644 --- a/indra/newview/llviewerparcelmgr.h +++ b/indra/newview/llviewerparcelmgr.h @@ -56,9 +56,6 @@ class LLViewerRegion; // | EAST_MASK // | WEST_MASK); -const F32 PARCEL_POST_HEIGHT = 0.666f; -//const F32 PARCEL_POST_HEIGHT = 20.f; - // Specify the type of land transfer taking place //enum ELandTransferType //{ @@ -171,10 +168,29 @@ public: LLParcel* getCollisionParcel() const; - BOOL agentCanTakeDamage() const; - BOOL agentCanFly() const; - F32 agentDrawDistance() const; - bool agentCanBuild() const; + // Can this agent build on the parcel he is on? + // Used for parcel property icons in nav bar. + bool allowAgentBuild() const; + + // Can this agent speak on the parcel he is on? + // Used for parcel property icons in nav bar. + bool allowAgentVoice() const; + + // Can this agent start flying on this parcel? + // Used for parcel property icons in nav bar. + bool allowAgentFly() const; + + // Can this agent be pushed by llPushObject() on this parcel? + // Used for parcel property icons in nav bar. + bool allowAgentPush() const; + + // Can scripts written by non-parcel-owners run on the agent's current + // parcel? Used for parcel property icons in nav bar. + bool allowAgentScripts() const; + + // Can the agent be damaged here? + // Used for parcel property icons in nav bar. + bool allowAgentDamage() const; F32 getHoverParcelWidth() const { return F32(mHoverEastNorth.mdV[VX] - mHoverWestSouth.mdV[VX]); } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index db66faef81..3f53fae36c 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1347,6 +1347,7 @@ LLViewerWindow::LLViewerWindow( mDebugText = new LLDebugText(this); + mWorldViewRectScaled = calcScaledRect(mWorldViewRectRaw, mDisplayScale); } void LLViewerWindow::initGLDefaults() @@ -1573,7 +1574,8 @@ void LLViewerWindow::initWorldUI() LLPanel* side_tray_container = getRootView()->getChild<LLPanel>("side_tray_container"); LLSideTray* sidetrayp = LLSideTray::getInstance(); sidetrayp->setShape(side_tray_container->getLocalRect()); - sidetrayp->setFollowsAll(); + // don't follow right edge to avoid spurious resizes, since we are using a fixed width layout + sidetrayp->setFollows(FOLLOWS_LEFT|FOLLOWS_TOP|FOLLOWS_BOTTOM); side_tray_container->addChild(sidetrayp); side_tray_container->setVisible(FALSE); @@ -2867,19 +2869,17 @@ void LLViewerWindow::updateWorldViewRect(bool use_full_window) if (mWorldViewRectRaw != new_world_rect) { - // sending a signal with a new WorldView rect - mOnWorldViewRectUpdated(mWorldViewRectRaw, new_world_rect); - + LLRect old_world_rect = mWorldViewRectRaw; mWorldViewRectRaw = new_world_rect; gResizeScreenTexture = TRUE; LLViewerCamera::getInstance()->setViewHeightInPixels( mWorldViewRectRaw.getHeight() ); LLViewerCamera::getInstance()->setAspect( getWorldViewAspectRatio() ); - mWorldViewRectScaled = mWorldViewRectRaw; - mWorldViewRectScaled.mLeft = llround((F32)mWorldViewRectScaled.mLeft / mDisplayScale.mV[VX]); - mWorldViewRectScaled.mRight = llround((F32)mWorldViewRectScaled.mRight / mDisplayScale.mV[VX]); - mWorldViewRectScaled.mBottom = llround((F32)mWorldViewRectScaled.mBottom / mDisplayScale.mV[VY]); - mWorldViewRectScaled.mTop = llround((F32)mWorldViewRectScaled.mTop / mDisplayScale.mV[VY]); + mWorldViewRectScaled = calcScaledRect(mWorldViewRectRaw, mDisplayScale); + + // sending a signal with a new WorldView rect + old_world_rect = calcScaledRect(old_world_rect, mDisplayScale); + mOnWorldViewRectUpdated(old_world_rect, mWorldViewRectScaled); } } @@ -4794,6 +4794,18 @@ void LLViewerWindow::calcDisplayScale() } } +//static +LLRect LLViewerWindow::calcScaledRect(const LLRect & rect, const LLVector2& display_scale) +{ + LLRect res = rect; + res.mLeft = llround((F32)res.mLeft / display_scale.mV[VX]); + res.mRight = llround((F32)res.mRight / display_scale.mV[VX]); + res.mBottom = llround((F32)res.mBottom / display_scale.mV[VY]); + res.mTop = llround((F32)res.mTop / display_scale.mV[VY]); + + return res; +} + S32 LLViewerWindow::getChatConsoleBottomPad() { S32 offset = 0; diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index 517993182b..747fd3b253 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -391,6 +391,7 @@ public: F32 getWorldViewAspectRatio() const; const LLVector2& getDisplayScale() const { return mDisplayScale; } void calcDisplayScale(); + static LLRect calcScaledRect(const LLRect & rect, const LLVector2& display_scale); private: bool shouldShowToolTipFor(LLMouseHandler *mh); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 507c726e02..5aad87630d 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -344,7 +344,12 @@ LLPipeline::LLPipeline() : mWLSkyPool(NULL), mLightMask(0), mLightMovingMask(0), - mLightingDetail(0) + mLightingDetail(0), + mScreenWidth(0), + mScreenHeight(0), + mViewportWidth(0), + mViewportHeight(0) + { mNoiseMap = 0; mTrueNoiseMap = 0; @@ -518,13 +523,29 @@ void LLPipeline::resizeScreenTexture() GLuint view_height = gViewerWindow->getWorldViewHeightRaw(); allocateScreenBuffer(resX, resY, view_width, view_height); - - llinfos << "RESIZED SCREEN TEXTURE: " << resX << "x" << resY << llendl; } } void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U32 viewport_height) { + bool screen_size_changed = resX != mScreenWidth || resY != mScreenHeight; + bool viewport_size_changed = viewport_width != mViewportWidth || viewport_height != mViewportHeight; + + if (!screen_size_changed + && !viewport_size_changed) + { + // nothing to do + return; + } + + // remember these dimensions + mScreenWidth = resX; + mScreenHeight = resY; + mViewportWidth = viewport_width; + mViewportHeight = viewport_height; + + llinfos << "RESIZED SCREEN TEXTURE: " << resX << "x" << resY << llendl; + U32 samples = gSavedSettings.getU32("RenderFSAASamples"); U32 res_mod = gSavedSettings.getU32("RenderResolutionDivisor"); @@ -534,7 +555,8 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3 resY /= res_mod; } - if (gSavedSettings.getBOOL("RenderUIBuffer")) + if (gSavedSettings.getBOOL("RenderUIBuffer") + && screen_size_changed) { mUIScreen.allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); } @@ -542,25 +564,39 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3 if (LLPipeline::sRenderDeferred) { //allocate deferred rendering color buffers - mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE); - mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + if (screen_size_changed) + { + mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + addDeferredAttachments(mDeferredScreen); + } + // always set viewport to desired size, since allocate resets the viewport mDeferredScreen.setViewport(viewport_width, viewport_height); mDeferredDepth.setViewport(viewport_width, viewport_height); - addDeferredAttachments(mDeferredScreen); - mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); - mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + + if (screen_size_changed) + { + mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + } mScreen.setViewport(viewport_width, viewport_height); mEdgeMap.setViewport(viewport_width, viewport_height); for (U32 i = 0; i < 3; i++) { - mDeferredLight[i].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + if (screen_size_changed) + { + mDeferredLight[i].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + } mDeferredLight[i].setViewport(viewport_width, viewport_height); } for (U32 i = 0; i < 2; i++) { - mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + if (screen_size_changed) + { + mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + } mGIMapPost[i].setViewport(viewport_width, viewport_height); } @@ -568,7 +604,10 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3 for (U32 i = 0; i < 4; i++) { - mShadow[i].allocate(U32(resX*scale),U32(resY*scale), 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + if (screen_size_changed) + { + mShadow[i].allocate(U32(resX*scale),U32(resY*scale), 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + } mShadow[i].setViewport(viewport_width, viewport_height); } @@ -578,7 +617,10 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3 for (U32 i = 4; i < 6; i++) { - mShadow[i].allocate(width, height, 0, TRUE, FALSE); + if (screen_size_changed) + { + mShadow[i].allocate(width, height, 0, TRUE, FALSE); + } mShadow[i].setViewport(viewport_width, viewport_height); } @@ -586,32 +628,41 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 viewport_width, U3 width = nhpo2(resX)/2; height = nhpo2(resY)/2; - mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE); + if (screen_size_changed) + { + mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE); + } mLuminanceMap.setViewport(viewport_width, viewport_height); } else { - mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + if (screen_size_changed) + { + mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + } mScreen.setViewport(viewport_width, viewport_height); } if (gGLManager.mHasFramebufferMultisample && samples > 1) { - mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples); - mSampleBuffer.setViewport(viewport_width, viewport_height); - mScreen.setSampleBuffer(&mSampleBuffer); - - if (LLPipeline::sRenderDeferred) + if (screen_size_changed) { - addDeferredAttachments(mSampleBuffer); - mDeferredScreen.setSampleBuffer(&mSampleBuffer); + mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples); + if (LLPipeline::sRenderDeferred) + { + addDeferredAttachments(mSampleBuffer); + mDeferredScreen.setSampleBuffer(&mSampleBuffer); + } } + mSampleBuffer.setViewport(viewport_width, viewport_height); + mScreen.setSampleBuffer(&mSampleBuffer); stop_glerror(); } - if (LLPipeline::sRenderDeferred) + if (LLPipeline::sRenderDeferred + && screen_size_changed) { //share depth buffer between deferred targets mDeferredScreen.shareDepthBuffer(mScreen); for (U32 i = 0; i < 3; i++) @@ -726,6 +777,10 @@ void LLPipeline::createGLBuffers() mGlow[i].allocate(512,glow_res,GL_RGBA,FALSE,FALSE); } + // force reallocation of buffers by clearing known dimensions + mScreenWidth = 0; + mScreenHeight = 0; + allocateScreenBuffer(resX,resY, viewport_width, viewport_height); } diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 9193e19bb1..11b7b55f20 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -467,6 +467,11 @@ public: static F32 sMinRenderSize; //screen texture + U32 mScreenWidth; + U32 mScreenHeight; + U32 mViewportWidth; + U32 mViewportHeight; + LLRenderTarget mScreen; LLRenderTarget mUIScreen; LLRenderTarget mDeferredScreen; diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png Binary files differindex 98f1f04b9a..aa3898ca99 100644 --- a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png +++ b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png diff --git a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png Binary files differindex a355917fca..598342ea80 100644 --- a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png +++ b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 6678918db8..99f6fc5cb3 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -50,8 +50,12 @@ with the same filename but different name <texture name="Arrow_Right_Off" file_name="navbar/Arrow_Right_Off.png" preload="true" /> <texture name="Arrow_Right_Press" file_name="navbar/Arrow_Right_Press.png" preload="true" /> - <texture name="Arrow_Up" file_name="widgets/Arrow_Up.png" preload="true" /> - <texture name="Arrow_Down" file_name="widgets/Arrow_Down.png" preload="true" /> + <texture name="Arrow_Left" file_name="widgets/Arrow_Left.png" preload="true" /> + <texture name="Arrow_Right" file_name="widgets/Arrow_Right.png" preload="true" /> + + <texture name="Arrow_Small_Up" file_name="widgets/Arrow_Small_Up.png" preload="true" /> + <texture name="Arrow_Small_Left" file_name="widgets/Arrow_Small_Left.png" preload="true" /> + <texture name="Arrow_Small_Right" file_name="widgets/Arrow_Small_Right.png" preload="true" /> <texture name="AudioMute_Off" file_name="icons/AudioMute_Off.png" preload="false" /> <texture name="AudioMute_Over" file_name="icons/AudioMute_Over.png" preload="false" /> @@ -120,6 +124,7 @@ with the same filename but different name <texture name="ComboButton_Press" file_name="widgets/ComboButton_Press.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> <texture name="ComboButton_Selected" file_name="widgets/ComboButton_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> <texture name="ComboButton_UpSelected" file_name="widgets/ComboButton_UpSelected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> + <texture name="ComboButton_Up_On_Selected" file_name="widgets/ComboButton_Up_On_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> <texture name="ComboButton_Off" file_name="widgets/ComboButton_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> <texture name="ComboButton_UpOff" file_name="widgets/ComboButton_UpOff.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> <texture name="Container" file_name="containers/Container.png" preload="false" /> @@ -439,6 +444,7 @@ with the same filename but different name <texture name="Search" file_name="navbar/Search.png" preload="false" /> <texture name="SegmentedBtn_Left_Off" file_name="widgets/SegmentedBtn_Left_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> + <texture name="SegmentedBtn_Left_Over" file_name="widgets/SegmentedBtn_Left_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="SegmentedBtn_Left_Press" file_name="widgets/SegmentedBtn_Left_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="SegmentedBtn_Left_Disabled" file_name="widgets/SegmentedBtn_Left_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="SegmentedBtn_Left_Selected" file_name="widgets/SegmentedBtn_Left_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> @@ -453,6 +459,7 @@ with the same filename but different name <texture name="SegmentedBtn_Middle_Selected_Disabled" file_name="widgets/SegmentedBtn_Middle_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="SegmentedBtn_Right_Off" file_name="widgets/SegmentedBtn_Right_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> + <texture name="SegmentedBtn_Right_Over" file_name="widgets/SegmentedBtn_Right_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="SegmentedBtn_Right_Press" file_name="widgets/SegmentedBtn_Right_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="SegmentedBtn_Right_Disabled" file_name="widgets/SegmentedBtn_Right_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="SegmentedBtn_Right_Selected" file_name="widgets/SegmentedBtn_Right_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png Binary files differnew file mode 100644 index 0000000000..2d624c3779 --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png Binary files differnew file mode 100644 index 0000000000..91c03c426e --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png Binary files differnew file mode 100644 index 0000000000..38aac0e5ca --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png b/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png Binary files differnew file mode 100644 index 0000000000..fd1d11dd0b --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/ComboButton_Up_On_Selected.png diff --git a/indra/newview/skins/default/xui/de/panel_me.xml b/indra/newview/skins/default/xui/de/panel_me.xml new file mode 100644 index 0000000000..a685a430f0 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_me.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Ich" name="panel_me"> + <tab_container name="tabs"> + <panel label="Mein Profil" name="panel_profile"/> + <panel label="Auswahl" name="panel_picks"/> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index 615d1bf18d..4f1024f56d 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater can_tear_off="false" height="420" @@ -215,7 +215,6 @@ Go to World menu > About Land or select another parcel to show its details. </text> <button follows="left|top" - font="SansSerifSmall" height="16" label="Profile..." label_selected="Profile..." @@ -247,7 +246,6 @@ Go to World menu > About Land or select another parcel to show its details. width="250" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Set..." label_selected="Set..." @@ -269,7 +267,6 @@ Go to World menu > About Land or select another parcel to show its details. <button enabled="false" follows="left|top" - font="SansSerifSmall" height="16" label="Deed..." label_selected="Deed..." @@ -928,7 +925,6 @@ Go to World menu > About Land or select another parcel to show its details. bottom="100" enabled="false" follows="left|top" - font="SansSerifSmall" height="16" label="Show" label_selected="Show" @@ -940,7 +936,6 @@ Go to World menu > About Land or select another parcel to show its details. bottom="100" enabled="false" follows="left|top" - font="SansSerifSmall" height="16" label="Return..." label_selected="Return..." @@ -977,7 +972,6 @@ Go to World menu > About Land or select another parcel to show its details. bottom="120" enabled="false" follows="left|top" - font="SansSerifSmall" height="16" label="Show" label_selected="Show" @@ -989,7 +983,6 @@ Go to World menu > About Land or select another parcel to show its details. bottom="120" enabled="false" follows="left|top" - font="SansSerifSmall" height="16" label="Return..." label_selected="Return..." @@ -1026,7 +1019,6 @@ Go to World menu > About Land or select another parcel to show its details. bottom="140" enabled="false" follows="left|top" - font="SansSerifSmall" height="16" label="Show" label_selected="Show" @@ -1038,7 +1030,6 @@ Go to World menu > About Land or select another parcel to show its details. bottom="140" enabled="false" follows="left|top" - font="SansSerifSmall" height="16" label="Return..." label_selected="Return..." @@ -1108,7 +1099,6 @@ Go to World menu > About Land or select another parcel to show its details. </text> <button follows="left|top" - font="SansSerifSmall" height="16" label="Refresh List" label_selected="Refresh List" @@ -1120,7 +1110,6 @@ Go to World menu > About Land or select another parcel to show its details. <button enabled="false" follows="left|top" - font="SansSerifSmall" height="16" label="Return objects..." label_selected="Return objects..." @@ -1531,7 +1520,6 @@ Only large parcels can be listed in search. </text> <button follows="left|top" - font="SansSerifSmall" height="16" label="Set" label_selected="Set" @@ -1543,7 +1531,6 @@ Only large parcels can be listed in search. width="50" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Clear" label_selected="Clear" @@ -1654,7 +1641,6 @@ Only large parcels can be listed in search. text_readonly_color="0.576471 0.662745 0.835294 1" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Set..." label_selected="Set..." @@ -1685,7 +1671,6 @@ Only large parcels can be listed in search. width="300" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Reset..." label_selected="Reset..." @@ -2119,7 +2104,6 @@ Texture: width="80" /> <button follows="bottom" - font="SansSerifSmall" height="16" label="Remove" label_selected="Remove" @@ -2155,7 +2139,6 @@ Texture: width="195" /> <button follows="bottom" - font="SansSerifSmall" height="16" label="Add..." label_selected="Add..." @@ -2167,7 +2150,6 @@ Texture: <button enabled="false" follows="bottom" - font="SansSerifSmall" height="16" label="Remove" label_selected="Remove" diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_preview.xml index ebce758d3d..41b1f99d41 100644 --- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml @@ -163,7 +163,7 @@ Maximum animation length is [MAX_LENGTH] seconds. follows="top|left|right" height="23" layout="topleft" - left="85" + left="100" name="name_form" right="-10" /> <text @@ -182,7 +182,7 @@ Maximum animation length is [MAX_LENGTH] seconds. follows="top|left|right" height="23" layout="topleft" - left="85" + left="100" name="description_form" right="-10" /> <spinner @@ -192,7 +192,7 @@ Maximum animation length is [MAX_LENGTH] seconds. increment="1" initial_value="0" label="Priority" - label_width="90" + label_width="88" layout="topleft" left="10" max_val="4" @@ -214,14 +214,14 @@ Maximum animation length is [MAX_LENGTH] seconds. increment="1" initial_value="0" label="In(%)" - label_width="35" + label_width="49" layout="topleft" top_pad="5" left="30" max_val="100" name="loop_in_point" tool_tip="Sets point in animation that looping returns to" - width="110" /> + width="115" /> <spinner bottom_delta="0" follows="left|top" @@ -234,8 +234,8 @@ Maximum animation length is [MAX_LENGTH] seconds. max_val="100" name="loop_out_point" tool_tip="Sets point in animation that ends a loop" - label_width="45" - width="120" /> + label_width="49" + width="115" /> <text type="string" length="1" @@ -243,6 +243,7 @@ Maximum animation length is [MAX_LENGTH] seconds. follows="top|left" height="23" width="110" + word_wrap="true" layout="topleft" left="10" name="hand_label"> @@ -315,6 +316,7 @@ Maximum animation length is [MAX_LENGTH] seconds. follows="top|left" height="23" width="110" + word_wrap="true" layout="topleft" left="10" name="emote_label"> @@ -395,6 +397,7 @@ Maximum animation length is [MAX_LENGTH] seconds. follows="top|left" height="23" width="110" + word_wrap="true" layout="topleft" left="10" name="preview_label"> @@ -482,6 +485,8 @@ Maximum animation length is [MAX_LENGTH] seconds. <text type="string" length="1" + height="72" + word_wrap="true" top_pad="5" text_color="EmphasisColor" follows="top|left" diff --git a/indra/newview/skins/default/xui/en/floater_build_options.xml b/indra/newview/skins/default/xui/en/floater_build_options.xml index f0e678af00..56230e912c 100644 --- a/indra/newview/skins/default/xui/en/floater_build_options.xml +++ b/indra/newview/skins/default/xui/en/floater_build_options.xml @@ -15,14 +15,14 @@ height="23" initial_value="1" label="Grid Units (meters)" - label_width="130" + label_width="160" layout="topleft" left="10" max_val="5" min_val="0.01" name="GridResolution" top="25" - width="200" /> + width="230" /> <spinner control_name="GridDrawSize" decimal_digits="1" @@ -31,14 +31,14 @@ increment="0.5" initial_value="5" label="Grid Extents (meters)" - label_width="130" + label_width="160" layout="topleft" left_delta="0" max_val="50" min_val="1" name="GridDrawSize" top_pad="0" - width="200" /> + width="230" /> <check_box control_name="GridSubUnit" height="16" diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml index 9d2a811d9f..275ab5bb8b 100644 --- a/indra/newview/skins/default/xui/en/floater_customize.xml +++ b/indra/newview/skins/default/xui/en/floater_customize.xml @@ -64,7 +64,6 @@ width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Body" label_selected="Body" @@ -75,7 +74,6 @@ width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Head" label_selected="Head" @@ -86,7 +84,6 @@ width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Eyes" label_selected="Eyes" @@ -97,7 +94,6 @@ width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Ears" label_selected="Ears" @@ -108,7 +104,6 @@ width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Nose" label_selected="Nose" @@ -119,7 +114,6 @@ width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Mouth" label_selected="Mouth" @@ -130,7 +124,6 @@ width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Chin" label_selected="Chin" @@ -141,7 +134,6 @@ width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Torso" label_selected="Torso" @@ -152,7 +144,6 @@ width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Legs" label_selected="Legs" @@ -351,7 +342,6 @@ scratch and wear it. width="16" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Skin Color" label_selected="Skin Color" @@ -362,7 +352,6 @@ scratch and wear it. width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Face Detail" label_selected="Face Detail" @@ -373,7 +362,6 @@ scratch and wear it. width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Makeup" label_selected="Makeup" @@ -384,7 +372,6 @@ scratch and wear it. width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Body Detail" label_selected="Body Detail" @@ -606,7 +593,6 @@ scratch and wear it. width="16" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Color" label_selected="Color" @@ -617,7 +603,6 @@ scratch and wear it. width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Style" label_selected="Style" @@ -628,7 +613,6 @@ scratch and wear it. width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Eyebrows" label_selected="Eyebrows" @@ -639,7 +623,6 @@ scratch and wear it. width="82" /> <button follows="left|top" - font="SansSerifSmall" height="16" label="Facial" label_selected="Facial" diff --git a/indra/newview/skins/default/xui/en/floater_env_settings.xml b/indra/newview/skins/default/xui/en/floater_env_settings.xml index 5233cb023d..5e78037ee1 100644 --- a/indra/newview/skins/default/xui/en/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_env_settings.xml @@ -136,7 +136,6 @@ width="210" /> <button follows="left|top" - font="SansSerifSmall" height="20" label="Use Estate Time" layout="topleft" @@ -146,7 +145,6 @@ width="137" /> <button follows="left|top" - font="SansSerifSmall" height="20" label="Advanced Sky" layout="topleft" @@ -156,7 +154,6 @@ width="137" /> <button follows="left|top" - font="SansSerifSmall" height="20" label="Advanced Water" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_god_tools.xml b/indra/newview/skins/default/xui/en/floater_god_tools.xml index 79eed52fbf..b01c0edc8b 100644 --- a/indra/newview/skins/default/xui/en/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_god_tools.xml @@ -191,7 +191,6 @@ </check_box> <button follows="top|right" - font="SansSerifSmall" height="22" label="Bake Terrain" label_selected="Bake Terrain" @@ -206,7 +205,6 @@ </button> <button follows="top|right" - font="SansSerifSmall" height="22" label="Revert Terrain" label_selected="Revert Terrain" @@ -220,7 +218,6 @@ </button> <button follows="top|right" - font="SansSerifSmall" height="22" label="Swap Terrain" label_selected="Swap Terrain" @@ -419,7 +416,6 @@ <button follows="top|right" - font="SansSerifSmall" height="22" label="Refresh" label_selected="Refresh" @@ -434,7 +430,6 @@ </button> <button follows="top|right" - font="SansSerifSmall" height="22" label="Apply" label_selected="Apply" @@ -449,7 +444,6 @@ </button> <button follows="top|right" - font="SansSerifSmall" height="22" label="Select Region" label_selected="Select Region" @@ -464,7 +458,6 @@ </button> <button follows="top|right" - font="SansSerifSmall" height="22" label="Autosave now" label_selected="Autosave now" @@ -556,7 +549,6 @@ </check_box> <button follows="top|right" - font="SansSerifSmall" height="22" label="Apply" label_selected="Apply" @@ -571,7 +563,6 @@ </button> <button follows="top|right" - font="SansSerifSmall" height="22" label="Set Target" label_selected="Set Target" @@ -598,7 +589,6 @@ </text> <button follows="top|right" - font="SansSerifSmall" height="22" label="Delete Target's Scripted Objects On Others Land" label_selected="Delete Target's Scripted Objects On Others Land" @@ -613,7 +603,6 @@ </button> <button follows="top|right" - font="SansSerifSmall" height="22" label="Delete Target's Scripted Objects On *Any* Land" label_selected="Delete Target's Scripted Objects On *Any* Land" @@ -628,7 +617,6 @@ </button> <button follows="top|right" - font="SansSerifSmall" height="22" label="Delete *ALL* Of Target's Objects" label_selected="Delete *ALL* Of Target's Objects" @@ -643,7 +631,6 @@ </button> <button follows="top|right" - font="SansSerifSmall" height="20" label="Get Top Colliders" label_selected="Get Top Colliders" @@ -658,7 +645,6 @@ </button> <button follows="top|right" - font="SansSerifSmall" height="20" label="Get Top Scripts" label_selected="Get Top Scripts" @@ -673,7 +659,6 @@ </button> <button follows="top|right" - font="SansSerifSmall" height="20" label="Scripts digest" label_selected="Scripts digest" diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index 7f2f37409c..645c2973d8 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -18,7 +18,7 @@ min_height="350"> <layout_stack follows="all" - height="350" + height="320" width="300" layout="topleft" orientation="horizontal" @@ -35,7 +35,8 @@ <layout_panel left="0" top="0" - width="180" + height="200" + width="185" user_resize="false"> <button height="20" @@ -55,10 +56,9 @@ width="25" name="slide_right_btn" /> <chat_history - length="1" font="SansSerifSmall" - follows="left|right|top" - height="280" + follows="left|right|top|bottom" + height="150" name="chat_history" parse_highlights="true" allow_html="true" @@ -66,12 +66,13 @@ width="180"> </chat_history> <line_editor - follows="left|right|top" + bottom="0" + follows="left|right|bottom" font="SansSerifSmall" height="20" label="To" + layout="bottomleft" name="chat_editor" - top_pad="1" width="180"> </line_editor> </layout_panel> diff --git a/indra/newview/skins/default/xui/en/floater_image_preview.xml b/indra/newview/skins/default/xui/en/floater_image_preview.xml index 2562daf4b3..6f8f272128 100644 --- a/indra/newview/skins/default/xui/en/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_image_preview.xml @@ -47,9 +47,11 @@ <text type="string" length="1" - bottom_delta="20" + bottom_delta="30" follows="top|left" - height="15" + height="25" + width="105" + word_wrap="true" layout="topleft" name="preview_label"> Preview image as: @@ -96,7 +98,9 @@ <text type="string" length="1" - bottom="190" + bottom="225" + height="45" + word_wrap="true" follows="top|left" layout="topleft" left="10" @@ -114,7 +118,7 @@ Try saving image as 24 bit Targa (.tga). layout="topleft" left_delta="2" name="lossless_check" - top_pad="197" + top_pad="162" width="280" /> <button follows="bottom|right" diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml index 4ca6002c13..366098013b 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml @@ -106,12 +106,11 @@ left_delta="78" name="LabelCreatorName" top_delta="0" - width="200"> + width="170"> Nicole Linden </text> <button follows="top|right" - font="SansSerifSmall" height="16" label="Profile..." layout="topleft" @@ -140,12 +139,11 @@ left_delta="78" name="LabelOwnerName" top_delta="0" - width="200"> + width="170"> Thrax Linden </text> <button follows="top|right" - font="SansSerifSmall" height="16" label="Profile..." layout="topleft" @@ -257,12 +255,13 @@ type="string" length="1" follows="left|top" - height="10" + height="25" layout="topleft" left="10" name="NextOwnerLabel" top_pad="5" - width="78"> + width="78" + word_wrap="true"> Next owner: </text> <check_box @@ -303,7 +302,7 @@ layout="topleft" follows="left|top" name="combobox sale copy" - width="90"> + width="110"> <combo_box.item label="Copy" name="Copy" @@ -319,14 +318,26 @@ increment="1" control_name="Edit Cost" name="Edit Cost" - label="Price: L$" - label_width="60" + label="Price:" + label_width="100" left="10" - width="180" + width="192" min_val="1" height="19" max_val="999999999" top_pad="5"/> + <text + type="string" + length="1" + height="15" + follows="left|top" + layout="topleft" + left_delta="82" + name="CurrencySymbol" + top_delta="1" + width="18"> + L$ + </text> <!--line_editor border_style="line" diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml index 5a8ffcebea..cff0c29dfc 100644 --- a/indra/newview/skins/default/xui/en/floater_moveview.xml +++ b/indra/newview/skins/default/xui/en/floater_moveview.xml @@ -151,8 +151,7 @@ top="2" width="31" /> <button - follows="left|bottom" - font="SansSerifSmall" + follows="left|bottom" height="23" image_overlay="Move_Run_Off" image_selected="PushButton_Selected_Press" diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml index 3fd118df1c..41a440aaa0 100644 --- a/indra/newview/skins/default/xui/en/floater_openobject.xml +++ b/indra/newview/skins/default/xui/en/floater_openobject.xml @@ -38,7 +38,6 @@ width="284" /> <button follows="bottom|left" - font="SansSerifSmall" height="23" label="Copy To Inventory" label_selected="Copy To Inventory" @@ -53,7 +52,6 @@ </button> <button follows="bottom|left" - font="SansSerifSmall" height="23" label="Copy And Wear" label_selected="Copy And Wear" diff --git a/indra/newview/skins/default/xui/en/floater_preview_animation.xml b/indra/newview/skins/default/xui/en/floater_preview_animation.xml index 3b84358484..bbfb362337 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_animation.xml @@ -38,7 +38,6 @@ width="170" /> <button height="20" - font="SansSerifSmall" label="Play in World" label_selected="Stop" layout="topleft" @@ -49,7 +48,6 @@ width="125" /> <button height="20" - font="SansSerifSmall" label="Play Locally" label_selected="Stop" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_preview_sound.xml b/indra/newview/skins/default/xui/en/floater_preview_sound.xml index 95347f0dff..68a78d5017 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_sound.xml @@ -50,7 +50,6 @@ <button follows="left|top" height="22" - font="SansSerifSmall" label="Play Locally" label_selected="Play Locally" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml index 2cf800fb15..e6a78563f3 100644 --- a/indra/newview/skins/default/xui/en/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml @@ -205,7 +205,6 @@ width="130" /> <button height="20" - font="SansSerifSmall" label="Select" layout="topleft" left_pad="5" @@ -267,7 +266,6 @@ </radio_group> <button height="20" - font="SansSerifSmall" label="Show Objects" layout="topleft" name="show_objects" @@ -290,7 +288,6 @@ <button follows="bottom|left" height="20" - font="SansSerifSmall" label="Set Land For Sale" layout="topleft" left_delta="0" @@ -300,7 +297,6 @@ <button follows="bottom|right" height="20" - font="SansSerifSmall" label="Cancel" layout="topleft" left_pad="30" diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml index 95a40e27f7..8860ac1e50 100644 --- a/indra/newview/skins/default/xui/en/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml @@ -120,7 +120,6 @@ width="85" /> <button follows="left|top" - font="SansSerifSmall" height="20" label="More >>" layout="topleft" @@ -131,7 +130,6 @@ width="80" /> <button follows="left|top" - font="SansSerifSmall" height="20" label="<< Less" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_telehub.xml b/indra/newview/skins/default/xui/en/floater_telehub.xml index cc0ab8c57e..374f014908 100644 --- a/indra/newview/skins/default/xui/en/floater_telehub.xml +++ b/indra/newview/skins/default/xui/en/floater_telehub.xml @@ -57,7 +57,6 @@ </text> <button follows="top|left" - font="SansSerifSmall" height="20" label="Connect Telehub" layout="topleft" @@ -67,7 +66,6 @@ width="110" /> <button follows="top|left" - font="SansSerifSmall" height="20" label="Disconnect" layout="topleft" @@ -97,7 +95,6 @@ width="230" /> <button follows="top|left" - font="SansSerifSmall" height="20" label="Add Spawn" layout="topleft" @@ -107,7 +104,6 @@ width="110" /> <button follows="top|left" - font="SansSerifSmall" height="20" label="Remove Spawn" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_button.xml b/indra/newview/skins/default/xui/en/floater_test_button.xml index 2bd0d1a0fa..8c6ad5c0f7 100644 --- a/indra/newview/skins/default/xui/en/floater_test_button.xml +++ b/indra/newview/skins/default/xui/en/floater_test_button.xml @@ -23,7 +23,6 @@ name="bottom_delta_button" /> <button bottom_delta="30" - font="SansSerifSmall" height="23" label="SansSerifSmall" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_test_slider.xml b/indra/newview/skins/default/xui/en/floater_test_slider.xml index 86ff82e01f..85d8bb2bb1 100644 --- a/indra/newview/skins/default/xui/en/floater_test_slider.xml +++ b/indra/newview/skins/default/xui/en/floater_test_slider.xml @@ -2,7 +2,7 @@ <floater legacy_header_height="18" can_resize="true" - height="400" + height="500" layout="topleft" name="floater_test_slider" help_topic="floater_test_slider" @@ -84,4 +84,17 @@ name="red_slider" text_color="red" text_width="40" /> + <slider + width ="140" + bottom="490" + decimal_digits="1" + height="100" + left="20" + label="Red Slider Vertical" + label_width="100" + layout="topleft" + name="red_slider_vertical" + text_color="red" + orientation="vertical" + text_width="20" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml index 4679ae467d..113da9ea4d 100644 --- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml @@ -49,7 +49,6 @@ <button enabled="false" follows="left|bottom" - font="SansSerifSmall" height="20" label="Default" label_selected="Default" @@ -61,7 +60,6 @@ <button enabled="false" follows="left|bottom" - font="SansSerifSmall" height="20" label="None" label_selected="None" @@ -72,7 +70,6 @@ width="80" /> <button follows="left|bottom" - font="SansSerifSmall" height="20" label="Blank" label_selected="Blank" diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 8b6f0f03fe..636e9d465a 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -701,7 +701,6 @@ </slider_bar> <button follows="left|top" - font="SansSerifSmall" height="19" label="Apply" label_selected="Apply" @@ -927,7 +926,6 @@ width="150" /> <button follows="top|left" - font="SansSerifSmall" height="20" label="Deed" label_selected="Deed" @@ -2606,7 +2604,6 @@ even though the user gets a free copy. width="170" /> <button follows="left|top" - font="SansSerifSmall" height="19" label="Apply" label_selected="Apply" @@ -2742,7 +2739,6 @@ even though the user gets a free copy. decouple_texture_size="true" /> <button follows="left|top" - font="SansSerifSmall" height="19" label="Align" label_selected="Align Media" diff --git a/indra/newview/skins/default/xui/en/floater_url_entry.xml b/indra/newview/skins/default/xui/en/floater_url_entry.xml index 1ab42cb140..29fb29fabf 100644 --- a/indra/newview/skins/default/xui/en/floater_url_entry.xml +++ b/indra/newview/skins/default/xui/en/floater_url_entry.xml @@ -32,7 +32,6 @@ <button follows="top|left" height="20" - font="SansSerifSmall" label="OK" layout="topleft" left="10" @@ -42,7 +41,6 @@ <button follows="top|left" height="20" - font="SansSerifSmall" label="Cancel" layout="topleft" left_pad="5" @@ -52,7 +50,6 @@ <button follows="top|right" height="20" - font="SansSerifSmall" label="Clear" layout="topleft" left_pad="65" diff --git a/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml index ef68d03a45..4ece0fa3ba 100644 --- a/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml +++ b/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml @@ -17,9 +17,9 @@ tool_tip="Enter a URL or URL pattern to White List" width="350" /> - <button follows="top|left" height="20" font="SansSerifSmall" label="OK" + <button follows="top|left" height="20" label="OK" layout="topleft" left="10" name="ok_btn" bottom_delta="28" width="64" /> - <button follows="top|left" height="20" font="SansSerifSmall" label="Cancel" + <button follows="top|left" height="20" label="Cancel" layout="topleft" left_pad="5" name="cancel_btn" bottom_delta="0" width="64" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml index c60cc163c8..e3db0972ec 100644 --- a/indra/newview/skins/default/xui/en/floater_world_map.xml +++ b/indra/newview/skins/default/xui/en/floater_world_map.xml @@ -116,7 +116,6 @@ </text> <button follows="top|right" - font="SansSerifSmall" height="16" label="Go Home" label_selected="Go Home" diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml index 14a4949df7..3bf7f50a2c 100644 --- a/indra/newview/skins/default/xui/en/main_view.xml +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -15,19 +15,19 @@ orientation="vertical" top="0"> <layout_panel auto_resize="false" - min_height="19" + height="84" mouse_opaque="false" - name="status_bar_container" - height="19" + name="nav_and_status_bar_region" width="1024" - visible="false"/> - <layout_panel auto_resize="false" - height="65" - mouse_opaque="false" - name="nav_bar_container" - width="1024" - visible="false"/> - <panel auto_resize="true" + visible="false"> + <panel follows="left|right|bottom" + left="0" + name="nav_bar_container" + right="1024" + top="19" + height="65"/> + </layout_panel> + <layout_panel auto_resize="true" follows="all" height="500" layout="topleft" @@ -124,8 +124,16 @@ height="500" name="DebugView" width="1024"/> - </panel> + </layout_panel> </layout_stack> + <panel mouse_opaque="false" + follows="left|right|top" + name="status_bar_container" + height="19" + left="0" + top="0" + width="1024" + visible="false"/> <notify_box_view top="0" follows="all" height="768" diff --git a/indra/newview/skins/default/xui/en/menu_navbar.xml b/indra/newview/skins/default/xui/en/menu_navbar.xml index 89469fb013..e17eeb46f6 100644 --- a/indra/newview/skins/default/xui/en/menu_navbar.xml +++ b/indra/newview/skins/default/xui/en/menu_navbar.xml @@ -10,7 +10,6 @@ width="128"> <menu_item_check label="Show Coordinates" - layout="topleft" name="Show Coordinates"> <menu_item_check.on_click function="Navbar.Action" @@ -19,22 +18,28 @@ function="Navbar.EnableMenuItem" parameter="show_coordinates" /> </menu_item_check> + <menu_item_check + label="Show Parcel Properties" + name="Show Parcel Properties"> + <menu_item_check.on_click + function="Navbar.Action" + parameter="show_properties" /> + <menu_item_check.on_check + control="NavBarShowParcelProperties" /> + </menu_item_check> <!-- Label of 'Landmark' item is changing in runtime, see AddLandmarkNavBarMenu/EditLandmarkNavBarMenu in strings.xml --> <menu_item_call label="Landmark" - layout="topleft" name="Landmark"> <menu_item_call.on_click function="Navbar.Action" parameter="landmark" /> </menu_item_call> <menu_item_separator - layout="topleft" name="Separator" /> <menu_item_call label="Cut" - layout="topleft" name="Cut"> <menu_item_call.on_click function="Navbar.Action" @@ -45,7 +50,6 @@ </menu_item_call> <menu_item_call label="Copy" - layout="topleft" name="Copy"> <menu_item_call.on_click function="Navbar.Action" @@ -56,7 +60,6 @@ </menu_item_call> <menu_item_call label="Paste" - layout="topleft" name="Paste"> <menu_item_call.on_click function="Navbar.Action" @@ -67,7 +70,6 @@ </menu_item_call> <menu_item_call label="Delete" - layout="topleft" name="Delete"> <menu_item_call.on_click function="Navbar.Action" @@ -78,7 +80,6 @@ </menu_item_call> <menu_item_call label="Select All" - layout="topleft" name="Select All"> <menu_item_call.on_click function="Navbar.Action" diff --git a/indra/newview/skins/default/xui/en/menu_url_inventory.xml b/indra/newview/skins/default/xui/en/menu_url_inventory.xml new file mode 100644 index 0000000000..cf9d1d5881 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_url_inventory.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<context_menu + layout="topleft" + name="Url Popup"> + <menu_item_call + label="Show Inventory Item" + layout="topleft" + name="show_item"> + <menu_item_call.on_click + function="Url.Execute" /> + </menu_item_call> + <menu_item_separator + layout="topleft" /> + <menu_item_call + label="Copy Name to clipboard" + layout="topleft" + name="url_copy_label"> + <menu_item_call.on_click + function="Url.CopyLabel" /> + </menu_item_call> + <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> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index c104f74dd1..1d385b5a9f 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -4506,7 +4506,7 @@ You don't have permission to copy this. icon="notifytip.tga" name="InventoryAccepted" type="notifytip"> -[NAME] accepted your inventory offer. +[NAME] received your inventory offer. </notification> <notification @@ -4978,17 +4978,17 @@ No valid parcel could be found. icon="notify.tga" name="ObjectGiveItem" type="offer"> -An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has offered you [OBJECTTYPE]: +An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you [OBJECTTYPE]: [ITEM_SLURL] <form name="form"> <button index="0" name="Keep" - text="OK"/> + text="Keep"/> <button index="1" name="Discard" - text="Cancel"/> + text="Discard"/> <button index="2" name="Mute" @@ -5000,17 +5000,17 @@ An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has offered you [OBJECTTY icon="notify.tga" name="ObjectGiveItemUnknownUser" type="offer"> -An object named [OBJECTFROMNAME] owned by (an unknown Resident) has offered you [OBJECTTYPE]: +An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you [OBJECTTYPE]: [ITEM_SLURL] <form name="form"> <button index="0" name="Keep" - text="OK"/> + text="Keep"/> <button index="1" name="Discard" - text="Cancel"/> + text="Discard"/> <button index="2" name="Mute" @@ -5022,17 +5022,21 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has offered you icon="notify.tga" name="UserGiveItem" type="offer"> -[NAME_SLURL] has offered you [OBJECTTYPE]: +[NAME_SLURL] has given you [OBJECTTYPE]: [ITEM_SLURL] <form name="form"> <button index="0" name="Keep" - text="Accept"/> + text="Keep"/> + <button + index="4" + name="Show" + text="Show"/> <button index="1" name="Discard" - text="No, thanks"/> + text="Discard"/> </form> </notification> diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml index a283cff5b3..368ab17689 100644 --- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel border="false" + follows="all" height="215" name="panel_im_control_panel" width="180"> @@ -23,7 +24,7 @@ bg_alpha_color="DkGray2" border="false" bottom="1" - follows="left|bottom" + follows="left|right|bottom" height="70" left="0" left_pad="0" @@ -32,6 +33,7 @@ width="180"> <button bottom="10" + follows="all" height="20" label="Call" left_delta="40" @@ -39,6 +41,7 @@ width="100" /> <button bottom="40" + follows="all" height="20" label="Leave Call" name="end_call_btn" @@ -46,6 +49,7 @@ width="100" /> <button enabled="false" + follows="all" bottom="10" height="20" label="Voice Controls" diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 6480469f43..da8006d545 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -46,7 +46,7 @@ left="0" min_height="23" width="310" - top="0" + top="4" min_width="192" name="chat_bar" user_resize="false" @@ -58,7 +58,7 @@ height="28" layout="topleft" min_height="28" - width="104" + width="100" top_delta="0" min_width="54" name="speak_panel" @@ -71,7 +71,7 @@ layout="topleft" left="0" name="talk" - top="3" + top="4" width="100" /> </layout_panel> <icon @@ -104,11 +104,10 @@ layout="topleft" name="Gesture" left="0" - top="3" + top="4" width="82" tool_tip="Shows/hides gestures"> <gesture_combo_box.drop_down_button - font="SansSerifSmall" pad_right="10" use_ellipses="true" /> </gesture_combo_box> @@ -137,6 +136,9 @@ width="80" min_width="49"> <button + image_selected="PushButton_Selected_Press" + image_pressed="PushButton_Press" + image_pressed_selected="PushButton_Selected_Press" follows="left|right" height="23" use_ellipses="true" @@ -145,7 +147,7 @@ layout="topleft" name="movement_btn" tool_tip="Shows/hides movement controls" - top="3" + top="4" width="80"> <button.init_callback function="Button.SetDockableFloaterToggle" @@ -176,6 +178,9 @@ user_resize="false" width="80"> <button + image_selected="PushButton_Selected_Press" + image_pressed="PushButton_Press" + image_pressed_selected="PushButton_Selected_Press" follows="left|right" height="23" use_ellipses="true" @@ -184,7 +189,7 @@ layout="topleft" left="0" tool_tip="Shows/hides camera controls" - top="3" + top="4" name="camera_btn" width="80"> <button.init_callback @@ -221,7 +226,7 @@ layout="topleft" name="snapshots" width="36" - top="3" + top="4" image_overlay="Snapshot_Off" tool_tip="Take snapshot"> <button.commit_callback @@ -245,37 +250,47 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. <chiclet_panel mouse_opaque="false" follows="left|right" - height="28" + height="23" layout="topleft" left="0" min_width="180" name="chiclet_list" - top="0" - chiclet_padding="3" + top="4" + chiclet_padding="4" scrolling_offset="40" width="189"> <button auto_resize="true" follows="right" height="23" - image_selected="BottomTray_Scroll_Left" - image_unselected="BottomTray_Scroll_Left" + image_selected="SegmentedBtn_Left_Off" + image_unselected="SegmentedBtn_Left_Off" + image_hover_selected="SegmentedBtn_Left_Over" + image_hover_unselected="SegmentedBtn_Left_Over" + image_pressed="SegmentedBtn_Left_Press" + image_pressed_selected="SegmentedBtn_Left_Press" + image_overlay="Arrow_Small_Left" layout="topleft" name="chicklet_left_scroll_button" tab_stop="false" - top="3" + top="0" visible="false" width="20" /> <button auto_resize="true" follows="right" height="23" - image_selected="BottomTray_Scroll_Right" - image_unselected="BottomTray_Scroll_Right" + image_selected="SegmentedBtn_Right_Off" + image_unselected="SegmentedBtn_Right_Off" + image_hover_selected="SegmentedBtn_Right_Over" + image_hover_unselected="SegmentedBtn_Right_Over" + image_pressed="SegmentedBtn_Right_Press" + image_pressed_selected="SegmentedBtn_Right_Press" + image_overlay="Arrow_Small_Right" layout="topleft" name="chicklet_right_scroll_button" tab_stop="false" - top="3" + top="0" visible="false" width="20" /> </chiclet_panel> @@ -311,6 +326,9 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. top="4" width="54"> <button + image_selected="PushButton_Selected_Press" + image_pressed="PushButton_Press" + image_pressed_selected="PushButton_Selected_Press" auto_resize="true" halign="right" height="23" diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml index 7a3eae35a9..c1090a1686 100644 --- a/indra/newview/skins/default/xui/en/panel_chat_header.xml +++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel - background_visible="true" + background_visible="true" bevel_style="in" bg_alpha_color="black" follows="top|left|right" height="24" label="im_header" - layout="topleft" + layout="topleft" name="im_header" width="300"> - <avatar_icon + <avatar_icon follows="left" height="18" image_name="Generic_Person" @@ -19,18 +19,20 @@ name="avatar_icon" top="3" width="18" /> - <text + <text_editor + v_pad = "0" + read_only = "true" follows="left|right" - font.style="BOLD" - height="12" - layout="topleft" - left_pad="5" - right="-50" + font.style="BOLD" + height="12" + layout="topleft" + left_pad="5" + right="-60" name="user_name" text_color="white" - top="8" - use_ellipses="true" - value="Erica Vader" /> + top="8" + use_ellipses="true" + value="Ericag Vader" /> <text font="SansSerifSmall" follows="right" @@ -39,7 +41,7 @@ layout="topleft" left_pad="5" name="time_box" - right="-10" + right="-5" top="8" value="23:30" width="50" /> diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml index bdca8531dc..df889e87c3 100644 --- a/indra/newview/skins/default/xui/en/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml @@ -151,7 +151,6 @@ name="buttons"> <button follows="bottom|left" - font="SansSerifSmall" height="19" label="Teleport" layout="topleft" @@ -161,7 +160,6 @@ width="90" /> <button follows="bottom|left" - font="SansSerifSmall" height="19" label="Map" layout="topleft" @@ -171,7 +169,6 @@ width="90" /> <button follows="bottom|left" - font="SansSerifSmall" height="19" label="Edit" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml index 2378ae518b..a833ad97d9 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml @@ -15,6 +15,10 @@ [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] </string> + <string + name="RegisterDateFormat"> + [REG_DATE] ([AGE]) + </string> <string name="AcctTypeResident" value="Resident" /> diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml index 2fee2033f6..41b210557e 100644 --- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel border="false" + follows="left|top|right|bottom" height="238" name="panel_im_control_panel" width="180"> @@ -22,6 +23,7 @@ <button bottom_pad="0" + follows="left|right|bottom" height="20" label="Group Info" left_delta="28" @@ -32,7 +34,7 @@ background_visible="true" bg_alpha_color="0.2 0.2 0.2 1" border="false" - follows="left|bottom" + follows="left|right|bottom" height="70" left="0" left_pad="0" @@ -42,6 +44,7 @@ <button bottom="10" + follows="all" height="20" label="Call Group" left_delta="28" @@ -50,6 +53,7 @@ <button bottom="40" + follows="all" height="20" label="Leave Call" name="end_call_btn" @@ -59,6 +63,7 @@ <button enabled="false" bottom="10" + follows="all" height="20" label="Open Voice Controls" name="voice_ctrls_btn" diff --git a/indra/newview/skins/default/xui/en/panel_group_invite.xml b/indra/newview/skins/default/xui/en/panel_group_invite.xml index 1996977acb..37578eae70 100644 --- a/indra/newview/skins/default/xui/en/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/en/panel_group_invite.xml @@ -33,7 +33,6 @@ invite to your group. Click 'Open Resident Chooser' to start. </text> <button - font="SansSerifSmall" height="20" label="Open Resident Chooser" layout="topleft" @@ -53,7 +52,6 @@ Resident Chooser' to start. top_pad="4" width="200" /> <button - font="SansSerifSmall" height="20" label="Remove Selected from List" layout="topleft" @@ -82,7 +80,6 @@ Resident Chooser' to start. top_delta="16" width="196" /> <button - font="SansSerifSmall" height="20" label="Send Invitations" layout="topleft" @@ -91,7 +88,6 @@ Resident Chooser' to start. top="356" width="130" /> <button - font="SansSerifSmall" height="20" label="Cancel" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_me.xml b/indra/newview/skins/default/xui/en/panel_me.xml new file mode 100644 index 0000000000..a99777848b --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_me.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + background_visible="true" + border="false" + follows="all" + height="570" + label="My Profile" + layout="topleft" + left="0" + name="panel_me" + top="0" + width="333"> + <!--<text + type="string" + follows="top|left|right" + font="SansSerifHugeBold" + height="20" + layout="topleft" + left="15" + name="user_name" + text_color="white" + top="0" + mouse_opaque="true" + width="280"> + (Loading...) + </text> --> + <tab_container + follows="all" + height="575" + halign="center" + layout="topleft" + left="10" + name="tabs" + tab_min_width="95" + tab_height="30" + tab_position="top" + top_pad="10" + width="313"> + <panel + class="panel_my_profile" + filename="panel_my_profile.xml" + label="PROFILE" + help_topic="panel_my_profile_tab" + name="panel_profile" /> + <panel + class="panel_picks" + filename="panel_picks.xml" + label="PICKS" + help_topic="panel_my_picks_tab" + name="panel_picks" /> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml new file mode 100644 index 0000000000..fe3e010cf9 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml @@ -0,0 +1,429 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + follows="all" + height="535" + label="Profile" + layout="topleft" + left="0" + name="panel_profile" + top="0" + width="313"> + <string + name="CaptionTextAcctInfo"> + [ACCTTYPE] +[PAYMENTINFO] [AGEVERIFICATION] + </string> + <string + name="payment_update_link_url"> + http://www.secondlife.com/account/billing.php?lang=en + </string> + <string + name="partner_edit_link_url"> + http://www.secondlife.com/account/partners.php?lang=en + </string> + <string + name="my_account_link_url" + value="http://secondlife.com/account" /> + <string + name="no_partner_text" + value="None" /> + <string + name="RegisterDateFormat"> + [REG_DATE] ([AGE]) + </string> + <scroll_container + color="DkGray2" + follows="all" + height="485" + layout="topleft" + name="profile_scroll" + reserve_scroll_corner="true" + opaque="true" + top="0" + width="313"> + <panel + name="scroll_content_panel" + follows="left|top|right" + height="485" + layout="topleft" + top="0" + left="0" + width="313"> + <panel + follows="left|top" + height="117" + layout="topleft" + left="10" + name="second_life_image_panel" + top="0" + width="280"> + <texture_picker + allow_no_texture="true" + default_image_name="None" + enabled="false" + follows="top|left" + height="117" + layout="topleft" + left="0" + name="2nd_life_pic" + top="10" + width="102" /> + <icon + height="102" + image_name="Blank" + layout="topleft" + name="2nd_life_edit_icon" + label="" + left="0" + tool_tip="Click the Edit Profile button below to change image" + top="10" + width="102" /> + <text + follows="left|top|right" + font.style="BOLD" + height="15" + layout="topleft" + left_pad="10" + name="title_sl_descr_text" + text_color="white" + top_delta="0" + value="[SECOND_LIFE]:" + width="165" /> + <expandable_text + follows="left|top|right" + height="95" + layout="topleft" + left="107" + textbox.max_length="512" + name="sl_description_edit" + top_pad="-3" + width="173" + expanded_bg_visible="true" + expanded_bg_color="DkGray"> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. + </expandable_text> + </panel> + <panel + follows="left|top" + height="117" + layout="topleft" + top_pad="10" + left="10" + name="first_life_image_panel" + width="280"> + <texture_picker + allow_no_texture="true" + default_image_name="None" + enabled="false" + follows="top|left" + height="117" + layout="topleft" + left="0" + name="real_world_pic" + width="102" /> + <icon + height="102" + image_name="Blank" + layout="topleft" + name="real_world_edit_icon" + label="" + left="0" + tool_tip="Click the Edit Profile button below to change image" + top="4" + width="102" /> + <text + follows="left|top|right" + font.style="BOLD" + height="15" + layout="topleft" + left_pad="10" + name="title_rw_descr_text" + text_color="white" + top_delta="0" + value="Real World:" + width="165" /> + <expandable_text + follows="left|top|right" + height="95" + layout="topleft" + left="107" + textbox.max_length="512" + name="fl_description_edit" + top_pad="-3" + width="173" + expanded_bg_visible="true" + expanded_bg_color="DkGray"> + Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. + </expandable_text> + </panel> + + + <!-- <panel + name="lifes_images_panel" + follows="left|top|right" + height="244" + layout="topleft" + top="0" + left="0" + width="285"> + <panel + follows="left|top" + height="117" + layout="topleft" + left="10" + name="second_life_image_panel" + top="0" + width="285"> + <text + follows="left|top|right" + font.style="BOLD" + height="15" + layout="topleft" + left="0" + name="second_life_photo_title_text" + text_color="white" + value="[SECOND_LIFE]:" + width="170" /> + <texture_picker + allow_no_texture="true" + default_image_name="None" + enabled="false" + follows="top|left" + height="117" + layout="topleft" + left="0" + name="2nd_life_pic" + top_pad="0" + width="102" /> + </panel> + <icon + height="18" + image_name="AddItem_Off" + layout="topleft" + name="2nd_life_edit_icon" + label="" + left="87" + tool_tip="Click to select an image" + top="25" + width="18" /> + </panel> --> + + + + + <text + type="string" + follows="left|top" + font="SansSerifSmall" + font.style="BOLD" + height="15" + layout="topleft" + left="10" + name="me_homepage_text" + text_color="white" + top_pad="0" + width="280"> + Homepage: + </text> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="homepage_edit" + top_pad="0" + value="http://librarianavengers.org" + width="280" + word_wrap="false" + use_ellipses="true" + /> + <text + follows="left|top" + font.style="BOLD" + height="10" + layout="topleft" + left="10" + name="title_member_text" + text_color="white" + top_pad="10" + value="Member Since:" + width="280" /> + <text + follows="left|top" + height="15" + layout="topleft" + left="10" + name="register_date" + value="05/31/1976" + width="280" + word_wrap="true" /> + <text + follows="left|top" + font.style="BOLD" + height="15" + layout="topleft" + left="10" + name="title_acc_status_text" + text_color="white" + top_pad="10" + value="Account Status:" + width="280" /> + <!-- <text + type="string" + follows="left|top" + font="SansSerifSmall" + height="15" + layout="topleft" + left_pad="10" + name="my_account_link" + top_delta="0" + value="Go to Dashboard" + width="100"/> --> + <text + follows="left|top" + height="20" + layout="topleft" + left="10" + name="acc_status_text" + top_pad="0" + value="Resident. No payment info on file." + width="280" + word_wrap="true" /> + <text + follows="left|top" + font.style="BOLD" + height="15" + layout="topleft" + left="10" + name="title_partner_text" + text_color="white" + top_pad="5" + value="Partner:" + width="280" /> + <panel + follows="left|top" + height="15" + layout="topleft" + left="10" + name="partner_data_panel" + top_pad="0" + width="280"> + <text + follows="left|top" + height="10" + layout="topleft" + left="0" + name="partner_text" + top="0" + value="[FIRST] [LAST]" + width="280" + word_wrap="true" /> + </panel> + <text + follows="left|top" + font.style="BOLD" + height="15" + layout="topleft" + left="10" + name="title_groups_text" + text_color="white" + top_pad="8" + value="Groups:" + width="280" /> + <expandable_text + follows="left|top|bottom" + height="60" + layout="topleft" + left="10" + name="sl_groups" + top_pad="0" + width="280" + expanded_bg_visible="true" + expanded_bg_color="DkGray"> + Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. + </expandable_text> + </panel> + </scroll_container> + <panel + follows="bottom|left" + layout="topleft" + left="0" + name="profile_buttons_panel" + top_pad="2" + bottom="10" + height="19" + width="303"> + <button + follows="bottom|left" + height="19" + label="Add Friend" + layout="topleft" + left="0" + mouse_opaque="false" + name="add_friend" + top="5" + width="75" /> + <button + follows="bottom|left" + height="19" + label="IM" + layout="topleft" + name="im" + top="5" + left_pad="5" + width="45" /> + <button + follows="bottom|left" + height="19" + label="Call" + layout="topleft" + name="call" + left_pad="5" + top="5" + width="45" /> + <button + enabled="false" + follows="bottom|left" + height="19" + label="Map" + layout="topleft" + name="show_on_map_btn" + top="5" + left_pad="5" + width="45" /> + <button + follows="bottom|left" + height="19" + label="Teleport" + layout="topleft" + name="teleport" + left_pad="5" + top="5" + width="80" /> + </panel> + <panel + follows="bottom|left" + layout="topleft" + left="0" + top_pad="-17" + name="profile_me_buttons_panel" + visible="false" + height="19" + width="303"> + <button + follows="bottom|right" + height="19" + left="10" + label="Edit Profile" + name="edit_profile_btn" + width="130" /> + <button + follows="bottom|right" + height="19" + label="Edit Appearance" + left_pad="10" + name="edit_appearance_btn" + right="-10" + width="130" /> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml index a90337d31a..bf33b752d9 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -41,7 +41,6 @@ width="600"> <button follows="left|top" - font="SansSerifSmall" height="23" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" @@ -58,7 +57,6 @@ <button follows="left|top" - font="SansSerifSmall" height="23" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" @@ -74,7 +72,6 @@ width="31" /> <button follows="left|top" - font="SansSerifSmall" height="23" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Disabled" diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml index ecf35523cd..de612fbbc3 100644 --- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml @@ -26,7 +26,7 @@ max_length="512" name="chat_box" tool_tip="Press Enter to say, Ctrl+Enter to shout" - top="0" + top="1" width="279" /> <output_monitor auto_update="true" @@ -37,19 +37,21 @@ left_pad="-24" mouse_opaque="true" name="chat_zone_indicator" - top="4" + top="1" visible="true" width="20" /> <button follows="right" is_toggle="true" width="20" - top="0" + top="1" layout="topleft" - left_pad="4 " + left_pad="4" image_disabled="ComboButton_UpOff" image_unselected="ComboButton_UpOff" - image_selected="ComboButton_UpSelected" + image_selected="ComboButton_Up_On_Selected" + image_pressed="ComboButton_UpSelected" + image_pressed_selected="ComboButton_Up_On_Selected" height="23" name="show_nearby_chat" tool_tip="Shows/hides nearby chat log"> diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index a370b450e9..87861e7901 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -344,7 +344,6 @@ background_visible="true" width="313"> <button follows="bottom|left" - font="SansSerifSmall" top="4" left="0" height="19" @@ -355,7 +354,6 @@ background_visible="true" width="70" /> <button follows="bottom|left" - font="SansSerifSmall" top="4" left_pad="2" height="19" @@ -366,7 +364,6 @@ background_visible="true" width="45" /> <button follows="bottom|left" - font="SansSerifSmall" top="4" left_pad="2" height="19" @@ -377,7 +374,6 @@ background_visible="true" width="50" /> <button follows="left|top" - font="SansSerifSmall" top="4" left_pad="2" height="19" @@ -387,7 +383,6 @@ background_visible="true" width="60" /> <button follows="bottom|left" - font="SansSerifSmall" top="4" left_pad="2" height="19" @@ -398,7 +393,6 @@ background_visible="true" width="75" /> <button follows="bottom|left" - font="SansSerifSmall" top="4" left="0" height="19" @@ -409,7 +403,6 @@ background_visible="true" width="110" /> <button follows="bottom|left" - font="SansSerifSmall" top="4" left_pad="2" height="19" diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml index cf18aa2d39..0cf2a7afc3 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_info.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml @@ -103,7 +103,6 @@ name="buttons"> <button follows="bottom|left" - font="SansSerifSmall" height="19" label="Teleport" layout="topleft" @@ -113,7 +112,6 @@ width="90" /> <button follows="bottom|left" - font="SansSerifSmall" height="19" label="Map" layout="topleft" @@ -123,7 +121,6 @@ width="90" /> <button follows="bottom|left" - font="SansSerifSmall" height="19" label="Edit" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml index 5cefe3e4ab..ca84c9147b 100644 --- a/indra/newview/skins/default/xui/en/panel_picks.xml +++ b/indra/newview/skins/default/xui/en/panel_picks.xml @@ -24,7 +24,7 @@ top="10" visible="false" width="313"> - There are no any picks/classifieds here + There are no picks/classifieds here </text> <accordion follows="all" @@ -131,7 +131,6 @@ <button enabled="false" follows="bottom|left" - font="SansSerifSmall" height="25" label="Info" layout="topleft" @@ -143,7 +142,6 @@ <button enabled="false" follows="bottom|left" - font="SansSerifSmall" height="25" label="Teleport" layout="topleft" @@ -155,7 +153,6 @@ <button enabled="false" follows="bottom|left" - font="SansSerifSmall" height="25" label="Map" layout="topleft" @@ -167,7 +164,6 @@ <button enabled="false" follows="bottom|right" - font="SansSerifSmall" height="25" label="▼" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index 5efacb68be..88df529ec1 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -72,7 +72,6 @@ background_visible="true" width="313"> <button follows="bottom|left" - font="SansSerifSmall" height="19" label="Teleport" layout="topleft" @@ -82,7 +81,6 @@ background_visible="true" width="100" /> <button follows="bottom|left" - font="SansSerifSmall" height="19" label="Map" layout="topleft" @@ -92,7 +90,6 @@ background_visible="true" width="70" /> <button follows="bottom|left" - font="SansSerifSmall" height="19" label="Edit" layout="topleft" @@ -102,7 +99,6 @@ background_visible="true" width="70" /> <button follows="bottom|right" - font="SansSerifSmall" height="19" image_disabled="ForwardArrow_Off" image_selected="ForwardArrow_Press" @@ -114,7 +110,6 @@ background_visible="true" width="18" /> <button follows="bottom|right" - font="SansSerifSmall" height="19" label="Close" layout="topleft" @@ -124,7 +119,6 @@ background_visible="true" width="60" /> <button follows="bottom|right" - font="SansSerifSmall" height="19" label="Cancel" layout="topleft" @@ -134,7 +128,6 @@ background_visible="true" width="60" /> <button follows="bottom|right" - font="SansSerifSmall" height="19" label="Save" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index bf1d46451b..947bb67152 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -27,7 +27,10 @@ <string name="no_partner_text" value="None" /> - <string name="RegisterDateFormat">[REG_DATE] ([AGE])</string> + <string + name="RegisterDateFormat"> + [REG_DATE] ([AGE]) + </string> <scroll_container color="DkGray2" follows="all" @@ -324,7 +327,6 @@ width="64" /> <button follows="bottom|right" - font="SansSerifSmall" height="19" label="▼" layout="topleft" @@ -344,7 +346,6 @@ width="303"> <button follows="bottom|right" - font="SansSerifSmall" height="19" left="10" label="Edit Profile" diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml index b015346a79..8e683bffc1 100644 --- a/indra/newview/skins/default/xui/en/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml @@ -25,10 +25,11 @@ tab_stop="false" top="2" width="23" /> - <text + <text_editor + read_only = "true" follows="top|left|right" font="SansSerifHugeBold" - height="26" + height="29" layout="topleft" left_pad="10" name="user_name" @@ -52,7 +53,7 @@ halign="center" layout="topleft" left="10" - min_width="333" + min_width="333" name="tabs" tab_min_width="80" tab_height="30" diff --git a/indra/newview/skins/default/xui/en/panel_region_covenant.xml b/indra/newview/skins/default/xui/en/panel_region_covenant.xml index 49fc930cd8..75d7d85505 100644 --- a/indra/newview/skins/default/xui/en/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/en/panel_region_covenant.xml @@ -119,7 +119,6 @@ </text_editor> <button follows="left|top" - font="SansSerifSmall" height="18" label="Reset" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml index a1bca4229d..e07585d285 100644 --- a/indra/newview/skins/default/xui/en/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/en/panel_region_debug.xml @@ -61,7 +61,6 @@ <button enabled="false" follows="left|top" - font="SansSerifSmall" height="20" label="Apply" layout="topleft" @@ -109,7 +108,6 @@ <button follows="left|top" height="20" - font="SansSerifSmall" label="Choose" layout="topleft" left_pad="5" @@ -156,7 +154,6 @@ <button follows="left|top" height="20" - font="SansSerifSmall" label="Return" layout="topleft" left="20" @@ -165,7 +162,6 @@ width="80" /> <button follows="left|top" - font="SansSerifSmall" height="20" label="Get Top Colliders..." layout="topleft" @@ -176,7 +172,6 @@ width="150" /> <button follows="left|top" - font="SansSerifSmall" height="20" label="Get Top Scripts..." layout="topleft" @@ -187,7 +182,6 @@ width="150" /> <button follows="left|top" - font="SansSerifSmall" height="20" label="Restart Region" layout="topleft" @@ -198,7 +192,6 @@ width="130" /> <button follows="left|top" - font="SansSerifSmall" height="20" label="Delay Restart" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml index d02354a647..95242a9639 100644 --- a/indra/newview/skins/default/xui/en/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml @@ -102,9 +102,9 @@ background_visible="true" > <panel - class="panel_me_profile_view" - name="panel_me_profile" - filename="panel_me_profile.xml" + class="panel_me" + name="panel_me" + filename="panel_me.xml" label="Me" /> </sidetray_tab> diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index b1afe76500..65bc48265d 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -43,7 +43,6 @@ auto_resize="true" halign="right" follows="right|bottom" - font="SansSerifSmall" image_selected="BuyArrow_Over" image_unselected="BuyArrow_Off" image_pressed="BuyArrow_Press" diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml index b9a89a2ebc..4dae8e48a0 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -71,7 +71,6 @@ width="313" /> <button follows="bottom|left" - font="SansSerifSmall" height="25" label="Wear" layout="topleft" @@ -81,7 +80,6 @@ width="80" /> <button follows="bottom|left" - font="SansSerifSmall" height="25" label="New Outfit" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index bb29397ef6..33a6a52f5c 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -41,7 +41,6 @@ <button enabled="true" follows="bottom|left" - font="SansSerifSmall" height="25" label="Info" layout="topleft" @@ -52,7 +51,6 @@ <button enabled="false" follows="bottom|left" - font="SansSerifSmall" height="25" label="Wear" layout="topleft" @@ -63,7 +61,6 @@ <button enabled="false" follows="bottom|left" - font="SansSerifSmall" height="25" label="Play" layout="topleft" @@ -74,7 +71,6 @@ <button enabled="false" follows="bottom|left" - font="SansSerifSmall" height="25" label="Teleport" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index 6ae2477304..db8a844eb0 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -126,12 +126,11 @@ left_delta="78" name="LabelCreatorName" top_delta="0" - width="200"> + width="140"> Nicole Linden </text> <button follows="top|right" - font="SansSerifSmall" height="16" label="Profile..." layout="topleft" @@ -160,12 +159,11 @@ left_delta="78" name="LabelOwnerName" top_delta="0" - width="200"> + width="140"> Thrax Linden </text> <button follows="top|right" - font="SansSerifSmall" height="16" label="Profile..." layout="topleft" @@ -194,7 +192,7 @@ left_delta="78" name="LabelAcquiredDate" top_delta="0" - width="252"> + width="222"> Wed May 24 12:50:46 2006 </text> <text @@ -277,12 +275,13 @@ type="string" length="1" follows="left|top" - height="10" + height="25" layout="topleft" left="10" name="NextOwnerLabel" top_pad="5" - width="78"> + width="78" + word_wrap="true"> Next owner: </text> <check_box @@ -323,7 +322,7 @@ layout="topleft" follows="left|top" name="combobox sale copy" - width="90"> + width="110"> <combo_box.item label="Copy" name="Copy" @@ -339,14 +338,26 @@ increment="1" control_name="Edit Cost" name="Edit Cost" - label="Price: L$" - label_width="60" + label="Price:" + label_width="100" left="10" - width="180" + width="192" min_val="1" height="19" max_val="999999999" top_pad="5"/> + <text + type="string" + length="1" + height="15" + follows="left|top" + layout="topleft" + left_delta="82" + name="CurrencySymbol" + top_delta="1" + width="18"> + L$ + </text> <!--line_editor border_style="line" border_thickness="1" @@ -479,7 +490,6 @@ width="313"> <button follows="bottom|left" - font="SansSerifSmall" height="25" label="Edit" layout="topleft" @@ -489,7 +499,6 @@ width="50" /> <button follows="bottom|right" - font="SansSerifSmall" height="25" label="Cancel" layout="topleft" @@ -499,7 +508,6 @@ width="70" /> <button follows="bottom|right" - font="SansSerifSmall" height="25" label="Save" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml index 7647be7830..348f0dfc09 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml @@ -203,7 +203,6 @@ width="150" /> <button follows="top|left" - font="SansSerifSmall" height="20" label="Deed" label_selected="Deed" @@ -485,7 +484,6 @@ width="313"> <button follows="bottom|left" - font="SansSerifSmall" height="25" label="Edit" layout="topleft" @@ -495,7 +493,6 @@ width="50" /> <button follows="bottom|left" - font="SansSerifSmall" height="25" label="Open" layout="topleft" @@ -505,7 +502,6 @@ width="60" /> <button follows="bottom|left" - font="SansSerifSmall" height="25" label="Pay" layout="topleft" @@ -515,7 +511,6 @@ width="50" /> <button follows="bottom|left" - font="SansSerifSmall" height="25" label="Buy" layout="topleft" @@ -525,7 +520,6 @@ width="60" /> <button follows="bottom|right" - font="SansSerifSmall" height="25" label="Cancel" layout="topleft" @@ -535,7 +529,6 @@ width="70" /> <button follows="bottom|right" - font="SansSerifSmall" height="25" label="Save" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/widgets/button.xml b/indra/newview/skins/default/xui/en/widgets/button.xml index 6b11e72247..7c54e618ef 100644 --- a/indra/newview/skins/default/xui/en/widgets/button.xml +++ b/indra/newview/skins/default/xui/en/widgets/button.xml @@ -15,7 +15,6 @@ image_color="ButtonImageColor" image_color_disabled="ButtonImageColor" flash_color="ButtonFlashBgColor" - font="SansSerifSmall" hover_glow_amount="0.15" halign="center" scale_image="true"> diff --git a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml index 6171be034f..4229f34c09 100644 --- a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml +++ b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<gesture_combo_box font="SansSerifSmall" +<gesture_combo_box label="Gestures" list_position="below" max_chars="20" @@ -7,7 +7,6 @@ <gesture_combo_box.combo_button name="Combobox Button" label="" hover_glow_amount="0.15" - font="SansSerifSmall" scale_image="true" image_unselected="ComboButton_Off" image_selected="ComboButton_Selected" @@ -17,15 +16,15 @@ label="" halign="center" hover_glow_amount="0.15" - font="SansSerif" scale_image="true" + image_selected="PushButton_Selected_Press" + image_pressed="PushButton_Press" + image_pressed_selected="PushButton_Selected_Press" image_unselected="PushButton_Off" - image_selected="PushButton_Selected" image_disabled="PushButton_Disabled" image_disabled_selected="PushButton_Selected_Disabled" /> <gesture_combo_box.combo_list bg_writeable_color="MenuDefaultBgColor" - scroll_bar_bg_visible="true" /> + scroll_bar_bg_visible="false" /> <gesture_combo_box.combo_editor name="Combo Text Entry" - select_on_focus="true" - font="SansSerifSmall" /> + select_on_focus="true" /> </gesture_combo_box> diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml index d88bcfab1d..17b1479ec4 100644 --- a/indra/newview/skins/default/xui/en/widgets/location_input.xml +++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml @@ -11,7 +11,7 @@ add_landmark_image_disabled="Favorite_Star_Off" add_landmark_image_hover="Favorite_Star_Over" add_landmark_image_selected="Favorite_Star_Press" - add_landmark_hpad="2" + icon_hpad="2" allow_text_entry="true" list_position="below" show_text_as_tentative="false" @@ -38,6 +38,60 @@ scale_image="false" top="19" left="-3" /> + <voice_icon + name="voice_icon" + width="22" + height="18" + top="21" + image_name="parcel_lght_VoiceNo" + /> + <fly_icon + name="fly_icon" + width="22" + height="18" + top="21" + image_name="parcel_lght_FlyNo" + /> + <push_icon + name="push_icon" + width="22" + height="18" + top="21" + image_name="parcel_lght_PushNo" + /> + <build_icon + name="build_icon" + width="22" + height="18" + top="21" + image_name="parcel_lght_BuildNo" + /> + <scripts_icon + name="scripts_icon" + width="22" + height="18" + top="21" + image_name="parcel_lght_ScriptsNo" + /> + <!-- NOTE: Placeholder icon, there is no dark grayscale version --> + <damage_icon + name="damage_icon" + width="22" + height="18" + top="21" + image_name="parcel_lght_Damage" + /> + <!-- Default text color is invisible on top of nav bar background --> + <damage_text + name="damage_text" + width="50" + height="18" + top="16" + halign="right" + font="SansSerifSmall" + text_color="TextFgColor" + /> + <combo_button name="Location History" label="" pad_right="0"/> diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item.xml b/indra/newview/skins/default/xui/en/widgets/menu_item.xml index c98e9cb6b8..2bbaa6233f 100644 --- a/indra/newview/skins/default/xui/en/widgets/menu_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/menu_item.xml @@ -1,6 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <!-- Use this for the top-level menu styling --> -<menu_item - font="SansSerifSmall" - > +<menu_item> </menu_item> diff --git a/indra/newview/skins/default/xui/en/widgets/tab_container.xml b/indra/newview/skins/default/xui/en/widgets/tab_container.xml index f1401140de..477c6fb8b8 100644 --- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml +++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml @@ -2,7 +2,7 @@ <tab_container tab_min_width="60" tab_max_width="150" font_halign="center" - font="SansSerif" + font="SansSerifSmall" tab_height="21"> <first_tab tab_top_image_unselected="TabTop_Left_Off" tab_top_image_selected="TabTop_Left_Selected" diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml index 64c2e65a6e..7781bdd066 100644 --- a/indra/newview/skins/default/xui/en/widgets/talk_button.xml +++ b/indra/newview/skins/default/xui/en/widgets/talk_button.xml @@ -7,10 +7,13 @@ --> <speak_button follows="left|right" + image_selected="SegmentedBtn_Left_Selected_Press" + image_unselected="SegmentedBtn_Left_Off" + image_pressed="SegmentedBtn_Left_Selected_Press" + image_pressed_selected="SegmentedBtn_Left_Selected_Press" name="left" label="Speak" label_selected="Speak" - font="SansSerifSmall" tab_stop="false" /> <show_button @@ -23,8 +26,11 @@ bottom="0" tab_stop="false" is_toggle="true" - image_selected="ComboButton_UpSelected" - image_unselected="ComboButton_UpOff" + image_selected="SegmentedBtn_Right_Selected_Press" + image_unselected="SegmentedBtn_Right_Off" + image_pressed="SegmentedBtn_Right_Press" + image_pressed_selected="SegmentedBtn_Right_Selected_Press" + image_overlay="Arrow_Small_Up" /> <monitor follows="right" diff --git a/indra/newview/skins/default/xui/fr/panel_me.xml b/indra/newview/skins/default/xui/fr/panel_me.xml new file mode 100644 index 0000000000..5bedee4616 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_me.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Moi" name="panel_me"> + <tab_container name="tabs"> + <panel label="Mon Profil" name="panel_profile"/> + <panel label="Préférences" name="panel_picks"/> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_me.xml b/indra/newview/skins/default/xui/ja/panel_me.xml new file mode 100644 index 0000000000..84151f43cf --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_me.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="ミー" name="panel_me"> + <tab_container name="tabs"> + <panel label="プロフィール" name="panel_profile"/> + <panel label="ピック" name="panel_picks"/> + </tab_container> +</panel> |