43 void uiContainer::init()
46 tbg = _pSkin->parameter(
"TX_WNDBG").texture();
47 tborder_h = _pSkin->parameter(
"TX_WNDBR_H").texture();
48 tborder_v = _pSkin->parameter(
"TX_WNDBR_V").texture();
49 tangle = _pSkin->parameter(
"TX_WNDAN").texture();
51 col = _pSkin->parameter(
"CL_CONTAINER").color();
52 ptShadowOffset[0] = _pSkin->parameter(
"SHADOW_OFFSETX").dval();
53 ptShadowOffset[1] = _pSkin->parameter(
"SHADOW_OFFSETX").dval();
61 caption.
create( laPoint3( -((
double)tangle.w), -((
double)tangle.h) ), laPoint3(getSize().x(), tangle.h) );
63 caption.size( _pSkin->parameter(
"SZ_CAPTION").dval() );
64 caption.font( _pSkin->parameter(
"FN_CAPTION").font() );
77 uiContainer::uiContainer(
void)
80 _bDisplayBorders = M_TRUE;
84 uiContainer::uiContainer(
char* strFile)
87 _bDisplayBorders = M_TRUE;
93 uiContainer::~uiContainer(
void)
104 caption.setText(
"Untitled Container");
111 fp->readText(strFile, M_FALSE);
112 uiContainer::load(strFile);
115 void uiContainer::load(
char* strFile)
129 loadAlignment(&fp,
this);
135 fp.readSectionSeparator(str);
137 if(!strcmp(str,
"label")) pc =
new uiLabel();
138 else if(!strcmp(str,
"button")) pc =
new uiButton();
139 else if(!strcmp(str,
"checkbox")) { pc =
new uiButton(); ((
uiButton*)pc)->togglePersistent(M_TRUE); }
140 else if(!strcmp(str,
"edit")) pc =
new uiEdit();
141 else if(!strcmp(str,
"radio")) pc =
new uiRadio();
142 else if(!strcmp(str,
"progress")) pc =
new uiProgress();
143 else if(!strcmp(str,
"slider")) pc =
new uiSlider();
144 else if(!strcmp(str,
"dialog")) pc =
new uiContainer();
145 else if(!strcmp(str,
"hr")) pc =
new uiHR();
146 else if(!strcmp(str,
"END"))
return;
147 else throw laError(
"uiContainer::load: Unknow control type '%s'", str);
150 pc->setID(_vControls.size());
154 loadAlignment(&fp, pc);
161 fp->readText(str, M_FALSE);
164 if( strstr(str,
"left") ) h =
M_AL;
165 else if( strstr(str,
"right") ) h =
M_AR;
166 else if( strstr(str,
"center") ) h =
M_AC;
168 if( strstr(str,
"top") ) v =
M_AT;
169 else if( strstr(str,
"bottom") ) v =
M_AB;
170 else if( strstr(str,
"middle") ) v =
M_AM;
181 unsigned uiContainer::insert(
uiWindow* pWnd)
183 _vControls.push_back(pWnd);
186 return _vControls.size()-1;
189 uiWindow* uiContainer::get(
unsigned id)
191 ASSERT(
id < _vControls.size(),
"Invalid control %d (max %d)", id, _vControls.size()-1);
192 return _vControls[id];
195 uiWindow* uiContainer::remove(
unsigned id)
197 ASSERT(M_FALSE,
"Not implemented");
205 if(!isEnabled())
return;
210 for(
unsigned id=0;
id<_vControls.size();
id++)
212 if( (_vControls[
id]->isVisible()) && (_vControls[id]->isEnabled()))
213 _vControls[id]->reply();
229 void uiContainer::drawBorders()
232 laRenderer* r = ::laSystemIntegrator::getRenderer();
235 double nBW = tangle.w;
236 double nBH = tangle.h;
237 laPoint3 sz(tangle.w, tangle.h);
260 laPoint3(
_ptSize.x()-2*nBW, nBH),
264 laPoint3(
_ptSize.x()-2*nBW, nBH),
271 laPoint3(nBW,
_ptSize.y()-2*nBH),
275 laPoint3(nBW,
_ptSize.y()-2*nBH),
293 laRenderer* r = ::laSystemIntegrator::getRenderer();
299 r->styleSet( _pSkin->parameter(
"CL_SHADOW").color() );
301 r->transTranslate( ptShadowOffset );
312 r->transTranslate(
_ptPos + getDecorationSize() );
315 for(
unsigned id=0;
id<_vControls.size();
id++)
318 if( _vControls[
id]->isVisible() )
319 _vControls[
id]->
draw();
328 void uiContainer::onMouseMove(laPoint3 ptRelativePos)
332 if( _bMoveable && (pci->mouseButton(_nDragButton)) && (!_pDrag) )
335 _ptDragOffset = ptRelativePos;
338 uiWindow::onMouseMove(ptRelativePos);
341 void uiContainer::onUp(
unsigned nButton)
343 if( (_pDrag ==
this) && (nButton==_nDragButton) ) _pDrag = NULL;
344 uiWindow::onUp(nButton);
void kill()
Discard window and all children.
laPoint3 _ptPos
Windos position (relative to parent)
#define M_AB
Text align bottom.
virtual void load(class laFileParser *fp)
Load a dialog layout form .cui file.
virtual void vquadsDrawSingle(laPoint2 *ar_uv=NULL)=0
Draw a single VQ (Note this is slower than drawing an array of VQ and should be avoided) ...
virtual void move(laPoint3 ptNewPos, unsigned nHReference=M_AL, unsigned nVReference=M_AT)
Change window position.
void vquadsMakeXYRect(unsigned nIndex, const laPoint3 &pos, const laPoint3 &sz, const laPoint2 &uv, const laPoint2 &uv_sz)
Makes a quad aligned to the XY plane; (handy for GUI rendering )
virtual void create(laPoint3 pos, laPoint3 size)
Create new empty window.
#define M_AM
Text align middle.
#define M_AL
Text align left.
virtual void create(laPoint3 pos, laPoint3 size)
Create new empty window.
#define M_AT
Text align top.
#define M_AR
Text align right.
laPoint3 _ptSize
Window size.
virtual void draw()
Display the window.
uiWindow * _pParent
Pointer to parent window, if any.
virtual void vquadsDraw(unsigned nQuads, laPoint2 *ar_uv=NULL, laColor *ar_color=NULL, M_BOOL bBillboards=M_FALSE, M_BOOL bUseColorArrays=M_FALSE)=0
Draw an array of VQ, starting with the psecified pointers (or the first VQ if null) ...
Base class for GUI windows.
virtual void create(laPoint3 pos, laPoint3 size)
Create new empty window.
#define M_AC
Text align center.
Virtual interface for the Engine graphics renderer.
void toggleBorders(M_BOOL bEnable)
Toggle border visbility.
laPoint3 getRelativePointerPos()
Get mouse pointer position relative to window position.
virtual void reply()
Handle input message.
void toggleMoveable(M_BOOL bEnable, unsigned nButton=0)
Toggle moveable flag.
virtual void reply()
Handle input message.
laPoint3 getPos()
Get relative window position with regard to parent.
virtual void kill()
Discard window and all children.