diff --git a/libquickevent/libquickeventgui/src/reportoptionsdialog.cpp b/libquickevent/libquickeventgui/src/reportoptionsdialog.cpp
index f48eaeff4..c1d27101e 100644
--- a/libquickevent/libquickeventgui/src/reportoptionsdialog.cpp
+++ b/libquickevent/libquickeventgui/src/reportoptionsdialog.cpp
@@ -39,25 +39,21 @@ ReportOptionsDialog::ReportOptionsDialog(QWidget *parent)
ui->grpResultOptions->setVisible(false);
ui->grpStartTimes->setVisible(false);
ui->grpStartlistOrderBy->setVisible(false);
- ui->grpClassStartSelection->setVisible(false);
ui->btRegExp->setEnabled(QSqlDatabase::database().driverName().endsWith(QLatin1String("PSQL"), Qt::CaseInsensitive));
- // fill start numbers from courses
- QString query_str = "SELECT codes.code FROM codes"
- " ORDER BY id";
- qf::core::sql::Query q;
- q.exec(query_str, qf::core::Exception::Throw);
- while (q.next()) {
- auto code = q.value(0).toInt();
- if(auto n = core::CodeDef::codeToStartNumber(code); n.has_value()) {
- ui->cbxStartNumber->addItem(QString("Start %1").arg(n.value()),n.value());
+ {
+ // fill start numbers from courses
+ ui->cbxStartNumber->addItem(QString("All"), 0);
+ QString query_str = "SELECT codes.code FROM codes ORDER BY id";
+ qf::core::sql::Query q;
+ q.exec(query_str, qf::core::Exception::Throw);
+ while (q.next()) {
+ auto code = q.value(0).toInt();
+ if(auto n = core::CodeDef::codeToStartNumber(code); n.has_value()) {
+ ui->cbxStartNumber->addItem(QString("Start %1").arg(n.value()),n.value());
+ }
}
}
- if (ui->cbxStartNumber->count() < 1) {
- ui->grpClassStartSelection->setEnabled(false);
- ui->grpClassStartSelection->setChecked(false);
- ui->cbxStartNumber->clear();
- }
connect(ui->btSaveAsDefault, &QPushButton::clicked, [this]() {
savePersistentSettings();
});
@@ -77,11 +73,6 @@ ReportOptionsDialog::ReportOptionsDialog(QWidget *parent)
connect(this, &ReportOptionsDialog::resultOptionsVisibleChanged, ui->grpResultOptions, &QGroupBox::setVisible);
connect(this, &ReportOptionsDialog::startTimeFormatVisibleChanged, ui->grpStartTimes, &QGroupBox::setVisible);
connect(this, &ReportOptionsDialog::startlistOrderFirstByVisibleChanged, ui->grpStartlistOrderBy, &QGroupBox::setVisible);
- connect(this, &ReportOptionsDialog::classStartSelectionVisibleChanged, ui->grpClassStartSelection, &QGroupBox::setVisible);
-
- //connect(ui->edStagesCount, &QSpinBox::valueChanged, [this](int n) {
- // qfInfo() << "stage cnt value changed:" << n;
- //});
}
ReportOptionsDialog::~ReportOptionsDialog()
@@ -108,7 +99,6 @@ void ReportOptionsDialog::setClassNamesFilter(const QStringList &class_names)
ui->btClassNames->setChecked(true);
ui->chkClassFilterDoesntMatch->setChecked(false);
ui->edFilter->setText(class_names.join(','));
- ui->grpClassStartSelection->setChecked(false);
}
int ReportOptionsDialog::stagesCount() const
@@ -174,6 +164,12 @@ QString ReportOptionsDialog::getClassesForStartNumber(const int number, const in
QString ReportOptionsDialog::sqlWhereExpression(const ReportOptionsDialog::Options &opts,const int stage_id)
{
+ QStringList conditions;
+ if (opts.startNumber() > 0) {
+ qf::core::String s = getClassesForStartNumber(opts.startNumber(),stage_id);
+ QStringList sl = s.splitAndTrim(',');
+ conditions << QString("classes.name IN('%2')").arg(sl.join("','"));
+ }
if(opts.isUseClassFilter()) {
QString filter_str = opts.classFilter();
if(!filter_str.isEmpty()) {
@@ -181,34 +177,24 @@ QString ReportOptionsDialog::sqlWhereExpression(const ReportOptionsDialog::Optio
if(filter_type == FilterType::RegExp) {
QString filter_operator = opts.isInvertClassFilter()? "!~*": "~*";
QString ret = "classes.name %1 '%2'";
- ret = ret.arg(filter_operator).arg(filter_str);
- return ret;
+ conditions << ret.arg(filter_operator).arg(filter_str);
}
else if(filter_type == FilterType::WildCard) {
filter_str.replace('*', '%').replace('?', '_');
QString filter_operator = opts.isInvertClassFilter()? "NOT LIKE": "LIKE";
QString ret = "classes.name %1 '%2'";
- ret = ret.arg(filter_operator).arg(filter_str);
- return ret;
+ conditions << ret.arg(filter_operator).arg(filter_str);
}
else if(filter_type == FilterType::ClassName) {
qf::core::String s = filter_str;
QStringList sl = s.splitAndTrim(',');
QString filter_operator = opts.isInvertClassFilter()? "NOT IN": "IN";
QString ret = "classes.name %1('%2')";
- ret = ret.arg(filter_operator).arg(sl.join("','"));
- return ret;
+ conditions << ret.arg(filter_operator).arg(sl.join("','"));
}
}
-
- }
- else if (opts.isUseClassStartSelectionFilter()) {
- qf::core::String s = getClassesForStartNumber(opts.classStartNumber(),stage_id);
- QStringList sl = s.splitAndTrim(',');
- QString ret = QString("classes.name IN('%2')").arg(sl.join("','"));
- return ret;
}
- return QString();
+ return conditions.isEmpty()? "": "(" + conditions.join(") AND (") + ")";
}
/*
void ReportOptionsDialog::showEvent(QShowEvent *event)
@@ -253,9 +239,7 @@ void ReportOptionsDialog::setOptions(const ReportOptionsDialog::Options &options
ui->btWildCard->setChecked(filter_type == FilterType::WildCard);
ui->btRegExp->setChecked(filter_type == FilterType::RegExp);
ui->btClassNames->setChecked(filter_type == FilterType::ClassName);
- if (ui->grpClassStartSelection->isEnabled() && ui->grpClassStartSelection->isVisible())
- ui->grpClassStartSelection->setChecked(options.isUseClassStartSelectionFilter());
- auto index = ui->cbxStartNumber->findData(options.classStartNumber());
+ auto index = ui->cbxStartNumber->findData(options.startNumber());
ui->cbxStartNumber->setCurrentIndex(index);
ui->chkStartOpts_PrintVacants->setChecked(options.isStartListPrintVacants());
ui->chkStartOpts_PrintStartNumbers->setChecked(options.isStartListPrintStartNumbers());
@@ -289,8 +273,7 @@ ReportOptionsDialog::Options ReportOptionsDialog::options() const
opts.setUseClassFilter(ui->grpClassFilter->isChecked());
opts.setInvertClassFilter(ui->chkClassFilterDoesntMatch->isChecked());
opts.setClassFilter(ui->edFilter->text());
- opts.setClassStartNumber(ui->cbxStartNumber->currentData().toInt());
- opts.setUseClassStartSelectionFilter(ui->grpClassStartSelection->isChecked());
+ opts.setStartNumber(ui->cbxStartNumber->currentData().toInt());
FilterType filter_type = ui->btWildCard->isChecked()? FilterType::WildCard: ui->btRegExp->isChecked()? FilterType::RegExp: FilterType::ClassName;
opts.setClassFilterType((int)filter_type);
opts.setStartListPrintVacants(isStartListPrintVacants());
diff --git a/libquickevent/libquickeventgui/src/reportoptionsdialog.h b/libquickevent/libquickeventgui/src/reportoptionsdialog.h
index 10fc1346a..f0d42713c 100644
--- a/libquickevent/libquickeventgui/src/reportoptionsdialog.h
+++ b/libquickevent/libquickeventgui/src/reportoptionsdialog.h
@@ -32,7 +32,7 @@ class QUICKEVENTGUI_DECL_EXPORT ReportOptionsDialog : public QDialog, public qf:
Q_PROPERTY(bool resultOptionsVisible READ isResultOptionsVisible WRITE setResultOptionsVisible NOTIFY resultOptionsVisibleChanged)
Q_PROPERTY(bool startTimeFormatVisible READ isStartTimeFormatVisible WRITE setStartTimeFormatVisible NOTIFY startTimeFormatVisibleChanged)
Q_PROPERTY(bool startlistOrderFirstByVisible READ isStartlistOrderFirstByVisible WRITE setStartlistOrderFirstByVisible NOTIFY startlistOrderFirstByVisibleChanged)
- Q_PROPERTY(bool classStartSelectionVisible READ isClassStartSelectionVisible WRITE setClassStartSelectionVisible NOTIFY classStartSelectionVisibleChanged)
+ //Q_PROPERTY(bool classStartSelectionVisible READ isClassStartSelectionVisible WRITE setClassStartSelectionVisible NOTIFY classStartSelectionVisibleChanged)
QF_PROPERTY_BOOL_IMPL2(c, C, lassFilterVisible, true)
QF_PROPERTY_BOOL_IMPL2(s, S, tartListOptionsVisible, false)
@@ -45,7 +45,6 @@ class QUICKEVENTGUI_DECL_EXPORT ReportOptionsDialog : public QDialog, public qf:
QF_PROPERTY_BOOL_IMPL2(r, R, esultOptionsVisible, false)
QF_PROPERTY_BOOL_IMPL2(s, S, tartTimeFormatVisible, false)
QF_PROPERTY_BOOL_IMPL2(s, S, tartlistOrderFirstByVisible, false)
- QF_PROPERTY_BOOL_IMPL2(c, C, lassStartSelectionVisible, false)
private:
using Super = QDialog;
public:
@@ -76,8 +75,7 @@ class QUICKEVENTGUI_DECL_EXPORT ReportOptionsDialog : public QDialog, public qf:
QF_VARIANTMAP_FIELD2(bool, isR, setR, esultExcludeDisq, false)
QF_VARIANTMAP_FIELD2(int, s, setS, tartTimeFormat, 0)
QF_VARIANTMAP_FIELD2(int, s, setS, tartlistOrderFirstBy, 0)
- QF_VARIANTMAP_FIELD(bool, is, set, UseClassStartSelectionFilter)
- QF_VARIANTMAP_FIELD2(int, c, setC, lassStartNumber, 0)
+ QF_VARIANTMAP_FIELD2(int, s, setS, tartNumber, 0)
public:
Options(const QVariantMap &o = QVariantMap()) : QVariantMap(o) {}
};
@@ -103,7 +101,7 @@ class QUICKEVENTGUI_DECL_EXPORT ReportOptionsDialog : public QDialog, public qf:
void loadPersistentSettings(const Options &default_options);
Q_SLOT void loadPersistentSettings();
Q_SLOT void savePersistentSettings();
- Q_SLOT void resetPersistentSettings();
+ Q_SLOT void resetPersistentSettings();
void setClassNamesFilter(const QStringList &class_names);
diff --git a/libquickevent/libquickeventgui/src/reportoptionsdialog.ui b/libquickevent/libquickeventgui/src/reportoptionsdialog.ui
index fa777ccf2..48ef5b7c8 100644
--- a/libquickevent/libquickeventgui/src/reportoptionsdialog.ui
+++ b/libquickevent/libquickeventgui/src/reportoptionsdialog.ui
@@ -7,16 +7,13 @@
0
0
747
- 969
+ 1126
Print Report Options
-
-
- 9
-
+
5
@@ -29,45 +26,45 @@
5
- -
-
+
-
+
- Stages count
+ Legs count
-
+
-
-
+
- Number of stages
+ Number of legs
-
-
+
- -
-
+
-
+
- Legs count
+ Stages count
-
+
-
-
+
- Number of legs
+ Number of stages
-
-
+
- -
+
-
Class filter
@@ -76,7 +73,7 @@
true
- true
+ false
@@ -137,68 +134,7 @@
- -
-
-
- Class filter - start number selection
-
-
- true
-
-
-
-
-
-
- Use only class from selected start
-
-
-
- -
-
-
-
-
-
- -
-
-
- Result options
-
-
-
-
-
-
- Number of places in each class
-
-
-
- -
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
- 1
-
-
- 9999
-
-
- 9999
-
-
-
- -
-
-
- Exclude DISQ
-
-
-
-
-
-
- -
+
-
Starters options
@@ -239,12 +175,12 @@
- -
+
-
Start options
-
+
5
@@ -257,89 +193,73 @@
5
-
-
+
-
Print vacants
- -
+
-
Print start numbers
-
-
-
- -
-
-
- Start time format
-
-
-
-
-
+
-
+
- start at 0 (mmm.ss)
-
-
- true
+ Use only class from selected start
- -
-
-
- daytime (hh:mm:ss)
-
-
+
-
+
- -
-
+
-
+
- Start list is sorted first by
+ Result options
-
+
-
-
-
- <html><head/><body><p>(class name, start time, runner name)</p></body></html>
-
+
- Class names
+ Number of places in each class
-
-
-
- <html><head/><body><p>(start time, class name, runner name)</p></body></html>
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
- Start times
+
+ 1
+
+
+ 9999
+
+
+ 9999
-
-
-
- <html><head/><body><p>(runner name, class name, start time)</p></body></html>
-
+
- Runner names
+ Exclude DISQ
- -
+
-
Page layout
@@ -507,20 +427,7 @@
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
-
- -
+
-
-
@@ -548,6 +455,84 @@
+ -
+
+
+ Start list is sorted first by
+
+
+
-
+
+
+ <html><head/><body><p>(class name, start time, runner name)</p></body></html>
+
+
+ Class names
+
+
+
+ -
+
+
+ <html><head/><body><p>(start time, class name, runner name)</p></body></html>
+
+
+ Start times
+
+
+
+ -
+
+
+ <html><head/><body><p>(runner name, class name, start time)</p></body></html>
+
+
+ Runner names
+
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+ Start time format
+
+
+
-
+
+
+ start at 0 (mmm.ss)
+
+
+ true
+
+
+
+ -
+
+
+ daytime (hh:mm:ss)
+
+
+
+
+
+
@@ -559,8 +544,6 @@
btClassNames
edFilter
chkClassFilterDoesntMatch
- grpClassStartSelection
- cbxStartNumber
edNumPlaces
chkExcludeDisq
edStartersOptionsLineSpacing
diff --git a/quickevent/app/quickevent/plugins/Runs/src/runsplugin.cpp b/quickevent/app/quickevent/plugins/Runs/src/runsplugin.cpp
index f568f96b4..fbbb3816b 100644
--- a/quickevent/app/quickevent/plugins/Runs/src/runsplugin.cpp
+++ b/quickevent/app/quickevent/plugins/Runs/src/runsplugin.cpp
@@ -1448,7 +1448,6 @@ void RunsPlugin::report_startListClasses()
dlg.setStartListOptionsVisible(true);
dlg.setPageLayoutVisible(true);
dlg.setStartTimeFormatVisible(true);
- dlg.setClassStartSelectionVisible(true);
if(dlg.exec()) {
auto tt = startListClassesTable(dlg.sqlWhereExpression(getPlugin()->currentStageId()), dlg.isStartListPrintVacants(), dlg.startTimeFormat());
auto opts = dlg.optionsMap();
@@ -1502,7 +1501,6 @@ void RunsPlugin::report_startListStarters()
dlg.setStartListOptionsVisible(true);
dlg.setStartListPrintVacantsVisible(false);
dlg.setStartersOptionsVisible(true);
- dlg.setClassStartSelectionVisible(true);
if(dlg.exec()) {
auto tt = startListStartersTable(dlg.sqlWhereExpression(getPlugin()->currentStageId()));
auto opts = dlg.optionsMap();
@@ -1592,7 +1590,8 @@ void RunsPlugin::report_resultsClasses()
dlg.setResultOptionsVisible(true);
//dlg.setPageLayoutVisible(false);
if(dlg.exec()) {
- auto tt = currentStageResultsTable(dlg.sqlWhereExpression(), dlg.resultNumPlaces(), dlg.options().isResultExcludeDisq());
+ auto sql_where = dlg.sqlWhereExpression();
+ auto tt = currentStageResultsTable(sql_where, dlg.resultNumPlaces(), dlg.options().isResultExcludeDisq());
auto opts = dlg.optionsMap();
QVariantMap props;
props["options"] = opts;