- enhancement: "Convert HTML for - Input" / "Convert HTML for - Expected" in "Options" - "Executor" - "Problem Set"
- fix: Unit for memory limit is not correctly loaded when open problem properties dialog. - enhancement: Auto open the properties dialog, after add a new problem.
This commit is contained in:
parent
0ce717841b
commit
84b09fe842
3
NEWS.md
3
NEWS.md
|
@ -24,6 +24,9 @@ Red Panda C++ Version 2.7
|
||||||
- enhancement: "Show whitespaces" in options / editor / font
|
- enhancement: "Show whitespaces" in options / editor / font
|
||||||
- enhancement: Auto add "lib" to the output of static/dynamic library projects, if project name don't start with "lib".
|
- enhancement: Auto add "lib" to the output of static/dynamic library projects, if project name don't start with "lib".
|
||||||
- fix: Makefile error when "Use precompiled header" is enabled in the project option dialog.
|
- fix: Makefile error when "Use precompiled header" is enabled in the project option dialog.
|
||||||
|
- enhancement: "Convert HTML for - Input" / "Convert HTML for - Expected" in "Options" - "Executor" - "Problem Set"
|
||||||
|
- fix: Unit for memory limit is not correctly loaded when open problem properties dialog.
|
||||||
|
- enhancement: Auto open the properties dialog, after add a new problem.
|
||||||
|
|
||||||
Red Panda C++ Version 2.6
|
Red Panda C++ Version 2.6
|
||||||
|
|
||||||
|
|
|
@ -4022,8 +4022,18 @@ void MainWindow::onNewProblemConnection()
|
||||||
POJProblemCase problemCase = std::make_shared<OJProblemCase>();
|
POJProblemCase problemCase = std::make_shared<OJProblemCase>();
|
||||||
problemCase->testState = ProblemCaseTestState::NotTested;
|
problemCase->testState = ProblemCaseTestState::NotTested;
|
||||||
problemCase->name = tr("Problem Case %1").arg(problem->cases.count()+1);
|
problemCase->name = tr("Problem Case %1").arg(problem->cases.count()+1);
|
||||||
problemCase->input = caseObj["input"].toString();
|
if (pSettings->executor().convertHTMLToTextForInput()) {
|
||||||
problemCase->expected = caseObj["output"].toString();
|
QTextDocument doc;
|
||||||
|
doc.setHtml(caseObj["input"].toString());
|
||||||
|
problemCase->input = doc.toPlainText();
|
||||||
|
} else
|
||||||
|
problemCase->input = caseObj["input"].toString();
|
||||||
|
if (pSettings->executor().convertHTMLToTextForExpected()) {
|
||||||
|
QTextDocument doc;
|
||||||
|
doc.setHtml(caseObj["output"].toString());
|
||||||
|
problemCase->expected = doc.toPlainText();
|
||||||
|
} else
|
||||||
|
problemCase->expected = caseObj["output"].toString();
|
||||||
problem->cases.append(problemCase);
|
problem->cases.append(problemCase);
|
||||||
}
|
}
|
||||||
mOJProblemSetModel.addProblem(problem);
|
mOJProblemSetModel.addProblem(problem);
|
||||||
|
@ -7956,6 +7966,7 @@ void MainWindow::onAddProblem()
|
||||||
problem->name = name;
|
problem->name = name;
|
||||||
mOJProblemSetModel.addProblem(problem);
|
mOJProblemSetModel.addProblem(problem);
|
||||||
ui->lstProblemSet->setCurrentIndex(mOJProblemSetModel.index(mOJProblemSetModel.count()-1));
|
ui->lstProblemSet->setCurrentIndex(mOJProblemSetModel.index(mOJProblemSetModel.count()-1));
|
||||||
|
mProblem_Properties->trigger();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ size_t OJProblem::getMemoryLimit()
|
||||||
OJProblem::OJProblem() :
|
OJProblem::OJProblem() :
|
||||||
timeLimit(0),
|
timeLimit(0),
|
||||||
memoryLimit(0),
|
memoryLimit(0),
|
||||||
timeLimitUnit(ProblemTimeLimitUnit::Milliseconds),
|
timeLimitUnit(ProblemTimeLimitUnit::Seconds),
|
||||||
memoryLimitUnit(ProblemMemoryLimitUnit::MB)
|
memoryLimitUnit(ProblemMemoryLimitUnit::MB)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -3634,6 +3634,26 @@ void Settings::Executor::setCaseMemoryLimit(size_t newCaseMemoryLimit)
|
||||||
mCaseMemoryLimit = newCaseMemoryLimit;
|
mCaseMemoryLimit = newCaseMemoryLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Settings::Executor::convertHTMLToTextForExpected() const
|
||||||
|
{
|
||||||
|
return mConvertHTMLToTextForExpected;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Settings::Executor::setConvertHTMLToTextForExpected(bool newConvertHTMLToTextForExpected)
|
||||||
|
{
|
||||||
|
mConvertHTMLToTextForExpected = newConvertHTMLToTextForExpected;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Settings::Executor::convertHTMLToTextForInput() const
|
||||||
|
{
|
||||||
|
return mConvertHTMLToTextForInput;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Settings::Executor::setConvertHTMLToTextForInput(bool newConvertHTMLToTextForInput)
|
||||||
|
{
|
||||||
|
mConvertHTMLToTextForInput = newConvertHTMLToTextForInput;
|
||||||
|
}
|
||||||
|
|
||||||
bool Settings::Executor::enableCaseLimit() const
|
bool Settings::Executor::enableCaseLimit() const
|
||||||
{
|
{
|
||||||
return mEnableCaseLimit;
|
return mEnableCaseLimit;
|
||||||
|
@ -3696,6 +3716,8 @@ void Settings::Executor::doSave()
|
||||||
saveValue("enable_proble_set", mEnableProblemSet);
|
saveValue("enable_proble_set", mEnableProblemSet);
|
||||||
saveValue("enable_competivie_companion", mEnableCompetitiveCompanion);
|
saveValue("enable_competivie_companion", mEnableCompetitiveCompanion);
|
||||||
saveValue("competitive_companion_port", mCompetivieCompanionPort);
|
saveValue("competitive_companion_port", mCompetivieCompanionPort);
|
||||||
|
saveValue("input_convert_html", mConvertHTMLToTextForInput);
|
||||||
|
saveValue("expected_convert_html", mConvertHTMLToTextForExpected);
|
||||||
saveValue("ignore_spaces_when_validating_cases", mIgnoreSpacesWhenValidatingCases);
|
saveValue("ignore_spaces_when_validating_cases", mIgnoreSpacesWhenValidatingCases);
|
||||||
saveValue("case_editor_font_name",mCaseEditorFontName);
|
saveValue("case_editor_font_name",mCaseEditorFontName);
|
||||||
saveValue("case_editor_font_size",mCaseEditorFontSize);
|
saveValue("case_editor_font_size",mCaseEditorFontSize);
|
||||||
|
@ -3728,6 +3750,8 @@ void Settings::Executor::doLoad()
|
||||||
mEnableProblemSet = boolValue("enable_proble_set",true);
|
mEnableProblemSet = boolValue("enable_proble_set",true);
|
||||||
mEnableCompetitiveCompanion = boolValue("enable_competivie_companion",true);
|
mEnableCompetitiveCompanion = boolValue("enable_competivie_companion",true);
|
||||||
mCompetivieCompanionPort = intValue("competitive_companion_port",10045);
|
mCompetivieCompanionPort = intValue("competitive_companion_port",10045);
|
||||||
|
mConvertHTMLToTextForInput = boolValue("input_convert_html", false);
|
||||||
|
mConvertHTMLToTextForExpected = boolValue("expected_convert_html", false);
|
||||||
mIgnoreSpacesWhenValidatingCases = boolValue("ignore_spaces_when_validating_cases",false);
|
mIgnoreSpacesWhenValidatingCases = boolValue("ignore_spaces_when_validating_cases",false);
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
mCaseEditorFontName = stringValue("case_editor_font_name","consolas");
|
mCaseEditorFontName = stringValue("case_editor_font_name","consolas");
|
||||||
|
|
|
@ -915,6 +915,12 @@ public:
|
||||||
size_t caseMemoryLimit() const;
|
size_t caseMemoryLimit() const;
|
||||||
void setCaseMemoryLimit(size_t newCaseMemoryLimit);
|
void setCaseMemoryLimit(size_t newCaseMemoryLimit);
|
||||||
|
|
||||||
|
bool convertHTMLToTextForInput() const;
|
||||||
|
void setConvertHTMLToTextForInput(bool newConvertHTMLToTextForInput);
|
||||||
|
|
||||||
|
bool convertHTMLToTextForExpected() const;
|
||||||
|
void setConvertHTMLToTextForExpected(bool newConvertHTMLToTextForExpected);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// general
|
// general
|
||||||
bool mPauseConsole;
|
bool mPauseConsole;
|
||||||
|
@ -928,6 +934,8 @@ public:
|
||||||
bool mEnableProblemSet;
|
bool mEnableProblemSet;
|
||||||
bool mEnableCompetitiveCompanion;
|
bool mEnableCompetitiveCompanion;
|
||||||
int mCompetivieCompanionPort;
|
int mCompetivieCompanionPort;
|
||||||
|
bool mConvertHTMLToTextForInput;
|
||||||
|
bool mConvertHTMLToTextForExpected;
|
||||||
bool mIgnoreSpacesWhenValidatingCases;
|
bool mIgnoreSpacesWhenValidatingCases;
|
||||||
QString mCaseEditorFontName;
|
QString mCaseEditorFontName;
|
||||||
int mCaseEditorFontSize;
|
int mCaseEditorFontSize;
|
||||||
|
|
|
@ -36,6 +36,9 @@ void ExecutorProblemSetWidget::doLoad()
|
||||||
ui->grpProblemSet->setChecked(pSettings->executor().enableProblemSet());
|
ui->grpProblemSet->setChecked(pSettings->executor().enableProblemSet());
|
||||||
ui->grpCompetitiveCompanion->setChecked(pSettings->executor().enableCompetitiveCompanion());
|
ui->grpCompetitiveCompanion->setChecked(pSettings->executor().enableCompetitiveCompanion());
|
||||||
ui->spinPortNumber->setValue(pSettings->executor().competivieCompanionPort());
|
ui->spinPortNumber->setValue(pSettings->executor().competivieCompanionPort());
|
||||||
|
ui->chkConvertInputHTML->setChecked(pSettings->executor().convertHTMLToTextForInput());
|
||||||
|
ui->chkConvertExpectedHTML->setChecked(pSettings->executor().convertHTMLToTextForExpected());
|
||||||
|
|
||||||
ui->chkIgnoreSpacesWhenValidatingCases->setChecked(pSettings->executor().ignoreSpacesWhenValidatingCases());
|
ui->chkIgnoreSpacesWhenValidatingCases->setChecked(pSettings->executor().ignoreSpacesWhenValidatingCases());
|
||||||
|
|
||||||
ui->cbFont->setCurrentFont(QFont(pSettings->executor().caseEditorFontName()));
|
ui->cbFont->setCurrentFont(QFont(pSettings->executor().caseEditorFontName()));
|
||||||
|
@ -52,6 +55,8 @@ void ExecutorProblemSetWidget::doSave()
|
||||||
pSettings->executor().setEnableProblemSet(ui->grpProblemSet->isChecked());
|
pSettings->executor().setEnableProblemSet(ui->grpProblemSet->isChecked());
|
||||||
pSettings->executor().setEnableCompetitiveCompanion(ui->grpCompetitiveCompanion->isChecked());
|
pSettings->executor().setEnableCompetitiveCompanion(ui->grpCompetitiveCompanion->isChecked());
|
||||||
pSettings->executor().setCompetivieCompanionPort(ui->spinPortNumber->value());
|
pSettings->executor().setCompetivieCompanionPort(ui->spinPortNumber->value());
|
||||||
|
pSettings->executor().setConvertHTMLToTextForInput(ui->chkConvertInputHTML->isChecked());
|
||||||
|
pSettings->executor().setConvertHTMLToTextForExpected(ui->chkConvertExpectedHTML->isChecked());
|
||||||
pSettings->executor().setIgnoreSpacesWhenValidatingCases(ui->chkIgnoreSpacesWhenValidatingCases->isChecked());
|
pSettings->executor().setIgnoreSpacesWhenValidatingCases(ui->chkIgnoreSpacesWhenValidatingCases->isChecked());
|
||||||
pSettings->executor().setCaseEditorFontName(ui->cbFont->currentFont().family());
|
pSettings->executor().setCaseEditorFontName(ui->cbFont->currentFont().family());
|
||||||
pSettings->executor().setCaseEditorFontOnlyMonospaced(ui->chkOnlyMonospaced->isChecked());
|
pSettings->executor().setCaseEditorFontOnlyMonospaced(ui->chkOnlyMonospaced->isChecked());
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>545</width>
|
<width>545</width>
|
||||||
<height>445</height>
|
<height>503</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
@ -42,13 +42,6 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="text">
|
|
||||||
<string>Port Number</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="2">
|
<item row="0" column="2">
|
||||||
<spacer name="horizontalSpacer">
|
<spacer name="horizontalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
@ -62,6 +55,65 @@
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Port Number</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" colspan="3">
|
||||||
|
<widget class="QWidget" name="widget" native="true">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>Convert HTML for:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="chkConvertInputHTML">
|
||||||
|
<property name="text">
|
||||||
|
<string>Input</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="chkConvertExpectedHTML">
|
||||||
|
<property name="text">
|
||||||
|
<string>Expected Output</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_5">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
|
@ -2001,6 +2001,18 @@
|
||||||
<source>kb</source>
|
<source>kb</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Convert HTML for:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Input</source>
|
||||||
|
<translation type="unfinished">Entrada</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Expected Output</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>FileAssociationModel</name>
|
<name>FileAssociationModel</name>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1870,6 +1870,18 @@
|
||||||
<source>kb</source>
|
<source>kb</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Convert HTML for:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Input</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Expected Output</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>FileAssociationModel</name>
|
<name>FileAssociationModel</name>
|
||||||
|
|
|
@ -58,13 +58,13 @@ void OJProblemPropertyWidget::loadFromProblem(POJProblem problem)
|
||||||
}
|
}
|
||||||
switch(problem->memoryLimitUnit) {
|
switch(problem->memoryLimitUnit) {
|
||||||
case ProblemMemoryLimitUnit::KB:
|
case ProblemMemoryLimitUnit::KB:
|
||||||
ui->cbTimeLimitUnit->setCurrentText(tr("KB"));
|
ui->cbMemoryLimitUnit->setCurrentText(tr("KB"));
|
||||||
break;
|
break;
|
||||||
case ProblemMemoryLimitUnit::MB:
|
case ProblemMemoryLimitUnit::MB:
|
||||||
ui->cbTimeLimitUnit->setCurrentText(tr("MB"));
|
ui->cbMemoryLimitUnit->setCurrentText(tr("MB"));
|
||||||
break;
|
break;
|
||||||
case ProblemMemoryLimitUnit::GB:
|
case ProblemMemoryLimitUnit::GB:
|
||||||
ui->cbTimeLimitUnit->setCurrentText(tr("GB"));
|
ui->cbMemoryLimitUnit->setCurrentText(tr("GB"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue