Merge commit '515673c08f8718a237e90c2130a1f5294f966d6a'
[xonotic/netradiant.git] / plugins / entity / curve.h
index 6f3ad9e7a9d4591c020e8c99e58cd21905e6128e..39629549255bbedf24e387dec8d18583b879713c 100644 (file)
@@ -30,6 +30,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 #include "math/curve.h"
 #include "stream/stringstream.h"
+#include "signal/signal.h"
 #include "selectionlib.h"
 #include "render.h"
 #include "stringio.h"
@@ -147,9 +148,6 @@ public:
   }
 };
 
-const Colour4b colour_vertex(0, 255, 0, 255);
-const Colour4b colour_selected(0, 0, 255, 255);
-
 class ControlPointAdd
 {
   RenderablePointVector& m_points;
@@ -339,8 +337,7 @@ const int NURBS_degree = 3;
 
 class NURBSCurve
 {
-  typedef std::set<Callback> Callbacks;
-  Callbacks m_curveChanged;
+  Signal0 m_curveChanged;
   Callback m_boundsChanged;
 public:
   ControlPoints m_controlPoints;
@@ -354,18 +351,18 @@ public:
   {
   }
 
-  void attach(const Callback& curveChanged)
+  SignalHandlerId connect(const SignalHandler& curveChanged)
   {
-    m_curveChanged.insert(curveChanged);
     curveChanged();
+    return m_curveChanged.connectLast(curveChanged);
   }
-  void detach(const Callback& curveChanged)
+  void disconnect(SignalHandlerId id)
   {
-    m_curveChanged.erase(curveChanged);
+    m_curveChanged.disconnect(id);
   }
   void notify()
   {
-    std::for_each(m_curveChanged.begin(), m_curveChanged.end(), CallbackInvoke());
+    m_curveChanged();
   }
 
   void tesselate()
@@ -437,8 +434,7 @@ public:
 
 class CatmullRomSpline
 {
-  typedef std::set<Callback> Callbacks;
-  Callbacks m_curveChanged;
+  Signal0 m_curveChanged;
   Callback m_boundsChanged;
 public:
   ControlPoints m_controlPoints;
@@ -450,18 +446,18 @@ public:
   {
   }
 
-  void attach(const Callback& curveChanged)
+  SignalHandlerId connect(const SignalHandler& curveChanged)
   {
-    m_curveChanged.insert(curveChanged);
     curveChanged();
+    return m_curveChanged.connectLast(curveChanged);
   }
-  void detach(const Callback& curveChanged)
+  void disconnect(SignalHandlerId id)
   {
-    m_curveChanged.erase(curveChanged);
+    m_curveChanged.disconnect(id);
   }
   void notify()
   {
-    std::for_each(m_curveChanged.begin(), m_curveChanged.end(), CallbackInvoke());
+    m_curveChanged();
   }
 
   void tesselate()