From b4e0674e2bf0ebc10c74ddf250653e670b044956 Mon Sep 17 00:00:00 2001 From: Leo Franchi <lfranchi@kde.org> Date: Wed, 1 Jun 2011 17:41:44 -0400 Subject: [PATCH] SHow initial config dialog as sheet on osx, WIP --- src/settingsdialog.cpp | 61 +++++++++++++++++++++++++++++++++++------- src/settingsdialog.h | 4 ++- 2 files changed, 54 insertions(+), 11 deletions(-) diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index fc67ff18a..1a3ea88a6 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -382,7 +382,7 @@ SettingsDialog::onLastFmFinished() ui->pushButtonTestLastfmLogin->setText( tr( "Failed" ) ); ui->pushButtonTestLastfmLogin->setEnabled( true ); break; - + default: qDebug() << "Couldn't get last.fm auth result"; ui->pushButtonTestLastfmLogin->setText( tr( "Could not contact server" ) ); @@ -528,6 +528,15 @@ SettingsDialog::sipFactoryClicked( SipPluginFactory* factory ) SipPlugin* p = factory->createPlugin(); bool added = false; if( p->configWidget() ) { + +#ifdef Q_OS_MAC + // on osx a sheet needs to be non-modal + DelegateConfigWrapper* dialog = new DelegateConfigWrapper( p->configWidget(), QString("%1 Config" ).arg( p->friendlyName() ), this, Qt::Sheet ); + dialog->setProperty( "sipplugin", QVariant::fromValue< QObject* >( p ) ); + connect( dialog, SIGNAL( finished( int ) ), this, SLOT( sipCreateConfigClosed( int ) ) ); + + dialog->show(); +#else DelegateConfigWrapper dialog( p->configWidget(), QString("%1 Config" ).arg( p->friendlyName() ), this ); QWeakPointer< DelegateConfigWrapper > watcher( &dialog ); int ret = dialog.exec(); @@ -544,13 +553,44 @@ SettingsDialog::sipFactoryClicked( SipPluginFactory* factory ) // canceled, delete it added = false; } + + handleSipPluginAdded( p, added ); +#endif } else { // no config, so just add it added = true; TomahawkSettings::instance()->addSipPlugin( p->pluginId() ); SipHandler::instance()->addSipPlugin( p ); + + handleSipPluginAdded( p, added ); } +} + +void +SettingsDialog::sipCreateConfigClosed( int finished ) +{ + DelegateConfigWrapper* dialog = qobject_cast< DelegateConfigWrapper* >( sender() ); + SipPlugin* p = qobject_cast< SipPlugin* >( dialog->property( "sipplugin" ).value< QObject* >() ); + Q_ASSERT( p ); + + bool added = false; + if( finished == QDialog::Accepted ) { + + p->saveConfig(); + TomahawkSettings::instance()->addSipPlugin( p->pluginId() ); + SipHandler::instance()->addSipPlugin( p ); + + added = true; + } + + handleSipPluginAdded( p, added ); +} + + +void +SettingsDialog::handleSipPluginAdded( SipPlugin* p, bool added ) +{ SipPluginFactory* f = SipHandler::instance()->factoryFromPlugin( p ); if( added && f && f->isUnique() ) { // remove from actions list @@ -570,6 +610,7 @@ SettingsDialog::sipFactoryClicked( SipPluginFactory* factory ) } } + void SettingsDialog::sipContextMenuRequest( const QPoint& p ) { @@ -625,9 +666,9 @@ ProxyDialog::ProxyDialog( QWidget *parent ) , ui( new Ui::ProxyDialog ) { ui->setupUi( this ); - + // ugly, I know, but... - + int i = 0; ui->typeBox->insertItem( i, "No Proxy", QNetworkProxy::NoProxy ); m_forwardMap[ QNetworkProxy::NoProxy ] = i; @@ -637,9 +678,9 @@ ProxyDialog::ProxyDialog( QWidget *parent ) m_forwardMap[ QNetworkProxy::Socks5Proxy ] = i; m_backwardMap[ i ] = QNetworkProxy::Socks5Proxy; i++; - + TomahawkSettings* s = TomahawkSettings::instance(); - + ui->typeBox->setCurrentIndex( m_forwardMap[s->proxyType()] ); ui->hostLineEdit->setText( s->proxyHost() ); ui->portSpinBox->setValue( s->proxyPort() ); @@ -681,18 +722,18 @@ ProxyDialog::proxyTypeChangedSlot( int index ) ui->passwordLineEdit->setEnabled( true ); ui->checkBoxUseProxyForDns->setEnabled( true ); ui->noHostLineEdit->setEnabled( true ); - } + } } void ProxyDialog::saveSettings() { qDebug() << Q_FUNC_INFO; - + //First set settings TomahawkSettings* s = TomahawkSettings::instance(); s->setProxyHost( ui->hostLineEdit->text() ); - + int port = ui->portSpinBox->value(); s->setProxyPort( port ); s->setProxyNoProxyHosts( ui->noHostLineEdit->text() ); @@ -700,10 +741,10 @@ ProxyDialog::saveSettings() s->setProxyPassword( ui->passwordLineEdit->text() ); s->setProxyType( ui->typeBox->itemData( ui->typeBox->currentIndex() ).toInt() ); s->setProxyDns( ui->checkBoxUseProxyForDns->checkState() == Qt::Checked ); - + if( s->proxyHost().isEmpty() ) return; - + TomahawkUtils::NetworkProxyFactory* proxyFactory = new TomahawkUtils::NetworkProxyFactory(); QNetworkProxy proxy( static_cast<QNetworkProxy::ProxyType>(s->proxyType()), s->proxyHost(), s->proxyPort(), s->proxyUsername(), s->proxyPassword() ); proxyFactory->setProxy( proxy ); diff --git a/src/settingsdialog.h b/src/settingsdialog.h index 78e1f55e3..5cebb30a1 100644 --- a/src/settingsdialog.h +++ b/src/settingsdialog.h @@ -48,7 +48,7 @@ public: private slots: void proxyTypeChangedSlot( int index ); - + private: Ui::ProxyDialog* ui; QHash<int,int> m_forwardMap; @@ -95,12 +95,14 @@ private slots: // dialog slots void resolverConfigClosed( int value ); void sipConfigClosed( int value ); + void sipCreateConfigClosed( int value ); void changePage( QListWidgetItem*, QListWidgetItem* ); private: void createIcons(); void setupSipButtons(); + void handleSipPluginAdded( SipPlugin* p, bool added ); Ui_StackedSettingsDialog* ui;