VR-Vantage 2.6 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
exampleToolbar

Table of Contents

Overview

This example shows how to create and modify a toolbar from both new and existing menu items and GUI elements.

Expected Result

exampleToolbar2.png
Toolbar Result

Example details

The code fragments are from exampleToolbarPluginInit.cxx code.

  1. Register the menu that is to be used in the plugin. While the order is not strictly important, it represents how the elements are created in the system (menus first, then toolbars):

DtQtMenuAssembler::instance(de).registerMenu(new DtExampleToolbarMenu(de));
DtQtMenuAssembler::instance(de).registerMenu(new DtExampleToolbarMenuItem(de));

  1. Register the toolbars that are going to be created with the DtQtToolbarAssembler registerToolbar method:

DtQtToolbarAssembler::instance(de).registerToolbar(new DtExampleToolbar(de));

  1. The toolbar assembler interface allows you to add menu items, menus, separators and GUI elements (widgets) to the toolbar. To add a menu item and separator:

DtToolbarPath::toolbar("DtExampleToolbar").item("DtWireframeItem"));
DtToolbarPath::toolbar("DtExampleToolbar").item("DtShadowsItem"));
DtToolbarPath::toolbar("DtExampleToolbar").separator("DtSeparator_1"));
DtToolbarPath::toolbar("DtExampleToolbar").item("DtExampleToolbarMenuItem"));

  1. To add a menu:

DtToolbarPath::toolbar("DtExampleToolbar").separator("DtSeparator_2"));
DtToolbarPath::toolbar("DtExampleToolbar").mainMenu("DtFileMenu").menu("DtOpenMenu"));

  1. You can also create menus that only appear as part of the toolbar and not on the main menu. To do this, the menus and menu items must be registered with the DtQtMenuAssembler class. However, the menu path definitions are registered with the toolbar configuration:

DtQtMenuAssembler::instance(de).registerMenu(new DtExampleSceneToolbarMenu(de));
DtMenuPath::mainMenu("DtExampleSceneToolbarMenu"));
DtMenuPath::mainMenu("DtExampleSceneToolbarMenu").item("DtNewSceneItem"));
DtMenuPath::mainMenu("DtExampleSceneToolbarMenu").item("DtOpenSceneItem"));

  1. And reference this new menu the same way as one created in the menu system:

DtToolbarPath::toolbar("DtExampleToolbar").separator("DtSeparator_3"));
DtToolbarPath::toolbar("DtExampleToolbar").mainMenu("DtExampleSceneToolbarMenu"));

  1. To add a widget, the widget creator, a subclass of DtWidgetBuilder, must be register with the DtQtToolbarAssember registerWidgetBuilder method. It can then be referenced by the widget call on the toolbar path:

DtQtToolbarAssembler::instance(de).registerWidgetBuilder("DtToolbarExampleCombo",
new DtToolbarExampleCombo);
DtToolbarPath::toolbar("DtExampleToolbar").separator("DtSeparator_4"));
DtToolbarPath::toolbar("DtExampleToolbar").widget("DtToolbarExampleCombo"));

Building the Example

VR-Vantage includes pre-built versions of the example plug-in. To build it yourself, follow the instructions at Building VR-Vantage Examples, Applications, and Plug-ins.

Running the Example

This example is a plug-in. You can run it by running ./bin64/exampleToolbar_stealth.bat (on Windows) or ./bin64/exampleToolbar_stealth.sh (on Linux). For more information about running examples, please see Running Applications and Examples.

Example Source Files


exampleToolbarPluginInit.cxx

