VR-Forces 4.0.4 Class Documentation
include/vrvUtil/DtBaseSettingsManager.h
Go to the documentation of this file.
00001 /*****************************************************************************
00002  * Copyright (c) 2012 MAK Technologies, Inc.
00003  * All rights reserved.
00004  *****************************************************************************/
00005 
00009 
00010 #pragma once
00011 
00012 #include <vrvUtil/vrvUtil.h>
00013 
00014 #include <vrvCore/DtSettingsBackup.h>
00015 #include <vrvCore/DtReadSettingsLock.h>
00016 #include <vrvCore/DtWriteSettingsLock.h>
00017 #include <vrvCore/DtRecordSettingsBackup.h>
00018 
00019 #include <vrvUtil/DtSignalConnectionManager.h>
00020 #include <vrvUtil/DtVirtualBaseClass.h>
00021 
00022 namespace makVrv
00023 {
00024 
00033    template <typename RecordType>
00034    class DtCommonBaseSettingsManager : public DtVirtualBaseClass
00035    {
00036    public:
00037 
00042       DtCommonBaseSettingsManager( DtDe& de, const std::string& name,
00043             const std::string& displayName, const std::string& ext )
00044          : myName( name )
00045          , myExtension( ext )
00046          , myDisplayName( displayName )
00047          , myUseDefaultSettingsRecordFlag( false )
00048          , myAutoSaveFlag( true )
00049          , mySettingsBackup( 0 )
00050          , myDe( de )
00051       {
00052          // Create the settings object
00053          DtDeSettingsManager::instance( myDe ).createSettings( name, ext );
00054       }
00055 
00057       virtual ~DtCommonBaseSettingsManager()
00058       {
00059       }
00060 
00064       virtual void autoSaveIfNecessary()
00065       {
00066          if ( autoSave() )
00067          {
00068             saveDefaultSettings();
00069          }
00070       }
00071 
00074       virtual void setAutoSave( bool doit )
00075       {
00076          myAutoSaveFlag = doit;
00077       }
00078 
00081       virtual bool autoSave() const
00082       {
00083          return myAutoSaveFlag;
00084       }
00085 
00090       virtual void setUseDefaultSettingsRecord( bool useit )
00091       {
00092          myUseDefaultSettingsRecordFlag = useit;
00093       }
00094 
00099       virtual bool useDefaultSettingsRecord() const
00100       {
00101          return myUseDefaultSettingsRecordFlag;
00102       }
00103 
00106       virtual DtDeSettings* settings()
00107       {
00108          DtDeSettings* deSettings =
00109             DtDeSettingsManager::instance(myDe).findSettings( myName );
00110          if ( ! deSettings )
00111          {
00112             DtTHROW_NEW( DtCorruptedState, "DtDeSettings have gone missing!" );
00113          }
00114          return deSettings;
00115       }
00116 
00119       virtual const DtDeSettings* settings() const
00120       {
00121          DtDeSettings* deSettings =
00122             DtDeSettingsManager::instance(myDe).findSettings( myName );
00123          if ( ! deSettings )
00124          {
00125             DtTHROW_NEW( DtCorruptedState, "DtDeSettings have gone missing!" );
00126          }
00127          return deSettings;
00128       }
00129 
00131       virtual DtSettingsBackup* settingsBackup()
00132       {
00133          return mySettingsBackup;
00134       }
00135 
00137       virtual const DtSettingsBackup* settingsBackup() const
00138       {
00139          return mySettingsBackup;
00140       }
00141 
00144 
00149       virtual void loadDefaults()
00150       {
00151          // Disable auto saving and store state.
00152          bool autoSaved = autoSave();
00153          setAutoSave( false );
00154 
00155          // Either set from the default record (if present) or load defaults.
00156          RecordType record;
00157          if ( myUseDefaultSettingsRecordFlag &&
00158             myDe.deInitializer().findDefaultSettingsRecord(myName,record) )
00159          {
00160             setFromRecord( record );
00161          }
00162          else
00163          {
00164             loadDefaultSettings( false );
00165          }
00166 
00167          // Restore the auto save state.
00168          setAutoSave( autoSaved );
00169 
00170          // Initialize the settings backup.
00171          initializeBackup();
00172       }
00173 
00175       virtual void initializeBackup() = 0;
00176 
00178       virtual void saveDefaultSettings()
00179       {
00180          RecordType record;
00181          getRecord( record );
00182          settings()->writeDefaultRecord( record );
00183       }
00184 
00188       virtual void loadDefaultSettings( bool loadOnlyFactorySettings )
00189       {
00190          DtDeSettings* deSettings = settings();
00191          RecordType record;
00192          if ( loadOnlyFactorySettings )
00193          {
00194             if ( deSettings->readFactoryDefaultRecord(record) )
00195             {
00196                setFromRecord( record );
00197             }
00198          }
00199          else
00200          {
00201             if ( deSettings->readDefaultRecord(record) )
00202             {
00203                setFromRecord( record );
00204             }
00205          }
00206       }
00207 
00209       virtual void importSettings( const std::string& filePath )
00210       {
00211          RecordType record;
00212          if ( settings()->readRecordFrom(record,filePath) )
00213          {
00214             setFromRecord( record );
00215             autoSaveIfNecessary();
00216          }
00217       }
00218 
00220       virtual void exportSettings( const std::string& filePath ) const
00221       {
00222          RecordType record;
00223          getRecord( record );
00224          settings()->writeRecordTo( record, filePath );
00225       }
00226 
00228       virtual void setFromRecord( const RecordType& record ) = 0;
00229 
00231       virtual void getRecord( RecordType& record ) const = 0;
00232 
00234 
00235    protected:
00236 
00237       DtSignalConnectionManager myConnections;
00238 
00239       std::string myName;
00240       std::string myExtension;
00241       std::string myDisplayName;
00242 
00243       bool myUseDefaultSettingsRecordFlag;
00244       bool myAutoSaveFlag;
00245 
00246       DtSettingsBackup* mySettingsBackup;
00247 
00248       DtDe& myDe;
00249 
00250    };
00251 
00252 
00260    template <typename RecordType>
00261    class DtBaseSettingsManager : public DtCommonBaseSettingsManager<RecordType>
00262    {
00263    protected:
00264 
00266       typedef DtRecordSettingsBackup<DtBaseSettingsManager<RecordType>,RecordType> RecordBackupType;
00267 
00268    public:
00269 
00272       DtBaseSettingsManager( DtDe& de, const std::string& name,
00273             const std::string& displayName, const std::string& ext )
00274          : DtCommonBaseSettingsManager<RecordType>( de, name, displayName, ext )
00275       {
00276       }
00277 
00279       virtual ~DtBaseSettingsManager()
00280       {
00281          DtDELETE( this->mySettingsBackup );
00282       }
00283 
00286 
00288       virtual void initializeBackup()
00289       {
00290          DtDELETE( this->mySettingsBackup );
00291          this->mySettingsBackup = new RecordBackupType( this->myDe, this, this->myName, this->myDisplayName );
00292          this->mySettingsBackup->setFactoryFile( this->settings()->factoryFilePath() );
00293          DtSettingsBackupManager::instance(this->myDe).registerSettingsBackup( this->mySettingsBackup );
00294          this->mySettingsBackup->backup();
00295       }
00296 
00298       virtual void setFromRecord( const RecordType& record ) = 0;
00299 
00301       virtual void getRecord( RecordType& record ) const = 0;
00302 
00304 
00305    };
00306 
00307 
00321    template <typename RecordType,typename SettingsType>
00322    class DtBaseSharedSettingsManager : public DtCommonBaseSettingsManager<RecordType>
00323    {
00324    protected:
00325 
00327       typedef DtSharedRecordSettingsBackup<SettingsType,RecordType> SharedRecordBackupType;
00328 
00329    public:
00330 
00333       DtBaseSharedSettingsManager( DtDe& de, const std::string& name,
00334             const std::string& displayName, const std::string& ext )
00335          : DtCommonBaseSettingsManager<RecordType>( de, name, displayName, ext )
00336       {
00337       }
00338 
00340       virtual ~DtBaseSharedSettingsManager()
00341       {
00342          // Don't delete the settings backup (it's owned by the settings object).
00343       }
00344 
00347 
00349       virtual void initializeBackup()
00350       {
00351          DtWriteSettingsLock<SettingsType>
00352             writeSettings( DtSharedSettingsManager::instance(this->myDe) );
00353          this->mySettingsBackup = writeSettings->settingsBackup();
00354          this->mySettingsBackup->setFactoryFile( this->settings()->factoryFilePath() );
00355          DtSettingsBackupManager::instance(this->myDe).registerSettingsBackup( this->mySettingsBackup );
00356          writeSettings->backup();
00357       }
00358 
00360       virtual void setFromRecord( const RecordType& record )
00361       {
00362          DtWriteSettingsLock<SettingsType>
00363             settings( DtSharedSettingsManager::instance(this->myDe) );
00364          settings->setFromRecord( record );
00365       }
00366 
00368       virtual void getRecord( RecordType& record ) const
00369       {
00370          DtReadSettingsLock<SettingsType>
00371             settings( DtSharedSettingsManager::instance(this->myDe) );
00372          settings->getRecord( record );
00373       }
00374 
00376 
00377    };
00378 
00379 }

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)