427 lines
8.9 KiB
C++
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 */
|