closes #20, closes #21, closes #17

This commit is contained in:
Marc Wäckerlin
2011-01-19 15:04:11 +00:00
parent fbf345e75c
commit b8cb4c1489
11 changed files with 3065 additions and 498 deletions

View File

@@ -0,0 +1,212 @@
/*! @file
@id $Id$
*/
// 1 2 3 4 5 6 7 8
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
#include <ui_settings.h>
#include <QtWebKit/QWebSettings>
#include <QtCore/QSettings>
#include <QtCore/QMap>
#include <QtCore/QList>
#include <QtGui/QLineEdit>
#include <QtCore/QDebug>
#ifndef LOG
#define LOG qDebug()<<__PRETTY_FUNCTION__
#endif
class Settings: public QDialog, protected Ui::Settings {
Q_OBJECT;
public:
typedef QMap<QString, QVariant> MimeTypes;
public:
Settings(MimeTypes mimetypes, QWidget* p=0,
QSettings* settings=0, bool autoWrite=true):
QDialog(p), _settings(settings),
_autoWrite(autoWrite), _mimetypes(mimetypes) {
setupUi(this);
_attributes[QWebSettings::AutoLoadImages] =
_settingAutoLoadImages;
_attributes[QWebSettings::DnsPrefetchEnabled] =
_settingDnsPrefetchEnabled;
_attributes[QWebSettings::JavascriptEnabled] =
_settingJavascriptEnabled;
_attributes[QWebSettings::JavaEnabled] =
_settingJavaEnabled;
_attributes[QWebSettings::PluginsEnabled] =
_settingPluginsEnabled;
_attributes[QWebSettings::PrivateBrowsingEnabled] =
_settingPrivateBrowsingEnabled;
_attributes[QWebSettings::JavascriptCanOpenWindows] =
_settingJavascriptCanOpenWindows;
_attributes[QWebSettings::JavascriptCanAccessClipboard] =
_settingJavascriptCanAccessClipboard;
_attributes[QWebSettings::DeveloperExtrasEnabled] =
_settingDeveloperExtrasEnabled;
_attributes[QWebSettings::SpatialNavigationEnabled] =
_settingSpatialNavigationEnabled;
_attributes[QWebSettings::LinksIncludedInFocusChain] =
_settingLinksIncludedInFocusChain;
_attributes[QWebSettings::ZoomTextOnly] =
_settingZoomTextOnly;
_attributes[QWebSettings::PrintElementBackgrounds] =
_settingPrintElementBackgrounds;
_attributes[QWebSettings::OfflineStorageDatabaseEnabled] =
_settingOfflineStorageDatabaseEnabled;
_attributes[QWebSettings::OfflineWebApplicationCacheEnabled] =
_settingOfflineWebApplicationCacheEnabled;
_attributes[QWebSettings::LocalStorageEnabled] =
_settingLocalStorageEnabled;
_attributes[QWebSettings::LocalContentCanAccessRemoteUrls] =
_settingLocalContentCanAccessRemoteUrls;
_attributes[QWebSettings::LocalContentCanAccessFileUrls] =
_settingLocalContentCanAccessFileUrls;
_attributes[QWebSettings::XSSAuditingEnabled] =
_settingXSSAuditingEnabled;
_attributes[QWebSettings::AcceleratedCompositingEnabled] =
_settingAcceleratedCompositingEnabled;
_attributes[QWebSettings::TiledBackingStoreEnabled] =
_settingTiledBackingStoreEnabled;
_attributes[QWebSettings::FrameFlatteningEnabled] =
_settingFrameFlatteningEnabled;
_attributes[QWebSettings::SiteSpecificQuirksEnabled] =
_settingSiteSpecificQuirksEnabled;
load(!_mimetypes.size());
on__buttons_rejected();
}
void setSettings(QSettings* settings) {
_settings = settings;
}
void setAttribute(QWebSettings::WebAttribute attr, bool state) {
//LOG;
QWebSettings::globalSettings()->setAttribute(attr, state);
_attributes[attr]->setChecked(state);
}
const MimeTypes& mimetypes() const {
return _mimetypes;
}
bool save() {
LOG;
if (!_settings || !_settings->isWritable()) return false;
// Attributes
for (Attributes::iterator attribute(_attributes.begin());
attribute!=_attributes.end(); ++attribute)
_settings->setValue
(QString("QWebSettings/%1").arg(attribute->first),
QWebSettings::globalSettings()->testAttribute(attribute->first));
// MimeTypes
_settings->setValue("QWebSettings/MimeTypes", _mimetypes);
return true;
}
bool load(bool overwriteMimeTypes=true) {
LOG;
if (!_settings) return false;
// Attributes
for (Attributes::iterator attribute(_attributes.begin());
attribute!=_attributes.end(); ++attribute) {
QVariant val
(_settings->value
(QString("QWebSettings/%1").arg(attribute->first),
QWebSettings::globalSettings()->testAttribute(attribute->first)));
if (val.isValid() && val.canConvert(QVariant::Bool))
setAttribute(attribute->first, val.toBool());
}
// MimeTypes
if (!overwriteMimeTypes) return true;
QVariant val(_settings->value("QWebSettings/MimeTypes"));
if (val.isValid() && val.canConvert(QVariant::Map))
_mimetypes = val.toMap();
return true;
}
private Q_SLOTS:
void on__buttons_accepted() {
LOG;
// Attributes
for (Attributes::iterator attribute(_attributes.begin());
attribute!=_attributes.end(); ++attribute)
QWebSettings::globalSettings()
->setAttribute(attribute->first, attribute->second->isChecked());
// MimeTypes
_mimetypes.clear();
for (int row(_mimeTypeTable->rowCount()); row--;)
_mimetypes[qobject_cast<QLineEdit*>(_mimeTypeTable->cellWidget(row, 0))
->text()] =
QStringList()
<<qobject_cast<QLineEdit*>(_mimeTypeTable->cellWidget(row, 1))
->text()
<<qobject_cast<QLineEdit*>(_mimeTypeTable->cellWidget(row, 2))
->text();
// Save
if (_autoWrite) save();
}
void on__buttons_rejected() {
LOG;
// Attributes
for (Attributes::iterator attribute(_attributes.begin());
attribute!=_attributes.end(); ++attribute)
attribute->second->setChecked
(QWebSettings::globalSettings()->testAttribute(attribute->first));
// MimeTypes
_mimeTypeTable->setRowCount(_mimetypes.size());
_mimeTypeTable->verticalHeader()->show();
_mimeTypeTable->horizontalHeader()->show();
_mimeTypeTable->horizontalHeader()->setStretchLastSection(true);
int row(0);
for (MimeTypes::iterator it(_mimetypes.begin());
it!=_mimetypes.end(); ++it, ++row) {
LOG<<"MimeType:"<<it.key()<<it.value().toStringList();
_mimeTypeTable->setCellWidget
(row, 0, new QLineEdit(it.key()));
_mimeTypeTable->setCellWidget
(row, 1, new QLineEdit(it.value().toStringList().at(0)));
_mimeTypeTable->setCellWidget
(row, 2, new QLineEdit(it.value().toStringList().at(1)));
}
}
void on__addMimeType_pressed() {
_mimeTypeTable->setRowCount(_mimeTypeTable->rowCount()+1);
_mimeTypeTable->setCellWidget(_mimeTypeTable->rowCount()-1, 0,
new QLineEdit);
_mimeTypeTable->setCellWidget(_mimeTypeTable->rowCount()-1, 1,
new QLineEdit);
_mimeTypeTable->setCellWidget(_mimeTypeTable->rowCount()-1, 2,
new QLineEdit);
}
void on__removeMimeType_pressed() {
QList<QTableWidgetSelectionRange> ranges
(_mimeTypeTable->selectedRanges());
if (ranges.isEmpty()) return;
for (int begin(ranges.at(0).topRow()), count(ranges.at(0).rowCount());
count; --count)
_mimeTypeTable->removeRow(begin);
}
private:
typedef std::map<QWebSettings::WebAttribute, QCheckBox*> Attributes ;
Attributes _attributes;
QSettings* _settings;
bool _autoWrite;
MimeTypes _mimetypes;
};