Skip to content

Commit

Permalink
Merge branch 'Quick-Event:master' into extend-imports-xml-csv-world-r…
Browse files Browse the repository at this point in the history
…aces
  • Loading branch information
arnost00 authored Jul 28, 2023
2 parents 726e829 + cabbe02 commit 0f81257
Show file tree
Hide file tree
Showing 15 changed files with 157 additions and 42 deletions.
6 changes: 6 additions & 0 deletions libquickevent/libquickeventcore/src/codedef.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,12 @@ std::optional<int> CodeDef::codeToStartNumber(int code)
return {};
}

int CodeDef::startNumberToCode(int start)
{
return start + START_PUNCH_CODE;
}


std::optional<int> CodeDef::codeToFinishNumber(int code)
{
if(CodeDef::codeToType(code) == CodeDef::Type::Finish)
Expand Down
1 change: 1 addition & 0 deletions libquickevent/libquickeventcore/src/codedef.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ class QUICKEVENTCORE_DECL_EXPORT CodeDef : public QVariantMap
static Type codeToType(int code);
static std::optional<int> codeToStartNumber(int code);
static std::optional<int> codeToFinishNumber(int code);
static int startNumberToCode(int start);

QString toString() const;
};
Expand Down
70 changes: 65 additions & 5 deletions libquickevent/libquickeventgui/src/reportoptionsdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@

#include <qf/core/string.h>
#include <qf/core/assert.h>
#include <qf/core/sql/query.h>

#include <quickevent/core/codedef.h>

#include <QSettings>
#include <QShowEvent>
Expand Down Expand Up @@ -36,14 +39,32 @@ 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());
}
}
if (ui->cbxStartNumber->count() < 1) {
ui->grpClassStartSelection->setEnabled(false);
ui->grpClassStartSelection->setChecked(false);
ui->cbxStartNumber->clear();
}
connect(ui->btSaveAsDefault, &QPushButton::clicked, [this]() {
savePersistentSettings();
});
connect(this, &ReportOptionsDialog::persistentSettingsIdChanged, [this]() {
loadPersistentSettings();
});
connect(ui->btReset, &QPushButton::clicked, this, &ReportOptionsDialog::resetPersistentSettings);

connect(this, &ReportOptionsDialog::startListOptionsVisibleChanged, ui->grpStartOptions, &QGroupBox::setVisible);
connect(this, &ReportOptionsDialog::classFilterVisibleChanged, ui->grpClassFilter, &QGroupBox::setVisible);
Expand All @@ -56,6 +77,7 @@ 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;
Expand Down Expand Up @@ -86,6 +108,7 @@ 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
Expand Down Expand Up @@ -123,13 +146,33 @@ bool ReportOptionsDialog::isStartListPrintStartNumbers() const
return ui->chkStartOpts_PrintStartNumbers->isChecked();
}

QString ReportOptionsDialog::sqlWhereExpression() const
QString ReportOptionsDialog::sqlWhereExpression(const int stage_id) const
{
const Options opts = options();
return sqlWhereExpression(opts);
return sqlWhereExpression(opts,stage_id);
}

QString ReportOptionsDialog::sqlWhereExpression(const ReportOptionsDialog::Options &opts)
QString ReportOptionsDialog::getClassesForStartNumber(const int number, const int stage_id)
{
QString classes;
if (number > 0) {
int start_code = core::CodeDef::startNumberToCode(number);

QString query_str = "SELECT classes.name FROM classes, classdefs, coursecodes, codes"
" WHERE classdefs.classId = classes.id AND classdefs.courseId = coursecodes.courseId AND"
" coursecodes.position = 0 AND coursecodes.codeId = codes.id AND classdefs.stageId = %2 AND codes.code = %1";
qf::core::sql::Query q;
q.exec(query_str.arg(start_code).arg(stage_id), qf::core::Exception::Throw);
while (q.next()) {
if (!classes.isEmpty())
classes += ",";
classes += q.value(0).toString();
}
}
return classes;
}

