initial commit
This commit is contained in:
commit
4b60ece582
327 changed files with 28286 additions and 0 deletions
27
roboute/views/CMakeLists.txt
Normal file
27
roboute/views/CMakeLists.txt
Normal file
|
@ -0,0 +1,27 @@
|
|||
cmake_minimum_required(VERSION 2.8.12)
|
||||
project(robouteViews)
|
||||
|
||||
find_package(Qt5Core REQUIRED)
|
||||
find_package(Qt5Widgets REQUIRED)
|
||||
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
set(HEADERS
|
||||
mainview.h
|
||||
detailedview.h
|
||||
newappdialogue.h
|
||||
commandform.h
|
||||
)
|
||||
|
||||
set(SOURCES
|
||||
mainview.cpp
|
||||
detailedview.cpp
|
||||
newappdialogue.cpp
|
||||
commandform.cpp
|
||||
)
|
||||
|
||||
add_library(robouteViews STATIC ${HEADERS} ${SOURCES})
|
||||
|
||||
target_link_libraries(robouteViews Qt5::Core)
|
||||
target_link_libraries(robouteViews Qt5::Widgets)
|
104
roboute/views/commandform.cpp
Normal file
104
roboute/views/commandform.cpp
Normal file
|
@ -0,0 +1,104 @@
|
|||
#include "commandform.h"
|
||||
|
||||
#include <QtWidgets/QLabel>
|
||||
#include <QtWidgets/QLineEdit>
|
||||
#include <QtWidgets/QSpinBox>
|
||||
#include <QtWidgets/QPushButton>
|
||||
|
||||
CommandForm::CommandForm(const QString& commandName, const AMap& p_args, QWidget* parent):
|
||||
QDialog(parent),
|
||||
args(p_args),
|
||||
editors(),
|
||||
name(commandName)
|
||||
{
|
||||
QVBoxLayout* mainLayout = new QVBoxLayout(this);
|
||||
QHBoxLayout* buttonsLayout = new QHBoxLayout();
|
||||
QFormLayout* formLayout = new QFormLayout();
|
||||
|
||||
mainLayout->addWidget(new QLabel(name, this));
|
||||
mainLayout->addLayout(formLayout);
|
||||
mainLayout->addStretch();
|
||||
mainLayout->addLayout(buttonsLayout);
|
||||
|
||||
setLayout(mainLayout);
|
||||
createForm(formLayout);
|
||||
createButtons(buttonsLayout);
|
||||
}
|
||||
|
||||
void CommandForm::createButtons(QHBoxLayout* layout)
|
||||
{
|
||||
layout->addStretch();
|
||||
|
||||
QPushButton* accept = new QPushButton(QIcon::fromTheme("dialog-ok"), tr("OK"), this);
|
||||
QPushButton* reject = new QPushButton(QIcon::fromTheme("dialog-cancel"), tr("Cancel"), this);
|
||||
|
||||
connect(accept, SIGNAL(clicked()), SLOT(accept()));
|
||||
connect(reject, SIGNAL(clicked()), SLOT(reject()));
|
||||
|
||||
layout->addWidget(accept);
|
||||
layout->addWidget(reject);
|
||||
}
|
||||
|
||||
void CommandForm::createForm(QFormLayout* layout)
|
||||
{
|
||||
AMap::const_iterator itr = args.begin();
|
||||
AMap::const_iterator end = args.end();
|
||||
|
||||
for (; itr != end; ++itr) {
|
||||
bool supportable = false;
|
||||
QWidget* editor;
|
||||
|
||||
switch (itr.value()) {
|
||||
case 0:
|
||||
editor = new QLineEdit(this);
|
||||
supportable = true;
|
||||
break;
|
||||
case 2:
|
||||
QSpinBox* spbox = new QSpinBox(this);
|
||||
spbox->setMaximum(UINT16_MAX); //TODO what the hell is wrong with this shit?
|
||||
editor = spbox;
|
||||
supportable = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (supportable) {
|
||||
layout->addRow(tr(itr.key().toStdString().c_str()), editor);
|
||||
editors.insert(itr.key(), editor);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
QMap<QString, QVariant> CommandForm::getData() const
|
||||
{
|
||||
AMap::const_iterator itr = args.begin();
|
||||
AMap::const_iterator end = args.end();
|
||||
|
||||
QMap<QString, QVariant> result;
|
||||
|
||||
for (; itr != end; ++itr) {
|
||||
bool supportable = false;
|
||||
QWidget* editor = editors.find(itr.key()).value();
|
||||
|
||||
switch (itr.value()) {
|
||||
case 0:
|
||||
result.insert(itr.key(), static_cast<QLineEdit*>(editor)->text());
|
||||
supportable = true;
|
||||
break;
|
||||
case 2:
|
||||
result.insert(itr.key(), static_cast<QSpinBox*>(editor)->value());
|
||||
supportable = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
QString CommandForm::getName() const
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
|
||||
|
31
roboute/views/commandform.h
Normal file
31
roboute/views/commandform.h
Normal file
|
@ -0,0 +1,31 @@
|
|||
#ifndef COMMANDFORM_H
|
||||
#define COMMANDFORM_H
|
||||
|
||||
#include <QtWidgets/QDialog>
|
||||
#include <QtWidgets/QVBoxLayout>
|
||||
#include <QtWidgets/QHBoxLayout>
|
||||
#include <QtWidgets/QFormLayout>
|
||||
#include <QtCore/QVariant>
|
||||
#include <QtCore/QMap>
|
||||
|
||||
class CommandForm : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
typedef QMap<QString, uint64_t> AMap;
|
||||
public:
|
||||
CommandForm(const QString& commandName, const AMap& p_args, QWidget* parent = 0);
|
||||
|
||||
QMap<QString, QVariant> getData() const;
|
||||
QString getName() const;
|
||||
|
||||
private:
|
||||
AMap args;
|
||||
QMap<QString, QWidget*> editors;
|
||||
QString name;
|
||||
|
||||
void createForm(QFormLayout* layout);
|
||||
void createButtons(QHBoxLayout* layout);
|
||||
|
||||
};
|
||||
|
||||
#endif // COMMANDFORM_H
|
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();
|
||||
}
|
86
roboute/views/detailedview.h
Normal file
86
roboute/views/detailedview.h
Normal file
|
@ -0,0 +1,86 @@
|
|||
#ifndef DETAILEDVIEW_H
|
||||
#define DETAILEDVIEW_H
|
||||
|
||||
#include "../models/appmodel.h"
|
||||
|
||||
#include <QtCore/QSettings>
|
||||
|
||||
#include <QtWidgets/QWidget>
|
||||
#include <QtWidgets/QTextEdit>
|
||||
#include <QtWidgets/QTableView>
|
||||
#include <QtWidgets/QListView>
|
||||
#include <QtWidgets/QSplitter>
|
||||
#include <QtWidgets/QGridLayout>
|
||||
#include <QtWidgets/QHBoxLayout>
|
||||
#include <QtWidgets/QPushButton>
|
||||
#include <QtWidgets/QDockWidget>
|
||||
|
||||
class DetailedView : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DetailedView(QWidget* parent = 0);
|
||||
void setModel(AppModel* p_model);
|
||||
void clearModel();
|
||||
uint64_t getModelId();
|
||||
|
||||
void saveSettings();
|
||||
void readSettings();
|
||||
|
||||
void showAttrs(bool value);
|
||||
void showCommands(bool value);
|
||||
|
||||
private:
|
||||
QGridLayout* layout;
|
||||
QHBoxLayout* topPanel;
|
||||
QTextEdit* logArea;
|
||||
QSplitter* splitter;
|
||||
QWidget* dock;
|
||||
QTableView* props;
|
||||
QListView* commands;
|
||||
QPushButton* connectBtn;
|
||||
QPushButton* launchBtn;
|
||||
QPushButton* clearBtn;
|
||||
QPushButton* removeBtn;
|
||||
QPushButton* editBtn;
|
||||
|
||||
bool connected;
|
||||
bool launched;
|
||||
bool propsShown;
|
||||
bool commandsShown;
|
||||
|
||||
AppModel* model;
|
||||
|
||||
public slots:
|
||||
void appendMessage(const QString& msg);
|
||||
void clear();
|
||||
void setConnectable(bool value);
|
||||
void setConnected(bool value);
|
||||
void setLaunchable(bool value);
|
||||
void setLaunched(bool value);
|
||||
void setRemovable(bool value);
|
||||
void setEditable(bool value);
|
||||
void clearedLog();
|
||||
|
||||
signals:
|
||||
void connect(uint64_t id);
|
||||
void disconnect(uint64_t id);
|
||||
void launch(uint64_t id);
|
||||
void stop(uint64_t id);
|
||||
void remove(uint64_t id);
|
||||
void edit(uint64_t id);
|
||||
void launchCommand(uint64_t id, const QString& name);
|
||||
void clearLog(uint64_t id);
|
||||
|
||||
private slots:
|
||||
void onConnectClick();
|
||||
void onLaunchClick();
|
||||
void onClearClick();
|
||||
void onRemoveClick();
|
||||
void onEditClick();
|
||||
void checkDock();
|
||||
void onCommandDoubleClicked(const QModelIndex& index);
|
||||
};
|
||||
|
||||
#endif // DETAILEDVIEW_H
|
59
roboute/views/mainview.cpp
Normal file
59
roboute/views/mainview.cpp
Normal file
|
@ -0,0 +1,59 @@
|
|||
#include "mainview.h"
|
||||
|
||||
MainView::MainView(QAbstractListModel* model, QWidget* parent):
|
||||
QWidget(parent),
|
||||
splitter(new QSplitter(this)),
|
||||
list(new QListView(this)),
|
||||
details(new DetailedView(this)),
|
||||
detailed(false)
|
||||
{
|
||||
QGridLayout* layout = new QGridLayout();
|
||||
setLayout(layout);
|
||||
|
||||
//AppListItemDelegate* dlg = new AppListItemDelegate(this);
|
||||
//list->setItemDelegate(dlg);
|
||||
list->setModel(model);
|
||||
|
||||
layout->addWidget(splitter, 0, 0, 1, 1);
|
||||
|
||||
splitter->addWidget(list);
|
||||
splitter->addWidget(details);
|
||||
details->hide();
|
||||
}
|
||||
|
||||
void MainView::hideDetails()
|
||||
{
|
||||
if (detailed) {
|
||||
detailed = false;
|
||||
details->hide();
|
||||
}
|
||||
}
|
||||
|
||||
void MainView::showDetails()
|
||||
{
|
||||
if (!detailed) {
|
||||
detailed = true;
|
||||
details->show();
|
||||
}
|
||||
}
|
||||
|
||||
void MainView::saveSettings()
|
||||
{
|
||||
QSettings settings;
|
||||
settings.beginGroup("view");
|
||||
|
||||
settings.setValue("splitterState", splitter->saveState());
|
||||
|
||||
settings.endGroup();
|
||||
|
||||
details->saveSettings();
|
||||
}
|
||||
|
||||
void MainView::readSettings()
|
||||
{
|
||||
QSettings settings;
|
||||
|
||||
splitter->restoreState(settings.value("view/splitterState").toByteArray());
|
||||
|
||||
details->readSettings();
|
||||
}
|
40
roboute/views/mainview.h
Normal file
40
roboute/views/mainview.h
Normal file
|
@ -0,0 +1,40 @@
|
|||
#ifndef MAINVIEW_H
|
||||
#define MAINVIEW_H
|
||||
|
||||
#include <QtWidgets/QWidget>
|
||||
#include <QtWidgets/QGridLayout>
|
||||
#include <QtWidgets/QSplitter>
|
||||
#include <QtWidgets/QListView>
|
||||
#include <QtCore/QAbstractListModel>
|
||||
#include <QtWidgets/QPlainTextEdit>
|
||||
#include <QtCore/QSettings>
|
||||
|
||||
//#include "applistitemdelegate.h"
|
||||
#include "detailedview.h"
|
||||
|
||||
class MainView : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MainView(QAbstractListModel* model, QWidget* parent = 0);
|
||||
|
||||
public:
|
||||
QSplitter* splitter;
|
||||
QListView* list;
|
||||
DetailedView* details;
|
||||
|
||||
void saveSettings();
|
||||
void readSettings();
|
||||
|
||||
|
||||
private:
|
||||
bool detailed;
|
||||
|
||||
public:
|
||||
void showDetails();
|
||||
void hideDetails();
|
||||
|
||||
};
|
||||
|
||||
#endif // MAINVIEW_H
|
114
roboute/views/newappdialogue.cpp
Normal file
114
roboute/views/newappdialogue.cpp
Normal file
|
@ -0,0 +1,114 @@
|
|||
#include "newappdialogue.h"
|
||||
|
||||
NewAppDialogue::NewAppDialogue(QWidget* parent):
|
||||
QDialog(parent),
|
||||
name(new QLineEdit(this)),
|
||||
address(new QLineEdit(this)),
|
||||
port(new QLineEdit(this)),
|
||||
login(new QLineEdit(this)),
|
||||
pass(new QLineEdit(this)),
|
||||
log(new QLineEdit(this)),
|
||||
command(new QLineEdit(this))
|
||||
{
|
||||
construct();
|
||||
}
|
||||
|
||||
NewAppDialogue::NewAppDialogue(const QMap<QString, QString>& data, QWidget* parent):
|
||||
QDialog(parent),
|
||||
name(new QLineEdit(this)),
|
||||
address(new QLineEdit(this)),
|
||||
port(new QLineEdit(this)),
|
||||
login(new QLineEdit(this)),
|
||||
pass(new QLineEdit(this)),
|
||||
log(new QLineEdit(this)),
|
||||
command(new QLineEdit(this))
|
||||
{
|
||||
construct();
|
||||
|
||||
if (data.contains("name")) {
|
||||
name->setText(data.value("name"));
|
||||
}
|
||||
|
||||
if (data.contains("address")) {
|
||||
address->setText(data.value("address"));
|
||||
}
|
||||
|
||||
if (data.contains("port")) {
|
||||
port->setText(data.value("port"));
|
||||
}
|
||||
|
||||
if (data.contains("login")) {
|
||||
login->setText(data.value("login"));
|
||||
}
|
||||
|
||||
if (data.contains("password")) {
|
||||
pass->setText(data.value("password"));
|
||||
}
|
||||
|
||||
if (data.contains("logFile")) {
|
||||
log->setText(data.value("logFile"));
|
||||
}
|
||||
|
||||
if (data.contains("command")) {
|
||||
command->setText(data.value("command"));
|
||||
}
|
||||
}
|
||||
|
||||
void NewAppDialogue::construct()
|
||||
{
|
||||
QVBoxLayout* mainLayout = new QVBoxLayout(this);
|
||||
QHBoxLayout* buttonsLayout = new QHBoxLayout();
|
||||
QFormLayout* formLayout = new QFormLayout();
|
||||
|
||||
mainLayout->addLayout(formLayout);
|
||||
mainLayout->addStretch();
|
||||
mainLayout->addLayout(buttonsLayout);
|
||||
|
||||
setLayout(mainLayout);
|
||||
|
||||
createButtons(buttonsLayout);
|
||||
createForm(formLayout);
|
||||
}
|
||||
|
||||
|
||||
void NewAppDialogue::createButtons(QHBoxLayout* layout)
|
||||
{
|
||||
layout->addStretch();
|
||||
|
||||
QPushButton* accept = new QPushButton(QIcon::fromTheme("dialog-ok"), tr("OK"), this);
|
||||
QPushButton* reject = new QPushButton(QIcon::fromTheme("dialog-cancel"), tr("Cancel"), this);
|
||||
|
||||
connect(accept, SIGNAL(clicked()), SLOT(accept()));
|
||||
connect(reject, SIGNAL(clicked()), SLOT(reject()));
|
||||
|
||||
layout->addWidget(accept);
|
||||
layout->addWidget(reject);
|
||||
}
|
||||
|
||||
void NewAppDialogue::createForm(QFormLayout* layout)
|
||||
{
|
||||
pass->setEchoMode(QLineEdit::Password);
|
||||
|
||||
layout->addRow(tr("Name"), name);
|
||||
layout->addRow(tr("Server address"), address);
|
||||
layout->addRow(tr("Service port"), port);
|
||||
layout->addRow(tr("ssh login"), login);
|
||||
layout->addRow(tr("Password"), pass);
|
||||
layout->addRow(tr("Log file"), log);
|
||||
layout->addRow(tr("Command"), command);
|
||||
}
|
||||
|
||||
QMap<QString, QString> NewAppDialogue::getData() const
|
||||
{
|
||||
QMap<QString, QString> map;
|
||||
map.insert("name", name->text());
|
||||
map.insert("address", address->text());
|
||||
map.insert("port", port->text());
|
||||
map.insert("login", login->text());
|
||||
map.insert("password", pass->text());
|
||||
map.insert("logFile", log->text());
|
||||
map.insert("command", command->text());
|
||||
|
||||
return map;
|
||||
}
|
||||
|
37
roboute/views/newappdialogue.h
Normal file
37
roboute/views/newappdialogue.h
Normal file
|
@ -0,0 +1,37 @@
|
|||
#ifndef NEWAPPDIALOGUE_H
|
||||
#define NEWAPPDIALOGUE_H
|
||||
|
||||
#include <QtWidgets/QDialog>
|
||||
#include <QtWidgets/QVBoxLayout>
|
||||
#include <QtWidgets/QHBoxLayout>
|
||||
#include <QtWidgets/QFormLayout>
|
||||
#include <QtWidgets/QPushButton>
|
||||
#include <QtWidgets/QSpacerItem>
|
||||
#include <QtWidgets/QLineEdit>
|
||||
#include <QtCore/QMap>
|
||||
|
||||
class NewAppDialogue : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
NewAppDialogue(QWidget* parent = 0);
|
||||
NewAppDialogue(const QMap<QString, QString>& data, QWidget* parent = 0);
|
||||
|
||||
QMap<QString, QString> getData() const;
|
||||
|
||||
private:
|
||||
QLineEdit* name;
|
||||
QLineEdit* address;
|
||||
QLineEdit* port;
|
||||
QLineEdit* login;
|
||||
QLineEdit* pass;
|
||||
QLineEdit* log;
|
||||
QLineEdit* command;
|
||||
|
||||
private:
|
||||
void construct();
|
||||
void createButtons(QHBoxLayout* layout);
|
||||
void createForm(QFormLayout* layout);
|
||||
};
|
||||
|
||||
#endif // NEWAPPDIALOGUE_H
|
Loading…
Add table
Add a link
Reference in a new issue