save panel settings

This commit is contained in:
Robert Haschke 2018-02-28 00:52:14 +01:00
parent 3d07e34522
commit 2451d0c4d5
4 changed files with 70 additions and 2 deletions

View File

@ -146,6 +146,16 @@ void TaskDisplay::reset()
trajectory_visual_->reset();
}
void TaskDisplay::save(rviz::Config config) const
{
Display::save(config);
}
void TaskDisplay::load(const rviz::Config &config)
{
Display::load(config);
}
void TaskDisplay::onEnable()
{
Display::onEnable();

View File

@ -77,8 +77,10 @@ public:
void loadRobotModel();
virtual void update(float wall_dt, float ros_dt);
virtual void reset();
void update(float wall_dt, float ros_dt) override;
void reset() override;
void save(rviz::Config config) const;
void load(const rviz::Config &config);
// overrides from Display
virtual void onInitialize();

View File

@ -142,11 +142,13 @@ void TaskPanel::onInitialize()
void TaskPanel::save(rviz::Config config) const
{
rviz::Panel::save(config);
d_ptr->tasks_widget->save(config.mapMakeChild("tasks_view"));
}
void TaskPanel::load(const rviz::Config& config)
{
rviz::Panel::load(config);
d_ptr->tasks_widget->load(config.mapGetChild("tasks_view"));
}
void TaskPanel::showStageDockWidget()
@ -247,6 +249,57 @@ TaskView::TaskView(QWidget *parent)
onCurrentStageChanged(d->tasks_view->currentIndex(), QModelIndex());
}
void TaskView::save(rviz::Config config)
{
auto writeSplitterSizes = [&config](QSplitter* splitter, const QString& key) {
rviz::Config group = config.mapMakeChild(key);
for (int s : splitter->sizes()) {
rviz::Config item = group.listAppendNew();
item.setValue(s);
}
};
writeSplitterSizes(d_ptr->tasks_property_splitter, "property_splitter");
writeSplitterSizes(d_ptr->tasks_solutions_splitter, "solutions_splitter");
auto writeColumnSizes = [&config](QTreeView* view, const QString& key) {
rviz::Config group = config.mapMakeChild(key);
for (int c = 0, end = view->header()->count(); c != end; ++c) {
rviz::Config item = group.listAppendNew();
item.setValue(view->columnWidth(c));
}
};
writeColumnSizes(d_ptr->tasks_view, "tasks_view_columns");
writeColumnSizes(d_ptr->solutions_view, "solutions_view_columns");
}
void TaskView::load(const rviz::Config &config)
{
if (!config.isValid()) return;
auto readSizes = [&config](const QString& key) {
rviz::Config group = config.mapGetChild(key);
QList<int> sizes, empty;
for (int i = 0; i < group.listLength(); ++i) {
rviz::Config item = group.listChildAt(i);
if (item.getType() != rviz::Config::Value) return empty;
QVariant value = item.getValue();
bool ok = false;
int int_value = value.toInt(&ok);
if (!ok) return empty;
sizes << int_value;
}
return sizes;
};
d_ptr->tasks_property_splitter->setSizes(readSizes("property_splitter"));
d_ptr->tasks_solutions_splitter->setSizes(readSizes("solutions_splitter"));
int column = 0;
for (int w : readSizes("tasks_view_columns"))
d_ptr->tasks_view->setColumnWidth(++column, w);
for (int w : readSizes("solutions_view_columns"))
d_ptr->tasks_view->setColumnWidth(++column, w);
}
void TaskView::addTask()
{
QModelIndex current = d_ptr->tasks_view->currentIndex();

View File

@ -97,6 +97,9 @@ class TaskView : public QWidget {
public:
TaskView(QWidget* parent = 0);
void save(rviz::Config config);
void load(const rviz::Config& config);
public Q_SLOTS:
void addTask();