diff --git a/data/translations/text.dat b/data/translations/text.dat index 604f7868f..fbae79f9a 100644 --- a/data/translations/text.dat +++ b/data/translations/text.dat @@ -39,3 +39,10 @@ eng= ; Debugging text ; The following texts DO NOT require translation ; --------------------------------------------------------------- +[STR__PAULS_TEST_STRING_1] +eng=This is a test string. +[STR__PAULS_TEST_STRING_2] +eng=This is another test string with more text. +[STR__PAULS_TEST_STRING_3] +eng=Finally, another example containing wordage of increased length. + diff --git a/makefile.gaz b/makefile.gaz index d0f41ce8e..6f043a586 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -67,6 +67,10 @@ gfx_src := prim \ # anim \ # bilboard +gui_src := gui \ + greadout \ + gtextbox + locale_src := textdbase mem_src := memory diff --git a/source/gfx/font.cpp b/source/gfx/font.cpp index be30a2ace..4c4dc507f 100644 --- a/source/gfx/font.cpp +++ b/source/gfx/font.cpp @@ -335,7 +335,7 @@ int FontBank::printChar( char _char,int _x,int _y ) ---------------------------------------------------------------------- */ int FontBank::getStringWidth( char * text ) { - return getStrWrapLen( text, VidGetScrW() ); + return getStrWrapLen( text, m_printArea.w ); } /*---------------------------------------------------------------------- diff --git a/source/gui/gui.cpp b/source/gui/gui.cpp index 1042327b9..6a1abcde3 100644 --- a/source/gui/gui.cpp +++ b/source/gui/gui.cpp @@ -185,6 +185,18 @@ void CGUIObject::think(int _frames) } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CGUIObject::recalc() +{ + ASSERT(this==m_this); +} + + /*---------------------------------------------------------------------- @@ -207,7 +219,13 @@ extern void guiOpen() ---------------------------------------------------------------------- */ extern void guiClose() { - ASSERT(CGUIObject::s_llBase); + // Dump everything automatically + // Don't walk the linked list here but keep removing the head since frame + // objects remove their own children (PKG or do they?) + while(CGUIObject::s_llBase) + { + CGUIObject::s_llBase->shutdown(); + } } diff --git a/source/gui/gui.h b/source/gui/gui.h index c3af9c43c..946d32de8 100644 --- a/source/gui/gui.h +++ b/source/gui/gui.h @@ -54,29 +54,29 @@ public: virtual void init(GUIId _id); virtual void shutdown(); - virtual void setObjectX(int _x) {m_x=_x;recalc();} - virtual void setObjectY(int _y) {m_y=_y;recalc();} - virtual void setObjectW(int _w) {m_w=_w;recalc();} - virtual void setObjectH(int _h) {m_h=_h;recalc();} + void setObjectX(int _x) {m_x=_x;recalc();} + void setObjectY(int _y) {m_y=_y;recalc();} + void setObjectW(int _w) {m_w=_w;recalc();} + void setObjectH(int _h) {m_h=_h;recalc();} void setObjectXY(int _x,int _y) {setObjectX(_x);setObjectY(_y);} void setObjectWH(int _w,int _h) {setObjectW(_w);setObjectH(_h);} void setObjectXYWH(int _x,int _y,int _w,int _h) {setObjectXY(_x,_y);setObjectWH(_w,_h);} virtual void render(); virtual void think(int _frames); - virtual void recalc() {;} + virtual void recalc(); void setFlags(GUI_FLAGS _flags) {m_flags|=_flags;} void clearFlags(GUI_FLAGS _flags) {m_flags&=_flags^-1;} int getFlags(GUI_FLAGS _flags) {return (m_flags&_flags)!=0;} - virtual void select() {setFlags(FLAG_SELECTED);} - virtual void unselect() {clearFlags(FLAG_SELECTED);} - virtual int isSelected() {return getFlags(FLAG_SELECTED);} - - virtual void hide() {setFlags(FLAG_HIDDEN);} - virtual void unhide() {clearFlags(FLAG_HIDDEN);} - virtual int isHidden() {return getFlags(FLAG_HIDDEN);} + // Quick access functions to the most frequently used flags + void select() {setFlags(FLAG_SELECTED);} + void unselect() {clearFlags(FLAG_SELECTED);} + int isSelected() {return getFlags(FLAG_SELECTED);} + void hide() {setFlags(FLAG_HIDDEN);} + void unhide() {clearFlags(FLAG_HIDDEN);} + int isHidden() {return getFlags(FLAG_HIDDEN);} protected: diff --git a/source/locale/textdbase.cpp b/source/locale/textdbase.cpp index 0c530373f..82ba59f76 100644 --- a/source/locale/textdbase.cpp +++ b/source/locale/textdbase.cpp @@ -143,7 +143,6 @@ void TranslationDatabase::initialise(bool includeIds) } else s_idDatabase=NULL; - } /*---------------------------------------------------------------------- @@ -185,11 +184,17 @@ void TranslationDatabase::loadLanguage(unsigned int langType) char const * TranslationDatabase::getString(unsigned int strNum) { ASSERT(s_loaded); - if (s_idShow) - return(s_idDatabase->getString(strNum)); + if(strNum!=NO_STRING) + { + if (s_idShow) + return(s_idDatabase->getString(strNum)); + else + return(s_database->getString(strNum)); + } else - return(s_database->getString(strNum)); - + { + return "\0"; + } } /*---------------------------------------------------------------------- diff --git a/source/locale/textdbase.h b/source/locale/textdbase.h index 23579e9ff..fa7fa60e8 100644 --- a/source/locale/textdbase.h +++ b/source/locale/textdbase.h @@ -51,8 +51,9 @@ enum -------------------- */ class TranslationDatabase { -private: public: + enum{ NO_STRING=60000 }; // PKG - This is a special ID + static void initialise(bool includeIds); static void loadLanguage(unsigned int langType); static char const * getString(unsigned int strNum); diff --git a/source/paul/paul.cpp b/source/paul/paul.cpp index 0079275bc..671676b26 100644 --- a/source/paul/paul.cpp +++ b/source/paul/paul.cpp @@ -46,6 +46,22 @@ #include "gfx\sprbank.h" #endif +#ifndef __GUI_GUI_H__ +#include "gui\gui.h" +#endif + +#ifndef __GUI_GTEXTBOX_H__ +#include "gui\gtextbox.h" +#endif + +#ifndef __GUI_GREADOUT_H__ +#include "gui\greadout.h" +#endif + +#ifndef __LOCALE_TEXTDBASE_H__ +#include "locale\textdbase.h" +#endif + /* Std Lib ------- */ @@ -53,11 +69,6 @@ /* Data ---- */ -#ifndef __SPR_INGAMEFX_H__ -#include -#endif - - /*---------------------------------------------------------------------- Tyepdefs && Defines ------------------- */ @@ -82,30 +93,37 @@ static FontBank s_fontBank; Params: Returns: ---------------------------------------------------------------------- */ -int ploopid1=0; -int ploopid2=0; +unsigned int str=STR__PAULS_TEST_STRING_1; +int w=150; +int h=40; + +int testValue=1; +CGUITextReadout::TextReadoutData testData[]= +{ + { 1, STR__PAULS_TEST_STRING_1, }, + { 2, STR__PAULS_TEST_STRING_2, }, + { 3, STR__PAULS_TEST_STRING_3, }, + { 0, 0, }, +}; + -static SpriteBank *sprites=NULL; void CPaulScene::init() { s_fontBank.initialise(&standardFont); + guiOpen(); - - CSoundMediator::setSfxBank(CSoundMediator::INGAME); + CGUITextBox *tb; + tb=new ("textbox") CGUITextBox(); + tb->init(1); + tb->setObjectXY(200,130); - CSoundMediator::setSong(CSoundMediator::MUSIC); - CSoundMediator::playSong(); - - -//CXAStream::Init(); - PAUL_DBGMSG("initialised.."); - - ploopid1=CSoundMediator::playSfx(0); - ploopid2=CSoundMediator::playSfx(0); - - sprites=new ("bg sprite") SpriteBank(); - sprites->load(INGAMEFX_INGAMEFX_SPR); + CGUITextReadout *tr; + tr=new ("textreadout") CGUITextReadout(); + tr->init(2); + tr->setObjectXYWH(40,130,120,80); + tr->setReadoutTarget(&testValue); + tr->setReadoutData(testData); } @@ -117,6 +135,8 @@ void CPaulScene::init() ---------------------------------------------------------------------- */ void CPaulScene::shutdown() { + s_fontBank.dump(); + guiClose(); } @@ -130,7 +150,7 @@ void CPaulScene::render() { int logCount; int i,y,charHeight; - + logCount=getNumberOfDbgLinesInLog(); y=20; charHeight=s_fontBank.getCharHeight(); @@ -139,126 +159,25 @@ void CPaulScene::render() s_fontBank.print(20,y,getDbgLineFromLog(i)); y+=charHeight; } - - POLY_FT4 *ft4=sprites->printFT4(FRM_BACKGROUND,0,0,0,0,1023); - setXYWH(ft4,20,20,512-40,256-40); - setRGB0(ft4,64,64,64); + + guiRender(); } + /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ -int psfx=3; -int pkill=0; -#include "sound\speech.h" -int mvol=10; -int svol=255; -VECTOR ppos; -int psp=0; - void CPaulScene::think(int _frames) { -/* - int pad; - int sfxId=-1; - int setSfxVolume=false; - int setSongVolume=false; + CGUITextBox *tb; + tb=(CGUITextBox *)guiGetItem(1); + tb->setObjectWH(w,h); + tb->setText(str); - pad=PadGetDown(0); - if(pad&PAD_R1) - { - PAUL_DBGMSG("-------------------"); - } - else if(pad&PAD_CROSS) - { - sfxId=psfx; - } - else if(pad&PAD_SQUARE) - { - sfxId=0; - } - else if(pad&PAD_TRIANGLE) - { - sfxId=1; - } - else if(pad&PAD_CIRCLE) - { - sfxId=2; - } - if(sfxId!=-1) - { - CSoundMediator::playSfx(sfxId); - } - if(pad&PAD_START) - { -// PAUL_DBGMSG("stop loopers.."); -// CSoundMediator::stopSfx((xmPlayingId)ploopid1); -// CSoundMediator::stopSfx((xmPlayingId)ploopid2); - PAUL_DBGMSG("speech..\n"); - CSoundMediator::playSpeech((SpeechEquate)psp); - } - if(pad&PAD_R2) - { - PAUL_DBGMSG("stop all"); - CSoundMediator::stopAllSound(); - } -#ifdef __USER_paul__ - if(pad&PAD_L2) - { - extern int dump; - dump=true; - } -#endif - -//CSoundMediator::setposition((xmPlayingId)ploopid,&ppos); - - pad=PadGetHeld(0); - if(pad&PAD_UP) - { - mvol+=16; - if(mvol>CSoundMediator::MAX_VOLUME)mvol=CSoundMediator::MAX_VOLUME; - setSongVolume=true; - } - if(pad&PAD_DOWN) - { - mvol-=16; - if(mvolCSoundMediator::MAX_VOLUME)svol=CSoundMediator::MAX_VOLUME; - setSfxVolume=true; - } - if(pad&PAD_LEFT) - { - svol-=16; - if(svol