diff --git a/src/forms/judgingdialog.ui b/src/forms/judgingdialog.ui
index 24489131..f65bfe1a 100755
--- a/src/forms/judgingdialog.ui
+++ b/src/forms/judgingdialog.ui
@@ -3,7 +3,7 @@
JudgingDialog
- Qt::WindowModality::WindowModal
+ Qt::WindowModality::NonModal
diff --git a/src/lemon.cpp b/src/lemon.cpp
index 43fb77fe..ba83d1a7 100644
--- a/src/lemon.cpp
+++ b/src/lemon.cpp
@@ -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);
@@ -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);
diff --git a/src/lemon.h b/src/lemon.h
index 17385bc1..79049c58 100644
--- a/src/lemon.h
+++ b/src/lemon.h
@@ -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();
diff --git a/src/resultviewer.cpp b/src/resultviewer.cpp
index c6c160ad..92c5632e 100644
--- a/src/resultviewer.cpp
+++ b/src/resultviewer.cpp
@@ -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 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 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 contestantList = curContest->getContestantList();
QList> sortList;
QList fullScore;
@@ -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"));
}
@@ -213,6 +211,7 @@ void ResultViewer::refreshViewer() {
}
}
+ setSortingEnabled(true);
sortByColumn(0, Qt::AscendingOrder);
}
@@ -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() {
@@ -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() {
@@ -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() {
@@ -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) {
@@ -406,6 +410,8 @@ void ResultViewer::deleteContestant() {
void ResultViewer::detailInformation() {
QList selectionRange = selectedRanges();
+ if (selectionRange.size() == 0)
+ return;
int index = selectionRange[0].topRow();
auto *dialog = new DetailDialog(this);
dialog->setModal(true);
diff --git a/src/resultviewer.h b/src/resultviewer.h
index 3081919c..7065746a 100644
--- a/src/resultviewer.h
+++ b/src/resultviewer.h
@@ -44,4 +44,6 @@ class ResultViewer : public QTableWidget {
signals:
void contestantDeleted();
+ void requestEnterJudgeMode();
+ void requestLeaveJudgeMode();
};