This commit is contained in:
Paul 2000-11-03 00:07:42 +00:00
parent fcaef22819
commit 4876c7760b
8 changed files with 357 additions and 54 deletions

View file

@ -80,6 +80,7 @@ void CGUIButton::think(int _frames)
ASSERT(m_target);
ASSERT(m_data);
CGUIObject::think(_frames);
if(isSelected())
{
int pad;
@ -89,7 +90,7 @@ void CGUIButton::think(int _frames)
{
int *data;
int tmp;
GUI_DBGMSG("*C*L*I*C*K");
data=m_data;
tmp=*data;
do

View file

@ -107,7 +107,6 @@ int CGUIGroupFrame::isSelectable()
pGUI=pGUI->getNext();
}
GUI_DBGMSG("frame is %s",selectable?"SELECTABLE":"NOT SELECTABLE");
return selectable;
}
@ -143,18 +142,55 @@ void CGUIControlFrame::think(int _frames)
pGUI=pGUI->getNext();
}
pGUI->unselect();
GUI_DBGMSG("unselected %d",pGUI->getId());
// Find next selectbale object and select it
while(!pGUI->isSelectable())
// Find next selectable object and select it
do
{
pGUI=pGUI->getNext();
if(!pGUI)pGUI=getChild();
}
while(!pGUI->isSelectable());
pGUI->select();
GUI_DBGMSG("selected %d",pGUI->getId());
}
}
else if(pad&PAD_UP)
{
/////////////////////
CGUIObject *pGUI,*prevGUI;
pGUI=getChild();
prevGUI=0;
if(pGUI)
{
// Get current selection and deselect it
while(!pGUI->isSelected())
{
ASSERT(pGUI);
if(pGUI->isSelectable())
{
prevGUI=pGUI;
}
pGUI=pGUI->getNext();
}
pGUI->unselect();
// Find previous selectable object and select it
if(!prevGUI)
{
do
{
if(pGUI->isSelectable())
{
prevGUI=pGUI;
}
pGUI=pGUI->getNext();
}
while(pGUI);
}
prevGUI->select();
}
/////////////////////
}
}

View file

@ -26,6 +26,10 @@
#include "locale\textdbase.h"
#endif
#ifndef __GFX_SPRBANK_H__
#include "gfx\sprbank.h"
#endif
/* Std Lib
------- */
@ -33,6 +37,11 @@
/* Data
---- */
#ifndef __FILE_EQUATES_H__
#include <biglump.h>
#endif
/*----------------------------------------------------------------------
Tyepdefs && Defines
------------------- */
@ -60,7 +69,9 @@ void CGUITextReadout::init(CGUIObject *_parent,GUIId _id)
CGUIObjectWithFont::init(_parent,_id);
m_target=0;
m_data=0;
m_lastValue=-1;
m_textId=TranslationDatabase::NO_STRING;
m_textY=0;
}
@ -142,10 +153,7 @@ void CGUITextReadout::recalc()
int tmp;
m_lastValue=*m_target;
m_textId=4;
fb=getFontBank();
m_textId=STR__DUMMY;
data=m_data;
do
@ -174,5 +182,149 @@ void CGUITextReadout::recalc()
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUISpriteReadout::init(CGUIObject *_parent,GUIId _id)
{
CGUIObject::init(_parent,_id);
m_target=0;
m_data=0;
m_sprites=new ("SpriteReadout:sprites") SpriteBank();
m_sprites->load(UI_UIGFX_SPR);
m_lastValue=-1;
m_frame=0;
m_x=m_y=0;
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUISpriteReadout::shutdown()
{
CGUIObject::shutdown();
m_sprites->dump(); delete m_sprites; m_sprites=0;
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUISpriteReadout::setReadoutTarget(int *_target)
{
m_target=_target;
recalc();
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUISpriteReadout::setReadoutData(SpriteReadoutData *_data)
{
m_data=_data;
recalc();
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUISpriteReadout::render()
{
FontBank *fb;
if(!isHidden())
{
m_sprites->printFT4(m_frame,getParentX()+m_x,getParentY()+m_y,0,0,getOt());
}
CGUIObject::render();
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUISpriteReadout::think(int _frames)
{
CGUIObject::think(_frames);
if(*m_target!=m_lastValue)
{
recalc();
}
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUISpriteReadout::recalc()
{
CGUIObject::recalc();
if(m_data)
{
char *string;
SpriteReadoutData *data;
int tmp;
sFrameHdr *fh;
int x,y;
m_lastValue=*m_target;
m_frame=0;
data=m_data;
do
{
if(m_lastValue==data->m_value)
{
m_frame=data->m_frame;
break;
}
tmp=data->m_value;
data++;
}
while(tmp<data->m_value);
fh=m_sprites->getFrameHeader(m_frame);
#ifdef __VERSION_DEBUG__
if(fh->W>getW()-(BORDERWIDTH*2)||
fh->H>getH()-(BORDERHEIGHT*2))
{
GUI_DBGMSG("Sprite overflow in CGUISpriteReadout!");
}
#endif
m_x=getX()+(getW()-fh->W)/2;
m_y=getY()+(getH()-fh->H)/2;
}
}
/*===========================================================================
end */

View file

@ -67,6 +67,41 @@ private:
};
class CGUISpriteReadout : public CGUIObject
{
public:
typedef struct
{
int m_value;
int m_frame;
} SpriteReadoutData;
virtual void init(CGUIObject *_parent,GUIId _id);
virtual void shutdown();
virtual void setReadoutTarget(int *_target);
virtual void setReadoutData(SpriteReadoutData *_data);
virtual void render();
virtual void think(int _frames);
protected:
void recalc();
private:
int *m_target;
SpriteReadoutData *m_data;
class SpriteBank *m_sprites;
int m_lastValue;
int m_frame;
int m_x,m_y;
};

View file

@ -92,8 +92,7 @@ void CGUIObject::init(CGUIObject *_parent,GUIId _id)
}
else
{
// PKG - Need to add some code to check that only one bastard ( that is, parentless :) object
// is ever in existance.
// This object is a bastard :)
GUI_DBGMSG("INFO: GUI object without parent created!");
setOt(INITIAL_OT);
}
@ -114,22 +113,19 @@ void CGUIObject::shutdown()
if(m_next)m_next->shutdown(); m_next=NULL;
m_parent=NULL;
// Is this actually safe? Not really.. (PKG)
// Is this actually safe? Not *really* (PKG)
delete this;
}
/*----------------------------------------------------------------------
Function:
Purpose: NB: The chain of render functions needs to be reversed so
that the draworder is correct! Look at any subclasses
render() function to see what I mean by this.. (PKG)
um.. or does it?
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
#ifdef __USER_paul__
int forceBorderDraw=true;
int forceBorderDraw=false;
#endif
void CGUIObject::render()
{