INIInterface.hh 6.94 KB
Newer Older
1
/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
2 3
*                                                                            *
*                              OpenFlipper                                   *
Martin Schultz's avatar
Martin Schultz committed
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
 *           Copyright (c) 2001-2015, RWTH-Aachen University                 *
 *           Department of Computer Graphics and Multimedia                  *
 *                          All rights reserved.                             *
 *                            www.openflipper.org                            *
 *                                                                           *
 *---------------------------------------------------------------------------*
 * This file is part of OpenFlipper.                                         *
 *---------------------------------------------------------------------------*
 *                                                                           *
 * Redistribution and use in source and binary forms, with or without        *
 * modification, are permitted provided that the following conditions        *
 * are met:                                                                  *
 *                                                                           *
 * 1. Redistributions of source code must retain the above copyright notice, *
 *    this list of conditions and the following disclaimer.                  *
 *                                                                           *
 * 2. Redistributions in binary form must reproduce the above copyright      *
 *    notice, this list of conditions and the following disclaimer in the    *
 *    documentation and/or other materials provided with the distribution.   *
 *                                                                           *
 * 3. Neither the name of the copyright holder nor the names of its          *
 *    contributors may be used to endorse or promote products derived from   *
 *    this software without specific prior written permission.               *
 *                                                                           *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       *
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A           *
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  *
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,       *
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR        *
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    *
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING      *
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS        *
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.              *
Jan Möbius's avatar
Jan Möbius committed
39
*                                                                            *
40 41
\*===========================================================================*/

42
#pragma once
Jan Möbius's avatar
 
Jan Möbius committed
43

44
#include <OpenFlipper/INIFile/INIFile.hh>
Jan Möbius's avatar
 
Jan Möbius committed
45 46 47

 /** \brief Interface class for Plugins which have to store information in ini files
  *
Jan Möbius's avatar
Jan Möbius committed
48 49 50 51
  * Using this interface you can store or load additional information to an ini file on a
  * per object basis or settings for your plugin. After basic information is written to the
  * ini file by the core ( or loaded by the core ) the corresponding functions in this
  * Interface will be executed.
Jan Möbius's avatar
 
Jan Möbius committed
52 53
  * You get the object id for the object which has to be used. For every object the functions
  * will get called and you have to save your data only for the given object!\n
Jan Möbius's avatar
Jan Möbius committed
54 55 56
  * The ini file in the functions is already open. You may not close it!
  * Additionally there are two slots which are called once per plugin when writing a settings
  * file. These slots should be used to store information which is used by your plugin.
57 58
  *
  * See \ref dataFlow for a detailed overview of OpenFlipper's data flow and interface function calls.
Jan Möbius's avatar
 
Jan Möbius committed
59 60
 */
class INIInterface {
Jan Möbius's avatar
 
Jan Möbius committed
61 62
   public :

Jan Möbius's avatar
 
Jan Möbius committed
63 64
      /// Destructor
      virtual ~INIInterface() {};
Jan Möbius's avatar
 
Jan Möbius committed
65

Jan Möbius's avatar
 
Jan Möbius committed
66
   private slots:
Jan Möbius's avatar
Jan Möbius committed
67 68 69 70 71 72 73 74 75 76 77 78

    //=======================================
    /** @name Per object settings
    * @{ */
    //=======================================
      /** \brief Load per object settings
       *
       *  Every time the core opens a settings file containing objects
       *  the core will call this slot for each object it finds.
       *  The object itself is loaded before the slot is called. Therefore
       *  the object is available from within your plugin.
       *
Jan Möbius's avatar
 
Jan Möbius committed
79 80 81
       *  @param _ini ini file
       *  @param _id Id of the object to load data for
       */
82
      virtual void loadIniFile( INIFile& _ini ,int _id ) {};
Jan Möbius's avatar
 
Jan Möbius committed
83

Jan Möbius's avatar
Jan Möbius committed
84 85 86 87 88 89
      /** \brief Save per object settings
       *
       * Every time a settings file is created this slot is called
       * once per object. Here you can write additional information
       * handled by your plugin which is attached to the object.
       *
Jan Möbius's avatar
 
Jan Möbius committed
90
       * @param _ini ini file
Jan Möbius's avatar
Jan Möbius committed
91
       * @param _id Identifier of the object to save
Jan Möbius's avatar
 
Jan Möbius committed
92
       */
93
      virtual void saveIniFile( INIFile& _ini ,int _id) {};
Jan Möbius's avatar
 
Jan Möbius committed
94

Jan Möbius's avatar
Jan Möbius committed
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
    /** @} */


    //=======================================
    /** @name Plugin Options and Settings
    * @{ */
    //=======================================

    private slots:

      /** \brief Load per Plugin settings
       *
       *  When the core loads an ini file and it contains settings for
       *  Plugin or the core itself this slot will be
       *  called once per Plugin.
       *  This Slot will be called after loading the core settings and
       *  before objects are loaded
       *
Jan Möbius's avatar
 
Jan Möbius committed
113 114
       * @param _ini  ini file
       */
115
      virtual void loadIniFileOptions( INIFile& _ini ) {};
Jan Möbius's avatar
 
Jan Möbius committed
116

Jan Möbius's avatar
Jan Möbius committed
117 118 119 120 121 122 123 124 125
      /** \brief Load per Plugin settings after objects are loaded
       *
       *  When the core loads an ini file and it contains settings for
       *  Plugin or the core itself this slot will be
       *  called once per Plugin. In contrast to loadIniFileOptions
       *  this slot will be called after all objects are loaded
       *
       * @param _ini  ini file
       */
126
      virtual void loadIniFileOptionsLast( INIFile& _ini ) {};
Jan Möbius's avatar
Jan Möbius committed
127 128

      /** \brief Save Plugin Options
129
       *  When the core is about to save an ini file this slot will be
Jan Möbius's avatar
Jan Möbius committed
130 131 132 133
       *  called once per Plugin.
       *  This Slot will be called after saving the core settings and
       *  before objects are saved to the file
       *
Jan Möbius's avatar
 
Jan Möbius committed
134 135
       * @param _ini ini file
       */
136
      virtual void saveIniFileOptions( INIFile& _ini ) {};
Jan Möbius's avatar
 
Jan Möbius committed
137

138 139 140 141 142 143 144
      /** \brief Save per Plugin settings when application is about to quit
       *
       * Before the Core is closed, this slot will be called per plugin to
       * save per plugin settings.
       *
       * @param _ini ini file
       */
145
      virtual void saveOnExit( INIFile& _ini ) {};
146 147


Jan Möbius's avatar
Jan Möbius committed
148 149 150
   /** @} */


Jan Möbius's avatar
 
Jan Möbius committed
151 152 153
};

Q_DECLARE_INTERFACE(INIInterface,"OpenFlipper.INIInterface/1.2")
Jan Möbius's avatar
 
Jan Möbius committed
154