Changeset 9689 in orxonox.OLD for branches/new_class_id/src/lib/gui/gl/glgui_handler.cc
- Timestamp:
- Aug 22, 2006, 3:35:18 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/new_class_id/src/lib/gui/gl/glgui_handler.cc
r9656 r9689 23 23 #include "glgui_cursor.h" 24 24 25 #include "class_list.h"26 25 #include <cassert> 27 26 … … 35 34 namespace OrxGui 36 35 { 37 36 NewObjectListDefinition(GLGuiHandler); 38 37 /** 39 38 * standard constructor … … 41 40 GLGuiHandler::GLGuiHandler () 42 41 { 43 this-> setClassID(CL_GLGUI_HANDLER, "GLGuiHandler");42 this->registerObject(this, GLGuiHandler::_objectList); 44 43 this->setName("GLGuiHandler"); 45 44 … … 117 116 { 118 117 // retrieve Objects. 119 const std::list<BaseObject*>* objects = ClassList::getList(CL_GLGUI_WIDGET); 120 121 if (objects) 122 { 123 std::list<BaseObject*>::const_iterator it ; 124 std::list<BaseObject*>::const_iterator currentIt = objects->end(); 118 NewObjectList<GLGuiWidget>::const_iterator it, currentIt; 119 currentIt = GLGuiWidget::objectList().end(); 120 121 if (GLGuiWidget::selected() != NULL) 122 { 123 it = std::find(GLGuiWidget::objectList().begin(), GLGuiWidget::objectList().end(), GLGuiWidget::selected()); 124 if (it != GLGuiWidget::objectList().end()) 125 { 126 currentIt = it; 127 it++; 128 } 129 } 130 else 131 { 132 it = GLGuiWidget::objectList().begin(); 133 } 134 135 bool cycledOnce = false; 136 137 for (; it != currentIt; ++it) 138 { 139 if (it == GLGuiWidget::objectList().end() && !cycledOnce) 140 { 141 it = GLGuiWidget::objectList().begin(); 142 cycledOnce = true; 143 } 144 145 if ((*it)->selectable() && (*it)->isVisible()) 146 { 147 (*it)->select(); 148 return; 149 } 150 } 151 152 } 153 154 void GLGuiHandler::selectPrevious() 155 { 156 NewObjectList<GLGuiWidget>::const_iterator it, currentIt; 157 currentIt = GLGuiWidget::objectList().begin(); 125 158 126 159 if (GLGuiWidget::selected() != NULL) 127 160 { 128 it = std::find(objects->begin(), objects->end(), GLGuiWidget::selected()); 129 if (it != objects->end()) 130 { 131 currentIt = it; 132 it++; 133 } 134 } 135 else 136 { 137 it = objects->begin(); 138 } 139 140 bool cycledOnce = false; 141 142 for (; it != currentIt; ++it) 143 { 144 if (it == objects->end() && !cycledOnce) 145 { 146 it = objects->begin(); 147 cycledOnce = true; 148 } 149 150 if (dynamic_cast<GLGuiWidget*>(*it)->selectable() && dynamic_cast<GLGuiWidget*>(*it)->isVisible()) 151 { 152 dynamic_cast<GLGuiWidget*>(*it)->select(); 153 return; 154 } 155 } 156 157 } 158 else 159 { 160 PRINTF(0)("NO GUI-ELEMENTS EXISTING\n"); 161 } 162 } 163 164 void GLGuiHandler::selectPrevious() 165 { 166 // retrieve Objects. 167 const std::list<BaseObject*>* objects = ClassList::getList(CL_GLGUI_WIDGET); 168 169 if (objects) 170 { 171 std::list<BaseObject*>::const_iterator it ; 172 std::list<BaseObject*>::const_iterator currentIt = objects->begin(); 173 174 if (GLGuiWidget::selected() != NULL) 175 { 176 it = std::find(objects->begin(), objects->end(), GLGuiWidget::selected()); 177 if (it != objects->end()) 161 it = std::find(GLGuiWidget::objectList().begin(), GLGuiWidget::objectList().end(), GLGuiWidget::selected()); 162 if (it != GLGuiWidget::objectList().end()) 178 163 { 179 164 currentIt = it; … … 183 168 else 184 169 { 185 it = objects->end();170 it = GLGuiWidget::objectList().end(); 186 171 } 187 172 … … 190 175 for (; it != currentIt; --it) 191 176 { 192 if (it == objects->end() && !cycledOnce)177 if (it == GLGuiWidget::objectList().end() && !cycledOnce) 193 178 { 194 179 --it ; … … 196 181 } 197 182 198 if ( dynamic_cast<GLGuiWidget*>(*it)->selectable() && dynamic_cast<GLGuiWidget*>(*it)->isVisible())199 { 200 dynamic_cast<GLGuiWidget*>(*it)->select();183 if ((*it)->selectable() && (*it)->isVisible()) 184 { 185 (*it)->select(); 201 186 return; 202 187 } 203 188 } 204 189 205 }206 else207 {208 PRINTF(0)("NO GUI-ELEMENTS EXISTING\n");209 }210 190 } 211 191 … … 217 197 { 218 198 case EV_MOUSE_MOTION: 219 220 199 this->checkFocus(); 200 break; 221 201 222 202 case EV_MOUSE_BUTTON_LEFT: 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 203 if (GLGuiWidget::mouseFocused() != NULL && event.bPressed) 204 { 205 // if clickable select the Widget. 206 if (GLGuiWidget::mouseFocused()->clickable()) 207 { 208 Vector2D cursorPos = (this->_cursor != NULL) ? this->_cursor->getAbsCoor2D() : Vector2D(event.x, event.y); 209 GLGuiWidget::mouseFocused()->select(); 210 GLGuiWidget::mouseFocused()->click(cursorPos - GLGuiWidget::mouseFocused()->getAbsCoor2D()); 211 } 212 } 213 else if (GLGuiWidget::selected() != NULL && !event.bPressed) 214 { 215 if (GLGuiWidget::selected()->clickable()) 216 { 217 Vector2D cursorPos = (this->_cursor != NULL) ? this->_cursor->getAbsCoor2D() : Vector2D(event.x, event.y); 218 GLGuiWidget::selected()->release(cursorPos - GLGuiWidget::selected()->getAbsCoor2D()); 219 } 220 } 221 222 break; 243 223 case EV_LEAVE_STATE: 244 245 246 247 248 249 224 if (GLGuiWidget::selected() != NULL) 225 GLGuiWidget::selected()->unselect(); 226 227 if (GLGuiWidget::mouseFocused() != NULL) 228 GLGuiWidget::mouseFocused()->breakMouseFocus(); 229 break; 250 230 251 231 case EV_VIDEO_RESIZE: 252 253 254 255 232 if (this->_cursor != NULL) 233 this->_cursor->setMaxBorders(Vector2D(event.resize.w, event.resize.h)); 234 this->_resolution = Vector2D(event.resize.w, event.resize.h); 235 break; 256 236 257 237 case SDLK_TAB: 258 259 260 261 262 263 264 265 238 if (event.bPressed) 239 { 240 if (EventHandler::getInstance()->isPressed(SDLK_LSHIFT) || EventHandler::getInstance()->isPressed(SDLK_RSHIFT)) 241 this->selectPrevious(); 242 else 243 this->selectNext(); 244 } 245 break; 266 246 } 267 247 … … 304 284 { 305 285 // CHECK THE COLLISIONS. 306 const std::list<BaseObject*>* objects = ClassList::getList(CL_GLGUI_WIDGET);307 308 if (objects != NULL && this->_cursor != NULL)309 { 310 for (std::list<BaseObject*>::const_iterator it = objects->begin(); it != objects->end();it++)311 { 312 GLGuiWidget* widget = dynamic_cast<GLGuiWidget*>(*it);286 if (this->_cursor != NULL) 287 { 288 for (NewObjectList<GLGuiWidget>::const_iterator it = GLGuiWidget::objectList().begin(); 289 it != GLGuiWidget::objectList().end(); 290 it++) 291 { 292 GLGuiWidget* widget = (*it); 313 293 314 294 if (widget->isVisible() &&
Note: See TracChangeset
for help on using the changeset viewer.