diff options
| -rw-r--r-- | indra/newview/lloutfitgallery.cpp | 32 | ||||
| -rw-r--r-- | indra/newview/lloutfitgallery.h | 24 | 
2 files changed, 48 insertions, 8 deletions
diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index dfb5a3d5a8..9a9993f58c 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -69,8 +69,7 @@ LLOutfitGallery::LLOutfitGallery(const LLOutfitGallery::Params& p)        mRowPanWidthFactor(p.row_panel_width_factor),        mGalleryWidthFactor(p.gallery_width_factor)  { -    mRowPanelWidth = mRowPanWidthFactor * mItemsInRow; -    mGalleryWidth = mGalleryWidthFactor * mItemsInRow; +    updateGalleryWidth();  }  LLOutfitGallery::Params::Params() @@ -115,6 +114,7 @@ void LLOutfitGallery::onOpen(const LLSD& info)          {              addToGallery(mOutfitMap[cats[i]]);          } +        reArrangeRows();          mGalleryCreated = true;      }  } @@ -122,7 +122,10 @@ void LLOutfitGallery::onOpen(const LLSD& info)  void LLOutfitGallery::draw()  {      LLPanel::draw(); -    updateRowsIfNeeded(); +    if (mGalleryCreated) +    { +        updateRowsIfNeeded(); +    }  }  void LLOutfitGallery::updateRowsIfNeeded() @@ -147,16 +150,21 @@ void LLOutfitGallery::reArrangeRows(S32 row_diff)      }      mItemsInRow+= row_diff; +    updateGalleryWidth(); +    std::sort(buf_items.begin(), buf_items.end(), LLOutfitGalleryItem::compareGalleryItem()); -    mRowPanelWidth = mRowPanWidthFactor * mItemsInRow; -    mGalleryWidth = mGalleryWidthFactor * mItemsInRow; -      for (std::vector<LLOutfitGalleryItem*>::const_iterator it = buf_items.begin(); it != buf_items.end(); ++it)      {          addToGallery(*it);      }  } +void LLOutfitGallery::updateGalleryWidth() +{ +    mRowPanelWidth = mRowPanWidthFactor * mItemsInRow; +    mGalleryWidth = mGalleryWidthFactor * mItemsInRow; +} +  LLPanel* LLOutfitGallery::addLastRow()  {      mRowCount++; @@ -515,7 +523,9 @@ LLOutfitGalleryItem::LLOutfitGalleryItem(const Params& p)      : LLPanel(p),      mTexturep(NULL),      mSelected(false), -    mWorn(false) +    mWorn(false), +    mDefaultImage(true), +    mOutfitName("")  {      buildFromFile("panel_outfit_gallery_item.xml");  } @@ -565,6 +575,7 @@ void LLOutfitGalleryItem::draw()  void LLOutfitGalleryItem::setOutfitName(std::string name)  {      mOutfitNameText->setText(name); +    mOutfitName = name;  }  void LLOutfitGalleryItem::setOutfitWorn(bool value) @@ -597,6 +608,7 @@ void LLOutfitGalleryItem::setImageAssetId(LLUUID image_asset_id)      mTexturep = LLViewerTextureManager::getFetchedTexture(image_asset_id);      mTexturep->setBoostLevel(LLGLTexture::BOOST_PREVIEW);      getChildView("preview_outfit")->setVisible(FALSE); +    mDefaultImage = false;  }  LLUUID LLOutfitGalleryItem::getImageAssetId() @@ -609,6 +621,7 @@ void LLOutfitGalleryItem::setDefaultImage()      mTexturep = NULL;      mImageAssetId.setNull();      getChildView("preview_outfit")->setVisible(TRUE); +    mDefaultImage = true;  }  LLOutfitGalleryGearMenu::LLOutfitGalleryGearMenu(LLOutfitListBase* olist) @@ -711,6 +724,11 @@ void LLOutfitGallery::refreshOutfit(const LLUUID& category_id)              }          }      } +     +    if (mGalleryCreated) +    { +        reArrangeRows(); +    }  }  void LLOutfitGallery::refreshTextures(const LLUUID& category_id) diff --git a/indra/newview/lloutfitgallery.h b/indra/newview/lloutfitgallery.h index 1b6878bce3..285c8baf59 100644 --- a/indra/newview/lloutfitgallery.h +++ b/indra/newview/lloutfitgallery.h @@ -129,8 +129,9 @@ private:      void moveRow(int row, int pos);      LLPanel* addToRow(LLPanel* row_stack, LLOutfitGalleryItem* item, int pos, int hgap);      void removeFromLastRow(LLOutfitGalleryItem* item); -    void reArrangeRows(S32 row_diff); +    void reArrangeRows(S32 row_diff = 0);      void updateRowsIfNeeded(); +    void updateGalleryWidth();      LLOutfitGalleryItem* buildGalleryItem(std::string name); @@ -211,6 +212,25 @@ public:      void setOutfitName(std::string name);      void setOutfitWorn(bool value);      void setSelected(bool value); +     +    std::string getItemName() {return mOutfitName;} +    bool mIsDefaultImage() {return mDefaultImage;} +     +    struct compareGalleryItem +    { +        bool operator()(LLOutfitGalleryItem* a, LLOutfitGalleryItem* b) +        { +            if((a->mIsDefaultImage() && b->mIsDefaultImage()) || (!a->mIsDefaultImage() && !b->mIsDefaultImage())) +            { +                return a->getItemName().compare(b->getItemName()) < 0; +            } +            else +            { +                return b->mIsDefaultImage(); +            } +        } +    }; +      private:      LLPointer<LLViewerTexture> mTexturep;      LLUUID mImageAssetId; @@ -220,6 +240,8 @@ private:      LLPanel* mFotoBgPanel;      bool     mSelected;      bool     mWorn; +    bool     mDefaultImage; +    std::string mOutfitName;  };  #endif  // LL_LLOUTFITGALLERYCTRL_H  | 
