summaryrefslogtreecommitdiffstats
path: root/kcontrol/kio/kproxydlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kcontrol/kio/kproxydlg.cpp')
-rw-r--r--kcontrol/kio/kproxydlg.cpp375
1 files changed, 375 insertions, 0 deletions
diff --git a/kcontrol/kio/kproxydlg.cpp b/kcontrol/kio/kproxydlg.cpp
new file mode 100644
index 000000000..c7f9d7d20
--- /dev/null
+++ b/kcontrol/kio/kproxydlg.cpp
@@ -0,0 +1,375 @@
+/*
+ kproxydlg.cpp - Proxy configuration dialog
+
+ Copyright (C) 2001- Dawit Alemayehu <[email protected]>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License (GPL) version 2 as published by the Free Software
+ Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qregexp.h>
+#include <qcheckbox.h>
+#include <qwhatsthis.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+#include <qtabwidget.h>
+
+#include <klocale.h>
+#include <klineedit.h>
+#include <kmessagebox.h>
+
+#include "ksaveioconfig.h"
+#include "kenvvarproxydlg.h"
+#include "kmanualproxydlg.h"
+
+#include "socks.h"
+#include "kproxydlg.h"
+#include "kproxydlg_ui.h"
+
+KProxyOptions::KProxyOptions (QWidget* parent )
+ :KCModule (parent, "kcmkio")
+{
+ QVBoxLayout *layout = new QVBoxLayout(this);
+
+ mTab = new QTabWidget(this);
+ layout->addWidget(mTab);
+
+ mProxy = new KProxyDialog(mTab);
+ mSocks = new KSocksConfig(mTab);
+
+ mTab->addTab(mProxy, i18n("&Proxy"));
+ mTab->addTab(mSocks, i18n("&SOCKS"));
+
+ connect(mProxy, SIGNAL(changed(bool)), SIGNAL(changed(bool)));
+ connect(mSocks, SIGNAL(changed(bool)), SIGNAL(changed(bool)));
+ connect(mTab, SIGNAL(currentChanged(QWidget *)), SIGNAL(quickHelpChanged()));
+}
+
+KProxyOptions::~KProxyOptions()
+{
+}
+
+void KProxyOptions::load()
+{
+ mProxy->load();
+ mSocks->load();
+}
+
+void KProxyOptions::save()
+{
+ mProxy->save();
+ mSocks->save();
+}
+
+void KProxyOptions::defaults()
+{
+ mProxy->defaults();
+ mSocks->defaults();
+}
+
+QString KProxyOptions::quickHelp() const
+{
+ QWidget *w = mTab->currentPage();
+
+ if (w && w->inherits("KCModule"))
+ {
+ KCModule *m = static_cast<KCModule *>(w);
+ return m->quickHelp();
+ }
+
+ return QString::null;
+}
+
+
+KProxyDialog::KProxyDialog( QWidget* parent)
+ :KCModule( parent, "kcmkio" )
+{
+ QVBoxLayout* mainLayout = new QVBoxLayout( this, KDialog::marginHint(),
+ KDialog::spacingHint() );
+
+ mDlg = new KProxyDialogUI( this );
+ mainLayout->addWidget( mDlg );
+ mainLayout->addStretch();
+
+ // signals and slots connections
+ connect( mDlg->rbNoProxy, SIGNAL( toggled(bool) ),
+ SLOT( slotUseProxyChanged() ) );
+
+ connect( mDlg->rbAutoDiscover, SIGNAL( toggled(bool) ),
+ SLOT( slotChanged() ) );
+ connect( mDlg->rbAutoScript, SIGNAL( toggled(bool) ),
+ SLOT( slotChanged() ) );
+
+ connect( mDlg->rbPrompt, SIGNAL( toggled(bool) ),
+ SLOT( slotChanged() ) );
+ connect( mDlg->rbPresetLogin, SIGNAL( toggled(bool) ),
+ SLOT( slotChanged() ) );
+
+ connect( mDlg->cbPersConn, SIGNAL( toggled(bool) ),
+ SLOT( slotChanged() ) );
+
+ connect( mDlg->location, SIGNAL( textChanged(const QString&) ),
+ SLOT( slotChanged() ) );
+
+ connect( mDlg->pbEnvSetup, SIGNAL( clicked() ), SLOT( setupEnvProxy() ) );
+ connect( mDlg->pbManSetup, SIGNAL( clicked() ), SLOT( setupManProxy() ) );
+
+ load();
+}
+
+KProxyDialog::~KProxyDialog()
+{
+ delete mData;
+ mData = 0;
+}
+
+void KProxyDialog::load()
+{
+ mDefaultData = false;
+ mData = new KProxyData;
+
+ KProtocolManager proto;
+ bool useProxy = proto.useProxy();
+ mData->type = proto.proxyType();
+ mData->proxyList["http"] = proto.proxyFor( "http" );
+ mData->proxyList["https"] = proto.proxyFor( "https" );
+ mData->proxyList["ftp"] = proto.proxyFor( "ftp" );
+ mData->proxyList["script"] = proto.proxyConfigScript();
+ mData->useReverseProxy = proto.useReverseProxy();
+ mData->noProxyFor = QStringList::split( QRegExp("[',''\t'' ']"),
+ proto.noProxyForRaw() );
+
+ mDlg->gbAuth->setEnabled( useProxy );
+ mDlg->gbOptions->setEnabled( useProxy );
+
+ mDlg->cbPersConn->setChecked( proto.persistentProxyConnection() );
+
+ if ( !mData->proxyList["script"].isEmpty() )
+ mDlg->location->lineEdit()->setText( mData->proxyList["script"] );
+
+ switch ( mData->type )
+ {
+ case KProtocolManager::WPADProxy:
+ mDlg->rbAutoDiscover->setChecked( true );
+ break;
+ case KProtocolManager::PACProxy:
+ mDlg->rbAutoScript->setChecked( true );
+ break;
+ case KProtocolManager::ManualProxy:
+ mDlg->rbManual->setChecked( true );
+ break;
+ case KProtocolManager::EnvVarProxy:
+ mDlg->rbEnvVar->setChecked( true );
+ break;
+ case KProtocolManager::NoProxy:
+ default:
+ mDlg->rbNoProxy->setChecked( true );
+ break;
+ }
+
+ switch( proto.proxyAuthMode() )
+ {
+ case KProtocolManager::Prompt:
+ mDlg->rbPrompt->setChecked( true );
+ break;
+ case KProtocolManager::Automatic:
+ mDlg->rbPresetLogin->setChecked( true );
+ default:
+ break;
+ }
+}
+
+void KProxyDialog::save()
+{
+ bool updateProxyScout = false;
+
+ if (mDefaultData)
+ mData->reset ();
+
+ if ( mDlg->rbNoProxy->isChecked() )
+ {
+ KSaveIOConfig::setProxyType( KProtocolManager::NoProxy );
+ }
+ else
+ {
+ if ( mDlg->rbAutoDiscover->isChecked() )
+ {
+ KSaveIOConfig::setProxyType( KProtocolManager::WPADProxy );
+ updateProxyScout = true;
+ }
+ else if ( mDlg->rbAutoScript->isChecked() )
+ {
+ KURL u( mDlg->location->lineEdit()->text() );
+
+ if ( !u.isValid() )
+ {
+ showInvalidMessage( i18n("The address of the automatic proxy "
+ "configuration script is invalid. Please "
+ "correct this problem before proceeding. "
+ "Otherwise, your changes you will be "
+ "ignored.") );
+ return;
+ }
+ else
+ {
+ KSaveIOConfig::setProxyType( KProtocolManager::PACProxy );
+ mData->proxyList["script"] = u.url();
+ updateProxyScout = true;
+ }
+ }
+ else if ( mDlg->rbManual->isChecked() )
+ {
+ if ( mData->type != KProtocolManager::ManualProxy )
+ {
+ // Let's try a bit harder to determine if the previous
+ // proxy setting was indeed a manual proxy
+ KURL u ( mData->proxyList["http"] );
+ bool validProxy = (u.isValid() && u.port() != 0);
+ u= mData->proxyList["https"];
+ validProxy |= (u.isValid() && u.port() != 0);
+ u= mData->proxyList["ftp"];
+ validProxy |= (u.isValid() && u.port() != 0);
+
+ if (!validProxy)
+ {
+ showInvalidMessage();
+ return;
+ }
+
+ mData->type = KProtocolManager::ManualProxy;
+ }
+
+ KSaveIOConfig::setProxyType( KProtocolManager::ManualProxy );
+ }
+ else if ( mDlg->rbEnvVar->isChecked() )
+ {
+ if ( mData->type != KProtocolManager::EnvVarProxy )
+ {
+ showInvalidMessage();
+ return;
+ }
+
+ KSaveIOConfig::setProxyType( KProtocolManager::EnvVarProxy );
+ }
+
+ if ( mDlg->rbPrompt->isChecked() )
+ KSaveIOConfig::setProxyAuthMode( KProtocolManager::Prompt );
+ else if ( mDlg->rbPresetLogin->isChecked() )
+ KSaveIOConfig::setProxyAuthMode( KProtocolManager::Automatic );
+ }
+
+ KSaveIOConfig::setPersistentProxyConnection( mDlg->cbPersConn->isChecked() );
+
+ // Save the common proxy setting...
+ KSaveIOConfig::setProxyFor( "ftp", mData->proxyList["ftp"] );
+ KSaveIOConfig::setProxyFor( "http", mData->proxyList["http"] );
+ KSaveIOConfig::setProxyFor( "https", mData->proxyList["https"] );
+
+ KSaveIOConfig::setProxyConfigScript( mData->proxyList["script"] );
+ KSaveIOConfig::setUseReverseProxy( mData->useReverseProxy );
+ KSaveIOConfig::setNoProxyFor( mData->noProxyFor.join(",") );
+
+
+ KSaveIOConfig::updateRunningIOSlaves (this);
+ if ( updateProxyScout )
+ KSaveIOConfig::updateProxyScout( this );
+
+ emit changed( false );
+}
+
+void KProxyDialog::defaults()
+{
+ mDefaultData = true;
+ mDlg->rbNoProxy->setChecked( true );
+ mDlg->location->lineEdit()->clear();
+ mDlg->cbPersConn->setChecked( false );
+ emit changed( true );
+}
+
+void KProxyDialog::setupManProxy()
+{
+ KManualProxyDlg dlgManual( this );
+
+ dlgManual.setProxyData( *mData );
+
+ if ( dlgManual.exec() == QDialog::Accepted )
+ {
+ *mData = dlgManual.data();
+ mDlg->rbManual->setChecked(true);
+ emit changed( true );
+ }
+}
+
+void KProxyDialog::setupEnvProxy()
+{
+ KEnvVarProxyDlg dlgEnv( this );
+
+ dlgEnv.setProxyData( *mData );
+
+ if ( dlgEnv.exec() == QDialog::Accepted )
+ {
+ *mData = dlgEnv.data();
+ mDlg->rbEnvVar->setChecked(true);
+ emit changed( true );
+ }
+}
+
+void KProxyDialog::slotChanged()
+{
+ mDefaultData = false;
+ emit changed( true );
+}
+
+void KProxyDialog::slotUseProxyChanged()
+{
+ mDefaultData = false;
+ bool useProxy = !(mDlg->rbNoProxy->isChecked());
+ mDlg->gbAuth->setEnabled(useProxy);
+ mDlg->gbOptions->setEnabled(useProxy);
+ emit changed( true );
+}
+
+QString KProxyDialog::quickHelp() const
+{
+ return i18n( "<h1>Proxy</h1>"
+ "<p>A proxy server is an intermediate program that sits between "
+ "your machine and the Internet and provides services such as "
+ "web page caching and/or filtering.</p>"
+ "<p>Caching proxy servers give you faster access to sites you have "
+ "already visited by locally storing or caching the content of those "
+ "pages; filtering proxy servers, on the other hand, provide the "
+ "ability to block out requests for ads, spam, or anything else you "
+ "want to block.</p>"
+ "<p><u>Note:</u> Some proxy servers provide both services.</p>" );
+}
+
+void KProxyDialog::showInvalidMessage( const QString& _msg )
+{
+ QString msg;
+
+ if( !_msg.isEmpty() )
+ msg = _msg;
+ else
+ msg = i18n( "<qt>The proxy settings you specified are invalid."
+ "<p>Please click on the <b>Setup...</b> "
+ "button and correct the problem before proceeding; "
+ "otherwise your changes will be ignored.</qt>" );
+
+ KMessageBox::error( this, msg, i18n("Invalid Proxy Setup") );
+}
+
+#include "kproxydlg.moc"