Tweaking...

This commit is contained in:
Martin Rotter 2014-03-18 12:50:14 +01:00
parent 08743d7113
commit c2f893609c
9 changed files with 73 additions and 67 deletions

View File

@ -1,4 +1,19 @@
<body>
<center><h2>1.9.9.8</h2></center>
Fixed:
<ul>
<li>Informative buttons now do not accept focus.</li>
</ul>
Added:
Changed:
<ul>
<li>Tab order and default widget changed for category/feed add/edit dialogs.</li>
</ul>
<hr/>
<center><h2>1.9.9.7</h2></center>
Fixed:

View File

@ -366,8 +366,7 @@ void FeedsModelStandardFeed::updateMessages(const QList<Message> &messages) {
// Used to check if give feed contains with message with given
// title, url and date_created.
// WARNING: One feed CANNOT contain
// two (or more) messages with same
// WARNING: One feed CANNOT contain two (or more) messages with same
// AUTHOR AND TITLE AND URL AND DATE_CREATED.
query_select.setForwardOnly(true);
query_select.prepare("SELECT id, feed, date_created FROM Messages "

View File

@ -92,18 +92,6 @@ QSettings::Status Settings::setupSettings() {
QDir(web_path).mkpath(web_path);
QWebSettings::setIconDatabasePath(web_path);
// TODO: pridat http://qt-project.org/doc/qt-4.8/qwebsettings.html#WebAttribute-enum
// - napsat nejakou webfactory ktera bude ke qwebsettings pristupovat
// a upravovat dané vlastnosti
// do FOrmSettings Webbrowser & proxy pridat tab "Advanced" a tam
// naflakat vsecky zajimavy attributy
/*QWebSettings::globalSettings()->setAttribute(QWebSettings::DnsPrefetchEnabled,
true);
QWebSettings::globalSettings()->setAttribute(QWebSettings::AutoLoadImages,
false);
QWebSettings::globalSettings()->setAttribute(QWebSettings::JavascriptEnabled,
false);*/
qDebug("Initializing settings in '%s' (non-portable way).",
qPrintable(QDir::toNativeSeparators(home_path_file)));
}

View File

@ -13,8 +13,10 @@
QPointer<WebFactory> WebFactory::s_instance;
WebFactory::WebFactory(QObject *parent) : QObject(parent) {
m_globalSettings = QWebSettings::globalSettings();
WebFactory::WebFactory(QObject *parent)
: QObject(parent), m_escapes(QMap<QString, QString>()),
m_deEscapes(QMap<QString, QString>()),
m_globalSettings(QWebSettings::globalSettings()) {
}
WebFactory::~WebFactory() {
@ -24,12 +26,9 @@ WebFactory::~WebFactory() {
void WebFactory::loadState() {
Settings *settings = Settings::instance();
switchJavascript(settings->value(APP_CFG_BROWSER, "enable_javascript", true).toBool(),
false);
switchImages(settings->value(APP_CFG_BROWSER, "enable_images", true).toBool(),
false);
switchPlugins(settings->value(APP_CFG_BROWSER, "enable_plugins", false).toBool(),
false);
switchJavascript(settings->value(APP_CFG_BROWSER, "enable_javascript", true).toBool(), false);
switchImages(settings->value(APP_CFG_BROWSER, "enable_images", true).toBool(), false);
switchPlugins(settings->value(APP_CFG_BROWSER, "enable_plugins", false).toBool(), false);
}
bool WebFactory::openUrlInExternalBrowser(const QString &url) {
@ -107,56 +106,50 @@ QString WebFactory::stripTags(QString text) {
}
QString WebFactory::escapeHtml(const QString &html) {
static QMap<QString, QString> escape_sequences = generetaEscapes();
if (m_escapes.isEmpty()) {
generetaEscapes();
}
QList<QString> keys = escape_sequences.uniqueKeys();
QString output = html;
foreach (const QString &key, keys) {
output.replace(key, escape_sequences.value(key));
foreach (const QString &key, m_escapes.keys()) {
output = output.replace(key, m_escapes.value(key));
}
return output;
}
QString WebFactory::deEscapeHtml(const QString &text) {
static QMap<QString, QString> deescape_sequences = generateDeescapes();
if (m_deEscapes.isEmpty()) {
generateDeescapes();
}
QList<QString> keys = deescape_sequences.uniqueKeys();
QString output = text;
foreach (const QString &key, keys) {
output.replace(key, deescape_sequences.value(key));
foreach (const QString &key, m_deEscapes.keys()) {
output = output.replace(key, m_deEscapes.value(key));
}
return output;
}
QMap<QString, QString> WebFactory::generetaEscapes() {
QMap<QString, QString> sequences;
sequences["&lt;"] = '<';
sequences["&gt;"] = '>';
sequences["&amp;"] = '&';
sequences["&quot;"] = '\"';
sequences["&nbsp;"] = ' ';
sequences["&plusmn;"] = "±";
sequences["&times;"] = "×";
sequences["&#039;"] = '\'';
return sequences;
void WebFactory::generetaEscapes() {
m_escapes["&lt;"] = '<';
m_escapes["&gt;"] = '>';
m_escapes["&amp;"] = '&';
m_escapes["&quot;"] = '\"';
m_escapes["&nbsp;"] = ' ';
m_escapes["&plusmn;"] = "±";
m_escapes["&times;"] = "×";
m_escapes["&#039;"] = '\'';
}
QMap<QString, QString> WebFactory::generateDeescapes() {
QMap<QString, QString> sequences;
sequences["<"] = "&lt;";
sequences[">"] = "&gt;";
sequences["&"] = "&amp;";
sequences["\""] = "&quot;";
sequences["±"] = "&plusmn;";
sequences["×"] = "&times;";
sequences["\'"] = "&#039;";
return sequences;
void WebFactory::generateDeescapes() {
m_deEscapes["<"] = "&lt;";
m_deEscapes[">"] = "&gt;";
m_deEscapes["&"] = "&amp;";
m_deEscapes["\""] = "&quot;";
m_deEscapes["±"] = "&plusmn;";
m_deEscapes["×"] = "&times;";
m_deEscapes["\'"] = "&#039;";
}

View File

@ -24,7 +24,6 @@ class WebFactory : public QObject {
QString stripTags(QString text);
// HTML entity escaping.
// TODO: Optimize these methods.
QString escapeHtml(const QString &html);
QString deEscapeHtml(const QString &text);
@ -55,9 +54,11 @@ class WebFactory : public QObject {
explicit WebFactory(QObject *parent = 0);
// Escape sequences generators.
QMap<QString, QString> generetaEscapes();
QMap<QString, QString> generateDeescapes();
void generetaEscapes();
void generateDeescapes();
QMap<QString, QString> m_escapes;
QMap<QString, QString> m_deEscapes;
QWebSettings *m_globalSettings;
// Singleton.

View File

@ -547,8 +547,8 @@ void FeedsView::initializeContextMenuCategoriesFeeds() {
void FeedsView::initializeContextMenuEmptySpace() {
m_contextMenuEmptySpace = new QMenu(tr("Context menu for feeds"), this);
m_contextMenuEmptySpace->addActions(QList<QAction*>() <<
FormMain::instance()->m_ui->m_actionUpdateAllFeeds);
FormMain::instance()->m_ui->m_actionUpdateAllFeeds <<
FormMain::instance()->m_ui->m_actionAddStandardFeed);
}
void FeedsView::setupAppearance() {

View File

@ -238,10 +238,12 @@ void FormStandardCategoryDetails::initialize() {
m_ui->m_btnIcon->setMenu(m_iconMenu);
// Setup tab order.
setTabOrder(m_ui->m_buttonBox, m_ui->m_cmbParentCategory);
setTabOrder(m_ui->m_cmbParentCategory, m_ui->m_txtTitle->lineEdit());
setTabOrder(m_ui->m_txtTitle->lineEdit(), m_ui->m_txtDescription->lineEdit());
setTabOrder(m_ui->m_txtDescription->lineEdit(), m_ui->m_btnIcon);
setTabOrder(m_ui->m_btnIcon, m_ui->m_buttonBox);
m_ui->m_txtTitle->lineEdit()->setFocus(Qt::TabFocusReason);
}
void FormStandardCategoryDetails::loadCategories(const QList<FeedsModelCategory*> categories,

View File

@ -426,18 +426,25 @@ void FormStandardFeedDetails::initialize() {
m_ui->m_cmbAutoUpdateType->addItem(tr("Do not auto-update at all"), QVariant::fromValue((int) FeedsModelStandardFeed::DontAutoUpdate));
// Set tab order.
setTabOrder(m_ui->m_buttonBox, m_ui->m_cmbParentCategory);
setTabOrder(m_ui->m_cmbParentCategory, m_ui->m_cmbType);
setTabOrder(m_ui->m_cmbType, m_ui->m_txtTitle->lineEdit());
setTabOrder(m_ui->m_txtTitle->lineEdit(), m_ui->m_txtDescription->lineEdit());
setTabOrder(m_ui->m_txtDescription->lineEdit(), m_ui->m_txtUrl->lineEdit());
setTabOrder(m_ui->m_txtUrl->lineEdit(), m_ui->m_cmbEncoding);
setTabOrder(m_ui->m_cmbType, m_ui->m_cmbEncoding);
setTabOrder(m_ui->m_cmbEncoding, m_ui->m_cmbAutoUpdateType);
setTabOrder(m_ui->m_cmbAutoUpdateType, m_ui->m_spinAutoUpdateInterval);
setTabOrder(m_ui->m_spinAutoUpdateInterval, m_ui->m_btnIcon);
setTabOrder(m_ui->m_spinAutoUpdateInterval, m_ui->m_txtTitle->lineEdit());
setTabOrder(m_ui->m_txtTitle->lineEdit(), m_ui->m_txtDescription->lineEdit());
setTabOrder(m_ui->m_txtDescription->lineEdit(), m_ui->m_txtUrl->lineEdit());
setTabOrder(m_ui->m_txtUrl->lineEdit(), m_ui->m_btnFetchMetadata);
setTabOrder(m_ui->m_btnFetchMetadata, m_ui->m_btnIcon);
setTabOrder(m_ui->m_btnIcon, m_ui->m_gbAuthentication);
setTabOrder(m_ui->m_gbAuthentication, m_ui->m_txtUsername->lineEdit());
setTabOrder(m_ui->m_txtUsername->lineEdit(), m_ui->m_txtPassword->lineEdit());
m_ui->m_txtUrl->lineEdit()->setFocus(Qt::TabFocusReason);
}
void FormStandardFeedDetails::loadCategories(const QList<FeedsModelCategory*> categories,

View File

@ -27,6 +27,7 @@ WidgetWithStatus::WidgetWithStatus(QWidget *parent)
: QWidget(parent), m_wdgInput(NULL) {
m_layout = new QHBoxLayout(this);
m_btnStatus = new PlainToolButton(this);
m_btnStatus->setFocusPolicy(Qt::NoFocus);
m_iconInformation = IconThemeFactory::instance()->fromTheme("dialog-information");
m_iconWarning = IconThemeFactory::instance()->fromTheme("dialog-warning");