35 #include <QApplication> 36 #include <QCloseEvent> 37 #include <QDesktopServices> 38 #include <QDockWidget> 40 #include <QFileDialog> 43 #include <QMessageBox> 46 #include <QToolButton> 50 #include <QToolButton> 51 #include <QHBoxLayout> 54 #include <boost/algorithm/string/split.hpp> 55 #include <boost/algorithm/string/trim.hpp> 56 #include <boost/bind.hpp> 57 #include <boost/filesystem.hpp> 63 #include <OgreRenderWindow.h> 64 #include <OgreMeshManager.h> 96 namespace fs = boost::filesystem;
98 #define CONFIG_EXTENSION "rviz" 99 #define CONFIG_EXTENSION_WILDCARD "*." CONFIG_EXTENSION 100 #define RECENT_CONFIG_COUNT 10 102 #if BOOST_FILESYSTEM_VERSION == 3 103 #define BOOST_FILENAME_STRING filename().string 104 #define BOOST_FILE_STRING string 106 #define BOOST_FILENAME_STRING filename 107 #define BOOST_FILE_STRING file_string 113 : QMainWindow(parent)
115 , render_panel_(nullptr)
116 , show_help_action_(nullptr)
118 , file_menu_(nullptr)
119 , recent_configs_menu_(nullptr)
123 , toolbar_actions_(nullptr)
124 , show_choose_new_master_option_(false)
125 , add_tool_action_(nullptr)
126 , remove_tool_menu_(nullptr)
127 , initialized_(false)
130 , post_load_timer_(new QTimer(this))
132 , toolbar_visible_(true)
147 QToolButton* reset_button =
new QToolButton();
148 reset_button->setText(
"Reset");
149 reset_button->setContentsMargins(0, 0, 0, 0);
150 statusBar()->addPermanentWidget(reset_button, 0);
151 connect(reset_button, SIGNAL(clicked(
bool)),
this, SLOT(
reset()));
160 statusBar()->addPermanentWidget(
fps_label_, 0);
163 setWindowTitle(
"RViz[*]");
191 if (wall_diff.
toSec() > 1.0)
198 fps_label_->setText(QString::number(
int(fps)) + QString(
" fps"));
222 Ogre::MeshManager::getSingleton().removeAll();
230 QApplication::exit(255);
258 setWindowIcon(app_icon);
265 connect(
this, SIGNAL(
statusUpdate(
const QString&)),
splash_, SLOT(showMessage(
const QString&)));
272 app_->processEvents();
282 app_->processEvents();
284 QWidget* central_widget =
new QWidget(
this);
285 QHBoxLayout* central_layout =
new QHBoxLayout;
286 central_layout->setSpacing(0);
287 central_layout->setMargin(0);
315 central_widget->setLayout(central_layout);
319 app_->processEvents();
325 app_->processEvents();
331 app_->processEvents();
333 setCentralWidget(central_widget);
337 app_->processEvents();
345 app_->processEvents();
351 app_->processEvents();
356 connect(tool_man, SIGNAL(toolAdded(
Tool*)),
this, SLOT(
addTool(
Tool*)));
365 app_->processEvents();
367 if (display_config_file !=
"")
378 app_->processEvents();
393 home_dir_ = QDir::toNativeSeparators(QDir::homePath()).toStdString();
402 ROS_ERROR(
"Moving file [%s] out of the way to recreate it as a directory.",
config_dir_.c_str());
421 QString last_config_dir, last_image_dir;
422 if (config.
mapGetString(
"Last Config Dir", &last_config_dir) &&
431 int num_recent = recent_configs_list.
listLength();
432 for (
int i = 0; i < num_recent; i++)
467 QAction* file_menu_open_action =
468 file_menu_->addAction(
"&Open Config",
this, SLOT(
onOpen()), QKeySequence(
"Ctrl+O"));
469 this->addAction(file_menu_open_action);
470 QAction* file_menu_save_action =
471 file_menu_->addAction(
"&Save Config",
this, SLOT(
onSave()), QKeySequence(
"Ctrl+S"));
472 this->addAction(file_menu_save_action);
473 QAction* file_menu_save_as_action =
474 file_menu_->addAction(
"Save Config &As",
this, SLOT(
onSaveAs()), QKeySequence(
"Ctrl+Shift+S"));
475 this->addAction(file_menu_save_as_action);
487 QAction* file_menu_quit_action =
488 file_menu_->addAction(
"&Quit",
this, SLOT(close()), QKeySequence(
"Ctrl+Q"));
489 file_menu_quit_action->setObjectName(
"actQuit");
490 this->addAction(file_menu_quit_action);
497 QAction* fullscreen_action =
499 fullscreen_action->setCheckable(
true);
502 connect(
this, SIGNAL(
fullScreenChange(
bool)), fullscreen_action, SLOT(setChecked(
bool)));
505 QMenu* help_menu = menuBar()->addMenu(
"&Help");
506 help_menu->addAction(
"Show &Help panel",
this, SLOT(
showHelpPanel()));
507 help_menu->addAction(
"Open rviz wiki in browser",
this, SLOT(
onHelpWiki()));
508 help_menu->addSeparator();
509 help_menu->addAction(
"&About",
this, SLOT(
onHelpAbout()));
515 font.setPointSize(font.pointSizeF() * 0.9);
521 toolbar_->setContentsMargins(0, 0, 0, 0);
523 toolbar_->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
530 QToolButton* add_tool_button =
new QToolButton();
531 add_tool_button->setToolTip(
"Add a new tool");
532 add_tool_button->setIcon(
loadPixmap(
"package://rviz/icons/plus.png"));
533 toolbar_->addWidget(add_tool_button);
537 QToolButton* remove_tool_button =
new QToolButton();
539 remove_tool_button->setPopupMode(QToolButton::InstantPopup);
540 remove_tool_button->setToolTip(
"Remove a tool from the toolbar");
541 remove_tool_button->setIcon(
loadPixmap(
"package://rviz/icons/minus.png"));
542 toolbar_->addWidget(remove_tool_button);
545 QMenu* button_style_menu =
new QMenu(
toolbar_);
546 QAction* action_tool_button_icon_only =
new QAction(
"Icon only",
toolbar_actions_);
547 action_tool_button_icon_only->setData(Qt::ToolButtonIconOnly);
548 button_style_menu->addAction(action_tool_button_icon_only);
549 QAction* action_tool_button_text_only =
new QAction(
"Text only",
toolbar_actions_);
550 action_tool_button_text_only->setData(Qt::ToolButtonTextOnly);
551 button_style_menu->addAction(action_tool_button_text_only);
552 QAction* action_tool_button_text_beside_icon =
new QAction(
"Text beside icon",
toolbar_actions_);
553 action_tool_button_text_beside_icon->setData(Qt::ToolButtonTextBesideIcon);
554 button_style_menu->addAction(action_tool_button_text_beside_icon);
555 QAction* action_tool_button_text_under_icon =
new QAction(
"Text under icon",
toolbar_actions_);
556 action_tool_button_text_under_icon->setData(Qt::ToolButtonTextUnderIcon);
557 button_style_menu->addAction(action_tool_button_text_under_icon);
559 QToolButton* button_style_button =
new QToolButton();
560 button_style_button->setMenu(button_style_menu);
561 button_style_button->setPopupMode(QToolButton::InstantPopup);
562 button_style_button->setToolTip(
"Set toolbar style");
563 button_style_button->setIcon(
loadPixmap(
"package://rviz/icons/visibility.svg"));
564 toolbar_->addWidget(button_style_button);
565 connect(button_style_menu, SIGNAL(triggered(QAction*)),
this, SLOT(
onButtonStyleTool(QAction*)));
570 QList<PanelDockWidget*> dock_widgets = findChildren<PanelDockWidget*>();
572 for (QList<PanelDockWidget*>::iterator it = dock_widgets.begin(); it != dock_widgets.end(); it++)
574 Qt::DockWidgetArea curr_area = dockWidgetArea(*it);
575 if (area == curr_area)
577 (*it)->setCollapsed(hide);
582 (*it)->setAllowedAreas((*it)->allowedAreas() & ~area);
586 (*it)->setAllowedAreas((*it)->allowedAreas() | area);
615 QDockWidget* dock_widget =
dynamic_cast<QDockWidget*
>(sender());
618 Qt::DockWidgetArea area = dockWidgetArea(dock_widget);
619 if (area == Qt::LeftDockWidgetArea)
623 if (area == Qt::RightDockWidgetArea)
636 if (dialog.exec() == QDialog::Accepted)
639 preferences_ = boost::make_shared<Preferences>(temp_preferences);
647 QString display_name;
653 if (dialog->exec() == QDialog::Accepted)
658 connect(dock, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)),
this, SLOT(
onDockPanelChange()));
673 if (dialog->exec() == QDialog::Accepted)
687 for (; it != end; ++it)
691 std::string display_name = *it;
694 display_name +=
" (default)";
700 QString qdisplay_name = QString::fromStdString(display_name);
701 QAction*
action =
new QAction(qdisplay_name,
this);
702 action->setData(QString::fromStdString(*it));
729 std::string path = qpath.toStdString();
730 fs::path actual_load_path = path;
731 bool valid_load_path = fs::is_regular_file(actual_load_path);
733 if (!valid_load_path && fs::portable_posix_name(path))
737 actual_load_path = fs::path(
config_dir_) / actual_load_path;
738 if ((valid_load_path = fs::is_regular_file(actual_load_path)))
739 path = actual_load_path.string();
742 if (!valid_load_path)
744 actual_load_path = (fs::path(
package_path_) /
"default.rviz");
745 if (!(valid_load_path = fs::is_regular_file(actual_load_path)))
747 ROS_ERROR(
"Default display config '%s' not found. RViz will be very empty at first.",
748 actual_load_path.c_str());
764 setWindowModified(
false);
767 std::unique_ptr<LoadingDialog> dialog;
772 connect(
this, SIGNAL(
statusUpdate(
const QString&)), dialog.get(), SLOT(showMessage(
const QString&)));
773 app_->processEvents();
778 reader.
readFile(config, QString::fromStdString(full_path));
809 if (!isWindowModified())
811 setWindowModified(
true);
827 title = fs::path(path).BOOST_FILENAME_STRING() +
"[*] - RViz";
829 setWindowTitle(QString::fromStdString(title));
849 setWindowModified(
false);
884 resize(width, height);
887 QString main_window_config;
888 if (config.
mapGetString(
"QMainWindow State", &main_window_config))
890 restoreState(QByteArray::fromHex(qPrintable(main_window_config)));
894 QList<PanelDockWidget*> dock_widgets = findChildren<PanelDockWidget*>();
896 for (QList<PanelDockWidget*>::iterator it = dock_widgets.begin(); it != dock_widgets.end(); it++)
902 (*it)->load(itConfig);
917 int tool_button_style;
918 if (config.
mapGetInt(
"toolButtonStyle", &tool_button_style))
920 toolbar_->setToolButtonStyle(static_cast<Qt::ToolButtonStyle>(tool_button_style));
936 QByteArray window_state = saveState().toHex();
937 config.
mapSetValue(
"QMainWindow State", window_state.constData());
943 QList<PanelDockWidget*> dock_widgets = findChildren<PanelDockWidget*>();
945 for (QList<PanelDockWidget*>::iterator it = dock_widgets.begin(); it != dock_widgets.end(); it++)
960 for (
int i = 0; i < num_custom_panels; i++)
964 QString class_id, name;
973 connect(dock, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)),
this, SLOT(
onDockPanelChange()));
974 Panel* panel = qobject_cast<
Panel*>(dock->widget());
977 panel->
load(panel_config);
1016 if (isWindowModified() &&
preferences_->prompt_save_on_exit)
1018 QMessageBox box(
this);
1019 box.setText(
"There are unsaved changes.");
1020 box.setInformativeText(QString::fromStdString(
"Save changes to " +
display_config_file_ +
"?"));
1021 box.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
1022 box.setDefaultButton(QMessageBox::Save);
1024 int result = box.exec();
1028 case QMessageBox::Save:
1035 QMessageBox box(
this);
1036 box.setWindowTitle(
"Failed to save.");
1038 box.setInformativeText(
1040 box.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
1041 box.setDefaultButton(QMessageBox::Save);
1042 int result = box.exec();
1045 case QMessageBox::Save:
1048 case QMessageBox::Discard:
1054 case QMessageBox::Discard:
1069 QString
filename = QFileDialog::getOpenFileName(
this,
"Choose a file to open",
1074 if (!filename.isEmpty())
1076 std::string path = filename.toStdString();
1078 if (!fs::exists(path))
1080 QString message = filename +
" does not exist!";
1081 QMessageBox::critical(
this,
"Config file does not exist", message);
1101 QMessageBox box(
this);
1102 box.setWindowTitle(
"Failed to save.");
1104 box.setInformativeText(
1106 box.setStandardButtons(QMessageBox::Save | QMessageBox::Cancel);
1107 box.setDefaultButton(QMessageBox::Save);
1108 if (box.exec() == QMessageBox::Save)
1119 QString q_filename = QFileDialog::getSaveFileName(
this,
"Choose a file to save to",
1124 if (!q_filename.isEmpty())
1126 std::string
filename = q_filename.toStdString();
1127 fs::path path(filename);
1148 connect(dialog, SIGNAL(savedInDirectory(
const QString&)),
this,
1155 QAction*
action =
dynamic_cast<QAction*
>(sender());
1158 std::string path = action->data().toString().toStdString();
1161 if (!fs::exists(path))
1163 QString message = QString::fromStdString(path) +
" does not exist!";
1164 QMessageBox::critical(
this,
"Config file does not exist", message);
1176 action->setIcon(tool->
getIcon());
1177 action->setIconText(tool->
getName());
1178 action->setCheckable(
true);
1196 it->second->setIconText(name);
1211 QString name = remove_tool_menu_action->text();
1226 static_cast<Qt::ToolButtonStyle>(button_style_tool_menu_action->data().toInt()));
1239 QString tool_name = tool->
getName();
1241 for (
int i = 0; i < remove_tool_actions.size(); i++)
1243 QAction* removal_action = remove_tool_actions.at(i);
1244 if (removal_action->text() == tool_name)
1255 action->setIcon(tool->
getIcon());
1256 action->setIconText(tool->
getName());
1264 action->setChecked(
true);
1274 connect(dock, SIGNAL(destroyed(QObject*)),
this, SLOT(
onHelpDestroyed()));
1293 QDesktopServices::openUrl(QUrl(
"http://wiki.ros.org/rviz"));
1298 QString about_text = QString(
"This is RViz version %1 (%2).\n" 1300 "Compiled against Qt version %3." 1302 "Compiled against OGRE version %4.%5.%6%7 (%8).")
1305 .arg(QT_VERSION_STR)
1306 .arg(OGRE_VERSION_MAJOR)
1307 .arg(OGRE_VERSION_MINOR)
1308 .arg(OGRE_VERSION_PATCH)
1309 .arg(OGRE_VERSION_SUFFIX)
1310 .arg(OGRE_VERSION_NAME);
1312 QMessageBox::about(QApplication::activeWindow(),
"About", about_text);
1317 QList<QTabBar*> tab_bars = findChildren<QTabBar*>(QString(), Qt::FindDirectChildrenOnly);
1318 for (QList<QTabBar*>::iterator it = tab_bars.begin(); it != tab_bars.end(); it++)
1320 (*it)->setElideMode(Qt::ElideNone);
1336 record.delete_action->deleteLater();
1353 if (QAction*
action = qobject_cast<QAction*>(sender()))
1368 Qt::WindowStates state = windowState();
1369 if (full_screen == state.testFlag(Qt::WindowFullScreen))
1376 menuBar()->setVisible(!full_screen);
1378 statusBar()->setVisible(!full_screen);
1382 setWindowState(state | Qt::WindowFullScreen);
1384 setWindowState(state & ~Qt::WindowFullScreen);
1394 const QString& class_id,
1395 Qt::DockWidgetArea area,
1408 record.
dock =
addPane(name, panel, area, floating);
1409 record.
panel = panel;
1428 addDockWidget(area, dock);
1431 dock->setFloating(floating);
1432 dock->setObjectName(name);
1436 connect(
this, SIGNAL(
fullScreenChange(
bool)), dock, SLOT(overrideVisibility(
bool)));
1438 QAction* toggle_action = dock->toggleViewAction();
boost::shared_ptr< Preferences > preferences_
void openPreferencesDialog()
void indicateToolIsCurrent(Tool *tool)
Mark the given tool as the current one.
void addTool(Tool *tool)
Add the given tool to this frame's toolbar.
void saveToolbars(Config config)
Saves the user configuration of the toolbar to the config node.
void exitFullScreen()
Exit full screen mode.
void hideLeftDock(bool hide)
void setHideButtonVisibility(bool visible)
Hide or show the hide-dock buttons.
void initialize()
Do initialization that wasn't done in constructor. Initializes tool manager, view manager...
void removeTool(Tool *tool)
Remove the given tool from the frame's toolbar.
void fullScreenChange(bool hidden)
Emitted when the interface enters or leaves full screen mode.
void setValue(const QVariant &value)
Ensures this is a valid Config object, sets the type to Value then sets the value.
PanelDockWidget * addPane(const QString &name, QWidget *panel, Qt::DockWidgetArea area=Qt::LeftDockWidgetArea, bool floating=false) override
void hideRightDock(bool hide)
std::string persistent_settings_file_
bool saveDisplayConfig(const QString &path)
Save display and other settings to the given file.
virtual void load(const Config &config)
Load the properties of all subsystems from the given Config.
QString error_message_
Error message (if any) from most recent saveDisplayConfig() call.
void initialize(Ogre::SceneManager *scene_manager, DisplayContext *manager)
void initialize(VisualizationManager *manager)
QString errorMessage()
Return an error message if the latest read call had an error, or the empty string if not...
std::string display_config_file_
void onDeletePanel()
Delete a panel widget.
QMenu * recent_configs_menu_
void statusUpdate(const QString &message)
Emitted during file-loading and initialization to indicate progress.
QVariant getValue() const
If this config object is valid and is a Value type, this returns its value. Otherwise it returns an i...
void setSplashPath(const QString &splash_path)
Set the path to the "splash" image file. This image is shown during initialization and loading of the...
PanelFactory * panel_factory_
void onRecentConfigSelected()
QString errorMessage()
Return an error message if the latest write call had an error, or the empty string if there was no er...
ROSCPP_DECL bool isInitialized()
void leaveEvent(QEvent *event) override
bool show_choose_new_master_option_
void onToolbarRemoveTool(QAction *remove_tool_menu_action)
Remove a the tool whose name is given by remove_tool_menu_action->text().
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
std::string last_image_dir_
void onPanelDeleted(QObject *dock)
void openNewPanelDialog()
int listLength() const
Returns the length of the List in this Node, or 0 if this Node does not have type List...
Config mapGetChild(const QString &key) const
If the referenced Node is a Map and it has a child with the given key, return a reference to the chil...
bool mapGetString(const QString &key, QString *value_out) const
Convenience function for looking up a named string.
void initialize(const QString &display_config_file="")
Initialize the visualizer. Creates the VisualizationManager.
Ogre::SceneManager * getSceneManager() const override
Returns the Ogre::SceneManager used for the main RenderPanel.
void displayConfigFileChanged(const QString &fullpath)
Emitted when the config file has changed.
void savePanels(Config config)
Saves custom panels to the given config node.
QWidget * getParentWindow() override
bool toolbar_visible_
Indicates if the toolbar should be visible outside of fullscreen mode.
bool error()
Return true if the latest write operation had an error.
virtual void onDockPanelVisibilityChange(bool visible)
QMenu * remove_tool_menu_
void savePersistentSettings()
Save the "general" config file, which has just the few things which should not be saved with a displa...
bool isValid() const
Returns true if the internal Node reference is valid, false if not. Same as (getType() != Invalid)...
std::map< Tool *, QAction * > tool_to_action_map_
void mapSetValue(const QString &key, QVariant value)
Set a named child to the given value.
QToolButton * hide_left_dock_button_
A dialog for grabbing a screen shot.
Configuration data storage class.
void setStatus(const QString &message) override
void loadWindowGeometry(const Config &config)
void closeEvent(QCloseEvent *event) override
virtual void setName(const QString &name)
void onToolbarActionTriggered(QAction *action)
Looks up the Tool for this action and calls VisualizationManager::setCurrentTool().
VisualizationFrame(QWidget *parent=nullptr)
void readFile(Config &config, const QString &filename)
Read config data from a file. This potentially changes the return value sof error(), statusMessage(), and config().
QList< PanelRecord > custom_panels_
void save(Config config) const
Save the properties of each Display and most editable rviz data.
void setDisplayConfigFile(const std::string &path)
Set the display config file path.
QStatusBar * original_status_bar_
void setImageSaveDirectory(const QString &directory)
Set the default directory in which to save screenshot images.
RenderPanel * render_panel_
VisualizationManager * manager_
std::string package_path_
void setFullScreen(bool full_screen)
Set full screen mode.
Config mapMakeChild(const QString &key)
Create a child node stored with the given key, and return the child.
void loadPersistentSettings()
Load the "general" config file, which has just the few things which should not be saved with a displa...
std::string get_version()
The VisualizationManager class is the central manager class of rviz, holding all the Displays...
void setHelpPath(const QString &help_path)
Set the path to the help file. Should contain HTML. Default is a file in the RViz package...
bool error()
Return true if the latest readFile() or readString() call had an error.
QAction * add_tool_action_
void loadPreferences(const Config &config)
QActionGroup * toolbar_actions_
#define RECENT_CONFIG_COUNT
void load(const Config &config)
Load the properties of each Display and most editable rviz data.
void initConfigs()
Initialize the default config directory (~/.rviz) and set up the persistent_settings_file_ and displa...
void markLoadingDone()
Set loading_ to false.
QString getErrorMessage() const
ROSLIB_DECL std::string getPath(const std::string &package_name)
void savePreferences(Config config)
void onButtonStyleTool(QAction *button_style_tool_menu_action)
Change the button style of the toolbar.
void loadDisplayConfig(const QString &path)
Load display and other settings from the given file.
QDockWidget * addPanelByName(const QString &name, const QString &class_lookup_name, Qt::DockWidgetArea area=Qt::LeftDockWidgetArea, bool floating=false)
bool loading_
True just when loading a display config file, false all other times.
void writeFile(const Config &config, const QString &filename)
Write config data to a file. This potentially changes the return values of error() and statusMessage(...
bool loadDisplayConfigHelper(const std::string &full_path)
Load display and other settings from the given full file path.
bool mapGetBool(const QString &key, bool *value_out) const
Convenience function for looking up a named boolean.
~VisualizationFrame() override
virtual Type * make(const QString &class_id, QString *error_return=nullptr)
Instantiate and return a instance of a subclass of Type using makeRaw().
void updateRecentConfigMenu()
void setDisplayConfigModified()
Call this to let the frame know that something that would get saved in the display config has changed...
void hideDockImpl(Qt::DockWidgetArea area, bool hide)
Config listAppendNew()
Ensure the referenced Node is of type List, append a new Empty Node to the end of the list...
Config listChildAt(int i) const
Return the i'th child in the list, if the referenced Node has type List. Returns an Invalid Config if...
void saveWindowGeometry(Config config)
#define CONFIG_EXTENSION_WILDCARD
void changeMaster()
Save the current state and quit with exit code 255 to signal the wrapper that we would like to restar...
ros::WallTime last_fps_calc_time_
QTimer * post_load_timer_
#define BOOST_FILE_STRING
bool prepareToExit()
Check for unsaved changes, prompt to save config, etc.
QMenu * delete_view_menu_
WidgetGeometryChangeDetector * geom_change_detector_
void initToolbars()
Sets up the top toolbar with QToolbuttions for adding/deleting tools and modifiying the tool view...
virtual void load(const Config &config)
Override to load configuration data. This version loads the name of the panel.
std::string default_display_config_file_
void onToolNameChanged(const QString &name)
React to name changes of a tool, updating the name of the associated QAction.
void setApp(QApplication *app)
bool mapGetInt(const QString &key, int *value_out) const
Convenience function for looking up a named integer.
void loadPanels(const Config &config)
Loads custom panels from the given config node.
void markRecentConfig(const std::string &path)
ToolManager * getToolManager() const override
Return a pointer to the ToolManager.
void startUpdate()
Start timers. Creates and starts the update and idle timers, both set to 30Hz (33ms).
QPixmap loadPixmap(QString url, bool fill_cache)
void setShowChooseNewMaster(bool show)
Call this before initialize() to have it take effect.
std::string last_config_dir_
virtual void save(Config config)
Save the properties of each subsystem and most editable rviz data.
void resetTime()
Resets the wall and ROS elapsed time to zero and calls resetDisplays().
QIcon getIcon(const QString &class_id) const override
void setType(Type new_type)
Set the type of this Config Node.
std::map< QAction *, Tool * > action_to_tool_map_
void refreshTool(Tool *tool)
Refresh the given tool in this frame's' toolbar.
virtual void setHelpPath(const QString &help_path)
QToolButton * hide_right_dock_button_
void configureToolbars(const Config &config)
Applies the user defined toolbar configuration from the given config node.
QAction * show_help_action_