f670ca05dd608c9d5b0300ca1dc493f6ffd8afa1
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp   1) /* Blinker
Stefan Schuermans update copyright years

Stefan Schuermans authored 10 years ago

src/noarch/Loveletter.cpp   2)    Copyright 2011-2014 Stefan Schuermans <stefan@blinkenarea.org>
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp   3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
src/noarch/Loveletter.cpp   4)    a blinkenarea.org project */
src/noarch/Loveletter.cpp   5) 
src/noarch/Loveletter.cpp   6) #include <list>
src/noarch/Loveletter.cpp   7) #include <string>
src/noarch/Loveletter.cpp   8) 
src/noarch/Loveletter.cpp   9) #include <BlinkenLib/BlinkenFrame.h>
src/noarch/Loveletter.cpp  10) #include <BlinkenLib/BlinkenMovie.h>
src/noarch/Loveletter.cpp  11) 
src/noarch/Loveletter.cpp  12) #include "Directory.h"
src/noarch/Loveletter.cpp  13) #include "File.h"
src/noarch/Loveletter.cpp  14) #include "InStreamFile.h"
src/noarch/Loveletter.cpp  15) #include "ListTracker.h"
src/noarch/Loveletter.cpp  16) #include "ListTracker_impl.h"
src/noarch/Loveletter.cpp  17) #include "Loveletter.h"
src/noarch/Loveletter.cpp  18) #include "LoveletterMovie.h"
src/noarch/Loveletter.cpp  19) #include "Mgrs.h"
src/noarch/Loveletter.cpp  20) #include "Module.h"
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp  21) #include "NameFile.h"
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp  22) #include "OutStreamFile.h"
src/noarch/Loveletter.cpp  23) #include "StreamRecv.h"
src/noarch/Loveletter.cpp  24) #include "Time.h"
src/noarch/Loveletter.cpp  25) #include "TimeCallee.h"
src/noarch/Loveletter.cpp  26) 
src/noarch/Loveletter.cpp  27) namespace Blinker {
src/noarch/Loveletter.cpp  28) 
src/noarch/Loveletter.cpp  29) /**
src/noarch/Loveletter.cpp  30)  * @brief constructor
src/noarch/Loveletter.cpp  31)  * @param[in] name module name
src/noarch/Loveletter.cpp  32)  * @param[in] mgrs managers
src/noarch/Loveletter.cpp  33)  * @param[in] dirBase base directory
src/noarch/Loveletter.cpp  34)  */
src/noarch/Loveletter.cpp  35) Loveletter::Loveletter(const std::string &name, Mgrs &mgrs,
src/noarch/Loveletter.cpp  36)                const Directory &dirBase):
src/noarch/Loveletter.cpp  37)   Module(name, mgrs, dirBase),
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp  38)   m_fileSound(dirBase.getFile("sound")),
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp  39)   m_fileOutStream(dirBase.getFile("outstream"), mgrs.m_streamMgr),
src/noarch/Loveletter.cpp  40)   m_fileHaltStream(dirBase.getFile("haltstream"), mgrs.m_streamMgr),
src/noarch/Loveletter.cpp  41)   m_movieTracker(*this, dirBase.getSubdir("movies")),
src/noarch/Loveletter.cpp  42)   m_curValid(false),
src/noarch/Loveletter.cpp  43)   m_pCurMovie(NULL),
src/noarch/Loveletter.cpp  44)   m_curFrame(0),
src/noarch/Loveletter.cpp  45)   m_curChange(false),
src/noarch/Loveletter.cpp  46)   m_halted(false),
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp  47)   m_pOpConn(NULL),
src/noarch/Loveletter.cpp  48)   m_sendPlay(false)
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp  49) {
src/noarch/Loveletter.cpp  50)   // load movies
src/noarch/Loveletter.cpp  51)   m_fileHaltStream.setStreamRecv(this);
src/noarch/Loveletter.cpp  52)   m_movieTracker.init();
src/noarch/Loveletter.cpp  53)   checkCurChanged();
src/noarch/Loveletter.cpp  54) 
src/noarch/Loveletter.cpp  55)   // open operator connection interface
src/noarch/Loveletter.cpp  56)   m_mgrs.m_opMgr.open(m_name, this);
src/noarch/Loveletter.cpp  57) }
src/noarch/Loveletter.cpp  58) 
src/noarch/Loveletter.cpp  59) /// virtual destructor
src/noarch/Loveletter.cpp  60) Loveletter::~Loveletter()
src/noarch/Loveletter.cpp  61) {
src/noarch/Loveletter.cpp  62)   // close operator connection interface
src/noarch/Loveletter.cpp  63)   m_mgrs.m_opMgr.close(m_name);
src/noarch/Loveletter.cpp  64)   closeOpConn();
src/noarch/Loveletter.cpp  65) 
src/noarch/Loveletter.cpp  66)   // cancel time callback request
src/noarch/Loveletter.cpp  67)   m_mgrs.m_callMgr.cancelTimeCall(this);
src/noarch/Loveletter.cpp  68) 
src/noarch/Loveletter.cpp  69)   // free all movies
src/noarch/Loveletter.cpp  70)   m_movieTracker.clear();
src/noarch/Loveletter.cpp  71)   m_fileHaltStream.setStreamRecv(NULL);
src/noarch/Loveletter.cpp  72) }
src/noarch/Loveletter.cpp  73) 
src/noarch/Loveletter.cpp  74) /// check for update of configuration
src/noarch/Loveletter.cpp  75) void Loveletter::updateConfig()
src/noarch/Loveletter.cpp  76) {
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp  77)   // sound name file was modified -> re-read sound name
src/noarch/Loveletter.cpp  78)   if (m_fileSound.checkModified())
src/noarch/Loveletter.cpp  79)     m_fileSound.update();
src/noarch/Loveletter.cpp  80) 
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp  81)   // output stream name file was modified -> re-get output stream
src/noarch/Loveletter.cpp  82)   if (m_fileOutStream.checkModified()) {
src/noarch/Loveletter.cpp  83)     m_fileOutStream.update();
src/noarch/Loveletter.cpp  84)     sendFrame();
src/noarch/Loveletter.cpp  85)   }
src/noarch/Loveletter.cpp  86) 
src/noarch/Loveletter.cpp  87)   // halt stream name file was modified -> re-get halt stream
src/noarch/Loveletter.cpp  88)   if (m_fileHaltStream.checkModified())
src/noarch/Loveletter.cpp  89)     m_fileHaltStream.update();
src/noarch/Loveletter.cpp  90) 
src/noarch/Loveletter.cpp  91)   // movie update
src/noarch/Loveletter.cpp  92)   m_movieTracker.updateConfig();
src/noarch/Loveletter.cpp  93)   checkCurChanged();
src/noarch/Loveletter.cpp  94) }
src/noarch/Loveletter.cpp  95) 
src/noarch/Loveletter.cpp  96) /**
src/noarch/Loveletter.cpp  97)  * @brief set current frame
src/noarch/Loveletter.cpp  98)  * @param[in] stream stream name
src/noarch/Loveletter.cpp  99)  * @param[in] pFrame current frame (NULL for none)
src/noarch/Loveletter.cpp 100)  */
src/noarch/Loveletter.cpp 101) void Loveletter::setFrame(const std::string &stream, stBlinkenFrame *pFrame)
src/noarch/Loveletter.cpp 102) {
src/noarch/Loveletter.cpp 103)   // this is coming from the halt stream, which will halt playing
src/noarch/Loveletter.cpp 104)   // whenever a frame is available on this halt stream
src/noarch/Loveletter.cpp 105) 
src/noarch/Loveletter.cpp 106)   // halt stream came to life -> halt playing
src/noarch/Loveletter.cpp 107)   if (pFrame && !m_halted) {
src/noarch/Loveletter.cpp 108)     m_halted = true;
src/noarch/Loveletter.cpp 109)     if (m_curValid) {
src/noarch/Loveletter.cpp 110)       // store remaining frame time
src/noarch/Loveletter.cpp 111)       m_remainTime = m_nextTime - Time::now();
src/noarch/Loveletter.cpp 112)       if (m_remainTime < Time::zero)
src/noarch/Loveletter.cpp 113)         m_remainTime = Time::zero;
src/noarch/Loveletter.cpp 114)     }
src/noarch/Loveletter.cpp 115)     // cancel time call
src/noarch/Loveletter.cpp 116)     m_mgrs.m_callMgr.cancelTimeCall(this);
src/noarch/Loveletter.cpp 117)   }
src/noarch/Loveletter.cpp 118) 
src/noarch/Loveletter.cpp 119)   // halt stream ended -> continue playing
src/noarch/Loveletter.cpp 120)   else if (!pFrame && m_halted) {
src/noarch/Loveletter.cpp 121)     m_halted = false;
src/noarch/Loveletter.cpp 122)     if (m_curValid) {
src/noarch/Loveletter.cpp 123)       // determine time for next frame
src/noarch/Loveletter.cpp 124)       m_nextTime = Time::now() + m_remainTime;
src/noarch/Loveletter.cpp 125)       // schedule time call
src/noarch/Loveletter.cpp 126)       m_mgrs.m_callMgr.requestTimeCall(this, m_nextTime);
src/noarch/Loveletter.cpp 127)     }
src/noarch/Loveletter.cpp 128)   }
src/noarch/Loveletter.cpp 129) 
src/noarch/Loveletter.cpp 130)   (void)stream; // unused
src/noarch/Loveletter.cpp 131) }
src/noarch/Loveletter.cpp 132) 
src/noarch/Loveletter.cpp 133) /// callback when requested time reached
src/noarch/Loveletter.cpp 134) void Loveletter::timeCall()
src/noarch/Loveletter.cpp 135) {
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 136)   // send sound play request on operator connection
src/noarch/Loveletter.cpp 137)   if (m_sendPlay) {
src/noarch/Loveletter.cpp 138)     m_sendPlay = false;
src/noarch/Loveletter.cpp 139)     if (m_pOpConn && m_fileSound.m_valid)
src/noarch/Loveletter.cpp 140)       m_pOpConn->sendPlay(m_fileSound.m_obj.m_str);
src/noarch/Loveletter.cpp 141)   }
src/noarch/Loveletter.cpp 142) 
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 143)   // leave if halted
src/noarch/Loveletter.cpp 144)   if (m_halted)
src/noarch/Loveletter.cpp 145)     return;
src/noarch/Loveletter.cpp 146) 
src/noarch/Loveletter.cpp 147)   // leave if time is not yet ready to next frame
src/noarch/Loveletter.cpp 148)   if (Time::now() < m_nextTime) {
src/noarch/Loveletter.cpp 149)     // request call at time for next frame
src/noarch/Loveletter.cpp 150)     m_mgrs.m_callMgr.requestTimeCall(this, m_nextTime);
src/noarch/Loveletter.cpp 151)     return;
src/noarch/Loveletter.cpp 152)   }
src/noarch/Loveletter.cpp 153) 
src/noarch/Loveletter.cpp 154)   // go to next frame
src/noarch/Loveletter.cpp 155)   ++m_curFrame;
src/noarch/Loveletter.cpp 156) 
src/noarch/Loveletter.cpp 157)   // process new current frame
src/noarch/Loveletter.cpp 158)   procFrame();
src/noarch/Loveletter.cpp 159) }
src/noarch/Loveletter.cpp 160) 
src/noarch/Loveletter.cpp 161) /**
src/noarch/Loveletter.cpp 162)  * @brief check if accepting new operator connction is possible
src/noarch/Loveletter.cpp 163)  * @param[in] name operator interface name
src/noarch/Loveletter.cpp 164)  * @return if accepting new connection is possible
src/noarch/Loveletter.cpp 165)  */
src/noarch/Loveletter.cpp 166) bool Loveletter::acceptNewOpConn(const std::string &name)
src/noarch/Loveletter.cpp 167) {
src/noarch/Loveletter.cpp 168)   // accept new connection if none active
src/noarch/Loveletter.cpp 169)   return !m_pOpConn;
src/noarch/Loveletter.cpp 170)   (void)name; // unused
src/noarch/Loveletter.cpp 171) }
src/noarch/Loveletter.cpp 172) 
src/noarch/Loveletter.cpp 173) /**
src/noarch/Loveletter.cpp 174)  * @brief new operator connection
src/noarch/Loveletter.cpp 175)  * @param[in] name operator interface name
src/noarch/Loveletter.cpp 176)  * @param[in] pConn operator connection object
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 177)  *
src/noarch/Loveletter.cpp 178)  * The new connection may not yet be used for sending inside this callback.
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 179)  */
src/noarch/Loveletter.cpp 180) void Loveletter::newOpConn(const std::string &name, OpConn *pConn)
src/noarch/Loveletter.cpp 181) {
src/noarch/Loveletter.cpp 182)   closeOpConn(); // close old connection (to be on the safe side)
src/noarch/Loveletter.cpp 183)   m_pOpConn = pConn; // remember new connection
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 184)   m_sendPlay = true; // schedule sending play request
src/noarch/Loveletter.cpp 185)   m_mgrs.m_callMgr.requestTimeCall(this, Time::now());
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 186)   (void)name; // unused
src/noarch/Loveletter.cpp 187) }
src/noarch/Loveletter.cpp 188) 
src/noarch/Loveletter.cpp 189) /**
src/noarch/Loveletter.cpp 190)  * @brief key command received on operator connection
src/noarch/Loveletter.cpp 191)  * @param[in] pConn operator connection object
src/noarch/Loveletter.cpp 192)  * @param[in] key key that was pressed
src/noarch/Loveletter.cpp 193)  */
src/noarch/Loveletter.cpp 194) void Loveletter::opConnRecvKey(OpConn *pConn, char key)
src/noarch/Loveletter.cpp 195) {
src/noarch/Loveletter.cpp 196)   switch (key) {
src/noarch/Loveletter.cpp 197)     // begin new movie number
src/noarch/Loveletter.cpp 198)     case '*':
src/noarch/Loveletter.cpp 199)       m_movieNumber.clear();
src/noarch/Loveletter.cpp 200)       break;
Stefan Schuermans begin with new number after...

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 201)     // add digit to movie number
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 202)     case '0':
src/noarch/Loveletter.cpp 203)     case '1':
src/noarch/Loveletter.cpp 204)     case '2':
src/noarch/Loveletter.cpp 205)     case '3':
src/noarch/Loveletter.cpp 206)     case '4':
src/noarch/Loveletter.cpp 207)     case '5':
src/noarch/Loveletter.cpp 208)     case '6':
src/noarch/Loveletter.cpp 209)     case '7':
src/noarch/Loveletter.cpp 210)     case '8':
src/noarch/Loveletter.cpp 211)     case '9':
src/noarch/Loveletter.cpp 212)       m_movieNumber += key;
src/noarch/Loveletter.cpp 213)       break;
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 214)     // exit / play movie
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 215)     case '#':
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 216)       if (m_movieNumber.empty())
src/noarch/Loveletter.cpp 217)         closeOpConn();
src/noarch/Loveletter.cpp 218)       else
src/noarch/Loveletter.cpp 219)         startPlaying();
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 220)       break;
src/noarch/Loveletter.cpp 221)   }
src/noarch/Loveletter.cpp 222)   (void)pConn; // unused
src/noarch/Loveletter.cpp 223) }
src/noarch/Loveletter.cpp 224) 
src/noarch/Loveletter.cpp 225) /**
src/noarch/Loveletter.cpp 226)  * @brief play command received on operator connection
src/noarch/Loveletter.cpp 227)  * @param[in] pConn operator connection object
src/noarch/Loveletter.cpp 228)  * @param[in] sound name of sound to play
src/noarch/Loveletter.cpp 229)  */
src/noarch/Loveletter.cpp 230) void Loveletter::opConnRecvPlay(OpConn *pConn, const std::string &sound)
src/noarch/Loveletter.cpp 231) {
src/noarch/Loveletter.cpp 232)   // this events does not make sense in this direction, ignore it
src/noarch/Loveletter.cpp 233)   (void)pConn; // unused
src/noarch/Loveletter.cpp 234)   (void)sound; // unused
src/noarch/Loveletter.cpp 235) }
src/noarch/Loveletter.cpp 236) 
src/noarch/Loveletter.cpp 237) /**
src/noarch/Loveletter.cpp 238)  * @brief operator connection is closed
src/noarch/Loveletter.cpp 239)  * @param[in] pConn operator connection object
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 240)  *
src/noarch/Loveletter.cpp 241)  * The connection may not be used for sending any more in this callback.
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 242)  */
src/noarch/Loveletter.cpp 243) void Loveletter::opConnClose(OpConn *pConn)
src/noarch/Loveletter.cpp 244) {
src/noarch/Loveletter.cpp 245)   m_pOpConn = NULL;
src/noarch/Loveletter.cpp 246)   stopPlaying();
src/noarch/Loveletter.cpp 247)   (void)pConn; // unused
src/noarch/Loveletter.cpp 248) }
src/noarch/Loveletter.cpp 249) 
src/noarch/Loveletter.cpp 250) /// check if current movie changed and react
src/noarch/Loveletter.cpp 251) void Loveletter::checkCurChanged()
src/noarch/Loveletter.cpp 252) {
src/noarch/Loveletter.cpp 253)   // current movie changed
src/noarch/Loveletter.cpp 254)   if (m_curChange) {
src/noarch/Loveletter.cpp 255)     m_curChange = false;
src/noarch/Loveletter.cpp 256) 
src/noarch/Loveletter.cpp 257)     // go to begin of new current movie and start playing now
src/noarch/Loveletter.cpp 258)     m_curFrame = 0;
src/noarch/Loveletter.cpp 259)     m_remainTime = Time::zero;
src/noarch/Loveletter.cpp 260)     m_nextTime = Time::now();
src/noarch/Loveletter.cpp 261)     procFrame();
src/noarch/Loveletter.cpp 262) 
src/noarch/Loveletter.cpp 263)   } // if (m_curChange)
src/noarch/Loveletter.cpp 264) }
src/noarch/Loveletter.cpp 265) 
src/noarch/Loveletter.cpp 266) /// process current frame
src/noarch/Loveletter.cpp 267) void Loveletter::procFrame()
src/noarch/Loveletter.cpp 268) {
src/noarch/Loveletter.cpp 269)   // a movie is selected and this is loaded
src/noarch/Loveletter.cpp 270)   if (m_pCurMovie && m_pCurMovie->m_pMovie) {
src/noarch/Loveletter.cpp 271)     int frameCnt = BlinkenMovieGetFrameCnt(m_pCurMovie->m_pMovie);
src/noarch/Loveletter.cpp 272)     // movie not empty
src/noarch/Loveletter.cpp 273)     if (frameCnt > 0) {
src/noarch/Loveletter.cpp 274)       // movie finsihed -> restart
src/noarch/Loveletter.cpp 275)       if (m_curFrame >= frameCnt)
src/noarch/Loveletter.cpp 276)         m_curFrame = 0;
src/noarch/Loveletter.cpp 277)       // valid
src/noarch/Loveletter.cpp 278)       m_curValid = true;
src/noarch/Loveletter.cpp 279)     }
src/noarch/Loveletter.cpp 280)     // movie empty -> not valid
src/noarch/Loveletter.cpp 281)     else
src/noarch/Loveletter.cpp 282)       m_curValid = false;
src/noarch/Loveletter.cpp 283)   }
src/noarch/Loveletter.cpp 284)   // no movie selected or selected one not loaded -> not valid
src/noarch/Loveletter.cpp 285)   else
src/noarch/Loveletter.cpp 286)     m_curValid = false;
src/noarch/Loveletter.cpp 287) 
src/noarch/Loveletter.cpp 288)   // send new frame to stream
src/noarch/Loveletter.cpp 289)   sendFrame();
src/noarch/Loveletter.cpp 290) 
src/noarch/Loveletter.cpp 291)   // if a frame is there
src/noarch/Loveletter.cpp 292)   if (m_curValid) {
src/noarch/Loveletter.cpp 293)     // get frame time and calculate absolute time for next frame
src/noarch/Loveletter.cpp 294)     stBlinkenFrame *pFrame =
src/noarch/Loveletter.cpp 295)       BlinkenMovieGetFrame(m_pCurMovie->m_pMovie, m_curFrame);
src/noarch/Loveletter.cpp 296)     m_remainTime.fromMs(BlinkenFrameGetDuration(pFrame));
src/noarch/Loveletter.cpp 297)     m_nextTime += m_remainTime;
src/noarch/Loveletter.cpp 298)     // request call at time for next frame
src/noarch/Loveletter.cpp 299)     if (!m_halted)
src/noarch/Loveletter.cpp 300)       m_mgrs.m_callMgr.requestTimeCall(this, m_nextTime);
src/noarch/Loveletter.cpp 301)   }
src/noarch/Loveletter.cpp 302) }
src/noarch/Loveletter.cpp 303) 
src/noarch/Loveletter.cpp 304) /// send current frame to output stream
src/noarch/Loveletter.cpp 305) void Loveletter::sendFrame()
src/noarch/Loveletter.cpp 306) {
src/noarch/Loveletter.cpp 307)   // frame available -> send it
src/noarch/Loveletter.cpp 308)   if (m_curValid) {
src/noarch/Loveletter.cpp 309)     stBlinkenFrame *pFrame =
src/noarch/Loveletter.cpp 310)       BlinkenMovieGetFrame(m_pCurMovie->m_pMovie, m_curFrame);
src/noarch/Loveletter.cpp 311)     m_fileOutStream.setFrame(pFrame);
src/noarch/Loveletter.cpp 312)   }
src/noarch/Loveletter.cpp 313)   // no frame available -> send this information
src/noarch/Loveletter.cpp 314)   else
src/noarch/Loveletter.cpp 315)     m_fileOutStream.setFrame(NULL);
src/noarch/Loveletter.cpp 316) }
src/noarch/Loveletter.cpp 317) 
src/noarch/Loveletter.cpp 318) /// close current operator connection
src/noarch/Loveletter.cpp 319) void Loveletter::closeOpConn()
src/noarch/Loveletter.cpp 320) {
src/noarch/Loveletter.cpp 321)   if (m_pOpConn) {
src/noarch/Loveletter.cpp 322)     m_pOpConn->close();
src/noarch/Loveletter.cpp 323)     m_pOpConn = NULL;
src/noarch/Loveletter.cpp 324)   }
src/noarch/Loveletter.cpp 325) 
src/noarch/Loveletter.cpp 326)   stopPlaying();
src/noarch/Loveletter.cpp 327) };
src/noarch/Loveletter.cpp 328) 
src/noarch/Loveletter.cpp 329) /// start playing movie (indictaed by m_movieNumber)
src/noarch/Loveletter.cpp 330) void Loveletter::startPlaying()
src/noarch/Loveletter.cpp 331) {
src/noarch/Loveletter.cpp 332)   // find movie and make it current
src/noarch/Loveletter.cpp 333)   MovieMap::const_iterator itMovie = m_movieMap.find(m_movieNumber);
src/noarch/Loveletter.cpp 334)   if (itMovie == m_movieMap.end())
src/noarch/Loveletter.cpp 335)     m_pCurMovie = NULL; // not found -> no movie
src/noarch/Loveletter.cpp 336)   else
src/noarch/Loveletter.cpp 337)     m_pCurMovie = itMovie->second;
src/noarch/Loveletter.cpp 338) 
src/noarch/Loveletter.cpp 339)   // start playing movie
src/noarch/Loveletter.cpp 340)   m_curChange = true;
src/noarch/Loveletter.cpp 341)   checkCurChanged();
Stefan Schuermans begin with new number after...

Stefan Schuermans authored 12 years ago

src/noarch/Loveletter.cpp 342) 
src/noarch/Loveletter.cpp 343)   // begin new movie number
src/noarch/Loveletter.cpp 344)   m_movieNumber.clear();