3
Copyright (c) Kalle Dalheimer <kalle@kde.org> 1997
4
Copyright (c) David Faure <faure@kde.org> 1998
5
Copyright (c) Dirk Mueller <mueller@kde.org> 2000
7
Completely re-written by:
8
Copyright (C) 2000- Dawit Alemayehu <adawit@kde.org>
10
This library is free software; you can redistribute it and/or
11
modify it under the terms of the GNU General Public License (GPL)
12
version 2 as published by the Free Software Foundation.
14
This library is distributed in the hope that it will be useful,
15
but WITHOUT ANY WARRANTY; without even the implied warranty of
16
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
Library General Public License for more details.
19
You should have received a copy of the GNU General Public License
20
along with this library; see the file COPYING.LIB. If not, write to
21
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22
Boston, MA 02110-1301, USA.
26
#include "useragentdlg.h"
29
#include "ksaveioconfig.h"
30
#include "useragentinfo.h"
31
#include "useragentselectordlg.h"
34
#include <QtGui/QLayout>
35
#include <QtGui/QCheckBox>
36
#include <QtGui/QLineEdit>
37
#include <QtGui/QPushButton>
38
#include <QtGui/QBoxLayout>
39
#include <QtGui/QTreeWidget>
45
#include <kmessagebox.h>
46
#include <kio/http_slave_defaults.h>
47
#include <kgenericfactory.h>
50
K_PLUGIN_FACTORY_DECLARATION(KioConfigFactory)
52
typedef QList<QTreeWidgetItem*> SiteList;
53
typedef SiteList::iterator SiteListIterator;
55
UserAgentDlg::UserAgentDlg(QWidget *parent, const QVariantList &)
56
:KCModule(KioConfigFactory::componentData(), parent),
61
ui.newButton->setIcon(KIcon("list-add"));
62
ui.changeButton->setIcon(KIcon("edit-rename"));
63
ui.deleteButton->setIcon(KIcon("list-remove"));
64
ui.deleteAllButton->setIcon(KIcon("edit-delete"));
67
UserAgentDlg::~UserAgentDlg()
69
delete m_userAgentInfo;
73
void UserAgentDlg::on_sendUACheckBox_clicked()
78
void UserAgentDlg::on_newButton_clicked()
80
const QPointer<UserAgentSelectorDlg> pdlg( new UserAgentSelectorDlg( i18n("Add Identification"), m_userAgentInfo, this ) );
82
if ( pdlg->exec() == QDialog::Accepted && pdlg )
84
if ( !handleDuplicate( pdlg->siteName(), pdlg->identity(), pdlg->alias() ) )
86
QTreeWidgetItem* item = new QTreeWidgetItem( ui.sitePolicyTreeWidget);
87
item->setText(0, pdlg->siteName());
88
item->setText(1, pdlg->identity());
89
item->setText(2, pdlg->alias());
90
ui.sitePolicyTreeWidget->setCurrentItem( item );
97
void UserAgentDlg::on_changeButton_clicked()
99
on_sitePolicyTreeWidget_itemDoubleClicked(ui.sitePolicyTreeWidget->currentItem(), -1);
102
void UserAgentDlg::on_deleteButton_clicked()
104
SiteList selectedItems = ui.sitePolicyTreeWidget->selectedItems();
105
SiteListIterator endIt = selectedItems.end();
108
for(SiteListIterator it = selectedItems.begin(); it != endIt; ++it)
115
void UserAgentDlg::on_deleteAllButton_clicked()
117
ui.sitePolicyTreeWidget->clear();
122
void UserAgentDlg::on_osNameCheckBox_clicked()
124
changeDefaultUAModifiers();
127
void UserAgentDlg::on_osVersionCheckBox_clicked()
129
changeDefaultUAModifiers();
132
void UserAgentDlg::on_platformCheckBox_clicked()
134
changeDefaultUAModifiers();
137
void UserAgentDlg::on_processorTypeCheckBox_clicked()
139
changeDefaultUAModifiers();
142
void UserAgentDlg::on_languageCheckBox_clicked()
144
changeDefaultUAModifiers();
147
void UserAgentDlg::on_sitePolicyTreeWidget_itemDoubleClicked(QTreeWidgetItem* item, int)
151
// Store the current site name...
152
const QString currentSiteName = item->text(0);
154
UserAgentSelectorDlg pdlg ( i18n("Modify Identification"), m_userAgentInfo, this );
155
pdlg.setSiteName( currentSiteName );
156
pdlg.setIdentity( item->text(1) );
158
if ( pdlg.exec() == QDialog::Accepted )
160
if ( pdlg.siteName() == currentSiteName ||
161
!handleDuplicate( pdlg.siteName(), pdlg.identity(), pdlg.alias() ) )
163
item->setText( 0, pdlg.siteName() );
164
item->setText( 1, pdlg.identity() );
165
item->setText( 2, pdlg.alias() );
172
void UserAgentDlg::changeDefaultUAModifiers()
174
m_ua_keys = ':'; // Make sure it's not empty
176
if ( ui.osNameCheckBox->isChecked() )
179
if ( ui.osVersionCheckBox->isChecked() )
182
if ( ui.platformCheckBox->isChecked() )
185
if ( ui.processorTypeCheckBox->isChecked() )
188
if ( ui.languageCheckBox->isChecked() )
191
ui.osVersionCheckBox->setEnabled(m_ua_keys.contains('o'));
193
QString modVal = KProtocolManager::defaultUserAgent( m_ua_keys );
194
if ( ui.defaultIdLineEdit->text() != modVal )
196
ui.defaultIdLineEdit->setText(modVal);
201
bool UserAgentDlg::handleDuplicate( const QString& site,
202
const QString& identity,
203
const QString& alias )
205
SiteList list = ui.sitePolicyTreeWidget->findItems(site, Qt::MatchExactly, 0);
209
QString msg = i18n("<qt><center>Found an existing identification for"
210
"<br/><b>%1</b><br/>"
211
"Do you want to replace it?</center>"
213
int res = KMessageBox::warningContinueCancel(this, msg,
214
i18n("Duplicate Identification"),
215
KGuiItem(i18n("Replace")));
216
if ( res == KMessageBox::Continue )
218
list[0]->setText(0, site);
219
list[0]->setText(1, identity);
220
list[0]->setText(2, alias);
230
void UserAgentDlg::configChanged(bool enable)
232
emit changed(enable);
235
void UserAgentDlg::updateButtons()
237
const int selectedItemCount = ui.sitePolicyTreeWidget->selectedItems().count();
238
const bool hasItems = ui.sitePolicyTreeWidget->topLevelItemCount() > 0;
240
ui.changeButton->setEnabled ((hasItems && selectedItemCount == 1));
241
ui.deleteButton->setEnabled ((hasItems && selectedItemCount > 0));
242
ui.deleteAllButton->setEnabled ( hasItems );
245
void UserAgentDlg::on_sitePolicyTreeWidget_itemSelectionChanged()
250
void UserAgentDlg::load()
252
ui.sitePolicyTreeWidget->clear();
255
m_config = new KConfig("kio_httprc", KConfig::NoGlobals);
257
m_config->reparseConfiguration();
259
if (!m_userAgentInfo)
260
m_userAgentInfo = new UserAgentInfo();
262
const QStringList list = m_config->groupList();
263
QStringList::ConstIterator endIt = list.end();
266
for ( QStringList::ConstIterator it = list.begin(); it != endIt; ++it )
268
if ( (*it) == "<default>")
271
KConfigGroup cg(m_config, *it);
272
agentStr = cg.readEntry("UserAgent");
273
if (!agentStr.isEmpty())
275
QTreeWidgetItem* item = new QTreeWidgetItem(ui.sitePolicyTreeWidget);
276
item->setText(0, (*it).toLower());
277
item->setText(1, m_userAgentInfo->aliasStr(agentStr));
278
item->setText(2, agentStr);
282
// Update buttons and checkboxes...
283
KConfigGroup cg2(m_config, QString());
284
bool b = cg2.readEntry("SendUserAgent", true);
285
ui.sendUACheckBox->setChecked( b );
286
m_ua_keys = cg2.readEntry("UserAgentKeys", DEFAULT_USER_AGENT_KEYS).toLower();
287
ui.defaultIdLineEdit->setText( KProtocolManager::defaultUserAgent( m_ua_keys ) );
288
ui.osNameCheckBox->setChecked( m_ua_keys.contains('o') );
289
ui.osVersionCheckBox->setChecked( m_ua_keys.contains('v') );
290
ui.platformCheckBox->setChecked( m_ua_keys.contains('p') );
291
ui.processorTypeCheckBox->setChecked( m_ua_keys.contains('m') );
292
ui.languageCheckBox->setChecked( m_ua_keys.contains('l') );
295
configChanged(false);
298
void UserAgentDlg::defaults()
300
ui.sitePolicyTreeWidget->clear();
301
m_ua_keys = DEFAULT_USER_AGENT_KEYS;
302
ui.defaultIdLineEdit->setText( KProtocolManager::defaultUserAgent(m_ua_keys) );
303
ui.osNameCheckBox->setChecked( m_ua_keys.contains('o') );
304
ui.osVersionCheckBox->setChecked( m_ua_keys.contains('v') );
305
ui.platformCheckBox->setChecked( m_ua_keys.contains('p') );
306
ui.processorTypeCheckBox->setChecked( m_ua_keys.contains('m') );
307
ui.languageCheckBox->setChecked( m_ua_keys.contains('l') );
308
ui.sendUACheckBox->setChecked( true );
314
void UserAgentDlg::save()
318
// Put all the groups except the default into the delete list.
319
QStringList deleteList = m_config->groupList();
321
//Remove all the groups that DO NOT contain a "UserAgent" entry...
322
QStringList::ConstIterator endIt = deleteList.constEnd();
323
for (QStringList::ConstIterator it = deleteList.constBegin(); it != endIt; ++it)
325
if ( (*it) == QLatin1String("<default>") )
328
KConfigGroup cg(m_config, *it);
329
if (!cg.hasKey("UserAgent"))
330
deleteList.removeAll(*it);
334
QTreeWidgetItem* item;
335
int itemCount = ui.sitePolicyTreeWidget->topLevelItemCount();
337
// Save and remove from the delete list all the groups that were
338
// not deleted by the end user.
339
for(int i = 0; i < itemCount; i++)
341
item = ui.sitePolicyTreeWidget->topLevelItem(i);
342
domain = item->text(0);
343
KConfigGroup cg(m_config, domain);
344
cg.writeEntry("UserAgent", item->text(2));
345
deleteList.removeAll(domain);
346
qDebug("UserAgentDlg::save: Removed [%s] from delete list", domain.toLatin1().constData());
349
// Write the global configuration information...
350
KConfigGroup cg(m_config, QString());
351
cg.writeEntry("SendUserAgent", ui.sendUACheckBox->isChecked());
352
cg.writeEntry("UserAgentKeys", m_ua_keys );
354
// Sync up all the changes so far...
357
// If delete list is not empty, delete the specified domains.
358
if (!deleteList.isEmpty())
360
// Remove entries from local file.
361
endIt = deleteList.constEnd();
362
KConfig cfg ("kio_httprc", KConfig::SimpleConfig);
364
for ( QStringList::ConstIterator it = deleteList.constBegin(); it != endIt; ++it )
366
KConfigGroup cg(&cfg, *it);
367
cg.deleteEntry("UserAgent");
368
qDebug("UserAgentDlg::save: Deleting UserAgent of group [%s]", (*it).toLatin1().constData());
369
if (cg.keyList().count() < 1)
373
// Sync up the configuration...
376
// Check everything is gone, reset to blank otherwise.
377
m_config->reparseConfiguration();
378
endIt = deleteList.constEnd();
379
for (QStringList::ConstIterator it = deleteList.constBegin(); it != endIt; ++it )
381
KConfigGroup cg(m_config, *it);
382
if (cg.hasKey("UserAgent"))
383
cg.writeEntry("UserAgent", QString());
386
// Sync up the configuration...
390
KSaveIOConfig::updateRunningIOSlaves (this);
391
configChanged( false );
394
QString UserAgentDlg::quickHelp() const
396
return i18n( "<p><h1>Browser Identification</h1> "
397
"The browser-identification module allows you to have full "
398
"control over how Konqueror will identify itself to web "
399
"sites you browse.</p>"
400
"<p>This ability to fake identification is necessary because "
401
"some web sites do not display properly when they detect that "
402
"they are not talking to current versions of either Netscape "
403
"Navigator or Internet Explorer, even if the browser actually "
404
"supports all the necessary features to render those pages "
406
"For such sites, you can use this feature to try to browse "
407
"them. Please understand that this might not always work, since "
408
"such sites might be using non-standard web protocols and or "
409
"specifications.</p>"
410
"<p><u>NOTE:</u> To obtain specific help on a particular section "
411
"of the dialog box, simply click on the quick help button on "
412
"the window title bar, then click on the section "
413
"for which you are seeking help.</p>" );
416
#include "useragentdlg.moc"