/******************************************************************************
** Copyright (c) 2019 MAK Technologies, Inc.
** All rights reserved.
******************************************************************************/
#include <vrvCore/DtDe.h>
{
return true;
}
namespace makVrv
{
namespace vrvExampleToolbarPlugin
{
void init(DtDe& de)
{
try
{
// First make sure that the vrvCoreQt module is init'ed.
//Add example menu and example page item.
if(igApp)
{
DtQtMenuAssembler::instance(de).registerMenu(new DtExampleToolbarMenu(de));
DtQtMenuAssembler::instance(de).registerMenu(new DtExampleToolbarMenuItem(de));
DtMenuPath::mainMenu("DtExampleToolbarMenu"));
DtMenuPath::mainMenu("DtExampleToolbarMenu").item("DtExampleToolbarMenuItem"));
DtQtToolbarAssembler::instance(de).registerToolbar(new DtExampleToolbar(de));
DtToolbarPath::toolbar("DtExampleToolbar").item("DtWireframeItem"));
DtToolbarPath::toolbar("DtExampleToolbar").item("DtShadowsItem"));
DtToolbarPath::toolbar("DtExampleToolbar").separator("DtSeparator_1"));
DtToolbarPath::toolbar("DtExampleToolbar").item("DtExampleToolbarMenuItem"));
DtToolbarPath::toolbar("DtExampleToolbar").separator("DtSeparator_2"));
DtToolbarPath::toolbar("DtExampleToolbar").mainMenu("DtFileMenu").menu("DtOpenMenu"));
DtQtMenuAssembler::instance(de).registerMenu(new DtExampleSceneToolbarMenu(de));
DtMenuPath::mainMenu("DtExampleSceneToolbarMenu"));
DtMenuPath::mainMenu("DtExampleSceneToolbarMenu").item("DtNewSceneItem"));
DtMenuPath::mainMenu("DtExampleSceneToolbarMenu").item("DtOpenSceneItem"));
DtToolbarPath::toolbar("DtExampleToolbar").separator("DtSeparator_3"));
DtToolbarPath::toolbar("DtExampleToolbar").mainMenu("DtExampleSceneToolbarMenu"));
new DtToolbarExampleCombo);
DtToolbarPath::toolbar("DtExampleToolbar").separator("DtSeparator_4"));
DtToolbarPath::toolbar("DtExampleToolbar").widget("DtToolbarExampleCombo"));
igApp->masterModeMenuConfiguration().addMenuPathAfter(DtMenuPath::mainMenu("DtViewMenu").item("DtExampleToolbar"),
DtMenuPath::mainMenu("DtViewMenu").separator("1"));
igApp->masterModeMenuConfiguration().addMenuPathAfter(DtMenuPath::mainMenu("DtViewMenu").separator("DtExampleToolbarSeparator"),
DtMenuPath::mainMenu("DtViewMenu").item("DtExampleToolbar"));
DtToolbarPath::toolbar("DtDisplaySettingsToolbar").item("DtWireframeItem"));
DtToolbarPath::toolbar("DtDisplaySettingsToolbar").item("DtShadowsItem"));
}
}
DtCATCH_AND_PROPAGATE(DtCorruptedState)
}
}
}

exampleToolbarMenu.h

/******************************************************************************
** Copyright (c) 2019 MAK Technologies, Inc.
** All rights reserved.
******************************************************************************/
#pragma once
namespace makVrv
{
class DtDe;
namespace vrvExampleToolbarPlugin
{
class DT_DLL_EXAMPLETOOLBAR DtExampleToolbar : public DtToolbar
{
public:
DtExampleToolbar(DtDe&);
virtual ~DtExampleToolbar();
virtual QToolBar* createToolbar(DtDe&, QWidget* parent);
};
class DT_DLL_EXAMPLETOOLBAR DtExampleToolbarMenu : public DtMenu
{
public:
DtExampleToolbarMenu(DtDe& de);
virtual ~DtExampleToolbarMenu();
virtual QMenu* createMenu(DtDe&, QWidget* parent);
};
class DT_DLL_EXAMPLETOOLBAR DtExampleSceneToolbarMenu : public DtMenu
{
public:
DtExampleSceneToolbarMenu(DtDe& de);
virtual ~DtExampleSceneToolbarMenu();
virtual QMenu* createMenu(DtDe&, QWidget* parent);
};
class DT_DLL_EXAMPLETOOLBAR DtExampleToolbarMenuItem : public DtMenuItem
{
public:
DtExampleToolbarMenuItem(makVrv::DtDe& de);
virtual ~DtExampleToolbarMenuItem();
virtual QAction* createAction( DtDe&, QWidget* parent );
virtual void on_triggered();
};
class DT_DLL_EXAMPLETOOLBAR DtToolbarExampleCombo : public DtWidgetBuilder
{
public:
DtToolbarExampleCombo();
virtual ~DtToolbarExampleCombo();
virtual QWidget* create( makVrv::DtDe& de, QWidget* parent, const Qt::WindowFlags& flags);
};
}
}

