SBSPSS/source/gui/gtextent.cpp
2000-11-20 15:44:46 +00:00

427 lines
8.9 KiB
C++

NB - This is not used.. but left IN VSS incase it needs to be resurrected (PKG)
/*=========================================================================
gtextent.cpp
Author: PKG
Created:
Project: Spongebob
Purpose:
Copyright (c) 2000 Climax Development Ltd
===========================================================================*/
/*----------------------------------------------------------------------
Includes
-------- */
#include "gui\gtextent.h"
#ifndef __GFX_FONT_H__
#include "gfx\font.h"
#endif
#ifndef __PAD_PADS_H__
#include "pad\pads.h"
#endif
/* Std Lib
------- */
/* Data
---- */
/*----------------------------------------------------------------------
Tyepdefs && Defines
------------------- */
/*----------------------------------------------------------------------
Structure defintions
-------------------- */
class CGUIKeyboard : public CGUIObjectWithFont
{
public:
virtual void init(CGUIObject *_parent,GUIId _id=noId);
virtual void setTextDetails(char *_store,int _maxLength);
virtual void render();
virtual void think(int _frames);
virtual void setFlags(GUI_FLAGS _flags);
virtual void clearFlags(GUI_FLAGS _flags);
virtual int isUnselectable() {return m_unselectable;}
protected:
virtual GUI_FLAGS getInitialFlags() {return FLAG_DRAWBORDER;}
private:
struct TextEntryLine
{
char **m_chars;
int m_numChars;
};
void renderKeyboard();
static TextEntryLine s_textEntryLines[];
static int s_numTextEntryLines;
char *m_store; // Where the string is held ( NB: MUST BE 1 BYTE LONGER THAN MAXLENGTH COS OF TRAILING 0 )
int m_maxLength;
int m_cursorX,m_cursorY;
int m_currentChar;
int m_unselectable;
int m_flashCount;
};
/*----------------------------------------------------------------------
Function Prototypes
------------------- */
/*----------------------------------------------------------------------
Vars
---- */
static char *s_textEntryText1[]={ "A","B","C","D","E","F","G","H","I","J","K","L","M" };
static int s_textEntryLength1=13;
static char *s_textEntryText2[]={ "N","O","P","Q","R","S","T","U","V","W","X","Y","Z" };
static int s_textEntryLength2=13;
static char *s_textEntryText3[]={ "a","b","c","d","e","f","g","h","i","j","k","l","m" };
static int s_textEntryLength3=13;
static char *s_textEntryText4[]={ "n","o","p","q","r","s","t","u","v","w","x","y","z" };
static int s_textEntryLength4=13;
static char *s_textEntryText5[]={ ".","0","1","2","3","4","5","6","7","8","9","<","=" };
static int s_textEntryLength5=13;
CGUIKeyboard::TextEntryLine CGUIKeyboard::s_textEntryLines[]=
{
{ s_textEntryText1, s_textEntryLength1 },
{ s_textEntryText2, s_textEntryLength2 },
{ s_textEntryText3, s_textEntryLength3 },
{ s_textEntryText4, s_textEntryLength4 },
{ s_textEntryText5, s_textEntryLength5 },
};
int CGUIKeyboard::s_numTextEntryLines=sizeof(CGUIKeyboard::s_textEntryLines)/sizeof(CGUIKeyboard::TextEntryLine);
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUIKeyboard::init(CGUIObject *_parent,GUIId _id)
{
CGUIObjectWithFont::init(_parent,_id);
m_store=NULL;
m_maxLength=0;
m_unselectable=true;
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUIKeyboard::setTextDetails(char *_store,int _maxLength)
{
m_store=_store;
m_maxLength=_maxLength;
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUIKeyboard::render()
{
FontBank *fb;
if(isSelected())
{
fb=getFontBank();
fb->print(getW()/2,10,m_store);
renderKeyboard();
CGUIObjectWithFont::render();
}
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUIKeyboard::think(int _frames)
{
CGUIObjectWithFont::think(_frames);
m_flashCount+=_frames;
if(isSelected())
{
int pad;
pad=PadGetRepeat(0);
if(pad&PAD_LEFT)
{
if(--m_cursorX<0)m_cursorX=s_textEntryLines[m_cursorY].m_numChars-1;
}
if(pad&PAD_RIGHT)
{
if(++m_cursorX==s_textEntryLines[m_cursorY].m_numChars)m_cursorX=0;
}
if(pad&PAD_UP)
{
if(--m_cursorY<0)m_cursorY=s_numTextEntryLines-1;
}
if(pad&PAD_DOWN)
{
if(++m_cursorY==s_numTextEntryLines)m_cursorY=0;
}
if(PadGetDown(0)&PAD_CROSS)
{
char currentChar;
currentChar=s_textEntryLines[m_cursorY].m_chars[m_cursorX][0];
if(currentChar=='<')
{
}
else if(currentChar=='=')
{
unselect();
}
else
{
GUI_DBGMSG("-%c-",currentChar);
}
}
}
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUIKeyboard::setFlags(GUI_FLAGS _flags)
{
CGUIObjectWithFont::setFlags(_flags);
if(_flags&FLAG_SELECTED)
{
m_unselectable=false;
m_cursorX=m_cursorY=0;
}
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUIKeyboard::clearFlags(GUI_FLAGS _flags)
{
CGUIObjectWithFont::setFlags(_flags);
if(_flags&FLAG_SELECTED)
{
m_unselectable=true;
}
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
enum
{
KEYBOARD_EDGE_PAD=15,
KEYBOARD_BOTTOM_PAD=18,
KEYBOARD_Y_PAD=7,
};
void CGUIKeyboard::renderKeyboard()
{
FontBank *fb;
int i,j;
int xBase,yBase;
int xStep,yStep;
int x,y;
TextEntryLine *line;
fb=getFontBank();
yStep=fb->getCharHeight()+KEYBOARD_Y_PAD;
yBase=getH()-KEYBOARD_BOTTOM_PAD-((s_numTextEntryLines*yStep)-KEYBOARD_Y_PAD);
y=yBase;
line=s_textEntryLines;
for(i=0;i<s_numTextEntryLines;i++)
{
xStep=(getW()-(KEYBOARD_EDGE_PAD*2))/(line->m_numChars+1);
xBase=(getW()-xStep*line->m_numChars)/2;
x=xBase;
for(j=0;j<line->m_numChars;j++)
{
if(!(j==m_cursorX&&i==m_cursorY&&m_flashCount&16))
{
fb->print(x,y,line->m_chars[j]);
}
x+=xStep;
}
y+=yStep;
line++;
}
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUITextEntry::init(CGUIObject *_parent,GUIId _id)
{
CGUIObjectWithFont::init(_parent,_id);
m_keyboard=new ("keyboard") CGUIKeyboard();
m_keyboard->init(NULL);
m_keyboard->setObjectXYWH(64,64,512-128,256-128);
m_keyboard->setOt(10);
// m_keyboard->select();
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUITextEntry::shutdown()
{
m_keyboard->shutdown();
delete m_keyboard;
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUITextEntry::setTextDetails(char *_store,int _maxLength)
{
m_keyboard->setTextDetails(_store,_maxLength);
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUITextEntry::render()
{
if(isSelected())
{
m_keyboard->render();
}
CGUIObjectWithFont::render();
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUITextEntry::think(int _frames)
{
CGUIObjectWithFont::think(_frames);
if(isSelected())
{
if(m_keyboard->isSelected())
{
m_keyboard->think(_frames);
}
else if(PadGetDown(0)&PAD_CROSS)
{
GUI_DBGMSG("selecting keyboard!");
m_keyboard->select();
}
}
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUITextEntry::setFlags(GUI_FLAGS _flags)
{
CGUIObjectWithFont::setFlags(_flags);
// m_keyboard->setFlags(_flags);
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
int CGUITextEntry::isUnselectable()
{
return m_keyboard->isUnselectable();
}
/*===========================================================================
end */