Advertisement
Guest User

Untitled

a guest
Jun 12th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 58.14 KB | None | 0 0
  1. /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
  2. /*
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 as
  5. * published by the Free Software Foundation;
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. *
  12. * You should have received a copy of the GNU General Public License
  13. * along with this program; if not, write to the Free Software
  14. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  15. *
  16. * Author: John Abraham <john.abraham.in@gmail.com>
  17. * Contributions: Eugene Kalishenko <ydginster@gmail.com> (Open Source and Linux Laboratory http://dev.osll.ru/)
  18. * Dmitrii Shakshin <d.shakshin@gmail.com> (Open Source and Linux Laboratory http://dev.osll.ru/)
  19. */
  20.  
  21. #include "common.h"
  22. #include "animatormode.h"
  23. #include "animatorscene.h"
  24. #include "animatorview.h"
  25. #include "animlink.h"
  26. #include "animresource.h"
  27. #include "statsmode.h"
  28. #include "animpropertybrowser.h"
  29. // #include "/home/pavel/repos2/ns-3-allinone/ns-3-dev/src/core/model/default-simulator-impl.h"
  30. #include "ns3/simulator.h"
  31. #include "ns3/default-simulator-impl.h"
  32.  
  33.  
  34.  
  35. namespace netanim
  36. {
  37.  
  38. NS_LOG_COMPONENT_DEFINE ("AnimatorMode");
  39.  
  40. AnimatorMode * pAnimatorMode = 0;
  41.  
  42. AnimatorMode::AnimatorMode ():
  43. m_version (0),
  44. m_playing (false),
  45. m_updateRateTimer (0),
  46. m_currentTime (0),
  47. m_currentZoomFactor (1),
  48. m_showWiressCircles (false),
  49. m_parsedMaxSimulationTime (5000),
  50. m_oldTimelineValue (0),
  51. m_simulationCompleted (false),
  52. m_showPacketMetaInfo (true),
  53. m_showPackets (true),
  54. m_fastForwarding (false),
  55. m_lastPacketEventTime (-1),
  56. m_pauseAtTime (65535),
  57. m_pauseAtTimeTriggered (false),
  58. m_backgroundExists (false),
  59. OnlineMode(false),
  60. m_parsingXMLDialog (0),
  61. m_transientDialog (0)
  62.  
  63. {
  64. animxmlparser = new Animxmlparser ("");
  65. init ();
  66. }
  67.  
  68. AnimatorMode::~AnimatorMode ()
  69. {
  70. delete animxmlparser;
  71. }
  72.  
  73. void
  74. AnimatorMode::init ()
  75. {
  76. m_state = APP_INIT;
  77. initControls ();
  78. initPropertyBrowser ();
  79. initToolbars ();
  80. m_mainSplitter = new QSplitter;
  81. m_mainSplitter->addWidget (m_verticalToolbar);
  82. m_mainSplitter->addWidget (AnimatorView::getInstance ());
  83. m_mainSplitter->addWidget (AnimPropertyBroswer::getInstance ());
  84.  
  85.  
  86. m_vLayout = new QVBoxLayout;
  87. m_vLayout->setSpacing (0);
  88. m_vLayout->addWidget (m_topToolBar);
  89. m_vLayout->addWidget (m_mainSplitter);
  90. m_vLayout->addWidget (m_bottomToolbar);
  91.  
  92. m_centralWidget = new QWidget;
  93. m_centralWidget->setLayout (m_vLayout);
  94. setWindowTitle ("NetAnim");
  95. setControlDefaults ();
  96. m_state = APP_START;
  97. m_verticalToolbar->adjustSize ();
  98. }
  99.  
  100. AnimatorMode *
  101. AnimatorMode::getInstance ()
  102. {
  103. if (!pAnimatorMode)
  104. {
  105. pAnimatorMode = new AnimatorMode;
  106. }
  107. return pAnimatorMode;
  108. }
  109.  
  110. Animxmlparser *
  111. AnimatorMode::getAnimxmlparser ()
  112. {
  113. return animxmlparser;
  114. }
  115.  
  116. void
  117. AnimatorMode::openPropertyBroswer ()
  118. {
  119. m_showPropertiesButton->setChecked (true);
  120. showPropertiesSlot ();
  121. }
  122.  
  123. void
  124. AnimatorMode::start ()
  125. {
  126. //clickTraceFileOpenSlot ();
  127.  
  128. }
  129.  
  130. void
  131. AnimatorMode::setFocus (bool focus)
  132. {
  133. //focus?qDebug (QString ("Animator Focus")):qDebug (QString ("Animator lost Focus"));
  134. Q_UNUSED (focus);
  135. }
  136.  
  137. void
  138. AnimatorMode::setControlDefaults ()
  139. {
  140. // Top Horizontal toolbar
  141.  
  142. initUpdateRate ();
  143. m_gridButton->setChecked (false);
  144. showGridLinesSlot ();
  145. showBatteryCapacitySlot ();
  146. m_gridLinesSpinBox->setValue (GRID_LINES_DEFAULT);
  147. m_nodeSizeComboBox->setCurrentIndex (NODE_SIZE_DEFAULT);
  148. m_showNodeIdButton->setChecked (true);
  149. m_showNodeSysIdButton->setChecked (false);
  150. showNodeIdSlot ();
  151. m_showPropertiesButton->setChecked (false);
  152. showPropertiesSlot ();
  153.  
  154. // Vertical toolbar
  155.  
  156. m_showMetaButton->setChecked (true);
  157. showMetaSlot ();
  158. m_showWirelessCirclesButton->setChecked (true);
  159. showWirelessCirclesSlot ();
  160.  
  161.  
  162. // Bottom toolbar/Status bar
  163.  
  164. m_parseProgressBar->setVisible (false);
  165.  
  166.  
  167. // Scene elements if any
  168.  
  169. AnimatorScene::getInstance ()->setSceneInfoText ("Please select an XML trace file using the file load button on the top-left corner", true);
  170.  
  171.  
  172. enableAllToolButtons (false);
  173. m_fileOpenButton->setEnabled (true);
  174.  
  175. }
  176.  
  177.  
  178. void
  179. AnimatorMode::setToolButtonVector ()
  180. {
  181. m_toolButtonVector.push_back (m_pauseAtEdit);
  182. m_toolButtonVector.push_back (m_playButton);
  183. m_toolButtonVector.push_back (m_updateRateSlider);
  184. m_toolButtonVector.push_back (m_fastRateLabel);
  185. m_toolButtonVector.push_back (m_slowRateLabel);
  186. m_toolButtonVector.push_back (m_gridButton);
  187. m_toolButtonVector.push_back (m_gridLinesLabel);
  188. m_toolButtonVector.push_back (m_gridLinesSpinBox);
  189. m_toolButtonVector.push_back (m_zoomInButton);
  190. m_toolButtonVector.push_back (m_zoomOutButton);
  191. m_toolButtonVector.push_back (m_nodeSizeLabel);
  192. m_toolButtonVector.push_back (m_nodeSizeComboBox);
  193. m_toolButtonVector.push_back (m_showNodeIdButton);
  194. m_toolButtonVector.push_back (m_qLcdNumber);
  195. m_toolButtonVector.push_back (m_blockPacketsButton);
  196. m_toolButtonVector.push_back (m_resetButton);
  197. m_toolButtonVector.push_back (m_showIpButton);
  198. m_toolButtonVector.push_back (m_showMacButton);
  199. m_toolButtonVector.push_back (m_simulationTimeSlider);
  200. m_toolButtonVector.push_back (m_showRoutePathButton);
  201. m_toolButtonVector.push_back (m_showPropertiesButton);
  202. m_toolButtonVector.push_back (m_stepButton);
  203. }
  204.  
  205. void
  206. AnimatorMode::setBottomToolbarWidgets ()
  207. {
  208. m_bottomToolbar->addWidget (m_bottomStatusLabel);
  209. m_bottomToolbar->addWidget (m_parseProgressBar);
  210. }
  211.  
  212. void
  213. AnimatorMode::setVerticalToolbarWidgets ()
  214. {
  215. m_verticalToolbar->addWidget (m_stepButton);
  216. m_verticalToolbar->addWidget (m_zoomInButton);
  217. m_verticalToolbar->addWidget (m_zoomOutButton);
  218. m_verticalToolbar->addSeparator ();
  219. m_verticalToolbar->addWidget (m_showNodeIdButton);
  220. m_verticalToolbar->addWidget (m_showNodeSysIdButton);
  221. m_verticalToolbar->addSeparator ();
  222. m_verticalToolbar->addWidget (m_showWirelessCirclesButton);
  223. m_verticalToolbar->addSeparator ();
  224. m_verticalToolbar->addWidget (m_blockPacketsButton);
  225. m_verticalToolbar->addWidget (m_resetButton);
  226. m_verticalToolbar->addWidget (m_showMetaButton);
  227. m_verticalToolbar->addWidget (m_showPropertiesButton);
  228. m_verticalToolbar->addWidget (m_batteryCapacityButton);
  229. m_verticalToolbar->addWidget (m_mousePositionButton);
  230. }
  231.  
  232. void
  233. AnimatorMode::setTopToolbarWidgets ()
  234. {
  235. m_topToolBar->addWidget (m_fileOpenButton);
  236. m_topToolBar->addWidget (m_reloadFileButton);
  237. m_topToolBar->addSeparator ();
  238. m_topToolBar->addWidget (m_playButton);
  239. m_topToolBar->addWidget (m_pauseAtLabel);
  240. m_topToolBar->addWidget (m_pauseAtEdit);
  241. m_topToolBar->addSeparator ();
  242. m_topToolBar->addWidget (m_fastRateLabel);
  243. m_topToolBar->addWidget (m_updateRateSlider);
  244. m_topToolBar->addWidget (m_slowRateLabel);
  245. m_topToolBar->addSeparator ();
  246. m_topToolBar->addWidget (m_timelineSliderLabel);
  247. m_topToolBar->addWidget (m_simulationTimeSlider);
  248. m_topToolBar->addWidget (m_qLcdNumber);
  249. m_topToolBar->addSeparator ();
  250. m_topToolBar->addWidget (m_gridButton);
  251. m_topToolBar->addWidget (m_gridLinesLabel);
  252. m_topToolBar->addWidget (m_gridLinesSpinBox);
  253. m_topToolBar->addSeparator ();
  254. m_topToolBar->addWidget (m_nodeSizeLabel);
  255. m_topToolBar->addWidget (m_nodeSizeComboBox);
  256. m_topToolBar->addSeparator ();
  257. m_topToolBar->addWidget (m_showIpButton);
  258. m_topToolBar->addWidget (m_showMacButton);
  259. //m_topToolBar->addWidget (m_showRoutePathButton);
  260. m_topToolBar->addWidget (m_testButton);
  261. }
  262.  
  263.  
  264.  
  265. void
  266. AnimatorMode::initPropertyBrowser ()
  267. {
  268. //m_propertyBrowser = new QtTreePropertyBrowser;
  269. }
  270.  
  271. void
  272. AnimatorMode::initControls ()
  273. {
  274. initLabels ();
  275. m_fileOpenButton = new QToolButton;
  276. m_fileOpenButton->setToolTip ("Open XML trace file");
  277. m_fileOpenButton->setIcon (QIcon (":/resources/animator_fileopen.svg"));
  278. connect (m_fileOpenButton,SIGNAL (clicked ()), this, SLOT (clickTraceFileOpenSlot ()));
  279.  
  280.  
  281. m_reloadFileButton = new QToolButton;
  282. m_reloadFileButton->setToolTip ("Reload a file with the same file name as the previous XML");
  283. m_reloadFileButton->setIcon (QIcon (":/resources/animator_reload.svg"));
  284. connect (m_reloadFileButton,SIGNAL (clicked ()), this, SLOT (reloadFileSlot ()));
  285.  
  286.  
  287. m_zoomInButton = new QToolButton;
  288. m_zoomInButton->setToolTip ("Zoom in");
  289. m_zoomInButton->setIcon (QIcon (":/resources/animator_zoomin.svg"));
  290. connect (m_zoomInButton, SIGNAL (clicked ()), this, SLOT (clickZoomInSlot ()));
  291.  
  292.  
  293. m_zoomOutButton = new QToolButton;
  294. m_zoomOutButton->setToolTip ("Zoom out");
  295. m_zoomOutButton->setIcon (QIcon (":/resources/animator_zoomout.svg"));
  296. connect (m_zoomOutButton, SIGNAL (clicked ()), this, SLOT (clickZoomOutSlot ()));
  297.  
  298.  
  299. m_gridButton = new QToolButton;
  300. m_gridButton->setIcon (QIcon (":/resources/animator_grid.svg"));
  301. m_gridButton->setCheckable (true);
  302. connect (m_gridButton, SIGNAL (clicked ()), this, SLOT (showGridLinesSlot ()));
  303.  
  304. m_gridLinesSpinBox = new QSpinBox;
  305. m_gridLinesSpinBox->setToolTip ("Set the number of grid lines");
  306. //m_gridLinesSpinBox->setRange (GRID_LINES_LOW, GRID_LINES_HIGH);
  307. //m_gridLinesSpinBox->setSingleStep (GRID_LINES_STEP);
  308. m_gridLinesSpinBox->setRange (GRID_LINES_LOW, GRID_LINES_HIGH);
  309. m_gridLinesSpinBox->setSingleStep (GRID_LINES_STEP);
  310. connect (m_gridLinesSpinBox, SIGNAL (valueChanged (int)), this, SLOT (updateGridLinesSlot (int)));
  311.  
  312. m_nodeSizeComboBox = new QComboBox;
  313. m_nodeSizeComboBox->setToolTip ("Node Size");
  314. QStringList nodeSizes;
  315.  
  316. nodeSizes << "0.1"
  317. << "0.2"
  318. << "0.4"
  319. << "0.5"
  320. << "0.6"
  321. << "0.8"
  322. << "1"
  323. << "2"
  324. << "3"
  325. << "4"
  326. << "5"
  327. << "6"
  328. << "9"
  329. << "10"
  330. << "20";
  331. m_nodeSizeComboBox->addItems (nodeSizes);
  332. connect (m_nodeSizeComboBox, SIGNAL (currentIndexChanged (QString)), this, SLOT (updateNodeSizeSlot (QString)));
  333.  
  334. m_testButton = new QToolButton;
  335. m_testButton->setText ("T");
  336. connect (m_testButton, SIGNAL (clicked ()), this, SLOT (testSlot ()));
  337.  
  338. m_showIpButton = new QToolButton;
  339. m_showIpButton->setText ("IP");
  340. m_showIpButton->setToolTip ("Show IPv4 Addresses");
  341. m_showIpButton->setCheckable (true);
  342. connect (m_showIpButton, SIGNAL (clicked ()), this, SLOT (showIpSlot ()));
  343.  
  344. m_showMacButton = new QToolButton;
  345. m_showMacButton->setText ("MAC");
  346. m_showMacButton->setToolTip ("Show Mac Addresses");
  347. m_showMacButton->setCheckable (true);
  348. connect (m_showMacButton, SIGNAL (clicked ()), this, SLOT (showMacSlot ()));
  349.  
  350. m_showRoutePathButton = new QToolButton;
  351. m_showRoutePathButton->setText ("Route-Path");
  352. m_showRoutePathButton->setToolTip ("Show Route Paths. [EXPERIMENTAL]");
  353. m_showRoutePathButton->setCheckable (true);
  354. connect (m_showRoutePathButton, SIGNAL (clicked ()), this, SLOT (showRoutePathSlot ()));
  355.  
  356.  
  357. m_showNodeIdButton = new QToolButton;
  358. m_showNodeIdButton->setIcon (QIcon (":/resources/animator_nodeid.svg"));
  359. m_showNodeIdButton->setToolTip ("Show Node Id");
  360. m_showNodeIdButton->setCheckable (true);
  361. connect (m_showNodeIdButton, SIGNAL (clicked ()), this, SLOT (showNodeIdSlot ()));
  362.  
  363. m_showNodeSysIdButton = new QToolButton;
  364. m_showNodeSysIdButton->setIcon (QIcon (":/resources/animator_nodesysid.svg"));
  365. m_showNodeSysIdButton->setToolTip ("Show Node System Id");
  366. m_showNodeSysIdButton->setCheckable (true);
  367. connect (m_showNodeSysIdButton, SIGNAL (clicked ()), this, SLOT (showNodeSysIdSlot ()));
  368.  
  369.  
  370. m_showPropertiesButton = new QToolButton;
  371. m_showPropertiesButton->setText ("Pr");
  372. m_showPropertiesButton->setToolTip ("Show Properties Tree");
  373. m_showPropertiesButton->setCheckable (true);
  374. m_showPropertiesButton->setIcon (QIcon (":/resources/animator_packetstats.svg"));
  375. connect (m_showPropertiesButton, SIGNAL (clicked ()), this, SLOT (showPropertiesSlot()));
  376.  
  377.  
  378. m_batteryCapacityButton = new QToolButton ();
  379. m_batteryCapacityButton->setCheckable (true);
  380. m_batteryCapacityButton->setIcon (QIcon (":/resources/battery_icon_4.png"));
  381. connect (m_batteryCapacityButton, SIGNAL (clicked ()), this, SLOT (showBatteryCapacitySlot ()));
  382.  
  383. m_playButton = new QToolButton;
  384. m_playButton->setIcon (QIcon (":/resources/animator_play.svg"));
  385. m_playButton->setToolTip ("Play Animation");
  386. connect (m_playButton, SIGNAL (clicked ()), this, SLOT (clickPlaySlot ()));
  387.  
  388.  
  389. m_pauseAtEdit = new QLineEdit;
  390. m_pauseAtEdit->setText (QString::number (65535));
  391. QDoubleValidator * doubleValidator = new QDoubleValidator (0);
  392. m_pauseAtEdit->setValidator (doubleValidator);
  393. m_pauseAtEdit->setToolTip ("Pause Simulation At Time");
  394. m_pauseAtEdit->setMaximumWidth (PAUSE_AT_EDIT_WITH);
  395. connect (m_pauseAtEdit, SIGNAL(editingFinished()), this, SLOT(pauseAtTimeSlot()));
  396.  
  397. m_updateRateSlider = new QSlider (Qt::Horizontal);
  398. m_updateRateSlider->setToolTip ("Animation update interval");
  399. m_updateRateSlider->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
  400. connect (m_updateRateSlider, SIGNAL (valueChanged (int)), this, SLOT (updateUpdateRateSlot (int)));
  401. //m_updateRateSlider->setRange (0, UPDATE_RATE_SLIDER_MAX);
  402. m_updateRateSlider->setRange (0, UPDATE_RATE_SLIDER_MAX);
  403.  
  404. m_simulationTimeSlider = new QSlider (Qt::Horizontal);
  405. m_simulationTimeSlider->setToolTip ("Set Simulation Time");
  406. m_simulationTimeSlider->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
  407. connect (m_simulationTimeSlider, SIGNAL (valueChanged (int)), this, SLOT (updateTimelineSlot (int)));
  408. //connect (m_simulationTimeSlider, SIGNAL(sliderReleased()), this, SLOT (updateTimelineSlot ()));
  409. //connect (m_simulationTimeSlider, SIGNAL(sliderPressed()), this, SLOT (simulationSliderPressedSlot ()));
  410. m_simulationTimeSlider->setMinimumWidth (SIMULATION_TIME_SLIDER_WIDTH);
  411. m_simulationTimeSlider->setTickPosition (QSlider::TicksBothSides);
  412.  
  413.  
  414.  
  415. m_qLcdNumber = new QLCDNumber;
  416. m_qLcdNumber->setAutoFillBackground (true);
  417. m_qLcdNumber->setToolTip ("Current simulation time");
  418. m_qLcdNumber->setStyleSheet ("QLCDNumber {background:black; color: black;}");
  419. m_qLcdNumber->setDigitCount (10);
  420.  
  421. m_showWirelessCirclesButton = new QToolButton;
  422. m_showWirelessCirclesButton->setIcon (QIcon (":/resources/animator_wirelesscircles.svg"));
  423. m_showWirelessCirclesButton->setToolTip ("Toggle Show Wireless Circles Animation");
  424. m_showWirelessCirclesButton->setCheckable (true);
  425. connect (m_showWirelessCirclesButton, SIGNAL (clicked ()), this, SLOT (showWirelessCirclesSlot ()));
  426.  
  427.  
  428. m_blockPacketsButton = new QToolButton;
  429. m_blockPacketsButton->setIcon (QIcon (":/resources/animator_showpackets.svg"));
  430. m_blockPacketsButton->setToolTip ("Show packets");
  431. connect (m_blockPacketsButton, SIGNAL (clicked ()), this, SLOT (showPacketSlot ()));
  432. m_blockPacketsButton->setCheckable (true);
  433.  
  434. m_resetButton = new QToolButton;
  435. m_resetButton->setText ("R");
  436. m_resetButton->setToolTip ("Reset Simulation to start");
  437. connect (m_resetButton, SIGNAL (clicked ()), this, SLOT (clickResetSlot ()));
  438.  
  439. m_showMetaButton = new QToolButton;
  440. m_showMetaButton->setText ("M");
  441. m_showMetaButton->setCheckable (true);
  442. m_showMetaButton->setToolTip ("Show Packet meta data");
  443. connect (m_showMetaButton, SIGNAL (clicked ()), this, SLOT (showMetaSlot ()));
  444.  
  445.  
  446. m_stepButton = new QToolButton;
  447. m_stepButton->setToolTip ("Step through the simulation");
  448. m_stepButton->setIcon (QIcon (":/resources/animator_step.svg"));
  449. connect (m_stepButton, SIGNAL (clicked()), this, SLOT (stepSlot()));
  450.  
  451. m_mousePositionButton = new QToolButton;
  452. m_mousePositionButton->setToolTip ("Show Mouse Position");
  453. m_mousePositionButton->setIcon (QIcon (":/resources/animator_mouseposition.png"));
  454. m_mousePositionButton->setCheckable (true);
  455. connect (m_mousePositionButton, SIGNAL(clicked()), this, SLOT (enableMousePositionSlot()));
  456.  
  457. m_parseProgressBar = new QProgressBar;
  458. //m_animationGroup = new QParallelAnimationGroup;
  459.  
  460. setLabelStyleSheet ();
  461. }
  462.  
  463. void
  464. AnimatorMode::initLabels ()
  465. {
  466. m_gridLinesLabel = new QLabel ("Lines");
  467. m_nodeSizeLabel = new QLabel ("Node Size");
  468. m_fastRateLabel = new QLabel ("fast");
  469. m_fastRateLabel->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
  470. m_fastRateLabel->setFixedWidth (UPDATE_RATE_LABEL_WIDTH);
  471. m_slowRateLabel = new QLabel ("slow");
  472. m_slowRateLabel->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
  473. m_slowRateLabel->setFixedWidth (UPDATE_RATE_LABEL_WIDTH);
  474. m_timelineSliderLabel = new QLabel ("Sim time");
  475. m_timelineSliderLabel->setToolTip ("Set current time");
  476. m_bottomStatusLabel = new QLabel;
  477. m_pauseAtLabel = new QLabel ("Pause At");
  478. m_pauseAtLabel->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
  479.  
  480. }
  481.  
  482. void
  483. AnimatorMode::initToolbars ()
  484. {
  485. m_topToolBar = new QToolBar;
  486. m_verticalToolbar = new QToolBar;
  487. m_bottomToolbar = new QToolBar;
  488.  
  489. QSize iconSize (ICON_WIDTH_DEFAULT, ICON_HEIGHT_DEFAULT);
  490. m_topToolBar->setIconSize (iconSize);
  491. m_verticalToolbar->setIconSize (iconSize);
  492. m_verticalToolbar->setOrientation (Qt::Vertical);
  493. m_verticalToolbar->setFixedWidth (VERTICAL_TOOLBAR_WIDTH_DEFAULT);
  494.  
  495. setTopToolbarWidgets ();
  496. setVerticalToolbarWidgets ();
  497. setBottomToolbarWidgets ();
  498. setToolButtonVector ();
  499. }
  500.  
  501. QWidget *
  502. AnimatorMode::getCentralWidget ()
  503. {
  504. return m_centralWidget;
  505. }
  506.  
  507. void
  508. AnimatorMode::setLabelStyleSheet ()
  509. {
  510. QString labelStyleSheet = "QLabel {color: black; font: 10px}";
  511. m_nodeSizeLabel->setStyleSheet (labelStyleSheet);
  512. m_gridLinesLabel->setStyleSheet (labelStyleSheet);
  513. m_fastRateLabel->setStyleSheet (labelStyleSheet);
  514. m_slowRateLabel->setStyleSheet (labelStyleSheet);
  515. m_timelineSliderLabel->setStyleSheet (labelStyleSheet);
  516. m_pauseAtLabel->setStyleSheet (labelStyleSheet);
  517.  
  518. }
  519.  
  520. void
  521. AnimatorMode::enableAllToolButtons (bool show)
  522. {
  523. for (int i = 0; i < m_toolButtonVector.size (); ++i)
  524. {
  525. m_toolButtonVector[i]->setEnabled (show);
  526. }
  527. }
  528.  
  529. QString
  530. AnimatorMode::getTabName ()
  531. {
  532. return "Animator";
  533. }
  534.  
  535. void
  536. AnimatorMode::systemReset ()
  537. {
  538. m_pauseAtTime = 65535;
  539. m_backgroundExists = false;
  540. m_state = SYSTEM_RESET_IN_PROGRESS;
  541. clickResetSlot ();
  542. purgeWiredPackets (true);
  543. purgeWirelessPackets ();
  544. setControlDefaults ();
  545. AnimatorView::getInstance ()->systemReset ();
  546. AnimatorScene::getInstance ()->systemReset ();
  547. AnimPropertyBroswer::getInstance ()->systemReset ();
  548. AnimNodeMgr::getInstance ()->systemReset ();
  549. for (TimeValue<AnimEvent *>::TimeValue_t::const_iterator i = m_events.Begin ();
  550. i != m_events.End ();
  551. ++i)
  552. {
  553. delete i->second;
  554. }
  555. m_events.systemReset ();
  556. m_state = SYSTEM_RESET_COMPLETE;
  557. }
  558.  
  559. void
  560. AnimatorMode::initUpdateRate ()
  561. {
  562. m_updateRates[0] = 0.000001;
  563. m_updateRates[1] = 0.000002;
  564. m_updateRates[2] = 0.000004;
  565. m_updateRates[3] = 0.000008;
  566. m_updateRates[4] = 0.000016;
  567. m_updateRates[5] = 0.000032;
  568. m_updateRates[6] = 0.000064;
  569. m_updateRates[7] = 0.000125;
  570. m_updateRates[8] = 0.000250;
  571. m_updateRates[9] = 0.000500;
  572. m_updateRates[10] = 0.001000;
  573. m_updateRates[11] = 0.002000;
  574. m_updateRates[12] = 0.004000;
  575. m_updateRates[13] = 0.008000;
  576. m_updateRates[14] = 0.016000;
  577. m_updateRates[15] = 0.032000;
  578. m_updateRates[16] = 0.064000;
  579. m_updateRates[17] = 0.125000;
  580. m_updateRates[18] = 0.250000;
  581. m_updateRates[19] = 0.500000;
  582. m_updateRates[20] = 1.000000;
  583. m_updateRates[21] = 2.000000;
  584.  
  585. m_updateRateSlider->setValue (UPDATE_RATE_SLIDER_DEFAULT);
  586. if (m_updateRateTimer)
  587. {
  588. delete m_updateRateTimer;
  589. }
  590. m_updateRateTimer = new QTimer (this);
  591. //m_updateRateTimer->setInterval (m_updateRates[UPDATE_RATE_SLIDER_DEFAULT] * 1000);
  592. m_updateRateTimer->setInterval (m_updateRates[UPDATE_RATE_SLIDER_DEFAULT] * 1000);
  593. connect (m_updateRateTimer, SIGNAL (timeout ()), this, SLOT (updateRateTimeoutSlot ()));
  594. }
  595.  
  596. qreal
  597. AnimatorMode::nodeSizeStringToValue (QString nodeSize)
  598. {
  599. if (nodeSize == "0.1")
  600. return 0.1;
  601. if (nodeSize == "0.2")
  602. return 0.2;
  603. if (nodeSize == "0.4")
  604. return 0.4;
  605. if (nodeSize == "0.5")
  606. return 0.5;
  607. if (nodeSize == "0.6")
  608. return 0.6;
  609. if (nodeSize == "0.8")
  610. return 0.8;
  611. if (nodeSize == "1")
  612. return 1;
  613. if (nodeSize == "2")
  614. return 2;
  615. if (nodeSize == "3")
  616. return 3;
  617. if (nodeSize == "4")
  618. return 4;
  619. if (nodeSize == "5")
  620. return 5;
  621. if (nodeSize == "6")
  622. return 6;
  623. if (nodeSize == "9")
  624. return 9;
  625. if (nodeSize == "10")
  626. return 10;
  627. if (nodeSize == "20")
  628. return 20;
  629. return 1;
  630. }
  631.  
  632.  
  633. void
  634. AnimatorMode::externalPauseEvent ()
  635. {
  636. if (m_state != PLAYING)
  637. {
  638. return;
  639. }
  640. if (m_playButton->isEnabled ())
  641. {
  642. clickPlaySlot ();
  643. }
  644. }
  645.  
  646. void
  647. AnimatorMode::showTransientDialog (bool show, QString msg)
  648. {
  649. if (m_transientDialog)
  650. {
  651. delete m_transientDialog;
  652. m_transientDialog = 0;
  653. }
  654. if (!show)
  655. return;
  656. m_transientDialog = new QDialog (this);
  657. m_transientDialog->setWindowTitle ("Please Wait");
  658. QVBoxLayout * vboxLayout = new QVBoxLayout;
  659. vboxLayout->addWidget (new QLabel (msg));
  660. m_transientDialog->setLayout (vboxLayout);
  661. if (show)
  662. {
  663. m_transientDialog->show ();
  664. m_transientDialog->raise ();
  665. m_transientDialog->activateWindow ();
  666. }
  667. }
  668. void
  669. AnimatorMode::showParsingXmlDialog (bool show)
  670. {
  671. if (!m_parsingXMLDialog)
  672. {
  673. m_parsingXMLDialog = new QDialog (this);
  674. m_parsingXMLDialog->setWindowTitle ("Parsing XML trace file");
  675. QVBoxLayout * vboxLayout = new QVBoxLayout;
  676. vboxLayout->addWidget (new QLabel ("Please Wait.Parsing XML trace file"));
  677. m_parsingXMLDialog->setLayout (vboxLayout);
  678. }
  679. if (show)
  680. {
  681. m_parsingXMLDialog->show ();
  682. m_parsingXMLDialog->raise ();
  683. m_parsingXMLDialog->activateWindow ();
  684. }
  685. else
  686. {
  687. m_parsingXMLDialog->hide ();
  688. }
  689. }
  690.  
  691. void
  692. AnimatorMode::fastForward (qreal t)
  693. {
  694. AnimatorModeState_t currentState = m_state;
  695. bool simTimeSliderEnabled = m_simulationTimeSlider->isEnabled ();
  696. m_simulationTimeSlider->setEnabled (false);
  697. externalPauseEvent ();
  698. showTransientDialog (true, "Please Wait. Parsing all events");
  699. m_playButton->setEnabled (false);
  700. //AnimatorScene::getInstance ()->invalidate ();
  701. while (m_currentTime <t)
  702. {
  703. if (m_state == SIMULATION_COMPLETE)
  704. break;
  705. //NS_LOG_DEBUG ("Fast Forwarding dispatch");
  706. dispatchEvents ();
  707. }
  708. m_fastForwarding = false;
  709. m_playButton->setEnabled (true);
  710. showTransientDialog (false);
  711. if (currentState == PLAYING)
  712. {
  713. clickPlaySlot ();
  714. }
  715. m_simulationTimeSlider->setEnabled (simTimeSliderEnabled);
  716. \
  717. }
  718.  
  719.  
  720. void
  721. AnimatorMode::reset ()
  722. {
  723. purgeWiredPackets ();
  724. purgeWirelessPackets ();
  725. m_updateRateTimer->stop ();
  726. m_events.rewind ();
  727. m_events.setCurrentTime (0);
  728. m_currentTime = 0;
  729. }
  730.  
  731. void
  732. AnimatorMode::setCurrentTime (qreal currentTime)
  733. {
  734. //NS_LOG_DEBUG ("Setting current time:" << currentTime);
  735. m_simulationTimeSlider->setValue (currentTime);
  736.  
  737. m_qLcdNumber->display (currentTime);
  738. fflush (stdout);
  739. if (currentTime < m_currentTime)
  740. reset ();
  741. //NS_LOG_DEBUG ("Events:" << m_events.toString());
  742. fastForward (currentTime);
  743. if (m_playing)
  744. m_updateRateTimer->start ();
  745. m_simulationTimeSlider->setValue (currentTime);
  746. m_events.setCurrentTime (currentTime);
  747. m_currentTime = currentTime;
  748.  
  749. }
  750.  
  751. TimeValue<AnimEvent*>*
  752. AnimatorMode::getEvents ()
  753. {
  754. return &m_events;
  755. }
  756.  
  757.  
  758. qreal
  759. AnimatorMode::getFirstPacketTime ()
  760. {
  761. return m_firstPacketEventTime;
  762. }
  763.  
  764. qreal
  765. AnimatorMode::getThousandthPacketTime ()
  766. {
  767. return m_thousandthPacketTime;
  768. }
  769.  
  770. qreal
  771. AnimatorMode::getLastPacketEventTime ()
  772. {
  773. return m_lastPacketEventTime;
  774. }
  775.  
  776. void
  777. AnimatorMode::setProgressBarRange (uint64_t rxCount)
  778. {
  779. m_parseProgressBar->setMaximum (rxCount);
  780. m_parseProgressBar->setVisible (true);
  781. }
  782.  
  783. void
  784. AnimatorMode::setMaxSimulationTime (double maxTime)
  785. {
  786. m_parsedMaxSimulationTime = maxTime;
  787. m_simulationTimeSlider->setRange (0, m_parsedMaxSimulationTime);
  788. m_simulationTimeSlider->setTickInterval (1);
  789. }
  790.  
  791. void
  792. AnimatorMode::addAnimEvent (qreal t, AnimEvent * event)
  793. {
  794. eventObtained = true;
  795. nextTs = std::min (nextTs, t);
  796. // if (nextTs > t)
  797. // {
  798. // nextTs = t;
  799. // }
  800. m_events.add (t, event);
  801. }
  802.  
  803. bool
  804. AnimatorMode::parseOnline()
  805. {
  806. // showParsingXmlDialog (true);
  807. // m_rxCount = parser.getRxCount ();
  808. // m_rxCount = 0; //??
  809. // setProgressBarRange (m_rxCount);
  810. // parser.doParse ();
  811. m_lastPacketEventTime = animxmlparser->getLastPacketEventTime ();
  812. m_thousandthPacketTime = animxmlparser->getThousandthPacketTime ();
  813. m_firstPacketEventTime = animxmlparser->getFirstPacketTime ();
  814. m_minPoint = animxmlparser->getMinPoint ();
  815. m_maxPoint = animxmlparser->getMaxPoint ();
  816. // showParsingXmlDialog (false);
  817. // setMaxSimulationTime (animxmlparser->getMaxSimulationTime ());
  818. AnimatorScene::getInstance ()->setSimulationBoundaries (m_minPoint, m_maxPoint);
  819. if (m_backgroundExists)
  820. {
  821. AnimatorScene::getInstance ()->setBackgroundImage (m_backgroundImageProperties.fileName,
  822. m_backgroundImageProperties.x,
  823. m_backgroundImageProperties.y,
  824. m_backgroundImageProperties.scaleX,
  825. m_backgroundImageProperties.scaleY,
  826. m_backgroundImageProperties.opacity);
  827. }
  828. // postParse ();
  829.  
  830. enableAllToolButtons (true);
  831. m_showNodeIdButton->setChecked (true);
  832. showNodeIdSlot ();
  833. m_gridButton->setChecked (true);
  834. showGridLinesSlot ();
  835. AnimatorView::getInstance ()->postParse ();
  836. //AnimatorScene::getInstance ()->postParse ();
  837. //AnimatorScene::getInstance ()->setNodeSize (nodeSizeStringToValue (m_nodeSizeComboBox->currentText ()));
  838. update ();
  839. m_bottomStatusLabel->setText ("Parsing complete:Click Play");
  840. m_parseProgressBar->reset ();
  841.  
  842. //m_showMetaButton->setChecked (AnimPktMgr::getInstance ()->getMetaInfoSeen ());
  843. resetBackground ();
  844.  
  845. dispatchEvents ();
  846. m_gridButton->setChecked (false);
  847. showGridLinesSlot ();
  848. m_gridButton->setChecked (true);
  849. showGridLinesSlot ();
  850. AnimatorView::getInstance ()->postParse ();
  851. AnimPropertyBroswer::getInstance ()->postParse ();
  852. return true;
  853. }
  854.  
  855. bool
  856. AnimatorMode::parseXMLTraceFile (QString traceFileName)
  857. {
  858. // NS_LOG_DEBUG ("parsing File:" << traceFileName.toAscii ().data ());
  859. m_rxCount = 0;
  860. Animxmlparser parser (traceFileName);
  861. if (!parser.isFileValid ())
  862. {
  863. showPopup ("Trace file is invalid");
  864. m_fileOpenButton->setEnabled (true);
  865. return false;
  866. }
  867. preParse ();
  868. showParsingXmlDialog (true);
  869. parser.doParse ();
  870. m_rxCount = parser.getRxCount ();
  871. setProgressBarRange (m_rxCount);
  872. m_lastPacketEventTime = parser.getLastPacketEventTime ();
  873. m_thousandthPacketTime = parser.getThousandthPacketTime ();
  874. m_firstPacketEventTime = parser.getFirstPacketTime ();
  875. m_minPoint = parser.getMinPoint ();
  876. m_maxPoint = parser.getMaxPoint ();
  877. showParsingXmlDialog (false);
  878. setMaxSimulationTime (parser.getMaxSimulationTime ());
  879. AnimatorScene::getInstance ()->setSimulationBoundaries (m_minPoint, m_maxPoint);
  880. if (m_backgroundExists)
  881. {
  882. AnimatorScene::getInstance ()->setBackgroundImage (m_backgroundImageProperties.fileName,
  883. m_backgroundImageProperties.x,
  884. m_backgroundImageProperties.y,
  885. m_backgroundImageProperties.scaleX,
  886. m_backgroundImageProperties.scaleY,
  887. m_backgroundImageProperties.opacity);
  888. }
  889. postParse ();
  890.  
  891. return true;
  892. }
  893.  
  894. void
  895. AnimatorMode::preParse ()
  896. {
  897. //AnimatorScene::getInstance ()->preParse ();
  898. //AnimatorScene::getInstance ()->preParse ();
  899. }
  900.  
  901.  
  902.  
  903. void
  904. AnimatorMode::postParse ()
  905. {
  906. enableAllToolButtons (true);
  907. m_showNodeIdButton->setChecked (true);
  908. showNodeIdSlot ();
  909. m_gridButton->setChecked (true);
  910. showGridLinesSlot ();
  911. AnimatorView::getInstance ()->postParse ();
  912. //AnimatorScene::getInstance ()->postParse ();
  913. //AnimatorScene::getInstance ()->setNodeSize (nodeSizeStringToValue (m_nodeSizeComboBox->currentText ()));
  914. update ();
  915. m_bottomStatusLabel->setText ("Parsing complete:Click Play");
  916. m_parseProgressBar->reset ();
  917.  
  918. //m_showMetaButton->setChecked (AnimPktMgr::getInstance ()->getMetaInfoSeen ());
  919. resetBackground ();
  920.  
  921. dispatchEvents ();
  922. m_gridButton->setChecked (false);
  923. showGridLinesSlot ();
  924. m_gridButton->setChecked (true);
  925. showGridLinesSlot ();
  926. AnimatorView::getInstance ()->postParse ();
  927. AnimPropertyBroswer::getInstance ()->postParse ();
  928.  
  929. }
  930.  
  931. void
  932. AnimatorMode::setVersion (double version)
  933. {
  934. m_version = version;
  935. }
  936.  
  937. qreal
  938. AnimatorMode::getCurrentNodeSize ()
  939. {
  940. return nodeSizeStringToValue (m_nodeSizeComboBox->currentText ());
  941. }
  942.  
  943. QGraphicsPixmapItem *
  944. AnimatorMode::getBackground ()
  945. {
  946. //return m_background;
  947. return 0;
  948. }
  949.  
  950. bool
  951. AnimatorMode::keepAppResponsive ()
  952. {
  953. if (m_appResponsiveTimer.elapsed () > APP_RESPONSIVE_INTERVAL)
  954. {
  955. QApplication::processEvents ();
  956. m_appResponsiveTimer.restart ();
  957. return true;
  958. }
  959. return false;
  960. }
  961.  
  962. void
  963. AnimatorMode::resetBackground ()
  964. {
  965. /*if (!m_background)
  966. return;
  967. m_background->setZValue (-1000);
  968. m_background->setPos (0, 0);
  969. m_background->setFlags (QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemIsSelectable);
  970.  
  971.  
  972. // Modify below as required
  973. m_background->scale (0.3, 0.3);
  974. m_background->scale (0.5, 1);*/
  975. }
  976.  
  977. void
  978. AnimatorMode::setParsingCount (uint64_t parsingCount)
  979. {
  980. m_bottomStatusLabel->setText ("Parsing Count:" + QString::number (parsingCount) + "/" + QString::number (m_rxCount));
  981. m_parseProgressBar->setValue (parsingCount);
  982. }
  983.  
  984. QPropertyAnimation *
  985. AnimatorMode::getButtonAnimation (QToolButton * toolButton)
  986. {
  987. QPropertyAnimation * propAnimation = new QPropertyAnimation (m_reloadFileButton, "geometry");
  988.  
  989. QRectF currentRect = toolButton->geometry ();
  990. qreal width = currentRect.width ();
  991. QRectF expandedRect = QRectF (currentRect.left ()- width, currentRect.top () - width,
  992. currentRect.right () + width, currentRect.bottom () + width);
  993.  
  994. propAnimation->setStartValue (expandedRect);
  995. propAnimation->setEndValue (currentRect);
  996. propAnimation->setEasingCurve (QEasingCurve::OutInQuad);
  997. propAnimation->setDuration (2000);
  998. return propAnimation;
  999.  
  1000. }
  1001.  
  1002. void
  1003. AnimatorMode::doSimulationCompleted ()
  1004. {
  1005. m_updateRateTimer->stop ();
  1006. m_playButton->setEnabled (false);
  1007. m_simulationTimeSlider->setEnabled (false);
  1008. QApplication::processEvents ();
  1009. //clickResetSlot ();
  1010. m_events.rewind ();
  1011. //setCurrentTime (0);
  1012. m_simulationTimeSlider->setEnabled (false);
  1013. //NS_LOG_DEBUG ("Simulation Completed");
  1014. m_bottomStatusLabel->setText ("Simulation Completed");
  1015.  
  1016. if (!OnlineMode)
  1017. {
  1018. m_buttonAnimationGroup = new QParallelAnimationGroup;
  1019. //m_buttonAnimationGroup->addAnimation (getButtonAnimation (m_fileOpenButton));
  1020. m_buttonAnimationGroup->addAnimation (getButtonAnimation (m_reloadFileButton));
  1021.  
  1022. m_buttonAnimationGroup->start ();
  1023.  
  1024. connect (m_buttonAnimationGroup,
  1025. SIGNAL (finished ()),
  1026. this,
  1027. SLOT (buttonAnimationGroupFinishedSlot ()));
  1028. }
  1029. }
  1030. bool
  1031. AnimatorMode::checkSimulationCompleted ()
  1032. {
  1033. return m_state == SIMULATION_COMPLETE;
  1034. }
  1035.  
  1036. void
  1037. AnimatorMode::timerCleanup ()
  1038. {
  1039. m_updateRateTimer->stop ();
  1040. setCurrentTime (0);
  1041. m_qLcdNumber->display (0);
  1042. fflush (stdout);
  1043. }
  1044.  
  1045. void
  1046. AnimatorMode::showPopup (QString msg)
  1047. {
  1048. if (m_state == APP_INIT)
  1049. {
  1050. return;
  1051. }
  1052. QMessageBox msgBox;
  1053. msgBox.setText (msg);
  1054. msgBox.exec ();
  1055. }
  1056.  
  1057. void
  1058. AnimatorMode::showAnimatorView (bool show)
  1059. {
  1060. if (m_state != APP_START)
  1061. {
  1062. enableAllToolButtons (show);
  1063. }
  1064. AnimatorView::getInstance ()->setVisible (show);
  1065. }
  1066.  
  1067. void
  1068. AnimatorMode::showPackets (bool show)
  1069. {
  1070. m_blockPacketsButton->setChecked (!show);
  1071. showPacketSlot ();
  1072. }
  1073.  
  1074.  
  1075. // Slots
  1076. void
  1077. AnimatorMode::showMetaSlot ()
  1078. {
  1079. m_showPacketMetaInfo = m_showMetaButton->isChecked ();
  1080.  
  1081. }
  1082.  
  1083. void
  1084. AnimatorMode::showPacketSlot ()
  1085. {
  1086. m_showPackets = !m_blockPacketsButton->isChecked ();
  1087. }
  1088.  
  1089.  
  1090. void
  1091. AnimatorMode::clickResetSlot ()
  1092. {
  1093. timerCleanup ();
  1094. m_playing = false;
  1095. m_playButton->setIcon (QIcon (":/resources/animator_play.svg"));
  1096. m_playButton->setToolTip ("Play Animation");
  1097. m_playButton->setEnabled (true);
  1098. //AnimatorScene::getInstance ()->purgeNodeTrajectories ();
  1099. //AnimatorScene::getInstance ()->purgeAnimatedNodes ();
  1100. AnimatorScene::getInstance ()->purgeAnimatedPackets ();
  1101. setCurrentTime (0);
  1102.  
  1103. }
  1104.  
  1105. void
  1106. AnimatorMode::showBatteryCapacitySlot()
  1107. {
  1108. if(m_batteryCapacityButton->isChecked ())
  1109. {
  1110. m_batteryCapacityButton->setToolTip("Don't show remaining capacity");
  1111. }
  1112. else
  1113. {
  1114. m_batteryCapacityButton->setToolTip("Show remaining capacity");
  1115. }
  1116. AnimNodeMgr::getInstance ()->showRemainingBatteryCapacity (m_batteryCapacityButton->isChecked ());
  1117. }
  1118.  
  1119.  
  1120. void
  1121. AnimatorMode::updateTimelineSlot (int value)
  1122. {
  1123. purgeWiredPackets ();
  1124. purgeWirelessPackets ();
  1125.  
  1126. //NS_LOG_DEBUG ("Updating Timeline:" << value);
  1127. if (value == m_oldTimelineValue)
  1128. return;
  1129. m_oldTimelineValue = value;
  1130. m_fastForwarding = true;
  1131. setCurrentTime (value);
  1132. if (m_showPropertiesButton->isChecked ())
  1133. {
  1134. AnimPropertyBroswer::getInstance ()->refresh ();
  1135. }
  1136.  
  1137. }
  1138.  
  1139. void
  1140. AnimatorMode::simulationSliderPressedSlot ()
  1141. {
  1142. //externalPauseEvent ();
  1143. }
  1144.  
  1145.  
  1146. void
  1147. AnimatorMode::updateTimelineSlot ()
  1148. {
  1149. purgeWiredPackets ();
  1150. purgeWirelessPackets ();
  1151. int value = m_simulationTimeSlider->value ();
  1152. //NS_LOG_DEBUG ("Updating Timeline:" << value);
  1153. if (value == m_oldTimelineValue)
  1154. return;
  1155. m_oldTimelineValue = value;
  1156. m_fastForwarding = true;
  1157. setCurrentTime (value);
  1158. if (m_showPropertiesButton->isChecked ())
  1159. {
  1160. AnimPropertyBroswer::getInstance ()->refresh ();
  1161. }
  1162. }
  1163.  
  1164. void
  1165. AnimatorMode::showNodePositionStatsSlot ()
  1166. {
  1167.  
  1168. }
  1169.  
  1170. void
  1171. AnimatorMode::showPropertiesSlot ()
  1172. {
  1173. if (m_showPropertiesButton->isChecked ())
  1174. {
  1175. externalPauseEvent ();
  1176. m_mousePositionButton->setChecked (true);
  1177. enableMousePositionSlot ();
  1178. }
  1179. AnimPropertyBroswer::getInstance ()->show (m_showPropertiesButton->isChecked ());
  1180.  
  1181. }
  1182.  
  1183. void
  1184. AnimatorMode::pauseAtTimeSlot ()
  1185. {
  1186. m_pauseAtTime = m_pauseAtEdit->text ().toDouble ();
  1187. }
  1188.  
  1189.  
  1190. void
  1191. AnimatorMode::enableMousePositionSlot ()
  1192. {
  1193. AnimatorScene::getInstance ()->enableMousePositionLabel (m_mousePositionButton->isChecked ());
  1194. }
  1195.  
  1196. void
  1197. AnimatorMode::stepSlot ()
  1198. {
  1199. if (!OnlineMode)
  1200. {
  1201. externalPauseEvent ();
  1202. dispatchEvents ();
  1203. }
  1204. }
  1205.  
  1206. void
  1207. AnimatorMode::showRoutePathSlot ()
  1208. {
  1209. }
  1210.  
  1211. void
  1212. AnimatorMode::showPacketStatsSlot ()
  1213. {
  1214.  
  1215. }
  1216.  
  1217. void
  1218. AnimatorMode::showWirelessCirclesSlot ()
  1219. {
  1220. m_showWiressCircles = m_showWirelessCirclesButton->isChecked ();
  1221. }
  1222.  
  1223. void
  1224. AnimatorMode::clickZoomInSlot ()
  1225. {
  1226. AnimatorView::getInstance ()->setCurrentZoomFactor (++m_currentZoomFactor);
  1227.  
  1228. }
  1229.  
  1230. void
  1231. AnimatorMode::clickZoomOutSlot ()
  1232. {
  1233. if (m_currentZoomFactor == 1)
  1234. return;
  1235. AnimatorView::getInstance ()->setCurrentZoomFactor (--m_currentZoomFactor);
  1236. }
  1237.  
  1238.  
  1239. void
  1240. AnimatorMode::setSimulationCompleted ()
  1241. {
  1242. m_simulationCompleted = true;
  1243. m_state = SIMULATION_COMPLETE;
  1244. doSimulationCompleted ();
  1245.  
  1246. }
  1247.  
  1248. void
  1249. AnimatorMode::removeWiredPacket (AnimPacket *animPacket)
  1250. {
  1251. m_wiredPacketsToAnimate.erase (animPacket);
  1252. AnimatorScene::getInstance ()->removeWiredPacket (animPacket);
  1253. //TODO
  1254. //delete animPacket;
  1255. animPacket = 0;
  1256. }
  1257.  
  1258.  
  1259. void
  1260. AnimatorMode::purgeWiredPackets (bool systemReset)
  1261. {
  1262. for (std::map <AnimPacket *, AnimPacket *>::const_iterator i = m_wiredPacketsToAnimate.begin ();
  1263. i != m_wiredPacketsToAnimate.end ();
  1264. ++i)
  1265. {
  1266. AnimPacket * animPacket = i->first;
  1267. if (!systemReset)
  1268. AnimatorScene::getInstance ()->removeWiredPacket (animPacket);
  1269. //delete animPacket;
  1270. animPacket = 0;
  1271. }
  1272. m_wiredPacketsToAnimate.clear ();
  1273. }
  1274.  
  1275.  
  1276. void
  1277. AnimatorMode::purgeWirelessPackets ()
  1278. {
  1279. AnimatorScene::getInstance ()->purgeWirelessPackets ();
  1280. m_wirelessPacketsToAnimate.clear ();
  1281. AnimatorScene::getInstance ()->invalidate ();
  1282. }
  1283.  
  1284.  
  1285. void
  1286. AnimatorMode::purgeAnimatedNodes ()
  1287. {
  1288.  
  1289. }
  1290.  
  1291. void
  1292. AnimatorMode::updateRateTimeoutSlot ()
  1293. {
  1294. // freopen("out.txt","w", stderr);
  1295. m_updateRateTimer->stop ();
  1296. if (m_currentTime >= m_pauseAtTime)
  1297. {
  1298. externalPauseEvent ();
  1299. m_pauseAtTimeTriggered = true;
  1300. m_pauseAtTime = 65535;
  1301. return;
  1302. }
  1303. if (m_state == SIMULATION_COMPLETE)
  1304. return;
  1305. if (m_playing)
  1306. {
  1307. if (!OnlineMode)
  1308. {
  1309. dispatchEvents ();
  1310. }
  1311. else
  1312. {
  1313. TimeValue<AnimEvent*>::TimeValueResult_t result;
  1314. m_events.getNextGOOD (result);
  1315. if (result == m_events.GOOD)
  1316. {
  1317. eventObtained = false;
  1318. std::cout << "in";
  1319. NS_LOG_DEBUG("update1 " << (qreal)ns3::DefaultSimulatorImpl::getNextTs () / 1e9);
  1320. ns3::Simulator::Run ();
  1321. std::cout << "out";
  1322. NS_LOG_DEBUG("update2 " << (qreal)ns3::DefaultSimulatorImpl::getNextTs () / 1e9);
  1323. if (eventObtained)
  1324. {
  1325. setCurrentTime (nextTs);
  1326. dispatchEvents ();
  1327. }
  1328.  
  1329. }
  1330. else
  1331. {
  1332. NS_LOG_DEBUG("IM AT DISPEVENTS");
  1333. dispatchEvents ();
  1334. }
  1335. if (ns3::Simulator::IsFinished ())
  1336. {
  1337. setSimulationCompleted ();
  1338. return;
  1339. }
  1340. }
  1341.  
  1342. disconnect (m_simulationTimeSlider, SIGNAL (valueChanged (int)), this, SLOT (updateTimelineSlot (int)));
  1343. m_simulationTimeSlider->setValue (m_currentTime);
  1344. connect (m_simulationTimeSlider, SIGNAL (valueChanged (int)), this, SLOT (updateTimelineSlot (int)));
  1345. m_qLcdNumber->display (m_currentTime);
  1346. keepAppResponsive ();
  1347. if (m_showPropertiesButton->isChecked ())
  1348. {
  1349. AnimPropertyBroswer::getInstance ()->refresh ();
  1350. }
  1351. m_updateRateTimer->start ();
  1352.  
  1353. }
  1354. }
  1355.  
  1356. void
  1357. AnimatorMode::updateUpdateRateSlot (int value)
  1358. {
  1359. m_currentUpdateRate = m_updateRates[value];
  1360. if (m_updateRateTimer)
  1361. {
  1362. m_updateRateTimer->setInterval (m_currentUpdateRate * 1000);
  1363. }
  1364. }
  1365.  
  1366.  
  1367. void
  1368. AnimatorMode::reloadFileSlot ()
  1369. {
  1370. if (m_traceFileName == "")
  1371. {
  1372. showPopup ("FileName unknown");
  1373. return;
  1374. }
  1375.  
  1376. StatsMode::getInstance ()->systemReset ();
  1377. systemReset ();
  1378. parseXMLTraceFile (m_traceFileName);
  1379. StatsMode::getInstance ()->systemReset ();
  1380.  
  1381. QApplication::processEvents ();
  1382. AnimatorScene::getInstance ()->setSceneInfoText ("Please select an XML trace file using the file load button on the top-left corner", false);
  1383.  
  1384. }
  1385. void
  1386. AnimatorMode::clickTraceFileOpenSlot ()
  1387. {
  1388. if (m_showPropertiesButton->isChecked ())
  1389. {
  1390. showPopup ("Please close the properties panel first");
  1391. return;
  1392. }
  1393. StatsMode::getInstance ()->systemReset ();
  1394. systemReset ();
  1395. QFileDialog fileDialog;
  1396. fileDialog.setFileMode (QFileDialog::ExistingFiles);
  1397.  
  1398. QString traceFileName = "";
  1399. m_traceFileName = "";
  1400. if (fileDialog.exec ())
  1401. {
  1402. traceFileName = fileDialog.selectedFiles ().at (0);
  1403. if (traceFileName != "")
  1404. {
  1405. m_traceFileName = traceFileName;
  1406. if (parseXMLTraceFile (traceFileName))
  1407. m_fileOpenButton->setEnabled (true);
  1408. }
  1409. }
  1410.  
  1411. StatsMode::getInstance ()->systemReset ();
  1412. QApplication::processEvents ();
  1413. AnimatorScene::getInstance ()->setSceneInfoText ("Please select an XML trace file using the file load button on the top-left corner", false);
  1414.  
  1415. }
  1416.  
  1417.  
  1418. void
  1419. AnimatorMode::clickPlaySlot ()
  1420. {
  1421. m_playing = !m_playing;
  1422. if (m_playing)
  1423. {
  1424. if (m_pauseAtTimeTriggered)
  1425. {
  1426. m_pauseAtEdit->setText (QString::number (65535));
  1427. m_pauseAtTimeTriggered = false;
  1428. }
  1429. if (m_state == SIMULATION_COMPLETE)
  1430. {
  1431. reset ();
  1432. }
  1433. m_state = PLAYING;
  1434. m_bottomStatusLabel->setText ("Playing");
  1435. if (m_simulationCompleted)
  1436. {
  1437. m_simulationCompleted = false;
  1438. }
  1439. m_appResponsiveTimer.restart ();
  1440. m_playButton->setIcon (QIcon (":/resources/animator_pause.svg"));
  1441. m_playButton->setToolTip ("Pause Animation");
  1442. m_updateRateTimer->start ();
  1443.  
  1444. }
  1445. else
  1446. {
  1447. m_state = PAUSING;
  1448. m_bottomStatusLabel->setText ("Not Playing");
  1449. m_playButton->setIcon (QIcon (":/resources/animator_play.svg"));
  1450. m_playButton->setToolTip ("Play Animation");
  1451. m_updateRateTimer->stop ();
  1452. }
  1453. }
  1454.  
  1455. void
  1456. AnimatorMode::dispatchEvents ()
  1457. {
  1458. //NS_LOG_DEBUG ("Dispatch events");
  1459. // ns3::DefaultSimulatorImpl& ds = dynamic_cast<ns3::DefaultSimulatorImpl &>((*ns3::Simulator::GetImplementation()));
  1460. // ds.context;
  1461. m_updateRateSlider->setEnabled (false);
  1462. m_simulationTimeSlider->setEnabled (false);
  1463.  
  1464. TimeValue<AnimEvent*>::TimeValueResult_t result;
  1465. TimeValue<AnimEvent*>::TimeValueIteratorPair_t pp = m_events.getNext (result);
  1466. //NS_LOG_DEBUG ("Now:" << pp.first->first);
  1467. purgeWirelessPackets ();
  1468. if (result == m_events.GOOD)
  1469. {
  1470. if (OnlineMode)
  1471. {
  1472. if (pp.first->first >= (qreal)ns3::DefaultSimulatorImpl::getNextTs () / 1e9)
  1473. {
  1474. nextTs = pp.first->first;
  1475. return;
  1476. // NS_LOG_DEBUG("1");
  1477. }
  1478. NS_LOG_DEBUG("Time of pp" << pp.first->first);
  1479. NS_LOG_DEBUG("Time of DefaultSimulatorImpl" << (qreal)ns3::DefaultSimulatorImpl::getNextTs () / 1e9);
  1480. }
  1481. //setCurrentTime (pp.first->first);
  1482. m_currentTime = pp.first->first;
  1483. //if (m_currentTime > 0)
  1484. // {
  1485. // m_simulationTimeSlider->setEnabled (true);
  1486. // }
  1487. m_qLcdNumber->display (m_currentTime);
  1488.  
  1489.  
  1490. for (TimeValue<AnimEvent*>::TimeValue_t::const_iterator j = pp.first;
  1491. j != pp.second;
  1492. ++j)
  1493. {
  1494. //NS_LOG_DEBUG ("fbTx:" << j->first);
  1495. AnimEvent * ev = j->second;
  1496. NS_LOG_DEBUG("Type" << ev->m_type);
  1497. switch (ev->m_type)
  1498. {
  1499. case AnimEvent::ADD_NODE_EVENT:
  1500. {
  1501. AnimNodeAddEvent * addEvent = static_cast<AnimNodeAddEvent *> (ev);
  1502. AnimNode * animNode = 0;
  1503. if (!m_fastForwarding)
  1504. {
  1505. uint32_t nodeId = addEvent->m_nodeId;
  1506. if (!AnimNodeMgr::getInstance ()->getNode (nodeId))
  1507. {
  1508. animNode = AnimNodeMgr::getInstance ()->add (addEvent->m_nodeId,
  1509. addEvent ->m_nodeSysId,
  1510. addEvent->m_x,
  1511. addEvent->m_y,
  1512. addEvent->m_nodeDescription);
  1513. AnimatorScene::getInstance ()->addNode (animNode);
  1514. }
  1515. AnimatorView::getInstance ()->postParse ();
  1516. }
  1517. else
  1518. {
  1519. animNode = AnimNodeMgr::getInstance ()->getNode (addEvent->m_nodeId);
  1520. }
  1521. if (animNode)
  1522. {
  1523. setNodePos (animNode, addEvent->m_x, addEvent->m_y);
  1524. }
  1525. break;
  1526. }
  1527. case AnimEvent::CREATE_NODE_COUNTER_EVENT:
  1528. {
  1529. AnimCreateNodeCounterEvent * createEvent = static_cast<AnimCreateNodeCounterEvent *> (j->second);
  1530. if (createEvent->m_counterType == AnimCreateNodeCounterEvent::DOUBLE_COUNTER)
  1531. AnimNodeMgr::getInstance ()->addNodeCounterDouble (createEvent->m_counterId, createEvent->m_counterName);
  1532. else if (createEvent->m_counterType == AnimCreateNodeCounterEvent::UINT32_COUNTER)
  1533. AnimNodeMgr::getInstance ()->addNodeCounterUint32 (createEvent->m_counterId, createEvent->m_counterName);
  1534. break;
  1535. }
  1536. case AnimEvent::IP_EVENT:
  1537. {
  1538. AnimIpEvent * ipEvent = static_cast<AnimIpEvent *> (j->second);
  1539. for (QVector<QString>::const_iterator i = ipEvent->m_ipv4Addresses.begin ();
  1540. i != ipEvent->m_ipv4Addresses.end ();
  1541. ++i)
  1542. {
  1543. AnimNodeMgr::getInstance ()->getNode (ipEvent->m_nodeId)->addIpv4Address (*i);
  1544. }
  1545. break;
  1546. }
  1547. case AnimEvent::IPV6_EVENT:
  1548. {
  1549. AnimIpv6Event * ipv6Event = static_cast<AnimIpv6Event *> (j->second);
  1550. for (QVector<QString>::const_iterator i = ipv6Event->m_ipv6Addresses.begin ();
  1551. i != ipv6Event->m_ipv6Addresses.end ();
  1552. ++i)
  1553. {
  1554. AnimNodeMgr::getInstance ()->getNode (ipv6Event->m_nodeId)->addIpv6Address (*i);
  1555. }
  1556. break;
  1557. }
  1558. case AnimEvent::UPDATE_NODE_COUNTER_EVENT:
  1559. {
  1560. AnimNodeCounterUpdateEvent * counterEvent = static_cast<AnimNodeCounterUpdateEvent*> (j->second);
  1561. AnimNodeMgr::getInstance ()->updateNodeCounter (counterEvent->m_nodeId, counterEvent->m_counterId, counterEvent->m_counterValue);
  1562. break;
  1563. }
  1564. case AnimEvent::PACKET_LBRX_EVENT:
  1565. {
  1566. AnimPacketLbRxEvent * packetEvent = static_cast<AnimPacketLbRxEvent *> (j->second);
  1567. AnimPacket * animPacket = static_cast<AnimPacket *> (packetEvent->m_pkt);
  1568.  
  1569. //NS_LOG_DEBUG ("Packet LbRX Event:" << packetEvent << " P:"<< animPacket );
  1570. if (m_fastForwarding)
  1571. {
  1572. packetEvent->m_valid = false;
  1573. break;
  1574. }
  1575. if (!packetEvent->m_valid)
  1576. break;
  1577. if (!animPacket)
  1578. break;
  1579. //NS_LOG_DEBUG ("PACKET_LBRX_EVENT Remove P:" << animPacket);
  1580.  
  1581. AnimatorScene::getInstance ()->removeWiredPacket (animPacket);
  1582. m_wiredPacketsToAnimate.erase (animPacket);
  1583. delete animPacket;
  1584. packetEvent->m_valid = false;
  1585. break;
  1586.  
  1587. }
  1588. case AnimEvent::PACKET_FBTX_EVENT:
  1589. {
  1590.  
  1591. if (m_fastForwarding || !(m_showPackets))
  1592. break;
  1593. AnimPacketEvent * packetEvent = static_cast<AnimPacketEvent *> (j->second);
  1594. AnimPacket * animPacket = AnimPacketMgr::getInstance ()->add (packetEvent->m_fromId,
  1595. packetEvent->m_toId,
  1596. packetEvent->m_fbTx,
  1597. packetEvent->m_fbRx,
  1598. packetEvent->m_lbTx,
  1599. packetEvent->m_lbRx,
  1600. packetEvent->m_isWPacket,
  1601. packetEvent->m_metaInfo,
  1602. m_showPacketMetaInfo,
  1603. packetEvent->m_numSlots);
  1604. if (!packetEvent->m_isWPacket)
  1605. {
  1606.  
  1607. //NS_LOG_DEBUG ("Packet LbRX Scheduling:" << animLbRxEvent << " P:" << animPacket);
  1608.  
  1609.  
  1610. AnimatorScene::getInstance ()->addWiredPacket (animPacket);
  1611. animPacket->update (m_currentTime);
  1612. animPacket->setPos (animPacket->getHead ());
  1613. animPacket->setVisible (true);
  1614. m_wiredPacketsToAnimate[animPacket] = animPacket;
  1615. //NS_LOG_DEBUG ("Events:" << m_events.toString ().str ().c_str ());
  1616. }
  1617. else
  1618. {
  1619. AnimatorScene::getInstance ()->addWirelessPacket (animPacket);
  1620. animPacket->update (m_currentTime);
  1621. animPacket->setVisible (true);
  1622. animPacket->setPos (animPacket->getHead ());
  1623. m_wirelessPacketsToAnimate[animPacket] = animPacket;
  1624. if (m_showWiressCircles)
  1625. {
  1626. qreal radius = animPacket->getRadius ();
  1627. QPointF topLeft = QPointF (animPacket->getFromPos ().x () - radius,
  1628. animPacket->getFromPos ().y () - radius);
  1629. QPointF bottomRight = QPointF (animPacket->getFromPos ().x () + radius,
  1630. animPacket->getFromPos ().y () + radius);
  1631. AnimatorScene::getInstance ()->addWirelessCircle (QRectF (topLeft, bottomRight));
  1632. }
  1633. }
  1634. break;
  1635.  
  1636. }
  1637. case AnimEvent::WIRED_PACKET_UPDATE_EVENT:
  1638. {
  1639. if (m_fastForwarding)
  1640. break;
  1641.  
  1642.  
  1643. QVector <AnimPacket *> packetsToRemove;
  1644. for (std::map <AnimPacket *, AnimPacket *>::iterator i = m_wiredPacketsToAnimate.begin ();
  1645. i != m_wiredPacketsToAnimate.end ();
  1646. ++i)
  1647. {
  1648. AnimPacket * animPacket = 0;
  1649. animPacket = i->first;
  1650. if (m_currentTime > animPacket->getLastBitRx ())
  1651. {
  1652. packetsToRemove.push_back (animPacket);
  1653. continue;
  1654. }
  1655. animPacket->update (m_currentTime);
  1656. animPacket->setPos (animPacket->getHead ());
  1657. AnimatorScene::getInstance ()->update ();
  1658. //NS_LOG_DEBUG ("Updating");
  1659. }
  1660.  
  1661. for (QVector <AnimPacket *>::const_iterator i = packetsToRemove.begin ();
  1662. i != packetsToRemove.end ();
  1663. ++i)
  1664. {
  1665. AnimPacket * animPacket = *i;
  1666. removeWiredPacket (animPacket);
  1667. }
  1668. break;
  1669. }
  1670. case AnimEvent::UPDATE_NODE_POS_EVENT:
  1671. {
  1672. //NS_LOG_DEBUG ("Node Update POs");
  1673. AnimNodePositionUpdateEvent * ev = static_cast<AnimNodePositionUpdateEvent *> (j->second);
  1674. AnimNode * animNode = AnimNodeMgr::getInstance ()->getNode (ev->m_nodeId);
  1675. setNodePos (animNode, ev->m_x, ev->m_y);
  1676. break;
  1677. }
  1678. case AnimEvent::UPDATE_NODE_COLOR_EVENT:
  1679. {
  1680. AnimNodeColorUpdateEvent * ev = static_cast<AnimNodeColorUpdateEvent *> (j->second);
  1681. AnimNode * animNode = AnimNodeMgr::getInstance ()->getNode (ev->m_nodeId);
  1682. animNode->setColor (ev->m_r, ev->m_g, ev->m_b);
  1683. break;
  1684.  
  1685. }
  1686. case AnimEvent::UPDATE_NODE_DESCRIPTION_EVENT:
  1687. {
  1688. AnimNodeDescriptionUpdateEvent * ev = static_cast<AnimNodeDescriptionUpdateEvent *> (j->second);
  1689. AnimNode * animNode = AnimNodeMgr::getInstance ()->getNode (ev->m_nodeId);
  1690. animNode->setNodeDescription (ev->m_description);
  1691. break;
  1692. }
  1693. case AnimEvent::UPDATE_NODE_SIZE_EVENT:
  1694. {
  1695. AnimNodeSizeUpdateEvent * ev = static_cast<AnimNodeSizeUpdateEvent *> (j->second);
  1696. AnimNode * animNode = AnimNodeMgr::getInstance ()->getNode (ev->m_nodeId);
  1697. setNodeSize (animNode, ev->m_width);
  1698. break;
  1699. }
  1700. case AnimEvent::UPDATE_NODE_IMAGE_EVENT:
  1701. {
  1702. AnimNodeImageUpdateEvent * ev = static_cast<AnimNodeImageUpdateEvent *> (j->second);
  1703. AnimNode * animNode = AnimNodeMgr::getInstance ()->getNode (ev->m_nodeId);
  1704. setNodeResource (animNode, ev->m_resourceId);
  1705.  
  1706. break;
  1707.  
  1708. }
  1709. case AnimEvent::UPDATE_NODE_SYSID_EVENT:
  1710. {
  1711. AnimNodeSysIdUpdateEvent * ev = static_cast<AnimNodeSysIdUpdateEvent *> (j->second);
  1712. AnimNode * animNode = AnimNodeMgr::getInstance ()->getNode (ev->m_nodeId);
  1713. setNodeSysId (animNode, ev->m_nodeSysId);
  1714.  
  1715. break;
  1716. }
  1717. case AnimEvent::ADD_LINK_EVENT:
  1718. {
  1719.  
  1720. AnimLinkAddEvent * ev = static_cast<AnimLinkAddEvent *> (j->second);
  1721. AnimLink * animLink = 0;
  1722. animLink = LinkManager::getInstance ()->getAnimLink (ev->m_fromNodeId, ev->m_toNodeId, ev->m_p2p);
  1723. if (!animLink)
  1724. {
  1725. animLink = LinkManager::getInstance ()->addLink (ev->m_fromNodeId, ev->m_toNodeId,
  1726. ev->m_fromNodeDescription, ev->m_toNodeDescription,
  1727. ev->m_linkDescription,
  1728. ev->m_p2p);
  1729. AnimatorScene::getInstance ()->addLink (animLink);
  1730. }
  1731. break;
  1732.  
  1733. }
  1734. case AnimEvent::UPDATE_LINK_EVENT:
  1735. {
  1736. AnimLinkUpdateEvent * ev = static_cast<AnimLinkUpdateEvent *> (j->second);
  1737. LinkManager::getInstance ()->updateLink (ev->m_fromNodeId, ev->m_toNodeId, ev->m_linkDescription);
  1738. break;
  1739. }
  1740.  
  1741.  
  1742. } //switch
  1743. } // for/while loop
  1744. m_updateRateSlider->setEnabled (true);
  1745. m_simulationTimeSlider->setEnabled (true);
  1746. } // if result == good
  1747. else
  1748. {
  1749. if (!OnlineMode)
  1750. setSimulationCompleted ();
  1751. NS_LOG_DEBUG("BAD");
  1752. }
  1753. nextTs = pp.second->first;
  1754. }
  1755.  
  1756.  
  1757. void
  1758. AnimatorMode::buttonAnimationGroupFinishedSlot ()
  1759. {
  1760. if (m_state == SIMULATION_COMPLETE)
  1761. {
  1762. m_buttonAnimationGroup->start ();
  1763. }
  1764. else
  1765. {
  1766. m_buttonAnimationGroup->deleteLater ();
  1767. }
  1768.  
  1769. }
  1770.  
  1771. void
  1772. AnimatorMode::testSlot ()
  1773. {
  1774.  
  1775. }
  1776.  
  1777. BackgroudImageProperties_t
  1778. AnimatorMode::getBackgroundProperties ()
  1779. {
  1780. QGraphicsPixmapItem * background = AnimatorScene::getInstance ()->getBackgroundImage ();
  1781. BackgroudImageProperties_t prop = {"", 0, 0, 0, 0, 0};
  1782. if (!background)
  1783. return prop;
  1784. prop.fileName = m_backgroundImageProperties.fileName;
  1785. prop.x = background->pos ().x ();
  1786. prop.y = background->pos ().y ();
  1787. prop.scaleX = background->transform ().m11 ();
  1788. prop.scaleY = background->transform ().m22 ();
  1789. prop.opacity = background->opacity ();
  1790. return prop;
  1791. }
  1792.  
  1793. void
  1794. AnimatorMode::setOnlineMode(bool mode)
  1795. {
  1796. OnlineMode = mode;
  1797. }
  1798.  
  1799. // void
  1800. // AnimatorMode::setEventsOver (bool isOver)
  1801. // {
  1802. // eventsOver = isOver;
  1803. // }
  1804.  
  1805. bool
  1806. AnimatorMode::getOnlineMode()
  1807. {
  1808. return OnlineMode;
  1809. }
  1810.  
  1811. void
  1812. AnimatorMode::setBackgroundImageProperties (BackgroudImageProperties_t prop)
  1813. {
  1814. m_backgroundImageProperties = prop;
  1815. m_backgroundExists = true;
  1816. }
  1817.  
  1818. void
  1819. AnimatorMode::setShowNodeTrajectory (AnimNode *animNode)
  1820. {
  1821. AnimatorScene::getInstance ()->setShowNodeTrajectory (animNode);
  1822. }
  1823.  
  1824. void
  1825. AnimatorMode::setNodeResource (AnimNode *animNode, uint32_t resourceId)
  1826. {
  1827. animNode->setResource (resourceId);
  1828. LinkManager::getInstance ()->repairLinks (animNode->getNodeId ());
  1829. }
  1830.  
  1831. void
  1832. AnimatorMode::setNodeSize (AnimNode *animNode, qreal size)
  1833. {
  1834. animNode->setSize (size, size);
  1835. animNode->getDescription ()->setPos (animNode->sceneBoundingRect ().bottomRight ());
  1836. LinkManager::getInstance ()->repairLinks (animNode->getNodeId ());
  1837.  
  1838. }
  1839.  
  1840. void
  1841. AnimatorMode::setNodePos (AnimNode *animNode, qreal x, qreal y)
  1842. {
  1843. //NS_LOG_DEBUG ("SetNodePos:" << animNode->getNodeId ());
  1844. animNode->setX (x);
  1845. animNode->setY (y);
  1846. animNode->setPos (x, y);
  1847. animNode->getDescription ()->setPos (animNode->sceneBoundingRect ().bottomRight ());
  1848. LinkManager::getInstance ()->repairLinks (animNode->getNodeId ());
  1849. }
  1850.  
  1851. void
  1852. AnimatorMode::setNodeSysId (AnimNode * animNode, uint32_t sysId)
  1853. {
  1854. animNode->updateNodeSysId (sysId, animNode->isVisibleNodeSysId());
  1855. }
  1856.  
  1857. void
  1858. AnimatorMode::updateNodeSizeSlot (QString value)
  1859. {
  1860. qreal size = nodeSizeStringToValue (value);
  1861. AnimNodeMgr::getInstance ()->setSize (size, size);
  1862. uint32_t nodeCount = AnimNodeMgr::getInstance ()->getCount ();
  1863. for (uint32_t i = 0; i < nodeCount; ++i)
  1864. {
  1865. AnimNode * animNode = AnimNodeMgr::getInstance ()->getNode (i);
  1866. setNodeSize (animNode, size);
  1867. }
  1868.  
  1869. }
  1870.  
  1871. void
  1872. AnimatorMode::showNodeIdSlot ()
  1873. {
  1874. AnimNodeMgr::getInstance ()->showNodeId (m_showNodeIdButton->isChecked ());
  1875. if (m_showNodeIdButton->isChecked ())
  1876. {
  1877. m_showNodeIdButton->setToolTip ("Don't show Node Id");
  1878. }
  1879. else
  1880. {
  1881. m_showNodeIdButton->setToolTip ("Show Node Id");
  1882. }
  1883. }
  1884.  
  1885. void
  1886. AnimatorMode::showNodeSysIdSlot ()
  1887. {
  1888. AnimNodeMgr::getInstance ()->showNodeSysId (m_showNodeSysIdButton->isChecked ());
  1889. if (m_showNodeSysIdButton->isChecked ())
  1890. {
  1891. m_showNodeSysIdButton->setToolTip ("Don't show Node System Id");
  1892. }
  1893. else
  1894. {
  1895. m_showNodeSysIdButton->setToolTip ("Show Node System Id");
  1896. }
  1897. }
  1898.  
  1899. void
  1900. AnimatorMode::showIpSlot ()
  1901. {
  1902. AnimatorScene::getInstance ()->setShowInterfaceTexts (m_showIpButton->isChecked (), m_showMacButton->isChecked ());
  1903.  
  1904. }
  1905.  
  1906. void
  1907. AnimatorMode::showMacSlot ()
  1908. {
  1909. AnimatorScene::getInstance ()->setShowInterfaceTexts (m_showIpButton->isChecked (), m_showMacButton->isChecked ());
  1910.  
  1911. }
  1912.  
  1913. void
  1914. AnimatorMode::showGridLinesSlot ()
  1915. {
  1916.  
  1917. if (m_gridButton->isChecked ())
  1918. {
  1919. AnimatorScene::getInstance ()->addGrid ();
  1920. m_gridButton->setToolTip ("Turn OFF Grid");
  1921. }
  1922. else
  1923. {
  1924. AnimatorScene::getInstance ()->resetGrid ();
  1925. m_gridButton->setToolTip ("Turn ON Grid");
  1926. }
  1927. }
  1928.  
  1929.  
  1930.  
  1931. void
  1932. AnimatorMode::updateGridLinesSlot (int value)
  1933. {
  1934. AnimatorScene::getInstance ()->setGridLinesCount (value);
  1935.  
  1936. }
  1937.  
  1938.  
  1939.  
  1940. } // namespace netanim
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement