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.
 
 
 

470 lines
14 KiB

#include <qlabel.h>
#include <qpushbt.h>
#include <qfiledlg.h>
#include <qframe.h>
#include <kmsgbox.h>
#include "util.h"
#include "kmmainwin.h"
#include "kmsettings.moc"
KMAccountSettings::KMAccountSettings(QWidget *parent=0,const char *name,KMAccount *a) : QDialog(parent,name,TRUE) {
QString s;
int i;
account=a;
QLabel *label;
label = new QLabel(this);
label->setGeometry(25,20,75,25);
label->setText("Name");
label->setAlignment(290);
nameEdit = new QLineEdit(this);
nameEdit->setGeometry(110,20,220,25);
nameEdit->setFocus();
if (a->name!=".temp") nameEdit->setText(a->name);
label = new QLabel(this);
label->setGeometry(20,55,80,25);
label->setText("Access via");
label->setAlignment(290);
typeList = new QComboBox(FALSE,this);
typeList->setGeometry(110,55,100,25);
typeList->insertItem("Local Inbox");
typeList->insertItem("IMAP");
typeList->insertItem("POP3");
connect(typeList,SIGNAL(activated(int)),this,SLOT(typeSelected(int)));
QFrame *frame;
frame = new QFrame(this);
frame->setGeometry(425,0,15,305);
frame->setFrameStyle(QFrame::VLine | QFrame::Sunken);
QPushButton *button;
button = new QPushButton(this);
button->setGeometry(445,15,100,30);
button->setText("OK");
connect(button,SIGNAL(clicked()),this,SLOT(accept()));
button = new QPushButton(this);
button->setGeometry(445,60,100,30);
button->setText("Cancel");
connect(button,SIGNAL(clicked()),this,SLOT(reject()));
local = new QWidget(this);
local->setGeometry(0,90,430,215);
label = new QLabel(local);
label->setGeometry(10,20,50,25);
label->setText("Location");
label->setAlignment(290);
locationEdit = new QLineEdit(local);
locationEdit->setGeometry(70,20,315,25);
locationEdit->setFocus();
locationEdit->setText(a->config->readEntry("location"));
button=new QPushButton(local);
button->setGeometry(390,20,30,25);
button->setText("...");
connect(button,SIGNAL(clicked()),this,SLOT(chooseLocation()));
remote = new QWidget(this);
remote->setGeometry(0,90,430,215);
label = new QLabel(remote);
label->setGeometry(10,15,60,25);
label->setText("Host");
label->setAlignment(290);
hostEdit = new QLineEdit(remote);
hostEdit->setGeometry(80,15,335,25);
hostEdit->setFocus();
hostEdit->setText(account->config->readEntry("host"));
label = new QLabel(remote);
label->setGeometry(10,50,60,25);
label->setText("Port");
label->setAlignment(290);
portEdit = new QLineEdit(remote);
portEdit->setGeometry(80,50,70,25);
portEdit->setText(account->config->readEntry("port"));
label = new QLabel(remote);
label->setGeometry(20,95,50,25);
label->setText("Mailbox");
label->setAlignment(290);
mailboxEdit = new QLineEdit(remote);
mailboxEdit->setGeometry(80,95,165,25);
mailboxEdit->setText(account->config->readEntry("mailbox"));
label = new QLabel(remote);
label->setGeometry(10,140,60,25);
label->setText("Login");
label->setAlignment(290);
loginEdit = new QLineEdit(remote);
loginEdit->setGeometry(80,140,165,25);
loginEdit->setText(account->config->readEntry("login"));
label = new QLabel(remote);
label->setGeometry(10,175,60,25);
label->setText("Password");
label->setAlignment(290);
passEdit = new QLineEdit(remote);
passEdit->setGeometry(80,175,165,25);
passEdit->setEchoMode(QLineEdit::Password);
passEdit->setText(account->config->readEntry("password"));
QButtonGroup *buttonGroup = new QButtonGroup(remote);
buttonGroup->setGeometry(265,90,150,105);
buttonGroup->setTitle("access method");
accessMethod1 = new QRadioButton(remote);
accessMethod1->setGeometry(275,110,120,25);
accessMethod1->setText("maintain remotely");
buttonGroup->insert(accessMethod1);
accessMethod2 = new QRadioButton(remote);
accessMethod2->setGeometry(275,135,120,25);
accessMethod2->setText("move messages");
buttonGroup->insert(accessMethod2);
accessMethod3 = new QRadioButton(remote);
accessMethod3->setGeometry(275,160,120,25);
accessMethod3->setText("copy messages");
buttonGroup->insert(accessMethod3);
if (account->config->readEntry("access method")=="maintain remotely")
accessMethod1->setChecked(TRUE); else
if (account->config->readEntry("access method")=="move messages")
accessMethod2->setChecked(TRUE); else
if (account->config->readEntry("access method")=="copy messages")
accessMethod3->setChecked(TRUE); else
accessMethod2->setChecked(TRUE);
resize(555,305);
s=a->config->readEntry("type");
if (s=="inbox") i=0; else
if (s=="imap") i=1; else
if (s=="pop3") i=2; else i=0;
typeList->setCurrentItem(i);
changeType(i);
}
void KMAccountSettings::changeType(int index) {
switch (index) {
case 0 : remote->hide();
local->show();
break;
case 1 : local->hide();
remote->show();
mailboxEdit->setEnabled(TRUE);
if (strcmp(portEdit->text(),"")==0) portEdit->setText("143");
break;
case 2 : local->hide();
remote->show();
mailboxEdit->setEnabled(FALSE);
if (strcmp(portEdit->text(),"")==0) portEdit->setText("110");
break;
}
}
void KMAccountSettings::chooseLocation() {
QFileDialog *d=new QFileDialog(".","*",this,NULL,TRUE);
d->setCaption("Choose Location");
if (d->exec()) locationEdit->setText(d->selectedFile());
delete d;
}
void KMAccountSettings::typeSelected(int index) {
changeType(index);
}
void KMAccountSettings::accept() {
account->name=nameEdit->text();
switch (typeList->currentItem()) {
case 0 : account->config->writeEntry("type","inbox");
break;
case 1 : account->config->writeEntry("type","imap");
break;
case 2 : account->config->writeEntry("type","pop3");
break;
}
account->config->writeEntry("location",locationEdit->text());
account->config->writeEntry("host",hostEdit->text());
account->config->writeEntry("port",portEdit->text());
account->config->writeEntry("mailbox",mailboxEdit->text());
account->config->writeEntry("login",loginEdit->text());
account->config->writeEntry("password",passEdit->text());
if (accessMethod1->isChecked())
account->config->writeEntry("access method","maintain remotely"); else
if (accessMethod2->isChecked())
account->config->writeEntry("access method","move messages"); else
if (accessMethod3->isChecked())
account->config->writeEntry("access method","copy messages");
QDialog::accept();
}
KMSettings::KMSettings(QWidget *parent=0,const char *name=0) : QTabDialog(parent,name,TRUE) {
config=KApplication::getKApplication()->getConfig();
setCaption("Settings");
resize(570,545);
setCancelButton();
setDefaultButton();
connect(this,SIGNAL(defaultButtonPressed()),this,SLOT(setDefaults()));
accountMan=new KMAccountMan();
identityTab=new QWidget(this);
QLabel* label;
label = new QLabel(identityTab);
label->setGeometry(30,15,90,25);
label->setText("Name");
label->setAlignment(290);
nameEdit = new QLineEdit(identityTab);
nameEdit->setGeometry(130,15,410,25);
label = new QLabel(identityTab);
label->setGeometry(30,50,90,25);
label->setText("Organization");
label->setAlignment(290);
orgEdit = new QLineEdit(identityTab);
orgEdit->setGeometry(130,50,410,25);
label = new QLabel(identityTab);
label->setGeometry(20,95,100,25);
label->setText("Email Address");
label->setAlignment(290);
emailEdit = new QLineEdit(identityTab);
emailEdit->setGeometry(130,95,410,25);
label = new QLabel(identityTab);
label->setGeometry(10,130,110,25);
label->setText("Reply-To Address");
label->setAlignment(290);
replytoEdit = new QLineEdit(identityTab);
replytoEdit->setGeometry(130,130,410,25);
label = new QLabel(identityTab);
label->setGeometry(30,175,90,25);
label->setText("Signature File");
label->setAlignment(290);
sigEdit = new QLineEdit(identityTab);
sigEdit->setGeometry(130,175,370,25);
QPushButton* button;
button = new QPushButton(identityTab);
button->setGeometry(505,175,35,25);
button->setText("...");
connect(button,SIGNAL(clicked()),this,SLOT(chooseSigFile()));
config->setGroup("Identity");
nameEdit->setText(config->readEntry("Name"));
orgEdit->setText(config->readEntry("Organization"));
emailEdit->setText(config->readEntry("Email Address"));
replytoEdit->setText(config->readEntry("Reply-To Address"));
sigEdit->setText(config->readEntry("Signature File"));
addTab(identityTab,"Identity");
networkTab=new QWidget(this);
outgoingGroup = new QButtonGroup(networkTab);
outgoingGroup->setGeometry(15,15,525,200);
outgoingGroup->setTitle("Outgoing Mail");
sendmailRadio = new QRadioButton(networkTab);
sendmailRadio->setGeometry(35,35,100,25);
sendmailRadio->setText("Sendmail");
label = new QLabel(networkTab);
label->setGeometry(55,65,70,25);
label->setText("Location");
label->setAlignment(290);
sendmailLocationEdit = new QLineEdit(networkTab);
sendmailLocationEdit->setGeometry(135,65,350,25);
button = new QPushButton(networkTab);
button->setGeometry(495,65,30,25);
button->setText("...");
connect(button,SIGNAL(clicked()),this,SLOT(chooseSendmailLocation()));
smtpRadio = new QRadioButton(networkTab);
smtpRadio->setGeometry(35,105,60,25);
smtpRadio->setText("SMTP");
label = new QLabel(networkTab);
label->setGeometry(55,135,70,25);
label->setText("Server");
label->setAlignment(290);
smtpServerEdit = new QLineEdit(networkTab);
smtpServerEdit->setGeometry(135,135,390,25);
label = new QLabel(networkTab);
label->setGeometry(25,175,100,25);
label->setText("Port");
label->setAlignment(290);
smtpPortEdit = new QLineEdit(networkTab);
smtpPortEdit->setGeometry(135,175,70,25);
outgoingGroup->insert(sendmailRadio);
outgoingGroup->insert(smtpRadio);
incomingGroup = new QButtonGroup(networkTab);
incomingGroup->setGeometry(15,230,525,225);
incomingGroup->setTitle("Incoming Mail");
label = new QLabel(networkTab);
label->setGeometry(35,255,100,25);
label->setText("Accounts");
accountList = new QListBox(networkTab);
accountList->setGeometry(35,280,355,160);
connect(accountList,SIGNAL(highlighted(int)),this,SLOT(accountSelected(int)));
connect(accountList,SIGNAL(selected(int)),this,SLOT(modifyAccount(int)));
for (unsigned int i=0;i<accountMan->count();i++)
accountList->inSort(accountMan->at(i)->name);
addButton = new QPushButton(networkTab);
addButton->setGeometry(405,280,120,40);
addButton->setText("Add...");
connect(addButton,SIGNAL(clicked()),this,SLOT(addAccount()));
modifyButton = new QPushButton(networkTab);
modifyButton->setGeometry(405,340,120,40);
modifyButton->setText("Modify...");
modifyButton->setEnabled(FALSE);
connect(modifyButton,SIGNAL(clicked()),this,SLOT(modifyAccount2()));
removeButton = new QPushButton(networkTab);
removeButton->setGeometry(405,400,120,40);
removeButton->setText("Remove");
removeButton->setEnabled(FALSE);
connect(removeButton,SIGNAL(clicked()),this,SLOT(removeAccount()));
config->setGroup("Network");
if (config->readEntry("Outgoing Type")=="Sendmail") sendmailRadio->setChecked(TRUE);
else if (config->readEntry("Outgoing Type")=="SMTP") smtpRadio->setChecked(TRUE);
sendmailLocationEdit->setText(config->readEntry("Sendmail Location"));
smtpServerEdit->setText(config->readEntry("SMTP Server"));
smtpPortEdit->setText(config->readEntry("SMTP Port"));
addTab(networkTab,"Network");
}
KMSettings::~KMSettings() {
delete accountMan;
}
void KMSettings::accountSelected(int) {
modifyButton->setEnabled(TRUE);
removeButton->setEnabled(TRUE);
}
void KMSettings::addAccount() {
KMAccount *a=accountMan->createAccount(QString(".temp"));
KMAccountSettings *d=new KMAccountSettings(this,NULL,a);
d->setCaption("Create Account");
if (d->exec()) {
QString s=a->name;
accountMan->renameAccount(QString(".temp"),s);
// "a" is not longer valid here !!!
accountList->inSort(s);
} else accountMan->removeAccount(QString(".temp"));
delete d;
}
void KMSettings::chooseSendmailLocation() {
QFileDialog *d=new QFileDialog(".","*",this,NULL,TRUE);
d->setCaption("Choose Sendmail Location");
if (d->exec()) sendmailLocationEdit->setText(d->selectedFile());
delete d;
}
void KMSettings::chooseSigFile()
{
QFileDialog *d=new QFileDialog(".","*",this,NULL,TRUE);
d->setCaption("Choose Signature File");
if (d->exec()) sigEdit->setText(d->selectedFile());
delete d;
}
void KMSettings::modifyAccount(int index) {
KMAccount *a=accountMan->findAccount(accountList->text(index));
QString s=a->name;
KMAccountSettings *d=new KMAccountSettings(this,NULL,a);
d->setCaption("Modify Account");
if ((d->exec()) && (s!=a->name)) {
QString t=a->name;
accountMan->renameAccount(s,t);
accountList->removeItem(index);
accountList->inSort(t);
}
delete d;
}
void KMSettings::modifyAccount2() {
modifyAccount(accountList->currentItem());
}
void KMSettings::removeAccount() {
QString s,t;
s=accountList->text(accountList->currentItem());
t="Are you sure you want to remove the account \"";
t+=s; t+="\" ?";
if ((KMsgBox::yesNo(this,"Confirmation",t))==1) {
accountMan->removeAccount(s);
accountList->removeItem(accountList->currentItem());
if (!accountList->count()) {
modifyButton->setEnabled(FALSE);
removeButton->setEnabled(FALSE);
}
}
}
void KMSettings::setDefaults()
{
QString s="";
s.append(QDir::home().path());
sigEdit->setText(s+"/.signature");
sendmailRadio->setChecked(TRUE);
sendmailLocationEdit->setText("/usr/sbin/sendmail");
smtpRadio->setChecked(FALSE);
smtpPortEdit->setText("25");
}
void KMSettings::done(int r)
{
QTabDialog::done(r);
if (r) {
config->setGroup("Identity");
config->writeEntry("Name",nameEdit->text());
config->writeEntry("Organization",orgEdit->text());
config->writeEntry("Email Address",emailEdit->text());
config->writeEntry("Reply-To Address",replytoEdit->text());
config->writeEntry("Signature File",sigEdit->text());
config->setGroup("Network");
if (sendmailRadio->isChecked()) config->writeEntry("Outgoing Type","Sendmail");
else if (smtpRadio->isChecked()) config->writeEntry("Outgoing Type","SMTP");
config->writeEntry("Sendmail Location",sendmailLocationEdit->text());
config->writeEntry("SMTP Server",smtpServerEdit->text());
config->writeEntry("SMTP Port",smtpPortEdit->text());
}
}