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.
tdebase/kcontrol/konqhtml/domainlistview.cpp

231 lines
7.6 KiB

/*
Copyright (c) 2002 Leo Savernik <l.savernik@aon.at>
Derived from jsopts.cpp and javaopts.cpp, code copied from there is
copyrighted to its respective owners.
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 <qpushbutton.h>
#include <qwhatsthis.h>
#include <kconfig.h>
#include <klistview.h>
#include <klocale.h>
#include <kmessagebox.h>
#include "domainlistview.h"
#include "policies.h"
#include "policydlg.h"
DomainListView::DomainListView(KConfig *config,const QString &title,
QWidget *parent,const char *name) :
QGroupBox(title, parent, name), config(config) {
setColumnLayout(0, Qt::Vertical);
layout()->setSpacing(0);
layout()->setMargin(0);
QGridLayout* thisLayout = new QGridLayout(layout());
thisLayout->setAlignment(Qt::AlignTop);
thisLayout->setSpacing(KDialog::spacingHint());
thisLayout->setMargin(KDialog::marginHint());
domainSpecificLV = new KListView(this);
domainSpecificLV->addColumn(i18n("Host/Domain"));
domainSpecificLV->addColumn(i18n("Policy"), 100);
connect(domainSpecificLV,SIGNAL(doubleClicked(QListViewItem *)), SLOT(changePressed()));
connect(domainSpecificLV,SIGNAL(returnPressed(QListViewItem *)), SLOT(changePressed()));
connect(domainSpecificLV, SIGNAL( executed( QListViewItem *)), SLOT( updateButton()));
connect(domainSpecificLV, SIGNAL(selectionChanged()), SLOT(updateButton()));
thisLayout->addMultiCellWidget(domainSpecificLV, 0, 5, 0, 0);
addDomainPB = new QPushButton(i18n("&New..."), this);
thisLayout->addWidget(addDomainPB, 0, 1);
connect(addDomainPB, SIGNAL(clicked()), SLOT(addPressed()));
changeDomainPB = new QPushButton( i18n("Chan&ge..."), this);
thisLayout->addWidget(changeDomainPB, 1, 1);
connect(changeDomainPB, SIGNAL(clicked()), this, SLOT(changePressed()));
deleteDomainPB = new QPushButton(i18n("De&lete"), this);
thisLayout->addWidget(deleteDomainPB, 2, 1);
connect(deleteDomainPB, SIGNAL(clicked()), this, SLOT(deletePressed()));
importDomainPB = new QPushButton(i18n("&Import..."), this);
thisLayout->addWidget(importDomainPB, 3, 1);
connect(importDomainPB, SIGNAL(clicked()), this, SLOT(importPressed()));
importDomainPB->setEnabled(false);
importDomainPB->hide();
exportDomainPB = new QPushButton(i18n("&Export..."), this);
thisLayout->addWidget(exportDomainPB, 4, 1);
connect(exportDomainPB, SIGNAL(clicked()), this, SLOT(exportPressed()));
exportDomainPB->setEnabled(false);
exportDomainPB->hide();
QSpacerItem* spacer = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding);
thisLayout->addItem(spacer, 5, 1);
QWhatsThis::add( addDomainPB, i18n("Click on this button to manually add a host or domain "
"specific policy.") );
QWhatsThis::add( changeDomainPB, i18n("Click on this button to change the policy for the "
"host or domain selected in the list box.") );
QWhatsThis::add( deleteDomainPB, i18n("Click on this button to delete the policy for the "
"host or domain selected in the list box.") );
updateButton();
}
DomainListView::~DomainListView() {
// free all policies
DomainPolicyMap::Iterator it = domainPolicies.begin();
for (; it != domainPolicies.end(); ++it) {
delete it.data();
}/*next it*/
}
void DomainListView::updateButton()
{
QListViewItem *index = domainSpecificLV->currentItem();
bool enable = ( index != 0 );
changeDomainPB->setEnabled( enable );
deleteDomainPB->setEnabled( enable );
}
void DomainListView::addPressed()
{
// JavaPolicies pol_copy(m_pConfig,m_groupname,false);
Policies *pol = createPolicies();
pol->defaults();
PolicyDialog pDlg(pol, this);
setupPolicyDlg(AddButton,pDlg,pol);
if( pDlg.exec() ) {
QListViewItem* index = new QListViewItem( domainSpecificLV, pDlg.domain(),
pDlg.featureEnabledPolicyText() );
pol->setDomain(pDlg.domain());
domainPolicies.insert(index, pol);
domainSpecificLV->setCurrentItem( index );
emit changed(true);
} else {
delete pol;
}
updateButton();
}
void DomainListView::changePressed()
{
QListViewItem *index = domainSpecificLV->currentItem();
if ( index == 0 )
{
KMessageBox::information( 0, i18n("You must first select a policy to be changed." ) );
return;
}
Policies *pol = domainPolicies[index];
// This must be copied because the policy dialog is allowed to change
// the data even if the changes are rejected in the end.
Policies *pol_copy = copyPolicies(pol);
PolicyDialog pDlg( pol_copy, this );
pDlg.setDisableEdit( true, index->text(0) );
setupPolicyDlg(ChangeButton,pDlg,pol_copy);
if( pDlg.exec() )
{
pol_copy->setDomain(pDlg.domain());
domainPolicies[index] = pol_copy;
pol_copy = pol;
index->setText(0, pDlg.domain() );
index->setText(1, pDlg.featureEnabledPolicyText());
emit changed(true);
}
delete pol_copy;
}
void DomainListView::deletePressed()
{
QListViewItem *index = domainSpecificLV->currentItem();
if ( index == 0 )
{
KMessageBox::information( 0, i18n("You must first select a policy to delete." ) );
return;
}
DomainPolicyMap::Iterator it = domainPolicies.find(index);
if (it != domainPolicies.end()) {
delete it.data();
domainPolicies.remove(it);
delete index;
emit changed(true);
}
updateButton();
}
void DomainListView::importPressed()
{
// PENDING(kalle) Implement this.
}
void DomainListView::exportPressed()
{
// PENDING(kalle) Implement this.
}
void DomainListView::initialize(const QStringList &domainList)
{
domainSpecificLV->clear();
domainPolicies.clear();
// JavaPolicies pol(m_pConfig,m_groupname,false);
for (QStringList::ConstIterator it = domainList.begin();
it != domainList.end(); ++it) {
QString domain = *it;
Policies *pol = createPolicies();
pol->setDomain(domain);
pol->load();
QString policy;
if (pol->isFeatureEnabledPolicyInherited())
policy = i18n("Use Global");
else if (pol->isFeatureEnabled())
policy = i18n("Accept");
else
policy = i18n("Reject");
QListViewItem *index =
new QListViewItem( domainSpecificLV, domain, policy );
domainPolicies[index] = pol;
}
}
void DomainListView::save(const QString &group, const QString &domainListKey) {
QStringList domainList;
DomainPolicyMap::Iterator it = domainPolicies.begin();
for (; it != domainPolicies.end(); ++it) {
QListViewItem *current = it.key();
Policies *pol = it.data();
pol->save();
domainList.append(current->text(0));
}
config->setGroup(group);
config->writeEntry(domainListKey, domainList);
}
void DomainListView::setupPolicyDlg(PushButton /*trigger*/,
PolicyDialog &/*pDlg*/,Policies */*copy*/) {
// do nothing
}
#include "domainlistview.moc"