refactored DeckMenuItem to be a derived class of SimpleMenuItem. Not sure why I had made them distinct.
TODO: review DeckMenu and SimpleMenu to see if it would be better to have them derive from a base class rather than be distinct.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
@@ -39,17 +39,6 @@ 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();
|
||||
|
||||
@@ -18,34 +18,44 @@ private:
|
||||
SimpleMenu* parent;
|
||||
float mScale;
|
||||
float mTargetScale;
|
||||
|
||||
protected:
|
||||
int fontId;
|
||||
string mText;
|
||||
bool mHasFocus;
|
||||
static float mYOffset;
|
||||
float mXOffset;
|
||||
|
||||
bool mIsValidSelection;
|
||||
virtual void checkUserClick();
|
||||
|
||||
|
||||
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;
|
||||
|
||||
protected:
|
||||
int mFontId;
|
||||
string mText;
|
||||
static float mYOffset;
|
||||
float mXOffset;
|
||||
string mDescription;
|
||||
|
||||
public:
|
||||
SimpleMenuItem(int id);
|
||||
SimpleMenuItem(SimpleMenu* _parent, int id, int fontId, string text, float x, float y, bool hasFocus = false, bool autoTranslate = false);
|
||||
|
||||
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);
|
||||
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
#include "Translate.h"
|
||||
#include "TextScroller.h"
|
||||
#include "Tasks.h"
|
||||
#include "IconButton.h"
|
||||
|
||||
#include <iomanip>
|
||||
|
||||
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<DeckMenuItem*> (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<string, string>::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;
|
||||
|
||||
@@ -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<int>(mXOffset), y2 = static_cast<int>(mY + mYOffset);
|
||||
SimpleMenuItem::setIsSelectionValid( false );
|
||||
int x2 = static_cast<int>(mXOffset), y2 = static_cast<int>(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()
|
||||
|
||||
@@ -177,11 +177,11 @@ void SimpleMenu::Render()
|
||||
for (int i = startId; i < startId + maxItems; i++)
|
||||
{
|
||||
if (i > mCount - 1) break;
|
||||
if ((static_cast<SimpleMenuItem*> (mObjects[i]))->mY - kLineHeight * startId < mY + height - kLineHeight + 7)
|
||||
if ((static_cast<SimpleMenuItem*> (mObjects[i]))->getY() - kLineHeight * startId < mY + height - kLineHeight + 7)
|
||||
{
|
||||
if (static_cast<SimpleMenuItem*> (mObjects[i])->hasFocus())
|
||||
{
|
||||
WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT)->DrawString(static_cast<SimpleMenuItem*> (mObjects[i])->desc.c_str(), mX
|
||||
WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT)->DrawString(static_cast<SimpleMenuItem*> (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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user