• 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
  • 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  setupDataSourcesTab();
167 
168  setDialogActive( false );
169  connect( m_configWidget->buttonDisabled, SIGNAL(clicked()),
170  this, SIGNAL(activatePluginClicked()) );
171 
172  update();
173 }
174 
175 void SatellitesConfigDialog::setupDataSourcesTab()
176 {
177  connect( m_configWidget->buttonAddDataSource,
178  SIGNAL(clicked()), SLOT(addDataSource()) );
179  connect( m_configWidget->buttonOpenDataSource,
180  SIGNAL(clicked()), SLOT(openDataSource()) );
181  connect( m_configWidget->buttonRemoveDataSource,
182  SIGNAL(clicked()), SLOT(removeSelectedDataSource()) );
183  connect( m_configWidget->buttonReloadDataSources,
184  SIGNAL(clicked()), SLOT(reloadDataSources()) );
185 
186  connect( m_configWidget->listDataSources,
187  SIGNAL(itemSelectionChanged()), SLOT(updateButtonState()) );
188 }
189 
190 SatellitesConfigNodeItem* SatellitesConfigDialog::getSatellitesCategoryItem(
191  const QString &body,
192  const QString &category,
193  bool create )
194 {
195  QString theCategory = translation( category );
196 
197  SatellitesConfigNodeItem *catalogItem;
198  catalogItem = getSatellitesBodyItem( body, create );
199 
200  if( catalogItem == NULL ) {
201  return NULL;
202  }
203 
204  // find category
205  for( int i = 0; i < catalogItem->childrenCount(); ++i ) {
206  if( catalogItem->childAt( i )->name() == theCategory ) {
207  return dynamic_cast<SatellitesConfigNodeItem*>(catalogItem->childAt( i ) );
208  }
209  }
210 
211  // not found, create?
212  if( create ) {
213  SatellitesConfigNodeItem *newItem;
214  newItem = new SatellitesConfigNodeItem( theCategory );
215  catalogItem->appendChild( newItem );
216  return newItem;
217  }
218 
219  return NULL; // not found, not created
220 }
221 
222 SatellitesConfigNodeItem* SatellitesConfigDialog::getSatellitesBodyItem(
223  const QString &body,
224  bool create )
225 {
226  QString theBody = translation( body );
227 
228  SatellitesConfigModel *model = dynamic_cast<SatellitesConfigModel*>( m_configWidget->treeView->model() );
229  SatellitesConfigNodeItem *rootItem = model->rootItem();
230 
231  // try to find it
232  for( int i = 0; i < rootItem->childrenCount(); ++i ) {
233  if( rootItem->childAt( i )->name() == theBody ) {
234  return dynamic_cast<SatellitesConfigNodeItem*>(rootItem->childAt( i ) );
235  }
236  }
237 
238  // not found, create?
239  if( create ) {
240  SatellitesConfigNodeItem *newItem;
241  newItem = new SatellitesConfigNodeItem( theBody );
242  rootItem->appendChild( newItem );
243  return newItem;
244  }
245 
246  return NULL; // not found, not created
247 }
248 
249 void SatellitesConfigDialog::reloadDataSources()
250 {
251  emit dataSourcesReloadRequested();
252 }
253 
254 void SatellitesConfigDialog::addDataSource()
255 {
256  QListWidget *list = m_configWidget->listDataSources;
257 
258  bool ok;
259  QString text = QInputDialog::getText( this,
260  tr("Add Data Source"),
261  tr("URL or File path:"),
262  QLineEdit::Normal,
263  "", &ok);
264 
265  if( ok && !text.isEmpty() ) {
266  QUrl url = QUrl::fromUserInput( text );
267  if( !url.isValid() ) {
268  mDebug() << "Invalid data source input:" << text;
269  QMessageBox::critical( this,
270  tr( "Invalid data source input" ),
271  tr( "Please enter a valid URL or file path!" ),
272  QMessageBox::Cancel );
273  return;
274  }
275 
276  // add item
277  QListWidgetItem *item = new QListWidgetItem( url.toString(), list );
278  item->setFlags( Qt::ItemIsSelectable |
279  Qt::ItemIsEnabled );
280  item->setData( IsLoadedRole, QVariant( false ) );
281 
282  mDebug() << "Added satellite data source:" << item->text();
283  m_userDataSources << item->text();
284 
285  emit userDataSourceAdded( item->text() );
286  emit userDataSourcesChanged();
287  }
288 }
289 
290 void SatellitesConfigDialog::openDataSource()
291 {
292  QListWidget *list = m_configWidget->listDataSources;
293 
294  const QString filter = QString("%1;;%2;;%3").arg(
295  tr( "All Supported Files (*.txt *.msc)" ),
296  tr( "Marble Satellite Catalog (*.msc)" ),
297  tr( "Two Line Element Set (*.txt)" ),
298  tr( "All Files (*.*)" ) );
299 
300  QString filename = QFileDialog::getOpenFileName( this,
301  tr( "Open Satellite Data File" ), "", filter );
302 
303  if( !filename.isNull() ) {
304  QString url = QUrl::fromLocalFile( filename ).toString();
305 
306  if( m_configWidget->listDataSources->findItems(
307  url, Qt::MatchFixedString ).size() > 0 ) {
308  mDebug() << "Satellite data source exists:" << url;
309  return; // already in list
310  }
311 
312  QListWidgetItem *item = new QListWidgetItem( url, list );
313  item->setFlags( Qt::ItemIsSelectable |
314  Qt::ItemIsEnabled );
315  item->setData( IsLoadedRole, QVariant( false ) );
316 
317  mDebug() << "Added satellite data source:" << url;
318  m_userDataSources << url;
319 
320  emit userDataSourceAdded( url );
321  emit userDataSourcesChanged();
322  }
323 
324 }
325 
326 void SatellitesConfigDialog::removeSelectedDataSource()
327 {
328  int row = m_configWidget->listDataSources->currentRow();
329  if( row >= 0 &&
330  QMessageBox::question( this,
331  tr( "Delete selected data source" ),
332  tr( "Do you really want to delete the selected data source?" ),
333  QMessageBox::Yes | QMessageBox::No,
334  QMessageBox::No ) == QMessageBox::Yes ) {
335 
336  QListWidgetItem *item;
337  item = m_configWidget->listDataSources->takeItem( row );
338  QString source = item->text();
339 
340  mDebug() << "Removing satellite data source:" << source;
341  m_userDataSources.removeAll( source );
342  emit userDataSourceRemoved( source );
343 
344  delete item;
345 
346  emit userDataSourcesChanged();
347  }
348 }
349 
350 void SatellitesConfigDialog::updateButtonState()
351 {
352  m_configWidget->buttonRemoveDataSource->setEnabled(
353  ( m_configWidget->listDataSources->currentIndex().row() >= 0 ) );
354 }
355 
356 void SatellitesConfigDialog::expandTreeView()
357 {
358  QTreeView *treeView = m_configWidget->treeView;
359 
360  if( !treeView->model() ) {
361  return;
362  }
363 
364  // expand only branches with selected items
365  treeView->expandAll();
366 
367  for ( int i = 0; i < treeView->model()->columnCount(); ++i ) {
368  treeView->resizeColumnToContents( i );
369  }
370 }
371 
372 QString SatellitesConfigDialog::translation( const QString &from ) const
373 {
374  if( m_translations.contains( from ) ) {
375  return m_translations.value( from );
376  }
377 
378  return from;
379 }
380 
381 } // namespace Marble
382 
383 #include "SatellitesConfigDialog.moc"
384 
Marble::SatellitesConfigAbstractItem::data
virtual QVariant data(int column, int role) const
Definition: SatellitesConfigAbstractItem.cpp:59
QWidget
Marble::SatellitesConfigDialog::reloadDataSources
void reloadDataSources()
Definition: SatellitesConfigDialog.cpp:249
Marble::SatellitesConfigDialog::initialize
void initialize()
Definition: SatellitesConfigDialog.cpp:161
Marble::SatellitesConfigNodeItem
Definition: SatellitesConfigNodeItem.h:19
Marble::SatellitesConfigAbstractItem
Definition: SatellitesConfigAbstractItem.h:20
QMap::contains
bool contains(const Key &key) const
Marble::SatellitesConfigNodeItem::childAt
SatellitesConfigAbstractItem * childAt(int row) const
Definition: SatellitesConfigNodeItem.cpp:112
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:326
Marble::SatellitesConfigAbstractItem::UrlListRole
Definition: SatellitesConfigAbstractItem.h:26
QListWidgetItem
SatellitesConfigModel.h
Marble::SatellitesConfigNodeItem::appendChild
void appendChild(SatellitesConfigAbstractItem *item)
Definition: SatellitesConfigNodeItem.cpp:132
QListWidget
QUrl::fromUserInput
QUrl fromUserInput(const QString &userInput)
Marble::SatellitesConfigAbstractItem::IdListRole
Definition: SatellitesConfigAbstractItem.h:24
MarbleDebug.h
QUrl::toString
QString toString(QFlags< QUrl::FormattingOption > options) const
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
QWidget::update
void update()
Marble::SatellitesConfigDialog::configWidget
Ui::SatellitesConfigDialog * configWidget()
Definition: SatellitesConfigDialog.cpp:156
QString::isNull
bool isNull() const
Marble::SatellitesConfigDialog::addDataSource
void addDataSource()
Definition: SatellitesConfigDialog.cpp:254
QWidget::setEnabled
void setEnabled(bool)
QList::count
int count(const T &value) const
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:290
QMessageBox::question
StandardButton question(QWidget *parent, const QString &title, const QString &text, QFlags< QMessageBox::StandardButton > buttons, StandardButton defaultButton)
QTreeView::resizeColumnToContents
void resizeColumnToContents(int column)
Marble::SatellitesConfigDialog::updateButtonState
void updateButtonState()
Definition: SatellitesConfigDialog.cpp:350
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
QListWidgetItem::setFlags
void setFlags(QFlags< Qt::ItemFlag > flags)
QString::isEmpty
bool isEmpty() const
QList::removeAll
int removeAll(const T &value)
Marble::SatellitesConfigDialog::expandTreeView
void expandTreeView()
Definition: SatellitesConfigDialog.cpp:356
SatellitesConfigDialog.h
QString
QList
MarbleGlobal.h
Marble::SatellitesConfigDialog::getSatellitesBodyItem
SatellitesConfigNodeItem * getSatellitesBodyItem(const QString &body, bool create=false)
Definition: SatellitesConfigDialog.cpp:222
QStringList
QInputDialog::getText
QString getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode, const QString &text, bool *ok, QFlags< Qt::WindowType > flags, QFlags< Qt::InputMethodHint > inputMethodHints)
SatellitesConfigNodeItem.h
Marble::SatellitesConfigDialog::SatellitesConfigDialog
SatellitesConfigDialog(QWidget *parent=0)
Definition: SatellitesConfigDialog.cpp:30
QUrl
QListWidgetItem::setData
virtual void setData(int role, const QVariant &value)
Marble::SatellitesConfigDialog::userDataSourcesChanged
void userDataSourcesChanged()
SatellitesConfigLeafItem.h
QTreeView::expandAll
void expandAll()
Marble::SatellitesConfigLeafItem::setData
bool setData(int column, int role, const QVariant &data)
Definition: SatellitesConfigLeafItem.cpp:64
QUrl::isValid
bool isValid() const
QDateTime::currentDateTime
QDateTime currentDateTime()
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()
QTreeView
Marble::SatellitesConfigDialog::addTLESatelliteItem
SatellitesConfigAbstractItem * addTLESatelliteItem(const QString &category, const QString &title, const QString &url)
Definition: SatellitesConfigDialog.cpp:128
QDialogButtonBox
Marble::SatellitesConfigDialog::userDataSourceAdded
void userDataSourceAdded(const QString &source)
QAbstractItemModel::columnCount
virtual int columnCount(const QModelIndex &parent) const =0
Marble::SatellitesConfigDialog::getSatellitesCategoryItem
SatellitesConfigNodeItem * getSatellitesCategoryItem(const QString &body, const QString &category, bool create=false)
Definition: SatellitesConfigDialog.cpp:190
Marble::SatellitesConfigDialog::~SatellitesConfigDialog
~SatellitesConfigDialog()
Definition: SatellitesConfigDialog.cpp:55
QMessageBox::critical
StandardButton critical(QWidget *parent, const QString &title, const QString &text, QFlags< QMessageBox::StandardButton > buttons, StandardButton defaultButton)
Marble::SatellitesConfigNodeItem::childrenCount
int childrenCount() const
Definition: SatellitesConfigNodeItem.cpp:127
QDialog
QDialogButtonBox::button
QPushButton * button(StandardButton which) const
Marble::SatellitesConfigDialog::userDataSources
QStringList userDataSources() const
Definition: SatellitesConfigDialog.cpp:71
QFileDialog::getOpenFileName
QString getOpenFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFlags< QFileDialog::Option > options)
Marble::SatellitesConfigLeafItem
Definition: SatellitesConfigLeafItem.h:18
Marble::SatellitesConfigDialog::activatePluginClicked
void activatePluginClicked()
QAbstractItemView::model
QAbstractItemModel * model() const
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Marble::SatellitesConfigDialog::setupDataSourcesTab
void setupDataSourcesTab()
Definition: SatellitesConfigDialog.cpp:175
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
Marble::mDebug
QDebug mDebug()
a function to replace qDebug() in Marble library code
Definition: MarbleDebug.cpp:36
QListWidgetItem::text
QString text() const
QUrl::fromLocalFile
QUrl fromLocalFile(const QString &localFile)
QMap::value
const T value(const Key &key) const
QVariant
Marble::SatellitesConfigModel
Definition: SatellitesConfigModel.h:20
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:41 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