Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/terrain.older/src/lib/gui/gl/glgui_box.cc @ 10764

Last change on this file since 10764 was 9110, checked in by bensch, 18 years ago

orxonox/trunk: merged the Presentation back

File size: 3.5 KB
Line 
1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11   ### File Specific:
12   main-programmer: Benjamin Grauer
13   co-programmer: ...
14*/
15
16#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_GUI
17
18#include "glgui_box.h"
19#include <cassert>
20
21namespace OrxGui
22{
23  /**
24   * standard constructor
25  */
26  GLGuiBox::GLGuiBox (OrxGui::Orientation orientation)
27  {
28    this->init();
29
30    this->setOrientation(orientation);
31  }
32
33
34  /**
35   * standard deconstructor
36  */
37  GLGuiBox::~GLGuiBox()
38  {}
39
40  /**
41   * initializes the GUI-element
42   */
43  void GLGuiBox::init()
44  {
45    this->setClassID(CL_GLGUI_BOX, "GLGuiBox");
46  }
47
48  void GLGuiBox::pack(GLGuiWidget* widget)
49  {
50    assert (widget != NULL);
51
52    this->children.push_back(widget);
53    widget->setParentWidget(this);
54
55    this->resize();
56  }
57
58
59  void GLGuiBox::unpack(GLGuiWidget* widget)
60  {
61    assert(widget != NULL);
62
63    std::vector<GLGuiWidget*>::iterator delWidget = std::find(this->children.begin(), this->children.end(), widget);
64    if (delWidget != this->children.end())
65    {
66      (*delWidget)->setParentWidget(NULL);
67      this->children.erase(delWidget);
68    }
69    this->resize();
70  }
71
72  void GLGuiBox::clear()
73  {
74    this->children.clear();
75    this->resize();
76  }
77
78  void GLGuiBox::showAll()
79  {
80    std::vector<GLGuiWidget*>::iterator itC = this->children.begin();
81    while (itC != this->children.end())
82    {
83      if ((*itC)->isA(CL_GLGUI_CONTAINER))
84        static_cast<GLGuiContainer*>(*itC)->showAll();
85      else
86        (*itC)->show();
87      itC++;
88    }
89
90    this->show();
91  }
92
93  void GLGuiBox::hideAll()
94  {
95    std::vector<GLGuiWidget*>::iterator itC = this->children.begin();
96    while (itC != this->children.end())
97    {
98      if ((*itC)->isA(CL_GLGUI_CONTAINER))
99        static_cast<GLGuiContainer*>(*itC)->hideAll();
100      else
101        (*itC)->hide();
102      itC++;
103    }
104
105    this->hide();
106  }
107
108  void GLGuiBox::resize()
109  {
110    if (orientation() == OrxGui::Vertical)
111    {
112      float height = borderTop();
113      float width = 0.0f;
114      std::vector<GLGuiWidget*>::iterator widget;
115
116      // find out how big the Widgets are.
117      for (widget = this->children.begin(); widget != this->children.end(); ++widget)
118      {
119        (*widget)->setRelCoor2D(borderLeft(), height);
120        height += (*widget)->getSizeY2D();
121        width = fmax(width, (*widget)->getSizeX2D());
122      }
123
124      width += borderLeft() + borderRight();
125      height += borderBottom(); /* *2 done further up */
126
127      this->setSize2D(width, height);
128    }
129    else
130    {
131      float height = borderTop();
132      float width = borderLeft();
133      std::vector<GLGuiWidget*>::iterator widget;
134
135      // find out how big the Widgets are.
136      for (widget = this->children.begin(); widget != this->children.end(); ++widget)
137      {
138        (*widget)->setRelCoor2D(width, borderTop());
139        height = fmax(height, (*widget)->getSizeY2D());
140        width += (*widget)->getSizeX2D();
141      }
142
143      width += borderRight() ;
144      height += borderBottom(); /* *2 done further up */
145
146      this->setSize2D(width, height);
147    }
148    GLGuiWidget::resize();
149
150    // resize everything.
151    //for (widget = this->children.begin(); widget != this->children.end(); ++widget)
152    //{}
153  }
154
155  /**
156   * @brief draws the GLGuiBox
157   */
158  void GLGuiBox::draw() const
159  {
160    this->beginDraw();
161    GLGuiWidget::draw();
162    this->endDraw();
163  }
164}
Note: See TracBrowser for help on using the repository browser.