/*! @file @id $Id$ */ // 1 2 3 4 5 6 7 8 // 45678901234567890123456789012345678901234567890123456789012345678901234567890 #include #include #include #include #include #include #include #ifndef LOG #define LOG qDebug()<<__PRETTY_FUNCTION__ #endif class Settings: public QDialog, protected Ui::Settings { Q_OBJECT; public: typedef QMap 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(_mimeTypeTable->cellWidget(row, 0)) ->text()] = QStringList() <(_mimeTypeTable->cellWidget(row, 1)) ->text() <(_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:"<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 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 Attributes ; Attributes _attributes; QSettings* _settings; bool _autoWrite; MimeTypes _mimetypes; };