From 36a0453ec75aabac9d96bc29f85f0e1be0d572c4 Mon Sep 17 00:00:00 2001 From: Denis Khachko Date: Mon, 17 Jun 2013 19:17:37 +0400 Subject: [PATCH] Cource manager. Lock /unlock actions --- .../coursemanager/coursemanager_plugin.cpp | 85 ++++++++++++++----- .../coursemanager/coursemanager_plugin.h | 2 + src/plugins/coursemanager/task/mainwindow.cpp | 4 +- 3 files changed, 69 insertions(+), 22 deletions(-) diff --git a/src/plugins/coursemanager/coursemanager_plugin.cpp b/src/plugins/coursemanager/coursemanager_plugin.cpp index b81b0d3f..239c9cd3 100644 --- a/src/plugins/coursemanager/coursemanager_plugin.cpp +++ b/src/plugins/coursemanager/coursemanager_plugin.cpp @@ -18,9 +18,12 @@ Plugin::Plugin() MW->setup(); mainWindow_=MW; field_no=0; - prevFld=new QAction("Предыдущая обстановка",this); - nextFld=new QAction("Следующая обстановка",this); - + prevFld=new QAction(trUtf8("Предыдущая обстановка"),this); + nextFld=new QAction(trUtf8("Следующая обстановка"),this); + connect(nextFld,SIGNAL(triggered()),this,SLOT(nextField())); + connect(prevFld,SIGNAL(triggered()),this,SLOT(prevField())); + nextFld->setEnabled(false); + prevFld->setEnabled(false); } QList Plugin::menus()const { @@ -81,6 +84,15 @@ bool Plugin::startNewTask(QStringList isps,KumZadanie* task) qDebug()<<"Set field"<field(isps.at(i), field_no); actor->loadActorData(field_data); } + if(task->minFieldCount()>1){ + nextFld->setEnabled(true); + prevFld->setEnabled(false); + }else + { + nextFld->setEnabled(false); + prevFld->setEnabled(false); + } + cur_task=task; return true; }; QWidget* Plugin::mainWindow() const @@ -98,23 +110,27 @@ AI * Plugin::getActor(QString name) } return NULL; } - -void Plugin::checkNext(KumZadanie* task) -{ - - GI * gui = ExtensionSystem::PluginManager::instance()->findPlugin(); - for(int i=0;iisps.count();i++) +void Plugin::selectNext(KumZadanie* task) { - AI* actor=getActor(task->isps.at(i)); - if(!actor) + + for(int i=0;iisps.count();i++) { - QMessageBox::information( NULL, "", QString::fromUtf8("Нет исполнтеля:")+task->isps.at(i), 0,0,0); - return; - } - //TODO LOAD FIELDS; - QFile* field_data=new QFile(task->field(task->isps.at(i), field_no)); - actor->loadActorData(field_data); + AI* actor=getActor(task->isps.at(i)); + if(!actor) + { + QMessageBox::information( NULL, "", QString::fromUtf8("Нет исполнтеля:")+task->isps.at(i), 0,0,0); + return; + } + //TODO LOAD FIELDS; + QFile* field_data=new QFile(task->field(task->isps.at(i), field_no)); + actor->loadActorData(field_data); + } } +void Plugin::checkNext(KumZadanie* task) +{ + + GI * gui = ExtensionSystem::PluginManager::instance()->findPlugin(); + selectNext(task); gui->startTesting(); }; void Plugin::startProgram(QVariant param,KumZadanie* task) @@ -183,17 +199,42 @@ void Plugin::changeCurrentDirectory(const QString &path) } void Plugin::nextField() { - + if(field_nominFieldCount() ) + { + field_no++; + selectNext(cur_task); + } + prevFld->setEnabled(field_no>0); + nextFld->setEnabled((field_no+1)minFieldCount() && cur_task->minFieldCount()>0); }; void Plugin::prevField() { - + if(field_no>-1 ) + { + field_no--; + selectNext(cur_task); + } + prevFld->setEnabled(field_no>0); + nextFld->setEnabled(field_nominFieldCount() && cur_task->minFieldCount()>0); }; +void Plugin::lockContrls() + { + prevFld->setEnabled(false); + nextFld->setEnabled(false); + } void Plugin::changeGlobalState(ExtensionSystem::GlobalState old, ExtensionSystem::GlobalState current) { - if(current==ExtensionSystem::GS_Running)MW->lockControls(); - if(current==ExtensionSystem::GS_Observe)MW->unlockControls(); + if(current==ExtensionSystem::GS_Running) + {MW->lockControls(); + nextFld->setEnabled(false); + prevFld->setEnabled(false); + }; + if(current==ExtensionSystem::GS_Observe) + {MW->unlockControls(); + prevFld->setEnabled(field_no>0); + nextFld->setEnabled(field_nominFieldCount() && cur_task->minFieldCount()>0); + }; } QString Plugin::initialize(const QStringList &arguments) @@ -211,6 +252,8 @@ QString Plugin::initialize(const QStringList &arguments) QString error; isp_no=0; field_no=0; + courseMenu->addAction(nextFld); + courseMenu->addAction(prevFld); return error; } diff --git a/src/plugins/coursemanager/coursemanager_plugin.h b/src/plugins/coursemanager/coursemanager_plugin.h index c75e7717..86e92da5 100644 --- a/src/plugins/coursemanager/coursemanager_plugin.h +++ b/src/plugins/coursemanager/coursemanager_plugin.h @@ -40,6 +40,7 @@ public slots: void setTestingResult(ProgramRunStatus status, int value); void nextField(); void prevField(); + void lockContrls(); private /*methods*/: void saveSession() const; void restoreSession(); @@ -61,6 +62,7 @@ private /*fields*/: MainWindowTask* MW; bool setTextFromFile(QString fname); int isp_no,field_no; + void selectNext(KumZadanie* task); KumZadanie* cur_task; }; diff --git a/src/plugins/coursemanager/task/mainwindow.cpp b/src/plugins/coursemanager/task/mainwindow.cpp index 160a0147..f7f38213 100644 --- a/src/plugins/coursemanager/task/mainwindow.cpp +++ b/src/plugins/coursemanager/task/mainwindow.cpp @@ -248,7 +248,8 @@ void MainWindowTask::loadCourse() }else ui->webView->setHtml(cText); if(isTeacher)ui->actionEdit->setEnabled(true); setWindowTitle(course->name()+trUtf8(" - Практикум")); - + interface->lockContrls(); + ui->checkTask->setEnabled(false); }; @@ -391,6 +392,7 @@ if(ioDir.isFile()) task.isps=course->Modules(curTaskIdx.internalId()); task.name=course->getTitle(curTaskIdx.internalId()); qDebug()<<"ISPS"<Script(curTaskIdx.internalId(),task.isps[i]))); -- GitLab