Esempio n. 1
0
int CloseTable(char *table,FILE *fp)
{

    fclose(fp);

    UnlockTable(table,LOCK_NORMAL);

    return(0);
}
Esempio n. 2
0
void MainWindow::StopJudging()
{
    //qDebug()<<"STOP";
    Global::g_is_judge_stoped = true;
    if (is_locked)
    {
        judge_thread->StopJudge();
        judge_thread->WaitForFinished(2000);
    }
    Global::g_contest.SaveResultCache();
    UnlockTable();
}
Esempio n. 3
0
void MainWindow::StartJudging(int row, int column)
{
    if (is_locked) return;

    Global::g_is_judge_stoped = false;

    board_table->ClearHighlighted();
    board_table->horizontalHeader()->setSectionsMovable(false);
    board_table->horizontalHeader()->setSortIndicatorShown(false);
    board_table->horizontalHeader()->setSortIndicator(-1, Qt::AscendingOrder);
    board_table->setSelectionMode(QAbstractItemView::NoSelection);

    detail_table->StartLastJudgeTimer();
    detail_table->ClearDetail();

    LockTable();

    ui->action_configure->setEnabled(false);
    ui->action_set_list->setEnabled(false);
    ui->action_export->setEnabled(false);
    ui->action_refresh->setEnabled(false);
    ui->action_judge_selected->setEnabled(false);
    ui->action_judge_unjudged->setEnabled(false);
    ui->action_judge_all->setEnabled(false);
    ui->action_stop->setEnabled(true);

    judge_thread = new JudgeThread(row, column, this);

    connect(judge_thread, &JudgeThread::titleDetailFinished, detail_table, &DetailTable::onAddTitleDetail);
    connect(judge_thread, &JudgeThread::noteDetailFinished,  detail_table, &DetailTable::onAddNoteDetail);
    connect(judge_thread, &JudgeThread::pointDetailFinished, detail_table, &DetailTable::onAddPointDetail);
    connect(judge_thread, &JudgeThread::scoreDetailFinished, detail_table, &DetailTable::onAddScoreDetail);

    connect(judge_thread, &JudgeThread::itemJudgeFinished,   board_table, &BoardTable::onSetItemUnselected);
    connect(judge_thread, &JudgeThread::labelTextChanged,    board_table, &BoardTable::onUpdateLabelText);
    connect(judge_thread, &JudgeThread::sumLabelChanged,     board_table, &BoardTable::onUpdateSumLabel);
    connect(judge_thread, &JudgeThread::problemLabelChanged, board_table, &BoardTable::onUpdateProblemLabel);

    if (row == -1) // Judge selected
    {
        for (int i = 0; i < Global::g_contest.player_num; i++)
            for (auto j : Global::g_contest.problem_order)
                if (board_table->item(i, j + 2)->isSelected())
                    judge_thread->AppendProblem(i, j + 2);
    }
    else if (row == -2) // Judge unjudged
    {
        for (int i = 0; i < Global::g_contest.player_num; i++)
            for (auto j : Global::g_contest.problem_order)
                if (Global::g_contest.players[Global::GetLogicalRow(i)]->ProblemLabelAt(j)->State() == ' ')
                {
                    judge_thread->AppendProblem(i, j + 2);
                    board_table->item(i, j + 2)->setSelected(true);
                }
    }
    else if (column <= 1) // Judge one player's all problems
    {
        for (auto j : Global::g_contest.problem_order)
            board_table->item(row, j + 2)->setSelected(true);
    }
    else if (column > 1) // Judge one
        judge_thread->AppendProblem(row, column);

    QEventLoop* eventLoop = new QEventLoop(this);
    connect(judge_thread, &QThread::finished, eventLoop, &QEventLoop::quit);
    judge_thread->start();
    eventLoop->exec();
    delete eventLoop;
    delete judge_thread;

    UnlockTable();

    board_table->horizontalHeader()->setSectionsMovable(true);
    board_table->setSelectionMode(QAbstractItemView::ExtendedSelection);

    if (Global::g_is_contest_closed) return;

    ui->action_configure->setEnabled(true);
    ui->action_set_list->setEnabled(true);
    ui->action_export->setEnabled(true);
    ui->action_refresh->setEnabled(true);
    ui->action_judge_selected->setEnabled(true);
    ui->action_judge_unjudged->setEnabled(true);
    ui->action_judge_all->setEnabled(true);
    ui->action_stop->setEnabled(false);

    this->activateWindow();

    Global::g_contest.SaveResultCache();
}