Adapted to recent changes of %build_linklib.
[AROS-Contrib.git] / FryingPan / framework / Generic / ExtPropertyT.h
blobdc6e284cb5d44932103aa75147be378b2706fdb5
1 /*
2 * Amiga Generic Set - set of libraries and includes to ease sw development for all Amiga platforms
3 * Copyright (C) 2001-2011 Tomasz Wiszkowski Tomasz.Wiszkowski at gmail.com.
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 #ifndef _GENERIC_EXTPROPERTYT_H_
21 #define _GENERIC_EXTPROPERTYT_H_
23 #include "Generic.h"
25 namespace GenNS
27 template<typename T>
28 class ExtPropertyT : public Generic
30 public:
31 class Handler
33 public:
34 virtual bool onPropSet(ExtPropertyT<T>*, const T&) = 0;
35 virtual T& onPropGet(ExtPropertyT<T>*) = 0;
38 class Monitor
40 public:
41 virtual void onPropChange(ExtPropertyT<T>*, const T&) = 0;
44 protected:
45 Handler *handler;
46 VectorT<Monitor*> monitors;
48 public:
49 ExtPropertyT()
51 handler = 0;
54 virtual ~ExtPropertyT()
58 virtual ExtPropertyT<T>& operator = (const T& t)
60 ASSERT(handler != 0);
61 if (handler == 0)
62 return *this;
64 if (handler->onPropSet(this, t))
65 NotifyAll();
66 return *this;
69 virtual operator T&()
71 ASSERT(handler != 0);
72 return handler->onPropGet(this);
75 virtual ExtPropertyT<T>& operator << (Monitor *mon)
77 monitors << mon;
79 ASSERT(handler != 0);
80 if (handler != 0)
81 mon->onPropChange(this, handler->onPropGet(this));
83 return *this;
86 virtual ExtPropertyT<T>& operator >> (Monitor *mon)
88 monitors >> mon;
89 return *this;
92 virtual ExtPropertyT<T>& SetPropHandler(Handler *f)
94 handler = f;
95 return *this;
98 virtual void NotifyAll()
100 if (handler == 0)
101 return;
103 for (int i=0; i<monitors.Count(); i++)
104 monitors[i]->onPropChange(this, handler->onPropGet(this));
109 #endif