sprint 1-alpha
sprint/gtl/winclassregister.h
Go to the documentation of this file.
00001 /******************************************************************************
00002  *  GTL: GUI Template Library 
00003  *    A Cross Platform C++ Wrapper for Win32 users
00004  *  Copyright (C) 2007-2011 Paolo Medici (www.pmx.it)
00005  *
00006  *  This library is free software; you can redistribute it and/or
00007  *  modify it under the terms of the GNU Lesser General Public
00008  *  License as published by the Free Software Foundation; either
00009  *  version 2.1 of the License, or (at your option) any later version.
00010  *
00011  *  This library is distributed in the hope that it will be useful,
00012  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  *  Lesser General Public License for more details.
00015  *
00016  *  You should have received a copy of the GNU Lesser General Public
00017  *  License along with this library; if not, write to the Free Software
00018  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
00019  *
00020  *******************************************************************************/
00021 
00022 #ifndef _SPRINT_WINCLASSREGISTER_H
00023 #define _SPRINT_WINCLASSREGISTER_H
00024 
00028 namespace sprint {
00029         namespace gtl {
00030 
00035 template<class T>
00036 class WindowRegister {
00037      int registered;
00038      public:
00039       void Register(const T * win)
00040            {
00041            if(registered == 0)
00042                       {
00043                       win->Register();
00044                       }
00045            registered++;                      
00046            }
00047            
00048       public:
00049       WindowRegister() : registered(0) {}
00050       ~WindowRegister() {}
00051       };
00052 
00053 template<class T>
00054 class WindowSingleton {
00055      int registered;
00056      public:
00057       void Register(const T * win)
00058            {
00059            if(registered == 0)
00060                       {
00061                       win->Register();
00062                       }
00063            registered++;                      
00064            }
00065            
00066       public:
00067       WindowSingleton() : registered(0) {}
00068       ~WindowSingleton() {}
00069       
00070       static WindowSingleton<T> & Instance()
00071              {
00072              static WindowSingleton<T> _instance;
00073              return _instance;  
00074              }
00075       };
00076       
00077       template<class T>
00078       void WindowSingletonRegister(const T * win)
00079        {
00080         WindowSingleton<T>::Instance().Register(win);   
00081        }
00082 
00083         }
00084 }
00085 
00086 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines