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

marble

  • sources
  • kde-4.12
  • kdeedu
  • marble
  • src
  • lib
  • marble
EditBookmarkDialog.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 2010 Gaurav Gupta <1989.gaurav@googlemail.com>
9 // Copyright 2011 Friedrich W. H. Kossebau <kossebau@kde.org>
10 // Copyright 2012 Thibaut Gridel <tgridel@free.fr>
11 //
12 
13 #include "EditBookmarkDialog.h"
14 #include "ui_EditBookmarkDialog.h"
15 
16 #include "BookmarkManager.h"
17 #include "GeoDataDocument.h"
18 #include "GeoDataPlacemark.h"
19 #include "GeoDataPoint.h"
20 #include "GeoDataFolder.h"
21 #include "GeoDataCoordinates.h"
22 #include "GeoDataExtendedData.h"
23 #include "MarbleModel.h"
24 #include "MarbleWidget.h"
25 #include "NewBookmarkFolderDialog.h"
26 #include "ReverseGeocodingRunnerManager.h"
27 
28 #include <QPointer>
29 
30 namespace Marble {
31 
32 class EditBookmarkDialogPrivate {
33 public:
34  MarbleWidget *m_widget;
35  ReverseGeocodingRunnerManager* m_manager;
36  BookmarkManager* m_bookmarkManager;
37  GeoDataCoordinates m_bookmarkCoordinates;
38  qreal m_range;
39  Ui::UiEditBookmarkDialog m_ui;
40 
41  EditBookmarkDialogPrivate( EditBookmarkDialog* q, BookmarkManager *bookmarkManager );
42 
43  void initComboBox( const GeoDataContainer* const container );
44 
45  void initialize();
46 
47  void setFolderName( const QString &name );
48 
49  QString append( const QString &bookmark, const QString &text);
50 
51  void openNewFolderDialog();
52 
53  void retrieveGeocodeResult( const GeoDataCoordinates &coordinates, const GeoDataPlacemark &placemark);
54 
55  void updateCoordinates();
56 
57 private:
58  EditBookmarkDialog* const q;
59 };
60 
61 EditBookmarkDialogPrivate::EditBookmarkDialogPrivate( EditBookmarkDialog* q_, BookmarkManager *bookmarkManager ) :
62  m_widget( 0 ), m_manager( 0 ), m_bookmarkManager( bookmarkManager ), m_range( 0 ), q( q_ )
63 {
64  // nothing to do
65 }
66 
67 void EditBookmarkDialogPrivate::initialize()
68 {
69  m_ui.setupUi( q );
70  m_ui.m_longitude->setDimension( Longitude );
71  m_ui.m_latitude->setDimension( Latitude );
72  bool const smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen;
73  m_ui.position_lbl->setVisible( !smallScreen );
74  m_ui.m_latitude->setVisible( !smallScreen );
75  m_ui.m_longitude->setVisible( !smallScreen );
76  QObject::connect( m_ui.m_newFolderButton, SIGNAL(clicked()), q, SLOT(openNewFolderDialog()) );
77  QObject::connect( m_ui.m_longitude, SIGNAL(valueChanged(qreal)), q, SLOT(updateCoordinates()) );
78  QObject::connect( m_ui.m_latitude, SIGNAL(valueChanged(qreal)), q, SLOT(updateCoordinates()) );
79 
80  m_ui.m_folders->clear();
81  initComboBox( m_bookmarkManager->document() );
82 }
83 
84 void EditBookmarkDialogPrivate::initComboBox( const GeoDataContainer* const container )
85 {
86  foreach( GeoDataFolder *folder, container->folderList() ) {
87  QVariant folderVariant;
88  folderVariant.setValue(folder);
89  m_ui.m_folders->addItem( folder->name(), folderVariant );
90  if( !folder->folderList().isEmpty() ) {
91  initComboBox( folder );
92  }
93  }
94 }
95 
96 void EditBookmarkDialogPrivate::setFolderName( const QString &name )
97 {
98  for ( int i=0; i<m_ui.m_folders->count(); ++i ) {
99  if ( m_ui.m_folders->itemText( i ) == name ) {
100  m_ui.m_folders->setCurrentIndex( i );
101  return;
102  }
103  }
104 }
105 
106 EditBookmarkDialog::EditBookmarkDialog( BookmarkManager *bookmarkManager, QWidget *parent )
107  : QDialog( parent ), d( new EditBookmarkDialogPrivate( this, bookmarkManager ) )
108 {
109  d->initialize();
110 }
111 
112 void EditBookmarkDialog::setCoordinates( const GeoDataCoordinates &coordinates )
113 {
114  d->m_bookmarkCoordinates = coordinates;
115 
116  if ( d->m_ui.m_name->text().isEmpty() ) {
117  d->m_ui.m_name->setText( coordinates.toString() );
118  d->m_ui.m_name->selectAll();
119  }
120 
121  d->m_ui.m_longitude->setValue( coordinates.longitude(GeoDataCoordinates::Degree) );
122  d->m_ui.m_latitude->setValue( coordinates.latitude(GeoDataCoordinates::Degree) );
123 }
124 
125 void EditBookmarkDialog::setRange( qreal range ) {
126  d->m_range = range;
127 }
128 
129 void EditBookmarkDialog::setName( const QString &text )
130 {
131  d->m_ui.m_name->setText( text );
132 }
133 
134 void EditBookmarkDialog::setDescription( const QString &text )
135 {
136  d->m_ui.m_description->setText( text );
137 }
138 
139 void EditBookmarkDialog::setFolderName( const QString &name )
140 {
141  d->setFolderName( name );
142 }
143 
144 void EditBookmarkDialog::setMarbleWidget( MarbleWidget* widget )
145 {
146  d->m_widget = widget;
147  const AngleUnit defaultAngleUnit = d->m_widget->defaultAngleUnit();
148  const GeoDataCoordinates::Notation notation =
149  (defaultAngleUnit == DecimalDegree) ? GeoDataCoordinates::Decimal :
150  (defaultAngleUnit == DMSDegree) ? GeoDataCoordinates::DMS :
151  /* else, UTM */ GeoDataCoordinates::DMS;
152  d->m_ui.m_longitude->setNotation( notation );
153  d->m_ui.m_latitude->setNotation( notation );
154 
155  d->m_manager = new ReverseGeocodingRunnerManager( d->m_widget->model(), this );
156  QObject::connect( d->m_manager, SIGNAL(reverseGeocodingFinished(GeoDataCoordinates,GeoDataPlacemark)),
157  this, SLOT(retrieveGeocodeResult(GeoDataCoordinates,GeoDataPlacemark)) );
158 }
159 
160 void EditBookmarkDialog::setReverseGeocodeName()
161 {
162  if ( !d->m_manager ) {
163  return;
164  }
165  //reverse geocode the bookmark point for better user experience
166  d->m_manager->reverseGeocoding( d->m_bookmarkCoordinates );
167 }
168 
169 EditBookmarkDialog::~EditBookmarkDialog()
170 {
171  delete d;
172 }
173 
174 void EditBookmarkDialogPrivate::retrieveGeocodeResult( const GeoDataCoordinates &coordinates, const GeoDataPlacemark &placemark)
175 {
176  Q_UNUSED(coordinates)
177  GeoDataExtendedData data = placemark.extendedData();
178  QString bookmarkName;
179  qreal distance = m_widget->distance() * KM2METER;
180  //FIXME : Optimal logic for suggestion with distance consideration is required
181 
182  if( distance >= 3500 ) {
183  bookmarkName = data.value("country").value().toString() ;
184  }
185  else if( distance >= 200 ) {
186  bookmarkName = append( data.value("city").value().toString()
187  , data.value("state").value().toString() );
188  bookmarkName = append( bookmarkName, data.value("country").value().toString() ) ;
189  }
190  else {
191  bookmarkName = append( data.value("road").value().toString()
192  , data.value("city").value().toString());
193  bookmarkName = append( bookmarkName, data.value("country").value().toString() ) ;
194  }
195 
196  if( bookmarkName.isEmpty() ) {
197  bookmarkName = placemark.address();
198  }
199 
200  m_ui.m_name->setText( bookmarkName );
201  m_ui.m_name->selectAll();
202 }
203 
204 QString EditBookmarkDialogPrivate::append( const QString &bookmark, const QString &text)
205 {
206  if( bookmark.isEmpty() && text.isEmpty() ) {
207  return "";
208  }
209  else if( bookmark.isEmpty() ) {
210  return text;
211  }
212  else if( text.isEmpty() ) {
213  return bookmark;
214  }
215  return bookmark + ", " + text;
216 }
217 
218 void EditBookmarkDialogPrivate::openNewFolderDialog()
219 {
220  QPointer<NewBookmarkFolderDialog> dialog = new NewBookmarkFolderDialog( q );
221  if ( dialog->exec() == QDialog::Accepted ) {
222  m_bookmarkManager->addNewBookmarkFolder( m_bookmarkManager->document(), dialog->folderName() );
223  m_ui.m_folders->clear();
224  initComboBox( m_bookmarkManager->document() );
225  setFolderName( dialog->folderName() );
226  }
227  delete dialog;
228 }
229 
230 void EditBookmarkDialogPrivate::updateCoordinates()
231 {
232  m_bookmarkCoordinates.setLongitude( m_ui.m_longitude->value(), GeoDataCoordinates::Degree );
233  m_bookmarkCoordinates.setLatitude( m_ui.m_latitude->value(), GeoDataCoordinates::Degree );
234 }
235 
236 GeoDataPlacemark EditBookmarkDialog::bookmark() const
237 {
238  //Create a bookmark object
239  GeoDataPlacemark bookmark;
240  bookmark.setName( name() );
241  bookmark.setDescription( description() );
242  //allow for HTML in the description
243  bookmark.setDescriptionCDATA( true );
244  bookmark.setCoordinate( coordinates() );
245  if ( d->m_range ) {
246  GeoDataLookAt *lookat = new GeoDataLookAt;
247  lookat->setCoordinates( coordinates() );
248  lookat->setRange( range() );
249  bookmark.setAbstractView( lookat );
250  }
251 
252  bookmark.extendedData().addValue( GeoDataData( "isBookmark", true ) );
253 
254  if(d->m_widget != 0) {
255  const QString celestialName = d->m_widget->model()->planetId();
256  if(celestialName != "earth") {
257  bookmark.extendedData().addValue( GeoDataData( "celestialBody", celestialName ) );
258  }
259  }
260 
261  return bookmark;
262 }
263 
264 QString EditBookmarkDialog::name() const
265 {
266  return d->m_ui.m_name->text();
267 }
268 
269 GeoDataFolder *EditBookmarkDialog::folder() const
270 {
271  return qvariant_cast<GeoDataFolder*>(d->m_ui.m_folders->itemData(d->m_ui.m_folders->currentIndex()));
272 }
273 
274 QString EditBookmarkDialog::description() const
275 {
276  return d->m_ui.m_description->toPlainText();
277 }
278 
279 GeoDataCoordinates EditBookmarkDialog::coordinates() const
280 {
281  return d->m_bookmarkCoordinates;
282 }
283 
284 qreal EditBookmarkDialog::range() const {
285  return d->m_range;
286 }
287 
288 }
289 
290 #include "EditBookmarkDialog.moc"
GeoDataDocument.h
GeoDataCoordinates.h
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Marble::EditBookmarkDialog::coordinates
GeoDataCoordinates coordinates() const
Definition: EditBookmarkDialog.cpp:279
QDialog
MarbleModel.h
This file contains the headers for MarbleModel.
Marble::KM2METER
const qreal KM2METER
Definition: MarbleGlobal.h:204
Marble::GeoDataFeature::setDescription
void setDescription(const QString &value)
Set the description of this feature to value.
Definition: GeoDataFeature.cpp:518
QWidget
Marble::EditBookmarkDialog::setCoordinates
void setCoordinates(const GeoDataCoordinates &coordinates)
Definition: EditBookmarkDialog.cpp:112
Marble::EditBookmarkDialog::~EditBookmarkDialog
~EditBookmarkDialog()
Destructor.
Definition: EditBookmarkDialog.cpp:169
Marble::EditBookmarkDialog::folder
GeoDataFolder * folder() const
Definition: EditBookmarkDialog.cpp:269
Marble::EditBookmarkDialog::setFolderName
void setFolderName(const QString &name)
Definition: EditBookmarkDialog.cpp:139
Marble::DecimalDegree
Degrees in decimal notation.
Definition: MarbleGlobal.h:65
Marble::GeoDataCoordinates::Decimal
"Decimal" notation (base-10)
Definition: GeoDataCoordinates.h:80
Marble::EditBookmarkDialog::range
qreal range() const
Definition: EditBookmarkDialog.cpp:284
Marble::EditBookmarkDialog::name
QString name() const
Definition: EditBookmarkDialog.cpp:264
Marble::EditBookmarkDialog::setMarbleWidget
void setMarbleWidget(MarbleWidget *widget)
Definition: EditBookmarkDialog.cpp:144
GeoDataExtendedData.h
Marble::GeoDataPlacemark::setCoordinate
void setCoordinate(qreal longitude, qreal latitude, qreal altitude=0, GeoDataCoordinates::Unit _unit=GeoDataCoordinates::Radian)
Set the coordinate of the placemark in longitude and latitude.
Definition: GeoDataPlacemark.cpp:121
Marble::GeoDataCoordinates::latitude
qreal latitude(GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian) const
retrieves the latitude of the GeoDataCoordinates object use the unit parameter to switch between Radi...
Definition: GeoDataCoordinates.cpp:751
Marble::EditBookmarkDialog::description
QString description() const
Definition: EditBookmarkDialog.cpp:274
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
Marble::GeoDataExtendedData
a class which allows to add custom data to KML Feature.
Definition: GeoDataExtendedData.h:35
BookmarkManager.h
Marble::MarbleWidget
A widget class that displays a view of the earth.
Definition: MarbleWidget.h:102
Marble::EditBookmarkDialog::setName
void setName(const QString &name)
Definition: EditBookmarkDialog.cpp:129
Marble::Latitude
Latitude.
Definition: MarbleGlobal.h:54
Marble::EditBookmarkDialog::setDescription
void setDescription(const QString &text)
Definition: EditBookmarkDialog.cpp:134
Marble::BookmarkManager
This class is responsible for loading the book mark objects from the files and various book mark oper...
Definition: BookmarkManager.h:35
Marble::GeoDataFeature::setName
void setName(const QString &value)
Set a new name for this feature.
Definition: GeoDataFeature.cpp:485
NewBookmarkFolderDialog.h
Marble::GeoDataLookAt::setRange
void setRange(qreal range)
Change the distance (in meters) between the camera and the object looked at.
Definition: GeoDataLookAt.cpp:101
Marble::ReverseGeocodingRunnerManager
Definition: ReverseGeocodingRunnerManager.h:30
ReverseGeocodingRunnerManager.h
Marble::GeoDataFolder
Definition: GeoDataFolder.h:50
GeoDataPlacemark.h
EditBookmarkDialog.h
Marble::GeoDataCoordinates::longitude
qreal longitude(GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian) const
retrieves the longitude of the GeoDataCoordinates object use the unit parameter to switch between Rad...
Definition: GeoDataCoordinates.cpp:739
Marble::EditBookmarkDialog::bookmark
GeoDataPlacemark bookmark() const
Definition: EditBookmarkDialog.cpp:236
Marble::GeoDataLookAt
Definition: GeoDataLookAt.h:23
GeoDataFolder.h
Marble::GeoDataData
Definition: GeoDataData.h:26
Marble::Longitude
Longitude.
Definition: MarbleGlobal.h:55
Marble::GeoDataCoordinates::Notation
Notation
enum used to specify the notation / numerical system
Definition: GeoDataCoordinates.h:79
GeoDataPoint.h
Marble::EditBookmarkDialog::setRange
void setRange(qreal range)
Definition: EditBookmarkDialog.cpp:125
Marble::DMSDegree
Degrees in DMS notation.
Definition: MarbleGlobal.h:64
Marble::GeoDataFeature::address
QString address() const
Return the address of the feature.
Definition: GeoDataFeature.cpp:491
Marble::GeoDataFeature::setDescriptionCDATA
void setDescriptionCDATA(bool cdata)
Set the description to be CDATA See:
Definition: GeoDataFeature.cpp:529
Marble::GeoDataExtendedData::addValue
void addValue(const GeoDataData &data)
add a data object to the GeoDataExtendedData with the key
Definition: GeoDataExtendedData.cpp:59
Marble::AngleUnit
AngleUnit
This enum is used to choose the unit chosen to measure angles.
Definition: MarbleGlobal.h:63
Marble::GeoDataCoordinates::toString
QString toString() const
return a string representation of the coordinate this is a convenience function which uses the defaul...
Definition: GeoDataCoordinates.cpp:921
Marble::EditBookmarkDialog::setReverseGeocodeName
void setReverseGeocodeName()
Definition: EditBookmarkDialog.cpp:160
MarbleWidget.h
This file contains the headers for MarbleWidget.
MarbleWidget
Wraps a Marble::MarbleWidget, providing access to important properties and methods.
Definition: MarbleDeclarativeWidget.h:50
Marble::GeoDataFeature::extendedData
GeoDataExtendedData & extendedData() const
Return the ExtendedData assigned to the feature.
Definition: GeoDataFeature.cpp:653
Marble::GeoDataFeature::setAbstractView
void setAbstractView(GeoDataAbstractView *abstractView)
Set the abstract view of the feature.
Definition: GeoDataFeature.cpp:545
Marble::GeoDataCoordinates::DMS
"Sexagesimal DMS" notation (base-60)
Definition: GeoDataCoordinates.h:81
Marble::GeoDataPlacemark
a class representing a point of interest on the map
Definition: GeoDataPlacemark.h:54
Marble::GeoDataLookAt::setCoordinates
void setCoordinates(const GeoDataCoordinates &coordinates)
set the GeoDataCoordinates object
Definition: GeoDataLookAt.cpp:53
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:49 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
  • kstars
  • libkdeedu
  •   keduvocdocument
  • 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