Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/script_engine/src/lib/gui/gl/glgui_box.cc @ 8453

Last change on this file since 8453 was 8417, checked in by snellen, 18 years ago

helicopter is scripted!

File size: 3.7 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 = this->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(this->borderLeft(), height);
120        height += (*widget)->getSizeY2D();
121        width = fmax(width, (*widget)->getSizeX2D());
122      }
123
124      width += this->borderLeft() + this->borderRight();
125      height += this->borderBottom(); /* *2 done further up */
126
127      printf("%f %f\n", width, height);
128      this->setSize2D(width, height);
129    }
130    else
131    {
132      float height = this->borderTop();
133      float width = this->borderLeft();
134      std::vector<GLGuiWidget*>::iterator widget;
135
136      // find out how big the Widgets are.
137      for (widget = this->children.begin(); widget != this->children.end(); ++widget)
138      {
139        (*widget)->setRelCoor2D(width, this->borderTop());
140        height = fmax(height, (*widget)->getSizeY2D());
141        width += (*widget)->getSizeX2D();
142      }
143
144      width += this->borderRight() ;
145      height += this->borderBottom(); /* *2 done further up */
146
147      printf("%f %f\n", width, height);
148      this->setSize2D(width, height);
149    }
150    GLGuiWidget::resize();
151
152    // resize everything.
153    //for (widget = this->children.begin(); widget != this->children.end(); ++widget)
154    //{}
155  }
156
157  /**
158   * @brief draws the GLGuiBox
159   */
160  void GLGuiBox::draw() const
161  {
162    this->beginDraw();
163    GLGuiWidget::draw();
164    this->endDraw();
165  }
166}
Note: See TracBrowser for help on using the repository browser.