diff --git a/GUI/coregui/Views/Components/JobQueueWidgets/AdvModelTuningWidget.cpp b/GUI/coregui/Views/Components/JobQueueWidgets/AdvModelTuningWidget.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0d30dd03f45f2c8220f33395bac2611cb04cd4cf --- /dev/null +++ b/GUI/coregui/Views/Components/JobQueueWidgets/AdvModelTuningWidget.cpp @@ -0,0 +1,27 @@ +#include "AdvModelTuningWidget.h" +#include "JobItem.h" +#include <QLabel> +#include <QVBoxLayout> + +AdvModelTuningWidget::AdvModelTuningWidget(QWidget *parent) + : QWidget(parent) + , m_currentJobItem(0) +{ + setMinimumSize(128, 128); + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + QVBoxLayout *mainLayout = new QVBoxLayout; + + m_label = new QLabel(); + + mainLayout->addWidget(m_label); + + setLayout(mainLayout); + +} + +void AdvModelTuningWidget::setCurrentItem(JobItem *item) +{ + m_currentJobItem = item; + m_label->setText(item->getName()); +} diff --git a/GUI/coregui/Views/Components/JobQueueWidgets/AdvModelTuningWidget.h b/GUI/coregui/Views/Components/JobQueueWidgets/AdvModelTuningWidget.h new file mode 100644 index 0000000000000000000000000000000000000000..2af92e21ee7ede5aa6aa07728d59cebfc397b4e0 --- /dev/null +++ b/GUI/coregui/Views/Components/JobQueueWidgets/AdvModelTuningWidget.h @@ -0,0 +1,27 @@ +#ifndef ADVMODELTUNINGWIDGET_H +#define ADVMODELTUNINGWIDGET_H + +#include <QWidget> +class QLabel; +class JobItem; + +class AdvModelTuningWidget : public QWidget +{ + Q_OBJECT + +public: + + AdvModelTuningWidget(QWidget *parent = 0); + virtual ~AdvModelTuningWidget() {} + + void setCurrentItem(JobItem *item); + +private: + QLabel *m_label; + JobItem *m_currentJobItem; +}; + + + +#endif + diff --git a/GUI/coregui/Views/Components/JobQueueWidgets/JobListWidget.cpp b/GUI/coregui/Views/Components/JobQueueWidgets/JobListWidget.cpp index 9e4df8df50627475bb0f0250e08c2a73ce6e1f6b..14a08964d1137a2a7fd5a5cf253d81c1a3bece7e 100644 --- a/GUI/coregui/Views/Components/JobQueueWidgets/JobListWidget.cpp +++ b/GUI/coregui/Views/Components/JobQueueWidgets/JobListWidget.cpp @@ -3,6 +3,7 @@ #include "JobItem.h" #include "JobListViewDelegate.h" #include "styledbar.h" +#include "SimulationToolBar.h" #include <QPushButton> #include <QListView> #include <QMenu> @@ -39,7 +40,8 @@ JobListWidget::JobListWidget(QWidget *parent) mainLayout->setMargin(0); mainLayout->setSpacing(0); - Manhattan::StyledBar *bar = new Manhattan::StyledBar; +// Manhattan::StyledBar *bar = new Manhattan::StyledBar; + SimulationToolBar *bar = new SimulationToolBar; mainLayout->addWidget(bar); // QHBoxLayout *buttonsLayout = new QHBoxLayout; diff --git a/GUI/coregui/Views/Components/JobQueueWidgets/JobRealTimeWidget.cpp b/GUI/coregui/Views/Components/JobQueueWidgets/JobRealTimeWidget.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e8221810457b8aed19db36ed476e1d03f7ea915c --- /dev/null +++ b/GUI/coregui/Views/Components/JobQueueWidgets/JobRealTimeWidget.cpp @@ -0,0 +1,151 @@ +#include "JobRealTimeWidget.h" +#include "JobQueueModel.h" +#include "AdvModelTuningWidget.h" +#include "SimulationToolBar.h" +#include <QToolBar> +#include <QVBoxLayout> +#include <QPushButton> +#include <QStackedWidget> +#include <QAction> +#include <QLabel> +#include <QDebug> +#include "GUIHelpers.h" + + +JobRealTimeWidget::JobRealTimeWidget(JobQueueModel *jobQueueModel, QWidget *parent) + : QWidget(parent) + , m_jobQueueModel(0) + , m_stack(new QStackedWidget(this)) + , m_toolBar(new SimulationToolBar) +{ + setJobQueueModel(jobQueueModel); + + setMinimumSize(100, 400); + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + setWindowTitle(QLatin1String("Job Real Time")); + setObjectName(QLatin1String("Job Real Time")); + + m_stack->setMinimumSize(100, 400); + m_stack->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->setMargin(0); + mainLayout->setSpacing(0); + + mainLayout->addWidget(m_toolBar); + mainLayout->addWidget(m_stack); + + setLayout(mainLayout); + + connectSignals(); +} + + +void JobRealTimeWidget::setJobQueueModel(JobQueueModel *jobQueueModel) +{ + Q_ASSERT(jobQueueModel); + if(jobQueueModel != m_jobQueueModel) { + m_jobQueueModel = jobQueueModel; + + connect(m_jobQueueModel, + SIGNAL( selectionChanged(JobItem *) ), + this, + SLOT( itemClicked(JobItem *) ) + ); + + connect(m_jobQueueModel->getJobQueueData(), SIGNAL(jobIsFinished(QString)) + , this, SLOT(onJobItemFinished(QString))); + + connect(m_jobQueueModel, SIGNAL(aboutToDeleteJobItem(JobItem*)) + , this, SLOT(onJobItemDelete(JobItem*))); + } +} + + +void JobRealTimeWidget::itemClicked(JobItem * item) +{ + qDebug() << "JobOutputDataWidget::itemClicked()"; + + + + m_currentJobItem = item; + + AdvModelTuningWidget *widget = m_jobItemToTuningWidget[item]; + if( !widget && (item->getStatus() == JobItem::Completed || item->getStatus() == JobItem::Canceled)) { + + qDebug() << "JobOutputDataWidget::itemClicked() -> creating"; + widget = new AdvModelTuningWidget(); + widget->setCurrentItem(item); + m_stack->addWidget(widget); + m_jobItemToTuningWidget[item] = widget; + + } + else + { + if( m_stack->currentWidget()) + { + m_stack->currentWidget()->hide(); + } + } + + + if(widget) + { + qDebug() << "JobOutputDataWidget::itemClicked() -> setCurrentWidget"; + + if(widget->isHidden()) + { + widget->show(); + } + + m_stack->setCurrentWidget(widget); + } +} + + +void JobRealTimeWidget::onJobItemFinished(const QString &identifier) +{ + qDebug() << "JobOutputDataWidget::onJobItemFinished()"; + JobItem *jobItem = m_jobQueueModel->getJobQueueData()->getJobItem(identifier); + + if(jobItem == m_currentJobItem) + { + if((jobItem->getStatus() == JobItem::Completed || jobItem->getStatus() == JobItem::Canceled) && jobItem->getOutputDataItem()) + { + qDebug() << "JobOutputDataWidget::dataChanged() JobItem::Completed"; + itemClicked(jobItem); + } + } +} + + + +void JobRealTimeWidget::connectSignals() +{ +} + + + +void JobRealTimeWidget::onJobItemDelete(JobItem *item) +{ + qDebug() << "JobOutputDataWidget::onJobItemDelete()"; + AdvModelTuningWidget *widget = m_jobItemToTuningWidget[item]; + if( !widget ) { + // this is the case when user removes failed job which doesn't have propper widget + return; + } + + QMap<JobItem *, AdvModelTuningWidget *>::iterator it = m_jobItemToTuningWidget.begin(); + while(it!=m_jobItemToTuningWidget.end()) { + if(it.value() == widget) { + it = m_jobItemToTuningWidget.erase(it); + } else { + ++it; + } + } + + m_stack->removeWidget(widget); + delete widget; +} + diff --git a/GUI/coregui/Views/Components/JobQueueWidgets/JobRealTimeWidget.h b/GUI/coregui/Views/Components/JobQueueWidgets/JobRealTimeWidget.h new file mode 100644 index 0000000000000000000000000000000000000000..b5191e342e70fa457c67d6f9fd4b6bf1b77dbff0 --- /dev/null +++ b/GUI/coregui/Views/Components/JobQueueWidgets/JobRealTimeWidget.h @@ -0,0 +1,41 @@ +#ifndef JOBREALTIMEWIDGET_H +#define JOBREALTIMEWIDGET_H + +#include "WinDllMacros.h" +#include <QWidget> +#include <QMap> + +class JobQueueModel; +class QStackedWidget; +class QModelIndex; +class JobItem; +class AdvModelTuningWidget; +class SimulationToolBar; + +//! The JobRealTimeWidget provides tuning of sample parameters and run of the simulation in real time. +//! Located on the right side of JobView and is visible when realtime activity is selected. +class BA_CORE_API_ JobRealTimeWidget : public QWidget +{ + Q_OBJECT +public: + explicit JobRealTimeWidget(JobQueueModel *jobQueueModel, QWidget *parent = 0); + + void setJobQueueModel(JobQueueModel *jobQueueModel); + +public slots: + void itemClicked(JobItem *item); + void onJobItemDelete(JobItem *item); + void onJobItemFinished(const QString &identifier); + +private: + void connectSignals(); + + JobQueueModel *m_jobQueueModel; + JobItem *m_currentJobItem; + QStackedWidget *m_stack; + QMap<JobItem *, AdvModelTuningWidget *> m_jobItemToTuningWidget; + SimulationToolBar *m_toolBar; +}; + + +#endif diff --git a/GUI/coregui/Views/Components/SimulationWidgets/SimulationToolBar.cpp b/GUI/coregui/Views/Components/SimulationWidgets/SimulationToolBar.cpp index a51c2d1fe6ea610b477e47c9c7fb84ac631f28a5..ae325162f77a2e0c6e534f4eefe071dc76cd818e 100644 --- a/GUI/coregui/Views/Components/SimulationWidgets/SimulationToolBar.cpp +++ b/GUI/coregui/Views/Components/SimulationWidgets/SimulationToolBar.cpp @@ -13,6 +13,7 @@ SimulationToolBar::SimulationToolBar(QWidget *parent) : QToolBar(parent) { setMovable(false); + setMinimumSize(128, 25); const int size = style()->pixelMetric(QStyle::PM_SmallIconSize); setIconSize(QSize(size, size)); diff --git a/GUI/coregui/Views/JobView.cpp b/GUI/coregui/Views/JobView.cpp index 9cb804f2fbfa004174a68093c87986761261d27b..e7225bd1cf9ac286122aac8be4648c5b9f20ae11 100644 --- a/GUI/coregui/Views/JobView.cpp +++ b/GUI/coregui/Views/JobView.cpp @@ -3,6 +3,7 @@ #include "JobSelectorWidget.h" #include "JobOutputDataWidget.h" #include "JobQueueModel.h" +#include "JobRealTimeWidget.h" #include "mainwindow.h" #include "progressbar.h" #include <QFrame> @@ -18,6 +19,7 @@ struct JobViewPrivate JobQueueModel *m_jobQueueModel; JobSelectorWidget *m_jobSelector; JobOutputDataWidget *m_jobOutputDataWidget; + JobRealTimeWidget *m_jobRealTimeWidget; Manhattan::ProgressBar *m_progressBar; //!< general progress bar }; @@ -124,6 +126,8 @@ void JobView::resetToDefaultLayout() dockWidget->show(); setTrackingEnabled(true); + + onJobViewActivityRequest(); } @@ -150,15 +154,14 @@ void JobView::initWindows() m_d->m_jobSelector = new JobSelectorWidget(m_d->m_jobQueueModel, this); m_d->m_subWindows[JobListDock] = m_d->m_jobSelector; - TestView *realTimeWidget = new TestView(this); - realTimeWidget->setWindowTitle("RealTimeWidget"); - realTimeWidget->setObjectName("RealTimeWidget"); - m_d->m_subWindows[RealTimeDock] = realTimeWidget; + m_d->m_jobRealTimeWidget = new JobRealTimeWidget(m_d->m_jobQueueModel, this); + m_d->m_subWindows[RealTimeDock] = m_d->m_jobRealTimeWidget; } void JobView::connectSignals() { + connect(this, SIGNAL(resetLayout()), this, SLOT(resetToDefaultLayout())); connect(m_d->m_jobQueueModel->getJobQueueData(), SIGNAL(globalProgress(int)), this, SLOT(updateGlobalProgressBar(int))); connect(m_d->m_jobQueueModel->getJobQueueData(), SIGNAL(focusRequest(JobItem*)), this, SLOT(onFocusRequest(JobItem*))); connect(m_d->m_jobOutputDataWidget, SIGNAL(jobViewActivityRequest()), this, SLOT(onJobViewActivityRequest()));