// @(#)root/base:$Id$
// Author: Valeriy Onuchin & Fons Rademakers   15/10/2000

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TQClass
#define ROOT_TQClass

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// This is part of the ROOT implementation of the Qt object             //
// communication mechanism (see also                                    //
// http://www.troll.no/qt/metaobjects.html)                             //
//                                                                      //
// See TQObject for details.                                             //
//                                                                      //
// This implementation is provided by                                   //
// Valeriy Onuchin (onuchin@sirius.ihep.su).                            //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TQObject.h"
#include "TClass.h"

// This class makes it possible to have a single connection from
// all objects of the same class
class TQClass : public TQObject, public TClass {

private:
   TQClass(const TClass&) = delete;
   TQClass& operator=(const TQClass&) = delete;

friend class TQObject;

public:
   TQClass(const char *name, Version_t cversion,
           const std::type_info &info, TVirtualIsAProxy *isa,
           const char *dfil = nullptr, const char *ifil = nullptr,
           Int_t dl = 0, Int_t il = 0) :
           TQObject(),
           TClass(name, cversion, info,isa,dfil, ifil, dl, il) { }

   virtual ~TQClass() { Disconnect(); }

   ClassDefOverride(TQClass,0)  // Class with connections
};


//---- Class Initialization Behavior --------------------------------------
//
// This Class and Function are automatically used for classes inheriting from
// TQObject. They make it possible to have a single connection from all
// objects of the same class.
namespace ROOT {
namespace Internal {
   class TDefaultInitBehavior;
   class TQObjectInitBehavior : public TDefaultInitBehavior {
   public:
      TClass *CreateClass(const char *cname, Version_t id,
                          const std::type_info &info, TVirtualIsAProxy *isa,
                          const char *dfil, const char *ifil,
                          Int_t dl, Int_t il) const override
      {
         return new TQClass(cname, id, info, isa, dfil, ifil,dl, il);
      }
   };

   inline const TQObjectInitBehavior *DefineBehavior(TQObject*, TQObject*)
   {
      TQObjectInitBehavior *behave = new TQObjectInitBehavior;
      return behave;
   }
}
}


#endif