QString ReportOptionsDialog::sqlWhereExpression(const ReportOptionsDialog::Options &opts,const int stage_id)
{
if(opts.isUseClassFilter()) {
QString filter_str = opts.classFilter();
Expand Down Expand Up @@ -157,6 +200,13 @@ QString ReportOptionsDialog::sqlWhereExpression(const ReportOptionsDialog::Optio
return ret;
}
}

}
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();
}
Expand Down Expand Up @@ -196,14 +246,17 @@ void ReportOptionsDialog::setOptions(const ReportOptionsDialog::Options &options
ui->edPageHeight->setValue(options.pageHeight());
ui->edHorizontalMargin->setValue(options.horizontalMargin());
ui->edVerticalMargin->setValue(options.verticalMargin());
//ui->chkShirinkPageWidthToColumnCount->setChecked(options.isShirinkPageWidthToColumnCount());
ui->grpClassFilter->setChecked(options.isUseClassFilter());
ui->chkClassFilterDoesntMatch->setChecked(options.isInvertClassFilter());
ui->edFilter->setText(options.classFilter());
FilterType filter_type = (FilterType)options.classFilterType();
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());
ui->cbxStartNumber->setCurrentIndex(index);
ui->chkStartOpts_PrintVacants->setChecked(options.isStartListPrintVacants());
ui->chkStartOpts_PrintStartNumbers->setChecked(options.isStartListPrintStartNumbers());
ui->edStartersOptionsLineSpacing->setValue(options.startersOptionsLineSpacing());
Expand Down Expand Up @@ -233,10 +286,11 @@ ReportOptionsDialog::Options ReportOptionsDialog::options() const
opts.setPageHeight(ui->edPageHeight->value());
opts.setHorizontalMargin(ui->edHorizontalMargin->value());
opts.setVerticalMargin(ui->edVerticalMargin->value());
//opts.setShirinkPageWidthToColumnCount(ui->chkShirinkPageWidthToColumnCount->isChecked());
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());
FilterType filter_type = ui->btWildCard->isChecked()? FilterType::WildCard: ui->btRegExp->isChecked()? FilterType::RegExp: FilterType::ClassName;
opts.setClassFilterType((int)filter_type);
opts.setStartListPrintVacants(isStartListPrintVacants());
Expand Down Expand Up @@ -329,6 +383,12 @@ ReportOptionsDialog::StartlistOrderFirstBy ReportOptionsDialog::startlistOrderFi
return start_order_by;
}

void ReportOptionsDialog::resetPersistentSettings()
{
Options new_options;
setOptions(new_options);
savePersistentSettings();
}

}}

11 changes: 8 additions & 3 deletions libquickevent/libquickeventgui/src/reportoptionsdialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +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)

QF_PROPERTY_BOOL_IMPL2(c, C, lassFilterVisible, true)
QF_PROPERTY_BOOL_IMPL2(s, S, tartListOptionsVisible, false)
Expand All @@ -44,6 +45,7 @@ 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:
Expand All @@ -62,7 +64,6 @@ class QUICKEVENTGUI_DECL_EXPORT ReportOptionsDialog : public QDialog, public qf:
QF_VARIANTMAP_FIELD2(int, c, setC, olumnCount, 2)
QF_VARIANTMAP_FIELD2(int, h, setH, orizontalMargin, 10)
QF_VARIANTMAP_FIELD2(int, v, setV, erticalMargin, 5)
QF_VARIANTMAP_FIELD2(bool, is, set, ShirinkPageWidthToColumnCount, false)
QF_VARIANTMAP_FIELD(QString, c, setC, lassFilter)
QF_VARIANTMAP_FIELD2(int, c, setC, lassFilterType, 0)
QF_VARIANTMAP_FIELD(bool, is, set, UseClassFilter)
Expand All @@ -75,6 +76,8 @@ 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)
public:
Options(const QVariantMap &o = QVariantMap()) : QVariantMap(o) {}
};
Expand All @@ -100,6 +103,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();

void setClassNamesFilter(const QStringList &class_names);