exampleToolbarMenu.cxx

/******************************************************************************
** Copyright (c) 2019 MAK Technologies, Inc.
** All rights reserved.
******************************************************************************/
#include <vrvCore/DtDe.h>
#include <QtWidgets/QToolBar>
#include <QtWidgets/QAction>
#include <QtWidgets/QMessageBox>
#include <QtWidgets/QMenu>
#include <QtWidgets/QComboBox>
namespace makVrv
{
namespace vrvExampleToolbarPlugin
{
: DtToolbar(de, "DtExampleToolbar")
{
}
DtExampleToolbar::~DtExampleToolbar()
{
}
QToolBar* DtExampleToolbar::createToolbar(DtDe&, QWidget* parent)
{
QToolBar* bar = new QToolBar(parent);
bar->setWindowTitle(QObject::tr("Example Toolbar"));
bar->setObjectName(QObject::tr("Example Toolbar"));
return bar;
}
DtExampleToolbarMenu::DtExampleToolbarMenu(DtDe& de)
: DtMenu(de, std::string("DtExampleToolbarMenu"))
{
}
DtExampleToolbarMenu::~DtExampleToolbarMenu()
{
}
QMenu* DtExampleToolbarMenu::createMenu( DtDe&, QWidget* parent )
{
QMenu* menu = new QMenu(QMenu::tr("&Toolbars Example"),parent);
return menu;
}
DtExampleSceneToolbarMenu::DtExampleSceneToolbarMenu(DtDe& de)
: DtMenu(de, std::string("DtExampleSceneToolbarMenu"))
{
}
DtExampleSceneToolbarMenu::~DtExampleSceneToolbarMenu()
{
}
QMenu* DtExampleSceneToolbarMenu::createMenu( DtDe&, QWidget* parent )
{
QMenu* menu = new QMenu(QMenu::tr("&Scene Toolbars Example"),parent);
menu->setIcon(QIcon(QString::fromStdString(myDe.dePathConfiguration().dataPath() + std::string("/Icons/TerrainScene.svg"))));
return menu;
}
DtExampleToolbarMenuItem::DtExampleToolbarMenuItem(DtDe& de)
: DtMenuItem(std::string("DtExampleToolbarMenuItem"))
{
}
DtExampleToolbarMenuItem::~DtExampleToolbarMenuItem()
{
}
QAction* DtExampleToolbarMenuItem::createAction( DtDe&, QWidget* parent )
{
QAction* act = new QAction(parent);
act->setText(DtMenuItem::tr("&Example Toolbar Item..."));
return act;
}
void DtExampleToolbarMenuItem::on_triggered()
{
QAction* action = dynamic_cast<QAction*>(sender());
QWidget* parent = 0;
if(action)
{
parent = action->parentWidget();
}
QMessageBox::information(parent, "Toolbar Example", "This dialog was triggered from the toolbar example menu item");
}
DtToolbarExampleCombo::DtToolbarExampleCombo()
: DtWidgetBuilder()
{
}
DtToolbarExampleCombo::~DtToolbarExampleCombo()
{
}
QWidget* DtToolbarExampleCombo::create( makVrv::DtDe& de, QWidget* parent, const Qt::WindowFlags& flags)
{
QComboBox* combo = new QComboBox(parent);
combo->addItem("Item 1");
combo->addItem("Item 2");
combo->addItem("Item 3");
return combo;
}
}
}

[<< Examples] [Home] [Top of Page]



Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)