You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdenetwork/ktalkd/kcmktalkd/answmachpage.cpp

266 lines
8.3 KiB

/*
* answmachpage.cpp - Answering 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "answmachpage.h"
#include <ksimpleconfig.h>
#include <stdlib.h>
#include <klocale.h> // for getenv
KAnswmachPageConfig::KAnswmachPageConfig( 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;
}
answmach_cb = new QCheckBox(i18n("&Activate answering machine"), this);
answmach_cb->adjustSize();
mail_edit = new QLineEdit(this);
mail_edit->adjustSize();
mail_edit->setMinimumWidth(150);
mail_label = new QLabel(mail_edit,i18n("&Mail address:"),this);
mail_label->adjustSize();
mail_label->setAlignment( ShowPrefix | AlignVCenter );
subj_edit = new QLineEdit(this);
subj_edit->adjustSize();
subj_edit->setMinimumWidth(150);
subj_label = new QLabel(subj_edit, i18n("Mail s&ubject:"),this);
subj_label->adjustSize();
subj_label->setAlignment( ShowPrefix | AlignVCenter );
subj_tip = new QLabel(i18n("Use %s for the caller name"),this);
subj_tip->setAlignment( ShowPrefix );
head_edit = new QLineEdit(this);
head_edit->adjustSize();
head_edit->setMinimumWidth(150);
head_label = new QLabel(head_edit, i18n("Mail &first line:"),this);
head_label->adjustSize();
head_label->setAlignment( ShowPrefix | AlignVCenter );
head_tip = new QLabel(
i18n("Use first %s for caller name, and second %s for caller hostname"),
this);
head_tip->setAlignment( ShowPrefix );
emptymail_cb = new QCheckBox(i18n("&Receive a mail even if no message left"), this);
emptymail_cb->adjustSize();
msg_ml = new QMultiLineEdit(this);
msg_ml->adjustSize();
msg_ml->setMinimumWidth(150);
msg_label = new QLabel(msg_ml, i18n("&Banner displayed on answering machine startup:"),this);
msg_label->adjustSize();
msg_label->setAlignment( ShowPrefix | AlignVCenter );
int h = 10 + answmach_cb->height() + mail_edit->height() +
subj_edit->height() + subj_tip->height() + head_edit->height()
+ head_tip->height() + emptymail_cb->height() +
msg_label->height() + msg_ml->height() + 30;
setMinimumSize(400, h); // 400 : otherwise, buttons may overlap
msg_default = new QString(i18n("The person you are asking to talk with is not answering.\n"
"Please leave a message to be delivered via email.\n"
"Just start typing and when you have finished, exit normally."));
load();
connect(answmach_cb, SIGNAL(clicked()), this, SLOT(answmachOnOff()));
// Emit changed(true) when anything changes
connect(answmach_cb, SIGNAL(clicked()), this, SLOT(slotChanged()));
connect(mail_edit, SIGNAL(textChanged(const QString&)),
this, SLOT(slotChanged()));
connect(subj_edit, SIGNAL(textChanged(const QString&)),
this, SLOT(slotChanged()));
connect(head_edit, SIGNAL(textChanged(const QString&)),
this, SLOT(slotChanged()));
connect(emptymail_cb, SIGNAL(clicked()), this, SLOT(slotChanged()));
connect(msg_ml, SIGNAL(textChanged()), this, SLOT(slotChanged()));
}
KAnswmachPageConfig::~KAnswmachPageConfig( ) {
if (delete_config) delete config;
delete answmach_cb;
delete mail_label;
delete mail_edit;
delete subj_label;
delete subj_edit;
delete subj_tip;
delete head_label;
delete head_edit;
delete head_tip;
delete emptymail_cb;
delete msg_label;
delete msg_ml;
delete msg_default;
}
void KAnswmachPageConfig::slotChanged() {
emit changed(true);
}
void KAnswmachPageConfig::resizeEvent(QResizeEvent *) {
int h_txt = answmach_cb->height(); // taken for the general label height
int h_edt = mail_edit->height(); // taken for the general QLineEdit height
int spc = h_txt / 3;
int w = rect().width();
int leftedits = mail_label->width();
if ( subj_label->width() > leftedits )
leftedits = subj_label->width();
if ( head_label->width() > leftedits )
leftedits = head_label->width();
leftedits += 20;
int h = 10 + spc*2;
answmach_cb->move(10, h);
h += h_txt+spc;
mail_label->setFixedHeight(h_edt); // same size -> vertical center aligned
mail_label->move(10, h);
mail_edit->setGeometry(leftedits, h, w-leftedits-10, h_edt);
h += h_edt+spc;
subj_label->setFixedHeight(h_edt); // same size -> vertical center aligned
subj_label->move(10, h);
subj_edit->setGeometry(leftedits, h, w-leftedits-10, h_edt);
h += h_edt+spc;
subj_tip->setFixedWidth(w-20);
subj_tip->move(leftedits, h);
h += h_txt+spc;
head_label->setFixedHeight(h_edt); // same size -> vertical center aligned
head_label->move(10, h);
head_edit->setGeometry(leftedits, h, w-leftedits-10, h_edt);
h += h_edt+spc;
head_tip->setFixedWidth(w-20);
head_tip->move(leftedits, h);
h += h_txt+spc;
emptymail_cb->move(10,h);
h += h_txt+spc;
msg_label->move(10, h);
h += h_txt+spc;
msg_ml->setGeometry(10, h, w-20, height() - h - 10);
h += h_edt+spc;
}
void KAnswmachPageConfig::answmachOnOff()
{
bool b = answmach_cb->isChecked();
mail_label->setEnabled(b);
mail_edit->setEnabled(b);
subj_label->setEnabled(b);
subj_edit->setEnabled(b);
subj_tip->setEnabled(b);
head_label->setEnabled(b);
head_edit->setEnabled(b);
head_tip->setEnabled(b);
emptymail_cb->setEnabled(b);
msg_label->setEnabled(b);
msg_ml->setEnabled(b);
}
void KAnswmachPageConfig::defaults() {
answmach_cb->setChecked(true);
mail_edit->setText(getenv("REPLYTO"));
subj_edit->setText(i18n("Message from %s"));
head_edit->setText(i18n("Message left on the answering machine, by %s@%s"));
emptymail_cb->setChecked(true);
msg_ml->setText(*msg_default);
// Activate things according to configuration
answmachOnOff();
}
void KAnswmachPageConfig::load() {
config->setGroup("ktalkd");
answmach_cb->setChecked(config->readBoolEntry("Answmach",true));
mail_edit->setText(config->readEntry("Mail",getenv("REPLYTO")));
subj_edit->setText(config->readEntry("Subj",i18n("Message from %s")));
head_edit->setText(config->readEntry("Head",
i18n("Message left on the answering machine, by %s@%s")));
emptymail_cb->setChecked(config->readBoolEntry("EmptyMail",true));
msg_ml->clear();
char m[]="Msg1"; // used as key to read configuration
QString msg;
while (!(msg=config->readEntry(m)).isNull())
{
msg_ml->append(msg);
++m[3];
}
if (m[3]=='1') // nothing in the config file
msg_ml->setText(*msg_default);
// Activate things according to configuration
answmachOnOff();
emit changed(false);
}
void KAnswmachPageConfig::save() {
config->setGroup("ktalkd");
config->writeEntry("Answmach", answmach_cb->isChecked());
config->writeEntry("Mail",mail_edit->text());
config->writeEntry("Subj",subj_edit->text());
config->writeEntry("Head",head_edit->text());
config->writeEntry("EmptyMail", emptymail_cb->isChecked());
char m[]="Msg1"; // used as key to read configuration
int linenr=0;
QString msg;
while ((linenr<8) && (linenr<msg_ml->numLines()))
{
config->writeEntry(m,msg_ml->textLine(linenr));
++m[3]; ++linenr;
}
config->deleteEntry(m,false/*non localized*/);
// necessary to avoid old msg lines to reappear after
// deleting some.
config->sync();
}
#include "answmachpage.moc"