diff --git a/NEWS.md b/NEWS.md
index 71966c61..2e5893a0 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -9,6 +9,7 @@ Red Panda C++ Version 1.0.4
- fix: parenthesis skip doesn't work when editing non-c/c++ files
- enhancement: prefer local headers over system headers when complete #include header path
- fix: tab/shift+tab not correctly handled in options dialog's code template page
+ - enhancement: batch set cases ( in problem case table's context menu )
Red Panda C++ Version 1.0.3
- fix: when oj problem grabbed by competitive companion received,
diff --git a/RedPandaIDE/RedPandaIDE_pt.ts b/RedPandaIDE/RedPandaIDE_pt.ts
index 5890314d..8aaeccdc 100644
--- a/RedPandaIDE/RedPandaIDE_pt.ts
+++ b/RedPandaIDE/RedPandaIDE_pt.ts
@@ -4424,6 +4424,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
NewClassDialog
diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.ts b/RedPandaIDE/RedPandaIDE_zh_CN.ts
index ddedf111..ccf87abd 100644
--- a/RedPandaIDE/RedPandaIDE_zh_CN.ts
+++ b/RedPandaIDE/RedPandaIDE_zh_CN.ts
@@ -1267,13 +1267,13 @@ Are you really want to continue?
失败
-
-
-
-
-
-
-
+
+
+
+
+
+
+
错误
@@ -1282,44 +1282,44 @@ Are you really want to continue?
无法写入文件"%1"
-
+
另存为
-
+
文件%1已经被打开!
-
+
要复制的内容超过了行数限制!
-
+
要复制的内容超过了字符数限制!
-
+
要剪切的内容超过了行数限制!
-
+
要剪切的内容超过了字符数限制!
-
+
打印文档
-
-
-
+
+
+
Ctrl+单击以获取更多信息
@@ -1328,27 +1328,27 @@ Are you really want to continue?
未找到符号'%1'!
-
+
找不到astyle程序
-
+
找不到astyle程序"%1".
-
+
断点条件
-
+
输入当前断点的生效条件:
-
+
只读
@@ -3809,18 +3809,18 @@ Are you really want to continue?
MainWindow
-
+
小熊猫C++
-
-
-
-
-
+
+
+
+
+
编译器
@@ -3894,7 +3894,7 @@ Are you really want to continue?
-
+
调试主控台
@@ -4028,8 +4028,8 @@ Are you really want to continue?
-
-
+
+
编译
@@ -4102,9 +4102,9 @@ Are you really want to continue?
-
-
-
+
+
+
复制
@@ -4115,7 +4115,7 @@ Are you really want to continue?
-
+
粘贴
@@ -4126,8 +4126,8 @@ Are you really want to continue?
-
-
+
+
选择全部
@@ -4253,7 +4253,7 @@ Are you really want to continue?
-
+
新建试题集
@@ -4272,14 +4272,14 @@ Are you really want to continue?
-
+
保存试题集
-
+
载入试题集
@@ -4340,7 +4340,7 @@ Are you really want to continue?
-
+
Run Current Case
运行所有案例
@@ -4618,7 +4618,7 @@ Are you really want to continue?
-
+
删除所有断点
@@ -4719,7 +4719,7 @@ Are you really want to continue?
Ctrl+Shift+Down
-
+
新建文件
@@ -4760,7 +4760,7 @@ Are you really want to continue?
-
+
重命名符号
@@ -4781,13 +4781,13 @@ Are you really want to continue?
-
+
导出为RTF
-
+
导出为HTML
@@ -4978,7 +4978,7 @@ Are you really want to continue?
删除当前行
-
+
Ctrl+D
@@ -4988,7 +4988,7 @@ Are you really want to continue?
复制当前行
-
+
Ctrl+E
@@ -5056,7 +5056,7 @@ Are you really want to continue?
运行参数...
-
+
文件编码
@@ -5066,32 +5066,32 @@ Are you really want to continue?
文件历史
-
-
-
-
-
-
+
+
+
+
+
+
正在调试
-
-
-
-
-
-
+
+
+
+
+
+
正在运行
-
-
-
-
-
-
+
+
+
+
+
+
正在编译
@@ -5100,171 +5100,177 @@ Are you really want to continue?
行:%1 列:%2 已选择:%3 总行数:%4 总长度:%5
-
+
Line: %1 Col: %2 Selected: %3 Lines: %4 Length: %5
行: %1 列: %2 已选择 :%3 总行数: %4 总长度: %5
-
+
只读
-
+
插入
-
+
覆写
-
+
关闭项目
-
+
你确定要关闭'%1'吗?
-
-
+
+
确认
-
-
-
+
+
+
源文件尚未编译。
-
-
+
+
现在编译?
-
-
+
+
源文件比可执行程序新。
-
+
重新编译?
-
+
无编译器设置
-
+
没有配置编译器设置。
-
+
无法启动调试器
-
-
+
+
启用调试参数
-
-
+
+
当前编译设置中未启用调试选项(-g3),或启用了信息剥除选项(-s)<br /><br/>是否纠正这一问题?
-
+
项目尚未构建
-
+
项目尚未构建。是否构建?
-
+
宿主程序不存在
-
+
动态链接库(DLL)需要一个宿主程序来运行。
-
+
但它不存在。
-
+
宿主程序不存在
-
+
宿主程序'%1'不存在。
-
+
重新编译?
-
-
+
+
保存上次打开信息失败
-
+
无法删除旧上次打开信息文件'%1'
-
+
无法保存上次打开信息文件'%1'
-
+
载入上次打开信息失败
-
+
无法载入上次打开信息文件'%1'
-
+
打开源代码文件
-
+
+
+
+ 批量设置案例
+
+
+
显示详细调试器日志
-
+
全部复制
@@ -5272,9 +5278,9 @@ Are you really want to continue?
-
-
-
+
+
+
清除
@@ -5290,7 +5296,7 @@ Are you really want to continue?
-
+
试题集%1
@@ -5311,68 +5317,68 @@ Are you really want to continue?
或者选择使用其他的网络端口。
-
-
+
+
重新构建项目
-
-
+
+
项目已经被修改过,是否需要重新构建?
-
+
自动保存出错
-
+
自动保存"%1"到"%2"失败:%3
-
+
试题属性...
-
+
设置试题集名称
-
+
试题集名称:
-
+
删除
-
+
删除全部书签
-
+
修改描述
-
-
+
+
书签描述
-
-
+
+
描述:
@@ -5381,173 +5387,173 @@ Are you really want to continue?
在调试主控台中显示调试器输出
-
+
清除这次搜索
-
+
删除所有搜索
-
+
断点条件...
-
+
断点条件
-
+
输入当前断点的生效条件:
-
+
Remove all breakpoints
删除所有断点
-
+
删除当前断点
-
+
重命名文件
-
-
+
+
添加文件夹
-
+
新文件夹
-
+
文件夹:
-
+
重命名
-
+
运行当前案例
-
+
删除文件夹
-
+
切换为普通视图
-
+
切换为自定义视图
-
+
按类型排序
-
+
按名称排序
-
+
显示继承的成员
-
+
跳转到声明处
-
+
跳转到定义处
-
-
+
+
新建文件夹
-
-
-
-
+
+
+
+
删除
-
+
在编辑器中打开
-
+
使用外部程序打开
-
+
在终端中打开
-
+
在Windows浏览器中打开
-
+
字符集
-
+
转换为%1编码
-
+
已自动保存%1个文件
-
+
设置答案源代码...
-
+
选择其他文件...
-
+
选择答案源代码文件
@@ -5557,241 +5563,256 @@ Are you really want to continue?
C/C++源代码文件 (*.c *.cpp *.cc *.cxx)
-
+
新建文件夹%1
-
+
无标题
-
+
无标题%1
-
+
你真的要删除%1吗?
-
+
你真的要删除%1个文件吗?
-
+
保存项目
-
+
项目'%1'有改动。
-
-
+
+
需要保存吗?
-
-
+
+
文件已发生变化
-
+
新建项目文件?
-
+
您是否要将新建的文件加入项目?
-
-
-
-
+
+
+
+
保存失败
-
+
改变项目编译器配置集
-
+
改变项目的编译器配置集会导致所有的自定义编译器选项被重置。
-
+
+
- 你真的想要做那些吗?
+ 你真的想要那么做吗?
-
+
+ 批量设置案例
+
+
+
+
+ 选择输入数据文件
+
+
+
+
+ 输入数据文件 (*.in)
+
+
+
您真的要清除该文件的所有断点吗?
-
+
新建项目
-
+
关闭'%1'以打开新项目?
-
+
文件夹不存在
-
+
文件夹'%1'不存在。是否创建?
-
+
无法创建文件夹
-
+
创建文件夹'%1'失败。
-
+
-
+
文件夹%1不是空的。
-
+
你真的要删除它吗?
-
+
改变工作文件夹
-
+
File '%1' is not in the current working folder
文件'%1'不在当前工作文件夹中。
-
+
是否将工作文件夹改设为'%1'?
-
+
无法提交
-
+
Git需要用信息进行提交。
-
+
选择输入数据文件
-
-
+
+
所有文件 (*.*)
-
+
Choose Expected Input Data File
选择期望输出文件
-
-
-
+
+
+
第%1行
-
+
选择工作文件夹
-
-
+
+
头文件已存在
-
-
+
+
头文件"%1"已存在!
-
+
源文件已存在!
-
+
源文件"%1"已存在!
-
+
无法提交!
-
+
下列文件处于冲突状态,请解决后重新添加和提交:
-
+
提交信息
-
+
提交信息:
-
+
提交失败
-
+
提交信息不能为空!
@@ -5800,130 +5821,135 @@ Are you really want to continue?
小熊猫Dev-C++项目文件 (*.dev)
-
+
新建项目失败
-
+
无法使用模板创建项目
-
+
删除文件
-
+
同时从硬盘上删除文件?
-
+
无标题
-
+
新的项目文件名
-
+
文件名:
-
+
文件已存在!
-
+
文件'%1'已经存在!
-
+
添加到项目
-
+
C/C++源代码文件 (*.c *.cpp *.cc *.cxx)
-
+
+
+ 本操作会删除此试题的所有案例。
+
+
+
小熊猫C++项目文件(*.dev)
-
+
重命名出错
-
+
符号'%1'在系统头文件中定义,无法修改。
-
+
新名称
-
-
+
+
替换出错
-
+
无法打开文件'%1'进行替换!
-
+
内容和上次查找时不一致。
-
+
RTF格式文件 (*.rtf)
-
+
HTML文件 (*.html)
-
+
当前的试题集不是空的。
-
+
试题%1
-
-
+
+
试题集文件 (*.pbs)
-
+
载入失败
-
-
+
+
试题案例%1
@@ -5934,15 +5960,15 @@ Are you really want to continue?
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
错误
@@ -5952,94 +5978,94 @@ Are you really want to continue?
项目历史
-
+
载入主题失败
-
-
+
+
清除历史
-
-
+
+
版本控制
-
+
磁盘文件'%1'已被修改。
-
+
是否重新读取它的内容?
-
+
磁盘文件'%1'已被删除。
-
+
是否保持它在小熊猫C++中打开的编辑窗口?
-
+
打开
-
+
编译失败
-
+
运行失败
-
-
-
+
+
+
确认转换
-
-
-
+
+
+
当前编辑器中的文件将会使用%1编码保存。<br />这项操作无法被撤回。<br />你确定要继续吗?
-
+
新监视表达式
-
+
输入监视表达式
-
+
(%1/%2)正在解析文件"%3"
-
-
+
+
完成%1个文件的解析,用时%2秒
-
+
(每秒%1个文件)
@@ -6286,12 +6312,12 @@ Are you really want to continue?
OJProblemModel
-
+
名称
-
+
时间(秒)
@@ -8258,7 +8284,7 @@ Are you really want to continue?
自动链接
-
+
@@ -8334,15 +8360,15 @@ Are you really want to continue?
杂项
-
-
+
+
程序运行
-
+
试题集
diff --git a/RedPandaIDE/mainwindow.cpp b/RedPandaIDE/mainwindow.cpp
index 7b647e40..7d368552 100644
--- a/RedPandaIDE/mainwindow.cpp
+++ b/RedPandaIDE/mainwindow.cpp
@@ -2273,6 +2273,11 @@ void MainWindow::buildContextMenus()
);
connect(mProblem_RunCurrentCase, &QAction::triggered, this,
&MainWindow::onProblemRunCurrentCase);
+ mProblem_batchSetCases = createActionFor(
+ tr("Batch Set Cases"),
+ ui->tblProblemCases);
+ connect(mProblem_batchSetCases, &QAction::triggered, this,
+ &MainWindow::onProblemBatchSetCases);
//context menu signal for the Problem Set lable
ui->lblProblemSet->setContextMenuPolicy(Qt::CustomContextMenu);
@@ -3142,6 +3147,8 @@ void MainWindow::onLstProblemSetContextMenu(const QPoint &pos)
void MainWindow::onTableProblemCasesContextMenu(const QPoint &pos)
{
QMenu menu(this);
+ menu.addAction(mProblem_batchSetCases);
+ menu.addSeparator();
QModelIndex idx = ui->tblProblemCases->currentIndex();
menu.addAction(mProblem_RunAllCases);
menu.addAction(mProblem_RunCurrentCase);
@@ -3255,6 +3262,35 @@ void MainWindow::onProblemRunCurrentCase()
runExecutable(RunType::CurrentProblemCase);
}
+void MainWindow::onProblemBatchSetCases()
+{
+ if (QMessageBox::question(this,tr("Batch Set Cases"),
+ tr("This operation will remove all cases for the current problem.")
+ +"
"
+ +tr("Do you really want to do that?"),
+ QMessageBox::Yes| QMessageBox::No,
+ QMessageBox::No)!=QMessageBox::Yes)
+ return;
+ QStringList files = QFileDialog::getOpenFileNames(
+ this,
+ tr("Choose input files"),
+ QDir::currentPath(),
+ tr("Input data files (*.in)"));
+ if (files.isEmpty())
+ return;
+ mOJProblemModel.removeCases();
+ foreach (const QString& filename, files) {
+ POJProblemCase problemCase = std::make_shared();
+ problemCase->name = QFileInfo(filename).baseName();
+ problemCase->testState = ProblemCaseTestState::NotTested;
+ problemCase->inputFileName = filename;
+ QString expectedFileName = filename.mid(0,filename.length()-2)+"out";
+ if (fileExists(expectedFileName))
+ problemCase->expectedOutputFileName = expectedFileName;
+ mOJProblemModel.addCase(problemCase);
+ }
+}
+
void MainWindow::onNewProblemConnection()
{
QTcpSocket* clientConnection = mTcpServer.nextPendingConnection();
@@ -4694,7 +4730,7 @@ void MainWindow::onOJProblemCaseNewOutputGetted(const QString &/* id */, const Q
ui->txtProblemCaseOutput->appendPlainText(line);
}
-void MainWindow::onOJProblemCaseResetOutput(const QString &id, const QString &line)
+void MainWindow::onOJProblemCaseResetOutput(const QString &/* id */, const QString &line)
{
ui->txtProblemCaseOutput->setPlainText(line);
}
diff --git a/RedPandaIDE/mainwindow.h b/RedPandaIDE/mainwindow.h
index 8a62ef32..4d804e86 100644
--- a/RedPandaIDE/mainwindow.h
+++ b/RedPandaIDE/mainwindow.h
@@ -283,6 +283,7 @@ private slots:
void onProblemCaseIndexChanged(const QModelIndex ¤t, const QModelIndex &previous);
void onProblemNameChanged(int index);
void onProblemRunCurrentCase();
+ void onProblemBatchSetCases();
void onNewProblemConnection();
void updateProblemTitle();
void onEditorClosed();
@@ -793,6 +794,7 @@ private:
//action for problem
QAction * mProblem_RunCurrentCase;
QAction * mProblem_RunAllCases;
+ QAction * mProblem_batchSetCases;
//action for tools output
QAction * mToolsOutput_Clear;
diff --git a/RedPandaIDE/widgets/ojproblemsetmodel.cpp b/RedPandaIDE/widgets/ojproblemsetmodel.cpp
index c44ca7f9..a59464c1 100644
--- a/RedPandaIDE/widgets/ojproblemsetmodel.cpp
+++ b/RedPandaIDE/widgets/ojproblemsetmodel.cpp
@@ -284,6 +284,13 @@ void OJProblemModel::removeCase(int index)
endRemoveRows();
}
+void OJProblemModel::removeCases()
+{
+ beginRemoveRows(QModelIndex(),0,mProblem->cases.count());
+ mProblem->cases.clear();
+ endRemoveRows();
+}
+
POJProblemCase OJProblemModel::getCase(int index)
{
if (mProblem==nullptr)
diff --git a/RedPandaIDE/widgets/ojproblemsetmodel.h b/RedPandaIDE/widgets/ojproblemsetmodel.h
index ea7e1d8d..f6f5eb2a 100644
--- a/RedPandaIDE/widgets/ojproblemsetmodel.h
+++ b/RedPandaIDE/widgets/ojproblemsetmodel.h
@@ -29,6 +29,7 @@ public:
void setProblem(const POJProblem &newProblem);
void addCase(POJProblemCase problemCase);
void removeCase(int index);
+ void removeCases();
POJProblemCase getCase(int index);
POJProblemCase getCaseById(const QString& id);
int getCaseIndexById(const QString& id);