212
swisssurfer/src/settings.hxx
Normal file
212
swisssurfer/src/settings.hxx
Normal 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;
|
||||
|
||||
};
|
Reference in New Issue
Block a user