summaryrefslogtreecommitdiffstats
path: root/ktalkd/kcmktalkd/forwmachpage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ktalkd/kcmktalkd/forwmachpage.cpp')
-rw-r--r--ktalkd/kcmktalkd/forwmachpage.cpp183
1 files changed, 183 insertions, 0 deletions
diff --git a/ktalkd/kcmktalkd/forwmachpage.cpp b/ktalkd/kcmktalkd/forwmachpage.cpp
new file mode 100644
index 00000000..5d82afed
--- /dev/null
+++ b/ktalkd/kcmktalkd/forwmachpage.cpp
@@ -0,0 +1,183 @@
+/*
+ * forwmachpage.cpp - Forwarding machine settings for KTalkd
+ *
+ * Copyright (C) 1998 David Faure, faure@kde.org
+ *
+ * Requires the Qt widget libraries, available at no cost at
+ * http://www.troll.no/
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "forwmachpage.h"
+
+#include <ksimpleconfig.h>
+#include <klocale.h>
+
+KForwmachPageConfig::KForwmachPageConfig( QWidget *parent, const char* name,
+ KSimpleConfig *_config)
+ : KCModule (parent, name)
+{
+ if (!_config) {
+ delete_config = true;
+ config = new KSimpleConfig("ktalkdrc");
+ }
+ else {
+ delete_config = false;
+ config = _config;
+ }
+ forwmach_cb = new QCheckBox(i18n("Activate &forward"), this);
+ forwmach_cb->adjustSize();
+ address_edit = new QLineEdit(this);
+ address_edit->adjustSize();
+ address_edit->setMinimumWidth(150);
+ address_label = new QLabel(address_edit,i18n("&Destination (user or user@host):"),this);
+ address_label->adjustSize();
+ address_label->setAlignment( ShowPrefix | AlignVCenter );
+
+ method_combo = new QComboBox(this);
+ method_combo->insertItem("FWA");
+ method_combo->insertItem("FWR");
+ method_combo->insertItem("FWT");
+ method_combo->adjustSize();
+ method_combo->setMinimumWidth(80);
+ method_label = new QLabel(method_combo, i18n("Forward &method:"),this);
+ method_label->adjustSize();
+ method_label->setAlignment( ShowPrefix | AlignVCenter );
+
+ expl_label = new QLabel(i18n(
+"FWA: Forward announcement only. Direct connection. Not recommended.\n\
+FWR: Forward all requests, changing info when necessary. Direct connection.\n\
+FWT: Forward all requests and handle the talk request. No direct connection.\n\
+\n\
+Recommended use: FWT if you want to use it behind a firewall (and if ktalkd\n\
+can access both networks). Otherwise choose FWR.\n\
+\n\
+See Help for further explanation.\n\
+"),this);
+ expl_label->adjustSize();
+
+ int h = 10 + forwmach_cb->height() + address_edit->height() +
+ method_combo->height()+expl_label->height()+30;
+ setMinimumSize(400, h); // 400: otherwise, buttons may overlap
+
+ load();
+
+ connect(forwmach_cb, SIGNAL(clicked()), this, SLOT(forwmachOnOff()));
+
+ // emit changed(true) on changes
+ connect(forwmach_cb, SIGNAL(clicked()), this, SLOT(slotChanged()));
+ connect(address_edit, SIGNAL(textChanged(const QString&)), this, SLOT(slotChanged()));
+ connect(method_combo, SIGNAL(activated(int)), this, SLOT(slotChanged()));
+}
+
+KForwmachPageConfig::~KForwmachPageConfig( ) {
+ if (delete_config) delete config;
+
+ /* I've been told that this is not necessary as
+ they will be deleted by Qt. But, well... */
+ delete forwmach_cb;
+ delete address_label;
+ delete address_edit;
+ delete method_label;
+ delete method_combo;
+ delete expl_label;
+}
+
+void KForwmachPageConfig::slotChanged() {
+ emit changed(true);
+}
+
+void KForwmachPageConfig::resizeEvent(QResizeEvent *) {
+ int h_txt = forwmach_cb->height(); // taken for the general label height
+ int h_edt = address_edit->height(); // taken for the general QLineEdit height
+ int spc = h_txt / 3;
+ int w = rect().width();
+
+ int h = 10 + spc*2;
+ forwmach_cb->move(10, h);
+ h += h_txt+spc;
+ address_label->setFixedHeight(h_edt); // same size -> vertical center aligned
+ address_label->move(10, h);
+ int w_label = address_label->width()+20;
+ address_edit->setGeometry(w_label, h, w-w_label-10, h_edt);
+ h += h_edt+spc;
+
+ method_label->setFixedHeight(h_edt); // same size -> vertical center aligned
+ method_label->move(10, h);
+ method_combo->move(w_label, h);
+ h += h_edt+spc;
+
+ expl_label->move(10,h);
+
+}
+
+void KForwmachPageConfig::forwmachOnOff() {
+ bool b = forwmach_cb->isChecked();
+ address_label->setEnabled(b);
+ address_edit->setEnabled(b);
+ method_label->setEnabled(b);
+ method_combo->setEnabled(b);
+ expl_label->setEnabled(b);
+}
+
+void KForwmachPageConfig::defaults() {
+
+ forwmach_cb->setChecked(false);
+ method_combo->setCurrentItem(1);
+ address_edit->setText("");
+
+ // Activate things according to configuration
+ forwmachOnOff();
+
+}
+
+void KForwmachPageConfig::load() {
+
+ config->setGroup("ktalkd");
+
+ QString forward = config->readEntry("Forward","unset");
+ forwmach_cb->setChecked(forward!="unset");
+ if (forward != "unset" )
+ address_edit->setText(forward);
+ else
+ address_edit->setText("");
+
+ QString forwardMethod = config->readEntry("ForwardMethod","FWR");
+ for (int i=0; i<method_combo->count(); i++)
+ if (forwardMethod == method_combo->text(i))
+ method_combo->setCurrentItem(i);
+
+ // Activate things according to configuration
+ forwmachOnOff();
+
+ emit changed(false);
+}
+
+void KForwmachPageConfig::save() {
+
+ config->setGroup("ktalkd");
+
+ if (forwmach_cb->isChecked())
+ {
+ config->writeEntry("Forward",address_edit->text());
+ } else
+ config->deleteEntry("Forward", false /*non localized*/);
+ config->writeEntry("ForwardMethod",method_combo->currentText());
+
+ config->sync();
+}
+
+#include "forwmachpage.moc"