| 358 | } |
| 359 | |
| 360 | bool InputControlSystem::save(const std::string& fileName) |
| 361 | { |
| 362 | TiXmlDocument doc(fileName.c_str()); |
| 363 | |
| 364 | TiXmlDeclaration dec; |
| 365 | dec.Parse( "<?xml version='1.0' encoding='utf-8'?>", 0, TIXML_ENCODING_UNKNOWN ); |
| 366 | doc.InsertEndChild(dec); |
| 367 | |
| 368 | TiXmlElement Controller( "Controller" ); |
| 369 | |
| 370 | for(std::vector<Channel*>::const_iterator o = mChannels.begin() ; o != mChannels.end(); ++o) |
| 371 | { |
| 372 | ICS::IntervalList intervals = (*o)->getIntervals(); |
| 373 | |
| 374 | if(intervals.size() > 1) // all channels have a default linear filter |
| 375 | { |
| 376 | TiXmlElement ChannelFilter( "ChannelFilter" ); |
| 377 | |
| 378 | ChannelFilter.SetAttribute("number", ToString<int>((*o)->getNumber()).c_str()); |
| 379 | |
| 380 | ICS::IntervalList::const_iterator interval = intervals.begin(); |
| 381 | while( interval != intervals.end() ) |
| 382 | { |
| 383 | // if not default linear filter |
| 384 | if(!( interval->step == 0.2f |
| 385 | && interval->startX == 0.0f |
| 386 | && interval->startY == 0.0f |
| 387 | && interval->midX == 0.5f |
| 388 | && interval->midY == 0.5f |
| 389 | && interval->endX == 1.0f |
| 390 | && interval->endY == 1.0f )) |
| 391 | { |
| 392 | TiXmlElement XMLInterval( "Interval" ); |
| 393 | |
| 394 | XMLInterval.SetAttribute("type", "bezier"); |
| 395 | XMLInterval.SetAttribute("step", ToString<float>(interval->step).c_str()); |
| 396 | |
| 397 | XMLInterval.SetAttribute("startX", ToString<float>(interval->startX).c_str()); |
| 398 | XMLInterval.SetAttribute("startY", ToString<float>(interval->startY).c_str()); |
| 399 | XMLInterval.SetAttribute("midX", ToString<float>(interval->midX).c_str()); |
| 400 | XMLInterval.SetAttribute("midY", ToString<float>(interval->midY).c_str()); |
| 401 | XMLInterval.SetAttribute("endX", ToString<float>(interval->endX).c_str()); |
| 402 | XMLInterval.SetAttribute("endY", ToString<float>(interval->endY).c_str()); |
| 403 | |
| 404 | ChannelFilter.InsertEndChild(XMLInterval); |
| 405 | } |
| 406 | |
| 407 | ++interval; |
| 408 | } |
| 409 | |
| 410 | Controller.InsertEndChild(ChannelFilter); |
| 411 | } |
| 412 | } |
| 413 | |
| 414 | for(std::vector<Control*>::const_iterator o = mControls.begin() ; o != mControls.end(); ++o) |
| 415 | { |
| 416 | TiXmlElement control( "Control" ); |
| 417 |
nothing calls this directly
no test coverage detected