BaseInterface.hh 9.1 KB
Newer Older
Jan Möbius's avatar
 
Jan Möbius committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14
//=============================================================================
//
//                               OpenFlipper
//        Copyright (C) 2008 by Computer Graphics Group, RWTH Aachen
//                           www.openflipper.org
//
//-----------------------------------------------------------------------------
//
//                                License
//
//  OpenFlipper is free software: you can redistribute it and/or modify
//  it under the terms of the GNU Lesser General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
15
//
Jan Möbius's avatar
 
Jan Möbius committed
16 17 18 19
//  OpenFlipper is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU Lesser General Public License for more details.
20
//
Jan Möbius's avatar
 
Jan Möbius committed
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
//  You should have received a copy of the GNU Lesser General Public License
//  along with OpenFlipper.  If not, see <http://www.gnu.org/licenses/>.
//
//-----------------------------------------------------------------------------
//
//   $Revision$
//   $Author$
//   $Date$
//
//=============================================================================




//
// C++ Interface: BasePlugin
//
38
// Description:
Jan Möbius's avatar
 
Jan Möbius committed
39 40 41 42 43
//
//
// Author: Jan Moebius <jan_moebius@web.de>, (C) 2007
//

44 45
#ifndef BASEINTERFACE_HH
#define BASEINTERFACE_HH
Jan Möbius's avatar
 
Jan Möbius committed
46 47 48 49

 #include <QtGui>
 #include <QMenuBar>
 #include <OpenFlipper/common/Types.hh>
50

Jan Möbius's avatar
 
Jan Möbius committed
51
 /** \brief Interface class from which all plugins have to be created.
52
  *
Jan Möbius's avatar
 
Jan Möbius committed
53
  * You have to implement at least name and description for your plugin.
54
  * All other functions and signals are optional. If you want to implement or use
Jan Möbius's avatar
 
Jan Möbius committed
55
  * them just add them to your plugin header.
56
  *
57 58 59 60
  * See \ref pluginProgramming for a tutorial on plugin programming.
  *
  * Also see \ref dataFlow diagrams for a detailed overview of
  * OpenFlipper's data flow and interface function calls.
Jan Möbius's avatar
 
Jan Möbius committed
61 62
 */
class BaseInterface {
63

64 65 66 67
   //===========================================================================
    /** @name Initialization
    * @{ */
   //===========================================================================
68

69 70
  private slots:
      /**  \brief Initialize Plugin
71
       *
Jan Möbius's avatar
 
Jan Möbius committed
72
       *   This slot is called if the plugin is loaded and has to be initialized. All initialization stuff
Jan Möbius's avatar
Jan Möbius committed
73 74
       *   in this slot has to stay inside the plugin, no external signals are allowed here (and will be ignored).
       *   Don't create any objects via pluginfunctions here. Use the pluginsInitialized() slot for external
Jan Möbius's avatar
Jan Möbius committed
75
       *   initialization. After execution of this slot your plugin should be fully functional.
76
       *   Only gui elements may be uninitialized and should be created in pluginsInitialized().
Jan Möbius's avatar
 
Jan Möbius committed
77 78
      */
      virtual void initializePlugin() {};
79

Jan Möbius's avatar
 
Jan Möbius committed
80
      /**  \brief Initialize Plugin step 2
81
       *
Jan Möbius's avatar
 
Jan Möbius committed
82 83 84 85
       *   This slot is called if all plugins are loaded and the core is ready. Here you can create objects,
       *   set Textures and everything which will involve signals to the core.
      */
      virtual void pluginsInitialized() {};
86 87


88 89 90 91 92 93 94 95 96 97
  /** @} */

  //===========================================================================
  /** @name Object/View updates
  * @{ */
  //===========================================================================

  signals :
    /** \brief Update current view in Main Application
      *
Jan Möbius's avatar
Jan Möbius committed
98 99 100
      *  Emit this Signal if the viewer widget in the main application should update the current view.
      *  If you do an updatedObject the core will trigger an update itself and you don't have to care
      *  about it.
101 102 103
    */
    virtual void updateView() {};

Jan Möbius's avatar
Jan Möbius committed
104
    /** \brief An object has been changed or added by this plugin
105
      *
106
      *  Emit this Signal, if you updated any part of an object.\n
Jan Möbius's avatar
Jan Möbius committed
107
      *  If you changed the element itself (geometry, topology,..) you also have to emit this signal.\n
108
      *  Dont emit this Signal in BaseInterface::slotObjectUpdated() as this causes an endless Loop!!
Jan Möbius's avatar
Jan Möbius committed
109
      *  Give the id of the new object as parameter or -1 if you updated all objects or deleted an object.
110
      *
Jan Möbius's avatar
Jan Möbius committed
111
      *  The parameter has to be the id of the object or -1 if refering to all or deleted objects.
112 113 114
      */
    virtual void updatedObject(int ) {};

Jan Möbius's avatar
Jan Möbius committed
115
    /** \brief An object has been shown or hidden
116
      *
Jan Möbius's avatar
Jan Möbius committed
117
      *  Emit this Signal, if you changed the visibility of an object.
118
      *  This is required to reset the near and far plane for the viewers to provide
119 120
      *  an optimal view. Use the id of the object you show or hide as a parameter.
      *  Otherwise use -1 if you dont have the id.
121 122
      *
      */
123
    virtual void visibilityChanged( int /*_identifier*/ ) {};
124

125 126 127
    /**  \brief The object selection has been changed by this plugin
      *
      *   This signal is used to tell the other plugins that the object selection (source/target) has been changed.\n
128 129
      *
    */
130
    virtual void objectSelectionChanged( int /*_identifier*/ ) {};
131 132 133

