Unknown filetypes show a dialog where the user can choose between «save as» and «open with». If there is a plugin handler, we catch it and decide whether to pass to the plugin-handler or to handle it ourself (we do so, if the mime type is registered, otherwise we pass to the plugin handler). If the mimetype is known and registered, we launch the configured application, otherwise we show th edialog mentioned above.; refs #79
This commit is contained in:
371
src/qbrowserlib/settings.hxx
Normal file
371
src/qbrowserlib/settings.hxx
Normal file
@@ -0,0 +1,371 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id$
|
||||
*/
|
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#ifndef QBROWSERLIB_SETTINGS_HXX
|
||||
#define QBROWSERLIB_SETTINGS_HXX
|
||||
|
||||
#include <qbrowserlib/ui_settings.h>
|
||||
|
||||
#include <QtWebKit/QWebSettings>
|
||||
#include <QtCore/QSettings>
|
||||
#include <QtCore/QMap>
|
||||
#include <QtCore/QList>
|
||||
#include <QtGui/QLineEdit>
|
||||
|
||||
#include <cassert>
|
||||
#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;
|
||||
typedef QMap<QString, QVariant> SearchEngines;
|
||||
|
||||
Q_SIGNALS:
|
||||
|
||||
void newSettings();
|
||||
|
||||
public:
|
||||
|
||||
Settings(MimeTypes mimetypes, QWidget* p=0,
|
||||
QSettings* settings=0, bool autoWrite=true):
|
||||
QDialog(p), _settings(settings),
|
||||
_autoWrite(autoWrite), _mimetypes(mimetypes) {
|
||||
|
||||
setupUi(this);
|
||||
|
||||
// Web Attributes
|
||||
_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;
|
||||
// not in qt 4.7.0 (mac)
|
||||
// _attributes[QWebSettings::XSSAuditingEnabled] =
|
||||
// _settingXSSAuditingEnabled;
|
||||
_attributes[QWebSettings::AcceleratedCompositingEnabled] =
|
||||
_settingAcceleratedCompositingEnabled;
|
||||
_attributes[QWebSettings::TiledBackingStoreEnabled] =
|
||||
_settingTiledBackingStoreEnabled;
|
||||
_attributes[QWebSettings::FrameFlatteningEnabled] =
|
||||
_settingFrameFlatteningEnabled;
|
||||
// not in qt 4.7.0 (mac)
|
||||
// _attributes[QWebSettings::SiteSpecificQuirksEnabled] =
|
||||
// _settingSiteSpecificQuirksEnabled;
|
||||
|
||||
// CheckBoxes
|
||||
_checkboxes["SaveWindowState"] =
|
||||
std::make_pair(_saveWindowState, _saveWindowState->isChecked());
|
||||
_checkboxes["CloseApps"] =
|
||||
std::make_pair(_closeApps, _closeApps->isChecked());
|
||||
|
||||
load(!_mimetypes.size());
|
||||
on__buttons_rejected();
|
||||
}
|
||||
|
||||
void setSettings(QSettings* settings) {
|
||||
_settings = settings;
|
||||
}
|
||||
|
||||
QSettings* operator()() {
|
||||
return _settings;
|
||||
}
|
||||
|
||||
void setAttribute(QWebSettings::WebAttribute attr, bool state) {
|
||||
//LOG;
|
||||
QWebSettings::globalSettings()->setAttribute(attr, state);
|
||||
_attributes[attr]->setChecked(state);
|
||||
}
|
||||
|
||||
bool flag(const QString& name) {
|
||||
assert(_checkboxes.find(name)!=_checkboxes.end());
|
||||
return _checkboxes[name].second;
|
||||
}
|
||||
|
||||
const QString& text(const QString& name) {
|
||||
assert(_lineedits.find(name)!=_lineedits.end());
|
||||
return _lineedits[name].second;
|
||||
}
|
||||
|
||||
const MimeTypes& mimetypes() const {
|
||||
return _mimetypes;
|
||||
}
|
||||
|
||||
QStringList mimetype(QString mimetype, QString filename) const {
|
||||
Settings::MimeTypes::const_iterator
|
||||
it(_mimetypes.find(mimetype.split(';')[0]));
|
||||
if (it!=_mimetypes.end()) return it.value().toStringList();
|
||||
for (it=_mimetypes.begin(); it!=_mimetypes.end(); ++it)
|
||||
if (filename.endsWith("."+it.value().toStringList().at(0)))
|
||||
return it.value().toStringList();
|
||||
return QStringList();
|
||||
}
|
||||
|
||||
QString& replaceSearchEngine(QString& url) {
|
||||
LOG;
|
||||
int len(url.indexOf(QRegExp("[ :]")));
|
||||
if (len<=0) return url;
|
||||
QString scheme(url.left(len));
|
||||
LOG<<"scheme:"<<scheme;
|
||||
if (!_searchEngines.contains(scheme)) return url;
|
||||
QString query(url.right(url.size()-len-1));
|
||||
LOG<<"query:"<<query;
|
||||
url = QString(_searchEngines[scheme].toString())
|
||||
.arg(query).arg(QLocale::system().name().left(2));
|
||||
return url;
|
||||
}
|
||||
|
||||
const SearchEngines& searchEngines() const {
|
||||
return _searchEngines;
|
||||
}
|
||||
|
||||
bool save() {
|
||||
LOG;
|
||||
if (!_settings || !_settings->isWritable()) return false;
|
||||
// Attributes
|
||||
for (Attributes::iterator it(_attributes.begin());
|
||||
it!=_attributes.end(); ++it)
|
||||
_settings->setValue
|
||||
(QString("QWebSettings/%1").arg(it->first),
|
||||
QWebSettings::globalSettings()->testAttribute(it->first));
|
||||
// CheckBoxes
|
||||
for (CheckBoxes::iterator it(_checkboxes.begin());
|
||||
it!=_checkboxes.end(); ++it)
|
||||
_settings->setValue
|
||||
(QString("Flags/%1").arg(it->first), it->second.second);
|
||||
// LineEdits
|
||||
for (LineEdits::iterator it(_lineedits.begin());
|
||||
it!=_lineedits.end(); ++it)
|
||||
_settings->setValue
|
||||
(QString("Texts/%1").arg(it->first), it->second.second);
|
||||
// MimeTypes
|
||||
_settings->setValue("QWebSettings/MimeTypes", _mimetypes);
|
||||
// Search Engines
|
||||
_settings->setValue("QWebSettings/SearchEngines", _searchEngines);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool load(bool overwriteMimeTypes=true) {
|
||||
LOG;
|
||||
if (!_settings) return false;
|
||||
// Attributes
|
||||
for (Attributes::iterator it(_attributes.begin());
|
||||
it!=_attributes.end(); ++it) {
|
||||
QVariant val
|
||||
(_settings->value
|
||||
(QString("QWebSettings/%1").arg(it->first),
|
||||
QWebSettings::globalSettings()->testAttribute(it->first)));
|
||||
if (val.isValid() && val.canConvert(QVariant::Bool))
|
||||
setAttribute(it->first, val.toBool());
|
||||
}
|
||||
// CheckBoxes
|
||||
for (CheckBoxes::iterator it(_checkboxes.begin());
|
||||
it!=_checkboxes.end(); ++it) {
|
||||
QVariant val
|
||||
(_settings->value
|
||||
(QString("Flags/%1").arg(it->first), it->second.second));
|
||||
if (val.isValid() && val.canConvert(QVariant::Bool)) {
|
||||
it->second.first->setChecked(val.toBool());
|
||||
it->second.second = val.toBool();
|
||||
}
|
||||
}
|
||||
// LineEdits
|
||||
for (LineEdits::iterator it(_lineedits.begin());
|
||||
it!=_lineedits.end(); ++it) {
|
||||
QVariant val
|
||||
(_settings->value
|
||||
(QString("Texts/%1").arg(it->first), it->second.second));
|
||||
if (val.isValid() && val.canConvert(QVariant::String)) {
|
||||
it->second.first->setText(val.toString());
|
||||
it->second.second = val.toString();
|
||||
}
|
||||
}
|
||||
// MimeTypes
|
||||
if (overwriteMimeTypes) {
|
||||
QVariant val(_settings->value("QWebSettings/MimeTypes"));
|
||||
if (val.isValid() && val.canConvert(QVariant::Map))
|
||||
_mimetypes = val.toMap();
|
||||
}
|
||||
// SearchEngines
|
||||
QVariant val(_settings->value("QWebSettings/SearchEngines"));
|
||||
if (val.isValid() && val.canConvert(QVariant::Map))
|
||||
_searchEngines = val.toMap();
|
||||
newSettings();
|
||||
return true;
|
||||
}
|
||||
|
||||
private Q_SLOTS:
|
||||
|
||||
void on__buttons_accepted() {
|
||||
LOG;
|
||||
// Attributes
|
||||
for (Attributes::iterator it(_attributes.begin());
|
||||
it!=_attributes.end(); ++it)
|
||||
QWebSettings::globalSettings()
|
||||
->setAttribute(it->first, it->second->isChecked());
|
||||
// CheckBoxes
|
||||
for (CheckBoxes::iterator it(_checkboxes.begin());
|
||||
it!=_checkboxes.end(); ++it)
|
||||
it->second.second = it->second.first->isChecked();
|
||||
// LineEdits
|
||||
for (LineEdits::iterator it(_lineedits.begin());
|
||||
it!=_lineedits.end(); ++it)
|
||||
it->second.second = it->second.first->text();
|
||||
// MimeTypes
|
||||
_mimetypes.clear();
|
||||
for (int row(_mimeTypeTable->rowCount()); row--;)
|
||||
_mimetypes[_mimeTypeTable->item(row, 0)->text()] =
|
||||
QStringList()
|
||||
<<_mimeTypeTable->item(row, 1)->text()
|
||||
<<_mimeTypeTable->item(row, 2)->text();
|
||||
// SearchEngines
|
||||
_searchEngines.clear();
|
||||
for (int row(_searchEngineTable->rowCount()); row--;)
|
||||
_searchEngines[_searchEngineTable->item(row, 0)->text()] =
|
||||
_searchEngineTable->item(row, 1)->text();
|
||||
// Save
|
||||
if (_autoWrite) save();
|
||||
newSettings();
|
||||
}
|
||||
|
||||
void on__buttons_rejected() {
|
||||
LOG;
|
||||
// Attributes
|
||||
for (Attributes::iterator it(_attributes.begin());
|
||||
it!=_attributes.end(); ++it)
|
||||
it->second->setChecked
|
||||
(QWebSettings::globalSettings()->testAttribute(it->first));
|
||||
// CheckBoxes
|
||||
for (CheckBoxes::iterator it(_checkboxes.begin());
|
||||
it!=_checkboxes.end(); ++it)
|
||||
it->second.first->setChecked(it->second.second);
|
||||
// LineEdits
|
||||
for (LineEdits::iterator it(_lineedits.begin());
|
||||
it!=_lineedits.end(); ++it)
|
||||
it->second.first->setText(it->second.second);
|
||||
// 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->setItem
|
||||
(row, 0, new QTableWidgetItem(it.key()));
|
||||
_mimeTypeTable->setItem
|
||||
(row, 1, new QTableWidgetItem(it.value().toStringList().at(0)));
|
||||
_mimeTypeTable->setItem
|
||||
(row, 2, new QTableWidgetItem(it.value().toStringList().at(1)));
|
||||
}
|
||||
// SearchEngines
|
||||
_searchEngineTable->setRowCount(_searchEngines.size());
|
||||
_searchEngineTable->verticalHeader()->show();
|
||||
_searchEngineTable->horizontalHeader()->show();
|
||||
_searchEngineTable->horizontalHeader()->setStretchLastSection(true);
|
||||
row = 0;
|
||||
for (MimeTypes::iterator it(_searchEngines.begin());
|
||||
it!=_searchEngines.end(); ++it, ++row) {
|
||||
LOG<<"SearchEngine:"<<it.key()<<it.value().toString();
|
||||
_searchEngineTable->setItem
|
||||
(row, 0, new QTableWidgetItem(it.key()));
|
||||
_searchEngineTable->setItem
|
||||
(row, 1, new QTableWidgetItem(it.value().toString()));
|
||||
}
|
||||
}
|
||||
|
||||
void on__addMimeType_pressed() {
|
||||
_mimeTypeTable->setRowCount(_mimeTypeTable->rowCount()+1);
|
||||
_mimeTypeTable->setItem(_mimeTypeTable->rowCount()-1, 0,
|
||||
new QTableWidgetItem);
|
||||
_mimeTypeTable->setItem(_mimeTypeTable->rowCount()-1, 1,
|
||||
new QTableWidgetItem);
|
||||
_mimeTypeTable->setItem(_mimeTypeTable->rowCount()-1, 2,
|
||||
new QTableWidgetItem);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
void on__addSearchEngine_pressed() {
|
||||
_searchEngineTable->setRowCount(_searchEngineTable->rowCount()+1);
|
||||
_searchEngineTable->setItem(_searchEngineTable->rowCount()-1, 0,
|
||||
new QTableWidgetItem);
|
||||
_searchEngineTable->setItem(_searchEngineTable->rowCount()-1, 1,
|
||||
new QTableWidgetItem);
|
||||
_searchEngineTable->setItem(_searchEngineTable->rowCount()-1, 2,
|
||||
new QTableWidgetItem);
|
||||
}
|
||||
|
||||
void on__removeSearchEngine_pressed() {
|
||||
QList<QTableWidgetSelectionRange> ranges
|
||||
(_searchEngineTable->selectedRanges());
|
||||
if (ranges.isEmpty()) return;
|
||||
for (int begin(ranges.at(0).topRow()), count(ranges.at(0).rowCount());
|
||||
count; --count)
|
||||
_searchEngineTable->removeRow(begin);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
typedef std::map<QWebSettings::WebAttribute, QCheckBox*> Attributes ;
|
||||
Attributes _attributes;
|
||||
typedef std::map<QString, std::pair<QCheckBox*, bool> > CheckBoxes;
|
||||
CheckBoxes _checkboxes;
|
||||
typedef std::map<QString, std::pair<QLineEdit*, QString> > LineEdits;
|
||||
LineEdits _lineedits;
|
||||
QSettings* _settings;
|
||||
bool _autoWrite;
|
||||
MimeTypes _mimetypes;
|
||||
SearchEngines _searchEngines;
|
||||
|
||||
};
|
||||
#endif
|
Reference in New Issue
Block a user