diff options
Diffstat (limited to 'indra')
24 files changed, 625 insertions, 555 deletions
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 04a6c48b4f..774248ce4d 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -1122,11 +1122,6 @@ void LLBottomTray::initStateProcessedObjectMap() mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_MOVEMENT, mMovementPanel)); mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_CAMERA, mCamPanel)); mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SNAPSHOT, mSnapshotPanel)); - - mDummiesMap.insert(std::make_pair(RS_BUTTON_GESTURES, getChild<LLUICtrl>("after_gesture_panel"))); - mDummiesMap.insert(std::make_pair(RS_BUTTON_MOVEMENT, getChild<LLUICtrl>("after_movement_panel"))); - mDummiesMap.insert(std::make_pair(RS_BUTTON_CAMERA, getChild<LLUICtrl>("after_cam_panel"))); - mDummiesMap.insert(std::make_pair(RS_BUTTON_SPEAK, getChild<LLUICtrl>("after_speak_panel"))); } void LLBottomTray::setTrayButtonVisible(EResizeState shown_object_type, bool visible) @@ -1140,12 +1135,6 @@ void LLBottomTray::setTrayButtonVisible(EResizeState shown_object_type, bool vis } panel->setVisible(visible); - - if (mDummiesMap.count(shown_object_type)) - { - // Hide/show layout panel for dummy icon. - mDummiesMap[shown_object_type]->getParent()->setVisible(visible); - } } void LLBottomTray::setTrayButtonVisibleIfPossible(EResizeState shown_object_type, bool visible, bool raise_notification) @@ -1168,20 +1157,13 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible return false; } - const S32 dummy_width = mDummiesMap.count(object_type) - ? mDummiesMap[object_type]->getParent()->getRect().getWidth() - : 0; - bool is_set = true; if (visible) { - // Assume that only chiclet panel can be auto-resized and - // don't take into account width of dummy widgets + // Assume that only chiclet panel can be auto-resized const S32 available_width = - mChicletPanel->getParent()->getRect().getWidth() - - mChicletPanel->getMinWidth() - - dummy_width; + mChicletPanel->getParent()->getRect().getWidth() - mChicletPanel->getMinWidth(); S32 preferred_width = mObjectDefaultWidthMap[object_type]; S32 current_width = cur_panel->getRect().getWidth(); @@ -1249,7 +1231,7 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible // Shrink buttons if needed if (is_set && decrease_width) { - processWidthDecreased( -result_width - dummy_width ); + processWidthDecreased( -result_width); } } else @@ -1264,7 +1246,7 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible // Extend other buttons if need if (delta_width) { - processWidthIncreased(delta_width + dummy_width); + processWidthIncreased(delta_width); } } return is_set; diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 8395b484cf..54258f74c1 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -205,9 +205,6 @@ private: typedef std::map<EResizeState, S32> state_object_width_map_t; state_object_width_map_t mObjectDefaultWidthMap; - typedef std::map<EResizeState, LLUICtrl*> dummies_map_t; - dummies_map_t mDummiesMap; - protected: LLBottomTray(const LLSD& key = LLSD()); diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp index 980b456497..9dddbd998a 100644 --- a/indra/newview/llfloatersellland.cpp +++ b/indra/newview/llfloatersellland.cpp @@ -94,7 +94,6 @@ private: static void doSellLand(void *userdata); bool onConfirmSale(const LLSD& notification, const LLSD& response); static void doShowObjects(void *userdata); - static bool callbackHighlightTransferable(const LLSD& notification, const LLSD& response); void callbackAvatarPick(const std::vector<std::string>& names, const uuid_vec_t& ids); @@ -102,6 +101,7 @@ public: virtual BOOL postBuild(); bool setParcel(LLViewerRegion* region, LLParcelSelectionHandle parcel); + static bool callbackHighlightTransferable(const LLSD& notification, const LLSD& response); }; // static @@ -423,11 +423,13 @@ void LLFloaterSellLandUI::doShowObjects(void *userdata) send_parcel_select_objects(parcel->getLocalID(), RT_SELL); + // we shouldn't pass callback functor since it is registered in LLFunctorRegistration LLNotificationsUtil::add("TransferObjectsHighlighted", - LLSD(), LLSD(), - &LLFloaterSellLandUI::callbackHighlightTransferable); + LLSD(), LLSD()); } +static LLNotificationFunctorRegistration tr("TransferObjectsHighlighted", &LLFloaterSellLandUI::callbackHighlightTransferable); + // static bool LLFloaterSellLandUI::callbackHighlightTransferable(const LLSD& notification, const LLSD& data) { diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 64379f4ce7..973257b19c 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -997,46 +997,36 @@ void LLInvFVBridge::purgeItem(LLInventoryModel *model, const LLUUID &uuid) } } -bool LLInvFVBridge::isInOutfitsSidePanel() const +BOOL LLInvFVBridge::isInOutfitsSidePanel() const { LLInventoryPanel *my_panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); LLPanelOutfitsInventory *outfit_panel = dynamic_cast<LLPanelOutfitsInventory*>(LLSideTray::getInstance()->getPanel("panel_outfits_inventory")); if (!outfit_panel) - return false; + return FALSE; return outfit_panel->isTabPanel(my_panel); } -bool LLInvFVBridge::canShare() +BOOL LLInvFVBridge::canShare() const { const LLInventoryModel* model = getInventoryModel(); - if(!model) - { - return false; - } + if (!model) return FALSE; - LLViewerInventoryItem *item = model->getItem(mUUID); + const LLViewerInventoryItem *item = model->getItem(mUUID); if (item) { - bool allowed = false; - allowed = LLInventoryCollectFunctor::itemTransferCommonlyAllowed(item); - if (allowed && - !item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID())) - { - allowed = false; - } - if (allowed && - !item->getPermissions().allowCopyBy(gAgent.getID())) - { - allowed = false; - } - return allowed; + if (!LLInventoryCollectFunctor::itemTransferCommonlyAllowed(item)) + return FALSE; + if (!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID())) + return FALSE; + if (!item->getPermissions().allowCopyBy(gAgent.getID())) + return FALSE; + return TRUE; } - LLViewerInventoryCategory* cat = model->getCategory(mUUID); - // All categories can be given. - return cat != NULL; + const LLViewerInventoryCategory* cat = model->getCategory(mUUID); + return (cat != NULL); } // +=================================================+ @@ -4095,12 +4085,11 @@ LLObjectBridge::LLObjectBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type, U32 flags) : - LLItemBridge(inventory, root, uuid), - mInvType(type) + LLItemBridge(inventory, root, uuid) { mAttachPt = (flags & 0xff); // low bye of inventory flags - mIsMultiObject = ( flags & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) ? TRUE: FALSE; + mInvType = type; } LLUIImagePtr LLObjectBridge::getIcon() const @@ -4447,9 +4436,9 @@ LLWearableBridge::LLWearableBridge(LLInventoryPanel* inventory, LLWearableType::EType wearable_type) : LLItemBridge(inventory, root, uuid), mAssetType( asset_type ), - mInvType(inv_type), mWearableType(wearable_type) { + mInvType = inv_type; } // *NOTE: hack to get from avatar inventory to avatar diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index d77062ba84..c5efefac7e 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -74,21 +74,26 @@ public: U32 flags = 0x00); virtual ~LLInvFVBridge() {} - virtual const LLUUID& getUUID() const { return mUUID; } + BOOL isInOutfitsSidePanel() const; // allow context menus to be customized for side panel + BOOL canShare() const; + //-------------------------------------------------------------------- + // LLInvFVBridge functionality + //-------------------------------------------------------------------- + virtual const LLUUID& getUUID() const { return mUUID; } + virtual void clearDisplayName() {} virtual void restoreItem() {} virtual void restoreToWorld() {} - // LLFolderViewEventListener functions + //-------------------------------------------------------------------- + // Inherited LLFolderViewEventListener functions + //-------------------------------------------------------------------- virtual const std::string& getName() const; virtual const std::string& getDisplayName() const; virtual PermissionMask getPermissionMask() const; virtual LLFolderType::EType getPreferredType() const; virtual time_t getCreationDate() const; - virtual LLFontGL::StyleFlags getLabelStyle() const - { - return LLFontGL::NORMAL; - } + virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; } virtual std::string getLabelSuffix() const { return LLStringUtil::null; } virtual void openItem() {} virtual void closeItem() {} @@ -100,7 +105,6 @@ public: virtual BOOL isItemMovable() const; virtual BOOL isItemInTrash() const; virtual BOOL isLink() const; - //virtual BOOL removeItem() = 0; virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch); virtual void move(LLFolderViewEventListener* new_parent_bridge) {} @@ -120,14 +124,6 @@ public: void* cargo_data) { return FALSE; } virtual LLInventoryType::EType getInventoryType() const { return mInvType; } - // LLInvFVBridge functionality - virtual void clearDisplayName() {} - - // Allow context menus to be customized for side panel. - bool isInOutfitsSidePanel() const; - - bool canShare(); - //-------------------------------------------------------------------- // Convenience functions for adding various common menu options. //-------------------------------------------------------------------- @@ -147,7 +143,7 @@ protected: BOOL isLinkedObjectMissing() const; // Is this a linked obj whose baseobj is not in inventory? BOOL isAgentInventory() const; // false if lost or in the inventory library - BOOL isCOFFolder() const; // true if COF or descendent of. + BOOL isCOFFolder() const; // true if COF or descendent of virtual BOOL isItemPermissive() const; static void changeItemParent(LLInventoryModel* model, LLViewerInventoryItem* item, @@ -168,7 +164,7 @@ protected: }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLInvFVBridge +// Class LLInvFVBridgeBuilder // // This class intended to build Folder View Bridge via LLInvFVBridge::createBridge. // It can be overridden with another way of creation necessary Inventory-Folder-View-Bridge. @@ -195,7 +191,6 @@ public: LLInvFVBridge(inventory, root, uuid) {} virtual void performAction(LLInventoryModel* model, std::string action); - virtual void selectItem(); virtual void restoreItem(); virtual void restoreToWorld(); @@ -214,30 +209,32 @@ public: virtual BOOL hasChildren() const { return FALSE; } virtual BOOL isUpToDate() const { return TRUE; } - // override for LLInvFVBridge - virtual void clearDisplayName() { mDisplayName.clear(); } + /*virtual*/ void clearDisplayName() { mDisplayName.clear(); } LLViewerInventoryItem* getItem() const; - bool isAddAction(std::string action) const; bool isRemoveAction(std::string action) const; - protected: + BOOL confirmRemoveItem(const LLSD& notification, const LLSD& response); virtual BOOL isItemPermissive() const; static void buildDisplayName(LLInventoryItem* item, std::string& name); - mutable std::string mDisplayName; - BOOL confirmRemoveItem(const LLSD& notification, const LLSD& response); + mutable std::string mDisplayName; }; class LLFolderBridge : public LLInvFVBridge { - friend class LLInvFVBridge; public: - BOOL dragItemIntoFolder(LLInventoryItem* inv_item, - BOOL drop); - BOOL dragCategoryIntoFolder(LLInventoryCategory* inv_category, - BOOL drop); + LLFolderBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : + LLInvFVBridge(inventory, root, uuid), + mCallingCards(FALSE), + mWearables(FALSE), + mMenu(NULL) {} + BOOL dragItemIntoFolder(LLInventoryItem* inv_item, BOOL drop); + BOOL dragCategoryIntoFolder(LLInventoryCategory* inv_category, BOOL drop); + virtual void performAction(LLInventoryModel* model, std::string action); virtual void openItem(); virtual void closeItem(); @@ -278,18 +275,11 @@ public: LLViewerInventoryCategory* getCategory() const; protected: - LLFolderBridge(LLInventoryPanel* inventory, - LLFolderView* root, - const LLUUID& uuid) : - LLInvFVBridge(inventory, root, uuid), - mCallingCards(FALSE), - mWearables(FALSE), - mMenu(NULL) {} - - // menu callbacks + //-------------------------------------------------------------------- + // Menu callbacks + //-------------------------------------------------------------------- static void pasteClipboard(void* user_data); static void createNewCategory(void* user_data); - static void createNewShirt(void* user_data); static void createNewPants(void* user_data); static void createNewShoes(void* user_data); @@ -310,15 +300,17 @@ protected: void modifyOutfit(BOOL append); void determineFolderType(); - /** - * Returns a copy of current menu items. - */ - menuentry_vec_t getMenuItems() { return mItems; } + menuentry_vec_t getMenuItems() { return mItems; } // returns a copy of current menu items + + //-------------------------------------------------------------------- + // Messy hacks for handling folder options + //-------------------------------------------------------------------- public: static LLFolderBridge* sSelf; static void staticFolderOptionsMenu(); void folderOptionsMenu(); + private: BOOL mCallingCards; BOOL mWearables; @@ -329,63 +321,57 @@ private: class LLTextureBridge : public LLItemBridge { - friend class LLInvFVBridge; public: - virtual LLUIImagePtr getIcon() const; - virtual void openItem(); - virtual void buildContextMenu(LLMenuGL& menu, U32 flags); - virtual void performAction(LLInventoryModel* model, std::string action); - -protected: LLTextureBridge(LLInventoryPanel* inventory, LLFolderView* root, const LLUUID& uuid, LLInventoryType::EType type) : - LLItemBridge(inventory, root, uuid), - mInvType(type) - {} + LLItemBridge(inventory, root, uuid) + { + mInvType = type; + } + virtual LLUIImagePtr getIcon() const; + virtual void openItem(); + virtual void buildContextMenu(LLMenuGL& menu, U32 flags); + virtual void performAction(LLInventoryModel* model, std::string action); bool canSaveTexture(void); - LLInventoryType::EType mInvType; }; class LLSoundBridge : public LLItemBridge { - friend class LLInvFVBridge; public: + LLSoundBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : + LLItemBridge(inventory, root, uuid) {} virtual void openItem(); virtual void previewItem(); virtual void buildContextMenu(LLMenuGL& menu, U32 flags); static void openSoundPreview(void*); - -protected: - LLSoundBridge(LLInventoryPanel* inventory, - LLFolderView* root, - const LLUUID& uuid) : - LLItemBridge(inventory, root, uuid) {} }; class LLLandmarkBridge : public LLItemBridge { - friend class LLInvFVBridge; public: + LLLandmarkBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid, + U32 flags = 0x00); virtual void performAction(LLInventoryModel* model, std::string action); virtual void buildContextMenu(LLMenuGL& menu, U32 flags); virtual LLUIImagePtr getIcon() const; virtual void openItem(); - -protected: - LLLandmarkBridge(LLInventoryPanel* inventory, - LLFolderView* root, - const LLUUID& uuid, - U32 flags = 0x00); protected: BOOL mVisited; }; class LLCallingCardBridge : public LLItemBridge { - friend class LLInvFVBridge; public: + LLCallingCardBridge(LLInventoryPanel* inventory, + LLFolderView* folder, + const LLUUID& uuid ); + ~LLCallingCardBridge(); virtual std::string getLabelSuffix() const; //virtual const std::string& getDisplayName() const; virtual LLUIImagePtr getIcon() const; @@ -397,71 +383,57 @@ public: void* cargo_data); void refreshFolderViewItem(); protected: - LLCallingCardBridge(LLInventoryPanel* inventory, - LLFolderView* folder, - const LLUUID& uuid ); - ~LLCallingCardBridge(); -protected: LLCallingCardObserver* mObserver; }; - class LLNotecardBridge : public LLItemBridge { - friend class LLInvFVBridge; public: - virtual void openItem(); -protected: LLNotecardBridge(LLInventoryPanel* inventory, LLFolderView* root, const LLUUID& uuid) : LLItemBridge(inventory, root, uuid) {} + virtual void openItem(); }; class LLGestureBridge : public LLItemBridge { - friend class LLInvFVBridge; public: + LLGestureBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : + LLItemBridge(inventory, root, uuid) {} // Only suffix for gesture items, not task items, because only // gestures in your inventory can be active. virtual LLFontGL::StyleFlags getLabelStyle() const; virtual std::string getLabelSuffix() const; - virtual void performAction(LLInventoryModel* model, std::string action); virtual void openItem(); virtual BOOL removeItem(); - virtual void buildContextMenu(LLMenuGL& menu, U32 flags); - static void playGesture(const LLUUID& item_id); - -protected: - LLGestureBridge(LLInventoryPanel* inventory, - LLFolderView* root, - const LLUUID& uuid) - : LLItemBridge(inventory, root, uuid) {} }; class LLAnimationBridge : public LLItemBridge { - friend class LLInvFVBridge; public: - virtual void performAction(LLInventoryModel* model, std::string action); - virtual void buildContextMenu(LLMenuGL& menu, U32 flags); - - virtual void openItem(); - -protected: LLAnimationBridge(LLInventoryPanel* inventory, LLFolderView* root, const LLUUID& uuid) : LLItemBridge(inventory, root, uuid) {} + virtual void performAction(LLInventoryModel* model, std::string action); + virtual void buildContextMenu(LLMenuGL& menu, U32 flags); + virtual void openItem(); }; class LLObjectBridge : public LLItemBridge { - friend class LLInvFVBridge; public: + LLObjectBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid, + LLInventoryType::EType type, + U32 flags); virtual LLUIImagePtr getIcon() const; virtual void performAction(LLInventoryModel* model, std::string action); virtual void openItem(); @@ -469,37 +441,32 @@ public: virtual std::string getLabelSuffix() const; virtual void buildContextMenu(LLMenuGL& menu, U32 flags); virtual BOOL renameItem(const std::string& new_name); - LLInventoryObject* getObject() const; protected: - LLObjectBridge(LLInventoryPanel* inventory, - LLFolderView* root, - const LLUUID& uuid, - LLInventoryType::EType type, - U32 flags); -protected: - static LLUUID sContextMenuItemID; // Only valid while the context menu is open. - LLInventoryType::EType mInvType; + static LLUUID sContextMenuItemID; // Only valid while the context menu is open. U32 mAttachPt; BOOL mIsMultiObject; }; class LLLSLTextBridge : public LLItemBridge { - friend class LLInvFVBridge; public: - virtual void openItem(); -protected: LLLSLTextBridge(LLInventoryPanel* inventory, LLFolderView* root, const LLUUID& uuid ) : LLItemBridge(inventory, root, uuid) {} + virtual void openItem(); }; class LLWearableBridge : public LLItemBridge { - friend class LLInvFVBridge; public: + LLWearableBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid, + LLAssetType::EType asset_type, + LLInventoryType::EType inv_type, + LLWearableType::EType wearable_type); virtual LLUIImagePtr getIcon() const; virtual void performAction(LLInventoryModel* model, std::string action); virtual void openItem(); @@ -525,51 +492,38 @@ public: static void removeItemFromAvatar(LLViewerInventoryItem *item); static void removeAllClothesFromAvatar(); void removeFromAvatar(); - -protected: - LLWearableBridge(LLInventoryPanel* inventory, - LLFolderView* root, - const LLUUID& uuid, - LLAssetType::EType asset_type, - LLInventoryType::EType inv_type, - LLWearableType::EType wearable_type); protected: LLAssetType::EType mAssetType; - LLInventoryType::EType mInvType; LLWearableType::EType mWearableType; }; class LLLinkItemBridge : public LLItemBridge { - friend class LLInvFVBridge; public: - virtual const std::string& getPrefix() { return sPrefix; } - virtual void buildContextMenu(LLMenuGL& menu, U32 flags); -protected: LLLinkItemBridge(LLInventoryPanel* inventory, LLFolderView* root, const LLUUID& uuid) : LLItemBridge(inventory, root, uuid) {} + virtual const std::string& getPrefix() { return sPrefix; } + virtual void buildContextMenu(LLMenuGL& menu, U32 flags); protected: static std::string sPrefix; }; class LLLinkFolderBridge : public LLItemBridge { - friend class LLInvFVBridge; public: + LLLinkFolderBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : + LLItemBridge(inventory, root, uuid) {} virtual const std::string& getPrefix() { return sPrefix; } virtual LLUIImagePtr getIcon() const; virtual void buildContextMenu(LLMenuGL& menu, U32 flags); virtual void performAction(LLInventoryModel* model, std::string action); virtual void gotoItem(); protected: - LLLinkFolderBridge(LLInventoryPanel* inventory, - LLFolderView* root, - const LLUUID& uuid) : - LLItemBridge(inventory, root, uuid) {} const LLUUID &getFolderID() const; -protected: static std::string sPrefix; }; @@ -603,47 +557,33 @@ protected: LLInventoryModel* mModel; }; +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Recent Inventory Panel related classes +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -/************************************************************************/ -/* Recent Inventory Panel related classes */ -/************************************************************************/ -class LLRecentInventoryBridgeBuilder; -/** - * Overridden version of the Inventory-Folder-View-Bridge for Folders - */ +// Overridden version of the Inventory-Folder-View-Bridge for Folders class LLRecentItemsFolderBridge : public LLFolderBridge { - friend class LLRecentInventoryBridgeBuilder; - public: - /** - * Creates context menu for Folders related to Recent Inventory Panel. - * - * It uses base logic and than removes from visible items "New..." menu items. - */ - /*virtual*/ void buildContextMenu(LLMenuGL& menu, U32 flags); - -protected: + // Creates context menu for Folders related to Recent Inventory Panel. + // Uses base logic and than removes from visible items "New..." menu items. LLRecentItemsFolderBridge(LLInventoryType::EType type, - LLInventoryPanel* inventory, - LLFolderView* root, - const LLUUID& uuid) : + LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : LLFolderBridge(inventory, root, uuid) { mInvType = type; } + /*virtual*/ void buildContextMenu(LLMenuGL& menu, U32 flags); }; -/** - * Bridge builder to create Inventory-Folder-View-Bridge for Recent Inventory Panel - */ +// Bridge builder to create Inventory-Folder-View-Bridge for Recent Inventory Panel class LLRecentInventoryBridgeBuilder : public LLInventoryFVBridgeBuilder { - /** - * Overrides FolderBridge for Recent Inventory Panel. - * - * It use base functionality for bridges other than FolderBridge. - */ +public: + // Overrides FolderBridge for Recent Inventory Panel. + // It use base functionality for bridges other than FolderBridge. virtual LLInvFVBridge* createBridge(LLAssetType::EType asset_type, LLAssetType::EType actual_asset_type, LLInventoryType::EType inv_type, @@ -651,11 +591,8 @@ class LLRecentInventoryBridgeBuilder : public LLInventoryFVBridgeBuilder LLFolderView* root, const LLUUID& uuid, U32 flags = 0x00) const; - }; - - void wear_inventory_item_on_avatar(LLInventoryItem* item); void rez_attachment(LLViewerInventoryItem* item, diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 35ad8b64da..f1520d34df 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -92,39 +92,30 @@ LLUUID LLInventoryState::sWearNewClothingTransactionID; ///---------------------------------------------------------------------------- // static -bool LLInventoryCollectFunctor::itemTransferCommonlyAllowed(LLInventoryItem* item) +bool LLInventoryCollectFunctor::itemTransferCommonlyAllowed(const LLInventoryItem* item) { if (!item) return false; - bool allowed = false; - switch(item->getType()) { case LLAssetType::AT_CALLINGCARD: - // not allowed + return false; break; - case LLAssetType::AT_OBJECT: if (isAgentAvatarValid() && !gAgentAvatarp->isWearingAttachment(item->getUUID())) - { - allowed = true; - } + return true; break; - case LLAssetType::AT_BODYPART: case LLAssetType::AT_CLOTHING: if(!gAgentWearables.isWearingItem(item->getUUID())) - { - allowed = true; - } + return true; break; default: - allowed = true; + return true; break; } - - return allowed; + return false; } bool LLIsType::operator()(LLInventoryCategory* cat, LLInventoryItem* item) diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index 1e2b4ff09c..02a5fc9224 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -58,7 +58,7 @@ public: virtual ~LLInventoryCollectFunctor(){}; virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) = 0; - static bool itemTransferCommonlyAllowed(LLInventoryItem* item); + static bool itemTransferCommonlyAllowed(const LLInventoryItem* item); }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/indra/newview/llnotificationstorage.cpp b/indra/newview/llnotificationstorage.cpp index 316ff4324c..20b40b4e1d 100644 --- a/indra/newview/llnotificationstorage.cpp +++ b/indra/newview/llnotificationstorage.cpp @@ -112,8 +112,8 @@ void LLPersistentNotificationStorage::saveNotifications() LLNotificationPtr notification = *it; // After a notification was placed in Persist channel, it can become - // responded, expired - in this case we are should not save it - if(notification->isRespondedTo() + // responded, expired or canceled - in this case we are should not save it + if(notification->isRespondedTo() || notification->isCancelled() || notification->isExpired()) { continue; @@ -208,7 +208,6 @@ LLNotificationResponderInterface* LLResponderRegistry::createResponder(const std build_map_t::const_iterator it = sBuildMap.find(notification_name); if(sBuildMap.end() == it) { - llwarns << "Responder for notification \'" << notification_name << "\' is not registered" << llendl; return NULL; } responder_constructor_t ctr = it->second; diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index 43c2f01da5..1c74c8f26a 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -98,26 +98,75 @@ public: { if (!gInventory.isInventoryUsable()) return; - LLUUID cof = LLAppearanceMgr::getInstance()->getCOF(); - if (cof.isNull()) return; + bool panel_updated = checkCOF(); + + if (!panel_updated) + { + checkBaseOutfit(); + } + } + +protected: - LLViewerInventoryCategory* cat = gInventory.getCategory(cof); - if (!cat) return; + /** Get a version of an inventory category specified by its UUID */ + static S32 getCategoryVersion(const LLUUID& cat_id) + { + LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id); + if (!cat) return LLViewerInventoryCategory::VERSION_UNKNOWN; - S32 cof_version = cat->getVersion(); + return cat->getVersion(); + } - if (cof_version == mCOFLastVersion) return; + bool checkCOF() + { + LLUUID cof = LLAppearanceMgr::getInstance()->getCOF(); + if (cof.isNull()) return false; + S32 cof_version = getCategoryVersion(cof); + + if (cof_version == mCOFLastVersion) return false; + mCOFLastVersion = cof_version; mPanel->update(); + + return true; } -protected: + void checkBaseOutfit() + { + LLUUID baseoutfit_id = LLAppearanceMgr::getInstance()->getBaseOutfitUUID(); + + if (baseoutfit_id == mBaseOutfitId) + { + if (baseoutfit_id.isNull()) return; + + const S32 baseoutfit_ver = getCategoryVersion(baseoutfit_id); + + if (baseoutfit_ver == mBaseOutfitLastVersion) return; + } + else + { + mBaseOutfitId = baseoutfit_id; + if (baseoutfit_id.isNull()) return; + + mBaseOutfitLastVersion = getCategoryVersion(mBaseOutfitId); + } + + mPanel->updateVerbs(); + } + + + + LLPanelOutfitEdit *mPanel; //last version number of a COF category S32 mCOFLastVersion; + + LLUUID mBaseOutfitId; + + S32 mBaseOutfitLastVersion; }; @@ -159,8 +208,13 @@ BOOL LLPanelOutfitEdit::postBuild() mLookItemTypes[LIT_ATTACHMENT] = LLLookItemType(getString("Filter.Objects"), ATTACHMENT_MASK); mCurrentOutfitName = getChild<LLTextBox>("curr_outfit_name"); + mStatus = getChild<LLTextBox>("status"); + + mFolderViewBtn = getChild<LLButton>("folder_view_btn"); + mListViewBtn = getChild<LLButton>("list_view_btn"); childSetCommitCallback("filter_button", boost::bind(&LLPanelOutfitEdit::showWearablesFilter, this), NULL); + childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::showFilteredFolderWearablesPanel, this), NULL); childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showFilteredWearablesPanel, this), NULL); mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list"); @@ -217,8 +271,9 @@ BOOL LLPanelOutfitEdit::postBuild() save_registar.add("Outfit.SaveAsNew.Action", boost::bind(&LLPanelOutfitEdit::saveOutfit, this, true)); mSaveMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_save_outfit.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); - mWearableListManager = new LLFilteredWearableListManager( - getChild<LLInventoryItemsList>("filtered_wearables_list"), ALL_ITEMS_MASK); + mWearableItemsPanel = getChild<LLPanel>("filtered_wearables_panel"); + mWearableItemsList = getChild<LLInventoryItemsList>("filtered_wearables_list"); + mWearableListManager = new LLFilteredWearableListManager(mWearableItemsList, ALL_ITEMS_MASK); return TRUE; } @@ -239,12 +294,33 @@ void LLPanelOutfitEdit::toggleAddWearablesPanel() void LLPanelOutfitEdit::showWearablesFilter() { - childSetVisible("filter_combobox_panel", childGetValue("filter_button")); + bool filter_visible = childGetValue("filter_button"); + + childSetVisible("filter_panel", filter_visible); + + if(!filter_visible) + { + mSearchFilter->clear(); + onSearchEdit(LLStringUtil::null); + } } void LLPanelOutfitEdit::showFilteredWearablesPanel() { - childSetVisible("filtered_wearables_panel", !childIsVisible("filtered_wearables_panel")); + if(switchPanels(mInventoryItemsPanel, mWearableItemsPanel)) + { + mFolderViewBtn->setToggleState(FALSE); + } + mListViewBtn->setToggleState(TRUE); +} + +void LLPanelOutfitEdit::showFilteredFolderWearablesPanel() +{ + if(switchPanels(mWearableItemsPanel, mInventoryItemsPanel)) + { + mListViewBtn->setToggleState(FALSE); + } + mFolderViewBtn->setToggleState(TRUE); } void LLPanelOutfitEdit::saveOutfit(bool as_new) @@ -309,7 +385,7 @@ void LLPanelOutfitEdit::onSearchEdit(const std::string& string) if (mSearchString == "") { mInventoryItemsPanel->setFilterSubString(LLStringUtil::null); - + mWearableItemsList->setFilterSubString(LLStringUtil::null); // re-open folders that were initially open mSavedFolderState->setApply(TRUE); mInventoryItemsPanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState); @@ -335,6 +411,8 @@ void LLPanelOutfitEdit::onSearchEdit(const std::string& string) // set new filter string mInventoryItemsPanel->setFilterSubString(mSearchString); + mWearableItemsList->setFilterSubString(mSearchString); + } void LLPanelOutfitEdit::onAddToOutfitClicked(void) @@ -479,11 +557,26 @@ void LLPanelOutfitEdit::updateVerbs() LLAppearanceMgr::getInstance()->updateIsDirty(); bool outfit_is_dirty = LLAppearanceMgr::getInstance()->isOutfitDirty(); - + bool has_baseoutfit = LLAppearanceMgr::getInstance()->getBaseOutfitUUID().notNull(); + childSetEnabled(SAVE_BTN, outfit_is_dirty); - childSetEnabled(REVERT_BTN, outfit_is_dirty); + childSetEnabled(REVERT_BTN, outfit_is_dirty && has_baseoutfit); mSaveMenu->setItemEnabled("save_outfit", outfit_is_dirty); + + mStatus->setText(outfit_is_dirty ? getString("unsaved_changes") : getString("now_editing")); + +} + +bool LLPanelOutfitEdit::switchPanels(LLPanel* switch_from_panel, LLPanel* switch_to_panel) +{ + if(switch_from_panel && switch_to_panel && !switch_to_panel->getVisible()) + { + switch_from_panel->setVisible(FALSE); + switch_to_panel->setVisible(TRUE); + return true; + } + return false; } // EOF diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index 3cdfed14b9..cb8283fca3 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -42,6 +42,7 @@ #include "llremoteparcelrequest.h" #include "llinventory.h" +#include "llinventoryitemslist.h" #include "llinventorymodel.h" class LLButton; @@ -87,6 +88,7 @@ public: void toggleAddWearablesPanel(); void showWearablesFilter(); void showFilteredWearablesPanel(); + void showFilteredFolderWearablesPanel(); void saveOutfit(bool as_new = false); void showSaveMenu(); @@ -102,20 +104,34 @@ public: void update(); + void updateVerbs(); + /** + * @brief Helper function. Shows one panel instead of another. + * If panels already switched does nothing and returns false. + * @param switch_from_panel panel to hide + * @param switch_to_panel panel to show + * @retun returns true if switching happened, false if not. + */ + bool switchPanels(LLPanel* switch_from_panel, LLPanel* switch_to_panel); + private: - void updateVerbs(); LLTextBox* mCurrentOutfitName; + LLTextBox* mStatus; LLInventoryPanel* mInventoryItemsPanel; LLFilterEditor* mSearchFilter; LLSaveFolderState* mSavedFolderState; std::string mSearchString; LLButton* mEditWearableBtn; + LLButton* mFolderViewBtn; + LLButton* mListViewBtn; LLToggleableMenu* mSaveMenu; - LLFilteredWearableListManager* mWearableListManager; + LLFilteredWearableListManager* mWearableListManager; + LLInventoryItemsList* mWearableItemsList; + LLPanel* mWearableItemsPanel; LLCOFObserver* mCOFObserver; std::vector<LLLookItemType> mLookItemTypes; diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp index 11b6c0a3ae..b68fc3b002 100644 --- a/indra/newview/llscriptfloater.cpp +++ b/indra/newview/llscriptfloater.cpp @@ -482,7 +482,7 @@ std::string LLScriptFloaterManager::getObjectName(const LLUUID& notification_id) text = notification->getSubstitutions()["OBJECTNAME"].asString(); break; case LLScriptFloaterManager::OBJ_GIVE_INVENTORY: - text = notification->getSubstitutions()["NAME"].asString(); + text = notification->getSubstitutions()["OBJECTFROMNAME"].asString(); break; default: text = LLTrans::getString("object"); diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index 089163929e..9275ca4f42 100644 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -291,7 +291,10 @@ LLToastNotifyPanel::~LLToastNotifyPanel() { // let reusable notification be deleted mNotification->setReusable(false); - LLNotifications::getInstance()->cancel(mNotification); + if (!mNotification->isPersistent()) + { + LLNotifications::getInstance()->cancel(mNotification); + } } } diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 4f51f15684..bb2378e489 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -2328,7 +2328,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) LLSD args; args["MESSAGE"] = message; - LLNotificationsUtil::add("JoinGroup", args, payload, join_group_response); + // we shouldn't pass callback functor since it is registered in LLFunctorRegistration + LLNotificationsUtil::add("JoinGroup", args, payload); } } break; diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index 41dc95cec6..b7f3fd0dff 100644 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -124,6 +124,29 @@ protected: /*virtual*/ void init(); }; + +class LLPanelDeletableWearableListItem : public LLPanelWearableListItem +{ + LOG_CLASS(LLPanelDeletableWearableListItem); +public: + + static LLPanelDeletableWearableListItem* create(LLViewerInventoryItem* item); + + virtual ~LLPanelDeletableWearableListItem(); + + /*virtual*/ BOOL postBuild(); + + /** + * Make button visible during mouse over event. + */ + inline void setShowDeleteButton(bool show) { setShowWidget("btn_delete", show); } + +protected: + LLPanelDeletableWearableListItem(LLViewerInventoryItem* item); + + /*virtual*/ void init(); +}; + /** * @class LLPanelDummyClothingListItem * diff --git a/indra/newview/skins/default/textures/icons/Female.png b/indra/newview/skins/default/textures/icons/Female.png Binary files differnew file mode 100644 index 0000000000..67b5653a94 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Female.png diff --git a/indra/newview/skins/default/textures/icons/Male.png b/indra/newview/skins/default/textures/icons/Male.png Binary files differnew file mode 100644 index 0000000000..f3fad77fd0 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Male.png diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 1d7102aaaa..4f46e34520 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -1207,6 +1207,7 @@ Eject [AVATAR_NAME] from your land? <notification icon="alertmodal.tga" name="EjectAvatarFromGroup" + persist="true" type="notify"> You ejected [AVATAR_NAME] from group [GROUP_NAME] </notification> @@ -2512,6 +2513,7 @@ Would you like to trust this authority? <notification icon="alertmodal.tga" name="GrantedModifyRights" + persist="true" type="notify"> [NAME] has given you permission to edit their objects. </notification> @@ -2519,6 +2521,7 @@ Would you like to trust this authority? <notification icon="alertmodal.tga" name="RevokedModifyRights" + persist="true" type="notify"> Your privilege to modify [NAME]'s objects has been revoked </notification> @@ -4433,6 +4436,7 @@ Replaced missing clothing/body part with default. <notification icon="groupnotify" name="GroupNotice" + persist="true" type="groupnotify"> Topic: [SUBJECT], Message: [MESSAGE] </notification> @@ -4481,6 +4485,7 @@ Do you wish to proceed? <notification icon="notify.tga" name="UploadPayment" + persist="true" type="notify"> You paid L$[AMOUNT] to upload. </notification> @@ -4768,6 +4773,7 @@ Please select at least one type of content to search (General, Moderate, or Adul <notification icon="notify.tga" name="SystemMessage" + persist="true" type="notify"> [MESSAGE] </notification> @@ -4775,10 +4781,13 @@ Please select at least one type of content to search (General, Moderate, or Adul <notification icon="notify.tga" name="PaymentRecived" + persist="true" type="notify"> [MESSAGE] </notification> + <!-- EventNotification couldn't be persist since server decide is it necessary to notify + user about subscribed event via LLEventNotifier--> <notification icon="notify.tga" name="EventNotification" @@ -4806,6 +4815,7 @@ Event Notification: <notification icon="notify.tga" name="TransferObjectsHighlighted" + persist="true" type="notify"> All objects on this parcel that will transfer to the purchaser of this parcel are now highlighted. @@ -4821,6 +4831,7 @@ All objects on this parcel that will transfer to the purchaser of this parcel ar <notification icon="notify.tga" name="DeactivatedGesturesTrigger" + persist="true" type="notify"> Deactivated gestures with same trigger: [NAMES] @@ -4829,6 +4840,7 @@ Deactivated gestures with same trigger: <notification icon="notify.tga" name="NoQuickTime" + persist="true" type="notify"> Apple's QuickTime software does not appear to be installed on your system. If you want to view streaming media on parcels that support it you should go to the [http://www.apple.com/quicktime QuickTime site] and install the QuickTime Player. @@ -4836,6 +4848,7 @@ If you want to view streaming media on parcels that support it you should go to <notification icon="notify.tga" name="NoPlugin" + persist="true" type="notify"> No Media Plugin was found to handle the "[MIME_TYPE]" mime type. Media of this type will be unavailable. </notification> @@ -4855,6 +4868,7 @@ Please re-install the plugin or contact the vendor if you continue to experience <notification icon="notify.tga" name="OwnedObjectsReturned" + persist="true" type="notify"> The objects you own on the selected parcel of land have been returned back to your inventory. </notification> @@ -4862,6 +4876,7 @@ The objects you own on the selected parcel of land have been returned back to yo <notification icon="notify.tga" name="OtherObjectsReturned" + persist="true" type="notify"> The objects on the selected parcel of land that is owned by [FIRST] [LAST] have been returned to his or her inventory. </notification> @@ -4869,6 +4884,7 @@ The objects on the selected parcel of land that is owned by [FIRST] [LAST] have <notification icon="notify.tga" name="OtherObjectsReturned2" + persist="true" type="notify"> The objects on the selected parcel of land owned by the Resident '[NAME]' have been returned to their owner. </notification> @@ -4876,6 +4892,7 @@ The objects on the selected parcel of land owned by the Resident '[NAME]&ap <notification icon="notify.tga" name="GroupObjectsReturned" + persist="true" type="notify"> The objects on the selected parcel of land shared with the group [GROUPNAME] have been returned back to their owner's inventory. Transferable deeded objects have been returned to their previous owners. @@ -4885,6 +4902,7 @@ Non-transferable objects that are deeded to the group have been deleted. <notification icon="notify.tga" name="UnOwnedObjectsReturned" + persist="true" type="notify"> The objects on the selected parcel that are NOT owned by you have been returned to their owners. </notification> @@ -4892,6 +4910,7 @@ The objects on the selected parcel that are NOT owned by you have been returned <notification icon="notify.tga" name="ServerObjectMessage" + persist="true" type="notify"> Message from [NAME]: <nolink>[MSG]</nolink> @@ -4900,6 +4919,7 @@ Message from [NAME]: <notification icon="notify.tga" name="NotSafe" + persist="true" type="notify"> This land has damage enabled. You can be hurt here. If you die, you will be teleported to your home location. @@ -4909,6 +4929,7 @@ You can be hurt here. If you die, you will be teleported to your home location. <notification icon="notify.tga" name="NoFly" + persist="true" type="notify"> This area has flying disabled. You can't fly here. @@ -4918,6 +4939,7 @@ You can't fly here. <notification icon="notify.tga" name="PushRestricted" + persist="true" type="notify"> This area does not allow pushing. You can't push others here unless you own the land. <unique/> @@ -4926,6 +4948,7 @@ This area does not allow pushing. You can't push others here unless you own <notification icon="notify.tga" name="NoVoice" + persist="true" type="notify"> This area has voice chat disabled. You won't be able to hear anyone talking. <unique/> @@ -4934,6 +4957,7 @@ This area has voice chat disabled. You won't be able to hear anyone talking <notification icon="notify.tga" name="NoBuild" + persist="true" type="notify"> This area has building disabled. You can't build or rez objects here. <unique/> @@ -4942,6 +4966,7 @@ This area has building disabled. You can't build or rez objects here. <notification icon="notify.tga" name="ScriptsStopped" + persist="true" type="notify"> An administrator has temporarily stopped scripts in this region. </notification> @@ -4949,6 +4974,7 @@ An administrator has temporarily stopped scripts in this region. <notification icon="notify.tga" name="ScriptsNotRunning" + persist="true" type="notify"> This region is not running any scripts. </notification> @@ -4956,6 +4982,7 @@ This region is not running any scripts. <notification icon="notify.tga" name="NoOutsideScripts" + persist="true" type="notify"> This land has outside scripts disabled. @@ -4965,6 +4992,7 @@ No scripts will work here except those belonging to the land owner. <notification icon="notify.tga" name="ClaimPublicLand" + persist="true" type="notify"> You can only claim public land in the Region you're in. </notification> @@ -4972,6 +5000,7 @@ You can only claim public land in the Region you're in. <notification icon="notify.tga" name="RegionTPAccessBlocked" + persist="true" type="notify"> You aren't allowed in that Region due to your maturity Rating. You may need to validate your age and/or install the latest Viewer. @@ -4981,6 +5010,7 @@ Please go to the Knowledge Base for details on accessing areas with this maturit <notification icon="notify.tga" name="URBannedFromRegion" + persist="true" type="notify"> You are banned from the region. </notification> @@ -4988,6 +5018,7 @@ You are banned from the region. <notification icon="notify.tga" name="NoTeenGridAccess" + persist="true" type="notify"> Your account cannot connect to this teen grid region. </notification> @@ -4995,6 +5026,7 @@ Your account cannot connect to this teen grid region. <notification icon="notify.tga" name="ImproperPaymentStatus" + persist="true" type="notify"> You do not have proper payment status to enter this region. </notification> @@ -5002,6 +5034,7 @@ You do not have proper payment status to enter this region. <notification icon="notify.tga" name="MustGetAgeRgion" + persist="true" type="notify"> You must be age-verified to enter this region. </notification> @@ -5009,6 +5042,7 @@ You must be age-verified to enter this region. <notification icon="notify.tga" name="MustGetAgeParcel" + persist="true" type="notify"> You must be age-verified to enter this parcel. </notification> @@ -5016,6 +5050,7 @@ You must be age-verified to enter this parcel. <notification icon="notify.tga" name="NoDestRegion" + persist="true" type="notify"> No destination region found. </notification> @@ -5023,6 +5058,7 @@ No destination region found. <notification icon="notify.tga" name="NotAllowedInDest" + persist="true" type="notify"> You are not allowed into the destination. </notification> @@ -5030,6 +5066,7 @@ You are not allowed into the destination. <notification icon="notify.tga" name="RegionParcelBan" + persist="true" type="notify"> Cannot region cross into banned parcel. Try another way. </notification> @@ -5037,6 +5074,7 @@ Cannot region cross into banned parcel. Try another way. <notification icon="notify.tga" name="TelehubRedirect" + persist="true" type="notify"> You have been redirected to a telehub. </notification> @@ -5044,6 +5082,7 @@ You have been redirected to a telehub. <notification icon="notify.tga" name="CouldntTPCloser" + persist="true" type="notify"> Could not teleport closer to destination. </notification> @@ -5051,6 +5090,7 @@ Could not teleport closer to destination. <notification icon="notify.tga" name="TPCancelled" + persist="true" type="notify"> Teleport cancelled. </notification> @@ -5058,6 +5098,7 @@ Teleport cancelled. <notification icon="notify.tga" name="FullRegionTryAgain" + persist="true" type="notify"> The region you are attempting to enter is currently full. Please try again in a few moments. @@ -5066,6 +5107,7 @@ Please try again in a few moments. <notification icon="notify.tga" name="GeneralFailure" + persist="true" type="notify"> General failure. </notification> @@ -5073,6 +5115,7 @@ General failure. <notification icon="notify.tga" name="RoutedWrongRegion" + persist="true" type="notify"> Routed to wrong region. Please try again. </notification> @@ -5080,6 +5123,7 @@ Routed to wrong region. Please try again. <notification icon="notify.tga" name="NoValidAgentID" + persist="true" type="notify"> No valid agent id. </notification> @@ -5087,6 +5131,7 @@ No valid agent id. <notification icon="notify.tga" name="NoValidSession" + persist="true" type="notify"> No valid session id. </notification> @@ -5094,6 +5139,7 @@ No valid session id. <notification icon="notify.tga" name="NoValidCircuit" + persist="true" type="notify"> No valid circuit code. </notification> @@ -5101,6 +5147,7 @@ No valid circuit code. <notification icon="notify.tga" name="NoValidTimestamp" + persist="true" type="notify"> No valid timestamp. </notification> @@ -5108,6 +5155,7 @@ No valid timestamp. <notification icon="notify.tga" name="NoPendingConnection" + persist="true" type="notify"> Unable to create pending connection. </notification> @@ -5115,6 +5163,7 @@ Unable to create pending connection. <notification icon="notify.tga" name="InternalUsherError" + persist="true" type="notify"> Internal error attempting to connect agent usher. </notification> @@ -5122,6 +5171,7 @@ Internal error attempting to connect agent usher. <notification icon="notify.tga" name="NoGoodTPDestination" + persist="true" type="notify"> Unable to find a good teleport destination in this region. </notification> @@ -5129,6 +5179,7 @@ Unable to find a good teleport destination in this region. <notification icon="notify.tga" name="InternalErrorRegionResolver" + persist="true" type="notify"> Internal error attempting to activate region resolver. </notification> @@ -5136,6 +5187,7 @@ Internal error attempting to activate region resolver. <notification icon="notify.tga" name="NoValidLanding" + persist="true" type="notify"> A valid landing point could not be found. </notification> @@ -5143,6 +5195,7 @@ A valid landing point could not be found. <notification icon="notify.tga" name="NoValidParcel" + persist="true" type="notify"> No valid parcel could be found. </notification> @@ -5150,7 +5203,6 @@ No valid parcel could be found. <notification icon="notify.tga" name="ObjectGiveItem" - persist="true" type="offer"> An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you this [OBJECTTYPE]: [ITEM_SLURL] @@ -5173,7 +5225,6 @@ An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you this [OBJEC <notification icon="notify.tga" name="UserGiveItem" - persist="true" type="offer"> [NAME_SLURL] has given you this [OBJECTTYPE]: [ITEM_SLURL] @@ -5196,6 +5247,7 @@ An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you this [OBJEC <notification icon="notify.tga" name="GodMessage" + persist="true" type="notify"> [NAME] @@ -5205,6 +5257,7 @@ An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you this [OBJEC <notification icon="notify.tga" name="JoinGroup" + persist="true" type="notify"> [MESSAGE] <form name="form"> @@ -5226,7 +5279,6 @@ An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you this [OBJEC <notification icon="notify.tga" name="TeleportOffered" - persist="true" type="offer"> [NAME_SLURL] has offered to teleport you to their location: @@ -5254,6 +5306,7 @@ An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you this [OBJEC <notification icon="notify.tga" name="GotoURL" + persist="true" type="notify"> [MESSAGE] [URL] @@ -5272,7 +5325,6 @@ An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you this [OBJEC <notification icon="notify.tga" name="OfferFriendship" - persist="true" type="offer"> [NAME_SLURL] is offering friendship. @@ -5301,6 +5353,7 @@ An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you this [OBJEC <notification icon="notify.tga" name="OfferFriendshipNoMessage" + persist="true" type="notify"> [NAME] is offering friendship. @@ -5327,6 +5380,7 @@ An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you this [OBJEC <notification icon="notify.tga" name="FriendshipDeclined" + persist="true" type="notify"> [NAME] declined your friendship offer. </notification> @@ -5348,6 +5402,7 @@ Friendship offer declined. <notification icon="notify.tga" name="OfferCallingCard" + persist="true" type="notify"> [FIRST] [LAST] is offering their calling card. This will add a bookmark in your inventory so you can quickly IM this Resident. @@ -5368,6 +5423,7 @@ This will add a bookmark in your inventory so you can quickly IM this Resident. name="RegionRestartMinutes" priority="high" sound="UISndAlert" + persist="true" type="notify"> This region will restart in [MINUTES] minutes. If you stay in this region you will be logged out. @@ -5378,6 +5434,7 @@ If you stay in this region you will be logged out. name="RegionRestartSeconds" priority="high" sound="UISndAlert" + persist="true" type="notify"> This region will restart in [SECONDS] seconds. If you stay in this region you will be logged out. @@ -5386,6 +5443,7 @@ If you stay in this region you will be logged out. <notification icon="notify.tga" name="LoadWebPage" + persist="true" type="notify"> Load web page [URL]? @@ -5407,6 +5465,7 @@ From object: [OBJECTNAME], owner: [NAME]? <notification icon="notify.tga" name="FailedToFindWearableUnnamed" + persist="true" type="notify"> Failed to find [TYPE] in database. </notification> @@ -5414,6 +5473,7 @@ Failed to find [TYPE] in database. <notification icon="notify.tga" name="FailedToFindWearable" + persist="true" type="notify"> Failed to find [TYPE] named [DESC] in database. </notification> @@ -5421,6 +5481,7 @@ Failed to find [TYPE] named [DESC] in database. <notification icon="notify.tga" name="ShareToWebFailed" + persist="true" type="notify"> Failed to upload image to web. </notification> @@ -5428,6 +5489,7 @@ Failed to find [TYPE] named [DESC] in database. <notification icon="notify.tga" name="InvalidWearable" + persist="true" type="notify"> The item you are trying to wear uses a feature that your Viewer can't read. Please upgrade your version of [APP_NAME] to wear this item. </notification> @@ -5435,6 +5497,7 @@ The item you are trying to wear uses a feature that your Viewer can't read. <notification icon="notify.tga" name="ScriptQuestion" + persist="true" type="notify"> '[OBJECTNAME]', an object owned by '[NAME]', would like to: @@ -5460,6 +5523,7 @@ Is this OK? icon="notify.tga" name="ScriptQuestionCaution" priority="high" + persist="true" type="notify"> An object named '[OBJECTNAME]', owned by '[NAME]' would like to: @@ -5487,6 +5551,7 @@ Grant this request? <notification icon="notify.tga" name="ScriptDialog" + persist="true" type="notify"> [FIRST] [LAST]'s '[TITLE]' [MESSAGE] @@ -5501,6 +5566,7 @@ Grant this request? <notification icon="notify.tga" name="ScriptDialogGroup" + persist="true" type="notify"> [GROUPNAME]'s '[TITLE]' [MESSAGE] @@ -5516,6 +5582,7 @@ Grant this request? <notification icon="notify.tga" name="FirstBalanceIncrease" + persist="true" type="notify"> You just received L$[AMOUNT]. Your L$ balance is shown in the upper-right. @@ -5524,6 +5591,7 @@ Your L$ balance is shown in the upper-right. <notification icon="notify.tga" name="FirstBalanceDecrease" + persist="true" type="notify"> You just paid L$[AMOUNT]. Your L$ balance is shown in the upper-right. @@ -5533,6 +5601,7 @@ Your L$ balance is shown in the upper-right. <notification icon="notify.tga" name="BuyLindenDollarSuccess" + persist="true" type="notify"> Thank you for your payment! @@ -5545,6 +5614,7 @@ The status of your payment can be checked on your Transaction History page on yo <notification icon="notify.tga" name="FirstSit" + persist="true" type="notify"> You are sitting. Use your arrow keys (or AWSD) to look around. @@ -5554,6 +5624,7 @@ Click the 'Stand Up' button to stand. <notification icon="notify.tga" name="FirstMap" + persist="true" type="notify"> Click and drag the map to look around. Double-click to teleport. @@ -5563,6 +5634,7 @@ Use the controls on the right to find things and display different backgrounds. <notification icon="notify.tga" name="FirstBuild" + persist="true" type="notify"> You have opened the Build Tools. Every object you see around you was created using these tools. </notification> @@ -5572,6 +5644,7 @@ You have opened the Build Tools. Every object you see around you was created usi <notification icon="notify.tga" name="FirstLeftClickNoHit" + persist="true" type="notify"> Left-clicking interacts with special objects. If the mouse pointer changes to a hand, you can interact with the object. @@ -5581,6 +5654,7 @@ You have opened the Build Tools. Every object you see around you was created usi <notification icon="notify.tga" name="FirstTeleport" + persist="true" type="notify"> You can only teleport to certain areas in this region. The arrow points to your specific destination. Click the arrow to dismiss it. </notification> @@ -5590,6 +5664,7 @@ You can only teleport to certain areas in this region. The arrow points to your <notification icon="notify.tga" name="FirstOverrideKeys" + persist="true" type="notify"> Your movement keys are now being handled by an object. Try the arrow keys or AWSD to see what they do. @@ -5601,6 +5676,7 @@ Press 'M' to do this. <notification icon="notify.tga" name="FirstAppearance" + persist="true" type="notify"> You are editing your Appearance. Use the arrow keys to look around. @@ -5610,6 +5686,7 @@ When you are done, press 'Save All'. <notification icon="notify.tga" name="FirstInventory" + persist="true" type="notify"> This is your Inventory, which contains items you own. @@ -5622,6 +5699,7 @@ This is your Inventory, which contains items you own. <notification icon="notify.tga" name="FirstSandbox" + persist="true" type="notify"> This is a sandbox area, and is meant to help Residents learn how to build. @@ -5632,6 +5710,7 @@ Things you build here will be deleted after you leave, so don't forget to r <notification icon="notify.tga" name="FirstFlexible" + persist="true" type="notify"> This object is flexible. Flexis must be phantom and not physical. </notification> @@ -5639,6 +5718,7 @@ This object is flexible. Flexis must be phantom and not physical. <notification icon="notify.tga" name="FirstDebugMenus" + persist="true" type="notify"> You opened the Advanced menu. @@ -5651,6 +5731,7 @@ To toggle this menu, <notification icon="notify.tga" name="FirstSculptedPrim" + persist="true" type="notify"> You are editing a Sculpted prim. Sculpties require a special texture to define their shape. </notification> @@ -5660,6 +5741,7 @@ You are editing a Sculpted prim. Sculpties require a special texture to define t <notification icon="notify.tga" name="FirstMedia" + persist="true" type="notify"> You have begun playing media. Media can set to play automatically in the preferences window under Audio / Video. Note that this can be a security risk for media sites you do not trust. </notification> @@ -5700,6 +5782,7 @@ Click Accept to join the call or Decline to decline the invitation. Click Block <notification icon="notify.tga" name="AutoUnmuteByIM" + persist="true" type="notify"> [FIRST] [LAST] was sent an instant message and has been automatically unblocked. </notification> @@ -5707,6 +5790,7 @@ Click Accept to join the call or Decline to decline the invitation. Click Block <notification icon="notify.tga" name="AutoUnmuteByMoney" + persist="true" type="notify"> [FIRST] [LAST] was given money and has been automatically unblocked. </notification> @@ -5714,6 +5798,7 @@ Click Accept to join the call or Decline to decline the invitation. Click Block <notification icon="notify.tga" name="AutoUnmuteByInventory" + persist="true" type="notify"> [FIRST] [LAST] was offered inventory and has been automatically unblocked. </notification> diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index e412c491fd..7b11538ccc 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -1,28 +1,30 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel - mouse_opaque="true" background_visible="true" bg_alpha_color="DkGray" bg_opaque_color="DkGray" + chrome="true" follows="left|bottom|right" height="33" layout="topleft" left="0" name="bottom_tray" top="28" - chrome="true" - border_visible="false" width="1000"> - <string name="SpeakBtnToolTip">Turns microphone on/off</string> - <string name="VoiceControlBtnToolTip">Shows/hides voice control panel</string> + <string + name="SpeakBtnToolTip" + value="Turns microphone on/off" /> + <string + name="VoiceControlBtnToolTip" + value="Shows/hides voice control panel" /> <layout_stack - mouse_opaque="false" border_size="0" clip="false" follows="all" height="28" layout="topleft" left="0" + mouse_opaque="false" name="toolbar_stack" orientation="horizontal" top="0" @@ -33,288 +35,234 @@ height="10" image_name="spacer24.tga" layout="topleft" - min_width="2" left="0" + min_width="2" top="0" width="2" /> <layout_panel - mouse_opaque="false" auto_resize="false" + filename="panel_nearby_chat_bar.xml" follows="left|right" height="28" layout="topleft" left="0" - min_height="23" - width="310" - top="4" max_width="320" + min_height="23" min_width="216" + mouse_opaque="false" name="chat_bar" + top="4" user_resize="false" - filename="panel_nearby_chat_bar.xml" /> + width="310" /> <layout_panel - mouse_opaque="false" auto_resize="false" follows="right" height="28" layout="topleft" min_height="28" - width="105" - top_delta="0" - min_width="54" + min_width="57" + mouse_opaque="false" name="speak_panel" - user_resize="false"> - <talk_button - follows="left|right" - height="23" - speak_button.tab_stop="true" - show_button.tab_stop="true" - layout="topleft" - left="0" - name="talk" - top="5" - width="105"> - <!-- do not remove halign attribute with default value. otherwise it can't be overridden in other locales. - & pad_right is default value for long label which can be right aligned. See EXT-6318 --> - <speak_button - halign="center" - name="speak_btn" - label="Speak" - label_selected="Speak" - pad_right="22" - use_ellipses="true" - /> - <show_button> - <show_button.init_callback - function="Button.SetDockableFloaterToggle" - parameter="voice_controls" /> - </show_button> - </talk_button> + top_delta="0" + user_resize="false" + width="108"> + <talk_button + follows="left|right" + height="23" + layout="topleft" + left="0" + name="talk" + top="5" + width="105"> + <show_button + tab_stop="true"> + <init_callback + function="Button.SetDockableFloaterToggle" + parameter="voice_controls" /> + </show_button> + <!-- do not remove halign attribute with default value. otherwise it can't be overridden in other locales. + & pad_right is default value for long label which can be right aligned. See EXT-6318 --> + <speak_button + halign="center" + label="Speak" + label_selected="Speak" + name="speak_btn" + pad_right="22" + tab_stop="true" + use_ellipses="true" /> + </talk_button> </layout_panel> - <icon - auto_resize="false" - follows="left|right" - height="10" - image_name="spacer24.tga" - layout="topleft" - left="0" - name="after_speak_panel" - min_width="3" - top="0" - width="3"/> <layout_panel - mouse_opaque="false" auto_resize="false" follows="right" height="28" layout="topleft" min_height="28" - width="82" - top_delta="0" - min_width="62" + min_width="65" + mouse_opaque="false" name="gesture_panel" - user_resize="false"> - <gesture_combo_list - follows="left|right" - height="23" - label="Gesture" - layout="topleft" - name="Gesture" - left="0" - top="5" - width="82" - tool_tip="Shows/hides gestures"> - <gesture_combo_list.combo_button - pad_right="10" - use_ellipses="true" /> - <gesture_combo_list.combo_list - page_lines="17" /> - </gesture_combo_list> + top_delta="0" + user_resize="false" + width="85"> + <gesture_combo_list + follows="left|right" + height="23" + label="Gesture" + layout="topleft" + left="0" + name="Gesture" + tool_tip="Shows/hides gestures" + top="5" + width="82"> + <combo_button + pad_right="10" + use_ellipses="true" /> + <combo_list + page_lines="17" /> + </gesture_combo_list> </layout_panel> - <icon - auto_resize="false" - color="0 0 0 0" - follows="left|right" - height="10" - image_name="spacer24.tga" - layout="topleft" - left="0" - min_width="3" - name="after_gesture_panel" - top="0" - width="3"/> <layout_panel - mouse_opaque="false" auto_resize="false" follows="right" height="28" layout="topleft" min_height="28" + min_width="52" + mouse_opaque="false" name="movement_panel" user_resize="false" - width="80" - min_width="49"> + width="83"> <button - image_selected="PushButton_Selected_Press" - image_pressed="PushButton_Press" - image_pressed_selected="PushButton_Selected_Press" follows="left|right" height="23" - use_ellipses="true" + image_pressed="PushButton_Press" + image_pressed_selected="PushButton_Selected_Press" + image_selected="PushButton_Selected_Press" is_toggle="true" label="Move" layout="topleft" name="movement_btn" tool_tip="Shows/hides movement controls" top="5" + use_ellipses="true" width="80"> - <button.init_callback + <init_callback function="Button.SetDockableFloaterToggle" parameter="moveview" /> </button> </layout_panel> - <icon - auto_resize="false" - color="0 0 0 0" - follows="left|right" - height="10" - image_name="spacer24.tga" - layout="topleft" - left="0" - min_width="3" - name="after_movement_panel" - top="0" - width="3"/> <layout_panel - mouse_opaque="false" auto_resize="false" follows="left|right" height="28" layout="topleft" min_height="28" - min_width="49" + min_width="52" + mouse_opaque="false" name="cam_panel" user_resize="false" - width="80"> + width="83"> <button - image_selected="PushButton_Selected_Press" - image_pressed="PushButton_Press" - image_pressed_selected="PushButton_Selected_Press" follows="left|right" height="23" - use_ellipses="true" + image_pressed="PushButton_Press" + image_pressed_selected="PushButton_Selected_Press" + image_selected="PushButton_Selected_Press" is_toggle="true" label="View" layout="topleft" left="0" + name="camera_btn" tool_tip="Shows/hides camera controls" top="5" - name="camera_btn" + use_ellipses="true" width="80"> - <button.init_callback + <init_callback function="Button.SetDockableFloaterToggle" parameter="camera" /> </button> </layout_panel> - <icon - auto_resize="false" - color="0 0 0 0" - follows="left|right" - height="10" - image_name="spacer24.tga" - layout="topleft" - left="0" - min_width="3" - name="after_cam_panel" - top="0" - width="3"/> <layout_panel - mouse_opaque="false" auto_resize="false" follows="left|right" height="28" layout="topleft" min_width="40" + mouse_opaque="false" name="snapshot_panel" width="40"> <button - follows="left|right" + follows="left|right" height="23" - image_selected="PushButton_Selected_Press" + image_overlay="Snapshot_Off" image_pressed="PushButton_Press" image_pressed_selected="PushButton_Selected_Press" - left="0" - label="" + image_selected="PushButton_Selected_Press" + is_toggle="true" layout="topleft" + left="0" name="snapshots" - width="36" + tool_tip="Take snapshot" top="5" - is_toggle="true" - image_overlay="Snapshot_Off" - tool_tip="Take snapshot"> - <button.init_callback - function="Button.SetFloaterToggle" - parameter="snapshot" /> - </button> - </layout_panel> + width="36"> + <init_callback + function="Button.SetFloaterToggle" + parameter="snapshot" /> + </button> + </layout_panel> <layout_panel - mouse_opaque="false" follows="left|right" height="30" layout="topleft" - top="0" - name="chiclet_list_panel" - width="189" min_width="95" + mouse_opaque="false" + name="chiclet_list_panel" + top="0" user_resize="false" - auto_resize="true"> + width="189"> <!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. EXT-991--> <chiclet_panel - mouse_opaque="false" + chiclet_padding="4" follows="left|right" height="24" layout="topleft" left="1" min_width="95" + mouse_opaque="false" name="chiclet_list" top="7" - chiclet_padding="4" - scrolling_offset="40" width="189"> <button auto_resize="true" follows="right" height="29" + image_hover_selected="SegmentedBtn_Left_Over" + image_hover_unselected="SegmentedBtn_Left_Over" + image_overlay="Arrow_Small_Left" + image_pressed="SegmentedBtn_Left_Press" + image_pressed_selected="SegmentedBtn_Left_Press" image_selected="SegmentedBtn_Left_Off" image_unselected="SegmentedBtn_Left_Off" - image_hover_selected="SegmentedBtn_Left_Over" - image_hover_unselected="SegmentedBtn_Left_Over" - image_pressed="SegmentedBtn_Left_Press" - image_pressed_selected="SegmentedBtn_Left_Press" - image_overlay="Arrow_Small_Left" layout="topleft" name="chicklet_left_scroll_button" - scale_image="true" tab_stop="false" top="-4" - right_pad="2" visible="false" width="7" /> <button auto_resize="true" follows="right" height="29" + image_hover_selected="SegmentedBtn_Right_Over" + image_hover_unselected="SegmentedBtn_Right_Over" + image_overlay="Arrow_Small_Right" + image_pressed="SegmentedBtn_Right_Press" + image_pressed_selected="SegmentedBtn_Right_Press" image_selected="SegmentedBtn_Right_Off" image_unselected="SegmentedBtn_Right_Off" - image_hover_selected="SegmentedBtn_Right_Over" - image_hover_unselected="SegmentedBtn_Right_Over" - image_pressed="SegmentedBtn_Right_Press" - image_pressed_selected="SegmentedBtn_Right_Press" - image_overlay="Arrow_Small_Right" layout="topleft" name="chicklet_right_scroll_button" - scale_image="true" tab_stop="false" top="-4" visible="false" @@ -332,24 +280,24 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. min_width="4" name="DUMMY" top="0" - width="4"/> + width="4" /> <layout_panel auto_resize="false" follows="right" height="28" layout="topleft" min_height="28" - top="0" - name="im_well_panel" - width="37" min_width="37" - user_resize="false"> + name="im_well_panel" + top="0" + user_resize="false" + width="37"> <chiclet_im_well - max_displayed_count="99" follows="right" height="28" layout="topleft" left="0" + max_displayed_count="99" name="im_well" top="0" width="35"> @@ -375,8 +323,8 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well left="0" name="Unread IM messages" tool_tip="Conversations" - width="34" > - <button.init_callback + width="34"> + <init_callback function="Button.SetDockableFloaterToggle" parameter="im_well_window" /> </button> @@ -388,11 +336,11 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well height="28" layout="topleft" min_height="28" - top="0" - name="notification_well_panel" - width="37" min_width="37" - user_resize="false"> + name="notification_well_panel" + top="0" + user_resize="false" + width="37"> <chiclet_notification follows="right" height="23" @@ -402,27 +350,27 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well name="notification_well" top="5" width="35"> - <button + <button + auto_resize="true" bottom_pad="3" + follows="right" + halign="center" + height="23" + image_overlay="Notices_Unread" + image_overlay_alignment="center" image_pressed="WellButton_Lit" image_pressed_selected="WellButton_Lit_Selected" image_selected="PushButton_Press" - auto_resize="true" - halign="center" - height="23" - follows="right" - label_color="Black" - left="0" - name="Unread" - image_overlay="Notices_Unread" - image_overlay_alignment="center" - tool_tip="Notifications" - width="34" > - <button.init_callback - function="Button.SetDockableFloaterToggle" - parameter="notification_well_window" /> - </button> - </chiclet_notification> + label_color="Black" + left="0" + name="Unread" + tool_tip="Notifications" + width="34"> + <init_callback + function="Button.SetDockableFloaterToggle" + parameter="notification_well_window" /> + </button> + </chiclet_notification> </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 6a212306d6..7961664516 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -15,6 +15,12 @@ <string name="No Outfit" value="No Outfit"/> + <string + name="unsaved_changes" + value="Unsaved Changes"/> + <string + name="now_editing" + value="Now Editing"/> <panel.string name="not_available"> @@ -209,124 +215,120 @@ tab_group="2" user_resize="true" visible="false"> - - <!-- *NOTE is not used, invisible and disabled --> - <filter_editor - background_image="TextField_Search_Off" - enabled="false" - follows="left|top|right" - font="SansSerif" - label="Filter" + <text + follows="top|left|right" + font="SansSerifBold" + height="13" layout="topleft" left="5" - width="290" + name="add_to_outfit_label" + text_color="LtGray" + top="3" + value="Add to Outfit:" + use_ellipses="true" + width="150" /> + <button + follows="top|left|right" height="20" - name="look_item_filter" - text_color="black" - text_pad_left="25" - visible="false"/> + image_hover_unselected="Toolbar_Middle_Over" + image_overlay="" + image_selected="Toolbar_Middle_Selected" + image_unselected="Toolbar_Middle_Off" + is_toggle="true" + label="O" + layout="topleft" + left_pad="5" + name="filter_button" + top="3" + width="20" /> + <combo_box + follows="top|left|right" + height="20" + layout="topleft" + right="-5" + name="filter_wearables_combobox" + top="2" + width="110"/> <layout_stack animate="true" follows="all" - height="25" - width="300" + height="155" + width="311" layout="topleft" - orientation="horizontal" name="filter_panels" - top="0" + top_pad="5" left="0"> <layout_panel + auto_resize="true" layout="topleft" follows="left|top|right" - height="25" + height="30" label="IM Control Panel" - name="filter_button_panel" - width="150" - auto_resize="true" - user_resize="false"> - <text - follows="top|left|right" - font="SansSerifBold" - height="13" - layout="topleft" - left="5" - name="add_to_outfit_label" - text_color="LtGray" - top="3" - value="Add to Outfit:" - use_ellipses="true" - width="270" /> - <button - follows="top|right" - height="20" - image_hover_unselected="Toolbar_Middle_Over" - image_overlay="" - image_selected="Toolbar_Middle_Selected" - image_unselected="Toolbar_Middle_Off" - is_toggle="true" - label="O" - layout="topleft" - right="-1" - name="filter_button" - top="3" - width="20" /> + name="filter_panel" + width="311" + user_resize="false" + visible="false"> + <filter_editor + background_image="TextField_Search_Off" + enabled="true" + follows="left|top|right" + font="SansSerif" + label="Filter" + layout="topleft" + left="5" + width="290" + height="25" + name="look_item_filter" + text_color="black" + text_pad_left="25" + visible="true"/> </layout_panel> <layout_panel auto_resize="true" - height="25" + height="145" min_width="130" - name="filter_combobox_panel" - width="150" - user_resize="false" - visible="false"> - <combo_box - follows="top|left|right" - height="20" - layout="topleft" - right="-5" - name="filter_wearables_combobox" - top="0" - width="130"/> + name="inventory_panel" + width="311" + user_resize="true"> + <inventory_panel + allow_multi_select="false" + border="false" + follows="left|top|right|bottom" + height="130" + layout="topleft" + left="0" + mouse_opaque="false" + name="inventory_items" + top_pad="5" + width="311" + visible="false"/> + <panel + name="filtered_wearables_panel" + background_opaque="true" + background_visible="true" + layout="topleft" + follows="left|top|right|bottom" + border="false" + height="130" + left="0" + mouse_opaque="false" + width="311" + top_delta="0" + visible="true"> + <wearable_items_list + name="filtered_wearables_list" + allow_select="true" + layout="topleft" + follows="all" + width="311" + height="130" + left="0" + top="0"/> + </panel> </layout_panel> </layout_stack> - <inventory_panel - allow_multi_select="false" - border="false" - follows="left|top|right|bottom" - height="155" - layout="topleft" - left="0" - mouse_opaque="false" - name="inventory_items" - top_pad="5" - width="300"/> - - <panel - name="filtered_wearables_panel" - background_opaque="true" - background_visible="true" - layout="topleft" - follows="left|top|right|bottom" - border="false" - height="155" - left="0" - mouse_opaque="false" - width="300" - top_delta="0" - visible="false"> - <wearable_items_list - name="filtered_wearables_list" - allow_select="true" - layout="topleft" - follows="all" - width="300" - height="155" - left="0" - top="0" /> - </panel> - <panel background_visible="true" bevel_style="none" @@ -357,6 +359,7 @@ image_overlay="" image_selected="Toolbar_Middle_Selected" image_unselected="Toolbar_Middle_Off" + is_toggle="true" label="F" layout="topleft" left_pad="1" @@ -370,6 +373,7 @@ image_overlay="" image_selected="Toolbar_Middle_Selected" image_unselected="Toolbar_Middle_Off" + is_toggle="true" label="L" layout="topleft" left_pad="1" diff --git a/indra/newview/skins/default/xui/it/floater_animation_preview.xml b/indra/newview/skins/default/xui/it/floater_animation_preview.xml index 5472e32544..77341cad63 100644 --- a/indra/newview/skins/default/xui/it/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/it/floater_animation_preview.xml @@ -153,7 +153,7 @@ La lunghezza massima è [MAX_LENGTH] secondi. <item label="Accigliato" name="Frown" value="Accigliato"/> <item label="Bacio" name="Kiss" value="Bacio"/> <item label="Risata" name="Laugh" value="Risata"/> - <item label="Plllppt" name="Plllppt" value="Plllppt"/> + <item label="Plllppt" name="Plllppt" value="Linguaccia"/> <item label="Repulsione" name="Repulsed" value="Repulsione"/> <item label="Triste" name="Sad" value="Triste"/> <item label="Scrollata di spalle" name="Shrug" value="Scrollata di spalle"/> diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml index 1c611915dc..cd16246f0f 100644 --- a/indra/newview/skins/default/xui/it/floater_tools.xml +++ b/indra/newview/skins/default/xui/it/floater_tools.xml @@ -39,11 +39,11 @@ <floater.string name="grid_attachment_text"> Accessorio </floater.string> - <button label="" label_selected="" name="button focus" tool_tip="Focus"/> - <button label="" label_selected="" name="button move" tool_tip="Muoviti"/> + <button label="" label_selected="" name="button focus" tool_tip="Ingrandisci"/> + <button label="" label_selected="" name="button move" tool_tip="Sposta"/> <button label="" label_selected="" name="button edit" tool_tip="Modifica"/> <button label="" label_selected="" name="button create" tool_tip="Crea"/> - <button label="" label_selected="" name="button land" tool_tip="Terra"/> + <button label="" label_selected="" name="button land" tool_tip="Terreno"/> <text name="text status"> Trascina per muovere, trascina+maiuscolo per copiare </text> @@ -397,7 +397,7 @@ </text> <check_box label="Massima luminosità" name="checkbox fullbright"/> <text name="tex gen"> - Applicazione della texture + Applicazione </text> <combo_box name="combobox texgen"> <combo_box.item label="Default" name="Default"/> diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml index 49a1a1a746..a5923ac42b 100644 --- a/indra/newview/skins/default/xui/it/menu_viewer.xml +++ b/indra/newview/skins/default/xui/it/menu_viewer.xml @@ -64,7 +64,7 @@ <menu_item_call label="Strumento Ingrandisci" name="Focus"/> <menu_item_call label="Strumento Movimento" name="Move"/> <menu_item_call label="Strumento Modifica" name="Edit"/> - <menu_item_call label="Crea strumento" name="Create"/> + <menu_item_call label="Strumento Crea" name="Create"/> <menu_item_call label="Strumento Terreno" name="Land"/> </menu> <menu_item_call label="Collegamento" name="Link"/> @@ -182,7 +182,7 @@ <menu_item_call label="Strumento Ingrandisci" name="Focus"/> <menu_item_call label="Strumento Movimento" name="Move"/> <menu_item_call label="Strumento Modifica" name="Edit"/> - <menu_item_call label="Crea strumento" name="Create"/> + <menu_item_call label="Strumento Crea" name="Create"/> <menu_item_call label="Strumento Terreno" name="Land"/> </menu> <menu_item_call label="Zoom avanti" name="Zoom In"/> diff --git a/indra/newview/skins/default/xui/it/panel_group_general.xml b/indra/newview/skins/default/xui/it/panel_group_general.xml index ffcbdca6f7..49baa73811 100644 --- a/indra/newview/skins/default/xui/it/panel_group_general.xml +++ b/indra/newview/skins/default/xui/it/panel_group_general.xml @@ -46,7 +46,7 @@ Muovi il tuo mouse sopra le opzioni per maggiore aiuto. <check_box label="Chiunque può aderire" name="open_enrollement" tool_tip="Imposta se questo gruppo permette ai nuovi membri di aderire senza essere invitati."/> <check_box label="Quota di adesione" name="check_enrollment_fee" tool_tip="Imposta se richiedere una tassa d'iscrizione per aderire al gruppo"/> <spinner label="L$" left_delta="136" name="spin_enrollment_fee" tool_tip="I nuovi soci devono pagare questa tassa d'iscrizione quando è selezionata." width="60"/> - <combo_box name="group_mature_check" tool_tip="Imposta se le informazioni sul tuo gruppo sono da considerarsi Mature."> + <combo_box name="group_mature_check" tool_tip="Imposta se le informazioni sul tuo gruppo sono da considerarsi di tipo Moderato."> <combo_item name="select_mature"> - Seleziona categoria di accesso - </combo_item> diff --git a/indra/newview/skins/default/xui/it/panel_region_general.xml b/indra/newview/skins/default/xui/it/panel_region_general.xml index a30fadcaa6..6ca5dd878e 100644 --- a/indra/newview/skins/default/xui/it/panel_region_general.xml +++ b/indra/newview/skins/default/xui/it/panel_region_general.xml @@ -30,7 +30,7 @@ <text label="Maturità" name="access_text" width="120"> Categoria di accesso: </text> - <icons_combo_box label="Mature" left="126" name="access_combo" width="74"> + <icons_combo_box label="Moderato" left="126" name="access_combo" width="74"> <icons_combo_box.item label="Adulti" name="Adult" value="42"/> <icons_combo_box.item label="Moderato" name="Mature" value="21"/> <icons_combo_box.item label="Generale" name="PG" value="13"/> |