diff options
| author | Andrey Lihatskiy <alihatskiy@productengine.com> | 2025-04-10 06:01:50 +0300 | 
|---|---|---|
| committer | Andrey Lihatskiy <alihatskiy@productengine.com> | 2025-04-10 06:01:50 +0300 | 
| commit | 5d7a5001b41df8989cd493433c3dc45459db8240 (patch) | |
| tree | 80012c04f61c56af704e825cf7d2f4e8e3e8625d /indra/newview/lloutfitgallery.cpp | |
| parent | 2813097aff00d856aa076ade4738a54fe48e25b6 (diff) | |
| parent | 9e24b300d02e5627ea0d304d412cb683ec2de3a4 (diff) | |
Merge commit '9e24b30' into marchcat/maint-c/restore
# Conflicts:
#	indra/llmath/v2math.cpp
#	indra/llmath/v2math.h
#	indra/llmath/v3math.h
#	indra/llmath/v4math.h
#	indra/llui/llfolderviewitem.cpp
#	indra/llui/llfolderviewitem.h
#	indra/llui/llfolderviewmodel.h
#	indra/llui/llmodaldialog.cpp
#	indra/llui/lltexteditor.cpp
#	indra/llui/lltexteditor.h
#	indra/llwindow/llwindowwin32.cpp
#	indra/newview/llagent.cpp
#	indra/newview/llagentcamera.h
#	indra/newview/llavatarrenderinfoaccountant.cpp
#	indra/newview/llconversationmodel.h
#	indra/newview/llfloaterinventorysettings.cpp
#	indra/newview/llfloaternamedesc.cpp
#	indra/newview/llfloaternamedesc.h
#	indra/newview/llfloaterobjectweights.cpp
#	indra/newview/llfloaterobjectweights.h
#	indra/newview/llfolderviewmodelinventory.h
#	indra/newview/llinspecttexture.cpp
#	indra/newview/llinventorybridge.cpp
#	indra/newview/llinventorybridge.h
#	indra/newview/llinventoryfunctions.cpp
#	indra/newview/llinventorygallery.h
#	indra/newview/llinventorygallerymenu.cpp
#	indra/newview/llinventorymodel.cpp
#	indra/newview/llinventorypanel.cpp
#	indra/newview/llinventorypanel.h
#	indra/newview/llmaterialeditor.cpp
#	indra/newview/lloutfitgallery.cpp
#	indra/newview/lloutfitgallery.h
#	indra/newview/lloutfitslist.cpp
#	indra/newview/lloutfitslist.h
#	indra/newview/llpanelgroupcreate.cpp
#	indra/newview/llpanelgroupgeneral.cpp
#	indra/newview/llpanelobjectinventory.cpp
#	indra/newview/llpaneloutfitsinventory.h
#	indra/newview/llpanelprofile.cpp
#	indra/newview/llpanelwearing.cpp
#	indra/newview/llreflectionmap.cpp
#	indra/newview/llselectmgr.cpp
#	indra/newview/llsidepanelappearance.cpp
#	indra/newview/llsidepaneliteminfo.cpp
#	indra/newview/llteleporthistorystorage.cpp
#	indra/newview/lltexturectrl.cpp
#	indra/newview/lltexturectrl.h
#	indra/newview/lltexturefetch.cpp
#	indra/newview/lltexturefetch.h
#	indra/newview/llviewerassetupload.cpp
#	indra/newview/llviewercamera.cpp
#	indra/newview/llviewercamera.h
#	indra/newview/llviewermenufile.cpp
#	indra/newview/llviewerobject.h
#	indra/newview/llviewertexture.cpp
#	indra/newview/llviewerwindow.cpp
#	indra/newview/llvoavatar.cpp
#	indra/newview/llvoavatar.h
#	indra/newview/llvoavatarself.cpp
#	indra/newview/llvovolume.cpp
#	indra/newview/llvovolume.h
#	indra/newview/tests/llviewerassetstats_test.cpp
Diffstat (limited to 'indra/newview/lloutfitgallery.cpp')
| -rw-r--r-- | indra/newview/lloutfitgallery.cpp | 194 | 
1 files changed, 169 insertions, 25 deletions
| diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index b1d5cd9e16..09dceed2f0 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -88,9 +88,16 @@ LLOutfitGallery::LLOutfitGallery(const LLOutfitGallery::Params& p)        mItemsInRow(p.items_in_row),        mRowPanWidthFactor(p.row_panel_width_factor),        mGalleryWidthFactor(p.gallery_width_factor), -      mTextureSelected(NULL) +      mTextureSelected(NULL), +      mSortMenu(nullptr)  {      updateGalleryWidth(); + +    LLControlVariable* ctrl = gSavedSettings.getControl("InventoryFavoritesColorText"); +    if (ctrl) +    { +        mSavedSettingInvFavColor = ctrl->getSignal()->connect(boost::bind(&LLOutfitGallery::handleInvFavColorChange, this)); +    }  }  LLOutfitGallery::Params::Params() @@ -421,16 +428,25 @@ void LLOutfitGallery::updateRowsIfNeeded()  bool compareGalleryItem(LLOutfitGalleryItem* item1, LLOutfitGalleryItem* item2)  { -    static LLCachedControl<bool> outfit_gallery_sort_by_name(gSavedSettings, "OutfitGallerySortByName"); -    if(outfit_gallery_sort_by_name || -            ((item1->isDefaultImage() && item2->isDefaultImage()) || (!item1->isDefaultImage() && !item2->isDefaultImage()))) +    static LLCachedControl<S32> sort_by_name(gSavedSettings, "OutfitGallerySortOrder", 0); +    switch (sort_by_name())      { -        std::string name1 = item1->getItemName(); -        std::string name2 = item2->getItemName(); +    case 2: +        if (item1->isFavorite() != item2->isFavorite()) +        { +            return item1->isFavorite(); +        break; +    case 1: +        if (item1->isDefaultImage() != item2->isDefaultImage()) +        break; +    default: +        break; +    } -        return (LLStringUtil::compareDict(name1, name2) < 0); +    std::string name1 = item1->getItemName(); +    std::string name2 = item2->getItemName(); +    return (LLStringUtil::compareDict(name1, name2) < 0);      } -    else      {          return item2->isDefaultImage();      } @@ -476,6 +492,20 @@ void LLOutfitGallery::updateGalleryWidth()      mGalleryWidth = mGalleryWidthFactor * mItemsInRow - mItemHorizontalGap;  } +void LLOutfitGallery::handleInvFavColorChange() +{ +    for (outfit_map_t::iterator iter = mOutfitMap.begin(); +        iter != mOutfitMap.end(); +        ++iter) +    { +        if (!iter->second) continue; +        LLOutfitGalleryItem* item = (LLOutfitGalleryItem*)iter->second; + +        // refresh font color +        item->setOutfitFavorite(item->isFavorite()); +    } +} +  LLPanel* LLOutfitGallery::addLastRow()  {      mRowCount++; @@ -627,7 +657,7 @@ void LLOutfitGallery::removeFromLastRow(LLOutfitGalleryItem* item)      mItemPanels.pop_back();  } -LLOutfitGalleryItem* LLOutfitGallery::buildGalleryItem(std::string name, LLUUID outfit_id) +LLOutfitGalleryItem* LLOutfitGallery::buildGalleryItem(std::string name, LLUUID outfit_id, bool is_favorite)  {      LLOutfitGalleryItem::Params giparams;      LLOutfitGalleryItem* gitem = LLUICtrlFactory::create<LLOutfitGalleryItem>(giparams); @@ -636,6 +666,7 @@ LLOutfitGalleryItem* LLOutfitGallery::buildGalleryItem(std::string name, LLUUID      gitem->setFollowsLeft();      gitem->setFollowsTop();      gitem->setOutfitName(name); +    gitem->setOutfitFavorite(is_favorite);      gitem->setUUID(outfit_id);      gitem->setGallery(this);      return gitem; @@ -793,8 +824,7 @@ void LLOutfitGallery::updateAddedCategory(LLUUID cat_id)      LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id);      if (!cat) return; -    std::string name = cat->getName(); -    LLOutfitGalleryItem* item = buildGalleryItem(name, cat_id); +    LLOutfitGalleryItem* item = buildGalleryItem(cat->getName(), cat_id, cat->getIsFavorite());      mOutfitMap.insert(LLOutfitGallery::outfit_map_value_t(cat_id, item));      item->setRightMouseDownCallback(boost::bind(&LLOutfitListBase::outfitRightClickCallBack, this,          _1, _2, _3, cat_id)); @@ -863,6 +893,7 @@ void LLOutfitGallery::updateChangedCategoryName(LLViewerInventoryCategory *cat,          if (item)          {              item->setOutfitName(name); +            item->setOutfitFavorite(cat->getIsFavorite());          }      }  } @@ -943,6 +974,10 @@ LLOutfitListGearMenuBase* LLOutfitGallery::createGearMenu()  static LLDefaultChildRegistry::Register<LLOutfitGalleryItem> r("outfit_gallery_item"); +bool LLOutfitGalleryItem::sColorSetInitialized = false; +LLUIColor LLOutfitGalleryItem::sDefaultTextColor; +LLUIColor LLOutfitGalleryItem::sDefaultFavoriteColor; +  LLOutfitGalleryItem::LLOutfitGalleryItem(const Params& p)      : LLPanel(p),      mGallery(nullptr), @@ -954,6 +989,12 @@ LLOutfitGalleryItem::LLOutfitGalleryItem(const Params& p)      mUUID(LLUUID())  {      buildFromFile("panel_outfit_gallery_item.xml"); +    if (!sColorSetInitialized) +    { +        sDefaultTextColor = LLUIColorTable::instance().getColor("White", LLColor4::white); +        sDefaultFavoriteColor = LLUIColorTable::instance().getColor("InventoryFavoriteColor", LLColor4::white); +        sColorSetInitialized = true; +    }  }  LLOutfitGalleryItem::~LLOutfitGalleryItem() @@ -1000,6 +1041,19 @@ void LLOutfitGalleryItem::draw()          gl_draw_scaled_image(interior.mLeft - 1, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep, UI_VERTEX_COLOR % alpha);      } +    static LLUICachedControl<bool> draw_star("InventoryFavoritesUseStar", true); +    if(mFavorite && draw_star()) +    { +        const S32 HPAD = 3; +        const S32 VPAD = 6; // includes padding for text and for the image +        const S32 image_size = 14; +        static LLPointer<LLUIImage> fav_img = LLRender2D::getInstance()->getUIImage("Inv_Favorite_Star_Full"); + +        const F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); +        gl_draw_scaled_image( +            border.getWidth() - image_size - HPAD, image_size + VPAD + mOutfitNameText->getRect().getHeight(), +            image_size, image_size, fav_img->getImage(), UI_VERTEX_COLOR % alpha); +     }  }  void LLOutfitGalleryItem::setOutfitName(std::string name) @@ -1009,18 +1063,28 @@ void LLOutfitGalleryItem::setOutfitName(std::string name)      mOutfitName = name;  } +void LLOutfitGalleryItem::setOutfitFavorite(bool is_favorite) +{ +    mFavorite = is_favorite; + +    static LLCachedControl<bool> use_color(gSavedSettings, "InventoryFavoritesColorText"); +    mOutfitNameText->setReadOnlyColor((mFavorite && use_color()) ? sDefaultFavoriteColor.get() : sDefaultTextColor.get()); +} +  void LLOutfitGalleryItem::setOutfitWorn(bool value)  {      mWorn = value;      LLStringUtil::format_map_t worn_string_args;      std::string worn_string = getString("worn_string", worn_string_args); -    LLUIColor text_color = LLUIColorTable::instance().getColor("White", LLColor4::white); -    mOutfitWornText->setReadOnlyColor(text_color); -    mOutfitNameText->setReadOnlyColor(text_color); +    mOutfitWornText->setReadOnlyColor(sDefaultTextColor.get()); +    mOutfitNameText->setReadOnlyColor(sDefaultTextColor.get());      mOutfitWornText->setFont(value ? LLFontGL::getFontSansSerifBold() : LLFontGL::getFontSansSerifSmall());      mOutfitNameText->setFont(value ? LLFontGL::getFontSansSerifBold() : LLFontGL::getFontSansSerifSmall());      mOutfitWornText->setValue(value ? worn_string : "");      mOutfitNameText->setText(mOutfitName); // refresh LLTextViewModel to pick up font changes + +    static LLCachedControl<bool> use_color(gSavedSettings, "InventoryFavoritesColorText"); +    mOutfitNameText->setReadOnlyColor((mFavorite && use_color()) ? sDefaultFavoriteColor.get() : sDefaultTextColor.get());  }  void LLOutfitGalleryItem::setSelected(bool value) @@ -1172,6 +1236,7 @@ LLContextMenu* LLOutfitGalleryContextMenu::createMenu()      registrar.add("Outfit.Delete", boost::bind(LLOutfitGallery::onRemoveOutfit, selected_id));      registrar.add("Outfit.Create", boost::bind(&LLOutfitGalleryContextMenu::onCreate, this, _2));      registrar.add("Outfit.Thumbnail", boost::bind(&LLOutfitGalleryContextMenu::onThumbnail, this, selected_id)); +    registrar.add("Outfit.Favorite", boost::bind(&LLOutfitGalleryContextMenu::onFavorite, this, selected_id));      registrar.add("Outfit.Save", boost::bind(&LLOutfitGalleryContextMenu::onSave, this, selected_id));      enable_registrar.add("Outfit.OnEnable", boost::bind(&LLOutfitGalleryContextMenu::onEnable, this, _2));      enable_registrar.add("Outfit.OnVisible", boost::bind(&LLOutfitGalleryContextMenu::onVisible, this, _2)); @@ -1218,17 +1283,6 @@ void LLOutfitGalleryGearMenu::onUpdateItemsVisibility()      LLOutfitListGearMenuBase::onUpdateItemsVisibility();  } -void LLOutfitGalleryGearMenu::onChangeSortOrder() -{ -    bool sort_by_name = !gSavedSettings.getBOOL("OutfitGallerySortByName"); -    gSavedSettings.setBOOL("OutfitGallerySortByName", sort_by_name); -    LLOutfitGallery* gallery = dynamic_cast<LLOutfitGallery*>(mOutfitList); -    if (gallery) -    { -        gallery->reArrangeRows(); -    } -} -  bool LLOutfitGalleryGearMenu::hasDefaultImage()  {      LLOutfitGallery* gallery = dynamic_cast<LLOutfitGallery*>(mOutfitList); @@ -1345,6 +1399,15 @@ void LLOutfitGallery::refreshOutfit(const LLUUID& category_id)      }  } +LLToggleableMenu* LLOutfitGallery::getSortMenu() +{ +    if (!mSortMenu) +    { +        mSortMenu = new LLOutfitGallerySortMenu(this); +    } +    return mSortMenu->getMenu(); +} +  LLUUID LLOutfitGallery::getPhotoAssetId(const LLUUID& outfit_id)  {      outfit_map_t::iterator outfit_it = mOutfitMap.find(outfit_id); @@ -1360,3 +1423,84 @@ LLUUID LLOutfitGallery::getDefaultPhoto()      return LLUUID();  } + +//////////////////// LLOutfitGallerySortMenu //////////////////// + +LLOutfitGallerySortMenu::LLOutfitGallerySortMenu(LLOutfitListBase* parent_panel) +    : mPanelHandle(parent_panel->getHandle()) +{ +    LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; +    LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; + +    registrar.add("Sort.OnSort", boost::bind(&LLOutfitGallerySortMenu::onSort, this, _2)); +    enable_registrar.add("Sort.OnEnable", boost::bind(&LLOutfitGallerySortMenu::onEnable, this, _2)); + +    mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>( +        "menu_outfit_gallery_sort.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +    llassert(mMenu); +} + + +LLToggleableMenu* LLOutfitGallerySortMenu::getMenu() +{ +    return mMenu; +} + +void LLOutfitGallerySortMenu::updateItemsVisibility() +{ +    onUpdateItemsVisibility(); +} + +void LLOutfitGallerySortMenu::onUpdateItemsVisibility() +{ +    if (!mMenu) return; +} + +bool LLOutfitGallerySortMenu::onEnable(LLSD::String param) +{ +    static LLCachedControl<S32> sort_order(gSavedSettings, "OutfitGallerySortOrder", 0); +    if ("favorites_to_top" == param) +    { +        return sort_order == 2; +    } +    else if ("images_to_top" == param) +    { +        return sort_order == 1; +    } +    else if ("by_name" == param) +    { +        return sort_order == 0; +    } + +    return false; +} + +void LLOutfitGallerySortMenu::onSort(LLSD::String param) +{ +    S32 sort_order = gSavedSettings.getS32("OutfitGallerySortOrder"); +    S32 new_sort_order = 0; +    if ("favorites_to_top" == param) +    { +        new_sort_order = 2; +    } +    else if ("images_to_top" == param) +    { +        new_sort_order = 1; +    } +    else if ("by_name" == param) +    { +        new_sort_order = 0; +    } +    if (sort_order == new_sort_order) +    { +        new_sort_order = sort_order ? 0 : 1; +    } +    gSavedSettings.setS32("OutfitGallerySortOrder", new_sort_order); + +    LLOutfitGallery* gallery = dynamic_cast<LLOutfitGallery*>(mPanelHandle.get()); +    if (gallery) +    { +        gallery->reArrangeRows(); +    } +} + | 
