diff options
Diffstat (limited to 'kcontrol/kio/socks.cpp')
-rw-r--r-- | kcontrol/kio/socks.cpp | 279 |
1 files changed, 279 insertions, 0 deletions
diff --git a/kcontrol/kio/socks.cpp b/kcontrol/kio/socks.cpp new file mode 100644 index 000000000..9c6678a5d --- /dev/null +++ b/kcontrol/kio/socks.cpp @@ -0,0 +1,279 @@ +/** + * socks.cpp + * + * Copyright (c) 2001 George Staikos <staikos@kde.org> + * Copyright (c) 2001 Daniel Molkentin <molkentin@kde.org> (designer port) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#include <qlayout.h> +#include <qlabel.h> +#include <qvbuttongroup.h> +#include <qcheckbox.h> + +#include <kfiledialog.h> +#include <klistview.h> +#include <kmessagebox.h> +#include <ksocks.h> +#include <kapplication.h> + +#include "socks.h" +#include <kaboutdata.h> + +KSocksConfig::KSocksConfig(QWidget *parent) + : KCModule(parent, "kcmkio") +{ + + KAboutData *about = + new KAboutData(I18N_NOOP("kcmsocks"), I18N_NOOP("KDE SOCKS Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 2001 George Staikos")); + + about->addAuthor("George Staikos", 0, "staikos@kde.org"); + + setAboutData( about ); + + + QVBoxLayout *layout = new QVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint()); + base = new SocksBase(this); + layout->add(base); + + connect(base->_c_enableSocks, SIGNAL(clicked()), this, SLOT(enableChanged())); + connect(base->bg, SIGNAL(clicked(int)), this, SLOT(methodChanged(int))); + + // The custom library + connect(base->_c_customPath, SIGNAL(openFileDialog(KURLRequester *)), this, SLOT(chooseCustomLib(KURLRequester *))); + connect(base->_c_customPath, SIGNAL(textChanged(const QString&)), + this, SLOT(customPathChanged(const QString&))); + + // Additional libpaths + connect(base->_c_newPath, SIGNAL(openFileDialog(KURLRequester *)), this, SLOT(chooseCustomLib(KURLRequester *))); + connect(base->_c_newPath, SIGNAL(returnPressed(const QString&)), + this, SLOT(addThisLibrary(const QString&))); + connect(base->_c_newPath, SIGNAL(textChanged(const QString&)), + this, SLOT(libTextChanged(const QString&))); + connect(base->_c_add, SIGNAL(clicked()), this, SLOT(addLibrary())); + connect(base->_c_remove, SIGNAL(clicked()), this, SLOT(removeLibrary())); + connect(base->_c_libs, SIGNAL(selectionChanged()), this, SLOT(libSelection())); + + // The "Test" button + connect(base->_c_test, SIGNAL(clicked()), this, SLOT(testClicked())); + + // The config backend + load(); +} + +KSocksConfig::~KSocksConfig() +{ +} + +void KSocksConfig::configChanged() +{ + emit changed(true); +} + +void KSocksConfig::enableChanged() +{ + KMessageBox::information(NULL, + i18n("These changes will only apply to newly " + "started applications."), + i18n("SOCKS Support"), + "SOCKSdontshowagain"); + emit changed(true); +} + + +void KSocksConfig::methodChanged(int id) +{ + if (id == 4) { + base->_c_customLabel->setEnabled(true); + base->_c_customPath->setEnabled(true); + } else { + base->_c_customLabel->setEnabled(false); + base->_c_customPath->setEnabled(false); + } + emit changed(true); +} + + +void KSocksConfig::customPathChanged(const QString&) +{ + emit changed(true); +} + + +void KSocksConfig::testClicked() +{ + save(); // we have to save before we can test! Perhaps + // it would be best to warn, though. + + if (KSocks::self()->hasSocks()) { + KMessageBox::information(NULL, + i18n("Success: SOCKS was found and initialized."), + i18n("SOCKS Support")); + // Eventually we could actually attempt to connect to a site here. + } else { + KMessageBox::information(NULL, + i18n("SOCKS could not be loaded."), + i18n("SOCKS Support")); + } + + KSocks::self()->die(); + +} + + +void KSocksConfig::chooseCustomLib(KURLRequester * url) +{ + url->setMode( KFile::Directory ); +/* QString newFile = KFileDialog::getOpenFileName(); + if (newFile.length() > 0) { + base->_c_customPath->setURL(newFile); + emit changed(true); + }*/ +} + + + +void KSocksConfig::libTextChanged(const QString& lib) +{ + if (lib.length() > 0) + base-> _c_add->setEnabled(true); + else base->_c_add->setEnabled(false); +} + + +void KSocksConfig::addThisLibrary(const QString& lib) +{ + if (lib.length() > 0) { + new QListViewItem(base->_c_libs, lib); + base->_c_newPath->clear(); + base->_c_add->setEnabled(false); + base->_c_newPath->setFocus(); + emit changed(true); + } +} + + +void KSocksConfig::addLibrary() +{ + addThisLibrary(base->_c_newPath->url()); +} + + +void KSocksConfig::removeLibrary() +{ + QListViewItem *thisitem = base->_c_libs->selectedItem(); + base->_c_libs->takeItem(thisitem); + delete thisitem; + base->_c_libs->clearSelection(); + base->_c_remove->setEnabled(false); + emit changed(true); +} + + +void KSocksConfig::libSelection() +{ + base->_c_remove->setEnabled(true); +} + + +void KSocksConfig::load() +{ + KConfigGroup config(kapp->config(), "Socks"); + base->_c_enableSocks->setChecked(config.readBoolEntry("SOCKS_enable", false)); + int id = config.readNumEntry("SOCKS_method", 1); + base->bg->setButton(id); + if (id == 4) { + base->_c_customLabel->setEnabled(true); + base->_c_customPath->setEnabled(true); + } else { + base->_c_customLabel->setEnabled(false); + base->_c_customPath->setEnabled(false); + } + base->_c_customPath->setURL(config.readPathEntry("SOCKS_lib")); + + QListViewItem *thisitem; + while ((thisitem = base->_c_libs->firstChild())) { + base->_c_libs->takeItem(thisitem); + delete thisitem; + } + + QStringList libs = config.readPathListEntry("SOCKS_lib_path"); + for(QStringList::Iterator it = libs.begin(); + it != libs.end(); + ++it ) { + new QListViewItem(base->_c_libs, *it); + } + base->_c_libs->clearSelection(); + base->_c_remove->setEnabled(false); + base->_c_add->setEnabled(false); + base->_c_newPath->clear(); + emit changed(false); +} + +void KSocksConfig::save() +{ + KConfigGroup config(kapp->config(), "Socks"); + config.writeEntry("SOCKS_enable",base-> _c_enableSocks->isChecked(), true, true); + config.writeEntry("SOCKS_method", base->bg->id(base->bg->selected()), true, true); + config.writePathEntry("SOCKS_lib", base->_c_customPath->url(), true, true); + QListViewItem *thisitem = base->_c_libs->firstChild(); + + QStringList libs; + while (thisitem) { + libs << thisitem->text(0); + thisitem = thisitem->itemBelow(); + } + config.writePathEntry("SOCKS_lib_path", libs, ',', true, true); + + kapp->config()->sync(); + + emit changed(false); +} + +void KSocksConfig::defaults() +{ + + base->_c_enableSocks->setChecked(false); + base->bg->setButton(1); + base->_c_customLabel->setEnabled(false); + base->_c_customPath->setEnabled(false); + base->_c_customPath->setURL(""); + QListViewItem *thisitem; + while ((thisitem = base->_c_libs->firstChild())) { + base->_c_libs->takeItem(thisitem); + delete thisitem; + } + base->_c_newPath->clear(); + base->_c_add->setEnabled(false); + base->_c_remove->setEnabled(false); + emit changed(true); +} + +QString KSocksConfig::quickHelp() const +{ + return i18n("<h1>SOCKS</h1><p>This module allows you to configure KDE support" + " for a SOCKS server or proxy.</p><p>SOCKS is a protocol to traverse firewalls" + " as described in <a href=\"http://rfc.net/rfc1928.html\">RFC 1928</a>." + " <p>If you have no idea what this is and if your system administrator does not" + " tell you to use it, leave it disabled.</p>"); +} + + +#include "socks.moc" + |