• 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
  • plugins
  • render
  • satellites
SatellitesConfigDialog.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 2012 Rene Kuettner <rene@bitkanal.net>
9 //
10 
11 #include "SatellitesConfigDialog.h"
12 
13 #include <QPushButton>
14 #include <QMessageBox>
15 #include <QInputDialog>
16 #include <QFileDialog>
17 #include <QDateTime>
18 #include <QUrl>
19 
20 #include "MarbleGlobal.h"
21 #include "MarbleDebug.h"
22 #include "SatellitesConfigNodeItem.h"
23 #include "SatellitesConfigLeafItem.h"
24 #include "SatellitesConfigModel.h"
25 
26 #include "ui_SatellitesConfigDialog.h"
27 
28 namespace Marble {
29 
30 SatellitesConfigDialog::SatellitesConfigDialog( QWidget *parent )
31  : QDialog( parent )
32 {
33  initialize();
34 
35  // allow translation for catalog items
36  // + categories
37  m_translations["Comets"] = tr( "Comets" );
38  m_translations["Moons"] = tr( "Moons" );
39  m_translations["Other"] = tr( "Other" );
40  m_translations["Spacecrafts"] = tr( "Spacecrafts" );
41  m_translations["Spaceprobes"] = tr( "Spaceprobes" );
42  // + bodies
43  m_translations["Moon"] = tr( "Moon" );
44  m_translations["Sun"] = tr( "Sun" );
45  m_translations["Mercury"] = tr( "Mercury" );
46  m_translations["Venus"] = tr( "Venus" );
47  m_translations["Earth"] = tr( "Earth" );
48  m_translations["Mars"] = tr( "Mars" );
49  m_translations["Jupiter"] = tr( "Jupiter" );
50  m_translations["Saturn"] = tr( "Saturn" );
51  m_translations["Uranus"] = tr( "Uranus" );
52  m_translations["Neptune"] = tr( "Neptune" );
53 }
54 
55 SatellitesConfigDialog::~SatellitesConfigDialog()
56 {
57 }
58 
59 void SatellitesConfigDialog::setUserDataSources( const QStringList &sources )
60 {
61  m_userDataSources = sources;
62 
63  // keep the first item
64  for( int i = m_configWidget->listDataSources->count(); i > 1; --i ) {
65  delete m_configWidget->listDataSources->takeItem( i-1 );
66  }
67 
68  m_configWidget->listDataSources->addItems( m_userDataSources );
69 }
70 
71 QStringList SatellitesConfigDialog::userDataSources() const
72 {
73  return m_userDataSources;
74 }
75 
76 void SatellitesConfigDialog::setUserDataSourceLoaded( const QString &source,
77  bool loaded )
78 {
79  QList<QListWidgetItem*> list;
80  list = m_configWidget->listDataSources->findItems( source,
81  Qt::MatchFixedString );
82  if( list.count() > 0 ) {
83  list[0]->setData( IsLoadedRole, QVariant( loaded ) );
84  }
85 
86  QString date( QDateTime::currentDateTime().toString() );
87  m_configWidget->labelLastUpdated->setText( date );
88 }
89 
90 void SatellitesConfigDialog::update()
91 {
92  expandTreeView();
93 
94  QDialog::update();
95 }
96 
97 SatellitesConfigAbstractItem*
98 SatellitesConfigDialog::addSatelliteItem( const QString &body,
99  const QString &category,
100  const QString &title,
101  const QString &id,
102  const QString &url )
103 {
104  QString theTitle = translation( title );
105 
106  SatellitesConfigNodeItem *categoryItem;
107  categoryItem = getSatellitesCategoryItem( body, category, true );
108 
109  // exists?
110  for( int i = 0; i < categoryItem->childrenCount(); ++i ) {
111  SatellitesConfigAbstractItem *absItem = categoryItem->childAt( i );
112  if( ( absItem->data( 0, SatellitesConfigAbstractItem::IdListRole ) == id ) ) {
113  return absItem;
114  }
115  }
116 
117  // add it
118  SatellitesConfigLeafItem *newItem;
119  newItem = new SatellitesConfigLeafItem( theTitle, id );
120  if( !url.isNull() && !url.isEmpty() ) {
121  newItem->setData( 0, SatellitesConfigAbstractItem::UrlListRole, url );
122  }
123  categoryItem->appendChild( newItem );
124  return newItem;
125 }
126 
127 SatellitesConfigAbstractItem*
128 SatellitesConfigDialog::addTLESatelliteItem( const QString &category,
129  const QString &title,
130  const QString &url )
131 {
132  // TLE items always have their id set to their url and
133  // are always related to the earth
134  return addSatelliteItem( "Earth", category, title, url, url );
135 }
136 
137 void SatellitesConfigDialog::setDialogActive( bool active )
138 {
139  m_configWidget->tabWidget->clear();
140 
141  if( active ) {
142  m_configWidget->tabWidget->addTab( m_configWidget->tabSatellites,
143  tr( "&Satellites" ) );
144  m_configWidget->tabWidget->addTab( m_configWidget->tabDataSources,
145  tr( "&Data Sources" ) );
146  } else {
147  m_configWidget->tabWidget->addTab( m_configWidget->tabDisabled,
148  tr( "&Activate Plugin" ) );
149  }
150 
151  QDialogButtonBox *bBox = m_configWidget->buttonBox;
152  bBox->button( QDialogButtonBox::Ok )->setEnabled( active );
153  bBox->button( QDialogButtonBox::Reset )->setEnabled( active );
154 }
155 
156 Ui::SatellitesConfigDialog* SatellitesConfigDialog::configWidget()
157 {
158  return m_configWidget;
159 }
160 
161 void SatellitesConfigDialog::initialize()
162 {
163  m_configWidget = new Ui::SatellitesConfigDialog();
164  m_configWidget->setupUi( this );
165 
166  setupSatellitesTab();
167  setupDataSourcesTab();
168 
169  setDialogActive( false );
170  connect( m_configWidget->buttonDisabled, SIGNAL(clicked()),
171  this, SIGNAL(activatePluginClicked()) );
172 
173  update();
174 }
175 
176 void SatellitesConfigDialog::setupSatellitesTab()
177 {
178 }
179 
180 void SatellitesConfigDialog::setupDataSourcesTab()
181 {
182  connect( m_configWidget->buttonAddDataSource,
183  SIGNAL(clicked()), SLOT(addDataSource()) );
184  connect( m_configWidget->buttonOpenDataSource,
185  SIGNAL(clicked()), SLOT(openDataSource()) );
186  connect( m_configWidget->buttonRemoveDataSource,
187  SIGNAL(clicked()), SLOT(removeSelectedDataSource()) );
188  connect( m_configWidget->buttonReloadDataSources,
189  SIGNAL(clicked()), SLOT(reloadDataSources()) );
190 
191  connect( m_configWidget->listDataSources,
192  SIGNAL(itemSelectionChanged()), SLOT(updateButtonState()) );
193 }
194 
195 SatellitesConfigNodeItem* SatellitesConfigDialog::getSatellitesCategoryItem(
196  const QString &body,
197  const QString &category,
198  bool create )
199 {
200  QString theCategory = translation( category );
201 
202  SatellitesConfigNodeItem *catalogItem;
203  catalogItem = getSatellitesBodyItem( body, create );
204 
205  if( catalogItem == NULL ) {
206  return NULL;
207  }
208 
209  // find category
210  for( int i = 0; i < catalogItem->childrenCount(); ++i ) {
211  if( catalogItem->childAt( i )->name() == theCategory ) {
212  return (SatellitesConfigNodeItem*)catalogItem->childAt( i );
213  }
214  }
215 
216  // not found, create?
217  if( create ) {
218  SatellitesConfigNodeItem *newItem;
219  newItem = new SatellitesConfigNodeItem( theCategory );
220  catalogItem->appendChild( newItem );
221  return newItem;
222  }
223 
224  return NULL; // not found, not created
225 }
226 
227 SatellitesConfigNodeItem* SatellitesConfigDialog::getSatellitesBodyItem(
228  const QString &body,
229  bool create )
230 {
231  QString theBody = translation( body );
232 
233  SatellitesConfigModel *model;
234  model = (SatellitesConfigModel*)m_configWidget->treeView->model();
235  SatellitesConfigNodeItem *rootItem = model->rootItem();
236 
237  // try to find it
238  for( int i = 0; i < rootItem->childrenCount(); ++i ) {
239  if( rootItem->childAt( i )->name() == theBody ) {
240  return (SatellitesConfigNodeItem*)rootItem->childAt( i );
241  }
242  }
243 
244  // not found, create?
245  if( create ) {
246  SatellitesConfigNodeItem *newItem;
247  newItem = new SatellitesConfigNodeItem( theBody );
248  rootItem->appendChild( newItem );
249  return newItem;
250  }
251 
252  return NULL; // not found, not created
253 }
254 
255 void SatellitesConfigDialog::reloadDataSources()
256 {
257  emit dataSourcesReloadRequested();
258 }
259 
260 void SatellitesConfigDialog::addDataSource()
261 {
262  QListWidget *list = m_configWidget->listDataSources;
263 
264  bool ok;
265  QString text = QInputDialog::getText( this,
266  tr("Add Data Source"),
267  tr("URL or File path:"),
268  QLineEdit::Normal,
269  "", &ok);
270 
271  if( ok && !text.isEmpty() ) {
272  QUrl url = QUrl::fromUserInput( text );
273  if( !url.isValid() ) {
274  mDebug() << "Invalid data source input:" << text;
275  QMessageBox::critical( this,
276  tr( "Invalid data source input" ),
277  tr( "Please enter a valid URL or file path!" ),
278  QMessageBox::Cancel );
279  return;
280  }
281 
282  // add item
283  QListWidgetItem *item = new QListWidgetItem( url.toString(), list );
284  item->setFlags( Qt::ItemIsSelectable |
285  Qt::ItemIsEnabled );
286  item->setData( IsLoadedRole, QVariant( false ) );
287 
288  mDebug() << "Added satellite data source:" << item->text();
289  m_userDataSources << item->text();
290 
291  emit userDataSourceAdded( item->text() );
292  emit userDataSourcesChanged();
293  }
294 }
295 
296 void SatellitesConfigDialog::openDataSource()
297 {
298  QListWidget *list = m_configWidget->listDataSources;
299 
300  const QString filter = QString("%1;;%2;;%3").arg(
301  tr( "All Supported Files (*.txt *.msc)" ),
302  tr( "Marble Satellite Catalogue (*.msc)" ),
303  tr( "Two Line Element Set (*.txt)" ),
304  tr( "All Files (*.*)" ) );
305 
306  QString filename = QFileDialog::getOpenFileName( this,
307  tr( "Open Satellite Data File" ), "", filter );
308 
309  if( !filename.isNull() ) {
310  QString url = QUrl::fromLocalFile( filename ).toString();
311 
312  if( m_configWidget->listDataSources->findItems(
313  url, Qt::MatchFixedString ).size() > 0 ) {
314  mDebug() << "Satellite data source exists:" << url;
315  return; // already in list
316  }
317 
318  QListWidgetItem *item = new QListWidgetItem( url, list );
319  item->setFlags( Qt::ItemIsSelectable |
320  Qt::ItemIsEnabled );
321  item->setData( IsLoadedRole, QVariant( false ) );
322 
323  mDebug() << "Added satellite data source:" << url;
324  m_userDataSources << url;
325 
326  emit userDataSourceAdded( url );
327  emit userDataSourcesChanged();
328  }
329 
330 }
331 
332 void SatellitesConfigDialog::removeSelectedDataSource()
333 {
334  int row = m_configWidget->listDataSources->currentRow();
335  if( row >= 0 &&
336  QMessageBox::question( this,
337  tr( "Delete selected data source" ),
338  tr( "Do you really want to delete the selected data source?" ),
339  QMessageBox::Yes | QMessageBox::No,
340  QMessageBox::No ) == QMessageBox::Yes ) {
341 
342  QListWidgetItem *item;
343  item = m_configWidget->listDataSources->takeItem( row );
344  QString source = item->text();
345 
346  mDebug() << "Removing satellite data source:" << source;
347  m_userDataSources.removeAll( source );
348  emit userDataSourceRemoved( source );
349 
350  delete item;
351 
352  emit userDataSourcesChanged();
353  }
354 }
355 
356 void SatellitesConfigDialog::updateButtonState()
357 {
358  m_configWidget->buttonRemoveDataSource->setEnabled(
359  ( m_configWidget->listDataSources->currentIndex().row() >= 0 ) );
360 }
361 
362 void SatellitesConfigDialog::expandTreeView()
363 {
364  QTreeView *treeView = m_configWidget->treeView;
365 
366  if( !treeView->model() ) {
367  return;
368  }
369 
370  // expand only branches with selected items
371  treeView->expandAll();
372 
373  for ( int i = 0; i < treeView->model()->columnCount(); ++i ) {
374  treeView->resizeColumnToContents( i );
375  }
376 }
377 
378 QString SatellitesConfigDialog::translation( const QString &from ) const
379 {
380  if( m_translations.contains( from ) ) {
381  return m_translations.value( from );
382  }
383 
384  return from;
385 }
386 
387 } // namespace Marble
388 
389 #include "SatellitesConfigDialog.moc"
390 
Marble::SatellitesConfigAbstractItem::data
virtual QVariant data(int column, int role) const
Definition: SatellitesConfigAbstractItem.cpp:59
Marble::SatellitesConfigDialog::reloadDataSources
void reloadDataSources()
Definition: SatellitesConfigDialog.cpp:255
Marble::SatellitesConfigDialog::initialize
void initialize()
Definition: SatellitesConfigDialog.cpp:161
Marble::SatellitesConfigNodeItem
Definition: SatellitesConfigNodeItem.h:19
Marble::SatellitesConfigAbstractItem
Definition: SatellitesConfigAbstractItem.h:20
Marble::SatellitesConfigNodeItem::childAt
SatellitesConfigAbstractItem * childAt(int row) const
Definition: SatellitesConfigNodeItem.cpp:112
QDialog
Marble::SatellitesConfigAbstractItem::name
QString name() const
Definition: SatellitesConfigAbstractItem.cpp:30
Marble::SatellitesConfigDialog::update
void update()
Definition: SatellitesConfigDialog.cpp:90
Marble::SatellitesConfigDialog::removeSelectedDataSource
void removeSelectedDataSource()
Definition: SatellitesConfigDialog.cpp:332
QWidget
Marble::SatellitesConfigAbstractItem::UrlListRole
Definition: SatellitesConfigAbstractItem.h:26
SatellitesConfigModel.h
Marble::SatellitesConfigNodeItem::appendChild
void appendChild(SatellitesConfigAbstractItem *item)
Definition: SatellitesConfigNodeItem.cpp:132
Marble::SatellitesConfigAbstractItem::IdListRole
Definition: SatellitesConfigAbstractItem.h:24
MarbleDebug.h
Marble::SatellitesConfigDialog::configWidget
Ui::SatellitesConfigDialog * configWidget()
Definition: SatellitesConfigDialog.cpp:156
Marble::SatellitesConfigDialog::addDataSource
void addDataSource()
Definition: SatellitesConfigDialog.cpp:260
Marble::SatellitesConfigDialog::setDialogActive
void setDialogActive(bool active)
Definition: SatellitesConfigDialog.cpp:137
Marble::SatellitesConfigModel::rootItem
SatellitesConfigNodeItem * rootItem() const
Definition: SatellitesConfigModel.cpp:187
Marble::SatellitesConfigDialog::setUserDataSources
void setUserDataSources(const QStringList &sources)
Definition: SatellitesConfigDialog.cpp:59
Marble::SatellitesConfigDialog::openDataSource
void openDataSource()
Definition: SatellitesConfigDialog.cpp:296
Marble::SatellitesConfigDialog::updateButtonState
void updateButtonState()
Definition: SatellitesConfigDialog.cpp:356
Marble::SatellitesConfigDialog::addSatelliteItem
SatellitesConfigAbstractItem * addSatelliteItem(const QString &body, const QString &category, const QString &title, const QString &id, const QString &url=QString())
Definition: SatellitesConfigDialog.cpp:98
Marble::SatellitesConfigDialog::expandTreeView
void expandTreeView()
Definition: SatellitesConfigDialog.cpp:362
SatellitesConfigDialog.h
MarbleGlobal.h
Marble::SatellitesConfigDialog::getSatellitesBodyItem
SatellitesConfigNodeItem * getSatellitesBodyItem(const QString &body, bool create=false)
Definition: SatellitesConfigDialog.cpp:227
SatellitesConfigNodeItem.h
Marble::SatellitesConfigDialog::SatellitesConfigDialog
SatellitesConfigDialog(QWidget *parent=0)
Definition: SatellitesConfigDialog.cpp:30
Marble::SatellitesConfigDialog::userDataSourcesChanged
void userDataSourcesChanged()
SatellitesConfigLeafItem.h
Marble::SatellitesConfigLeafItem::setData
bool setData(int column, int role, const QVariant &data)
Definition: SatellitesConfigLeafItem.cpp:64
Marble::SatellitesConfigDialog::setUserDataSourceLoaded
void setUserDataSourceLoaded(const QString &source, bool loaded)
Definition: SatellitesConfigDialog.cpp:76
Marble::SatellitesConfigDialog::userDataSourceRemoved
void userDataSourceRemoved(const QString &source)
Marble::SatellitesConfigDialog::IsLoadedRole
Definition: SatellitesConfigDialog.h:34
Marble::SatellitesConfigDialog::dataSourcesReloadRequested
void dataSourcesReloadRequested()
Marble::SatellitesConfigDialog::addTLESatelliteItem
SatellitesConfigAbstractItem * addTLESatelliteItem(const QString &category, const QString &title, const QString &url)
Definition: SatellitesConfigDialog.cpp:128
Marble::SatellitesConfigDialog::userDataSourceAdded
void userDataSourceAdded(const QString &source)
Marble::SatellitesConfigDialog::getSatellitesCategoryItem
SatellitesConfigNodeItem * getSatellitesCategoryItem(const QString &body, const QString &category, bool create=false)
Definition: SatellitesConfigDialog.cpp:195
Marble::SatellitesConfigDialog::~SatellitesConfigDialog
~SatellitesConfigDialog()
Definition: SatellitesConfigDialog.cpp:55
Marble::SatellitesConfigNodeItem::childrenCount
int childrenCount() const
Definition: SatellitesConfigNodeItem.cpp:127
Marble::SatellitesConfigDialog::userDataSources
QStringList userDataSources() const
Definition: SatellitesConfigDialog.cpp:71
Marble::SatellitesConfigLeafItem
Definition: SatellitesConfigLeafItem.h:18
Marble::SatellitesConfigDialog::activatePluginClicked
void activatePluginClicked()
Marble::SatellitesConfigDialog::setupDataSourcesTab
void setupDataSourcesTab()
Definition: SatellitesConfigDialog.cpp:180
Marble::SatellitesConfigDialog::setupSatellitesTab
void setupSatellitesTab()
Definition: SatellitesConfigDialog.cpp:176
Marble::mDebug
QDebug mDebug()
a function to replace qDebug() in Marble library code
Definition: MarbleDebug.cpp:31
Marble::SatellitesConfigModel
Definition: SatellitesConfigModel.h:20
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:52 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