Expand All @@ -117,8 +121,9 @@ class QUICKEVENTGUI_DECL_EXPORT ReportOptionsDialog : public QDialog, public qf:
Q_INVOKABLE bool isBreakAfterEachClass() const {return breakType() != BreakType::None;}
Q_INVOKABLE bool isColumnBreak() const {return breakType() == BreakType::Column;}
Q_INVOKABLE int resultNumPlaces() const;
Q_INVOKABLE QString sqlWhereExpression() const;
static QString sqlWhereExpression(const Options &opts);
Q_INVOKABLE QString sqlWhereExpression(const int stage_id = 1) const;
static QString sqlWhereExpression(const Options &opts, const int stage_id);
static QString getClassesForStartNumber(const int number, const int stage_id);
protected:
//void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
private:
Expand Down
57 changes: 48 additions & 9 deletions libquickevent/libquickeventgui/src/reportoptionsdialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,10 @@
<property name="bottomMargin">
<number>5</number>
</property>
<item row="0" column="1">
<widget class="QRadioButton" name="btRegExp">
<property name="toolTip">
<string>Posix regular expression</string>
</property>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="chkClassFilterDoesntMatch">
<property name="text">
<string>RegExp</string>
<string>Doesn't match</string>
</property>
</widget>
</item>
Expand All @@ -114,10 +111,13 @@
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="chkClassFilterDoesntMatch">
<item row="0" column="1">
<widget class="QRadioButton" name="btRegExp">
<property name="toolTip">
<string>Posix regular expression</string>
</property>
<property name="text">
<string>Doesn't match</string>
<string>RegExp</string>
</property>
</widget>
</item>
Expand All @@ -137,6 +137,28 @@
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="grpClassStartSelection">
<property name="title">
<string>Class filter - start number selection</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QFormLayout" name="formLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Use only class from selected start</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="cbxStartNumber"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="grpResultOptions">
<property name="title">
Expand Down Expand Up @@ -507,6 +529,13 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btReset">
<property name="text">
<string>Reset</string>
</property>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
Expand All @@ -523,23 +552,33 @@
</widget>
<tabstops>
<tabstop>edStagesCount</tabstop>
<tabstop>edLegsCount</tabstop>
<tabstop>grpClassFilter</tabstop>
<tabstop>btWildCard</tabstop>
<tabstop>btRegExp</tabstop>
<tabstop>btClassNames</tabstop>
<tabstop>edFilter</tabstop>
<tabstop>chkClassFilterDoesntMatch</tabstop>
<tabstop>grpClassStartSelection</tabstop>
<tabstop>cbxStartNumber</tabstop>
<tabstop>edNumPlaces</tabstop>
<tabstop>chkExcludeDisq</tabstop>
<tabstop>edStartersOptionsLineSpacing</tabstop>
<tabstop>chkStartOpts_PrintVacants</tabstop>
<tabstop>chkStartOpts_PrintStartNumbers</tabstop>
<tabstop>btStartTimes1</tabstop>
<tabstop>btStartTimes2</tabstop>
<tabstop>btStartOrder1</tabstop>
<tabstop>btStartOrder2</tabstop>
<tabstop>btStartOrder3</tabstop>
<tabstop>edPageWidth</tabstop>
<tabstop>edHorizontalMargin</tabstop>
<tabstop>edColumnCount</tabstop>
<tabstop>edPageHeight</tabstop>
<tabstop>edVerticalMargin</tabstop>
<tabstop>cbxBreakAfterClassType</tabstop>
<tabstop>btSaveAsDefault</tabstop>
<tabstop>btReset</tabstop>
</tabstops>
<resources/>
<connections>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ Report {
}
textStyle: myStyle.textStyleDefault

width: root.options.isShirinkPageWidthToColumnCount? 210/2*root.options.columnCount: 210
height: 297
width: root.options.pageWidth? root.options.pageWidth: 210
height: root.options.pageHeight? root.options.pageHeight: 297
hinset: root.options.horizontalMargin? root.options.horizontalMargin: 10
vinset: root.options.verticalMargin? root.options.verticalMargin: 5
Frame {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ Report {
}
textStyle: myStyle.textStyleDefault

width: root.options.isShirinkPageWidthToColumnCount? 210/2*root.options.columnCount: 210
height: 297
width: root.options.pageWidth? root.options.pageWidth: 210
height: root.options.pageHeight? root.options.pageHeight: 297
hinset: root.options.horizontalMargin? root.options.horizontalMargin: 10
vinset: root.options.verticalMargin? root.options.verticalMargin: 5
Frame {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ Report {
}
textStyle: myStyle.textStyleDefault

width: root.options.isShirinkPageWidthToColumnCount? 210/2*root.options.columnCount: 210
height: 297
width: root.options.pageWidth? root.options.pageWidth: 210
height: root.options.pageHeight? root.options.pageHeight: 297
hinset: root.options.horizontalMargin? root.options.horizontalMargin: 10
vinset: root.options.verticalMargin? root.options.verticalMargin: 5
Frame {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ Report {
}
textStyle: myStyle.textStyleDefault

width: root.options.isShirinkPageWidthToColumnCount? 210/2*root.options.columnCount: 210
height: 297
width: root.options.pageWidth? root.options.pageWidth: 210
height: root.options.pageHeight? root.options.pageHeight: 297
hinset: root.options.horizontalMargin? root.options.horizontalMargin: 10
vinset: root.options.verticalMargin? root.options.verticalMargin: 5
Frame {
Expand Down
Loading

0 comments on commit 0f81257

Please sign in to comment.