Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/forms/judgingdialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<class>JudgingDialog</class>
<widget class="QDialog" name="JudgingDialog">
<property name="windowModality">
<enum>Qt::WindowModality::WindowModal</enum>
<enum>Qt::WindowModality::NonModal</enum>
</property>
<property name="geometry">
<rect>
Expand Down
27 changes: 27 additions & 0 deletions src/lemon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ LemonLime::LemonLime(QWidget *parent) : QMainWindow(parent), ui(new Ui::LemonLim
connect(ui->moveDownButton, &QToolButton::clicked, this, &LemonLime::moveDownTask);
connect(ui->resultViewer, &ResultViewer::itemSelectionChanged, this, &LemonLime::viewerSelectionChanged);
connect(ui->resultViewer, &ResultViewer::contestantDeleted, this, &LemonLime::contestantDeleted);
connect(ui->resultViewer, &ResultViewer::requestEnterJudgeMode, this, &LemonLime::enterJudgeMode);
connect(ui->resultViewer, &ResultViewer::requestLeaveJudgeMode, this, &LemonLime::leaveJudgeMode);
connect(ui->newAction, &QAction::triggered, this, &LemonLime::newAction);
connect(ui->openAction, &QAction::triggered, this, &LemonLime::loadAction);
connect(ui->saveAction, &QAction::triggered, this, &LemonLime::saveAction);
Expand Down Expand Up @@ -597,6 +599,31 @@ void LemonLime::contestantDeleted() {
ui->refreshAction->setEnabled(true);
}

// 会锁定若干控件,防止用户操作,并禁止表格选中事件(这样双击时就会直接返回)
void LemonLime::enterJudgeMode() {
ui->tabWidget->tabBar()->setEnabled(false);
ui->cleanupButton->setEnabled(false);
ui->refreshButton->setEnabled(false);
ui->judgeButton->setEnabled(false);
ui->judgeAllButton->setEnabled(false);
ui->judgeUnjudgedButton->setEnabled(false);
ui->resultViewer->clearSelection();
ui->resultViewer->setSelectionMode(QAbstractItemView::NoSelection);

menuBar()->setEnabled(false);
}

void LemonLime::leaveJudgeMode() {
ui->tabWidget->tabBar()->setEnabled(true);
ui->cleanupButton->setEnabled(true);
ui->refreshButton->setEnabled(true);
ui->judgeAllButton->setEnabled(true);
ui->judgeUnjudgedButton->setEnabled(true);
ui->resultViewer->setSelectionMode(QAbstractItemView::ExtendedSelection);

menuBar()->setEnabled(true);
}

void LemonLime::saveContest(const QString &fileName) {
QFile file(fileName);

Expand Down
2 changes: 2 additions & 0 deletions src/lemon.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ class LemonLime : public QMainWindow {
void moveDownTask();
void viewerSelectionChanged();
void contestantDeleted();
void enterJudgeMode();
void leaveJudgeMode();
void newAction();
void saveAction();
static void openFolderAction();
Expand Down
44 changes: 25 additions & 19 deletions src/resultviewer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,34 +96,34 @@ void ResultViewer::setContest(Contest *contest) {
}

void ResultViewer::refreshViewer() {
clear();
setRowCount(0);
setColumnCount(0);

if (! curContest)
if (! curContest) {
clear();
setRowCount(0);
setColumnCount(0);
return;
}
clear();
setSortingEnabled(false);

QStringList headerList;
headerList << tr("Rank") << tr("Name") << tr("Total Score");
QList<Task *> taskList = curContest->getTaskList();
Settings setting;
curContest->copySettings(setting);
ColorTheme colors = setting.getCurrentColorTheme();

#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
if (QGuiApplication::styleHints()->colorScheme() == Qt::ColorScheme::Dark) {
colors.invertLightness();
LOG("Auto dark mode has been set");
}
#endif

QStringList headerList;
headerList << tr("Rank") << tr("Name") << tr("Total Score");
QList<Task *> taskList = curContest->getTaskList();
for (auto &i : taskList) {
headerList << i->getProblemTitle();
}

headerList << tr("Total Used Time (s)") << tr("Judging Time");
setColumnCount(taskList.size() + 5);
setHorizontalHeaderLabels(headerList);
horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);

QList<Contestant *> contestantList = curContest->getContestantList();
QList<std::pair<int, QString>> sortList;
QList<int> fullScore;
Expand Down Expand Up @@ -158,8 +158,6 @@ void ResultViewer::refreshViewer() {
bg = colors.getColorPer(score, fullScore[j]);

item(i, j + 3)->setBackground(bg);

// qDebug() << i << j << bg;
} else {
item(i, j + 3)->setText(tr("Invalid"));
}
Expand Down Expand Up @@ -213,6 +211,7 @@ void ResultViewer::refreshViewer() {
}
}

setSortingEnabled(true);
sortByColumn(0, Qt::AscendingOrder);
}

Expand Down Expand Up @@ -242,22 +241,24 @@ void ResultViewer::judgeSelected() {
}

auto *dialog = new JudgingDialog(this);
dialog->setModal(true);
emit requestEnterJudgeMode();
dialog->setContest(curContest);
dialog->show();
dialog->judge(judgeList);
delete dialog;
refreshViewer();
emit requestLeaveJudgeMode();
}

void ResultViewer::judgeAll() {
auto *dialog = new JudgingDialog(this);
dialog->setModal(true);
emit requestEnterJudgeMode();
dialog->setContest(curContest);
dialog->show();
dialog->judgeAll();
delete dialog;
refreshViewer();
emit requestLeaveJudgeMode();
}

void ResultViewer::judgeUnjudged() {
Expand All @@ -282,12 +283,13 @@ void ResultViewer::judgeUnjudged() {
}

auto *dialog = new JudgingDialog(this);
dialog->setModal(true);
emit requestEnterJudgeMode();
dialog->setContest(curContest);
dialog->show();
dialog->judge(judgeList);
delete dialog;
refreshViewer();
emit requestLeaveJudgeMode();
}

void ResultViewer::judgeGrey() {
Expand All @@ -312,12 +314,13 @@ void ResultViewer::judgeGrey() {
}

auto *dialog = new JudgingDialog(this);
dialog->setModal(true);
emit requestEnterJudgeMode();
dialog->setContest(curContest);
dialog->show();
dialog->judge(judgeList);
delete dialog;
refreshViewer();
emit requestLeaveJudgeMode();
}

void ResultViewer::judgeMagenta() {
Expand Down Expand Up @@ -345,12 +348,13 @@ void ResultViewer::judgeMagenta() {
}

auto *dialog = new JudgingDialog(this);
dialog->setModal(true);
emit requestEnterJudgeMode();
dialog->setContest(curContest);
dialog->show();
dialog->judge(judgeList);
delete dialog;
refreshViewer();
emit requestLeaveJudgeMode();
}

void ResultViewer::clearPath(const QString &curDir) {
Expand Down Expand Up @@ -406,6 +410,8 @@ void ResultViewer::deleteContestant() {

void ResultViewer::detailInformation() {
QList<QTableWidgetSelectionRange> selectionRange = selectedRanges();
if (selectionRange.size() == 0)
return;
int index = selectionRange[0].topRow();
auto *dialog = new DetailDialog(this);
dialog->setModal(true);
Expand Down
2 changes: 2 additions & 0 deletions src/resultviewer.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,6 @@ class ResultViewer : public QTableWidget {

signals:
void contestantDeleted();
void requestEnterJudgeMode();
void requestLeaveJudgeMode();
};
Loading