diff --git a/projects/mtg/include/DeckMenu.h b/projects/mtg/include/DeckMenu.h index 6e568efd1..ba570dc7c 100644 --- a/projects/mtg/include/DeckMenu.h +++ b/projects/mtg/include/DeckMenu.h @@ -62,14 +62,9 @@ public: DeckMetaData * getSelectedDeck(); void enableDisplayDetailsOverride(); bool showDetailsScreen(); - bool isClosed() - { - return mClosed; - } - int getSelectedDeckId() - { - return mSelectedDeckId; - } + + bool isClosed() const { return mClosed; } + int getSelectedDeckId() const { return mSelectedDeckId; } void Render(); void Update(float dt); diff --git a/projects/mtg/include/DeckMenuItem.h b/projects/mtg/include/DeckMenuItem.h index b4a786e8c..9168b733b 100644 --- a/projects/mtg/include/DeckMenuItem.h +++ b/projects/mtg/include/DeckMenuItem.h @@ -22,13 +22,13 @@ protected: virtual void checkUserClick(); public: + DeckMenuItem(DeckMenu* _parent, int id, int fontId, string text, float x, float y, bool hasFocus = false, bool autoTranslate = false, DeckMetaData *meta = NULL); + ~DeckMenuItem(); + string imageFilename; - string desc; float mScrollerOffset; DeckMetaData *meta; - virtual bool hasFocus(); - virtual void Relocate(float x, float y); virtual float GetWidth(); virtual void Render(); @@ -38,18 +38,7 @@ public: { return SimpleMenuItem::getTopLeft(top, left); } - - string GetText() - { - return mText; - } - string GetDescription() - { - return desc; - } - - DeckMenuItem(DeckMenu* _parent, int id, int fontId, string text, float x, float y, bool hasFocus = false, bool autoTranslate = false, DeckMetaData *meta = NULL); - ~DeckMenuItem(); + virtual void Entering(); virtual bool Leaving(JButton key); virtual bool ButtonPressed(); diff --git a/projects/mtg/include/SimpleMenuItem.h b/projects/mtg/include/SimpleMenuItem.h index 302e426bf..eb4f7d6a9 100644 --- a/projects/mtg/include/SimpleMenuItem.h +++ b/projects/mtg/include/SimpleMenuItem.h @@ -18,34 +18,44 @@ private: SimpleMenu* parent; float mScale; float mTargetScale; - -protected: - int fontId; - string mText; bool mHasFocus; + bool mIsValidSelection; + float mX; + float mY; + +protected: + int mFontId; + string mText; static float mYOffset; float mXOffset; - - bool mIsValidSelection; - virtual void checkUserClick(); - + string mDescription; public: - string desc; SimpleMenuItem(int id); SimpleMenuItem(SimpleMenu* _parent, int id, int fontId, string text, float x, float y, bool hasFocus = false, bool autoTranslate = false); - float mX; - float mY; + virtual int getFontId() const; + virtual void setFontId( const int& fontId ); + virtual void setX( const float& x ) { mX = x; }; + virtual void setY( const float& y ) { mY = y; }; + + virtual void setIsSelectionValid( bool validSelection ); + virtual void setFocus(bool value); + virtual void setDescription( const string& desc ); + virtual void setText( const string& text); + virtual bool isSelectionValid() const; + virtual bool hasFocus() const; + virtual string getDescription() const; + virtual string getText() const; + float getX() const; + float getY() const; + virtual void checkUserClick(); - + virtual float GetWidth() const; virtual void Relocate(float x, float y); - virtual float GetWidth(); - - virtual bool hasFocus(); - void RenderWithOffset(float yOffset); + virtual void RenderWithOffset(float yOffset); virtual void Render(); virtual void Update(float dt); diff --git a/projects/mtg/src/DeckMenu.cpp b/projects/mtg/src/DeckMenu.cpp index 37145a799..88eea7fcd 100644 --- a/projects/mtg/src/DeckMenu.cpp +++ b/projects/mtg/src/DeckMenu.cpp @@ -8,6 +8,8 @@ #include "Translate.h" #include "TextScroller.h" #include "Tasks.h" +#include "IconButton.h" + #include namespace @@ -22,6 +24,7 @@ namespace const float kVerticalScrollSpeed = 7.0f; const int DETAILED_INFO_THRESHOLD = 20; + const int kDetailedInfoButtonId = 10000; const PIXEL_TYPE kRedColor = ARGB(0xFF, 0xFF, 0x00, 0x00); } @@ -218,8 +221,11 @@ void DeckMenu::Render() for (int i = startId; i < startId + maxItems; i++) { if (i > mCount - 1) break; + if (mObjects[i]->GetId() >= kDetailedInfoButtonId) + break; // objects with id > 9999 are clickable buttons + DeckMenuItem *currentMenuItem = static_cast (mObjects[i]); - if (currentMenuItem->mY - kLineHeight * startId < mY + height - kLineHeight + 7) + if (currentMenuItem->getY() - kLineHeight * startId < mY + height - kLineHeight + 7) { // only load stats for visible items in the list if (currentMenuItem->meta && !currentMenuItem->meta->mStatsLoaded) @@ -272,7 +278,7 @@ void DeckMenu::Render() } // fill in the description part of the screen - string text = wordWrap(_(currentMenuItem->desc), descWidth, mainFont->mFontID ); + string text = wordWrap(_(currentMenuItem->getDescription()), descWidth, mainFont->mFontID ); mainFont->DrawString(text.c_str(), descX, descY); mFont->SetColor(ARGB(255,255,255,255)); @@ -347,10 +353,14 @@ void DeckMenu::Add(int id, const char * text, string desc, bool forceFocus, Deck mY + kVerticalMargin + mCount * kLineHeight, (mCount == 0), mAutoTranslate, deckMetaData); Translator * t = Translator::GetInstance(); map::iterator it = t->deckValues.find(text); + string deckDescription = ""; + if (it != t->deckValues.end()) //translate decks desc - menuItem->desc = it->second; + deckDescription = it->second; else - menuItem->desc = deckMetaData ? deckMetaData->getDescription() : desc; + deckDescription = deckMetaData ? deckMetaData->getDescription() : desc; + + menuItem->setDescription(deckDescription); JGuiController::Add(menuItem); if (mCount <= maxItems) mHeight += kLineHeight; diff --git a/projects/mtg/src/DeckMenuItem.cpp b/projects/mtg/src/DeckMenuItem.cpp index 8ba344b23..7b3d99671 100644 --- a/projects/mtg/src/DeckMenuItem.cpp +++ b/projects/mtg/src/DeckMenuItem.cpp @@ -11,13 +11,11 @@ const int kHorizontalScrollSpeed = 30; // higher numbers mean faster scrolling -DeckMenuItem::DeckMenuItem(DeckMenu* _parent, int id, int iFontId, string text, float x, float y, bool hasFocus, bool autoTranslate, DeckMetaData *deckMetaData): SimpleMenuItem(id) +DeckMenuItem::DeckMenuItem(DeckMenu* _parent, int id, int fontId, string text, float x, float y, bool hasFocus, bool autoTranslate, DeckMetaData *deckMetaData): SimpleMenuItem(NULL, id, fontId, text, x, y, hasFocus, autoTranslate) { mEngine = JGE::GetInstance(); parent = _parent; - fontId = iFontId; - mY = y; - mX = x; + WFont * mFont = WResourceManager::Instance()->GetWFont(fontId); meta = deckMetaData; mText = trim(text); @@ -27,7 +25,6 @@ DeckMenuItem::DeckMenuItem(DeckMenu* _parent, int id, int iFontId, string text, mXOffset = kItemXOffset; - mHasFocus = hasFocus; float newImageWidth = 0.0f; if (meta && !meta->getGamesPlayed()) { @@ -46,7 +43,7 @@ DeckMenuItem::DeckMenuItem(DeckMenu* _parent, int id, int iFontId, string text, if (hasFocus) { - mIsValidSelection = true; + setIsSelectionValid( true ); Entering(); } @@ -92,15 +89,15 @@ void DeckMenuItem::RenderWithOffset(float yOffset) { SimpleMenuItem::mYOffset = yOffset; - WFont * mFont = WResourceManager::Instance()->GetWFont(fontId); + WFont * mFont = WResourceManager::Instance()->GetWFont(getFontId()); - if (!( mHasFocus && mScrollEnabled )) + if (!( hasFocus() && mScrollEnabled )) mScrollerOffset = 0; - if (!mHasFocus && mScrollEnabled) + if (!hasFocus() && mScrollEnabled) mScrollerOffset = -1 * ( GetWidth() - ITEM_PX_WIDTH )/2; float offSet = mScrollerOffset; - mFont->DrawString(mText.c_str(), mX, mY + yOffset, JGETEXT_CENTER, offSet, ITEM_PX_WIDTH); + mFont->DrawString( getText().c_str(), getX(), getY() + yOffset, JGETEXT_CENTER, offSet, ITEM_PX_WIDTH); mDisplayInitialized = true; //Render a "new" icon for decks that have never been played yet if (meta && !meta->getGamesPlayed()) @@ -110,8 +107,9 @@ void DeckMenuItem::RenderWithOffset(float yOffset) { JQuadPtr quad = WResourceManager::Instance()->RetrieveQuad("new.png", 2.0f, 2.0f, tex->mWidth - 4.0f, tex->mHeight - 4.0f); //avoids weird rectangle aroudn the texture because of bilinear filtering quad->SetHotSpot(quad->mWidth/2.0f, quad->mHeight/2.0f); - float x = mX + min(ITEM_PX_WIDTH - quad->mWidth, GetWidth() )/2 + quad->mWidth/2; - if (quad) JRenderer::GetInstance()->RenderQuad(quad.get(), x , mY + yOffset + quad->mHeight/2, 0.5); + float x = getX() + min(ITEM_PX_WIDTH - quad->mWidth, GetWidth() )/2 + quad->mWidth/2; + if (quad) + JRenderer::GetInstance()->RenderQuad(quad.get(), x , getY() + yOffset + quad->mHeight/2, 0.5); } } } @@ -123,15 +121,15 @@ void DeckMenuItem::Render() void DeckMenuItem::Relocate(float x, float y) { - mX = x; - mY = y; + setX( x ); + setY( y ); } void DeckMenuItem::Entering() { checkUserClick(); - mHasFocus = true; - parent->mSelectionTargetY = mY; + setFocus(true); + parent->mSelectionTargetY = getY(); } @@ -151,33 +149,28 @@ void DeckMenuItem::checkUserClick() int x1 = -1, y1 = -1; if (mEngine->GetLeftClickCoordinates(x1, y1)) { - mIsValidSelection = false; - int x2 = static_cast(mXOffset), y2 = static_cast(mY + mYOffset); + SimpleMenuItem::setIsSelectionValid( false ); + int x2 = static_cast(mXOffset), y2 = static_cast(getY() + mYOffset); if ( (x1 >= x2) && (x1 <= (x2 + 200)) && (y1 >= y2) && (y1 < (y2 + 30))) - mIsValidSelection = true; + setIsSelectionValid( true ); } else - mIsValidSelection = true; + setIsSelectionValid( true ); } // Accessors float DeckMenuItem::GetWidth() { - WFont * mFont = WResourceManager::Instance()->GetWFont(fontId); - return mFont->GetStringWidth(mText.c_str()); -} - -bool DeckMenuItem::hasFocus() -{ - return mHasFocus; + WFont * mFont = WResourceManager::Instance()->GetWFont(getFontId()); + return mFont->GetStringWidth(getText().c_str()); } ostream& DeckMenuItem::toString(ostream& out) const { - return out << "DeckMenuItem ::: mHasFocus : " << mHasFocus + return out << "DeckMenuItem ::: mHasFocus : " << hasFocus() << " ; parent : " << parent - << " ; mText : " << mText - << " ; mX,mY : " << mX << "," << mY; + << " ; mText : " << getText() + << " ; mX,mY : " << getX() << "," << getY(); } DeckMenuItem::~DeckMenuItem() diff --git a/projects/mtg/src/SimpleMenu.cpp b/projects/mtg/src/SimpleMenu.cpp index 5e39b702c..3f3063552 100644 --- a/projects/mtg/src/SimpleMenu.cpp +++ b/projects/mtg/src/SimpleMenu.cpp @@ -177,11 +177,11 @@ void SimpleMenu::Render() for (int i = startId; i < startId + maxItems; i++) { if (i > mCount - 1) break; - if ((static_cast (mObjects[i]))->mY - kLineHeight * startId < mY + height - kLineHeight + 7) + if ((static_cast (mObjects[i]))->getY() - kLineHeight * startId < mY + height - kLineHeight + 7) { if (static_cast (mObjects[i])->hasFocus()) { - WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT)->DrawString(static_cast (mObjects[i])->desc.c_str(), mX + WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT)->DrawString(static_cast (mObjects[i])->getDescription().c_str(), mX + mWidth + 10, mY + 15); mFont->SetColor(ARGB(255,255,255,0)); } @@ -225,7 +225,7 @@ void SimpleMenu::Add(int id, const char * text, string desc, bool forceFocus) SimpleMenuItem * smi = NEW SimpleMenuItem(this, id, fontId, text, 0, mY + kVerticalMargin + mCount * kLineHeight, (mCount == 0), autoTranslate); - smi->desc = desc; + smi->setDescription(desc); JGuiController::Add(smi); if (mCount <= maxItems) mHeight += kLineHeight; if (forceFocus) diff --git a/projects/mtg/src/SimpleMenuItem.cpp b/projects/mtg/src/SimpleMenuItem.cpp index b74fbcfa9..5a62003bc 100644 --- a/projects/mtg/src/SimpleMenuItem.cpp +++ b/projects/mtg/src/SimpleMenuItem.cpp @@ -12,12 +12,15 @@ SimpleMenuItem::SimpleMenuItem(int id): JGuiObject(id) } SimpleMenuItem::SimpleMenuItem(SimpleMenu* _parent, int id, int fontId, string text, float x, float y, bool hasFocus, bool autoTranslate) : - JGuiObject(id), parent(_parent), fontId(fontId), mX(x), mY(y) + JGuiObject(id), parent(_parent), mFontId(fontId), mX(x), mY(y) { if (autoTranslate) mText = _(text); else mText = text; + + mDescription = ""; + mHasFocus = hasFocus; mScale = 1.0f; @@ -27,15 +30,19 @@ SimpleMenuItem::SimpleMenuItem(SimpleMenu* _parent, int id, int fontId, string t if (hasFocus) { - mIsValidSelection = true; + setIsSelectionValid(true); Entering(); } + else + { + setIsSelectionValid(false); + } } void SimpleMenuItem::RenderWithOffset(float yOffset) { mYOffset = yOffset; - WFont * mFont = WResourceManager::Instance()->GetWFont(fontId); + WFont * mFont = WResourceManager::Instance()->GetWFont(mFontId); mFont->DrawString(mText.c_str(), mX, mY + yOffset, JGETEXT_CENTER); } @@ -60,14 +67,15 @@ void SimpleMenuItem::Update(float dt) void SimpleMenuItem::checkUserClick() { - mIsValidSelection = true; + setIsSelectionValid(true); } void SimpleMenuItem::Entering() { checkUserClick(); mHasFocus = true; - parent->selectionTargetY = mY; + if (parent != NULL) + parent->selectionTargetY = mY; } bool SimpleMenuItem::Leaving(JButton key) @@ -90,18 +98,75 @@ void SimpleMenuItem::Relocate(float x, float y) mY = y; } -float SimpleMenuItem::GetWidth() + +/* Accessors */ +float SimpleMenuItem::getX() const { - WFont * mFont = WResourceManager::Instance()->GetWFont(fontId); - mFont->SetScale(1.0); - return mFont->GetStringWidth(mText.c_str()); + return mX; } -bool SimpleMenuItem::hasFocus() +float SimpleMenuItem::getY() const +{ + return mY; +} + +void SimpleMenuItem::setFontId(const int &fontId) +{ + mFontId = fontId; +} + +int SimpleMenuItem::getFontId() const +{ + return mFontId; +} + +void SimpleMenuItem::setIsSelectionValid( bool validSelection ) +{ + mIsValidSelection = validSelection; +} + +bool SimpleMenuItem::isSelectionValid() const +{ + return mIsValidSelection; +} + +void SimpleMenuItem::setFocus(bool value) +{ + mHasFocus = value; +} + +bool SimpleMenuItem::hasFocus() const { return mHasFocus; } +string SimpleMenuItem::getDescription() const +{ + return mDescription; +} + +void SimpleMenuItem::setDescription( const string& desc ) +{ + mDescription = desc; +} + +string SimpleMenuItem::getText() const +{ + return mText; +} + +void SimpleMenuItem::setText( const string& text) +{ + mText = text; +} + +float SimpleMenuItem::GetWidth() const +{ + WFont * mFont = WResourceManager::Instance()->GetWFont(mFontId); + mFont->SetScale(1.0); + return mFont->GetStringWidth(mText.c_str()); +} + ostream& SimpleMenuItem::toString(ostream& out) const { return out << "SimpleMenuItem ::: mHasFocus : " << mHasFocus