7 #include "RoutingProfileSettingsDialog.h"
9 #include <QStandardItemModel>
11 #include "MarbleGlobal.h"
12 #include "MarbleDebug.h"
13 #include "RoutingProfilesModel.h"
14 #include "PluginManager.h"
16 #include "ui_RoutingProfileSettingsDialog.h"
21 RoutingProfileSettingsDialog::RoutingProfileSettingsDialog(
const PluginManager *pluginManager, RoutingProfilesModel *profilesModel,
QWidget* parent )
23 m_profilesModel ( profilesModel ), m_dialog( nullptr ), m_dialogLayout( nullptr )
25 m_ui =
new Ui_RoutingProfileSettingsDialog();
26 m_ui->setupUi(
this );
27 bool const smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen;
29 setMinimumHeight( 480 );
30 m_ui->services->setMinimumWidth( 280 );
31 m_ui->buttonBox->hide();
35 for( RoutingRunnerPlugin* plugin: allPlugins ) {
37 RoutingRunnerPlugin::ConfigWidget* configWidget = plugin->configWidget();
39 m_configWidgets.
insert( plugin, configWidget );
40 m_ui->settingsStack->addWidget( configWidget );
45 m_ui->services->setModel( m_servicesModel );
49 connect ( m_ui->buttonBox, SIGNAL(accepted()),
this, SLOT(accept()) );
50 connect ( m_ui->buttonBox, SIGNAL(rejected()),
this, SLOT(reject()) );
52 connect( m_ui->configureButton, SIGNAL(clicked()),
this, SLOT(openConfigDialog()) );
55 RoutingProfileSettingsDialog::~RoutingProfileSettingsDialog()
57 qDeleteAll( m_configWidgets );
61 void RoutingProfileSettingsDialog::updateConfigWidget( )
63 QModelIndex current = m_ui->services->selectionModel()->currentIndex();
66 m_ui->settingsStack->setEnabled(
false );
70 RoutingRunnerPlugin *plugin = m_plugins.at( current.
row() );
71 QWidget* configWidget = m_configWidgets[plugin];
73 bool const smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen;
74 m_ui->settingsStack->setCurrentWidget( smallScreen ? m_ui->configurePage : configWidget );
75 m_ui->descriptionLabel->setText( plugin->description() );
76 m_ui->statusLabel->setText( plugin->statusMessage() );
80 m_ui->settingsStack->setEnabled(
false );
81 m_ui->noConfigDescriptionLabel->setText( plugin->description() );
82 m_ui->noConfigStatusLabel->setText( plugin->statusMessage() );
83 m_ui->settingsStack->setCurrentWidget( m_ui->noConfigAvailablePage );
87 void RoutingProfileSettingsDialog::editProfile(
int profileIndex )
90 m_ui->name->setText( profiles.
at( profileIndex ).name() );
92 m_servicesModel->
clear();
93 for( RoutingRunnerPlugin *plugin: m_plugins ) {
96 if ( profiles[ profileIndex ].pluginSettings().contains( plugin->nameId() ) ) {
100 if ( m_configWidgets[plugin] ) {
101 m_configWidgets[plugin]->loadSettings( settings );
104 m_servicesModel->invisibleRootItem()->appendRow( item );
106 m_ui->settingsStack->setCurrentWidget( m_ui->selectServicePage );
107 m_ui->settingsStack->setEnabled(
false );
109 bool const smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen;
115 m_profilesModel->setProfileName( profileIndex, m_ui->name->text() );
118 for (
int i=0; i < m_servicesModel->invisibleRootItem()->rowCount(); ++i) {
122 if ( m_configWidgets[m_plugins[ i ]] ) {
123 settings = m_configWidgets[m_plugins[ i ]]->settings();
125 mDebug() << i << m_plugins[ i ]->nameId() << settings;
126 pluginSettings.
insert( m_plugins[ i ]->nameId(), settings );
128 pluginSettings.
remove( m_plugins[ i ]->nameId() );
131 m_profilesModel->setProfilePluginSettings( profileIndex, pluginSettings );
134 void RoutingProfileSettingsDialog::openConfigDialog()
136 QModelIndex current = m_ui->services->selectionModel()->currentIndex();
138 RoutingRunnerPlugin *plugin = m_plugins.at( current.
row() );
141 m_dialog =
new QDialog(
this );
144 m_dialogLayout->addWidget( m_configWidgets[plugin] );
146 m_dialog->setLayout( m_dialogLayout );
147 m_dialog->setMinimumHeight( 480 );
149 m_dialogLayout->insertWidget( 0, m_configWidgets[plugin] );
152 m_configWidgets[plugin]->show();
153 m_dialog->setWindowTitle( plugin->guiString() );
155 m_configWidgets[plugin]->hide();
156 m_dialogLayout->removeWidget( m_configWidgets[plugin] );
162 #include "moc_RoutingProfileSettingsDialog.cpp"