![]() |
VR-Vantage 1.4.1 API Class Documentation
|
This example shows how to add a dialog box and dialog box page to the GUI, and how to manage persistent settings.
It consists of a dialog page (DtExamplePage), which is registered with the application by the plugin's initialization function. The dialog page has a persistent toolbar and a widget (DtExampleWidget). The toolbar handles saving, loading, exporting, and importing the settings it controls, and the widget controls an example setting. The DtExampleWidget is implemented according to the humble dialog pattern, so its communication with the non-Qt parts of the application are controlled by a logic (DtExampleLogic) through an interface (DtExampleInterface).
The example settings are managed by the DtExampleSettingsManager, which is a rooted singleton that uses the DtExampleSettingsRecord to serialize the setting.
The DtExampleSettingsManager demonstrates how persistent settings are managed in VR-Vantage, and how to create your own. At creation time, it registers itself with the DtDeSettingsManager, and loads the example setting from disk:
DtExampleSettingsManager::DtExampleSettingsManager( DtDe& de )
: myDe( de )
{
// Create the settings
DtDeSettingsManager::instance(myDe).createSettings( "Example", "eorx" );
// Read the settings from disk.
const DtRecordHolder<DtExampleSettingsRecord>* record =
dynamic_cast<const DtRecordHolder<DtExampleSettingsRecord>* >(
myDe.deInitializer().findDefaultSettingsRecord("Example") );
mySettingsBackup =
new DtRecordSettingsBackup<DtExampleSettingsManager,DtExampleSettingsRecord>(
myDe, this, "Example", "Example Settings" );
if ( record )
{
setFromRecord( record->record() );
}
else
{
loadDefaults( false );
}
}
The example setting is called dummyVal. It can be set or checked through the settings manager, and is automatically saved as the application default when it's changed.
void DtExampleSettingsManager::setDummyVal( int val ) { myDummyVal = val; signal_dummyValSet( val ); saveAsDefaults(); } int DtExampleSettingsManager::dummyVal() const { return myDummyVal; }
The DtDeSettings class handles the details of saving and loading settings files. Each DtDeSettings object is registered with the DtDeSettingsManager, for access from any part of the application. To save out modified settings as defaults, the example settings manager creates a record and passes it to the appropriate DtDeSettings object:
void DtExampleSettingsManager::saveAsDefaults() { DtDeSettings* settings = DtDeSettingsManager::instance(myDe).findSettings( "Example" ); if ( settings ) { DtExampleSettingsRecord record; getRecord( record ); settings->writeDefaultRecord( record ); } }
Loading default settings is similar, but has a few more steps. In addition to application defaults, it's also possible to restore factory default settings. The settings at application start time are also backed up, for easy restoration.
void DtExampleSettingsManager::loadDefaults( bool loadOnlyFactorySettings ) { DtDeSettings* settings = DtDeSettingsManager::instance(myDe).findSettings( "Example" ); if ( settings ) { DtExampleSettingsRecord record; if ( loadOnlyFactorySettings ) { if ( settings->readFactoryDefaultRecord(record) ) { setFromRecord( record ); } } else { if ( settings->readDefaultRecord(record) ) { setFromRecord( record ); } } if ( mySettingsBackup ) { mySettingsBackup->backup(); } } }
The example settings manager is a rooted singleton, like most other manager classes in VR-Vantage. This means that there is one instance per display engine, so the class can act as a singleton but still allow multiple display engines in a single application. Instances are looked up in the DtDe, and lazily created if one is not found:
DtExampleSettingsManager& DtExampleSettingsManager::instance( DtDe& de )
{
DtExampleSettingsManager* manager =
dynamic_cast<DtExampleSettingsManager*>(
de.findInstance("DtExampleSettingsManager") );
if ( ! manager )
{
manager = new DtExampleSettingsManager( de );
de.registerInstance( "DtExampleSettingsManager", manager );
}
return *manager;
}
New dialogs are added to the GUI framework by writing a creator class for the dialog page and registering an instance of it with the DtQtPageAssembler. Dialog page creators should be defined using the DtPageCreatorTemplate template class:
typedef DtPageCreatorTemplate<DtExamplePage> DtExamplePageCreator;
// Add the Example Page to the Example Dialog DtQtPageAssembler::instance(de).registerPageCreator( new DtExamplePageCreator(de) );
The DtExamplePage is a GUI for managing the example setting. It inherits from DtPage, the base class for all dialog pages in VR-Vantage. It has a toolbar for saving and restoring settings, and a widget for changing the setting. The DtExamplePage connects these parts in its setupGui() function:
void DtExamplePage::setupGui() { QVBoxLayout* mainLayout = new QVBoxLayout( this ); mainLayout->setMargin( 0 ); // Create the persistent toolbar. myToolbar = new DtPersistenceToolbarWidget( myDe, this ); myToolbar->setPersistentStateName( "Example Settings" ); mainLayout->addWidget( myToolbar ); // Create the example widget. myWidget = new DtExampleWidget( this ); mainLayout->addWidget( myWidget ); mainLayout->addStretch( 1 ); }
In accordance with the humble dialog pattern, the widget provides a GUI only, and the logic behind it is handled by a separate logic class. The logic is only active when the dialog page is, so the page's activate and deactivate methods are responsible for creating and destroying the logic:
void DtExamplePage::activate() { if ( ! myLogic ) { myLogic = new DtExampleLogic( myDe, *myWidget, *myToolbar ); } } void DtExamplePage::deactivate() { delete myLogic; myLogic = 0; }
The DtExamplePage is added to its parent dialog (also known as a Page Collection) in the example plugin's initialization method. The dialog (Page Collection) is created in the DtVrvApplication's page configuration, then the page is added to it. The MasterMode specification in the following function call means that the dialog page will only be present when the application is run in master mode:
igApp->masterModePageConfiguration().addPageCollection(
"DtExampleDialog",DtUnicode::fromAscii("Example Dialog"),
DtPageConfiguration::Dialog,true,"DtExamplePage");
igApp->masterModePageConfiguration().addPagePath(
makVrv::DtPagePath::collection("DtExampleDialog").page("DtExamplePage"));
The example widget communicates with its logic through an interface, DtExampleInterface:
class DT_DLL_EXAMPLEDIALOGPAGE DtExampleInterface { public: virtual void setInt( int val ) = 0; boost::signal<void ( int )> signal_intChanged; };
The DtExampleLogic drives both the persistent toolbar and the settings GUI. Its responsibilities are sending up-to-date settings to the DtExampleWidget, and acting on signals from the GUIs. If there were a way of changing the example setting outside of the dialog page, for example with a toolbar button, it would also be necessary for the logic to track those changes and keep the DtExampleWidget up to date. When the setting is changed in the GUI, the widget emits a boost signal:
connect( myIntSpinBox, SIGNAL(valueChanged(int)), this, SLOT(slot_onIntChanged()) ); void DtExampleWidget::slot_onIntChanged() { signal_intChanged( myIntSpinBox->value() ); }
which the DtExampleLogic connects to in its constructor
manageConnection( myInterface.signal_intChanged.connect( boost::bind(
&DtExampleLogic::slot_onIntChanged, this, _1 ) ) );
and responds by changing the setting in the DtExampleSettingsManager.
void DtExampleLogic::slot_onIntChanged( int val ) { DtExampleSettingsManager::instance(myDe).setDummyVal( val ); }
When the DtExampleLogic is created, it sends the current settings to the GUI through the DtExampleInterface
void DtExampleLogic::sendSettingsToGui() { int dummyVal = DtExampleSettingsManager::instance(myDe).dummyVal(); myInterface.setInt( dummyVal ); }
and it also sends settings to the GUI when they are loaded with the persistent toolbar
void DtExampleLogic::on_importFilePathChosen( const std::string& filePath ) { DtExampleSettingsManager::instance(myDe).importSettings( filePath ); sendSettingsToGui(); } void DtExampleLogic::settingsRestored( const DtSettingsBackup* b ) { if ( b->backupClassType() == "Example" ) { sendSettingsToGui(); } }
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.
This example is a plug-in. You can run it by running ./bin/exampleDialogPagepage_stealth.bat (on Windows) or ./bin/exampleDialogPagepage_stealth.sh (on Linux). For more information about running examples, please see Running Applications and Examples.
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #pragma once // Get proper local export symbol #include "exampleDialogPagePlugin.h" // Setup proper plugin export symbol #define DT_DE_PLUGIN_EXPORT_MACRO DT_DLL_EXAMPLEDIALOGPAGE // Export plugging function bool initDeModule(DtDe* de); #include <vrvCore/exportPlugin.h> namespace makVrv { class DtDe; namespace vrvExampleDialogPagePlugin { DT_DLL_EXAMPLEDIALOGPAGE void init( DtDe& anIG ); } }
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #pragma once #ifdef _WIN32 # ifdef EXAMPLEDIALOGPAGE_EXPORTS # define DT_DLL_EXAMPLEDIALOGPAGE __declspec ( dllexport ) # else # define DT_DLL_EXAMPLEDIALOGPAGE __declspec ( dllimport ) # endif #else # define DT_DLL_EXAMPLEDIALOGPAGE #endif #include <vrvUtil/signalslib.h>
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #include "exampleDialogPagePlugin.h" #include "exampleDialogPagePluginInit.h" #include "DtExamplePage.h" #include "DtExampleDialogMenu.h" #include <vrvCore/DtDe.h> #include <vrvCoreQt/DtQtPageAssembler.h> #include <vrvCore/DtVrvApplication.h> #include <vrvCore/DtMenuPath.h> #include <vrvCoreQt/DtQtMenuAssembler.h> bool initDeModule( makVrv::DtDe* de ) { makVrv::vrvExampleDialogPagePlugin::init(*de); return true; } namespace makVrv { namespace vrvExampleDialogPagePlugin { void init( DtDe& de ) { DT_DE_INIT_ONCE( de ); try { // First make sure that the vrvCoreQt module is init'ed. vrvCoreQt::init( de ); // Add the Example Page to the Example Dialog DtQtPageAssembler::instance(de).registerPageCreator( new DtExamplePageCreator(de) ); // Register the DtExampleDialogMenu and DtExampleSettingsMenuItem DtQtMenuAssembler::instance(de).registerMenu( new DtExampleDialogMenu(de) ); DtQtMenuAssembler::instance(de).registerMenu( new DtExampleSettingsMenuItem(de) ); //Add example menu and example menu settings item. makVrv::DtVrvApplication* igApp = makVrv::DtVrvApplication::findFromDe( de ); if ( igApp ) { igApp->masterModeMenuConfiguration().addMenuPath( makVrv::DtMenuPath::mainMenu("DtExampleDialogMenu")); igApp->masterModeMenuConfiguration().addMenuPath( makVrv::DtMenuPath::mainMenu("DtExampleDialogMenu").item("DtExampleSettingsMenuItem")); igApp->masterModePageConfiguration().addPageCollection( "DtExampleDialog",DtUnicode::fromAscii("Example Dialog"), DtPageConfiguration::Dialog,true,"DtExamplePage"); igApp->masterModePageConfiguration().addPagePath( makVrv::DtPagePath::collection("DtExampleDialog").page("DtExamplePage")); } } DtCATCH_AND_PROPAGATE( DtCorruptedState ) } } }
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #pragma once #include "exampleDialogPagePlugin.h" namespace makVrv { class DT_DLL_EXAMPLEDIALOGPAGE DtExampleInterface { public: virtual void setInt( int val ) = 0; boost::signal<void ( int )> signal_intChanged; }; }
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #include "DtExampleLogic.h" #include "DtExampleInterface.h" #include "DtExampleSettingsManager.h" #include <vrvCoreQt/DtPersistenceControlsInterface.h> #include <vrvCore/DtSharedSettingsBackupManagerSignaler.h> #include <vrvCore/DtRecordSettingsBackup.h> #include <vrvCore/DtDeSettingsManager.h> #include <vrvCore/DtDeSettings.h> #include <vrvCore/DtDe.h> #include <boost/bind.hpp> namespace makVrv { DtExampleLogic::DtExampleLogic( DtDe& de, DtExampleInterface& iFace, DtPersistenceControlsInterface& pIFace ) : DtSignalConnectionManager() , myDe( de ) , myInterface( iFace ) , myPersistenceInterface( pIFace ) { sendSettingsToGui(); manageConnection( myInterface.signal_intChanged.connect( boost::bind( &DtExampleLogic::slot_onIntChanged, this, _1 ) ) ); manageConnection( myPersistenceInterface.signal_export.connect( boost::bind( &DtExampleLogic::on_export, this ) ) ); manageConnection( myPersistenceInterface.signal_import.connect( boost::bind( &DtExampleLogic::on_import, this ) ) ); manageConnection( myPersistenceInterface.signal_importFilenameChosen.connect( boost::bind( &DtExampleLogic::on_importFilePathChosen, this, _1 ) ) ); manageConnection( myPersistenceInterface.signal_exportFilenameChosen.connect( boost::bind( &DtExampleLogic::on_exportFilePathChosen, this, _1 ) ) ); DtSharedSettingsBackupManagerSignaler& bmSignaler = DtSharedSettingsBackupManagerSignaler::instance( DtSharedSettingsManager::instance(myDe) ); manageConnection( bmSignaler.signal_restored.connect( boost::bind(&DtExampleLogic::settingsRestored, this, _1 ) ) ); myPersistenceInterface.setBackup( DtExampleSettingsManager::instance(myDe).settingsBackup() ); } DtExampleLogic::~DtExampleLogic() { } void DtExampleLogic::sendSettingsToGui() { int dummyVal = DtExampleSettingsManager::instance(myDe).dummyVal(); myInterface.setInt( dummyVal ); } void DtExampleLogic::slot_onIntChanged( int val ) { DtExampleSettingsManager::instance(myDe).setDummyVal( val ); } void DtExampleLogic::on_import() { DtDeSettings* settings = DtDeSettingsManager::instance(myDe).findSettings( "Example" ); if ( settings ) { myPersistenceInterface.queryImportFilePath( myDe, "Example Settings", myDe.dePathConfiguration().settingsPath(), settings->extension() ); } } void DtExampleLogic::on_export() { DtDeSettings* settings = DtDeSettingsManager::instance(myDe).findSettings( "Example" ); if ( settings ) { myPersistenceInterface.queryExportFilePath( myDe, "Example Settings", myDe.dePathConfiguration().settingsPath(), settings->extension() ); } } void DtExampleLogic::on_importFilePathChosen( const std::string& filePath ) { DtExampleSettingsManager::instance(myDe).importSettings( filePath ); sendSettingsToGui(); } void DtExampleLogic::on_exportFilePathChosen( const std::string& filePath ) { DtExampleSettingsManager::instance(myDe).exportSettings( filePath ); } void DtExampleLogic::settingsRestored( const DtSettingsBackup* b ) { if ( b->backupClassType() == "Example" ) { sendSettingsToGui(); } } }
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #pragma once #include "exampleDialogPagePlugin.h" #include <vrvUtil/DtSignalConnectionManager.h> namespace makVrv { class DtDe; class DtSettingsBackup; class DtExampleInterface; class DtPersistenceControlsInterface; class DT_DLL_EXAMPLEDIALOGPAGE DtExampleLogic : private DtSignalConnectionManager { public: DtExampleLogic( DtDe& de, DtExampleInterface& iFace, DtPersistenceControlsInterface& pIFace ); virtual ~DtExampleLogic(); virtual void sendSettingsToGui(); void slot_onIntChanged( int val ); virtual void on_import(); virtual void on_export(); virtual void on_importFilePathChosen( const std::string& filePath ); virtual void on_exportFilePathChosen( const std::string& filePath ); virtual void settingsRestored( const DtSettingsBackup* b ); protected: DtDe& myDe; DtExampleInterface& myInterface; DtPersistenceControlsInterface& myPersistenceInterface; }; }
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #include "DtExampleDialogMenu.h" #include <vrvCore/DtPageCollectionManager.h> #include <QtGui/QMenu> namespace makVrv { DtExampleDialogMenu::DtExampleDialogMenu( DtDe& de ) : DtMenu( de, std::string("DtExampleDialogMenu") ) { } DtExampleDialogMenu::~DtExampleDialogMenu() { } QMenu* DtExampleDialogMenu::createMenu( DtDe&, QWidget* parent ) { QMenu* menu = new QMenu( QMenu::tr("Examples"), parent ); return menu; } DtExampleSettingsMenuItem::DtExampleSettingsMenuItem( DtDe& de ) : DtMenuItem( std::string("DtExampleSettingsMenuItem") ) , myDe( de ) { } DtExampleSettingsMenuItem::~DtExampleSettingsMenuItem() { } QAction* DtExampleSettingsMenuItem::createAction( DtDe&, QWidget* parent ) { QAction* action = new QAction( parent ); action->setText( DtMenuItem::tr("Example Settings...") ); action->setIcon( QIcon(":/icons/exampleIcon.png") ); return action; } void DtExampleSettingsMenuItem::on_triggered() { DtPageCollectionManager::instance(myDe).showCollection( "DtExampleDialog" ); } }
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #pragma once #include "exampleDialogPagePlugin.h" #include <vrvCoreQt/DtMenuItem.h> #include <vrvCoreQt/DtMenu.h> namespace makVrv { class DT_DLL_EXAMPLEDIALOGPAGE DtExampleDialogMenu : public DtMenu { public: DtExampleDialogMenu( DtDe& de ); virtual ~DtExampleDialogMenu(); virtual QMenu* createMenu( DtDe&, QWidget* parent ); }; class DT_DLL_EXAMPLEDIALOGPAGE DtExampleSettingsMenuItem : public DtMenuItem { public: DtExampleSettingsMenuItem( DtDe& de ); virtual ~DtExampleSettingsMenuItem(); virtual QAction* createAction( DtDe&, QWidget* parent ); protected: virtual void on_triggered(); protected: DtDe& myDe; }; }
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #include "DtExamplePage.h" #include "DtExampleWidget.h" #include "DtExampleLogic.h" #include <vrvCoreQt/DtPersistenceToolbarWidget.h> #include <vrvCore/DtDe.h> #include <QtGui/QVBoxLayout> namespace makVrv { DtExamplePage::DtExamplePage( DtDe& de, QWidget* parent, Qt::WindowFlags f ) : DtPage( de, parent, f ) , myDe( de ) , myWidget( 0 ) , myLogic( 0 ) { setupGui(); } DtExamplePage::~DtExamplePage() { delete myLogic; myLogic = 0; } void DtExamplePage::setupGui() { QVBoxLayout* mainLayout = new QVBoxLayout( this ); mainLayout->setMargin( 0 ); // Create the persistent toolbar. myToolbar = new DtPersistenceToolbarWidget( myDe, this ); myToolbar->setPersistentStateName( "Example Settings" ); mainLayout->addWidget( myToolbar ); // Create the example widget. myWidget = new DtExampleWidget( this ); mainLayout->addWidget( myWidget ); mainLayout->addStretch( 1 ); } void DtExamplePage::activate() { if ( ! myLogic ) { myLogic = new DtExampleLogic( myDe, *myWidget, *myToolbar ); } } void DtExamplePage::deactivate() { delete myLogic; myLogic = 0; } QIcon DtExamplePage::icon() { return QIcon (":/icons/exampleIcon.png"); } QString DtExamplePage::title() { return DtExamplePage::tr("Example Page"); } const std::string& DtExamplePage::pageClassName() const { return thePageClassName(); } const std::string& DtExamplePage::thePageClassName() { static std::string theClassName("DtExamplePage"); return theClassName; } }
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #pragma once #include "exampleDialogPagePlugin.h" #include <vrvCoreQt/DtPage.h> namespace makVrv { class DtDe; class DtExampleWidget; class DtExampleLogic; class DtPersistenceToolbarWidget; class DT_DLL_EXAMPLEDIALOGPAGE DtExamplePage : public DtPage { Q_OBJECT; public: DtExamplePage( DtDe& de, QWidget* parent = 0, Qt::WindowFlags f = Qt::Widget ); virtual ~DtExamplePage(); virtual QIcon icon(); virtual QString title(); virtual const std::string& pageClassName() const; static const std::string& thePageClassName(); protected: void setupGui(); virtual void activate(); virtual void deactivate(); protected: DtDe& myDe; DtExampleWidget* myWidget; DtPersistenceToolbarWidget* myToolbar; DtExampleLogic* myLogic; }; typedef DtPageCreatorTemplate<DtExamplePage> DtExamplePageCreator; }
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #include "DtExampleSettingsManager.h" #include "DtExampleSettingsRecord.h" #include <vrvCore/DtDe.h> #include <vrvCore/DtDeSettings.h> #include <vrvCore/DtDeSettingsManager.h> #include <vrvCore/DtRecordSettingsBackup.h> #include <vrvUtil/DtRecordHolder.h> namespace makVrv { DtExampleSettingsManager& DtExampleSettingsManager::instance( DtDe& de ) { DtExampleSettingsManager* manager = dynamic_cast<DtExampleSettingsManager*>( de.findInstance("DtExampleSettingsManager") ); if ( ! manager ) { manager = new DtExampleSettingsManager( de ); de.registerInstance( "DtExampleSettingsManager", manager ); } return *manager; } DtExampleSettingsManager::DtExampleSettingsManager( DtDe& de ) : myDe( de ) { // Create the settings DtDeSettingsManager::instance(myDe).createSettings( "Example", "eorx" ); // Read the settings from disk. const DtRecordHolder<DtExampleSettingsRecord>* record = dynamic_cast<const DtRecordHolder<DtExampleSettingsRecord>* >( myDe.deInitializer().findDefaultSettingsRecord("Example") ); mySettingsBackup = new DtRecordSettingsBackup<DtExampleSettingsManager,DtExampleSettingsRecord>( myDe, this, "Example", "Example Settings" ); if ( record ) { setFromRecord( record->record() ); } else { loadDefaults( false ); } } DtExampleSettingsManager::~DtExampleSettingsManager() { delete mySettingsBackup; } void DtExampleSettingsManager::setDummyVal( int val ) { myDummyVal = val; signal_dummyValSet( val ); saveAsDefaults(); } int DtExampleSettingsManager::dummyVal() const { return myDummyVal; } void DtExampleSettingsManager::loadDefaults( bool loadOnlyFactorySettings ) { DtDeSettings* settings = DtDeSettingsManager::instance(myDe).findSettings( "Example" ); if ( settings ) { DtExampleSettingsRecord record; if ( loadOnlyFactorySettings ) { if ( settings->readFactoryDefaultRecord(record) ) { setFromRecord( record ); } } else { if ( settings->readDefaultRecord(record) ) { setFromRecord( record ); } } if ( mySettingsBackup ) { mySettingsBackup->backup(); } } } void DtExampleSettingsManager::saveAsDefaults() { DtDeSettings* settings = DtDeSettingsManager::instance(myDe).findSettings( "Example" ); if ( settings ) { DtExampleSettingsRecord record; getRecord( record ); settings->writeDefaultRecord( record ); } } void DtExampleSettingsManager::exportSettings( const std::string& fileName ) { DtDeSettings* settings = DtDeSettingsManager::instance(myDe).findSettings( "Example" ); if ( settings ) { DtExampleSettingsRecord record; getRecord( record ); settings->writeRecordTo( record, fileName ); } } void DtExampleSettingsManager::importSettings( const std::string& fileName ) { DtDeSettings* settings = DtDeSettingsManager::instance(myDe).findSettings( "Example" ); if ( settings ) { DtExampleSettingsRecord record; settings->readRecordFrom( record, fileName ); setFromRecord( record ); } } void DtExampleSettingsManager::setFromRecord( const DtExampleSettingsRecord& rec ) { setDummyVal( rec.dummyVal() ); } void DtExampleSettingsManager::getRecord( DtExampleSettingsRecord& rec ) const { rec.setDummyVal( myDummyVal ); } }
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #pragma once #include "exampleDialogPagePlugin.h" #include <vrvUtil/DtVirtualBaseClass.h> #include <boost/signals.hpp> namespace makVrv { class DtDe; class DtExampleSettingsRecord; class DtRecordSettingsBackupInterface; class DT_DLL_EXAMPLEDIALOGPAGE DtExampleSettingsManager : public DtVirtualBaseClass { public: static DtExampleSettingsManager& instance( DtDe& de ); virtual ~DtExampleSettingsManager(); virtual void setDummyVal( int val ); virtual int dummyVal() const; boost::signal<void ( int )> signal_dummyValSet; virtual void setFromRecord( const DtExampleSettingsRecord& rec ); virtual void getRecord( DtExampleSettingsRecord& rec ) const; virtual void loadDefaults( bool loadOnlyFactorySettings = false ); virtual void saveAsDefaults(); virtual void exportSettings( const std::string& fileName ); virtual void importSettings( const std::string& fileName ); const DtRecordSettingsBackupInterface* settingsBackup() const { return mySettingsBackup; } DtRecordSettingsBackupInterface* settingsBackup() { return mySettingsBackup; } protected: DtExampleSettingsManager( DtDe& ); protected: DtDe& myDe; int myDummyVal; DtRecordSettingsBackupInterface* mySettingsBackup; }; }
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #include "DtExampleSettingsRecord.h" namespace makVrv { DtExampleSettingsRecord::DtExampleSettingsRecord() : myDummyVal( 77 ) { } DtExampleSettingsRecord::DtExampleSettingsRecord( const DtExampleSettingsRecord& orig) : myDummyVal( orig.myDummyVal ) { } DtExampleSettingsRecord& DtExampleSettingsRecord::operator=( const DtExampleSettingsRecord& orig ) { if ( this != &orig ) { myDummyVal = myDummyVal; } return *this; } DtExampleSettingsRecord::~DtExampleSettingsRecord() { } void DtExampleSettingsRecord::setDummyVal(int val) { myDummyVal = val; } int DtExampleSettingsRecord::dummyVal() const { return myDummyVal; } }
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #pragma once #include "exampleDialogPagePlugin.h" #include <makArchives/makArchives.h> #include <vector> namespace makVrv { class DT_DLL_EXAMPLEDIALOGPAGE DtExampleSettingsRecord { public: DtExampleSettingsRecord(); DtExampleSettingsRecord( const DtExampleSettingsRecord& orig ); DtExampleSettingsRecord& operator = ( const DtExampleSettingsRecord& orig ); virtual ~DtExampleSettingsRecord(); virtual void setDummyVal(int val); virtual int dummyVal() const; protected: friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & BOOST_SERIALIZATION_NVP(myDummyVal); } int myDummyVal; }; } BOOST_CLASS_VERSION( makVrv::DtExampleSettingsRecord, 0 )
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #include "DtExampleWidget.h" namespace makVrv { DtExampleWidget::DtExampleWidget( QWidget* parent, Qt::WindowFlags f ) : QWidget( parent, f ) , Ui::DtExampleWidgetUI() { setupUi( this ); connect( myIntSpinBox, SIGNAL(valueChanged(int)), this, SLOT(slot_onIntChanged()) ); } DtExampleWidget::~DtExampleWidget() { } void DtExampleWidget::slot_onIntChanged() { signal_intChanged( myIntSpinBox->value() ); } void DtExampleWidget::setInt( int val ) { bool restore = myIntSpinBox->blockSignals( true ); myIntSpinBox->setValue( val ); myIntSpinBox->blockSignals( restore ); } }
/***************************************************************************** * Copyright (c) 2011 MAK Technologies, Inc. * All rights reserved. *****************************************************************************/ #pragma once #include "exampleDialogPagePlugin.h" #include "DtExampleWidgetUI.hpp" #include "DtExampleInterface.h" #include <QtGui/QWidget> namespace makVrv { class DT_DLL_EXAMPLEDIALOGPAGE DtExampleWidget : public QWidget , public Ui::DtExampleWidgetUI , public DtExampleInterface { Q_OBJECT; public: DtExampleWidget( QWidget* parent = 0, Qt::WindowFlags f = Qt::Widget ); virtual ~DtExampleWidget(); virtual void setInt( int val ); public slots: void slot_onIntChanged(); protected: }; }