initial commit
This commit is contained in:
commit
4b60ece582
327 changed files with 28286 additions and 0 deletions
321
roboute/views/detailedview.cpp
Normal file
321
roboute/views/detailedview.cpp
Normal file
|
@ -0,0 +1,321 @@
|
|||
#include "detailedview.h"
|
||||
|
||||
#include <QtWidgets/QHeaderView>
|
||||
|
||||
DetailedView::DetailedView(QWidget* parent):
|
||||
QWidget(parent),
|
||||
layout(new QGridLayout(this)),
|
||||
topPanel(new QHBoxLayout()),
|
||||
logArea(new QTextEdit(this)),
|
||||
splitter(new QSplitter(this)),
|
||||
dock(new QWidget(this)),
|
||||
props(new QTableView(dock)),
|
||||
commands(new QListView(dock)),
|
||||
connectBtn(new QPushButton(QIcon::fromTheme("state-ok"), "", this)),
|
||||
launchBtn(new QPushButton(QIcon::fromTheme("system-run"), "", this)),
|
||||
clearBtn(new QPushButton(QIcon::fromTheme("trash-empty"), "", this)),
|
||||
removeBtn(new QPushButton(QIcon::fromTheme("delete"), "", this)),
|
||||
editBtn(new QPushButton(QIcon::fromTheme("edit-rename"), "", this)),
|
||||
connected(false),
|
||||
launched(false),
|
||||
propsShown(false),
|
||||
commandsShown(false),
|
||||
model(0)
|
||||
{
|
||||
setLayout(layout);
|
||||
logArea->setReadOnly(true);
|
||||
|
||||
layout->addLayout(topPanel, 0, 0, 1, 1);
|
||||
layout->addWidget(splitter, 1, 0, 1, 1);
|
||||
|
||||
splitter->addWidget(logArea);
|
||||
splitter->addWidget(dock);
|
||||
|
||||
QHBoxLayout* lay = new QHBoxLayout();
|
||||
dock->setLayout(lay);
|
||||
lay->addWidget(props);
|
||||
lay->addWidget(commands);
|
||||
lay->setContentsMargins(0,0,0,0);
|
||||
|
||||
props->verticalHeader()->hide();
|
||||
props->horizontalHeader()->setStretchLastSection(true);
|
||||
props->setCornerButtonEnabled(false);
|
||||
props->setShowGrid(false);
|
||||
|
||||
props->hide();
|
||||
commands->hide();
|
||||
dock->hide();
|
||||
|
||||
connectBtn->setToolTip(tr("Connect"));
|
||||
connectBtn->setEnabled(false);
|
||||
launchBtn->setToolTip(tr("Launch"));
|
||||
launchBtn->setEnabled(false);
|
||||
clearBtn->setToolTip(tr("Clear log"));
|
||||
clearBtn->setEnabled(false);
|
||||
removeBtn->setToolTip(tr("Remove"));
|
||||
removeBtn->setEnabled(false);
|
||||
editBtn->setToolTip(tr("Edit"));
|
||||
editBtn->setEnabled(false);
|
||||
QObject::connect(connectBtn, SIGNAL(clicked()), this, SLOT(onConnectClick()));
|
||||
QObject::connect(launchBtn, SIGNAL(clicked()), this, SLOT(onLaunchClick()));
|
||||
QObject::connect(clearBtn, SIGNAL(clicked()), this, SLOT(onClearClick()));
|
||||
QObject::connect(removeBtn, SIGNAL(clicked()), this, SLOT(onRemoveClick()));
|
||||
QObject::connect(editBtn, SIGNAL(clicked()), this, SLOT(onEditClick()));
|
||||
QObject::connect(commands, SIGNAL(doubleClicked(const QModelIndex)), SLOT(onCommandDoubleClicked(const QModelIndex)));
|
||||
|
||||
topPanel->addWidget(connectBtn);
|
||||
topPanel->addWidget(launchBtn);
|
||||
topPanel->addWidget(clearBtn);
|
||||
topPanel->addStretch();
|
||||
topPanel->addWidget(editBtn);
|
||||
topPanel->addWidget(removeBtn);
|
||||
|
||||
layout->setContentsMargins(0,0,0,0);
|
||||
}
|
||||
|
||||
void DetailedView::appendMessage(const QString& msg)
|
||||
{
|
||||
QStringList list = msg.split('\n');
|
||||
QStringList::const_iterator itr = list.begin();
|
||||
QStringList::const_iterator end = list.end();
|
||||
for (;itr != end; ++itr) {
|
||||
QString str = *itr;
|
||||
if (str != "") {
|
||||
logArea->append(*itr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DetailedView::clear()
|
||||
{
|
||||
logArea->clear();
|
||||
connectBtn->setToolTip(tr("Connect"));
|
||||
connectBtn->setEnabled(false);
|
||||
connectBtn->setIcon(QIcon::fromTheme("state-ok"));
|
||||
launchBtn->setToolTip(tr("Launch"));
|
||||
launchBtn->setEnabled(false);
|
||||
launchBtn->setIcon(QIcon::fromTheme("kt-start"));
|
||||
clearBtn->setEnabled(false);
|
||||
removeBtn->setEnabled(false);
|
||||
connected = false;
|
||||
launched = false;
|
||||
}
|
||||
|
||||
void DetailedView::setConnectable(bool value)
|
||||
{
|
||||
connectBtn->setEnabled(value);
|
||||
}
|
||||
|
||||
void DetailedView::setConnected(bool value)
|
||||
{
|
||||
if (connected != value) {
|
||||
connected = value;
|
||||
if (connected) {
|
||||
connectBtn->setToolTip(tr("Disonnect"));
|
||||
connectBtn->setIcon(QIcon::fromTheme("state-error"));
|
||||
} else {
|
||||
connectBtn->setToolTip(tr("Connect"));
|
||||
connectBtn->setIcon(QIcon::fromTheme("state-ok"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DetailedView::setLaunchable(bool value)
|
||||
{
|
||||
launchBtn->setEnabled(value);
|
||||
}
|
||||
|
||||
void DetailedView::setLaunched(bool value)
|
||||
{
|
||||
if (launched != value) {
|
||||
launched = value;
|
||||
if (launched) {
|
||||
launchBtn->setToolTip(tr("Stop"));
|
||||
launchBtn->setIcon(QIcon::fromTheme("kt-stop"));
|
||||
} else {
|
||||
launchBtn->setToolTip(tr("Launch"));
|
||||
launchBtn->setIcon(QIcon::fromTheme("kt-start"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DetailedView::onConnectClick()
|
||||
{
|
||||
if (model == 0) {
|
||||
return;
|
||||
}
|
||||
if (connected) {
|
||||
emit disconnect(model->id);
|
||||
} else {
|
||||
emit connect(model->id);
|
||||
}
|
||||
}
|
||||
|
||||
void DetailedView::onLaunchClick()
|
||||
{
|
||||
if (model == 0) {
|
||||
return;
|
||||
}
|
||||
if (launched) {
|
||||
emit stop(model->id);
|
||||
} else {
|
||||
emit launch(model->id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void DetailedView::onRemoveClick()
|
||||
{
|
||||
if (model == 0) {
|
||||
return;
|
||||
}
|
||||
emit remove(model->id);
|
||||
}
|
||||
|
||||
void DetailedView::onEditClick()
|
||||
{
|
||||
if (model == 0) {
|
||||
return;
|
||||
}
|
||||
emit edit(model->id);
|
||||
}
|
||||
|
||||
void DetailedView::setRemovable(bool value)
|
||||
{
|
||||
removeBtn->setEnabled(value);
|
||||
}
|
||||
|
||||
void DetailedView::setEditable(bool value)
|
||||
{
|
||||
editBtn->setEnabled(value);
|
||||
}
|
||||
|
||||
|
||||
void DetailedView::setModel(AppModel* p_model)
|
||||
{
|
||||
if (model != 0) {
|
||||
clearModel();
|
||||
}
|
||||
model = p_model;
|
||||
QString* history = model->getHistory();
|
||||
appendMessage(*history);
|
||||
setConnectable(model->getConnectable());
|
||||
setConnected(model->getConnected());
|
||||
setLaunchable(model->getLaunchable());
|
||||
setLaunched(model->getLaunched());
|
||||
setRemovable(model->id != 0);
|
||||
setEditable(model->getEditable());
|
||||
clearBtn->setEnabled(true);
|
||||
delete history;
|
||||
QObject::connect(model, SIGNAL(newLogMessage(const QString&)), this, SLOT(appendMessage(const QString&)));
|
||||
QObject::connect(model, SIGNAL(changedConnectable(bool)), this, SLOT(setConnectable(bool)));
|
||||
QObject::connect(model, SIGNAL(changedConnected(bool)), this, SLOT(setConnected(bool)));
|
||||
QObject::connect(model, SIGNAL(changedLaunchable(bool)), this, SLOT(setLaunchable(bool)));
|
||||
QObject::connect(model, SIGNAL(changedLaunched(bool)), this, SLOT(setLaunched(bool)));
|
||||
QObject::connect(model, SIGNAL(changedEditable(bool)), this, SLOT(setEditable(bool)));
|
||||
QObject::connect(model, SIGNAL(clearedLog()), this, SLOT(clearedLog()));
|
||||
|
||||
QItemSelectionModel *m1 = props->selectionModel();
|
||||
props->setModel(&model->props);
|
||||
delete m1;
|
||||
|
||||
QItemSelectionModel *m2 = commands->selectionModel();
|
||||
commands->setModel(&model->commands);
|
||||
delete m2;
|
||||
}
|
||||
|
||||
void DetailedView::clearModel()
|
||||
{
|
||||
if (model != 0) {
|
||||
clear();
|
||||
QObject::disconnect(model, SIGNAL(newLogMessage(const QString&)), this, SLOT(appendMessage(const QString&)));
|
||||
QObject::disconnect(model, SIGNAL(changedConnectable(bool)), this, SLOT(setConnectable(bool)));
|
||||
QObject::disconnect(model, SIGNAL(changedConnected(bool)), this, SLOT(setConnected(bool)));
|
||||
QObject::disconnect(model, SIGNAL(changedLaunchable(bool)), this, SLOT(setLaunchable(bool)));
|
||||
QObject::disconnect(model, SIGNAL(changedLaunched(bool)), this, SLOT(setLaunched(bool)));
|
||||
QObject::disconnect(model, SIGNAL(clearedLog()), this, SLOT(clearedLog()));
|
||||
|
||||
model = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void DetailedView::saveSettings()
|
||||
{
|
||||
QSettings settings;
|
||||
|
||||
settings.beginGroup("detailedView");
|
||||
|
||||
settings.setValue("splitterState", splitter->saveState());
|
||||
settings.setValue("propsHeaderState", props->horizontalHeader()->saveState());
|
||||
|
||||
settings.endGroup();
|
||||
}
|
||||
|
||||
void DetailedView::readSettings()
|
||||
{
|
||||
QSettings settings;
|
||||
|
||||
splitter->restoreState(settings.value("detailedView/splitterState").toByteArray());
|
||||
props->horizontalHeader()->restoreState(settings.value("detailedView/propsHeaderState").toByteArray());
|
||||
}
|
||||
|
||||
void DetailedView::showAttrs(bool value)
|
||||
{
|
||||
if (value) {
|
||||
props->show();
|
||||
} else {
|
||||
props->hide();
|
||||
}
|
||||
propsShown = value;
|
||||
checkDock();
|
||||
|
||||
}
|
||||
|
||||
void DetailedView::showCommands(bool value)
|
||||
{
|
||||
if (value) {
|
||||
commands->show();
|
||||
} else {
|
||||
commands->hide();
|
||||
}
|
||||
commandsShown = value;
|
||||
checkDock();
|
||||
}
|
||||
|
||||
void DetailedView::checkDock()
|
||||
{
|
||||
if (commandsShown || propsShown) {
|
||||
dock->show();
|
||||
} else {
|
||||
dock->hide();
|
||||
}
|
||||
}
|
||||
|
||||
void DetailedView::onCommandDoubleClicked(const QModelIndex& index)
|
||||
{
|
||||
if (model == 0) {
|
||||
return;
|
||||
}
|
||||
emit launchCommand(model->id, index.data().toString());
|
||||
}
|
||||
|
||||
uint64_t DetailedView::getModelId()
|
||||
{
|
||||
if (model == 0) {
|
||||
throw 1;
|
||||
}
|
||||
return model->id;
|
||||
}
|
||||
|
||||
void DetailedView::onClearClick()
|
||||
{
|
||||
if (model == 0) {
|
||||
return;
|
||||
}
|
||||
emit clearLog(model->id);
|
||||
}
|
||||
|
||||
void DetailedView::clearedLog()
|
||||
{
|
||||
logArea->clear();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue