• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.14
  • kdeedu
  • marble
  • src
  • lib
  • marble
TourPlayback.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2014 Sanjiban Bairagya <sanjiban22393@gmail.com>
9 //
10 
11 #include "TourPlayback.h"
12 
13 #include <QTimer>
14 #include <QList>
15 #include <QSlider>
16 #include <qurl.h>
17 #include <QtCore/qnamespace.h>
18 
19 #include "MarbleDebug.h"
20 #include "MarbleWidget.h"
21 #include "PopupLayer.h"
22 #include "GeoDataTour.h"
23 #include "GeoDataFlyTo.h"
24 #include "GeoDataLookAt.h"
25 #include "GeoDataTourControl.h"
26 #include "GeoDataSoundCue.h"
27 #include "GeoDataAnimatedUpdate.h"
28 #include "GeoDataTypes.h"
29 #include "PlaybackFlyToItem.h"
30 #include "PlaybackAnimatedUpdateItem.h"
31 #include "PlaybackWaitItem.h"
32 #include "PlaybackTourControlItem.h"
33 #include "PlaybackSoundCueItem.h"
34 #include "PlaybackAnimatedUpdateItem.h"
35 #include "SerialTrack.h"
36 #include "ParallelTrack.h"
37 
38 namespace Marble
39 {
40 
41 class TourPlaybackPrivate
42 {
43 public:
44  TourPlaybackPrivate();
45  ~TourPlaybackPrivate();
46 
47  const GeoDataTour *m_tour;
48  bool m_pause;
49  SerialTrack m_mainTrack;
50  QList<ParallelTrack*> m_parallelTracks;
51  GeoDataFlyTo m_mapCenter;
52  MarbleWidget *m_widget;
53 };
54 
55 TourPlaybackPrivate::TourPlaybackPrivate() :
56  m_tour( &GeoDataTour::null ),
57  m_pause( false ),
58  m_mainTrack()
59 {
60  // do nothing
61 }
62 
63 TourPlaybackPrivate::~TourPlaybackPrivate()
64 {
65  qDeleteAll(m_parallelTracks);
66 }
67 
68 TourPlayback::TourPlayback(QObject *parent) :
69  QObject(parent),
70  d(new TourPlaybackPrivate())
71 {
72  connect( &d->m_mainTrack, SIGNAL( centerOn( GeoDataCoordinates ) ), this, SIGNAL( centerOn( GeoDataCoordinates ) ) );
73  connect( &d->m_mainTrack, SIGNAL( progressChanged( double ) ), this, SIGNAL( progressChanged( double ) ) );
74  connect( &d->m_mainTrack, SIGNAL( finished() ), this, SLOT( stopTour() ) );
75  connect( &d->m_mainTrack, SIGNAL( finished() ), this, SIGNAL( finished() ) );
76 }
77 
78 TourPlayback::~TourPlayback()
79 {
80  delete d;
81 }
82 
83 void TourPlayback::stopTour()
84 {
85  foreach( ParallelTrack* track, d->m_parallelTracks ){
86  track->stop();
87  track->setPaused( false );
88  }
89 }
90 
91 void TourPlayback::showBalloon( GeoDataPlacemark* placemark )
92 {
93  GeoDataPoint* point = static_cast<GeoDataPoint*>( placemark->geometry() );
94  d->m_widget->popupLayer()->setCoordinates( point->coordinates(), Qt::AlignRight | Qt::AlignVCenter );
95  d->m_widget->popupLayer()->setContent( placemark->description() );
96  d->m_widget->popupLayer()->setVisible( true );
97  d->m_widget->popupLayer()->setSize( QSizeF( 480, 500 ) );
98 }
99 
100 void TourPlayback::hideBalloon()
101 {
102  d->m_widget->popupLayer()->setVisible( false );
103 }
104 
105 bool TourPlayback::isPlaying() const
106 {
107  return !d->m_pause;
108 }
109 
110 void TourPlayback::setMarbleWidget(MarbleWidget* widget)
111 {
112  d->m_widget = widget;
113 }
114 
115 void TourPlayback::setTour(const GeoDataTour *tour)
116 {
117  d->m_mainTrack.clear();
118  qDeleteAll( d->m_parallelTracks );
119  d->m_parallelTracks.clear();
120  if (tour) {
121  d->m_tour = tour;
122  }
123  else {
124  d->m_tour = &GeoDataTour::null;
125  }
126  double delay = 0;
127  for( int i = 0; i < d->m_tour->playlist()->size(); i++){
128  const GeoDataTourPrimitive* primitive = d->m_tour->playlist()->primitive( i );
129  if( primitive->nodeType() == GeoDataTypes::GeoDataFlyToType ){
130  const GeoDataFlyTo *flyTo = dynamic_cast<const GeoDataFlyTo*>(primitive);
131  d->m_mainTrack.append( new PlaybackFlyToItem( flyTo ) );
132  delay += flyTo->duration();
133  }
134  else if( primitive->nodeType() == GeoDataTypes::GeoDataWaitType ){
135  const GeoDataWait *wait = dynamic_cast<const GeoDataWait*>(primitive);
136 
137  d->m_mainTrack.append( new PlaybackWaitItem( wait ) );
138  delay += wait->duration();
139  }
140  else if( primitive->nodeType() == GeoDataTypes::GeoDataTourControlType ){
141  const GeoDataTourControl *tourControl = dynamic_cast<const GeoDataTourControl*>(primitive);
142 
143  d->m_mainTrack.append( new PlaybackTourControlItem( tourControl ) );
144  }
145  else if( primitive->nodeType() == GeoDataTypes::GeoDataSoundCueType ){
146  const GeoDataSoundCue *soundCue = dynamic_cast<const GeoDataSoundCue*>(primitive);
147  PlaybackSoundCueItem *item = new PlaybackSoundCueItem( soundCue );
148  ParallelTrack *track = new ParallelTrack( item );
149  track->setDelayBeforeTrackStarts( delay );
150  d->m_parallelTracks.append( track );
151  }
152  else if( primitive->nodeType() == GeoDataTypes::GeoDataAnimatedUpdateType ){
153  const GeoDataAnimatedUpdate *animatedUpdate = dynamic_cast<const GeoDataAnimatedUpdate*>(primitive);
154  PlaybackAnimatedUpdateItem *item = new PlaybackAnimatedUpdateItem( animatedUpdate );
155  ParallelTrack *track = new ParallelTrack( item );
156  track->setDelayBeforeTrackStarts( delay );
157  d->m_parallelTracks.append( track );
158  connect( track, SIGNAL( balloonHidden()), this, SLOT( hideBalloon() ) );
159  connect( track, SIGNAL( balloonShown( GeoDataPlacemark* ) ), this, SLOT( showBalloon( GeoDataPlacemark* ) ) );
160  }
161  }
162  Q_ASSERT( d->m_widget );
163  GeoDataLookAt* lookat = new GeoDataLookAt( d->m_widget->lookAt() );
164  lookat->setAltitude( lookat->range() );
165  d->m_mapCenter.setView( lookat );
166  PlaybackFlyToItem* mapCenterItem = new PlaybackFlyToItem( &d->m_mapCenter );
167  PlaybackFlyToItem* before = mapCenterItem;
168  for ( int i=0; i<d->m_mainTrack.size(); ++i ) {
169  PlaybackFlyToItem* item = qobject_cast<PlaybackFlyToItem*>( d->m_mainTrack.at(i) );
170  if ( item ) {
171  item->setBefore( before );
172  before = item;
173  }
174  }
175  PlaybackFlyToItem* next = 0;
176  for ( int i=d->m_mainTrack.size()-1; i>=0; --i ) {
177  PlaybackFlyToItem* item = qobject_cast<PlaybackFlyToItem*>( d->m_mainTrack.at(i) );
178  if ( item ) {
179  item->setNext( next );
180  next = item;
181  }
182  }
183 }
184 
185 void TourPlayback::play()
186 {
187  d->m_pause = false;
188  GeoDataLookAt* lookat = new GeoDataLookAt( d->m_widget->lookAt() );
189  lookat->setAltitude( lookat->range() );
190  d->m_mapCenter.setView( lookat );
191  d->m_mainTrack.play();
192  foreach( ParallelTrack* track, d->m_parallelTracks) {
193  track->play();
194  }
195 }
196 
197 void TourPlayback::pause()
198 {
199  d->m_pause = true;
200  d->m_mainTrack.pause();
201  foreach( ParallelTrack* track, d->m_parallelTracks) {
202  track->pause();
203  }
204 }
205 
206 void TourPlayback::stop()
207 {
208  d->m_pause = true;
209  d->m_mainTrack.stop();
210  foreach( ParallelTrack* track, d->m_parallelTracks) {
211  track->stop();
212  }
213  hideBalloon();
214 }
215 
216 void TourPlayback::seek( double value )
217 {
218  double const offset = qBound( 0.0, value, d->m_mainTrack.duration() );
219  d->m_mainTrack.seek( offset );
220  foreach( ParallelTrack* track, d->m_parallelTracks ){
221  track->seek( offset );
222  }
223 }
224 
225 double TourPlayback::duration() const
226 {
227  return d->m_mainTrack.duration();
228 }
229 
230 } // namespace Marble
231 
232 #include "TourPlayback.moc"
Marble::TourPlayback::play
void play()
Definition: TourPlayback.cpp:185
Marble::TourPlayback::seek
void seek(double offset)
Seek to the given timestamp (in seconds)
Definition: TourPlayback.cpp:216
Marble::TourPlayback::~TourPlayback
~TourPlayback()
Definition: TourPlayback.cpp:78
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Marble::GeoDataTour::null
static const GeoDataTour null
Definition: GeoDataTour.h:41
Marble::TourPlayback::pause
void pause()
Definition: TourPlayback.cpp:197
Marble::ParallelTrack::setPaused
void setPaused(bool)
Definition: ParallelTrack.cpp:105
Marble::GeoDataTourPrimitive
Definition: GeoDataTourPrimitive.h:20
Marble::PlaybackWaitItem
Definition: PlaybackWaitItem.h:20
Marble::GeoDataWait::duration
double duration() const
Definition: GeoDataWait.cpp:42
Marble::GeoDataTour
Definition: GeoDataTour.h:25
MarbleDebug.h
SerialTrack.h
Marble::GeoDataLookAt::range
qreal range() const
Retrieve the distance (in meters) between the camera and the object looked at.
Definition: GeoDataLookAt.cpp:120
Marble::GeoDataObject::nodeType
virtual const char * nodeType() const =0
Provides type information for downcasting a GeoNode.
Marble::MarbleWidget
A widget class that displays a view of the earth.
Definition: MarbleWidget.h:104
Marble::PlaybackFlyToItem::setNext
void setNext(PlaybackFlyToItem *next)
Definition: PlaybackFlyToItem.cpp:122
PlaybackAnimatedUpdateItem.h
Marble::PlaybackFlyToItem
Definition: PlaybackFlyToItem.h:20
Marble::ParallelTrack::stop
void stop()
Definition: ParallelTrack.cpp:95
Marble::GeoDataSoundCue
Definition: GeoDataSoundCue.h:19
GeoDataLookAt.h
GeoDataSoundCue.h
Marble::PlaybackSoundCueItem
Definition: PlaybackSoundCueItem.h:26
Marble::GeoDataWait
Definition: GeoDataWait.h:19
PlaybackWaitItem.h
Marble::PlaybackFlyToItem::setBefore
void setBefore(PlaybackFlyToItem *before)
Definition: PlaybackFlyToItem.cpp:117
Marble::ParallelTrack
Definition: ParallelTrack.h:22
QObject
Marble::GeoDataFlyTo
Definition: GeoDataFlyTo.h:23
Marble::GeoDataAnimatedUpdate
Definition: GeoDataAnimatedUpdate.h:23
GeoDataTourControl.h
Marble::GeoDataTypes::GeoDataFlyToType
const char * GeoDataFlyToType
Definition: GeoDataTypes.cpp:41
TourPlayback.h
Marble::GeoDataTypes::GeoDataSoundCueType
const char * GeoDataSoundCueType
Definition: GeoDataTypes.cpp:79
Marble::GeoDataTypes::GeoDataTourControlType
const char * GeoDataTourControlType
Definition: GeoDataTypes.cpp:84
QList
PlaybackFlyToItem.h
Marble::TourPlayback::setMarbleWidget
void setMarbleWidget(MarbleWidget *widget)
Definition: TourPlayback.cpp:110
Marble::GeoDataLookAt
Definition: GeoDataLookAt.h:23
Marble::TourPlayback::isPlaying
bool isPlaying() const
Definition: TourPlayback.cpp:105
Marble::TourPlayback::setTour
void setTour(const GeoDataTour *tour)
Definition: TourPlayback.cpp:115
GeoDataAnimatedUpdate.h
PopupLayer.h
Marble::PlaybackAnimatedUpdateItem
Definition: PlaybackAnimatedUpdateItem.h:21
Marble::GeoDataFlyTo::duration
double duration() const
Definition: GeoDataFlyTo.cpp:125
Marble::GeoDataTypes::GeoDataWaitType
const char * GeoDataWaitType
Definition: GeoDataTypes.cpp:85
QSizeF
GeoDataFlyTo.h
Marble::ParallelTrack::seek
void seek(double position)
Definition: ParallelTrack.cpp:70
Marble::ParallelTrack::pause
void pause()
Definition: ParallelTrack.cpp:58
Marble::GeoDataTypes::GeoDataAnimatedUpdateType
const char * GeoDataAnimatedUpdateType
Definition: GeoDataTypes.cpp:29
Marble::TourPlayback::centerOn
void centerOn(const GeoDataCoordinates &coordinates)
ParallelTrack.h
MarbleWidget.h
This file contains the headers for MarbleWidget.
Marble::TourPlayback::duration
double duration() const
Tour duration in seconds.
Definition: TourPlayback.cpp:225
PlaybackTourControlItem.h
MarbleWidget
Wraps a Marble::MarbleWidget, providing access to important properties and methods.
Definition: MarbleDeclarativeWidget.h:50
GeoDataTypes.h
Marble::ParallelTrack::setDelayBeforeTrackStarts
void setDelayBeforeTrackStarts(double delay)
Definition: ParallelTrack.cpp:30
Marble::GeoDataLookAt::setAltitude
void setAltitude(qreal altitude)
set the altitude in a GeoDataLookAt object
Definition: GeoDataLookAt.cpp:76
PlaybackSoundCueItem.h
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Marble::TourPlayback::progressChanged
void progressChanged(double)
Marble::GeoDataPlacemark
a class representing a point of interest on the map
Definition: GeoDataPlacemark.h:54
Marble::ParallelTrack::play
void play()
Definition: ParallelTrack.cpp:42
GeoDataTour.h
Marble::TourPlayback::stop
void stop()
Definition: TourPlayback.cpp:206
Marble::PlaybackTourControlItem
Definition: PlaybackTourControlItem.h:19
Marble::TourPlayback::finished
void finished()
Marble::GeoDataTourControl
Definition: GeoDataTourControl.h:19
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:42 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal