summaryrefslogtreecommitdiffstats
path: root/kcontrol/konqhtml/domainlistview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kcontrol/konqhtml/domainlistview.cpp')
-rw-r--r--kcontrol/konqhtml/domainlistview.cpp230
1 files changed, 230 insertions, 0 deletions
diff --git a/kcontrol/konqhtml/domainlistview.cpp b/kcontrol/konqhtml/domainlistview.cpp
new file mode 100644
index 000000000..a55221f43
--- /dev/null
+++ b/kcontrol/konqhtml/domainlistview.cpp
@@ -0,0 +1,230 @@
+/*
+ Copyright (c) 2002 Leo Savernik <[email protected]>
+ 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"