  private slots:

Jan Möbius's avatar
Jan Möbius committed
134
    /**  \brief An object has been updated by another plugin
135
      *
Jan Möbius's avatar
Jan Möbius committed
136
      *   This slot is called by the main aplication if the number or status of existing objects changed or if
137
      *   an existing object has been changed. This could mean, that objects are added or deleted
Jan Möbius's avatar
Jan Möbius committed
138
      *   or that an existing object with the given id has been modified.
139 140 141
      *   If you store local information about one of these Objects, you should check if its still valid!\n
      *   Dont emit BaseInterface::updatedObject(int) in this slot as this causes an endless Loop!!
      *   You dont need to call updateView as the core triggers a redraw itself.
142
      *  @param _identifier Identifier of the updated/new object or -1 if one is deleted.
143 144 145 146
    */
    virtual void slotObjectUpdated( int /*_identifier*/ ) {};

    /**  \brief Called if the whole scene is cleared
Jan Möbius's avatar
Jan Möbius committed
147 148 149
      *
      * This slot is called if the main application cleared the whole scene. No objects will remain in memory
      * and all destructors of the objects are called before this signal is emitted.
150 151 152 153 154 155
      *
      */
    virtual void slotAllCleared( ) {};

      /**  \brief The active object has changed
      *
156 157 158 159
      *   This slot is called by the main aplication if the currentselection of an object has changed.\n
      *   This means that the selection of source / target objects has changed.
      *   Addisionally you get the id of the object that has been changed or -1 if all objects
      *   have been modified.
160
    */
161 162 163 164 165 166 167 168 169 170
    virtual void slotObjectSelectionChanged( int /*_identifier*/ ) {};

    /** \brief An object has been shown or hidden
      *
      *  This slot is called if an objecct is shown or hidden.
      *  The id of the object is given as a parameter.
      *  If multiple or all objects have changed, the id will be -1.
      *
      */
    virtual void slotVisibilityChanged( int /*_identifier*/ ) {};
171 172 173 174 175 176 177 178 179

  /** @} */

  //===========================================================================
  /** @name Plugin identification
  * @{ */
  //===========================================================================
  public :

Jan Möbius's avatar
Jan Möbius committed
180
    /** \brief Return a name for the plugin
181 182 183 184 185 186 187 188 189 190
      *
      * This Function has to return the name of the plugin.
    */
    virtual QString name() = 0;

    /** \brief Return a description of what the plugin is doing
      *
      * This function has to return a basic description of the plugin
      */
    virtual QString description() = 0;
191 192 193 194 195 196 197 198 199

  public slots:
      /** \brief Return a version string for your plugin
       *
       * This function will be used to determin the current version of your plugin.
       * Should have the form x.x.x ( you do not need to give that many subversions )
       */
      virtual QString version() { return QString("-1"); };

200
  signals:
201

202
      /**  \brief Set a description for a public slot
203
       *
204 205 206 207 208 209 210
       *   public slots of each plugin are automaticly available for scripting. \n
       *   Use this Signal to add a description for your slot so that everyone knows what it is used for. \n
       *
       *   @param _slotName the name of the slot
       *   @param _slotDescription a description for the slot
       *   @param _parameters list of parameters
       *   @param _descriptions list of descriptions for the parameters (_descriptions[i] corresponds to _parameters[i])
Jan Möbius's avatar
 
Jan Möbius committed
211
      */
212 213
      virtual void setSlotDescription(QString     /*_slotName*/,    QString     /*_slotDescription*/,
                                      QStringList /*_parameters*/, QStringList /*_descriptions*/) {};
214

215 216 217 218 219 220 221 222 223 224
  /** @} */

  private slots :

    /** This function is called when the application exits or when your plugin is about to be unloaded.
      * Here you can clean up your plugin, delete local variables...
      */
    virtual void exit(){};

    /** Using this function you can inform the core that your plugin can run without creating a widget.
Jan Möbius's avatar
Jan Möbius committed
225
      * If your plugin does not implement this function, it will not be loaded in scripting mode without gui.
226 227 228 229 230 231 232 233
      * You dont have to do anything in this function.
      */
    virtual void noguiSupported( ) {} ;

  public :

    /// Destructor
    virtual ~BaseInterface() {};
234

Jan Möbius's avatar
 
Jan Möbius committed
235 236
};

237
Q_DECLARE_INTERFACE(BaseInterface,"OpenFlipper.BaseInterface/1.0")
238

Jan Möbius's avatar
 
Jan Möbius committed
239
#endif // BASEINTERFACE_HH