/** ******************************************************************************* @file /gui/model/selection.cpp @brief vyber objektu na scene @author Pavel + Vajicek @version 0.1 ******************************************************************************/ #include "gui/model/selection.h" namespace gui{ /*TSelectableObject**********************************************************************/ TSelectableObject::TSelectableObject() { selectable = true; selected = false; preselected = false; iPriorityOfSelection = 1; iTag = 0; } TSelectableObject::~TSelectableObject() { if(TSelection::sel){ TSelection::sel->unselect(this); TSelection::sel->preunselect(); } } void TSelectableObject::onClick() { TSelection::sel->select(this); } void TSelectableObject::onMouseOver() { TSelection::sel->preselect(this); } void TSelectableObject::select() { selected = true; } void TSelectableObject::unselect() { selected = false; } void TSelectableObject::preselect() { preselected = true; } void TSelectableObject::preunselect() { preselected = false; } /*TSelection*****************************************************************************/ TSelection::TSelection(){ preselection = NULL; } TSelection::Tvso::iterator TSelection::findSelObj2(TSelectableObject* o){ Tvso::iterator vsoi = selection.begin(); while(vsoi != selection.end()){ if(*vsoi == o) return vsoi; vsoi++; } return vsoi; } int TSelection::findSelObj(TSelectableObject* o) { Tvso::iterator vsoi = selection.begin(); for(int i = 0; vsoi != selection.end(); i++ ){ if(*vsoi == o) return i; vsoi++; } return -1; } void TSelection::select(TSelectableObject* o){ if( o->selectable && findSelObj(o) < 0 ){ selection.push_back(o); o->select(); } } void TSelection::unselect(TSelectableObject* o){ TSelection::Tvso::iterator it = findSelObj2(o); if( it != selection.end() ){ selection.erase(it); o->unselect(); } } void TSelection::unselectAll(){ for(Tvso::iterator vsoi = selection.begin(); vsoi != selection.end(); vsoi++ ) { (*vsoi)->unselect(); } } void TSelection::preselect(TSelectableObject* o){ if(o->selectable && o != preselection ){ if(preselection) preselection->preunselect(); o->preselect(); preselection = o; } } void TSelection::preunselect(){ if(preselection) preselection->preunselect(); preselection = NULL; } TSelection* TSelection::sel = NULL; void TSelection::initSelection(){ sel = new TSelection(); } void TSelection::destroySelection(){ delete sel; } /*THighlighting**************************************************************************/ void THighlighting::highlight(int on){ highlightState = on; } void THighlighting::highlightSwitch(){ highlightState = !highlightState; } void THighlighting::drawHighlight(){ } THighlighting::THighlighting(){ highlightState = 0; } }//namespace