Skip to content
Snippets Groups Projects
Commit a1b9aaa5 authored by Pospelov, Gennady's avatar Pospelov, Gennady
Browse files

Widget for JobQueueProperties

parent 9e9de5ae
No related branches found
No related tags found
No related merge requests found
......@@ -10,6 +10,7 @@
#include <QFile>
#include <QtCore/QXmlStreamReader>
#include <QtCore/QXmlStreamWriter>
#include <QItemSelection>
JobQueueModel::JobQueueModel(QObject *parent)
......@@ -268,3 +269,35 @@ void JobQueueModel::readFrom(QXmlStreamReader *reader)
}
void JobQueueModel::onSelectionChanged( const QItemSelection &selected, const QItemSelection & /*deselected*/)
{
qDebug() << "JobQueueModel::onSelectionChanged" << selected;
if(!selected.empty() and !selected.first().indexes().empty()) {
int row = selected.first().indexes().at(0).row();
JobQueueItem *item = m_jobs.at(row);
emit selectionChanged(item);
}
// if(!selected.empty() ) {
// emit selectionChanged(selected.first());
// }
}
QModelIndex JobQueueModel::indexOfItem(JobQueueItem *item) const
{
if(m_jobs.contains(item)) {
return index(m_jobs.indexOf(item), 0);
}
throw GUIHelpers::Error("Can't find index for item");
}
void JobQueueModel::jobQueueItemIsChanged(JobQueueItem *changed_item)
{
QModelIndex item_index = indexOfItem(changed_item);
qDebug() << "JobQueueModel::jobQueueItemIsChanged" << item_index;
dataChanged(item_index, item_index);
}
......@@ -9,7 +9,7 @@
class JobQueueItem;
class QXmlStreamWriter;
class QXmlStreamReader;
class QItemSelection;
namespace JobQueueXML
{
......@@ -74,11 +74,22 @@ public:
void load(const QString &filename=QString());
void readFrom(QXmlStreamReader *reader);
QString getName() const { return m_name; }
void setName(QString name) { m_name = name; }
void jobQueueItemIsChanged(JobQueueItem *item);
public slots:
void onSelectionChanged( const QItemSelection&, const QItemSelection& );
signals:
void selectionChanged(JobQueueItem *item);
// void selectionChanged(const QModelIndex &index);
private:
QModelIndex indexOfItem(JobQueueItem *item) const;
QString m_name;
QList <JobQueueItem *> m_jobs;
};
......
......@@ -10,6 +10,7 @@ class QToolBar;
class JobOutputDataWidget : public QWidget
{
Q_OBJECT
public:
explicit JobOutputDataWidget(QWidget *parent = 0);
......
#include "JobPropertiesWidget.h"
#include "JobQueueModel.h"
#include "JobQueueItem.h"
#include "qtvariantproperty.h"
#include "qttreepropertybrowser.h"
#include <QVBoxLayout>
#include <QDebug>
JobPropertiesWidget::JobPropertiesWidget(QWidget *parent)
: QWidget(parent)
, m_jobQueueModel(0)
, m_variantManager(new QtVariantPropertyManager(this))
, m_propertyBrowser(new QtTreePropertyBrowser(this))
, m_currentItem(0)
{
setMinimumSize(128, 128);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
setWindowTitle(QLatin1String("Job Properties"));
setObjectName(QLatin1String("Job Properties"));
// setStyleSheet("background-color:white;");
m_variantManager = new QtVariantPropertyManager(this);
connect(m_variantManager, SIGNAL(valueChanged(QtProperty *, const QVariant &)),
this, SLOT(valueChanged(QtProperty *, const QVariant &)));
QtVariantEditorFactory *variantFactory = new QtVariantEditorFactory(this);
m_propertyBrowser->setFactoryForManager(m_variantManager, variantFactory);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->setMargin(0);
mainLayout->setSpacing(0);
mainLayout->addWidget(m_propertyBrowser);
setLayout(mainLayout);
}
void JobPropertiesWidget::setModel(JobQueueModel *model)
{
Q_ASSERT(model);
if(model != m_jobQueueModel) {
m_jobQueueModel = model;
// connect(m_jobQueueModel,
// SIGNAL( selectionChanged(JobQueueItem *) ),
// this,
// SLOT( itemClicked(JobQueueItem *) )
// );
connect(m_jobQueueModel,
SIGNAL( selectionChanged(JobQueueItem *) ),
this,
SLOT( itemClicked(JobQueueItem *) )
);
}
}
void JobPropertiesWidget::updateExpandState()
{
QList<QtBrowserItem *> list = m_propertyBrowser->topLevelItems();
QListIterator<QtBrowserItem *> it(list);
while (it.hasNext()) {
QtBrowserItem *item = it.next();
QtProperty *prop = item->property();
idToExpanded[propertyToId[prop]] = m_propertyBrowser->isExpanded(item);
}
}
void JobPropertiesWidget::itemClicked(JobQueueItem *jobItem)
{
qDebug() << "JobPropertiesWidget::itemClicked" << jobItem->getName();
updateExpandState();
QMap<QtProperty *, QString>::ConstIterator itProp = propertyToId.constBegin();
while (itProp != propertyToId.constEnd()) {
delete itProp.key();
itProp++;
}
propertyToId.clear();
idToProperty.clear();
m_currentItem = jobItem;
// if (!currentItem) {
// deleteAction->setEnabled(false);
// return;
// }
// deleteAction->setEnabled(true);
QtVariantProperty *property;
property = m_variantManager->addProperty(QVariant::String, tr("Name"));
property->setValue(jobItem->getName());
addProperty(property, JobQueueXML::JobNameAttribute);
property = m_variantManager->addProperty(QVariant::String, tr("Status"));
property->setValue(jobItem->getStatus());
addProperty(property, JobQueueXML::JobStatusAttribute);
property = m_variantManager->addProperty(QVariant::String, tr("Begin Time"));
property->setValue(jobItem->getBeginTime());
addProperty(property, JobQueueXML::JobBeginTimeAttribute);
property = m_variantManager->addProperty(QVariant::String, tr("End Time"));
property->setValue(jobItem->getEndTime());
addProperty(property, JobQueueXML::JobEndTimeAttribute);
}
void JobPropertiesWidget::addProperty(QtVariantProperty *property, const QString &id)
{
propertyToId[property] = id;
idToProperty[id] = property;
QtBrowserItem *item = m_propertyBrowser->addProperty(property);
if (idToExpanded.contains(id))
m_propertyBrowser->setExpanded(item, idToExpanded[id]);
}
void JobPropertiesWidget::valueChanged(QtProperty *property, const QVariant &value)
{
qDebug() << "JobPropertiesWidget::valueChanged()";
if (!propertyToId.contains(property))
return;
if (!m_currentItem)
return;
QString id = propertyToId[property];
if (id == JobQueueXML::JobNameAttribute) {
m_currentItem->setName(value.value<QString>());
}
m_jobQueueModel->jobQueueItemIsChanged(m_currentItem);
}
......@@ -2,11 +2,43 @@
#define JOBPROPERTIESWIDGET_H
#include <QWidget>
#include <QMap>
class QtProperty;
class QtVariantProperty;
class JobQueueModel;
class JobQueueItem;
//! Widget to show and change properties of currently selected JobQueueItem
//! Left buttom corner of JobQueueView
class JobPropertiesWidget : public QWidget
{
Q_OBJECT
public:
explicit JobPropertiesWidget(QWidget *parent = 0);
void setModel(JobQueueModel *model);
public slots:
void itemClicked(JobQueueItem *item);
private slots:
void valueChanged(QtProperty *property, const QVariant &value);
private:
void updateExpandState();
void addProperty(QtVariantProperty *property, const QString &id);
JobQueueModel *m_jobQueueModel;
class QtVariantPropertyManager *m_variantManager;
class QtTreePropertyBrowser *m_propertyBrowser;
QMap<QtProperty *, QString> propertyToId;
QMap<QString, QtVariantProperty *> idToProperty;
QMap<QString, bool> idToExpanded;
JobQueueItem *m_currentItem;
};
......
......@@ -5,13 +5,19 @@
#include "minisplitter.h"
#include <QSplitter>
#include <QListView>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QDebug>
JobListWidget::JobListWidget(QWidget *parent)
: QWidget(parent)
, m_jobQueueModel(0)
, m_listView(new QListView(this))
, m_button1(new QPushButton("Submit"))
, m_button2(new QPushButton("Run"))
, m_saveButton(new QPushButton("Save"))
{
setMinimumSize(128, 400);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
......@@ -25,15 +31,19 @@ JobListWidget::JobListWidget(QWidget *parent)
mainLayout->setSpacing(0);
Manhattan::StyledBar *bar = new Manhattan::StyledBar;
// QHBoxLayout *layout = new QHBoxLayout(bar);
// layout->setMargin(0);
// layout->setSpacing(0);
mainLayout->addWidget(bar);
QHBoxLayout *buttonsLayout = new QHBoxLayout;
buttonsLayout->addWidget(m_button1);
buttonsLayout->addWidget(m_button2);
buttonsLayout->addWidget(m_saveButton);
buttonsLayout->addStretch(1);
QVBoxLayout *vlayout = new QVBoxLayout;
vlayout->setMargin(10);
vlayout->setSpacing(10);
vlayout->addLayout(buttonsLayout);
vlayout->addWidget(m_listView);
......@@ -41,32 +51,57 @@ JobListWidget::JobListWidget(QWidget *parent)
mainLayout->addLayout(vlayout);
connect(m_saveButton, SIGNAL(clicked()), this, SLOT(save()));
setLayout(mainLayout);
}
void JobListWidget::setModel(JobQueueModel *model)
{
Q_ASSERT(model);
if(model != m_jobQueueModel) {
m_jobQueueModel = model;
m_listView->setModel(model);
connect(m_listView->selectionModel(),
SIGNAL( selectionChanged(const QItemSelection&, const QItemSelection&) ),
m_jobQueueModel,
SLOT( onSelectionChanged(const QItemSelection&, const QItemSelection&) )
);
}
}
void JobListWidget::save()
{
Q_ASSERT(m_jobQueueModel);
qDebug() << "JobListWidget::save() -> ";
m_jobQueueModel->save("tmp2.xml");
}
// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
JobSelectorWidget::JobSelectorWidget(JobQueueModel *model, QWidget *parent)
: QWidget(parent)
, m_jobQueueModel(model)
, m_jobQueueModel(0)
, m_splitter(new Manhattan::MiniSplitter(this))
, m_jobListWidget(new JobListWidget(this))
, m_jobProperties(new JobPropertiesWidget(this))
{
setModel(model);
setMinimumSize(128, 600);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
setWindowTitle(QLatin1String("Job Selector"));
setObjectName(QLatin1String("Job Selector"));
// setStyleSheet("background-color:white;");
m_jobListWidget->setModel(model);
m_splitter->setOrientation(Qt::Vertical);
m_splitter->addWidget(m_jobListWidget);
m_splitter->addWidget(m_jobProperties);
......@@ -82,7 +117,10 @@ JobSelectorWidget::JobSelectorWidget(JobQueueModel *model, QWidget *parent)
void JobSelectorWidget::setModel(JobQueueModel *model)
{
if(model != m_jobQueueModel) {
m_jobQueueModel = model;
m_jobListWidget->setModel(m_jobQueueModel);
m_jobProperties->setModel(m_jobQueueModel);
}
}
......@@ -3,28 +3,41 @@
#include <QWidget>
class JobQueueModel;
class JobPropertiesWidget;
class QSplitter;
class QListView;
class JobPropertiesWidget;
class JobQueueModel;
class QPushButton;
//! holds list of jobs and some buttons
//! Widget to select JobQueueItem in a list
//! Top left corner of JobQueueView
//! Part of JobSelectorWidget
class JobListWidget : public QWidget
{
Q_OBJECT
public:
explicit JobListWidget(QWidget *parent = 0);
void setModel(JobQueueModel *model);
public slots:
private slots:
void save();
private:
JobQueueModel *m_jobQueueModel;
QListView *m_listView;
QPushButton *m_button1;
QPushButton *m_button2;
QPushButton *m_saveButton;
};
//! holds JobListWidget and JobPropertiesWidget
//! Widget to select JobQueueItem in a list and display its properties
//! Left side of JobQueueView
//! Contains two widgets: JobListWidget (top) and JobQueueProperties(buttom)
class JobSelectorWidget : public QWidget
{
public:
......@@ -37,6 +50,7 @@ private:
QSplitter *m_splitter;
JobListWidget *m_jobListWidget;
JobPropertiesWidget *m_jobProperties;
};
......
......@@ -5,6 +5,7 @@
class OutputDataWidget : public QWidget
{
Q_OBJECT
public:
explicit OutputDataWidget(QWidget *parent = 0);
};
......
......@@ -28,62 +28,16 @@ JobQueueView::JobQueueView(QWidget *parent)
, m_splitter(new Manhattan::MiniSplitter(this))
, m_jobSelector(new JobSelectorWidget(m_jobQueueModel, this))
, m_jobOutputData(new JobOutputDataWidget(this))
// , m_button1(new QPushButton("Run"))
// , m_button2(new QPushButton("Submit"))
// , m_saveButton(new QPushButton("Save"))
// , m_listView(new QListView(this))
{
setObjectName("JobQueueView");
m_jobQueueModel->addJob(new JobQueueItem("job1"));
m_jobQueueModel->addJob(new JobQueueItem("job2"));
m_jobQueueModel->addJob(new JobQueueItem("job3"));
// //
// QHBoxLayout *buttonsLayout = new QHBoxLayout;
// buttonsLayout->addWidget(m_button1);
// buttonsLayout->addWidget(m_button2);
// buttonsLayout->addWidget(m_saveButton);
// buttonsLayout->addStretch(1);
// QGridLayout *gridLayout = new QGridLayout;
// gridLayout->addWidget(m_listView, 0, 0);
//// gridLayout->addWidget(m_listView2, 1, 0);
//// gridLayout->addWidget(m_treeView, 0, 1);
//// gridLayout->addWidget(m_tableView, 1, 1);
// QVBoxLayout *mainLayout = new QVBoxLayout;
// mainLayout->addLayout(buttonsLayout);
// mainLayout->addLayout(gridLayout);
// setLayout(mainLayout);
// m_listView->setDragEnabled(true);
// m_listView->setAcceptDrops(true);
// m_listView->setModel(m_jobQueueModel);
// m_listView->setDefaultDropAction(Qt::MoveAction);
// //m_jobQueueModel->save("tmp.xml");
// m_jobQueueModel->load("model.xml");
// //m_jobQueueModel->save("tmp2.xml");
// connect(m_saveButton, SIGNAL(clicked()), this, SLOT(save()));
// m_splitter = new QSplitter(this);
// m_jobSelector = new JobSelectorWidget(this);
// m_jobOutputData = new JobOutputDataWidget(this);
m_splitter->addWidget(m_jobSelector);
m_splitter->addWidget(m_jobOutputData);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->setMargin(0);
mainLayout->setSpacing(0);
......@@ -91,73 +45,12 @@ JobQueueView::JobQueueView(QWidget *parent)
setLayout(mainLayout);
// initSubWindows();
// QList<QAbstractItemView*> frames =
// m_jobSelector->findChildren<QAbstractItemView*>();
// for (int i = 0 ; i< frames.count(); ++i)
// frames[i]->setFrameStyle(QFrame::NoFrame);
// connect(
// m_jobQueueModel->selectionModel(),
// );
}
//void JobQueueView::initSubWindows()
//{
//}
//void JobQueueView::initSubWindows()
//{
// m_subWindows.resize(NumberOfSubWindows);
// m_dockWidgets.resize(NumberOfSubWindows);
// m_subWindows[JobSelectorWindow] = JobQueueWidgets::createJobSelectorWidget(this);
// m_subWindows[JobPropertiesWindow] = JobQueueWidgets::createJobPropertiesWidget(this);
// m_subWindows[JobOutputDataWindow] = JobQueueWidgets::createJobOutputDataWidget(this);
// for (int i = 0; i < NumberOfSubWindows; i++) {
// QWidget *subWindow = m_subWindows[i];
// m_dockWidgets[i] = addDockForWidget(subWindow);
// QList<QAbstractItemView*> frames =
// subWindow->findChildren<QAbstractItemView*>();
// for (int i = 0 ; i< frames.count(); ++i)
// frames[i]->setFrameStyle(QFrame::NoFrame);
// }
// addDockWidget(Qt::LeftDockWidgetArea, m_dockWidgets[JobSelectorWindow]);
// addDockWidget(Qt::LeftDockWidgetArea, m_dockWidgets[JobPropertiesWindow]);
// addDockWidget(Qt::RightDockWidgetArea, m_dockWidgets[JobOutputDataWindow]);
// foreach (QDockWidget *dockWidget, m_dockWidgets)
// dockWidget->show();
//}
//QDockWidget *JobQueueView::addDockForWidget(QWidget *widget)
//{
// QDockWidget *result = new QDockWidget(widget->windowTitle(), this);
// result->setWidget(widget);
//// dockWidget->setObjectName(widget->objectName() + QLatin1String("DockWidget"));
// result->setFeatures(QDockWidget::DockWidgetMovable);
// return result;
//}
void JobQueueView::save()
{
qDebug() << "JobQueueView::save() -> ";
m_jobQueueModel->save("tmp2.xml");
}
......@@ -32,8 +32,8 @@ public:
public slots:
private slots:
void save();
//private slots:
// void save();
private:
// void initSubWindows();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment