Work on filtering dialog. add clang-format to support script beautify.
This commit is contained in:
parent
e0415a8060
commit
c608210e3c
11 changed files with 298 additions and 160 deletions
|
@ -175,7 +175,10 @@ win32 {
|
||||||
lib.path = $$PREFIX
|
lib.path = $$PREFIX
|
||||||
lib.CONFIG = no_check_exist
|
lib.CONFIG = no_check_exist
|
||||||
|
|
||||||
INSTALLS += target lib
|
clng.files = ../../resources/scripts/clang-format/clang-format.exe
|
||||||
|
clng.path = $$PREFIX
|
||||||
|
|
||||||
|
INSTALLS += target lib clng
|
||||||
|
|
||||||
INSTALL_HEADERS_PREFIX = $$quote($$PREFIX/include/librssguard)
|
INSTALL_HEADERS_PREFIX = $$quote($$PREFIX/include/librssguard)
|
||||||
}
|
}
|
||||||
|
|
BIN
resources/scripts/clang-format/clang-format.exe
Executable file
BIN
resources/scripts/clang-format/clang-format.exe
Executable file
Binary file not shown.
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "core/messagefilter.h"
|
#include "core/messagefilter.h"
|
||||||
#include "definitions/definitions.h"
|
#include "definitions/definitions.h"
|
||||||
|
#include "exceptions/filteringexception.h"
|
||||||
#include "miscellaneous/application.h"
|
#include "miscellaneous/application.h"
|
||||||
#include "services/abstract/cacheforserviceroot.h"
|
#include "services/abstract/cacheforserviceroot.h"
|
||||||
#include "services/abstract/feed.h"
|
#include "services/abstract/feed.h"
|
||||||
|
@ -147,23 +148,31 @@ void FeedDownloader::updateOneFeed(Feed* feed) {
|
||||||
|
|
||||||
tmr.restart();
|
tmr.restart();
|
||||||
|
|
||||||
FilteringAction decision = msg_filter->filterMessage(&filter_engine);
|
try {
|
||||||
|
FilteringAction decision = msg_filter->filterMessage(&filter_engine);
|
||||||
|
|
||||||
qDebug().nospace() << "Running filter script, it took " << tmr.nsecsElapsed() / 1000 << " microseconds.";
|
qDebug().nospace() << "Running filter script, it took " << tmr.nsecsElapsed() / 1000 << " microseconds.";
|
||||||
|
|
||||||
switch (decision) {
|
switch (decision) {
|
||||||
case FilteringAction::Accept:
|
case FilteringAction::Accept:
|
||||||
|
|
||||||
// Message is normally accepted, it could be tweaked by the filter.
|
// Message is normally accepted, it could be tweaked by the filter.
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case FilteringAction::Ignore:
|
case FilteringAction::Ignore:
|
||||||
|
|
||||||
// Remove the message, we do not want it.
|
// Remove the message, we do not want it.
|
||||||
msgs.removeAt(i--);
|
msgs.removeAt(i--);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (const FilteringException& ex) {
|
||||||
|
qCritical("Error when evaluating filtering JS function: '%s'. Accepting message.", qPrintable(ex.message()));
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we reach this point. Then we ignore the message which is by now
|
||||||
|
// already removed, go to next message.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "core/messagefilter.h"
|
#include "core/messagefilter.h"
|
||||||
|
|
||||||
#include "core/message.h"
|
#include "core/message.h"
|
||||||
|
#include "exceptions/filteringexception.h"
|
||||||
|
|
||||||
#include <QJSEngine>
|
#include <QJSEngine>
|
||||||
|
|
||||||
|
@ -43,15 +44,19 @@ FilteringAction MessageFilter::filterMessage(QJSEngine* engine) {
|
||||||
QJSValue filter_func = engine->evaluate(m_script);
|
QJSValue filter_func = engine->evaluate(m_script);
|
||||||
|
|
||||||
if (filter_func.isError()) {
|
if (filter_func.isError()) {
|
||||||
qCritical("Error when evaluating script from filter '%d'. Error is: '%s'", id(), qPrintable(filter_func.toString()));
|
QJSValue::ErrorType error = filter_func.errorType();
|
||||||
return FilteringAction::Accept;
|
QString message = filter_func.toString();
|
||||||
|
|
||||||
|
throw FilteringException(error, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto filter_output = engine->evaluate(QSL("filterMessage()"));
|
auto filter_output = engine->evaluate(QSL("filterMessage()"));
|
||||||
|
|
||||||
if (filter_output.isError()) {
|
if (filter_output.isError()) {
|
||||||
qCritical("Error when calling filtering function '%d'. Error is: '%s'", id(), qPrintable(filter_output.toString()));
|
QJSValue::ErrorType error = filter_output.errorType();
|
||||||
return FilteringAction::Accept;
|
QString message = filter_output.toString();
|
||||||
|
|
||||||
|
throw FilteringException(error, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
return FilteringAction(filter_output.toInt());
|
return FilteringAction(filter_output.toInt());
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
class ApplicationException {
|
class ApplicationException {
|
||||||
public:
|
public:
|
||||||
explicit ApplicationException(QString message = QString());
|
explicit ApplicationException(QString message = QString());
|
||||||
virtual ~ApplicationException() = default;
|
|
||||||
|
|
||||||
QString message() const;
|
QString message() const;
|
||||||
|
|
||||||
|
|
6
src/librssguard/exceptions/filteringexception.cpp
Executable file
6
src/librssguard/exceptions/filteringexception.cpp
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
// For license of this file, see <project-root-folder>/LICENSE.md.
|
||||||
|
|
||||||
|
#include "exceptions/filteringexception.h"
|
||||||
|
|
||||||
|
FilteringException::FilteringException(QJSValue::ErrorType js_error, QString message)
|
||||||
|
: ApplicationException(message), m_errorType(js_error) {}
|
18
src/librssguard/exceptions/filteringexception.h
Executable file
18
src/librssguard/exceptions/filteringexception.h
Executable file
|
@ -0,0 +1,18 @@
|
||||||
|
// For license of this file, see <project-root-folder>/LICENSE.md.
|
||||||
|
|
||||||
|
#ifndef FILTERINGEXCEPTION_H
|
||||||
|
#define FILTERINGEXCEPTION_H
|
||||||
|
|
||||||
|
#include "exceptions/applicationexception.h"
|
||||||
|
|
||||||
|
#include <QJSValue>
|
||||||
|
|
||||||
|
class FilteringException : public ApplicationException {
|
||||||
|
public:
|
||||||
|
explicit FilteringException(QJSValue::ErrorType js_error, QString message = QString());
|
||||||
|
|
||||||
|
private:
|
||||||
|
QJSValue::ErrorType m_errorType;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FILTERINGEXCEPTION_H
|
|
@ -8,7 +8,6 @@
|
||||||
class IOException : public ApplicationException {
|
class IOException : public ApplicationException {
|
||||||
public:
|
public:
|
||||||
explicit IOException(const QString& message = QString());
|
explicit IOException(const QString& message = QString());
|
||||||
virtual ~IOException() = default;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // IOEXCEPTION_H
|
#endif // IOEXCEPTION_H
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "gui/dialogs/formmessagefiltersmanager.h"
|
#include "gui/dialogs/formmessagefiltersmanager.h"
|
||||||
|
|
||||||
#include "core/messagefilter.h"
|
#include "core/messagefilter.h"
|
||||||
|
#include "exceptions/filteringexception.h"
|
||||||
#include "gui/guiutilities.h"
|
#include "gui/guiutilities.h"
|
||||||
#include "miscellaneous/application.h"
|
#include "miscellaneous/application.h"
|
||||||
#include "miscellaneous/feedreader.h"
|
#include "miscellaneous/feedreader.h"
|
||||||
|
@ -38,6 +39,7 @@ FormMessageFiltersManager::FormMessageFiltersManager(FeedReader* reader, const Q
|
||||||
connect(m_ui.m_btnTest, &QPushButton::clicked, this, &FormMessageFiltersManager::testFilter);
|
connect(m_ui.m_btnTest, &QPushButton::clicked, this, &FormMessageFiltersManager::testFilter);
|
||||||
|
|
||||||
initializeTestingMessage();
|
initializeTestingMessage();
|
||||||
|
loadFilter();
|
||||||
}
|
}
|
||||||
|
|
||||||
FormMessageFiltersManager::~FormMessageFiltersManager() {
|
FormMessageFiltersManager::~FormMessageFiltersManager() {
|
||||||
|
@ -95,6 +97,12 @@ void FormMessageFiltersManager::loadFilter() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void FormMessageFiltersManager::testFilter() {
|
void FormMessageFiltersManager::testFilter() {
|
||||||
|
// TODO: Add button to beautify JavaScript code, call clang-format and distribute
|
||||||
|
// it under windows. On other platforms, just try to call and raise messagebox
|
||||||
|
// error with "install clang-format" if not found.
|
||||||
|
// then call like this with qt process api.
|
||||||
|
// echo "script-code" | ./clang-format.exe --assume-filename="script.js" --style="Chromium"
|
||||||
|
|
||||||
// Perform per-message filtering.
|
// Perform per-message filtering.
|
||||||
QJSEngine filter_engine;
|
QJSEngine filter_engine;
|
||||||
QSqlDatabase database = qApp->database()->connection(metaObject()->className());
|
QSqlDatabase database = qApp->database()->connection(metaObject()->className());
|
||||||
|
@ -113,8 +121,37 @@ void FormMessageFiltersManager::testFilter() {
|
||||||
msg_obj.setMessage(&msg);
|
msg_obj.setMessage(&msg);
|
||||||
|
|
||||||
auto* fltr = selectedFilter();
|
auto* fltr = selectedFilter();
|
||||||
FilteringAction decision = fltr->filterMessage(&filter_engine);
|
|
||||||
int aa = 5;
|
try {
|
||||||
|
FilteringAction decision = fltr->filterMessage(&filter_engine);
|
||||||
|
|
||||||
|
m_ui.m_txtErrors->setTextColor(decision == FilteringAction::Accept ? Qt::GlobalColor::darkGreen : Qt::GlobalColor::red);
|
||||||
|
|
||||||
|
QString answer = tr("Message will be %1.\n").arg(decision == FilteringAction::Accept
|
||||||
|
? tr("accepted")
|
||||||
|
: tr("rejected"));
|
||||||
|
|
||||||
|
answer += tr("Output (modified) message is:\n"
|
||||||
|
" Title = '%1'\n"
|
||||||
|
" URL = '%2'\n"
|
||||||
|
" Author = '%3'\n"
|
||||||
|
" Is read/important = '%4/%5'\n"
|
||||||
|
" Created on = '%6'\n"
|
||||||
|
" Contents = '%7'").arg(msg.m_title, msg.m_url, msg.m_author,
|
||||||
|
msg.m_isRead ? tr("yes") : tr("no"),
|
||||||
|
msg.m_isImportant ? tr("yes") : tr("no"),
|
||||||
|
QString::number(msg.m_created.toMSecsSinceEpoch()),
|
||||||
|
msg.m_contents);
|
||||||
|
|
||||||
|
m_ui.m_txtErrors->setPlainText(answer);
|
||||||
|
}
|
||||||
|
catch (const FilteringException& ex) {
|
||||||
|
m_ui.m_txtErrors->setTextColor(Qt::GlobalColor::red);
|
||||||
|
m_ui.m_txtErrors->setPlainText(tr("JavaScript-based filter contains errors: '%1'.").arg(ex.message()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// See output.
|
||||||
|
m_ui.m_tcMessage->setCurrentIndex(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FormMessageFiltersManager::showFilter(MessageFilter* filter) {
|
void FormMessageFiltersManager::showFilter(MessageFilter* filter) {
|
||||||
|
@ -131,6 +168,8 @@ void FormMessageFiltersManager::showFilter(MessageFilter* filter) {
|
||||||
m_ui.m_gbDetails->setEnabled(true);
|
m_ui.m_gbDetails->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// See message.
|
||||||
|
m_ui.m_tcMessage->setCurrentIndex(0);
|
||||||
m_loadingFilter = false;
|
m_loadingFilter = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,19 +50,6 @@
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<layout class="QFormLayout" name="formLayout_3">
|
<layout class="QFormLayout" name="formLayout_3">
|
||||||
<item row="1" column="0" colspan="2">
|
|
||||||
<widget class="QTreeView" name="m_treeFeeds">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>0</width>
|
|
||||||
<height>150</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QComboBox" name="comboBox"/>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label_9">
|
<widget class="QLabel" name="label_9">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -73,6 +60,54 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QComboBox" name="comboBox"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" colspan="2">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||||
|
<item>
|
||||||
|
<widget class="QTreeView" name="m_treeFeeds">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>150</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Check all</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Uncheck all</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0" colspan="2">
|
<item row="1" column="0" colspan="2">
|
||||||
|
@ -147,108 +182,154 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox_2">
|
<widget class="QTabWidget" name="m_tcMessage">
|
||||||
<property name="title">
|
<property name="currentIndex">
|
||||||
<string>Sample message</string>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QFormLayout" name="formLayout_2">
|
<widget class="QWidget" name="m_tabSample">
|
||||||
<item row="0" column="0" colspan="2">
|
<attribute name="title">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
<string>Sample message</string>
|
||||||
<item>
|
</attribute>
|
||||||
<widget class="QCheckBox" name="m_cbSampleRead">
|
<layout class="QFormLayout" name="formLayout_2">
|
||||||
<property name="text">
|
<property name="leftMargin">
|
||||||
<string>Read</string>
|
<number>3</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
<property name="topMargin">
|
||||||
</item>
|
<number>3</number>
|
||||||
<item>
|
</property>
|
||||||
<widget class="QCheckBox" name="m_cbSampleImportant">
|
<property name="rightMargin">
|
||||||
<property name="text">
|
<number>3</number>
|
||||||
<string>Important</string>
|
</property>
|
||||||
</property>
|
<property name="bottomMargin">
|
||||||
</widget>
|
<number>3</number>
|
||||||
</item>
|
</property>
|
||||||
<item>
|
<item row="0" column="0" colspan="2">
|
||||||
<spacer name="horizontalSpacer_4">
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
<property name="orientation">
|
<item>
|
||||||
<enum>Qt::Horizontal</enum>
|
<widget class="QCheckBox" name="m_cbSampleRead">
|
||||||
</property>
|
<property name="text">
|
||||||
<property name="sizeHint" stdset="0">
|
<string>Read</string>
|
||||||
<size>
|
</property>
|
||||||
<width>40</width>
|
</widget>
|
||||||
<height>20</height>
|
</item>
|
||||||
</size>
|
<item>
|
||||||
</property>
|
<widget class="QCheckBox" name="m_cbSampleImportant">
|
||||||
</spacer>
|
<property name="text">
|
||||||
</item>
|
<string>Important</string>
|
||||||
</layout>
|
</property>
|
||||||
</item>
|
</widget>
|
||||||
<item row="1" column="0">
|
</item>
|
||||||
<widget class="QLabel" name="label_4">
|
<item>
|
||||||
<property name="text">
|
<spacer name="horizontalSpacer_4">
|
||||||
<string>Title</string>
|
<property name="orientation">
|
||||||
</property>
|
<enum>Qt::Horizontal</enum>
|
||||||
<property name="buddy">
|
</property>
|
||||||
<cstring>m_txtSampleTitle</cstring>
|
<property name="sizeHint" stdset="0">
|
||||||
</property>
|
<size>
|
||||||
</widget>
|
<width>40</width>
|
||||||
</item>
|
<height>20</height>
|
||||||
<item row="1" column="1">
|
</size>
|
||||||
<widget class="QLineEdit" name="m_txtSampleTitle"/>
|
</property>
|
||||||
</item>
|
</spacer>
|
||||||
<item row="2" column="0">
|
</item>
|
||||||
<widget class="QLabel" name="label_6">
|
</layout>
|
||||||
<property name="text">
|
</item>
|
||||||
<string>URL</string>
|
<item row="1" column="0">
|
||||||
</property>
|
<widget class="QLabel" name="label_4">
|
||||||
<property name="buddy">
|
<property name="text">
|
||||||
<cstring>m_txtSampleUrl</cstring>
|
<string>Title</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
<property name="buddy">
|
||||||
</item>
|
<cstring>m_txtSampleTitle</cstring>
|
||||||
<item row="2" column="1">
|
</property>
|
||||||
<widget class="QLineEdit" name="m_txtSampleUrl"/>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="1" column="1">
|
||||||
<widget class="QLabel" name="label_7">
|
<widget class="QLineEdit" name="m_txtSampleTitle"/>
|
||||||
<property name="text">
|
</item>
|
||||||
<string>Author</string>
|
<item row="2" column="0">
|
||||||
</property>
|
<widget class="QLabel" name="label_6">
|
||||||
<property name="buddy">
|
<property name="text">
|
||||||
<cstring>m_txtSampleAuthor</cstring>
|
<string>URL</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
<property name="buddy">
|
||||||
</item>
|
<cstring>m_txtSampleUrl</cstring>
|
||||||
<item row="3" column="1">
|
</property>
|
||||||
<widget class="QLineEdit" name="m_txtSampleAuthor"/>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0">
|
<item row="2" column="1">
|
||||||
<widget class="QLabel" name="label_8">
|
<widget class="QLineEdit" name="m_txtSampleUrl"/>
|
||||||
<property name="text">
|
</item>
|
||||||
<string>Created on</string>
|
<item row="3" column="0">
|
||||||
</property>
|
<widget class="QLabel" name="label_7">
|
||||||
<property name="buddy">
|
<property name="text">
|
||||||
<cstring>m_txtSampleCreatedOn</cstring>
|
<string>Author</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
<property name="buddy">
|
||||||
</item>
|
<cstring>m_txtSampleAuthor</cstring>
|
||||||
<item row="4" column="1">
|
</property>
|
||||||
<widget class="QLineEdit" name="m_txtSampleCreatedOn"/>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0">
|
<item row="3" column="1">
|
||||||
<widget class="QLabel" name="label_5">
|
<widget class="QLineEdit" name="m_txtSampleAuthor"/>
|
||||||
<property name="text">
|
</item>
|
||||||
<string>Contents</string>
|
<item row="4" column="0">
|
||||||
</property>
|
<widget class="QLabel" name="label_8">
|
||||||
<property name="buddy">
|
<property name="text">
|
||||||
<cstring>m_txtSampleContents</cstring>
|
<string>Created on</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
<property name="buddy">
|
||||||
</item>
|
<cstring>m_txtSampleCreatedOn</cstring>
|
||||||
<item row="5" column="1">
|
</property>
|
||||||
<widget class="QPlainTextEdit" name="m_txtSampleContents"/>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
<item row="4" column="1">
|
||||||
|
<widget class="QLineEdit" name="m_txtSampleCreatedOn"/>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>Contents</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>m_txtSampleContents</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="QPlainTextEdit" name="m_txtSampleContents"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="m_tabScriptOutput">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Script output</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QTextEdit" name="m_txtErrors">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>1</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -265,7 +346,7 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="m_btnDetailedHelp">
|
<widget class="QPushButton" name="m_btnDetailedHelp">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Detailed &help</string>
|
<string>Detailed &help</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -284,32 +365,6 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0">
|
|
||||||
<widget class="QLabel" name="label_3">
|
|
||||||
<property name="text">
|
|
||||||
<string>Test output</string>
|
|
||||||
</property>
|
|
||||||
<property name="buddy">
|
|
||||||
<cstring>m_txtErrors</cstring>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="1">
|
|
||||||
<widget class="QPlainTextEdit" name="m_txtErrors">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>1</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="readOnly">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -334,10 +389,13 @@
|
||||||
<tabstop>m_btnRemoveSelected</tabstop>
|
<tabstop>m_btnRemoveSelected</tabstop>
|
||||||
<tabstop>comboBox</tabstop>
|
<tabstop>comboBox</tabstop>
|
||||||
<tabstop>m_treeFeeds</tabstop>
|
<tabstop>m_treeFeeds</tabstop>
|
||||||
|
<tabstop>pushButton</tabstop>
|
||||||
|
<tabstop>pushButton_2</tabstop>
|
||||||
<tabstop>m_txtTitle</tabstop>
|
<tabstop>m_txtTitle</tabstop>
|
||||||
<tabstop>m_txtScript</tabstop>
|
<tabstop>m_txtScript</tabstop>
|
||||||
<tabstop>m_btnTest</tabstop>
|
<tabstop>m_btnTest</tabstop>
|
||||||
<tabstop>m_btnDetailedHelp</tabstop>
|
<tabstop>m_btnDetailedHelp</tabstop>
|
||||||
|
<tabstop>m_tcMessage</tabstop>
|
||||||
<tabstop>m_cbSampleRead</tabstop>
|
<tabstop>m_cbSampleRead</tabstop>
|
||||||
<tabstop>m_cbSampleImportant</tabstop>
|
<tabstop>m_cbSampleImportant</tabstop>
|
||||||
<tabstop>m_txtSampleTitle</tabstop>
|
<tabstop>m_txtSampleTitle</tabstop>
|
||||||
|
|
|
@ -44,6 +44,7 @@ HEADERS += core/feeddownloader.h \
|
||||||
dynamic-shortcuts/shortcutbutton.h \
|
dynamic-shortcuts/shortcutbutton.h \
|
||||||
dynamic-shortcuts/shortcutcatcher.h \
|
dynamic-shortcuts/shortcutcatcher.h \
|
||||||
exceptions/applicationexception.h \
|
exceptions/applicationexception.h \
|
||||||
|
exceptions/filteringexception.h \
|
||||||
exceptions/ioexception.h \
|
exceptions/ioexception.h \
|
||||||
gui/baselineedit.h \
|
gui/baselineedit.h \
|
||||||
gui/basetoolbar.h \
|
gui/basetoolbar.h \
|
||||||
|
@ -189,6 +190,7 @@ SOURCES += core/feeddownloader.cpp \
|
||||||
dynamic-shortcuts/shortcutbutton.cpp \
|
dynamic-shortcuts/shortcutbutton.cpp \
|
||||||
dynamic-shortcuts/shortcutcatcher.cpp \
|
dynamic-shortcuts/shortcutcatcher.cpp \
|
||||||
exceptions/applicationexception.cpp \
|
exceptions/applicationexception.cpp \
|
||||||
|
exceptions/filteringexception.cpp \
|
||||||
exceptions/ioexception.cpp \
|
exceptions/ioexception.cpp \
|
||||||
gui/baselineedit.cpp \
|
gui/baselineedit.cpp \
|
||||||
gui/basetoolbar.cpp \
|
gui/basetoolbar.cpp \
|
||||||
|
|
Loading…
Add table
Reference in a new issue