merge from viewer-public

meow-7.2.2
Tofu Linden 2010-05-12 19:39:30 +01:00
commit e2411ded41
24 changed files with 648 additions and 578 deletions

View File

@ -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;

View File

@ -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());

View File

@ -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)
{

View File

@ -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

View File

@ -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;
@ -396,72 +382,58 @@ public:
EDragAndDropType cargo_type,
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,

View File

@ -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)

View File

@ -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);
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -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;

View File

@ -98,26 +98,75 @@ public:
{
if (!gInventory.isInventoryUsable()) return;
LLUUID cof = LLAppearanceMgr::getInstance()->getCOF();
if (cof.isNull()) return;
bool panel_updated = checkCOF();
LLViewerInventoryCategory* cat = gInventory.getCategory(cof);
if (!cat) return;
S32 cof_version = cat->getVersion();
if (cof_version == mCOFLastVersion) return;
mCOFLastVersion = cof_version;
mPanel->update();
if (!panel_updated)
{
checkBaseOutfit();
}
}
protected:
/** 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;
return cat->getVersion();
}
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;
}
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

View File

@ -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;

View File

@ -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");

View File

@ -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);
}
}
}

View File

@ -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;

View File

@ -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
*

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

View File

@ -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]&apos;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&apos;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 &apos;[NAME]&apos; have been returned to their owner.
</notification>
@ -4876,6 +4892,7 @@ The objects on the selected parcel of land owned by the Resident &apos;[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&apos;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]:
&lt;nolink&gt;[MSG]&lt;/nolink&gt;
@ -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&apos;t fly here.
@ -4918,6 +4939,7 @@ You can&apos;t fly here.
<notification
icon="notify.tga"
name="PushRestricted"
persist="true"
type="notify">
This area does not allow pushing. You can&apos;t push others here unless you own the land.
<unique/>
@ -4926,6 +4948,7 @@ This area does not allow pushing. You can&apos;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&apos;t be able to hear anyone talking.
<unique/>
@ -4934,6 +4957,7 @@ This area has voice chat disabled. You won&apos;t be able to hear anyone talking
<notification
icon="notify.tga"
name="NoBuild"
persist="true"
type="notify">
This area has building disabled. You can&apos;t build or rez objects here.
<unique/>
@ -4942,6 +4966,7 @@ This area has building disabled. You can&apos;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&apos;re in.
</notification>
@ -4972,6 +5000,7 @@ You can only claim public land in the Region you&apos;re in.
<notification
icon="notify.tga"
name="RegionTPAccessBlocked"
persist="true"
type="notify">
You aren&apos;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&apos;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&apos;t read.
<notification
icon="notify.tga"
name="ScriptQuestion"
persist="true"
type="notify">
&apos;[OBJECTNAME]&apos;, an object owned by &apos;[NAME]&apos;, would like to:
@ -5460,6 +5523,7 @@ Is this OK?
icon="notify.tga"
name="ScriptQuestionCaution"
priority="high"
persist="true"
type="notify">
An object named &apos;[OBJECTNAME]&apos;, owned by &apos;[NAME]&apos; would like to:
@ -5487,6 +5551,7 @@ Grant this request?
<notification
icon="notify.tga"
name="ScriptDialog"
persist="true"
type="notify">
[FIRST] [LAST]&apos;s &apos;[TITLE]&apos;
[MESSAGE]
@ -5501,6 +5566,7 @@ Grant this request?
<notification
icon="notify.tga"
name="ScriptDialogGroup"
persist="true"
type="notify">
[GROUPNAME]&apos;s &apos;[TITLE]&apos;
[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 &apos;Stand Up&apos; 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 &apos;M&apos; 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 &apos;Save All&apos;.
<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&apos;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>

View File

@ -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>
</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"
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>
</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"
name="movement_panel"
user_resize="false"
width="80"
min_width="49">
<button
image_selected="PushButton_Selected_Press"
image_pressed="PushButton_Press"
image_pressed_selected="PushButton_Selected_Press"
width="108">
<talk_button
follows="left|right"
height="23"
use_ellipses="true"
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>
<layout_panel
auto_resize="false"
follows="right"
height="28"
layout="topleft"
min_height="28"
min_width="65"
mouse_opaque="false"
name="gesture_panel"
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>
<layout_panel
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="83">
<button
follows="left|right"
height="23"
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=""
layout="topleft"
name="snapshots"
width="36"
top="5"
image_selected="PushButton_Selected_Press"
is_toggle="true"
image_overlay="Snapshot_Off"
tool_tip="Take snapshot">
<button.init_callback
function="Button.SetFloaterToggle"
parameter="snapshot" />
</button>
</layout_panel>
layout="topleft"
left="0"
name="snapshots"
tool_tip="Take snapshot"
top="5"
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>

View File

@ -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"

View File

@ -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"/>

View File

@ -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"/>

View File

@ -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"/>

View File

@ -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&apos;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&apos;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>

View File

@ -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"/>