ready for weekend; several changes; refs #22

This commit is contained in:
Marc Wäckerlin
2011-01-21 13:32:27 +00:00
parent b8cb4c1489
commit debcfe1cea
12 changed files with 1403 additions and 761 deletions

View File

@@ -10,8 +10,8 @@
#include <QtCore/QSettings>
#include <QtCore/QMap>
#include <QtCore/QList>
#include <QtGui/QLineEdit>
#include <cassert>
#include <QtCore/QDebug>
#ifndef LOG
#define LOG qDebug()<<__PRETTY_FUNCTION__
@@ -34,6 +34,7 @@ class Settings: public QDialog, protected Ui::Settings {
setupUi(this);
// Web Attributes
_attributes[QWebSettings::AutoLoadImages] =
_settingAutoLoadImages;
_attributes[QWebSettings::DnsPrefetchEnabled] =
@@ -81,6 +82,10 @@ class Settings: public QDialog, protected Ui::Settings {
_attributes[QWebSettings::SiteSpecificQuirksEnabled] =
_settingSiteSpecificQuirksEnabled;
// CheckBoxes
_checkboxes["SaveWindowState"] =
std::make_pair(_saveWindowState, _saveWindowState->isChecked());
load(!_mimetypes.size());
on__buttons_rejected();
}
@@ -89,27 +94,57 @@ class Settings: public QDialog, protected Ui::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 MimeTypes& mimetypes() const {
return _mimetypes;
}
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;
}
bool save() {
LOG;
if (!_settings || !_settings->isWritable()) return false;
// Attributes
for (Attributes::iterator attribute(_attributes.begin());
attribute!=_attributes.end(); ++attribute)
for (Attributes::iterator it(_attributes.begin());
it!=_attributes.end(); ++it)
_settings->setValue
(QString("QWebSettings/%1").arg(attribute->first),
QWebSettings::globalSettings()->testAttribute(attribute->first));
(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);
// MimeTypes
_settings->setValue("QWebSettings/MimeTypes", _mimetypes);
// Search Engines
_settings->setValue("QWebSettings/SearchEngines", _searchEngines);
return true;
}
@@ -117,20 +152,36 @@ class Settings: public QDialog, protected Ui::Settings {
LOG;
if (!_settings) return false;
// Attributes
for (Attributes::iterator attribute(_attributes.begin());
attribute!=_attributes.end(); ++attribute) {
for (Attributes::iterator it(_attributes.begin());
it!=_attributes.end(); ++it) {
QVariant val
(_settings->value
(QString("QWebSettings/%1").arg(attribute->first),
QWebSettings::globalSettings()->testAttribute(attribute->first)));
(QString("QWebSettings/%1").arg(it->first),
QWebSettings::globalSettings()->testAttribute(it->first)));
if (val.isValid() && val.canConvert(QVariant::Bool))
setAttribute(attribute->first, val.toBool());
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();
}
}
// MimeTypes
if (!overwriteMimeTypes) return true;
QVariant val(_settings->value("QWebSettings/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))
_mimetypes = val.toMap();
_searchEngines = val.toMap();
return true;
}
@@ -139,20 +190,26 @@ class Settings: public QDialog, protected Ui::Settings {
void on__buttons_accepted() {
LOG;
// Attributes
for (Attributes::iterator attribute(_attributes.begin());
attribute!=_attributes.end(); ++attribute)
for (Attributes::iterator it(_attributes.begin());
it!=_attributes.end(); ++it)
QWebSettings::globalSettings()
->setAttribute(attribute->first, attribute->second->isChecked());
->setAttribute(it->first, it->second->isChecked());
// CheckBoxes
for (CheckBoxes::iterator it(_checkboxes.begin());
it!=_checkboxes.end(); ++it)
it->second.second = it->second.first->isChecked();
// MimeTypes
_mimetypes.clear();
for (int row(_mimeTypeTable->rowCount()); row--;)
_mimetypes[qobject_cast<QLineEdit*>(_mimeTypeTable->cellWidget(row, 0))
->text()] =
_mimetypes[_mimeTypeTable->item(row, 0)->text()] =
QStringList()
<<qobject_cast<QLineEdit*>(_mimeTypeTable->cellWidget(row, 1))
->text()
<<qobject_cast<QLineEdit*>(_mimeTypeTable->cellWidget(row, 2))
->text();
<<_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();
}
@@ -160,10 +217,14 @@ class Settings: public QDialog, protected Ui::Settings {
void on__buttons_rejected() {
LOG;
// Attributes
for (Attributes::iterator attribute(_attributes.begin());
attribute!=_attributes.end(); ++attribute)
attribute->second->setChecked
(QWebSettings::globalSettings()->testAttribute(attribute->first));
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);
// MimeTypes
_mimeTypeTable->setRowCount(_mimetypes.size());
_mimeTypeTable->verticalHeader()->show();
@@ -173,23 +234,37 @@ class Settings: public QDialog, protected Ui::Settings {
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)));
_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->setCellWidget(_mimeTypeTable->rowCount()-1, 0,
new QLineEdit);
_mimeTypeTable->setCellWidget(_mimeTypeTable->rowCount()-1, 1,
new QLineEdit);
_mimeTypeTable->setCellWidget(_mimeTypeTable->rowCount()-1, 2,
new QLineEdit);
_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() {
@@ -201,12 +276,35 @@ class Settings: public QDialog, protected Ui::Settings {
_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;
QSettings* _settings;
bool _autoWrite;
MimeTypes _mimetypes;
typedef QMap<QString, QVariant> SearchEngines;
SearchEngines _searchEngines;
};