Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Aug 22, 2006, 3:35:18 PM (18 years ago)
Author:
bensch
Message:

new_class_id: glgui adapted

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/new_class_id/src/lib/gui/gl/glgui_handler.cc

    r9656 r9689  
    2323#include "glgui_cursor.h"
    2424
    25 #include "class_list.h"
    2625#include <cassert>
    2726
     
    3534namespace OrxGui
    3635{
    37 
     36  NewObjectListDefinition(GLGuiHandler);
    3837  /**
    3938   * standard constructor
     
    4140  GLGuiHandler::GLGuiHandler ()
    4241  {
    43     this->setClassID(CL_GLGUI_HANDLER, "GLGuiHandler");
     42    this->registerObject(this, GLGuiHandler::_objectList);
    4443    this->setName("GLGuiHandler");
    4544
     
    117116  {
    118117    // 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();
    125158
    126159      if (GLGuiWidget::selected() != NULL)
    127160      {
    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())
    178163        {
    179164          currentIt = it;
     
    183168      else
    184169      {
    185         it = objects->end();
     170        it = GLGuiWidget::objectList().end();
    186171      }
    187172
     
    190175      for (; it != currentIt; --it)
    191176      {
    192         if (it == objects->end() && !cycledOnce)
     177        if (it == GLGuiWidget::objectList().end() && !cycledOnce)
    193178        {
    194179          --it ;
     
    196181        }
    197182
    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();
    201186          return;
    202187        }
    203188      }
    204189
    205     }
    206     else
    207     {
    208       PRINTF(0)("NO GUI-ELEMENTS EXISTING\n");
    209     }
    210190  }
    211191
     
    217197    {
    218198      case EV_MOUSE_MOTION:
    219         this->checkFocus();
    220         break;
     199      this->checkFocus();
     200      break;
    221201
    222202      case  EV_MOUSE_BUTTON_LEFT:
    223         if (GLGuiWidget::mouseFocused() != NULL && event.bPressed)
    224         {
    225           // if clickable select the Widget.
    226           if (GLGuiWidget::mouseFocused()->clickable())
    227           {
    228             Vector2D cursorPos = (this->_cursor != NULL) ? this->_cursor->getAbsCoor2D() : Vector2D(event.x, event.y);
    229             GLGuiWidget::mouseFocused()->select();
    230             GLGuiWidget::mouseFocused()->click(cursorPos - GLGuiWidget::mouseFocused()->getAbsCoor2D());
    231           }
    232         }
    233         else if (GLGuiWidget::selected() != NULL && !event.bPressed)
    234         {
    235           if (GLGuiWidget::selected()->clickable())
    236           {
    237             Vector2D cursorPos = (this->_cursor != NULL) ? this->_cursor->getAbsCoor2D() : Vector2D(event.x, event.y);
    238             GLGuiWidget::selected()->release(cursorPos - GLGuiWidget::selected()->getAbsCoor2D());
    239           }
    240         }
    241 
    242         break;
     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;
    243223      case EV_LEAVE_STATE:
    244         if (GLGuiWidget::selected() != NULL)
    245           GLGuiWidget::selected()->unselect();
    246 
    247         if (GLGuiWidget::mouseFocused() != NULL)
    248           GLGuiWidget::mouseFocused()->breakMouseFocus();
    249         break;
     224      if (GLGuiWidget::selected() != NULL)
     225        GLGuiWidget::selected()->unselect();
     226
     227      if (GLGuiWidget::mouseFocused() != NULL)
     228        GLGuiWidget::mouseFocused()->breakMouseFocus();
     229      break;
    250230
    251231      case EV_VIDEO_RESIZE:
    252         if (this->_cursor != NULL)
    253           this->_cursor->setMaxBorders(Vector2D(event.resize.w, event.resize.h));
    254         this->_resolution = Vector2D(event.resize.w, event.resize.h);
    255         break;
     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;
    256236
    257237      case SDLK_TAB:
    258         if (event.bPressed)
    259         {
    260           if (EventHandler::getInstance()->isPressed(SDLK_LSHIFT) || EventHandler::getInstance()->isPressed(SDLK_RSHIFT))
    261             this->selectPrevious();
    262           else
    263             this->selectNext();
    264         }
    265         break;
     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;
    266246    }
    267247
     
    304284  {
    305285    // 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);
    313293
    314294        if (widget->isVisible() &&
Note: See TracChangeset for help on using the changeset viewer.