• 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
  • routing
RoutingProfileSettingsDialog.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 Niko Sams <niko.sams@gmail.com>
9 //
10 
11 
12 #include "RoutingProfileSettingsDialog.h"
13 
14 #include <QStandardItemModel>
15 
16 #include "MarbleGlobal.h"
17 #include "RoutingRunnerPlugin.h"
18 #include "MarbleDebug.h"
19 #include "RoutingProfilesModel.h"
20 #include "PluginManager.h"
21 
22 #include "ui_RoutingProfileSettingsDialog.h"
23 
24 namespace Marble {
25 
26 
27 RoutingProfileSettingsDialog::RoutingProfileSettingsDialog( const PluginManager *pluginManager, RoutingProfilesModel *profilesModel, QWidget* parent )
28  : QDialog( parent ),
29  m_profilesModel ( profilesModel ), m_dialog( 0 ), m_dialogLayout( 0 )
30 {
31 #ifdef Q_WS_MAEMO_5
32  setAttribute( Qt::WA_Maemo5StackedWindow );
33  setWindowFlags( Qt::Window );
34  setWindowTitle( tr( "Routing Profile - Marble" ) );
35 #endif // Q_WS_MAEMO_5
36 
37  m_ui = new Ui_RoutingProfileSettingsDialog();
38  m_ui->setupUi( this );
39  bool const smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen;
40  if ( smallScreen ) {
41  setMinimumHeight( 480 );
42  m_ui->services->setMinimumWidth( 280 );
43  m_ui->buttonBox->hide();
44  }
45 
46  QList<RoutingRunnerPlugin*> allPlugins = pluginManager->routingRunnerPlugins();
47  foreach( RoutingRunnerPlugin* plugin, allPlugins ) {
48  m_plugins << plugin;
49  RoutingRunnerPlugin::ConfigWidget* configWidget = plugin->configWidget();
50  if ( configWidget ) {
51  m_configWidgets.insert( plugin, configWidget );
52  m_ui->settingsStack->addWidget( configWidget );
53  }
54  }
55 
56  m_servicesModel = new QStandardItemModel;
57  m_ui->services->setModel( m_servicesModel );
58  connect ( m_ui->services->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SLOT(updateConfigWidget()), Qt::QueuedConnection );
59  connect ( m_servicesModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(updateConfigWidget()) );
60 
61  connect ( m_ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()) );
62  connect ( m_ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()) );
63 
64  connect( m_ui->configureButton, SIGNAL(clicked()), this, SLOT(openConfigDialog()) );
65 }
66 
67 RoutingProfileSettingsDialog::~RoutingProfileSettingsDialog()
68 {
69  qDeleteAll( m_configWidgets );
70  delete m_ui;
71 }
72 
73 void RoutingProfileSettingsDialog::updateConfigWidget( )
74 {
75  QModelIndex current = m_ui->services->selectionModel()->currentIndex();
76 
77  if ( !current.isValid() ) {
78  m_ui->settingsStack->setEnabled( false );
79  return;
80  }
81 
82  RoutingRunnerPlugin *plugin = m_plugins.at( current.row() );
83  QWidget* configWidget = m_configWidgets[plugin];
84  if ( configWidget ) {
85  bool const smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen;
86  m_ui->settingsStack->setCurrentWidget( smallScreen ? m_ui->configurePage : configWidget );
87  m_ui->descriptionLabel->setText( plugin->description() );
88  m_ui->statusLabel->setText( plugin->statusMessage() );
89  QStandardItem *item = m_servicesModel->invisibleRootItem()->child( current.row() );
90  m_ui->settingsStack->setEnabled( item->checkState() == Qt::Checked );
91  } else {
92  m_ui->settingsStack->setEnabled( false );
93  m_ui->noConfigDescriptionLabel->setText( plugin->description() );
94  m_ui->noConfigStatusLabel->setText( plugin->statusMessage() );
95  m_ui->settingsStack->setCurrentWidget( m_ui->noConfigAvailablePage );
96  }
97 }
98 
99 void RoutingProfileSettingsDialog::editProfile( int profileIndex )
100 {
101  QList<RoutingProfile> profiles = m_profilesModel->profiles();
102  m_ui->name->setText( profiles.at( profileIndex ).name() );
103 
104  m_servicesModel->clear();
105  foreach( RoutingRunnerPlugin *plugin, m_plugins ) {
106  QStandardItem *item = new QStandardItem( plugin->guiString() );
107  item->setCheckable( true );
108  if ( profiles[ profileIndex ].pluginSettings().contains( plugin->nameId() ) ) {
109  item->setCheckState( Qt::Checked );
110  QHash<QString, QVariant> settings = profiles[ profileIndex ].pluginSettings()[ plugin->nameId() ];
111  mDebug() << settings;
112  if ( m_configWidgets[plugin] ) {
113  m_configWidgets[plugin]->loadSettings( settings );
114  }
115  }
116  m_servicesModel->invisibleRootItem()->appendRow( item );
117  }
118  m_ui->settingsStack->setCurrentWidget( m_ui->selectServicePage );
119  m_ui->settingsStack->setEnabled( false );
120 
121  bool const smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen;
122  // Small screen profile (like maemo 5) does not have the "buttonBox"
123  if ( exec() != QDialog::Accepted && !smallScreen ) {
124  return;
125  }
126 
127  m_profilesModel->setProfileName( profileIndex, m_ui->name->text() );
128 
129  QHash< QString, QHash< QString, QVariant > > pluginSettings;
130  for ( int i=0; i < m_servicesModel->invisibleRootItem()->rowCount(); ++i) {
131  QStandardItem *item = m_servicesModel->invisibleRootItem()->child( i );
132  if ( item->checkState() == Qt::Checked ) {
133  QHash<QString, QVariant> settings;
134  if ( m_configWidgets[m_plugins[ i ]] ) {
135  settings = m_configWidgets[m_plugins[ i ]]->settings();
136  }
137  mDebug() << i << m_plugins[ i ]->nameId() << settings;
138  pluginSettings.insert( m_plugins[ i ]->nameId(), settings );
139  } else {
140  pluginSettings.remove( m_plugins[ i ]->nameId() );
141  }
142  }
143  m_profilesModel->setProfilePluginSettings( profileIndex, pluginSettings );
144 }
145 
146 void RoutingProfileSettingsDialog::openConfigDialog()
147 {
148  QModelIndex current = m_ui->services->selectionModel()->currentIndex();
149  if ( current.isValid() ) {
150  RoutingRunnerPlugin *plugin = m_plugins.at( current.row() );
151 
152  if ( !m_dialog ) {
153  m_dialog = new QDialog( this );
154 
155  m_dialogLayout = new QHBoxLayout();
156  m_dialogLayout->addWidget( m_configWidgets[plugin] );
157 
158  m_dialog->setLayout( m_dialogLayout );
159  m_dialog->setMinimumHeight( 480 );
160  } else {
161  m_dialogLayout->insertWidget( 0, m_configWidgets[plugin] );
162  }
163 
164  m_configWidgets[plugin]->show();
165  m_dialog->setWindowTitle( plugin->guiString() );
166  m_dialog->exec();
167  m_configWidgets[plugin]->hide();
168  m_dialogLayout->removeWidget( m_configWidgets[plugin] );
169  }
170 }
171 
172 }
173 
174 #include "RoutingProfileSettingsDialog.moc"
Marble::RoutingProfileSettingsDialog::editProfile
void editProfile(int profileIndex)
Definition: RoutingProfileSettingsDialog.cpp:99
Marble::PluginManager
The class that handles Marble's plugins.
Definition: PluginManager.h:45
Marble::RoutingProfilesModel::profiles
QList< RoutingProfile > profiles() const
Definition: RoutingProfilesModel.cpp:60
QDialog
Marble::RoutingProfileSettingsDialog::~RoutingProfileSettingsDialog
~RoutingProfileSettingsDialog()
Definition: RoutingProfileSettingsDialog.cpp:67
QWidget
Marble::RoutingProfilesModel
Definition: RoutingProfilesModel.h:25
Marble::RoutingRunnerPlugin::guiString
virtual QString guiString() const =0
Returns the string that should appear in the user interface.
MarbleDebug.h
Marble::PluginManager::routingRunnerPlugins
QList< RoutingRunnerPlugin * > routingRunnerPlugins() const
Returns all routing runner plugins.
Definition: PluginManager.cpp:123
Marble::RoutingRunnerPlugin::ConfigWidget
Definition: RoutingRunnerPlugin.h:77
Marble::RoutingProfilesModel::setProfilePluginSettings
bool setProfilePluginSettings(int row, const QHash< QString, QHash< QString, QVariant > > &pluginSettings)
Definition: RoutingProfilesModel.cpp:99
RoutingRunnerPlugin.h
MarbleGlobal.h
Marble::PluginInterface::nameId
virtual QString nameId() const =0
Returns the unique name of the plugin.
Marble::RoutingProfilesModel::setProfileName
bool setProfileName(int row, const QString &name)
Definition: RoutingProfilesModel.cpp:90
Marble::MarbleGlobal::SmallScreen
Definition: MarbleGlobal.h:268
Marble::MarbleGlobal::getInstance
static MarbleGlobal * getInstance()
Definition: MarbleGlobal.cpp:37
PluginManager.h
Marble::RoutingRunnerPlugin
A plugin for Marble to execute a routing task.
Definition: RoutingRunnerPlugin.h:33
Marble::MarbleGlobal::profiles
Profiles profiles() const
Definition: MarbleGlobal.cpp:48
RoutingProfileSettingsDialog.h
Marble::RoutingProfileSettingsDialog::RoutingProfileSettingsDialog
RoutingProfileSettingsDialog(const PluginManager *pluginManager, RoutingProfilesModel *profilesModel, QWidget *parent=0)
Definition: RoutingProfileSettingsDialog.cpp:27
Marble::mDebug
QDebug mDebug()
a function to replace qDebug() in Marble library code
Definition: MarbleDebug.cpp:31
RoutingProfilesModel.h
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