/** * @file llbadge.h * @brief Header for badges * * $LicenseInfo:firstyear=2001&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ #ifndef LL_LLBADGE_H #define LL_LLBADGE_H #include #include "lluicolor.h" #include "lluictrl.h" #include "llstring.h" #include "lluiimage.h" // // Declarations // class LLUICtrlFactory; class LLFontGL; // // Relative Position Alignment // namespace LLRelPos { enum Location { CENTER = 0, LEFT = (1 << 0), RIGHT = (1 << 1), TOP = (1 << 2), BOTTOM = (1 << 3), BOTTOM_LEFT = (BOTTOM | LEFT), BOTTOM_RIGHT = (BOTTOM | RIGHT), TOP_LEFT = (TOP | LEFT), TOP_RIGHT = (TOP | RIGHT), }; inline bool IsBottom(Location relPos) { return (relPos & BOTTOM) == BOTTOM; } inline bool IsCenter(Location relPos) { return (relPos == CENTER); } inline bool IsLeft(Location relPos) { return (relPos & LEFT) == LEFT; } inline bool IsRight(Location relPos) { return (relPos & RIGHT) == RIGHT; } inline bool IsTop(Location relPos) { return (relPos & TOP) == TOP; } } // NOTE: This needs to occur before Optional declaration for proper compilation. namespace LLInitParam { template<> struct TypeValues : public TypeValuesHelper { static void declareValues(); }; } // // Classes // class LLBadge : public LLUICtrl { public: struct Params : public LLInitParam::Block { Optional< LLHandle > owner; // Mandatory in code but not in xml Optional< LLUIImage* > image; Optional< LLUIColor > image_color; Optional< std::string > label; Optional< LLUIColor > label_color; Optional< LLRelPos::Location > location; Optional< U32 > location_percent_hcenter; Optional< U32 > location_percent_vcenter; Optional< F32 > padding_horiz; Optional< F32 > padding_vert; Params(); bool equals(const Params&) const; }; protected: friend class LLUICtrlFactory; LLBadge(const Params& p); public: ~LLBadge(); virtual void draw(); const std::string getLabel() const { return wstring_to_utf8str(mLabel); } void setLabel( const LLStringExplicit& label); private: const LLFontGL* mGLFont; LLPointer< LLUIImage > mImage; LLUIColor mImageColor; LLUIString mLabel; LLUIColor mLabelColor; LLRelPos::Location mLocation; F32 mLocationPercentHCenter; F32 mLocationPercentVCenter; LLHandle< LLUICtrl > mOwner; F32 mPaddingHoriz; F32 mPaddingVert; }; // Build time optimization, generate once in .cpp file #ifndef LLBADGE_CPP extern template class LLBadge* LLView::getChild(const std::string& name, BOOL recurse) const; #endif #endif // LL_LLBADGE_H