diff options
59 files changed, 2608 insertions, 863 deletions
diff --git a/doc/contributions.txt b/doc/contributions.txt index 4ab7284b72..6edb727682 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -120,6 +120,8 @@ Angus Boyd VWR-592 Ann Congrejo CT-193 +Ardy Lay + VWR-19499 Argent Stonecutter VWR-68 Armin Weatherwax @@ -699,6 +701,8 @@ Whoops Babii VWR-8298 Wilton Lundquist VWR-7682 +Zai Lynch + VWR-19505 Zarkonnen Decosta VWR-253 Zi Ree diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake index 180504d286..b6f1e06edd 100644 --- a/indra/cmake/APR.cmake +++ b/indra/cmake/APR.cmake @@ -56,7 +56,7 @@ else (STANDALONE) if (LINUX) if (VIEWER) - list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} uuid) + list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES}) endif (VIEWER) list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} rt) endif (LINUX) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 2dd296bf12..a756770881 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -232,7 +232,6 @@ elseif(LINUX) libssl.so libstacktrace.so libtcmalloc.so - libuuid.so.1 libssl.so.0.9.7 ) diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake index 32c4bc81df..5710360de2 100644 --- a/indra/cmake/ViewerMiscLibs.cmake +++ b/indra/cmake/ViewerMiscLibs.cmake @@ -2,7 +2,6 @@ include(Prebuilt) if (NOT STANDALONE) - use_prebuilt_binary(libuuid) use_prebuilt_binary(vivox) use_prebuilt_binary(fontconfig) endif(NOT STANDALONE) diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index e1203971ea..ff90806271 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -519,6 +519,36 @@ void LLFloater::storeDockStateControl() } } +LLRect LLFloater::getSavedRect() const +{ + LLRect rect; + + if (mRectControl.size() > 1) + { + rect = LLUI::sSettingGroups["floater"]->getRect(mRectControl); + } + + return rect; +} + +bool LLFloater::hasSavedRect() const +{ + return !getSavedRect().isEmpty(); +} + +// static +std::string LLFloater::getControlName(const std::string& name, const LLSD& key) +{ + std::string ctrl_name = name; + + // Add the key to the control name if appropriate. + if (key.isString() && !key.asString().empty()) + { + ctrl_name += "_" + key.asString(); + } + + return ctrl_name; +} void LLFloater::setVisible( BOOL visible ) { @@ -2664,18 +2694,20 @@ void LLFloater::setInstanceName(const std::string& name) mInstanceName = name; if (!mInstanceName.empty()) { + std::string ctrl_name = getControlName(mInstanceName, mKey); + // save_rect and save_visibility only apply to registered floaters if (!mRectControl.empty()) { - mRectControl = LLFloaterReg::declareRectControl(mInstanceName); + mRectControl = LLFloaterReg::declareRectControl(ctrl_name); } if (!mVisibilityControl.empty()) { - mVisibilityControl = LLFloaterReg::declareVisibilityControl(mInstanceName); + mVisibilityControl = LLFloaterReg::declareVisibilityControl(ctrl_name); } if(!mDocStateControl.empty()) { - mDocStateControl = LLFloaterReg::declareDockStateControl(mInstanceName); + mDocStateControl = LLFloaterReg::declareDockStateControl(ctrl_name); } } diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 5e482cbac3..ed1f0715af 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -203,6 +203,10 @@ public: BOOL isResizable() const { return mResizable; } void setResizeLimits( S32 min_width, S32 min_height ); void getResizeLimits( S32* min_width, S32* min_height ) { *min_width = mMinWidth; *min_height = mMinHeight; } + LLRect getSavedRect() const; + bool hasSavedRect() const; + + static std::string getControlName(const std::string& name, const LLSD& key); bool isMinimizeable() const{ return mCanMinimize; } bool isCloseable() const{ return mCanClose; } diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index 5cc9add1e2..0ff7557ead 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -368,6 +368,22 @@ S32 LLLayoutStack::getDefaultWidth(S32 cur_width) return cur_width; } +void LLLayoutStack::movePanel(LLPanel* panel_to_move, LLPanel* target_panel, bool move_to_front) +{ + LayoutPanel* embedded_panel_to_move = findEmbeddedPanel(panel_to_move); + LayoutPanel* embedded_target_panel = move_to_front ? *mPanels.begin() : findEmbeddedPanel(target_panel); + + if (!embedded_panel_to_move || !embedded_target_panel || embedded_panel_to_move == embedded_target_panel) + { + llwarns << "One of the panels was not found in stack or NULL was passed instead of valid panel" << llendl; + return; + } + e_panel_list_t::iterator it = std::find(mPanels.begin(), mPanels.end(), embedded_panel_to_move); + mPanels.erase(it); + it = move_to_front ? mPanels.begin() : std::find(mPanels.begin(), mPanels.end(), embedded_target_panel); + mPanels.insert(it, embedded_panel_to_move); +} + void LLLayoutStack::addPanel(LLPanel* panel, S32 min_width, S32 min_height, S32 max_width, S32 max_height, BOOL auto_resize, BOOL user_resize, EAnimate animate, S32 index) { // panel starts off invisible (collapsed) diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h index cd59ee3966..6fcc8e2ac3 100644 --- a/indra/llui/lllayoutstack.h +++ b/indra/llui/lllayoutstack.h @@ -72,6 +72,11 @@ public: void removePanel(LLPanel* panel); void collapsePanel(LLPanel* panel, BOOL collapsed = TRUE); S32 getNumPanels() { return mPanels.size(); } + /** + * Moves panel_to_move before target_panel inside layout stack (both panels should already be there). + * If move_to_front is true target_panel is ignored and panel_to_move is moved to the beginning of mPanels + */ + void movePanel(LLPanel* panel_to_move, LLPanel* target_panel, bool move_to_front = false); void updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize); void setPanelUserResize(const std::string& panel_name, BOOL user_resize); diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 49ae58d53a..d1cd335783 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -45,7 +45,7 @@ RequestExecutionLevel admin ; on Vista we must be admin because we write to Prog # *TODO: Move these into the language files themselves LangString LanguageCode ${LANG_DANISH} "da" LangString LanguageCode ${LANG_GERMAN} "de" -Langstring LanguageCode ${LANG_ENGLISH} "en" +LangString LanguageCode ${LANG_ENGLISH} "en" LangString LanguageCode ${LANG_SPANISH} "es" LangString LanguageCode ${LANG_FRENCH} "fr" LangString LanguageCode ${LANG_JAPANESE} "ja" diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 4c2caae2c6..dd08e6c49a 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1619,11 +1619,14 @@ void LLAgentWearables::queryWearableCache() gAgentQueryManager.mActiveCacheQueries[baked_index] = gAgentQueryManager.mWearablesCacheQueryID; } - - llinfos << "Requesting texture cache entry for " << num_queries << " baked textures" << llendl; - gMessageSystem->sendReliable(gAgent.getRegion()->getHost()); - gAgentQueryManager.mNumPendingQueries++; - gAgentQueryManager.mWearablesCacheQueryID++; + //VWR-22113: gAgent.getRegion() can return null if invalid, seen here on logout + if(gAgent.getRegion()) + { + llinfos << "Requesting texture cache entry for " << num_queries << " baked textures" << llendl; + gMessageSystem->sendReliable(gAgent.getRegion()->getHost()); + gAgentQueryManager.mNumPendingQueries++; + gAgentQueryManager.mWearablesCacheQueryID++; + } } LLUUID LLAgentWearables::computeBakedTextureHash(LLVOAvatarDefines::EBakedTextureIndex baked_index, diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 6ee4387236..f3ade83d00 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -49,6 +49,48 @@ #include "lltoolmgr.h" #include "llviewerparcelmgr.h" +#include "llviewerwindow.h" +#include "llsdserialize.h" + +// Distance from mouse down on which drag'n'drop should be started. +#define DRAG_START_DISTANCE 3 + +static const std::string SORTING_DATA_FILE_NAME = "bottomtray_buttons_order.xml"; + +LLDefaultChildRegistry::Register<LLBottomtrayButton> bottomtray_button("bottomtray_button"); + +// LLBottomtrayButton methods + +// virtual +BOOL LLBottomtrayButton::handleHover(S32 x, S32 y, MASK mask) +{ + S32 screenX, screenY; + localPointToScreen(x, y, &screenX, &screenY); + // pass hover to bottomtray + LLBottomTray::getInstance()->handleHover(screenX, screenY, mask); + return FALSE; +} +//virtual +BOOL LLBottomtrayButton::handleMouseUp(S32 x, S32 y, MASK mask) +{ + S32 screenX, screenY; + localPointToScreen(x, y, &screenX, &screenY); + // pass mouse up to bottomtray + LLBottomTray::getInstance()->onDraggableButtonMouseUp(this,screenX, screenY, mask); + LLButton::handleMouseUp(x, y, mask); + return FALSE; +} +//virtual +BOOL LLBottomtrayButton::handleMouseDown(S32 x, S32 y, MASK mask) +{ + S32 screenX, screenY; + localPointToScreen(x, y, &screenX, &screenY); + // pass mouse up to bottomtray + LLBottomTray::getInstance()->onDraggableButtonMouseDown(this,screenX, screenY, mask); + LLButton::handleMouseDown(x, y, mask); + return FALSE; +} + static void update_build_button_enable_state() { bool can_edit = LLToolMgr::getInstance()->canEdit(); @@ -153,6 +195,10 @@ LLBottomTray::LLBottomTray(const LLSD&) , mCamButton(NULL) , mBottomTrayLite(NULL) , mIsInLiteMode(false) +, mDragStarted(false) +, mDraggedItem(NULL) +, mLandingTab(NULL) +, mCheckForDrag(false) { // Firstly add ourself to IMSession observers, so we catch session events // before chiclets do that. @@ -177,6 +223,8 @@ LLBottomTray::LLBottomTray(const LLSD&) mBottomTrayLite->setFollowsAll(); mBottomTrayLite->setVisible(FALSE); } + + mImageDragIndication = LLUI::getUIImage(getString("DragIndicationImageName")); } LLBottomTray::~LLBottomTray() @@ -504,11 +552,253 @@ BOOL LLBottomTray::postBuild() showWellButton(RS_IM_WELL, !LLIMWellWindow::getInstance()->isWindowEmpty()); showWellButton(RS_NOTIFICATION_WELL, !LLNotificationWellWindow::getInstance()->isWindowEmpty()); + loadButtonsOrder(); + LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(boost::bind(&update_build_button_enable_state)); return TRUE; } +//Drag-n-drop + +void LLBottomTray::onDraggableButtonMouseDown(LLUICtrl* ctrl, S32 x, S32 y, MASK mask) +{ + if (ctrl == NULL) return; + LLView* parent_view = ctrl->getParent(); + if(parent_view != NULL) + { + // we actually drag'n'drop panel (not button) in code, so have to find a parent + // of button which called this method on mouse down. + LLPanel* parent = dynamic_cast<LLPanel*>(parent_view); + // It may happen that we clicked not usual button, but button inside widget(speak, gesture) + // so we'll need to get a level higher to reach layout panel as a parent. + if(parent == NULL) parent = dynamic_cast<LLPanel*>(parent_view->getParent()); + if (parent && parent->getVisible()) + { + mDraggedItem = parent; + mCheckForDrag = true; + mStartX = x; + mStartY = y; + } + } +} + +LLPanel* LLBottomTray::findChildPanelByLocalCoords(S32 x, S32 y) +{ + LLPanel* ctrl = 0; + S32 screenX, screenY; + const child_list_t* list = mToolbarStack->getChildList(); + + localPointToScreen(x, y, &screenX, &screenY); + + // look for a child panel which contains the point (screenX, screenY) in it's rectangle + for (child_list_const_iter_t i = list->begin(); i != list->end(); ++i) + { + LLRect rect; + localRectToScreen((*i)->getRect(), &rect); + + if (rect.pointInRect(screenX, screenY)) + { + ctrl = dynamic_cast<LLPanel*>(*i); + break; + } + } + + return ctrl; +} + +BOOL LLBottomTray::handleHover(S32 x, S32 y, MASK mask) +{ + // if mouse down on draggable item was done, check whether we should start DnD + if (mCheckForDrag) + { + // Start drag'n'drop if mouse cursor was dragged away frome mouse down location enough + if(sqrt((float)((mStartX-x)*(mStartX-x)+(mStartY-y)*(mStartY-y))) > DRAG_START_DISTANCE) + { + mDragStarted = true; + mCheckForDrag = false; + } + } + if (mDragStarted) + { + // Check whether the cursor is over draggable area, find which panel it is and set is as + // landing tab for drag'n'drop + if(isCursorOverDraggableArea(x, y)) + { + LLPanel* panel = findChildPanelByLocalCoords(x,y); + if (panel && panel != mDraggedItem) mLandingTab = panel; + gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROWDRAG); + } + else + { + gViewerWindow->getWindow()->setCursor(UI_CURSOR_NO); + } + } + + return TRUE; +} + +bool LLBottomTray::isCursorOverDraggableArea(S32 x, S32 y) +{ + bool result = getRect().pointInRect(x, y); + result = result && mNearbyChatBar->calcScreenRect().mRight < x; + result = result && mChicletPanel->calcScreenRect().mRight > x; + return result; +} + +void LLBottomTray::updateButtonsOrdersAfterDnD() +{ + // *TODO: change implementation of this method to support simplify it + // (and according to future possible changes in the way button order is saved between sessions). + state_object_map_t::const_iterator it = mStateProcessedObjectMap.begin(); + state_object_map_t::const_iterator it_end = mStateProcessedObjectMap.end(); + // Speak button is currently the only draggable button not in mStateProcessedObjectMap, + // so if dragged_state is not found in that map, it should be RS_BUTTON_SPEAK. Change this code if any other + // exclusions from mStateProcessedObjectMap will become draggable. + EResizeState dragged_state = RS_BUTTON_SPEAK; + EResizeState landing_state = RS_NORESIZE; + bool landing_state_found = false; + // Find states for dragged item and landing tab + for (; it != it_end; ++it) + { + if (it->second == mDraggedItem) + { + dragged_state = it->first; + } + else if (it->second == mLandingTab) + { + landing_state = it->first; + landing_state_found = true; + } + } + + // Update order of buttons according to drag'n'drop + mButtonsOrder.erase(std::find(mButtonsOrder.begin(), mButtonsOrder.end(), dragged_state)); + if (!landing_state_found && mLandingTab == getChild<LLPanel>(PANEL_CHICLET_NAME)) + { + mButtonsOrder.push_back(dragged_state); + } + else + { + if (!landing_state_found) landing_state = RS_BUTTON_SPEAK; + mButtonsOrder.insert(std::find(mButtonsOrder.begin(), mButtonsOrder.end(), landing_state), dragged_state); + } + // Synchronize button process order with their order + resize_state_vec_t::const_iterator it1 = mButtonsOrder.begin(); + const resize_state_vec_t::const_iterator it_end1 = mButtonsOrder.end(); + resize_state_vec_t::iterator it2 = mButtonsProcessOrder.begin(); + for (; it1 != it_end1; ++it1) + { + // Skip Speak because it is not in mButtonsProcessOrder(it's the reason why mButtonsOrder was introduced). + // If any other draggable items will be added to bottomtray later, they should also be skipped here. + if (*it1 != RS_BUTTON_SPEAK) + { + *it2 = *it1; + ++it2; + } + } + + saveButtonsOrder(); +} + +void LLBottomTray::saveButtonsOrder() +{ + std::string user_dir = gDirUtilp->getLindenUserDir(); + if (user_dir.empty()) return; + + std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME); + LLSD settings_llsd; + int i = 0; + const resize_state_vec_t::const_iterator it_end = mButtonsOrder.end(); + // we use numbers as keys for map which is saved in file and contains resize states as its values + for (resize_state_vec_t::const_iterator it = mButtonsOrder.begin(); it != it_end; ++it, i++) + { + std::string str = llformat("%d", i); + settings_llsd[str] = *it; + } + llofstream file; + file.open(filename); + LLSDSerialize::toPrettyXML(settings_llsd, file); +} + +void LLBottomTray::loadButtonsOrder() +{ + // load per-resident sorting information + std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME); + + LLSD settings_llsd; + llifstream file; + file.open(filename); + if (!file.is_open()) return; + + LLSDSerialize::fromXML(settings_llsd, file); + + + mButtonsOrder.clear(); + mButtonsProcessOrder.clear(); + int i = 0; + // getting button order from file + for (LLSD::map_const_iterator iter = settings_llsd.beginMap(); + iter != settings_llsd.endMap(); ++iter, ++i) + { + std::string str = llformat("%d", i); + EResizeState state = (EResizeState)settings_llsd[str].asInteger(); + mButtonsOrder.push_back(state); + // RS_BUTTON_SPEAK is skipped, because it shouldn't be in mButtonsProcessOrder (it does not hide or shrink). + if (state != RS_BUTTON_SPEAK) + { + mButtonsProcessOrder.push_back(state); + } + } + + // There are other panels in layout stack order of which is not saved. Also, panels order of which is saved, + // are already in layout stack but in wrong order. The most convenient way to place them is moving them + // to front one by one (because in this case we don't have to pass the panel before which we want to insert our + // panel to movePanel()). So panels are moved in order from the end of mButtonsOrder vector(reverse iterator is used). + const resize_state_vec_t::const_reverse_iterator it_end = mButtonsOrder.rend(); + // placing panels in layout stack according to button order which we loaded in previous for + for (resize_state_vec_t::const_reverse_iterator it = mButtonsOrder.rbegin(); it != it_end; ++it, ++i) + { + LLPanel* panel_to_move = *it == RS_BUTTON_SPEAK ? mSpeakPanel : mStateProcessedObjectMap[*it]; + mToolbarStack->movePanel(panel_to_move, NULL, true); // prepend + } + // Nearbychat is not stored in order settings file, but it must be the first of the panels, so moving it + // manually here + mToolbarStack->movePanel(mNearbyChatBar, NULL, true); +} + +void LLBottomTray::onDraggableButtonMouseUp(LLUICtrl* ctrl, S32 x, S32 y, MASK mask) +{ + //if mouse up happened over area where drop is possible, change order of buttons + if (mLandingTab != NULL && mDraggedItem != NULL && mDragStarted) + { + if(isCursorOverDraggableArea(x, y)) + { + // change order of panels in layout stack + mToolbarStack->movePanel(mDraggedItem, (LLPanel*)mLandingTab); + // change order of buttons in order vectors + updateButtonsOrdersAfterDnD(); + } + } + gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); + mDragStarted = false; + mDraggedItem = NULL; + mLandingTab = NULL; + mCheckForDrag = false; +} + +void LLBottomTray::draw() +{ + LLPanel::draw(); + if (mLandingTab) + { + static S32 w = mImageDragIndication->getWidth(); + static S32 h = mImageDragIndication->getHeight(); + LLRect rect = mLandingTab->calcScreenRect(); + mImageDragIndication->draw(rect.mLeft - w/2, rect.getHeight(), w, h); + } +} + bool LLBottomTray::onContextMenuItemEnabled(const LLSD& userdata) { std::string item = userdata.asString(); @@ -1181,6 +1471,9 @@ void LLBottomTray::initResizeStateContainers() mButtonsProcessOrder.push_back(RS_BUTTON_WORLD_MAP); mButtonsProcessOrder.push_back(RS_BUTTON_MINI_MAP); + mButtonsOrder.push_back(RS_BUTTON_SPEAK); + mButtonsOrder.insert(mButtonsOrder.end(), mButtonsProcessOrder.begin(), mButtonsProcessOrder.end()); + // init default widths // process buttons that can be hidden on resize... diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index bd9d35f209..14a29895f5 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -47,6 +47,30 @@ class LLBottomTrayLite; extern template class LLBottomTray* LLSingleton<class LLBottomTray>::getInstance(); #endif +/** + * Class for buttons that should have drag'n'drop ability in bottomtray. + * These buttons pass mouse events handling to bottomtray. + */ +class LLBottomtrayButton : public LLButton +{ +public: + struct Params : public LLInitParam::Block<Params, LLButton::Params> + { + Params(){} + }; + /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); + /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); + /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); + +protected: + LLBottomtrayButton(const Params& p) + : LLButton(p) + { + + } + friend class LLUICtrlFactory; +}; + class LLBottomTray : public LLSingleton<LLBottomTray> , public LLPanel @@ -101,6 +125,18 @@ public: */ LLIMChiclet* createIMChiclet(const LLUUID& session_id); + // Below are methods that were introduced or overriden in bottomtray to handle drag'n'drop + + virtual void draw(); + + /** + * These three methods handle drag'n'drop, they may be called directly from child buttons. + */ + /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); + void onDraggableButtonMouseDown(LLUICtrl* button, S32 x, S32 y, MASK mask); + void onDraggableButtonMouseUp(LLUICtrl* button, S32 x, S32 y, MASK mask); + + private: typedef enum e_resize_status_type { @@ -134,6 +170,29 @@ private: | RS_BUTTON_BUILD | RS_BUTTON_SEARCH | RS_BUTTON_WORLD_MAP | RS_BUTTON_MINI_MAP }EResizeState; + // Below are three methods that were introduced to handle drag'n'drop + + /** + * finds a panel under the specified LOCAL point + */ + LLPanel* findChildPanelByLocalCoords(S32 x, S32 y); + + /** + * checks whether the cursor is over an area where the dragged button may be dropped + */ + bool isCursorOverDraggableArea(S32 x, S32 y); + + /** + * Updates process(shrink/show/hide) order of buttons and order in which they'll be stored for further save/load. + * It is called when dragged button is dropped + */ + void updateButtonsOrdersAfterDnD(); + + // saves order of buttons to file on disk + void saveButtonsOrder(); + // reads order of buttons from file on disk + void loadButtonsOrder(); + /** * Updates child controls size and visibility when it is necessary to reduce total width. * @@ -360,6 +419,13 @@ private: * Contains order in which child buttons should be processed in show/hide, extend/shrink methods. */ resize_state_vec_t mButtonsProcessOrder; + /** + * Contains order in which child buttons are shown. + * It traces order of all bottomtray buttons that may change place via drag'n'drop and should + * save and load it between sessions. mButtonsProcessOrder is not enough for it because it contains only + * buttons that may be hidden. + */ + resize_state_vec_t mButtonsOrder; protected: @@ -381,6 +447,38 @@ protected: LLButton* mMovementButton; LLBottomTrayLite* mBottomTrayLite; bool mIsInLiteMode; + + // Drag'n'Drop + + /** + * Is true if mouse down happened on draggable button. + * Set false whether on drag start or on mouse up. + */ + bool mCheckForDrag; + /** + * These two variables hold corrdinates of mouse down on draggable button. + * They are used to compare with current coordinates of cursor and determine whether drag'n'drop should start. + */ + S32 mStartX; + S32 mStartY; + /** + * True if drag'n'drop is happening. + */ + bool mDragStarted; + + /** + * Pointer to panel which is currently dragged (though it seems to user that button is dragged, + * we are changing place of layout panel). + */ + LLPanel* mDraggedItem; + /** + * Panel before which the dragged button will be inserted. + */ + LLPanel* mLandingTab; + /** + * Image used to show position where dragged button will be dropped. + */ + LLUIImage* mImageDragIndication; }; #endif // LL_LLBOTTOMPANEL_H diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp index 967db21244..7d82ec3a71 100644 --- a/indra/newview/llchatbar.cpp +++ b/indra/newview/llchatbar.cpp @@ -673,11 +673,30 @@ public: bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web) { - if (tokens.size() < 2) return false; - S32 channel = tokens[0].asInteger(); - std::string mesg = tokens[1].asString(); - send_chat_from_viewer(mesg, CHAT_TYPE_NORMAL, channel); - return true; + bool retval = false; + // Need at least 2 tokens to have a valid message. + if (tokens.size() < 2) + { + retval = false; + } + else + { + S32 channel = tokens[0].asInteger(); + // VWR-19499 Restrict function to chat channels greater than 0. + if ((channel > 0) && (channel < 2147483647)) + { + retval = true; + // Say mesg on channel + std::string mesg = tokens[1].asString(); + send_chat_from_viewer(mesg, CHAT_TYPE_NORMAL, channel); + } + else + { + retval = false; + // Tell us this is an unsupported SLurl. + } + } + return retval; } }; diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index 4f9845d704..a8e4a759b7 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -103,10 +103,10 @@ LLGestureComboList::LLGestureComboList(const LLGestureComboList::Params& p) , mViewAllItemIndex(0) , mGetMoreItemIndex(0) { - LLButton::Params button_params = p.combo_button; + LLBottomtrayButton::Params button_params = p.combo_button; button_params.follows.flags(FOLLOWS_LEFT|FOLLOWS_BOTTOM|FOLLOWS_RIGHT); - mButton = LLUICtrlFactory::create<LLButton>(button_params); + mButton = LLUICtrlFactory::create<LLBottomtrayButton>(button_params); mButton->reshape(getRect().getWidth(),getRect().getHeight()); mButton->setCommitCallback(boost::bind(&LLGestureComboList::onButtonCommit, this)); @@ -865,14 +865,30 @@ public: bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web) { - if (tokens.size() < 2) return false; - S32 channel = tokens[0].asInteger(); - - // Send unescaped message, see EXT-6353. - std::string unescaped_mesg (LLURI::unescape(tokens[1].asString())); - - send_chat_from_viewer(unescaped_mesg, CHAT_TYPE_NORMAL, channel); - return true; + bool retval = false; + // Need at least 2 tokens to have a valid message. + if (tokens.size() < 2) + { + retval = false; + } + else + { + S32 channel = tokens[0].asInteger(); + // VWR-19499 Restrict function to chat channels greater than 0. + if ((channel > 0) && (channel < 2147483647)) + { + retval = true; + // Send unescaped message, see EXT-6353. + std::string unescaped_mesg (LLURI::unescape(tokens[1].asString())); + send_chat_from_viewer(unescaped_mesg, CHAT_TYPE_NORMAL, channel); + } + else + { + retval = false; + // Tell us this is an unsupported SLurl. + } + } + return retval; } }; diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index 955a665624..cc905736fd 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -34,6 +34,7 @@ #include "llvoiceclient.h" #include "lloutputmonitorctrl.h" #include "llspeakers.h" +#include "llbottomtray.h" class LLGestureComboList @@ -43,7 +44,7 @@ class LLGestureComboList public: struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> { - Optional<LLButton::Params> combo_button; + Optional<LLBottomtrayButton::Params> combo_button; Optional<LLScrollListCtrl::Params> combo_list; Params(); diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index 85b6e0dec4..7af3ad9896 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -111,7 +111,11 @@ public: }; protected: LLSideTrayTab(const Params& params); - + + void dock(); + void undock(LLFloater* floater_tab); + + LLSideTray* getSideTray(); public: virtual ~LLSideTrayTab(); @@ -176,6 +180,7 @@ BOOL LLSideTrayTab::postBuild() title_panel->getChild<LLTextBox>(TAB_PANEL_CAPTION_TITLE_BOX)->setValue(mTabTitle); + getChild<LLButton>("undock")->setCommitCallback(boost::bind(&LLSideTrayTab::toggleTabDocked, this)); getChild<LLButton>("dock")->setCommitCallback(boost::bind(&LLSideTrayTab::toggleTabDocked, this)); return true; @@ -210,63 +215,130 @@ void LLSideTrayTab::onOpen (const LLSD& key) panel->onOpen(key); } +// Attempts to get the existing side tray instance. +// Needed to avoid recursive calls of LLSideTray::getInstance(). +LLSideTray* LLSideTrayTab::getSideTray() +{ + // First, check if the side tray is our parent (i.e. we're attached). + LLSideTray* side_tray = dynamic_cast<LLSideTray*>(getParent()); + if (!side_tray) + { + // Detached? Ok, check if the instance exists at all/ + if (LLSideTray::instanceCreated()) + { + side_tray = LLSideTray::getInstance(); + } + else + { + llerrs << "No safe way to get the side tray instance" << llendl; + } + } + + return side_tray; +} + void LLSideTrayTab::toggleTabDocked() { - LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", LLSD().with("name", mTabTitle)); + std::string tab_name = getName(); + + LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab_name); if (!floater_tab) return; - LLFloaterReg::toggleInstance("side_bar_tab", LLSD().with("name", mTabTitle)); + LLFloaterReg::toggleInstance("side_bar_tab", tab_name); - LLSideTray* side_tray = LLSideTray::getInstance(); + bool docking = !LLFloater::isShown(floater_tab); - if (LLFloater::isShown(floater_tab)) + // Hide the "Tear Off" button when a tab gets undocked + // and show "Dock" button instead. + getChild<LLButton>("undock")->setVisible(docking); + getChild<LLButton>("dock")->setVisible(!docking); + + if (docking) { - // Remove the tab from Side Tray's tabs list. - // We have to do it despite removing the tab from Side Tray's child view tree - // by addChild(). Otherwise the tab could be accessed by the pointer in LLSideTray::mTabs. - if (!side_tray->removeTab(this)) - { - llwarns << "Failed to remove tab " << getName() << " from side tray" << llendl; - return; - } + dock(); + } + else + { + undock(floater_tab); + } +} - setVisible(true); // *HACK: restore visibility after being hidden by LLSideTray::selectTabByName(). - floater_tab->addChild(this); - floater_tab->setTitle(mTabTitle); +void LLSideTrayTab::dock() +{ + LLSideTray* side_tray = getSideTray(); + if (!side_tray) return; - LLRect rect = side_tray->getLocalRect(); - floater_tab->reshape(rect.getWidth(), rect.getHeight()); + if (!side_tray->addTab(this)) + { + llwarns << "Failed to add tab " << getName() << " to side tray" << llendl; + return; + } - rect.mTop -= floater_tab->getHeaderHeight(); - setRect(rect); - reshape(rect.getWidth(), rect.getHeight()); + setRect(side_tray->getLocalRect()); + reshape(getRect().getWidth(), getRect().getHeight()); - // Set FOLLOWS_ALL flag for the tab to follow floater dimensions upon resizing. - setFollowsAll(); + // Select the re-docked tab. + side_tray->selectTabByName(getName()); - if (!side_tray->getCollapsed()) - { - side_tray->collapseSideBar(); - } + if (side_tray->getCollapsed()) + { + side_tray->expandSideBar(); + } +} + +void LLSideTrayTab::undock(LLFloater* floater_tab) +{ + LLSideTray* side_tray = getSideTray(); + if (!side_tray) return; + + // Remove the tab from Side Tray's tabs list. + // We have to do it despite removing the tab from Side Tray's child view tree + // by addChild(). Otherwise the tab could be accessed by the pointer in LLSideTray::mTabs. + if (!side_tray->removeTab(this)) + { + llwarns << "Failed to remove tab " << getName() << " from side tray" << llendl; + return; + } + + setVisible(true); // *HACK: restore visibility after being hidden by LLSideTray::selectTabByName(). + floater_tab->addChild(this); + floater_tab->setTitle(mTabTitle); + + // Reshape the floater if needed. + LLRect floater_rect; + if (floater_tab->hasSavedRect()) + { + // We've got saved rect for the floater, hence no need to reshape it. + floater_rect = floater_tab->getLocalRect(); } else { - if (!side_tray->addTab(this)) - { - llwarns << "Failed to add tab " << getName() << " to side tray" << llendl; - return; - } + // Detaching for the first time. Reshape the floater. + floater_rect = side_tray->getLocalRect(); + floater_tab->reshape(floater_rect.getWidth(), floater_rect.getHeight()); + } + + // Reshape the panel. + { + LLRect panel_rect = floater_rect; + panel_rect.mTop -= floater_tab->getHeaderHeight(); + setRect(panel_rect); + reshape(panel_rect.getWidth(), panel_rect.getHeight()); + } - setRect(side_tray->getLocalRect()); - reshape(getRect().getWidth(), getRect().getHeight()); + // Set FOLLOWS_ALL flag for the tab to follow floater dimensions upon resizing. + setFollowsAll(); - // Select the re-docked tab. - side_tray->selectTabByName(getName()); + if (!side_tray->getCollapsed()) + { + side_tray->collapseSideBar(); + } - if (side_tray->getCollapsed()) - { - side_tray->expandSideBar(); - } + if (side_tray->getActiveTab() != this) + { + // When a tab other then current active tab is detached from Side Tray + // onOpen() should be called as tab visibility is changed. + onOpen(LLSD()); } } @@ -334,10 +406,9 @@ public: tab->toggleTabDocked(); - LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", LLSD().with("name", tab->getTabTitle())); + LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab->getName()); if (!floater_tab) return FALSE; - LLRect original_rect = floater_tab->getRect(); S32 header_snap_y = floater_tab->getHeaderHeight() / 2; S32 snap_x = screen_x - original_rect.mLeft - original_rect.getWidth() / 2; @@ -444,6 +515,7 @@ BOOL LLSideTray::postBuild() getCollapseSignal().connect(boost::bind(&LLScreenChannelBase::resetPositionAndSize, (*it).channel, _2)); } } + return true; } @@ -451,16 +523,20 @@ void LLSideTray::handleLoginComplete() { //reset tab to "home" tab if it was changesd during login process selectTabByName("sidebar_home"); + + detachTabs(); } LLSideTrayTab* LLSideTray::getTab(const std::string& name) { - return getChild<LLSideTrayTab>(name,false); + return findChild<LLSideTrayTab>(name,false); } bool LLSideTray::isTabAttached(const std::string& name) { LLSideTrayTab* tab = getTab(name); + if (!tab) return false; + return std::find(mTabs.begin(), mTabs.end(), tab) != mTabs.end(); } @@ -485,6 +561,54 @@ void LLSideTray::toggleTabButton(LLSideTrayTab* tab) } } +LLPanel* LLSideTray::openChildPanel(LLSideTrayTab* tab, const std::string& panel_name, const LLSD& params) +{ + LLView* view = tab->findChildView(panel_name, true); + if (!view) return NULL; + + std::string tab_name = tab->getName(); + + // Select tab and expand Side Tray only when a tab is attached. + if (isTabAttached(tab_name)) + { + selectTabByName(tab_name); + if (mCollapsed) + expandSideBar(); + } + else + { + LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab_name); + if (!floater_tab) return NULL; + + // Restore the floater if it was minimized. + if (floater_tab->isMinimized()) + { + floater_tab->setMinimized(FALSE); + } + + // Send the floater to the front. + floater_tab->setFrontmost(); + } + + LLSideTrayPanelContainer* container = dynamic_cast<LLSideTrayPanelContainer*>(view->getParent()); + if (container) + { + LLSD new_params = params; + new_params[LLSideTrayPanelContainer::PARAM_SUB_PANEL_NAME] = panel_name; + container->onOpen(new_params); + + return container->getCurrentPanel(); + } + + LLPanel* panel = dynamic_cast<LLPanel*>(view); + if (panel) + { + panel->onOpen(params); + } + + return panel; +} + bool LLSideTray::selectTabByIndex(size_t index) { if(index>=mTabs.size()) @@ -497,6 +621,7 @@ bool LLSideTray::selectTabByIndex(size_t index) bool LLSideTray::selectTabByName (const std::string& name) { LLSideTrayTab* new_tab = getTab(name); + if (!new_tab) return false; // Bail out if already selected. if (new_tab == mActiveTab) @@ -623,6 +748,9 @@ bool LLSideTray::removeTab(LLSideTrayTab* tab) removeChild(tab); mTabs.erase(tab_it); + // Add the tab to detached tabs list. + mDetachedTabs.push_back(tab); + // Remove the button from the buttons panel so that it isn't drawn anymore. mButtonsPanel->removeChild(btn); @@ -684,6 +812,13 @@ bool LLSideTray::addTab(LLSideTrayTab* tab) // Arrange tabs after inserting a new one. arrange(); + // Remove the tab from the list of detached tabs. + child_vector_iter_t tab_it = std::find(mDetachedTabs.begin(), mDetachedTabs.end(), tab); + if (tab_it != mDetachedTabs.end()) + { + mDetachedTabs.erase(tab_it); + } + return true; } @@ -733,8 +868,10 @@ void LLSideTray::processTriState () void LLSideTray::onTabButtonClick(string name) { - LLSideTrayTab* side_bar = getTab(name); - if(side_bar == mActiveTab) + LLSideTrayTab* tab = getTab(name); + if (!tab) return; + + if(tab == mActiveTab) { processTriState (); return; @@ -827,6 +964,28 @@ void LLSideTray::arrange() mButtonsPanel->setVisible(hasTabs()); } +// Detach those tabs that were detached when the viewer exited last time. +void LLSideTray::detachTabs() +{ + // copy mTabs because LLSideTray::toggleTabDocked() modifies it. + child_vector_t tabs = mTabs; + + for (child_vector_const_iter_t it = tabs.begin(); it != tabs.end(); ++it) + { + LLSideTrayTab* tab = *it; + + std::string floater_ctrl_name = LLFloater::getControlName("side_bar_tab", LLSD(tab->getName())); + std::string vis_ctrl_name = LLFloaterReg::getVisibilityControlName(floater_ctrl_name); + if (!LLUI::sSettingGroups["floater"]->controlExists(vis_ctrl_name)) continue; + + bool is_visible = LLUI::sSettingGroups["floater"]->getBOOL(vis_ctrl_name); + if (!is_visible) continue; + + llassert(isTabAttached(tab->getName())); + tab->toggleTabDocked(); + } +} + void LLSideTray::collapseSideBar() { mCollapsed = true; @@ -919,35 +1078,19 @@ void LLSideTray::reshape(S32 width, S32 height, BOOL called_from_parent) */ LLPanel* LLSideTray::showPanel (const std::string& panel_name, const LLSD& params) { - //arrange tabs + // Look up the tab in the list of detached tabs. child_vector_const_iter_t child_it; - for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it) + for ( child_it = mDetachedTabs.begin(); child_it != mDetachedTabs.end(); ++child_it) { - LLView* view = (*child_it)->findChildView(panel_name,true); - if(view) - { - selectTabByName ((*child_it)->getName()); - if(mCollapsed) - expandSideBar(); - - LLSideTrayPanelContainer* container = dynamic_cast<LLSideTrayPanelContainer*>(view->getParent()); - if(container) - { - LLSD new_params = params; - new_params[LLSideTrayPanelContainer::PARAM_SUB_PANEL_NAME] = panel_name; - container->onOpen(new_params); - - return container->getCurrentPanel(); - } - - LLPanel* panel = dynamic_cast<LLPanel*>(view); - if(panel) - { - panel->onOpen(params); - } + LLPanel* panel = openChildPanel(*child_it, panel_name, params); + if (panel) return panel; + } - return panel; - } + // Look up the tab in the list of attached tabs. + for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it) + { + LLPanel* panel = openChildPanel(*child_it, panel_name, params); + if (panel) return panel; } return NULL; } @@ -957,7 +1100,9 @@ void LLSideTray::togglePanel(LLPanel* &sub_panel, const std::string& panel_name, if(!sub_panel) return; - if (sub_panel->isInVisibleChain()) + // If a panel is visible and attached to Side Tray (has LLSideTray among its ancestors) + // it should be toggled off by collapsing Side Tray. + if (sub_panel->isInVisibleChain() && sub_panel->hasAncestor(this)) { LLSideTray::getInstance()->collapseSideBar(); } @@ -1001,6 +1146,17 @@ LLPanel *findChildPanel(LLPanel *panel, const std::string& name, bool recurse) LLPanel* LLSideTray::getPanel(const std::string& panel_name) { + // Look up the panel in the list of detached tabs. + for ( child_vector_const_iter_t child_it = mDetachedTabs.begin(); child_it != mDetachedTabs.end(); ++child_it) + { + LLPanel *panel = findChildPanel(*child_it,panel_name,true); + if(panel) + { + return panel; + } + } + + // Look up the panel in the list of attached tabs. for ( child_vector_const_iter_t child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it) { LLPanel *panel = findChildPanel(*child_it,panel_name,true); diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h index f0cc2c1146..248def8e3d 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -173,10 +173,13 @@ protected: LLButton* createButton (const std::string& name,const std::string& image,const std::string& tooltip, LLUICtrl::commit_callback_t callback); void arrange (); + void detachTabs (); void reflectCollapseChange(); void toggleTabButton (LLSideTrayTab* tab); + LLPanel* openChildPanel (LLSideTrayTab* tab, const std::string& panel_name, const LLSD& params); + private: // Implementation of LLDestroyClass<LLSideTray> static void destroyClass() @@ -187,15 +190,11 @@ private: } private: - - typedef std::pair<LLButton*, LLSideTrayTab*> detached_tab_t; - typedef std::map<std::string, detached_tab_t> detached_tab_map_t; - LLPanel* mButtonsPanel; typedef std::map<std::string,LLButton*> button_map_t; button_map_t mTabButtons; child_vector_t mTabs; - detached_tab_map_t mDetachedTabs; + child_vector_t mDetachedTabs; tab_order_vector_t mOriginalTabOrder; LLSideTrayTab* mActiveTab; diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp index b8838346d0..3dce66f394 100644 --- a/indra/newview/llspeakbutton.cpp +++ b/indra/newview/llspeakbutton.cpp @@ -37,6 +37,8 @@ #include "llspeakbutton.h" +#include "llbottomtray.h" + static LLDefaultChildRegistry::Register<LLSpeakButton> t1("talk_button"); ////////////////////////////////////////////////////////////////////////// @@ -67,7 +69,7 @@ void LLSpeakButton::setSpeakBtnEnabled(bool enabled) } void LLSpeakButton::setFlyoutBtnEnabled(bool enabled) { - LLButton* show_btn = getChild<LLButton>("speak_flyout_btn"); + LLButton* show_btn = getChild<LLBottomtrayButton>("speak_flyout_btn"); show_btn->setEnabled(enabled); } @@ -96,9 +98,9 @@ LLSpeakButton::LLSpeakButton(const Params& p) mSpeakBtn->setMouseUpCallback(boost::bind(&LLSpeakButton::onMouseUp_SpeakBtn, this)); mSpeakBtn->setToggleState(FALSE); - LLButton::Params show_params = p.show_button; + LLBottomtrayButton::Params show_params = p.show_button; show_params.rect(show_rect); - mShowBtn = LLUICtrlFactory::create<LLButton>(show_params); + mShowBtn = LLUICtrlFactory::create<LLBottomtrayButton>(show_params); addChild(mShowBtn); LLTransientFloaterMgr::getInstance()->addControlView(mShowBtn); diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h index ec1d07b633..2fdf80c1f2 100644 --- a/indra/newview/llspeakbutton.h +++ b/indra/newview/llspeakbutton.h @@ -33,6 +33,7 @@ class LLCallFloater; class LLButton; class LLOutputMonitorCtrl; +class LLBottomtrayButton; /* * Button displaying voice chat status. Displays voice chat options when @@ -44,10 +45,8 @@ public: struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> { - Optional<LLButton::Params> - speak_button, - show_button; - + Optional<LLButton::Params> speak_button; + Optional<LLBottomtrayButton::Params> show_button; Optional<LLOutputMonitorCtrl::Params> monitor; Params(); @@ -86,7 +85,7 @@ protected: private: LLButton* mSpeakBtn; - LLButton* mShowBtn; + LLBottomtrayButton* mShowBtn; LLHandle<LLFloater> mPrivateCallPanel; LLOutputMonitorCtrl* mOutputMonitor; }; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 13db913f60..556451e390 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -156,6 +156,7 @@ #include "lltrans.h" #include "lluictrlfactory.h" #include "llurldispatcher.h" // SLURL from other app instance +#include "llversioninfo.h" #include "llvieweraudio.h" #include "llviewercamera.h" #include "llviewergesture.h" @@ -1932,6 +1933,11 @@ void LLViewerWindow::setMenuBackgroundColor(bool god_mode, bool dev_grid) LLSD args; LLColor4 new_bg_color; + // no l10n problem because channel is always an english string + std::string channel = LLVersionInfo::getChannel(); + bool isProject = (channel.find("Project") != std::string::npos); + + // god more important than project, proj more important than grid if(god_mode && LLGridManager::getInstance()->isInProductionGrid()) { new_bg_color = LLUIColorTable::instance().getColor( "MenuBarGodBgColor" ); @@ -1940,6 +1946,10 @@ void LLViewerWindow::setMenuBackgroundColor(bool god_mode, bool dev_grid) { new_bg_color = LLUIColorTable::instance().getColor( "MenuNonProductionGodBgColor" ); } + else if (!god_mode && isProject) + { + new_bg_color = LLUIColorTable::instance().getColor( "MenuBarProjectBgColor" ); + } else if(!god_mode && !LLGridManager::getInstance()->isInProductionGrid()) { new_bg_color = LLUIColorTable::instance().getColor( "MenuNonProductionBgColor" ); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 9af1198df1..f985ee0c15 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2320,7 +2320,6 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) idleUpdateNameTag( root_pos_last ); idleUpdateRenderCost(); - idleUpdateTractorBeam(); return TRUE; } @@ -3075,14 +3074,6 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) } } -//-------------------------------------------------------------------- -// draw tractor beam when editing objects -//-------------------------------------------------------------------- -// virtual -void LLVOAvatar::idleUpdateTractorBeam() -{ -} - void LLVOAvatar::idleUpdateBelowWater() { F32 avatar_height = (F32)(getPositionGlobal().mdV[VZ]); diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 6d9424c8be..d51b8701af 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -208,7 +208,6 @@ public: void idleUpdateWindEffect(); void idleUpdateNameTag(const LLVector3& root_pos_last); void idleUpdateRenderCost(); - void idleUpdateTractorBeam(); void idleUpdateBelowWater(); //-------------------------------------------------------------------- diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 1a5d7289f4..a231afad3f 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -635,6 +635,7 @@ BOOL LLVOAvatarSelf::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) return TRUE; } LLVOAvatar::idleUpdate(agent, world, time); + idleUpdateTractorBeam(); return TRUE; } diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 5ba1fc9b21..b489294f38 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -86,6 +86,9 @@ <color name="LtOrange" value="1 .85 .73 1" /> + <color + name="MdBlue" + value=".07 .38 .51 1" /> <!-- This color name makes potentially unused colors show up bright purple. Leave this here until all Unused? are removed below, otherwise @@ -749,4 +752,7 @@ <color name="ChatTimestampColor" reference="White" /> + <color + name="MenuBarProjectBgColor" + reference="MdBlue" /> </colors> diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png Binary files differnew file mode 100644 index 0000000000..50c01062a5 --- /dev/null +++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png Binary files differnew file mode 100644 index 0000000000..bf2065cd37 --- /dev/null +++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png Binary files differnew file mode 100644 index 0000000000..8b48258142 --- /dev/null +++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png Binary files differnew file mode 100644 index 0000000000..09efe779fe --- /dev/null +++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 082b37d80b..ce67cf0083 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -428,6 +428,12 @@ with the same filename but different name <texture name="SegmentedBtn_Right_Selected_Disabled" file_name="widgets/SegmentedBtn_Right_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="Shirt_Large" file_name="icons/Shirt_Large.png" preload="false" /> + + <texture name="Sidebar_Icon_Dock_Foreground" file_name="taskpanel/Sidebar_Icon_Dock_Foreground.png" preload="false" /> + <texture name="Sidebar_Icon_Dock_Press" file_name="taskpanel/Sidebar_Icon_Dock_Press.png" preload="false" /> + <texture name="Sidebar_Icon_Undock_Foreground" file_name="taskpanel/Sidebar_Icon_Undock_Foreground.png" preload="false" /> + <texture name="Sidebar_Icon_Undock_Press" file_name="taskpanel/Sidebar_Icon_Undock_Press.png" preload="false" /> + <texture name="Shop" file_name="icons/Shop.png" preload="false" /> <texture name="SkipBackward_Off" file_name="icons/SkipBackward_Off.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml b/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml index 1466c2d2a5..bf0913fde7 100644 --- a/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml +++ b/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml @@ -1,5 +1,9 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <floater can_close="false" - can_resize="true"> + can_resize="true" + min_width="150" + save_rect="true" + save_visibility="true" + > </floater> diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml index 876ff9961b..f58715be56 100644 --- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml @@ -79,6 +79,7 @@ left_pad="3" right="-53" name="info_btn" + tab_stop="false" top_delta="-2" width="16" /> <button @@ -89,6 +90,7 @@ left_pad="5" right="-28" name="profile_btn" + tab_stop="false" tool_tip="View profile" top_delta="-2" width="20" /> diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 4b622691b3..cdd596222d 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -12,6 +12,9 @@ top="28" width="1310"> <string + name="DragIndicationImageName" + value="Accordion_ArrowOpened_Off" /> + <string name="SpeakBtnToolTip" value="Turns microphone on/off" /> <string @@ -135,7 +138,7 @@ name="movement_panel" user_resize="false" width="83"> - <button + <bottomtray_button follows="left|right" height="23" image_pressed="PushButton_Press" @@ -152,7 +155,8 @@ <init_callback function="Button.SetDockableFloaterToggle" parameter="moveview" /> - </button> + </bottomtray_button> + </layout_panel> <layout_panel auto_resize="false" @@ -165,7 +169,7 @@ name="cam_panel" user_resize="false" width="83"> - <button + <bottomtray_button follows="left|right" height="23" image_pressed="PushButton_Press" @@ -183,7 +187,7 @@ <init_callback function="Button.SetDockableFloaterToggle" parameter="camera" /> - </button> + </bottomtray_button> </layout_panel> <layout_panel auto_resize="false" @@ -195,7 +199,7 @@ name="snapshot_panel" user_resize="false" width="39"> - <button + <bottomtray_button follows="left|right" height="23" image_overlay="Snapshot_Off" @@ -212,7 +216,7 @@ <init_callback function="Button.SetFloaterToggle" parameter="snapshot" /> - </button> + </bottomtray_button> </layout_panel> <layout_panel auto_resize="false" @@ -228,7 +232,7 @@ <!--*FIX: Build Floater is not opened with default registration. Will be fixed soon. Disabled for now. --> - <button + <bottomtray_button follows="left|right" height="23" image_pressed="PushButton_Press" @@ -246,7 +250,7 @@ Disabled for now. <commit_callback function="Build.Toggle" parameter="build" /> - </button> + </bottomtray_button> </layout_panel> <layout_panel auto_resize="false" @@ -259,7 +263,7 @@ Disabled for now. name="search_btn_panel" user_resize="false" width="83"> - <button + <bottomtray_button follows="left|right" height="23" image_pressed="PushButton_Press" @@ -277,7 +281,7 @@ Disabled for now. <init_callback function="Button.SetFloaterToggle" parameter="search" /> - </button> + </bottomtray_button> </layout_panel> <layout_panel auto_resize="false" @@ -290,7 +294,7 @@ Disabled for now. name="world_map_btn_panel" user_resize="false" width="83"> - <button + <bottomtray_button follows="left|right" height="23" image_pressed="PushButton_Press" @@ -308,7 +312,7 @@ Disabled for now. <init_callback function="Button.SetFloaterToggle" parameter="world_map" /> - </button> + </bottomtray_button> </layout_panel> <layout_panel auto_resize="false" @@ -321,7 +325,7 @@ Disabled for now. name="mini_map_btn_panel" user_resize="false" width="83"> - <button + <bottomtray_button follows="left|right" height="23" image_pressed="PushButton_Press" @@ -339,7 +343,7 @@ Disabled for now. <init_callback function="Button.SetFloaterToggle" parameter="mini_map" /> - </button> + </bottomtray_button> </layout_panel> <layout_panel follows="left|right" 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 268cb4e5f9..0fb7691ee7 100644 --- a/indra/newview/skins/default/xui/en/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml @@ -39,7 +39,7 @@ Disabled </panel.string> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" @@ -398,30 +398,74 @@ top_pad="5" left="9" name="buttons"> - <button - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - left="0" - name="teleport_btn" - top="0" - width="101" /> - <button - follows="bottom|left" - height="23" - label="Map" - layout="topleft" - left_pad="3" - name="show_on_map_btn" - width="100" /> - <button - follows="bottom|left" - height="23" - label="Edit" - layout="topleft" - name="edit_btn" - left_pad="3" - width="101" /> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + name="layout_stack1" + left="0" + orientation="horizontal" + top_pad="0" + width="309"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + name="layout_panel1" + user_resize="false" + auto_resize="true" + width="101"> + <button + follows="bottom|left|right" + height="23" + label="Teleport" + layout="topleft" + left="0" + name="teleport_btn" + top="0" + width="101" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="show_on_map_btn_lp" + user_resize="false" + auto_resize="true" + width="100"> + <button + follows="bottom|left|right" + height="23" + label="Map" + layout="topleft" + name="show_on_map_btn" + top="0" + width="100" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="edit_btn_lp" + user_resize="false" + auto_resize="true" + width="101"> + <button + follows="bottom|left|right" + height="23" + label="Edit" + layout="topleft" + name="edit_btn" + top="0" + width="101" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml index a5c74b08e7..5934956559 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml @@ -23,7 +23,7 @@ Save </string> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" @@ -119,7 +119,7 @@ layout="topleft" left="10" top_pad="2" - max_length="63" + max_length="30" name="classified_name" prevalidate_callback="ascii" text_color="black" @@ -147,7 +147,7 @@ layout="topleft" left="10" top_pad="2" - max_length="1023" + max_length="64" name="classified_desc" text_color="black" word_wrap="true" /> @@ -301,22 +301,56 @@ name="bottom_panel" top_pad="5" width="303"> - <button - follows="bottom|left" - height="23" - label="[LABEL]" - layout="topleft" - name="save_changes_btn" - left="0" - top="0" - width="152" /> - <button - follows="bottom|left" - height="23" - label="Cancel" - layout="topleft" - name="cancel_btn" - left_pad="3" - width="153" /> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + name="bottom_panel_ls" + left="1" + orientation="horizontal" + top_pad="0" + width="309"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + name="save_changes_btn_lp" + user_resize="false" + auto_resize="true" + width="156"> + <button + follows="bottom|left|right" + height="23" + label="[LABEL]" + layout="topleft" + name="save_changes_btn" + left="1" + top="0" + width="155" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="show_on_map_btn_lp" + user_resize="false" + auto_resize="true" + width="157"> + <button + follows="bottom|left|right" + height="23" + label="Cancel" + layout="topleft" + name="cancel_btn" + left="1" + top="0" + width="156" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml index f50e182313..c4b831b71c 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml @@ -17,7 +17,7 @@ (will update after save) </panel.string> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" @@ -183,22 +183,57 @@ name="bottom_panel" top_pad="5" width="303"> - <button - follows="bottom|left" - height="23" - label="Save Pick" - layout="topleft" - name="save_changes_btn" - left="0" - top="0" - width="152" /> - <button - follows="bottom|left" - height="23" - label="Cancel" - layout="topleft" - name="cancel_btn" - left_pad="3" - width="153" /> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + name="layout_stack1" + left="2" + orientation="horizontal" + top_pad="0" + width="303"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="topleft" + left="0" + name="layout_panel1" + user_resize="false" + auto_resize="true" + width="150"> + <button + follows="bottom|left|right" + height="23" + label="Save Pick" + layout="topleft" + name="save_changes_btn" + top="0" + left="1" + width="149" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="topleft" + left_pad="4" + name="layout_panel1" + user_resize="false" + auto_resize="true" + width="150"> + <button + follows="bottom|left|right" + height="23" + label="Cancel" + layout="topleft" + name="cancel_btn" + top="0" + left="1" + width="149" /> + </layout_panel> + </layout_stack> + </panel> </panel> 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 5072ec3a66..8715a3a7a8 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml @@ -325,28 +325,63 @@ </panel> </scroll_container> <panel - follows="bottom|left" + follows="bottom|left|right" height="28" left="0" name="profile_me_buttons_panel" top_pad="0" width="313"> - <button - follows="bottom|left" - height="23" - label="Save Changes" - layout="topleft" - left="8" - name="save_btn" - top="5" - width="152" /> - <button - follows="bottom|left" - height="23" - label="Cancel" - layout="topleft" - left_pad="3" - name="cancel_btn" - width="153" /> + + <layout_stack + follows="bottom|left|right" + height="28" + layout="topleft" + name="bottom_panel_ls" + left="7" + orientation="horizontal" + top_pad="0" + width="295"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + name="save_changes_btn_lp" + top="0" + user_resize="false" + auto_resize="true" + width="153"> + <button + follows="bottom|left|right" + height="23" + label="Save Changes" + layout="topleft" + left="1" + name="save_btn" + top="0" + width="152" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="show_on_map_btn_lp" + top="0" + user_resize="false" + auto_resize="true" + width="154"> + <button + follows="bottom|left|right" + height="23" + label="Cancel" + layout="topleft" + left="1" + name="cancel_btn" + top="0" + width="153" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml index 9fb777e0e7..95c1c822b8 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml @@ -187,7 +187,7 @@ width="150" /> <radio_group control_name="AvatarSex" - follows="left|top|right" + follows="top|right" height="20" layout="topleft" left="210" @@ -217,6 +217,7 @@ </radio_group> <!-- graphical labels for the radio buttons above --> <icon + follows="top|right" height="16" image_name="icons/Male.png" layout="topleft" @@ -226,6 +227,7 @@ top="7" width="16" /> <icon + follows="top|right" height="16" image_name="icons/Female.png" layout="topleft" @@ -416,22 +418,55 @@ name="button_panel" top_pad="6" width="333"> - <button - follows="bottomleft" + <layout_stack + follows="bottom|left|right" height="23" - label="Save As" layout="topleft" - left="8" - name="save_as_button" + mouse_opaque="false" + name="button_panel_ls" + left="0" + orientation="horizontal" top="0" - width="153" /> - <button - follows="bottomleft" - height="23" - label="Undo Changes" - layout="topleft" - left_pad="7" - name="revert_button" - width="152" /> + width="333"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="save_as_btn_lp" + user_resize="false" + auto_resize="true" + width="154"> + <button + follows="bottom|left|right" + height="23" + label="Save As" + layout="topleft" + left="1" + name="save_as_button" + top="0" + width="153" /> + </layout_panel> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="revert_btn_lp" + user_resize="false" + auto_resize="true" + width="152"> + <button + follows="bottom|left|right" + height="23" + label="Undo Changes" + layout="topleft" + left_pad="7" + name="revert_button" + width="152" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml index 4998322d62..eb02d4104b 100644 --- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml @@ -183,51 +183,121 @@ background_visible="true" left="0" top_pad="0" name="button_row" - follows="bottom|left" + follows="bottom|left|right" width="313"> - <button - follows="bottom|left" - height="23" - image_overlay="Refresh_Off" - layout="topleft" - left="0" - top="5" - name="btn_refresh" - width="23" /> - <button - follows="bottom|left" - label="Chat" - name="btn_chat" - left_pad="3" - height="23" - width="82" /> - <button - follows="bottom|left" - left_pad="3" - height="23" - name="btn_call" - label="Group Call" - layout="topleft" - tool_tip="Call this group" - width="112" /> - <button - follows="bottom|left" - height="23" - label="Save" - label_selected="Save" - name="btn_apply" - left_pad="3" - width="82" /> - <button - follows="bottom|left" - height="23" - layout="topleft" - left="0" - label="Create Group" - name="btn_create" - visible="true" - tool_tip="Create a new Group" - width="103" /> + + <layout_stack + follows="bottom|left|right" + height="25" + layout="topleft" + name="button_row_ls" + left="2" + orientation="horizontal" + top_pad="5" + width="309"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + name="btn_refresh_lp" + user_resize="false" + auto_resize="true" + width="24"> + <button + follows="bottom|left|right" + height="23" + image_overlay="Refresh_Off" + layout="topleft" + left="1" + top="0" + name="btn_refresh" + width="23" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="btn_chat_lp" + user_resize="false" + auto_resize="true" + width="83"> + <button + follows="bottom|left|right" + label="Chat" + name="btn_chat" + left="1" + height="23" + top="0" + width="82" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="call_btn_lp" + user_resize="false" + auto_resize="true" + width="113"> + <button + follows="bottom|left|right" + left="1" + height="23" + name="btn_call" + label="Group Call" + layout="topleft" + tool_tip="Call this group" + top="0" + width="112" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="btn_apply_lp" + user_resize="false" + auto_resize="true" + width="83"> + <button + follows="bottom|left|right" + height="23" + label="Save" + label_selected="Save" + name="btn_apply" + left="1" + top="0" + width="82" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="btn_create_lp" + user_resize="false" + auto_resize="true" + width="104"> + <button + follows="bottom|left|right" + height="23" + layout="topleft" + left="1" + top="0" + label="Create Group" + name="btn_create" + visible="true" + tool_tip="Create a new Group" + width="103" /> + </layout_panel> + </layout_stack> <!--<button left_pad="3" height="23" diff --git a/indra/newview/skins/default/xui/en/panel_group_list_item.xml b/indra/newview/skins/default/xui/en/panel_group_list_item.xml index ab34cbf20e..0b84ac03c5 100644 --- a/indra/newview/skins/default/xui/en/panel_group_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_group_list_item.xml @@ -55,6 +55,7 @@ left_pad="3" right="-31" name="info_btn" + tab_stop="false" top_delta="-2" width="16" /> <!--*TODO: Should only appear on rollover--> @@ -66,6 +67,7 @@ left_pad="5" right="-3" name="profile_btn" + tab_stop="false" tool_tip="View profile" top_delta="-2" width="20" /> diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml index a7e87f2a1e..7e415f45a4 100644 --- a/indra/newview/skins/default/xui/en/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml @@ -97,51 +97,94 @@ left="3" name="bottom_panel" width="313"> - <button - follows="bottom|left" - tool_tip="Show additional options" - height="25" - image_hover_unselected="Toolbar_Left_Over" - image_overlay="OptionsMenu_Off" - image_selected="Toolbar_Left_Selected" - image_unselected="Toolbar_Left_Off" - layout="topleft" - left="0" - name="options_gear_btn" - top="1" - width="31" /> - <button - follows="bottom|left" - height="25" - image_hover_unselected="Toolbar_Middle_Over" - image_overlay="AddItem_Off" - image_selected="Toolbar_Middle_Selected" - image_unselected="Toolbar_Middle_Off" - layout="topleft" - left_pad="1" - name="add_btn" - tool_tip="Add new landmark" - width="31" /> - <icon - follows="bottom|left" - height="25" - image_name="Toolbar_Middle_Off" - layout="topleft" - left_pad="1" - name="dummy_icon" - width="209" - /> - <dnd_button - follows="bottom|left" - height="25" - image_hover_unselected="Toolbar_Right_Over" - image_overlay="TrashItem_Off" - image_selected="Toolbar_Right_Selected" - image_unselected="Toolbar_Right_Off" - layout="topleft" - left_pad="1" - name="trash_btn" - tool_tip="Remove selected landmark" - width="31" /> - </panel> + + <layout_stack + animate="false" + border_size="0" + follows="left|right|bottom" + height="25" + layout="topleft" + orientation="horizontal" + top_pad="1" + left="0" + name="bottom_panel" + width="307"> + <layout_panel + auto_resize="false" + height="25" + layout="topleft" + name="options_gear_btn_panel" + width="32"> + <button + follows="bottom|left" + tool_tip="Show additional options" + height="25" + image_hover_unselected="Toolbar_Left_Over" + image_overlay="OptionsMenu_Off" + image_selected="Toolbar_Left_Selected" + image_unselected="Toolbar_Left_Off" + layout="topleft" + left="0" + name="options_gear_btn" + top="0" + width="31" /> + </layout_panel> + <layout_panel + auto_resize="false" + height="25" + layout="topleft" + name="add_btn_panel" + width="32"> + <button + follows="bottom|left" + height="25" + image_hover_unselected="Toolbar_Middle_Over" + image_overlay="AddItem_Off" + image_selected="Toolbar_Middle_Selected" + image_unselected="Toolbar_Middle_Off" + layout="topleft" + left="0" + name="add_btn" + tool_tip="Add new landmark" + top="0" + width="31" /> + </layout_panel> + <layout_panel + auto_resize="true" + height="25" + layout="topleft" + name="dummy_panel" + width="212"> + <icon + follows="bottom|left|right" + height="25" + image_name="Toolbar_Middle_Off" + layout="topleft" + left="0" + top="0" + name="dummy_icon" + width="211" /> + </layout_panel> + <layout_panel + auto_resize="false" + height="25" + layout="topleft" + name="trash_btn_panel" + width="31"> + <dnd_button + follows="bottom|left" + height="25" + image_hover_unselected="Toolbar_Right_Over" + image_overlay="TrashItem_Off" + image_selected="Toolbar_Right_Selected" + image_unselected="Toolbar_Right_Off" + left="0" + layout="topleft" + name="trash_btn" + tool_tip="Remove selected landmark" + top="0" + width="31"/> + </layout_panel> + </layout_stack> + </panel> </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 index 4629bb9cfe..684d38146a 100644 --- a/indra/newview/skins/default/xui/en/panel_my_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml @@ -392,7 +392,7 @@ height="28" width="315"> <button - follows="bottom|right" + follows="bottom" height="23" left="6" top="1" diff --git a/indra/newview/skins/default/xui/en/panel_notes.xml b/indra/newview/skins/default/xui/en/panel_notes.xml index cff7b51ce8..530e191952 100644 --- a/indra/newview/skins/default/xui/en/panel_notes.xml +++ b/indra/newview/skins/default/xui/en/panel_notes.xml @@ -112,58 +112,125 @@ name="notes_buttons_panel" auto_resize="false" width="313"> - <button - follows="bottom|left" - height="23" - label="Add Friend" - layout="topleft" - left="2" - mouse_opaque="false" - name="add_friend" - tool_tip="Offer friendship to the Resident" - top="5" - width="80" /> - <button - follows="bottom|left" - height="23" - label="IM" - layout="topleft" - name="im" - tool_tip="Open instant message session" - top="5" - left_pad="3" - width="45" /> - <button - follows="bottom|left" - height="23" - label="Call" - layout="topleft" - name="call" - tool_tip="Call this Resident" - left_pad="3" - top="5" - width="46" /> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Map" - layout="topleft" - name="show_on_map_btn" - tool_tip="Show the Resident on the map" - top="5" - left_pad="3" - width="45" /> - <button - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - name="teleport" - tool_tip="Offer teleport" - left_pad="3" - top="5" - width="80" /> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + name="bottom_bar_ls" + left="2" + orientation="horizontal" + top_pad="5" + width="309"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + name="add_friend_btn_lp" + user_resize="false" + auto_resize="true" + width="118"> + <button + follows="bottom|left|right" + height="23" + label="Add Friend" + layout="topleft" + left="1" + mouse_opaque="false" + name="add_friend" + tool_tip="Offer friendship to the Resident" + top="0" + width="117" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="im_btn_lp" + user_resize="false" + auto_resize="true" + width="22"> + <button + follows="bottom|left|right" + height="23" + label="IM" + layout="topleft" + name="im" + tool_tip="Open instant message session" + top="0" + left="1" + width="21" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="call_btn_lp" + user_resize="false" + auto_resize="true" + width="52"> + <button + follows="bottom|left|right" + height="23" + label="Call" + layout="topleft" + name="call" + tool_tip="Call this Resident" + left="1" + top="0" + use_ellipses="true" + width="51" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="show_on_map_btn_lp" + user_resize="false" + auto_resize="true" + width="46"> + <button + enabled="false" + follows="bottom|left|right" + height="23" + label="Map" + layout="topleft" + name="show_on_map_btn" + tool_tip="Show the Resident on the map" + top="0" + left="1" + width="45" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="teleport_btn_lp" + user_resize="false" + auto_resize="true" + width="81"> + <button + follows="bottom|left|right" + height="23" + label="Teleport" + layout="topleft" + name="teleport" + tool_tip="Offer teleport" + left="1" + top="0" + width="80" /> + </layout_panel> + </layout_stack> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml index e6714af943..1cbdecab9d 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -71,7 +71,7 @@ top="1" width="30" /> <text - follows="top|right" + follows="top|left|right" font="SansSerifHugeBold" height="26" layout="topleft" @@ -108,7 +108,7 @@ width="31" /> <panel bevel_style="none" - follows="top|right" + follows="top|left|right" height="37" layout="topleft" left_pad="5" @@ -494,39 +494,72 @@ It is calculated as border_size + 2*UIResizeBarOverlap top_pad="2" name="save_revert_button_bar" width="300"> - <button - follows="bottom|left" - height="23" - label="Save" - left="0" - layout="topleft" - name="save_btn" - top="0" - width="155" /> - <button - follows="bottom|left" - height="23" - name="save_flyout_btn" - label="" - layout="topleft" - left_pad="-20" - tab_stop="false" - top="0" - 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" - width="20"/> - <button - follows="bottom|left|right" - height="23" - left_pad="12" - label="Undo Changes" - layout="topleft" - name="revert_btn" - top="0" - tool_tip="Revert to last saved version" - width="147" /> + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="button_bar_ls" + left="0" + orientation="horizontal" + top="0" + width="313"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="save_btn_lp" + user_resize="false" + auto_resize="true" + width="156"> + <button + follows="bottom|left|right" + height="23" + label="Save" + left="1" + layout="topleft" + name="save_btn" + top="0" + width="155" /> + <button + follows="bottom|right" + height="23" + name="save_flyout_btn" + label="" + layout="topleft" + left_pad="-20" + tab_stop="false" + top="0" + 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" + width="20"/> + </layout_panel> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="revert_btn_lp" + user_resize="false" + auto_resize="true" + width="147"> + <button + follows="bottom|left|right" + height="23" + left="0" + label="Undo Changes" + layout="topleft" + name="revert_btn" + top="0" + tool_tip="Revert to last saved version" + width="147" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml index 82b69ba8dc..88c82313dd 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml @@ -67,36 +67,70 @@ visible="true" name="bottom_panel" width="310"> - <button - follows="bottom|left" - height="23" - label="Save As" - left="0" - layout="topleft" - name="save_btn" - top_pad="0" - width="155" /> - <button - follows="bottom|left" - height="23" - name="save_flyout_btn" - label="" - layout="topleft" - left_pad="-20" - tab_stop="false" - 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" - width="20"/> - <button - follows="bottom|left|right" - height="23" - label="Wear" - layout="topleft" - name="wear_btn" - left_pad="3" - width="152" /> + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_panel_ls" + left="0" + orientation="horizontal" + top="0" + width="313"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="save_btn_lp" + user_resize="false" + auto_resize="true" + width="156"> + <button + follows="bottom|left|right" + height="23" + label="Save As" + left="1" + layout="topleft" + name="save_btn" + top="0" + width="155" /> + <button + follows="bottom|right" + height="23" + name="save_flyout_btn" + label="" + layout="topleft" + left_pad="-20" + tab_stop="false" + 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" + width="20"/> + </layout_panel> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="wear_btn_lp" + user_resize="false" + auto_resize="true" + width="152"> + <button + follows="bottom|left|right" + height="23" + label="Wear" + layout="topleft" + name="wear_btn" + left="0" + top="0" + width="152" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 7cd0d5b5f0..059283ce09 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -143,7 +143,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M function="People.addFriend" /> </button> <icon - follows="bottom|left" + follows="bottom|left|right" height="25" image_name="Toolbar_Right_Off" layout="topleft" @@ -222,6 +222,96 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M name="bottom_panel" top_pad="0" width="313"> + + <layout_stack + animate="false" + border_size="0" + follows="left|right|bottom" + height="25" + layout="topleft" + orientation="horizontal" + top_pad="1" + left="0" + name="bottom_panel" + width="305"> + <layout_panel + auto_resize="false" + height="25" + layout="topleft" + name="options_gear_btn_panel" + width="32"> + <button + follows="bottom|left" + tool_tip="Show additional options" + height="25" + image_hover_unselected="Toolbar_Left_Over" + image_overlay="OptionsMenu_Off" + image_selected="Toolbar_Left_Selected" + image_unselected="Toolbar_Left_Off" + layout="topleft" + left="0" + name="friends_viewsort_btn" + top="0" + width="31" /> + </layout_panel> + <layout_panel + auto_resize="false" + height="25" + layout="topleft" + name="add_btn_panel" + width="32"> + <button + follows="bottom|left" + height="25" + image_hover_unselected="Toolbar_Middle_Over" + image_overlay="AddItem_Off" + image_selected="Toolbar_Middle_Selected" + image_unselected="Toolbar_Middle_Off" + layout="topleft" + left="0" + name="add_btn" + tool_tip="Offer friendship to a Resident" + top="0" + width="31" /> + </layout_panel> + <layout_panel + auto_resize="true" + height="25" + layout="topleft" + name="dummy_panel" + width="212"> + <icon + follows="bottom|left|right" + height="25" + image_name="Toolbar_Middle_Off" + layout="topleft" + left="0" + top="0" + name="dummy_icon" + width="211" /> + </layout_panel> + <layout_panel + auto_resize="false" + height="25" + layout="topleft" + name="trash_btn_panel" + width="31"> + <dnd_button + follows="bottom|left" + height="25" + image_hover_unselected="Toolbar_Right_Over" + image_overlay="TrashItem_Off" + image_selected="Toolbar_Right_Selected" + image_unselected="Toolbar_Right_Off" + left="0" + layout="topleft" + name="trash_btn" + tool_tip="Remove selected person from your Friends list" + top="0" + width="31"/> + </layout_panel> + </layout_stack><!-- + <button follows="bottom|left" tool_tip="Options" @@ -248,7 +338,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M tool_tip="Offer friendship to a Resident" width="31" /> <icon - follows="bottom|left" + follows="bottom|left|right" height="25" image_name="Toolbar_Middle_Off" layout="topleft" @@ -268,7 +358,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M name="del_btn" tool_tip="Remove selected person from your Friends list" width="31" /> - </panel> + --></panel> <text follows="all" height="450" @@ -353,7 +443,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M tool_tip="Activate selected group" width="31" /> <icon - follows="bottom|left" + follows="bottom|left|right" height="25" image_name="Toolbar_Right_Off" layout="topleft" @@ -427,7 +517,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M function="People.addFriend" /> </button> <icon - follows="bottom|left" + follows="bottom|left|right" height="25" image_name="Toolbar_Right_Off" layout="topleft" @@ -439,85 +529,210 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M </panel> </tab_container> <panel - follows="bottom|left" + follows="bottom|left|right" height="23" layout="topleft" left="8" top_pad="4" name="button_bar" width="313"> - <button - follows="bottom|left" - height="23" - label="Profile" - layout="topleft" - name="view_profile_btn" - tool_tip="Show picture, groups, and other Residents information" - top="0" - width="67" /> - <button - follows="bottom|left" - left_pad="3" - height="23" - label="IM" - layout="topleft" - name="im_btn" - tool_tip="Open instant message session" - width="40" /> - <button - follows="bottom|left" - left_pad="3" - height="23" - label="Call" - layout="topleft" - name="call_btn" - tool_tip="Call this Resident" - width="51" /> - <button - follows="bottom|left" - left_pad="3" - height="23" - label="Share" - layout="topleft" - name="share_btn" - tool_tip="Share an inventory item" - width="65" /> - <button - follows="bottom|left" - left_pad="3" - height="23" - label="Teleport" - layout="topleft" - name="teleport_btn" - tool_tip="Offer teleport" - width="76" /> - <button - follows="bottom|left" - left="0" - top_delta="0" - height="23" - label="Group Profile" - layout="topleft" - name="group_info_btn" - tool_tip="Show group information" - width="107" /> - <button - follows="bottom|left" - left_pad="3" - height="23" - label="Group Chat" - layout="topleft" - name="chat_btn" - tool_tip="Open chat session" - width="100" /> - <button - follows="bottom|left" - left_pad="3" - height="23" - label="Group Call" - layout="topleft" - name="group_call_btn" - tool_tip="Call this group" - width="95" /> + +<!--********************************Profile; IM; Call, Share, Teleport********************************--> + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + name="bottom_bar_ls" + left="0" + orientation="horizontal" + top_pad="0" + width="313"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + name="view_profile_btn_lp" + user_resize="false" + auto_resize="true" + width="68"> + <button + follows="bottom|left|right" + height="23" + label="Profile" + layout="topleft" + left="1" + name="view_profile_btn" + tool_tip="Show picture, groups, and other Residents information" + top="0" + width="67" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="chat_btn_lp" + user_resize="false" + auto_resize="true" + width="41"> + <button + follows="bottom|left|right" + left="1" + height="23" + label="IM" + layout="topleft" + name="im_btn" + tool_tip="Open instant message session" + top="0" + width="40" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="chat_btn_lp" + user_resize="false" + auto_resize="true" + width="52"> + <button + follows="bottom|left|right" + left="1" + height="23" + label="Call" + layout="topleft" + name="call_btn" + tool_tip="Call this Resident" + top="0" + width="51" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="chat_btn_lp" + user_resize="false" + auto_resize="true" + width="66"> + <button + follows="bottom|left|right" + left="1" + height="23" + label="Share" + layout="topleft" + name="share_btn" + tool_tip="Share an inventory item" + top="0" + width="65" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="chat_btn_lp" + user_resize="false" + auto_resize="true" + width="77"> + <button + follows="bottom|left|right" + left="1" + height="23" + label="Teleport" + layout="topleft" + name="teleport_btn" + tool_tip="Offer teleport" + top="0" + width="76" /> + </layout_panel> + </layout_stack> + +<!--********************************Group Profile; Group Chat; Group Call buttons************************--> + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_bar_ls1" + left="0" + orientation="horizontal" + top="0" + width="313"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="group_info_btn_lp" + user_resize="false" + auto_resize="true" + width="108"> + <button + follows="bottom|left|right" + left="1" + height="23" + label="Group Profile" + layout="topleft" + mouse_opaque="false" + name="group_info_btn" + tool_tip="Show group information" + top="0" + width="107" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="chat_btn_lp" + user_resize="false" + auto_resize="true" + width="101"> + <button + follows="bottom|left|right" + left="1" + height="23" + label="Group Chat" + layout="topleft" + mouse_opaque="false" + name="chat_btn" + tool_tip="Open chat session" + top="0" + width="100" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="group_call_btn_lp" + user_resize="false" + auto_resize="true" + width="96"> + <button + follows="bottom|left|right" + left="1" + height="23" + label="Group Call" + layout="topleft" + mouse_opaque="false" + name="group_call_btn" + tool_tip="Call this group" + top="0" + width="95" /> + </layout_panel> + </layout_stack> </panel> </panel> 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 95c8cb301d..0496c86215 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_info.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml @@ -11,7 +11,7 @@ top="0" width="333"> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" @@ -121,30 +121,73 @@ top_pad="5" left="8" name="buttons"> - <button - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - left="0" - name="teleport_btn" - top="0" - width="101" /> - <button - follows="bottom|left" - height="23" - label="Map" - layout="topleft" - left_pad="3" - name="show_on_map_btn" - width="100" /> - <button - follows="bottom|left" - height="23" - label="Edit" - layout="topleft" - name="edit_btn" - left_pad="3" - width="101" /> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + name="layout_stack1" + left="0" + orientation="horizontal" + top_pad="0" + width="312"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + name="layout_panel1" + user_resize="false" + auto_resize="true" + width="101"> + <button + follows="bottom|left|right" + height="23" + label="Teleport" + layout="topleft" + name="teleport_btn" + top="0" + width="101" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="show_on_map_btn_lp" + user_resize="false" + auto_resize="true" + width="100"> + <button + follows="bottom|left|right" + height="23" + label="Map" + layout="topleft" + name="show_on_map_btn" + top_pad="0" + width="100" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="edit_btn_lp" + user_resize="false" + auto_resize="true" + width="101"> + <button + follows="bottom|left|right" + height="23" + label="Edit" + layout="topleft" + name="edit_btn" + top_pad="0" + width="101" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml index a815cdf7f0..647be28a62 100644 --- a/indra/newview/skins/default/xui/en/panel_picks.xml +++ b/indra/newview/skins/default/xui/en/panel_picks.xml @@ -78,93 +78,166 @@ bg_opaque_color="DkGray2" bevel_style="none" enabled="false" auto_resize="false" - follows="bottom" + follows="bottom|left|right" left="1" height="27" label="bottom_panel" - layout="topleft" + layout="bottom" name="edit_panel" top_pad="-2" width="313"> - <button - enabled="false" - follows="bottom|left" - height="18" - image_selected="OptionsMenu_Press" - image_unselected="OptionsMenu_Off" - image_disabled="OptionsMenu_Disabled" - layout="topleft" - left="10" - name="gear_menu_btn" - top="9" - width="18" /> - <button - follows="bottom|left" - height="18" - image_disabled="AddItem_Disabled" - image_selected="AddItem_Press" - image_unselected="AddItem_Off" - layout="topleft" - left_pad="15" - name="new_btn" - tool_tip="Create a new pick or classified at the current location" - top="9" - width="18" /> - <button - follows="bottom|right" - height="18" - image_disabled="TrashItem_Disabled" - image_selected="TrashItem_Press" - image_unselected="TrashItem_Off" - layout="topleft" - name="trash_btn" - right="-10" - top="9" - width="18" /> - </panel> - <panel + + <layout_stack + follows="bottom|left|right" + height="23" + layout="bottomleft" + name="edit_panel_ls" + left="10" + orientation="horizontal" + top_pad="0" + width="293"> + + <layout_panel + follows="bottom|left" + height="18" + layout="bottomleft" + left="0" + name="gear_menu_btn" + user_resize="false" + auto_resize="true" + width="51"> + <button + enabled="false" + follows="bottom|left" + height="18" + image_selected="OptionsMenu_Press" + image_unselected="OptionsMenu_Off" + image_disabled="OptionsMenu_Disabled" + layout="topleft" + left="0" + name="gear_menu_btn" + top_pad="0" + width="18" /> + <button + follows="bottom|left" + height="18" + image_disabled="AddItem_Disabled" + image_selected="AddItem_Press" + image_unselected="AddItem_Off" + layout="topleft" + left_pad="15" + name="new_btn" + tool_tip="Create a new pick or classified at the current location" + width="18" /> + </layout_panel> + + <layout_panel + follows="bottom|right" + height="18" + layout="bottomleft" + name="trash_btn_lp" + user_resize="false" + auto_resize="true" + width="18"> + <button + follows="bottom|right" + height="18" + image_disabled="TrashItem_Disabled" + image_selected="TrashItem_Press" + image_unselected="TrashItem_Off" + layout="topleft" + name="trash_btn" + top="0" + width="18" /> + </layout_panel> + + </layout_stack> + </panel> + + <panel bg_opaque_color="DkGray" background_visible="true" background_opaque="true" + follows="bottom|left|right" layout="topleft" left="0" height="40" - top="502" name="buttons_cucks" width="313"> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Info" - layout="topleft" - left="2" - name="info_btn" - tab_stop="false" - tool_tip="Show pick information" - top="5" - width="95" /> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - left_pad="3" - name="teleport_btn" - tab_stop="false" - tool_tip="Teleport to the corresponding area" - width="117" /> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Map" - layout="topleft" - left_pad="3" - name="show_on_map_btn" - tab_stop="false" - tool_tip="Show the corresponding area on the World Map" - width="90" /> - </panel> + + <layout_stack + follows="bottom|left|right" + height="28" + layout="topleft" + left="2" + name="buttons_cucks_ls" + orientation="horizontal" + top="0" + width="313"> + + <layout_panel + follows="bottom|left|right" + height="28" + layout="topleft" + left="0" + name="info_btn_lp" + user_resize="false" + auto_resize="true" + top="0" + width="95"> + <button + enabled="false" + follows="top|left|right" + height="23" + label="Info" + layout="topleft" + name="info_btn" + tab_stop="false" + tool_tip="Show pick information" + width="95" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="28" + layout="bottomleft" + left_pad="2" + name="teleport_btn_lp" + user_resize="false" + auto_resize="true" + width="117"> + <button + enabled="false" + follows="top|left|right" + height="23" + label="Teleport" + layout="topleft" + name="teleport_btn" + tab_stop="false" + tool_tip="Teleport to the corresponding area" + width="117" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="28" + layout="bottomleft" + name="show_on_map_btn_lp" + user_resize="false" + auto_resize="true" + left_pad="2" + width="90"> + <button + enabled="false" + follows="top|left|right" + height="23" + label="Map" + layout="topleft" + name="show_on_map_btn" + tab_stop="false" + tool_tip="Show the corresponding area on the World Map" + width="88" /> + </layout_panel> + </layout_stack> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index c6e93af50a..01d1e48ba1 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -154,7 +154,7 @@ translate="false" value="Parcel_DamageNo_Dark" /> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index 638e190e8f..21314703b0 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -68,83 +68,297 @@ background_visible="true" visible="false" width="315" /> <panel + follows="bottom|left|right" height="23" layout="topleft" left="4" name="button_panel" width="315"> - <button - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - left="5" - name="teleport_btn" - tool_tip="Teleport to the selected area" - top="1" - width="108" /> - <button - follows="bottom|left" - height="23" - label="Map" - layout="topleft" - left_pad="3" - name="map_btn" - tool_tip="Show the corresponding area on the World Map" - width="85" /> - <button - follows="bottom|left" - height="23" - label="Edit" - layout="topleft" - left_pad="3" - name="edit_btn" - tool_tip="Edit landmark information" - width="83" /> - <button - follows="bottom|right" - height="23" - label="▼" - layout="topleft" - name="overflow_btn" - tool_tip="Show additional options" - left_pad="3" - width="23" /> - <button - follows="bottom|left" - height="23" - label="Save" - layout="topleft" - name="save_btn" - left="5" - top_pad="-23" - width="152" /> - <button - follows="bottom|right" - height="23" - label="Cancel" - layout="topleft" - name="cancel_btn" - left_pad="3" - width="153" /> - <button - follows="bottom|right" - height="23" - label="Close" - layout="topleft" - name="close_btn" - right="-10" - top="1" - width="60" /> - <button - follows="bottom|left" - height="23" - label="Profile" - layout="topleft" - name="profile_btn" - right="-1" - tool_tip="Show place profile" - top="1" - width="111" /> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_bar_ls0" + left="4" + orientation="horizontal" + top="0" + width="315"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="lp1" + user_resize="false" + auto_resize="true" + width="193"> + + <!--*********************** Teleport, Map buttons ***********************--> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_bar_ls1" + left="0" + orientation="horizontal" + top="0" + width="193"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="teleport_btn_lp" + user_resize="false" + auto_resize="true" + width="109"> + <button + follows="bottom|left|right" + height="23" + label="Teleport" + layout="topleft" + left="1" + name="teleport_btn" + tool_tip="Teleport to the selected area" + top="0" + width="108" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="chat_btn_lp" + user_resize="false" + auto_resize="true" + width="86"> + <button + follows="bottom|left|right" + height="23" + label="Map" + layout="topleft" + left="1" + name="map_btn" + tool_tip="Show the corresponding area on the World Map" + top="0" + width="85" /> + </layout_panel> + </layout_stack> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="0" + mouse_opaque="false" + name="lp2" + user_resize="false" + auto_resize="true" + width="116"> + + <!--*********************** Edit, Options buttons ***********************--> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_bar_ls3" + left="0" + orientation="horizontal" + top="0" + width="120"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="0" + mouse_opaque="false" + name="edit_btn_lp" + user_resize="false" + auto_resize="true" + width="84"> + <button + follows="bottom|left|right" + height="23" + label="Edit" + layout="topleft" + left="1" + mouse_opaque="false" + name="edit_btn" + tool_tip="Edit landmark information" + top="0" + width="83" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="0" + mouse_opaque="false" + name="overflow_btn_lp" + user_resize="false" + auto_resize="true" + width="24"> + <button + follows="bottom|left|right" + height="23" + label="▼" + layout="topleft" + mouse_opaque="false" + name="overflow_btn" + tool_tip="Show additional options" + top="0" + left="1" + width="23" /> + </layout_panel> + </layout_stack> + + <!--*********************** Profile button ***********************--> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_bar_ls3" + left="0" + orientation="horizontal" + top="0" + width="120"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="profile_btn_lp" + user_resize="false" + auto_resize="true" + width="112"> + <button + follows="bottom|left|right" + height="23" + label="Profile" + layout="topleft" + mouse_opaque="false" + name="profile_btn" + left="1" + tool_tip="Show place profile" + top="0" + width="111" /> + </layout_panel> + </layout_stack> + + <!--*********************** Close button ***********************--> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_bar_close_ls3" + left="0" + orientation="horizontal" + top="0" + width="120"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="close_btn_lp" + top="0" + user_resize="false" + auto_resize="true" + width="61"> + <button + follows="bottom|left|right" + height="23" + label="Close" + layout="topleft" + mouse_opaque="false" + name="close_btn" + left="1" + top="0" + width="60" /> + </layout_panel> + </layout_stack> + + + </layout_panel> + </layout_stack> + +<!--*********************** Save, Cancel buttons ***********************--> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_bar_ls2" + left="4" + orientation="horizontal" + top="0" + width="313"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="save_btn_lp" + top="0" + user_resize="false" + auto_resize="true" + width="153"> + <button + follows="bottom|left|right" + height="23" + label="Save" + layout="topleft" + mouse_opaque="false" + name="save_btn" + left="1" + top_pad="0" + width="152"/> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="cancel_btn_lp" + top="0" + user_resize="false" + auto_resize="true" + width="154"> + <button + follows="bottom|left|right" + height="23" + label="Cancel" + layout="topleft" + mouse_opaque="false" + name="cancel_btn" + left="1" + top="0" + width="153" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index e41b80baf2..88d7e68894 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -305,73 +305,132 @@ </scroll_container> </layout_panel> <layout_panel - follows="bottom|left" + follows="bottom|left" height="30" layout="topleft" name="profile_buttons_panel" auto_resize="false" width="317"> - <button - follows="bottom|left" - height="23" - label="Add Friend" - layout="topleft" - left="2" - mouse_opaque="false" - name="add_friend" - pad_left="1" - pad_right="1" - tool_tip="Offer friendship to the Resident" - top="5" - use_ellipses="true" - width="117" /> - <button - follows="bottom|left" - height="23" - label="IM" - layout="topleft" - name="im" - tool_tip="Open instant message session" - top="5" - left_pad="1" - width="21" /> - <button - follows="bottom|left" - height="23" - label="Call" - layout="topleft" - name="call" - tool_tip="Call this Resident" - left_pad="1" - pad_left="1" - pad_right="1" - top="5" - use_ellipses="true" - width="51" /> - <button - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - name="teleport" - tool_tip="Offer teleport" - left_pad="1" - pad_left="1" - pad_right="1" - top="5" - use_ellipses="true" - width="92" /> - <button - follows="bottom|right" - height="23" - label="▼" - layout="topleft" - name="overflow_btn" - tool_tip="Pay money to or share inventory with the Resident" - right="-1" - top="5" - width="23" /> - </layout_panel> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + name="bottom_bar_ls" + left="0" + orientation="horizontal" + top_pad="5" + width="317"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + name="add_friend_btn_lp" + user_resize="false" + auto_resize="true" + width="118"> + <button + follows="bottom|left|right" + height="23" + label="Add Friend" + layout="topleft" + left="1" + mouse_opaque="false" + name="add_friend" + tool_tip="Offer friendship to the Resident" + top="0" + width="117" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="im_btn_lp" + user_resize="false" + auto_resize="true" + width="22"> + <button + follows="bottom|left|right" + height="23" + label="IM" + layout="topleft" + name="im" + tool_tip="Open instant message session" + top="0" + left="1" + width="21" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="call_btn_lp" + user_resize="false" + auto_resize="true" + width="52"> + <button + follows="bottom|left|right" + height="23" + label="Call" + layout="topleft" + name="call" + tool_tip="Call this Resident" + left="1" + top="0" + use_ellipses="true" + width="51" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="chat_btn_lp" + user_resize="false" + auto_resize="true" + width="93"> + <button + follows="bottom|left|right" + height="23" + label="Teleport" + layout="topleft" + name="teleport" + tool_tip="Offer teleport" + left="1" + top="0" + use_ellipses="true" + width="92" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="overflow_btn_lp" + user_resize="false" + auto_resize="true" + width="27"> + <button + follows="bottom|left|right" + height="23" + label="▼" + layout="topleft" + name="overflow_btn" + tool_tip="Pay money to or share inventory with the Resident" + left="1" + top="0" + width="23" /> + </layout_panel> + </layout_stack> + </layout_panel> <layout_panel follows="bottom|left" height="30" 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 d9030fc0d6..41c7b95c9f 100644 --- a/indra/newview/skins/default/xui/en/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml @@ -17,7 +17,7 @@ Offline </string> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" diff --git a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml index 60c2e0830c..557b04d281 100644 --- a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml +++ b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml @@ -9,7 +9,7 @@ left="0" name="sidetray_tab_panel"> <text - follows="left|top" + follows="left|top|right" font="SansSerifHuge" height="16" layout="topleft" @@ -22,15 +22,28 @@ <button follows="right|top" height="16" - image_selected="Icon_Dock_Press" - image_unselected="Icon_Dock_Foreground" - image_disabled="Icon_Dock_Press" + image_selected="Sidebar_Icon_Undock_Press" + image_unselected="Sidebar_Icon_Undock_Foreground" + image_disabled="Sidebar_Icon_Undock_Press" + layout="topleft" + name="undock" + top="10" + right="-28" + width="16" + tool_tip="Undock" /> + <button + follows="right|top" + height="16" + image_selected="Sidebar_Icon_Dock_Press" + image_unselected="Sidebar_Icon_Dock_Foreground" + image_disabled="Sidebar_Icon_Dock_Press" layout="topleft" name="dock" top="10" right="-28" width="16" - tool_tip="Dock/Undock tab" /> + tool_tip="Dock" + visible="false" /> <button follows="right|top" height="16" diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml index b48c5d1f8a..bf09836e87 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml @@ -171,7 +171,7 @@ top="1" width="31" /> <icon - follows="bottom|left" + follows="bottom|left|right" height="25" image_name="Toolbar_Right_Off" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml index d38ad8c5f8..c89e1dc215 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml @@ -56,6 +56,7 @@ left_pad="5" right="-3" name="profile_btn" + tab_stop="false" tool_tip="Show item info" top="1" visible="false" diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml index 02ab0ffee5..c1c0f07304 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -65,7 +65,7 @@ width="333"> text_color="EmphasisColor" width="300" height="10" - follows="top|left" + follows="top|left|right" layout="topleft" left="35" top="3" @@ -81,14 +81,14 @@ width="333"> top="15" use_ellipses="true" width="230" - follows="top|left" + follows="top|left|right" word_wrap="false" mouse_opaque="false" name="currentlook_name"> MyOutfit With a really Long Name like MOOSE </text> <button - follows="left|top" + follows="top|right" height="28" image_overlay="Edit_Wrench" label="" @@ -99,7 +99,7 @@ width="333"> top="3" width="28" /> <loading_indicator - follows="left|top" + follows="top|right" height="24" layout="topleft" left="268" diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index 6c9acae35e..f3c6895cee 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -31,77 +31,122 @@ height="545" width="330" /> <panel + follows="bottom|left|right" height="25" layout="topleft" name="button_panel" left="9" top_pad="-2" width="313"> - <button - enabled="true" - follows="bottom|left" - height="23" - label="Profile" - layout="topleft" - left="0" - name="info_btn" - tool_tip="Show object profile" - top="0" - width="102" /> - <button - enabled="true" - follows="bottom|left" - height="23" - label="Share" - layout="topleft" - left="105" - name="share_btn" - tool_tip="Share an inventory item" - top="0" - width="102" /> - <button - enabled="true" - follows="bottom|left" - height="23" - label="Shop" - layout="topleft" - left="210" - name="shop_btn" - tool_tip="Open Marketplace webpage" - top="0" - width="102" /> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Wear" - layout="topleft" - left="210" - name="wear_btn" - tool_tip="Wear seleceted outfit" - top="0" - width="102" /> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Play" - layout="topleft" - name="play_btn" - left="210" - top="0" - width="102" /> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - left="210" - name="teleport_btn" - tool_tip="Teleport to the selected area" - top="0" - width="102" /> + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="button_panel_ls" + left="0" + orientation="horizontal" + top="0" + width="313"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="info_btn_lp" + user_resize="false" + auto_resize="true" + width="103"> + <button + enabled="true" + follows="bottom|left|right" + height="23" + label="Profile" + layout="topleft" + left="1" + name="info_btn" + tool_tip="Show object profile" + top="0" + width="102" /> + </layout_panel> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="share_btn_lp" + user_resize="false" + auto_resize="true" + width="102"> + <button + enabled="true" + follows="bottom|left|right" + height="23" + label="Share" + layout="topleft" + left="0" + name="share_btn" + tool_tip="Share an inventory item" + top="0" + width="102" /> + </layout_panel> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="shop_btn_lp" + user_resize="false" + auto_resize="true" + width="102"> + <button + enabled="true" + follows="bottom|left|right" + height="23" + label="Shop" + layout="topleft" + left="0" + name="shop_btn" + tool_tip="Open Marketplace webpage" + top="0" + width="102" /> + <button + enabled="false" + follows="bottom|left|right" + height="23" + label="Wear" + layout="topleft" + left="0" + name="wear_btn" + tool_tip="Wear seleceted outfit" + top="0" + width="102" /> + <button + enabled="false" + follows="bottom|left|right" + height="23" + label="Play" + layout="topleft" + name="play_btn" + left="0" + top="0" + width="102" /> + <button + enabled="false" + follows="bottom|left|right" + height="23" + label="Teleport" + layout="topleft" + left="0" + name="teleport_btn" + tool_tip="Teleport to the selected area" + top="0" + width="102" /> + </layout_panel> + </layout_stack> </panel> </panel> 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 49b252174c..4f923f411c 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + follows="all" height="570" layout="topleft" name="item properties" @@ -45,7 +46,7 @@ top="8" width="18" /> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" @@ -69,14 +70,15 @@ value="Item Profile" width="275" /> <text - follows="top|left" + follows="top|left|right" height="13" layout="topleft" left="45" name="origin" text_color="LtGray_50" + use_ellipses="true" value="(Inventory)" - width="150" /> + width="275" /> <panel follows="all" height="493" @@ -234,7 +236,7 @@ top_pad="10" <text type="string" length="1" - follows="left|top" + follows="left|top|right" height="23" layout="topleft" left_delta="78" @@ -244,7 +246,7 @@ top_pad="10" </text> <panel border="false" - follows="left|top" + follows="left|top|right" layout="topleft" mouse_opaque="false" name="perms_inv" diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 08ba8c13b1..c447a977f0 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -922,7 +922,6 @@ class Linux_i686Manifest(LinuxManifest): self.path("libcrypto.so.0.9.7") self.path("libexpat.so.1") self.path("libssl.so.0.9.7") - self.path("libuuid.so.1") self.path("libSDL-1.2.so.0") self.path("libELFIO.so") self.path("libopenjpeg.so.1.3.0", "libopenjpeg.so.1.3") diff --git a/install.xml b/install.xml index a47a732d56..3d90c4eed2 100644 --- a/install.xml +++ b/install.xml @@ -891,25 +891,6 @@ anguage Infrstructure (CLI) international standard</string> </map> </map> </map> - <key>libuuid</key> - <map> - <key>copyright</key> - <string>Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/></string> - <key>description</key> - <string>Generates UUIDs under Linux. Originally a part of the ext2fs filesystem. Also see lluuid.cpp for all platforms. Part of the e2fsprogs package.</string> - <key>license</key> - <string>lgpl</string> - <key>packages</key> - <map> - <key>linux</key> - <map> - <key>md5sum</key> - <string>91b194aed4b38bc23493b198009a8c6a</string> - <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libuuid-linux-20090417.tar.bz2</uri> - </map> - </map> - </map> <key>libxml</key> <map> <key>license</key> |