Skip to content
Snippets Groups Projects
Commit acfb50f6 authored by Tofu Linden's avatar Tofu Linden
Browse files

merge from PE's viewer-release

parents 599a9a97 9eeaaf67
No related branches found
No related tags found
No related merge requests found
Showing
with 115 additions and 35 deletions
......@@ -68,8 +68,9 @@ LLAccordionCtrl::LLAccordionCtrl(const Params& params):LLPanel(params)
, mSelectedTab( NULL )
, mTabComparator( NULL )
, mNoVisibleTabsHelpText(NULL)
, mNoVisibleTabsOrigString(params.no_visible_tabs_text.initial_value().asString())
{
initNoTabsWidget(params.empty_accordion_text);
initNoTabsWidget(params.no_matched_tabs_text);
mSingleExpansion = params.single_expansion;
if(mFitParent && !mSingleExpansion)
......@@ -379,7 +380,7 @@ void LLAccordionCtrl::initNoTabsWidget(const LLTextBox::Params& tb_params)
{
LLTextBox::Params tp = tb_params;
tp.rect(getLocalRect());
mNoVisibleTabsOrigString = tp.initial_value().asString();
mNoMatchedTabsOrigString = tp.initial_value().asString();
mNoVisibleTabsHelpText = LLUICtrlFactory::create<LLTextBox>(tp, this);
}
......@@ -820,7 +821,7 @@ void LLAccordionCtrl::setFilterSubString(const std::string& filter_string)
{
LLStringUtil::format_map_t args;
args["[SEARCH_TERM]"] = LLURI::escape(filter_string);
std::string text = filter_string.empty() ? LLStringUtil::null : mNoVisibleTabsOrigString;
std::string text = filter_string.empty() ? mNoVisibleTabsOrigString : mNoMatchedTabsOrigString;
LLStringUtil::format(text, args);
mNoVisibleTabsHelpText->setValue(text);
......
......@@ -78,12 +78,14 @@ class LLAccordionCtrl: public LLPanel
accordion tabs are responsible for scrolling their content.
*NOTE fit_parent works best when combined with single_expansion.
Accordion view should implement getRequiredRect() and provide valid height*/
Optional<LLTextBox::Params> empty_accordion_text;
Optional<LLTextBox::Params> no_matched_tabs_text;
Optional<LLTextBox::Params> no_visible_tabs_text;
Params()
: single_expansion("single_expansion",false)
, fit_parent("fit_parent", false)
, empty_accordion_text("empty_accordion_text")
, no_matched_tabs_text("no_matched_tabs_text")
, no_visible_tabs_text("no_visible_tabs_text")
{};
};
......@@ -180,6 +182,8 @@ class LLAccordionCtrl: public LLPanel
bool mAutoScrolling;
F32 mAutoScrollRate;
LLTextBox* mNoVisibleTabsHelpText;
std::string mNoMatchedTabsOrigString;
std::string mNoVisibleTabsOrigString;
LLAccordionCtrlTab* mSelectedTab;
......
......@@ -576,7 +576,9 @@ void LLCOFWearables::clear()
LLAssetType::EType LLCOFWearables::getExpandedAccordionAssetType()
{
static std::map<std::string, LLAssetType::EType> type_map;
typedef std::map<std::string, LLAssetType::EType> type_map_t;
static type_map_t type_map;
static LLAccordionCtrl* accordion_ctrl = getChild<LLAccordionCtrl>("cof_wearables_accordion");
if (type_map.empty())
......@@ -587,14 +589,16 @@ LLAssetType::EType LLCOFWearables::getExpandedAccordionAssetType()
}
const LLAccordionCtrlTab* tab = accordion_ctrl->getExpandedTab();
LLAssetType::EType result = LLAssetType::AT_NONE;
if (!tab)
if (tab)
{
llwarns << "No accordion is expanded" << llendl;
return LLAssetType::AT_NONE;
type_map_t::iterator i = type_map.find(tab->getName());
llassert(i != type_map.end());
result = i->second;
}
return type_map[tab->getName()];
return result;
}
void LLCOFWearables::onListRightClick(LLUICtrl* ctrl, S32 x, S32 y, LLListContextMenu* menu)
......
......@@ -335,24 +335,34 @@ void show_item_profile(const LLUUID& item_uuid)
void show_item_original(const LLUUID& item_uuid)
{
//sidetray inventory panel
LLSidepanelInventory *sidepanel_inventory =
dynamic_cast<LLSidepanelInventory *>(LLSideTray::getInstance()->getPanel("sidepanel_inventory"));
bool reset_inventory_filter = !LLSideTray::getInstance()->isPanelActive("sidepanel_inventory");
LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel();
if (!active_panel) return;
if (!active_panel)
{
//this may happen when there is no floatera and other panel is active in inventory tab
if (sidepanel_inventory)
{
sidepanel_inventory->showInventoryPanel();
}
}
active_panel = LLInventoryPanel::getActiveInventoryPanel();
if (!active_panel)
{
return;
}
active_panel->setSelection(gInventory.getLinkedItemID(item_uuid), TAKE_FOCUS_NO);
if(reset_inventory_filter)
{
LLSidepanelInventory *sidepanel_inventory =
dynamic_cast<LLSidepanelInventory *>(LLSideTray::getInstance()->getPanel("sidepanel_inventory"));
if(sidepanel_inventory)
{
LLPanelMainInventory* main_inventory = sidepanel_inventory->getMainInventoryPanel();
main_inventory->onFilterEdit("");
}
//now for inventory floater
//inventory floater
bool floater_inventory_visible = false;
LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory");
for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
......@@ -364,8 +374,19 @@ void show_item_original(const LLUUID& item_uuid)
main_inventory->onFilterEdit("");
}
if(floater_inventory->getVisible())
{
floater_inventory_visible = true;
}
}
if(sidepanel_inventory && !floater_inventory_visible)
{
LLPanelMainInventory* main_inventory = sidepanel_inventory->getMainInventoryPanel();
main_inventory->onFilterEdit("");
}
}
}
......
......@@ -288,11 +288,23 @@ void LLPanelInventoryListItemBase::setIconImage(const LLUIImagePtr& image)
void LLPanelInventoryListItemBase::setTitle(const std::string& title, const std::string& highlit_text)
{
setToolTip(title);
LLTextUtil::textboxSetHighlightedVal(
mTitleCtrl,
LLStyle::Params(),
title,
highlit_text);
highlit_text);
}
BOOL LLPanelInventoryListItemBase::handleToolTip( S32 x, S32 y, MASK mask)
{
LLTextBox* item_name = getChild<LLTextBox>("item_name");
if (item_name->getRect().getWidth() < item_name->getTextPixelWidth())
{
return LLPanel::handleToolTip(x,y,mask);
}
return FALSE;
}
void LLPanelInventoryListItemBase::reshapeLeftWidgets()
......
......@@ -179,6 +179,10 @@ class LLPanelInventoryListItemBase : public LLPanel
/** Set item title - inventory item name usually */
virtual void setTitle(const std::string& title, const std::string& highlit_text);
/**
* Show tool tip if item name text size > panel size
*/
virtual BOOL handleToolTip( S32 x, S32 y, MASK mask);
LLViewerInventoryItem* mItem;
......
......@@ -1450,7 +1450,7 @@ void LLPanelPeople::showFriendsAccordionsIfNeeded()
LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion");
accordion->arrange();
// *TODO: new empty_accordion_text attribute was implemented in accordion (EXT-7368).
// *TODO: new no_matched_tabs_text attribute was implemented in accordion (EXT-7368).
// this code should be refactored to use it
// keep help text in a synchronization with accordions visibility.
updateFriendListHelpText();
......
......@@ -648,16 +648,18 @@ void LLTeleportHistoryPanel::refresh()
LLDate tab_boundary_date = LLDate::now();
LLFlatListView* curr_flat_view = NULL;
std::string filter_string = sFilterSubString;
LLStringUtil::toUpper(filter_string);
U32 added_items = 0;
while (mCurrentItem >= 0)
{
// Filtering
if (!sFilterSubString.empty())
if (!filter_string.empty())
{
std::string landmark_title(items[mCurrentItem].mTitle);
LLStringUtil::toUpper(landmark_title);
if( std::string::npos == landmark_title.find(sFilterSubString) )
if( std::string::npos == landmark_title.find(filter_string) )
{
mCurrentItem--;
continue;
......@@ -706,7 +708,7 @@ void LLTeleportHistoryPanel::refresh()
.getFlatItemForPersistentItem(&mContextMenu,
items[mCurrentItem],
mCurrentItem,
sFilterSubString);
filter_string);
if ( !curr_flat_view->addItem(item, LLUUID::null, ADD_BOTTOM, false) )
llerrs << "Couldn't add flat item to teleport history." << llendl;
if (mLastSelectedItemIndex == mCurrentItem)
......@@ -729,6 +731,8 @@ void LLTeleportHistoryPanel::refresh()
}
}
mHistoryAccordion->setFilterSubString(sFilterSubString);
mHistoryAccordion->arrange();
updateVerbs();
......
......@@ -88,6 +88,8 @@ BOOL LLSidepanelInventory::postBuild()
mPanelMainInventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
LLTabContainer* tabs = mPanelMainInventory->getChild<LLTabContainer>("inventory filter tabs");
tabs->setCommitCallback(boost::bind(&LLSidepanelInventory::updateVerbs, this));
/*
EXT-4846 : "Can we suppress the "Landmarks" and "My Favorites" folder since they have their own Task Panel?"
......
......@@ -54,6 +54,10 @@ class LLSidepanelInventory : public LLPanel
LLPanelMainInventory* getMainInventoryPanel() const { return mPanelMainInventory; }
BOOL isMainInventoryPanelActive() const;
void showItemInfoPanel();
void showTaskInfoPanel();
void showInventoryPanel();
protected:
// Tracks highlighted (selected) item in inventory panel.
LLInventoryItem *getSelectedItem();
......@@ -63,9 +67,6 @@ class LLSidepanelInventory : public LLPanel
void performActionOnSelection(const std::string &action);
bool canShare();
void showItemInfoPanel();
void showTaskInfoPanel();
void showInventoryPanel();
void updateVerbs();
//
......
......@@ -647,6 +647,7 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu
// *TODO: eliminate multiple traversals over the menu items
setMenuItemVisible(menu, "wear_add", mask == MASK_CLOTHING && n_worn == 0);
setMenuItemEnabled(menu, "wear_add", n_items == 1 && canAddWearable(ids.front()));
setMenuItemVisible(menu, "wear", n_worn == 0);
setMenuItemVisible(menu, "edit", !standalone && mask & (MASK_CLOTHING|MASK_BODYPART));
setMenuItemEnabled(menu, "edit", n_editable == 1 && n_worn == 1 && n_items == 1);
......@@ -740,4 +741,23 @@ void LLWearableItemsList::ContextMenu::createNewWearable(const LLUUID& item_id)
LLAgentWearables::createWearable(item->getWearableType(), true);
}
// Can we wear another wearable of the given item's wearable type?
// static
bool LLWearableItemsList::ContextMenu::canAddWearable(const LLUUID& item_id)
{
if (!gAgentWearables.areWearablesLoaded())
{
return false;
}
LLViewerInventoryItem* item = gInventory.getItem(item_id);
if (!item || item->getType() != LLAssetType::AT_CLOTHING)
{
return false;
}
U32 wearable_count = gAgentWearables.getWearableCount(item->getWearableType());
return wearable_count < LLAgentWearables::MAX_CLOTHING_PER_TYPE;
}
// EOF
......@@ -342,6 +342,7 @@ class LLWearableItemsList : public LLInventoryItemsList
static void setMenuItemEnabled(LLContextMenu* menu, const std::string& name, bool val);
static void updateMask(U32& mask, LLAssetType::EType at);
static void createNewWearable(const LLUUID& item_id);
static bool canAddWearable(const LLUUID& item_id);
LLWearableItemsList* mParent;
};
......
......@@ -14,7 +14,8 @@
background_visible="true"
bg_alpha_color="DkGray2"
bg_opaque_color="DkGray2"
empty_accordion_text.value="Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search]."
no_matched_tabs_text.value="Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search]."
no_visible_tabs_text.value="There are no any outfits. Try [secondlife:///app/search/all/ Search]."
follows="all"
height="400"
layout="topleft"
......
......@@ -173,7 +173,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
background_visible="true"
bg_alpha_color="DkGray2"
bg_opaque_color="DkGray2"
empty_accordion_text.value=""
follows="all"
height="356"
layout="topleft"
......
......@@ -5,14 +5,16 @@
background_visible="true"
bg_alpha_color="DkGray">
<accordion
no_matched_tabs_text.value="Didn't find what you're looking for? Try [secondlife:///app/search/places/[SEARCH_TERM] Search]."
no_visible_tabs_text.value="Teleport history is empty. Try [secondlife:///app/search/places/ Search]."
follows="left|top|right|bottom"
height="373"
layout="topleft"
left="3"
top="0"
name="history_accordion"
background_visible="true"
bg_alpha_color="DkGray2"
background_visible="true"
bg_alpha_color="DkGray2"
width="307">
<accordion_tab
layout="topleft"
......
......@@ -3,12 +3,16 @@
height="100"
name="accordion"
width="200">
<empty_accordion_text
<no_matched_tabs_text
follows="all"
height="100"
h_pad="10"
name="no_visible_items_msg"
name="no_matched_tabs_msg"
v_pad="15"
width="200"
wrap="true "/>
<!-- This widget will not be created in viewer. Only its value will be used for empty accordion without filter. -->
<no_visible_tabs_text
name="no_visible_tabs_msg"
visible="false"/>
</accordion>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment