RedPanda-CPP/RedPandaIDE/widgets/ojproblempropertywidget.cpp

104 lines
3.3 KiB
C++

/*
* Copyright (C) 2020-2022 Roy Qu (royqh1979@gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include "ojproblempropertywidget.h"
#include "ui_ojproblempropertywidget.h"
#include "../problems/ojproblemset.h"
OJProblemPropertyWidget::OJProblemPropertyWidget(QWidget *parent) :
QDialog(parent),
ui(new Ui::OJProblemPropertyWidget)
{
ui->setupUi(this);
QFont f = ui->lbName->font();
f.setPixelSize(f.pixelSize()+2);
f.setBold(true);
ui->lbName->setFont(f);
ui->cbTimeLimitUnit->addItem(tr("sec"));
ui->cbTimeLimitUnit->addItem(tr("ms"));
ui->cbMemoryLimitUnit->addItem(tr("KB"));
ui->cbMemoryLimitUnit->addItem(tr("MB"));
ui->cbMemoryLimitUnit->addItem(tr("GB"));
}
OJProblemPropertyWidget::~OJProblemPropertyWidget()
{
delete ui;
}
void OJProblemPropertyWidget::loadFromProblem(POJProblem problem)
{
if (!problem)
return;
ui->lbName->setText(problem->name);
ui->txtURL->setText(problem->url);
ui->txtDescription->setHtml(problem->description);
ui->spinMemoryLimit->setValue(problem->memoryLimit);
ui->spinTimeLimit->setValue(problem->timeLimit);
switch(problem->timeLimitUnit) {
case ProblemTimeLimitUnit::Seconds:
ui->cbTimeLimitUnit->setCurrentText(tr("sec"));
break;
case ProblemTimeLimitUnit::Milliseconds:
ui->cbTimeLimitUnit->setCurrentText(tr("ms"));
break;
}
switch(problem->memoryLimitUnit) {
case ProblemMemoryLimitUnit::KB:
ui->cbTimeLimitUnit->setCurrentText(tr("KB"));
break;
case ProblemMemoryLimitUnit::MB:
ui->cbTimeLimitUnit->setCurrentText(tr("MB"));
break;
case ProblemMemoryLimitUnit::GB:
ui->cbTimeLimitUnit->setCurrentText(tr("GB"));
break;
}
}
void OJProblemPropertyWidget::saveToProblem(POJProblem problem)
{
if (!problem)
return;
problem->name = ui->lbName->text();
problem->url = ui->txtURL->text();
problem->description = ui->txtDescription->toHtml();
problem->memoryLimit = ui->spinMemoryLimit->value();
problem->timeLimit = ui->spinTimeLimit->value();
if (ui->cbTimeLimitUnit->currentText()=="sec")
problem->timeLimitUnit = ProblemTimeLimitUnit::Seconds;
else
problem->timeLimitUnit = ProblemTimeLimitUnit::Milliseconds;
if (ui->cbTimeLimitUnit->currentText()=="KB")
problem->memoryLimitUnit = ProblemMemoryLimitUnit::KB;
else if (ui->cbTimeLimitUnit->currentText()=="MB")
problem->memoryLimitUnit = ProblemMemoryLimitUnit::MB;
else
problem->memoryLimitUnit = ProblemMemoryLimitUnit::GB;
}
void OJProblemPropertyWidget::on_btnOk_clicked()
{
this->accept();
}
void OJProblemPropertyWidget::on_btnCancel_clicked()
{
this->reject();
}