00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "controler-gmap.hh"
00026 #include "parameter-selection.hh"
00027 #include <cassert>
00028 using namespace std;
00029 using namespace GMap3d;
00030
00031 CParameterSelection::CParameterSelection(CControlerGMap* AControlerGMapV,
00032 int ANbSelectionLevels, int ANbRef) :
00033 CParameter (ANbRef),
00034 FControlerGMapV(AControlerGMapV),
00035 FNbLevels (ANbSelectionLevels),
00036 FCurrentLevel (0),
00037 FSelectionOrbit(ORBIT_SELF),
00038 FHalfSelection (false),
00039 FChanged (false)
00040 {
00041 assert(AControlerGMapV != NULL);
00042 assert(0 < ANbSelectionLevels);
00043
00044 FMarks = new int[FNbLevels];
00045 FLasts = new CDart* [FNbLevels];
00046
00047 for (int i=0; i<FNbLevels; ++i)
00048 {
00049 FMarks[i] = FControlerGMapV->getMap()->getNewMark();
00050 FLasts[i] = NULL;
00051 }
00052 }
00053
00054 CParameterSelection::CParameterSelection(const CParameterSelection & AParam ) :
00055 CParameter (AParam),
00056 FControlerGMapV(AParam.FControlerGMapV),
00057 FNbLevels (AParam.FNbLevels),
00058 FCurrentLevel (AParam.FCurrentLevel),
00059 FSelectionOrbit(AParam.FSelectionOrbit),
00060 FChanged (false)
00061 {
00062 FMarks = new int[FNbLevels];
00063 FLasts = new CDart* [FNbLevels];
00064
00065 for (int i=0; i<FNbLevels; ++i)
00066 {
00067 FMarks[i] = FControlerGMapV->getMap()->getNewMark();
00068 FLasts[i] = NULL;
00069 }
00070 }
00071
00072 CParameterSelection::~CParameterSelection()
00073 {
00074 for (int i=0; i<FNbLevels; ++i)
00075 FControlerGMapV->getMap()->freeMark(FMarks[i]);
00076
00077 delete []FMarks;
00078 delete []FLasts;
00079 }
00080
00081 CParameter * CParameterSelection::copy() const
00082 { return new CParameterSelection(*this); }
00083
00084 void CParameterSelection::save(ostream& )
00085 {}
00086
00087 void CParameterSelection::load(istream& )
00088 {}
00089
00090 void CParameterSelection::reinit()
00091 {}
00092
00093 bool CParameterSelection::getChanged() const
00094 { return FChanged; }
00095
00096 void CParameterSelection::setChanged()
00097 {
00098 if ( !FChanged )
00099 {
00100 FChanged = true;
00101 putAllNeedToUpdate();
00102 }
00103 }
00104
00105 void CParameterSelection::unsetChanged()
00106 { FChanged = false; }
00107
00108 int CParameterSelection::getType() const
00109 { return PARAMETER_SELECTION; }
00110
00111 int CParameterSelection::getNbSelectionLevels() const
00112 { return FNbLevels; }
00113
00114 int CParameterSelection::getSelectionLevel() const
00115 { return FCurrentLevel; }
00116
00117 int CParameterSelection::getNextSelectionLevel(int AIndex) const
00118 { return (getSelectionLevel()+AIndex) % getNbSelectionLevels(); }
00119
00120 void CParameterSelection::setSelectionLevel(int ALevel)
00121 {
00122 assert( 0<=ALevel && ALevel<FNbLevels );
00123 if ( FCurrentLevel!=ALevel )
00124 {
00125 FCurrentLevel = ALevel;
00126 setChanged();
00127 }
00128 }
00129
00130 int CParameterSelection::getSelectionMark() const
00131 { return FMarks[FCurrentLevel]; }
00132
00133 int CParameterSelection::getSelectionMark(int ALevel) const
00134 {
00135 assert( 0<=ALevel && ALevel<FNbLevels );
00136 return FMarks[ALevel];
00137 }
00138
00139 int CParameterSelection::getNextSelectionMark(int AIndex) const
00140 { return getSelectionMark(getNextSelectionLevel(AIndex)); }
00141
00142 TOrbit CParameterSelection::getSelectionOrbit() const
00143 { return FSelectionOrbit; }
00144
00145 void CParameterSelection::setSelectionOrbit(TOrbit AOrbit)
00146 {
00147 assert(ORBIT_SELF <= AOrbit && AOrbit <= ORBIT_CC);
00148 FSelectionOrbit = AOrbit;
00149 }
00150
00151 void CParameterSelection::setNextSelectionOrbit()
00152 {
00153 FSelectionOrbit = FSelectionOrbit==ORBIT_CC ? ORBIT_SELF : 1 + FSelectionOrbit;
00154 }
00155
00156 bool CParameterSelection::getHalfSelection() const
00157 { return FHalfSelection; }
00158
00159 void CParameterSelection::setHalfSelection(bool ABool)
00160 { FHalfSelection = ABool; }
00161
00162 CDart* CParameterSelection::getLastSelectedDart() const
00163 { return FLasts[FCurrentLevel]; }
00164
00165 CDart* CParameterSelection::getLastSelectedDart(int ALevel) const
00166 {
00167 assert( 0<=ALevel && ALevel<FNbLevels );
00168 return FLasts[ALevel];
00169 }
00170
00171 CDart* CParameterSelection::getNextLastSelectedDart(int AIndex) const
00172 { return getLastSelectedDart(getNextSelectionLevel(AIndex)); }
00173
00174 void CParameterSelection::setLastSelectedDart(CDart* ALastDart)
00175 {
00176 assert( ALastDart!=NULL );
00177 if ( FLasts[FCurrentLevel]!=ALastDart )
00178 {
00179 FLasts[FCurrentLevel] = ALastDart;
00180 setChanged();
00181 }
00182 }
00183
00184 void CParameterSelection::setLastSelectedDart(int ALevel, CDart* ALastDart)
00185 {
00186 assert( 0<=ALevel && ALevel<FNbLevels );
00187 assert( ALastDart!=NULL );
00188 if ( FLasts[ALevel]!=ALastDart )
00189 {
00190 FLasts[ALevel] = ALastDart;
00191 setChanged();
00192 }
00193 }
00194
00195 void CParameterSelection::unsetLastSelectedDart()
00196 {
00197 if ( FLasts[FCurrentLevel]!=NULL )
00198 {
00199 FLasts[FCurrentLevel] = NULL;
00200 setChanged();
00201 }
00202 }
00203
00204 void CParameterSelection::unsetLastSelectedDart(int ALevel)
00205 {
00206 assert( 0<=ALevel && ALevel<FNbLevels );
00207
00208 if ( FLasts[ALevel]!=NULL )
00209 {
00210 FLasts[ALevel] = NULL;
00211 setChanged();
00212 }
00213 }
00214
00215 void CParameterSelection::unsetNextLastSelectedDart(int AIndex)
00216 { unsetLastSelectedDart(getNextSelectionLevel(AIndex)); }
00217
00218 void CParameterSelection::unsetAllLastSelectedDarts()
00219 {
00220 for (int i=0; i<getNbSelectionLevels(); ++i)
00221 unsetLastSelectedDart(i);
00222 }
00223
00224 void CParameterSelection::swapLevels(int ALevel1, int ALevel2)
00225 {
00226 assert( 0<=ALevel1 && ALevel1<FNbLevels );
00227 assert( 0<=ALevel2 && ALevel2<FNbLevels );
00228
00229 if ( ALevel1==ALevel2 ) return;
00230
00231
00232
00233
00234
00235 CDart* last = FLasts[ALevel1];
00236 FLasts[ALevel1] = FLasts[ALevel2];
00237 FLasts[ALevel2] = last;
00238
00239 setChanged();
00240 }
00241
00242 void CParameterSelection::toggleOrbitSelection(CDart* ADart)
00243 { FControlerGMapV->toggleOrbitSelection(ADart, getSelectionLevel()); }
00244