bindings: Instance::onCompare()
authorJerome St-Louis <jerome@ecere.com>
Mon, 30 May 2016 08:40:42 +0000 (04:40 -0400)
committerJerome St-Louis <jerome@ecere.com>
Mon, 21 Nov 2016 14:18:55 +0000 (09:18 -0500)
bindings/c/eC.c
bindings/c/eC.h
bindings/cpp/eC.hpp
bindings/cpp/samples/form.cpp
bindings/cpp/samples/test.epj

index 7a17b26..22bf2b4 100644 (file)
@@ -75,6 +75,8 @@ Class * class_byte;
 
 Class * class_class;
 
+Class * class_Instance;
+
 Method * method_class_onDisplay;
 Method * method_class_onCompare;
 Method * method_class_onCopy;
@@ -160,6 +162,8 @@ Application eC_init(bool guiApp, int argc, char * argv[])
          class_uint64 = eC_findClass(app, "uint64");
          class_byte = eC_findClass(app, "byte");
 
+         class_Instance = eC_findClass(app, "Instance");
+
          class_Application = eC_findClass(app, "Application");
          if(class_Application)
          {
index 1979d3a..2dabb75 100644 (file)
@@ -154,38 +154,38 @@ extern "C"
 // Virtual Method Calls
 
 // Base Class
-#define onDisplay(c, i, s, x, y, w, d, a, f) ({ void (* method)(Class *, void *, Surface, int, int, int, void *, Alignment, DataDisplayFlags) = ((c) ? (c)->_vTbl : class_class->_vTbl)[onDisplay_vTblID]; \
+#define _onDisplay(c, i, s, x, y, w, d, a, f) ({ void (* method)(eC_Class *, void *, eC_Surface, int, int, int, void *, Alignment, DataDisplayFlags) = (void (*)(eC_Class *, void *, eC_Surface, int, int, int, void *, Alignment, DataDisplayFlags))((c) ? (c)->_vTbl : class_class->_vTbl)[onDisplay_vTblID]; \
                                                 method ? method((c), i, s, x, y, w, d, a, f) : 1; })
-#define onCompare(c, i, co, o)               ({ int (* method)(Class *, void *, Class *, void *) = ((c) ? (c)->_vTbl : class_class->_vTbl)[onCompare_vTblID]; \
+#define _onCompare(c, i, o)                   ({ int (* method)(eC_Class *, void *, void *) = (int (*)(eC_Class *, void *, void *))((c) ? (c)->_vTbl : class_class->_vTbl)[onCompare_vTblID]; \
+                                                method ? method((c), i, o) : 1; })
+#define _onCopy(c, i, co, o)                  ({ void (* method)(eC_Class *, void *, eC_Class *, void *) = (void (*)(eC_Class *, void *, eC_Class *, void *))((c) ? (c)->_vTbl : class_class->_vTbl)[onCopy_vTblID]; \
                                                 method ? method((c), i, co, o) : 1; })
-#define onCopy(c, i, co, o)                  ({ void (* method)(Class *, void *, Class *, void *) = ((c) ? (c)->_vTbl : class_class->_vTbl)[onCopy_vTblID]; \
-                                                method ? method((c), i, co, o) : 1; })
-#define onFree(c, i)                         ({ void (* method)(Class *, void *) = ((c) ? (c)->_vTbl : class_class->_vTbl)[onFree_vTblID]; \
+#define _onFree(c, i)                         ({ void (* method)(eC_Class *, void *) = (void (*)(eC_Class *, void *))((c) ? (c)->_vTbl : class_class->_vTbl)[onFree_vTblID]; \
                                                 method ? method((c), i) : 1; })
-#define onGetString(c, i, t, d, n)           ({ constString (* method)(Class *, void *, char *, void *, bool *) = ((c) ? (c)->_vTbl : class_class->_vTbl)[onGetString_vTblID]; \
+#define _onGetString(c, i, t, d, n)           ({ constString (* method)(eC_Class *, void *, char *, void *, bool *) = (constString (*)(eC_Class *, void *, char *, void *, bool *))((c) ? (c)->_vTbl : class_class->_vTbl)[onGetString_vTblID]; \
                                                 method ? method((c), i, t, d, n) : null; })
-#define onGetDataFromString(c, i, s)         ({ bool (* method)(Class *, void *, constString) = ((c) ? (c)->_vTbl : class_class->_vTbl)[onGetDataFromString_vTblID]; \
+#define _onGetDataFromString(c, i, s)         ({ bool (* method)(eC_Class *, void *, constString) = (bool (*)(eC_Class *, void *, constString))((c) ? (c)->_vTbl : class_class->_vTbl)[onGetDataFromString_vTblID]; \
                                                 method ? method((c), i, s) : 1; })
-#define onEdit(c, i, b, o, x, y, w, h, u)    ({ Window (* method)(Class *, void *, DataBox, DataBox, int, int, int, int, void *) = ((c) ? (c)->_vTbl : class_class->_vTbl)[onEdit_vTblID]; \
+#define _onEdit(c, i, b, o, x, y, w, h, u)    ({ eC_Window (* method)(eC_Class *, void *, DataBox, DataBox, int, int, int, int, void *) = (eC_Window (*)(eC_Class *, void *, DataBox, DataBox, int, int, int, int, void *))((c) ? (c)->_vTbl : class_class->_vTbl)[onEdit_vTblID]; \
                                                 method ? method((c), i, b, i, x, y, w, h, u) : 1; })
-#define onSerialize(c, i, s)                 ({ void (* method)(Class *, void *, IOChannel) = ((c) ? (c)->_vTbl : class_class->_vTbl)[onSerialize_vTblID]; \
+#define _onSerialize(c, i, s)                 ({ void (* method)(eC_Class *, void *, eC_IOChannel) = (void (*)(eC_Class *, void *, eC_IOChannel))((c) ? (c)->_vTbl : class_class->_vTbl)[onSerialize_vTblID]; \
                                                 method ? method((c), i, s) : 1; })
-#define onUnserialize(c, i, s)               ({ void (* method)(Class *, void *, IOChannel) = ((c) ? (c)->_vTbl : class_class->_vTbl)[onUnserialize_vTblID]; \
+#define _onUnserialize(c, i, s)               ({ void (* method)(eC_Class *, void *, eC_IOChannel) = (void (*)(eC_Class *, void *, eC_IOChannel))((c) ? (c)->_vTbl : class_class->_vTbl)[onUnserialize_vTblID]; \
                                                 method ? method((c), i, s) : 1; })
-#define onSaveEdit(c, i, w, o)               ({ bool (* method)(Class *, void *, Window, void *) = ((c) ? (c)->_vTbl : class_class->_vTbl)[onSaveEdit_vTblID]; \
+#define _onSaveEdit(c, i, w, o)               ({ bool (* method)(eC_Class *, void *, eC_Window, void *) = (bool (*)(eC_Class *, void *, eC_Window, void *))((c) ? (c)->_vTbl : class_class->_vTbl)[onSaveEdit_vTblID]; \
                                                 method ? method((c), i, w, o) : 1; })
 
 // Base Virtual Methods for Normal Classes
-#define Instance_onDisplay(c, i, s, x, y, w, d, a, f)  onDisplay(i ? i->_class : c, i, s, x, y, w, d, a, f)
-#define Instance_onCompare(c, i, co, o)                onCompare(i ? i->_class : c, i, co, o)
-#define Instance_onCopy(c, i, co, o)                   onCopy(c, &i, co, o)
-#define Instance_onFree(c, i)                          onFree(i ? i->_class : c, i)
-#define Instance_onGetString(c, i, t, d, n)            onGetString(i ? i->_class : c, i, t, d, n)
-#define Instance_onGetDataFromString(c, i, s)          onGetDataFromString(c, &i, s)
-#define Instance_onEdit(c, i, b, o, x, y, w, h, u)     onEdit(i ? i->_class : c, i, b, o, x, y, w, h, u)
-#define Instance_onSerialize(c, i, s)                  onSerialize(i ? i->_class : c, i, s)
-#define Instance_onUnserialize(c, i, s)                onUnserialize(c, &i, s)
-#define Instance_onSaveEdit(c, i, w, o)                onSaveEdit(c, &i, w, o)
+#define Instance_onDisplay(c, i, s, x, y, w, d, a, f)  _onDisplay(i ? i->_class : c, i, s, x, y, w, d, a, f)
+#define Instance_onCompare(c, i, o)                    _onCompare(i ? i->_class : c, i, o)
+#define Instance_onCopy(c, i, co, o)                   _onCopy(c, &i, co, o)
+#define Instance_onFree(c, i)                          _onFree(i ? i->_class : c, i)
+#define Instance_onGetString(c, i, t, d, n)            _onGetString(i ? i->_class : c, i, t, d, n)
+#define Instance_onGetDataFromString(c, i, s)          _onGetDataFromString(c, &i, s)
+#define Instance_onEdit(c, i, b, o, x, y, w, h, u)     _onEdit(i ? i->_class : c, i, b, o, x, y, w, h, u)
+#define Instance_onSerialize(c, i, s)                  _onSerialize(i ? i->_class : c, i, s)
+#define Instance_onUnserialize(c, i, s)                _onUnserialize(c, &i, s)
+#define Instance_onSaveEdit(c, i, w, o)                _onSaveEdit(c, &i, w, o)
 
 // Application Class
 #define Application_main(x)   ({ eC_Application i = x; \
@@ -1058,6 +1058,9 @@ extern Class * class_uint;
 extern Class * class_uint64;
 extern Class * class_byte;
 
+// Instance Class
+extern Class * class_Instance;
+
 // Application Class
 extern Class * class_Application;
 
index 257a97d..edfd5ca 100644 (file)
@@ -183,7 +183,42 @@ public:
 
 // GENERATED: (Instance, Module and Application might require some custom tweaks...)
 
+#define Instance_onDisplay_vTblID               onDisplay_vTblID
+#define Instance_onCompare_vTblID               onCompare_vTblID
+#define Instance_onCopy_vTblID                  onCopy_vTblID
+#define Instance_onFree_vTblID                  onFree_vTblID
+#define Instance_onGetString_vTblID             onGetString_vTblID
+#define Instance_onGetDataFromString_vTblID     onGetDataFromString_vTblID
+#define Instance_onEdit_vTblID                  onEdit_vTblID
+#define Instance_onSerialize_vTblID             onSerialize_vTblID
+#define Instance_onUnserialize_vTblID           onUnserialize_vTblID
+#define Instance_onSaveEdit_vTblID              onSaveEdit_vTblID
+
 // Normal Class Definitions
+#define Instance_class_registration(d) \
+   REGISTER_METHOD("OnCompare", onCompare, Instance, d, bool, (eC_Class * c, eC_Instance o, eC_Instance o2), \
+      o, (c, *i, *(Instance *)INSTANCEL(o2, o2->_class)), (c, o, o2), true);
+
+/*
+   REGISTER_METHOD("OnDisplay", onDisplay, Instance, d, void, (eC_Class * c, eC_Instance o, eC_Instance s, int x, int y, int w, void * f, Alignment a, DataDisplayFlags df), \
+      o, (c, *i, Surface(s), x, y, w, f, a, df), (c, o, s, x, y, w, f, a, df), );
+*/
+
+/*
+#define Instance_onCopy(c, i, co, o)                   onCopy(c, &i, co, o)
+#define Instance_onFree(c, i)                          onFree(i ? i->_class : c, i)
+#define Instance_onGetString(c, i, t, d, n)            onGetString(i ? i->_class : c, i, t, d, n)
+#define Instance_onGetDataFromString(c, i, s)          onGetDataFromString(c, &i, s)
+#define Instance_onEdit(c, i, b, o, x, y, w, h, u)     onEdit(i ? i->_class : c, i, b, o, x, y, w, h, u)
+#define Instance_onSerialize(c, i, s)                  onSerialize(i ? i->_class : c, i, s)
+#define Instance_onUnserialize(c, i, s)                onUnserialize(c, &i, s)
+#define Instance_onSaveEdit(c, i, w, o)                onSaveEdit(c, &i, w, o)
+*/
+class Surface;
+
+typedef uint32 Alignment;
+typedef uint32 DataDisplayFlags;
+
 class Instance
 {
 public:
@@ -193,7 +228,19 @@ public:
 
    static eC_bool constructor(eC_Instance i) { if(!Class_isDerived(i->_class, _class.impl)) return new Instance(i) != null; return true; }
    static void destructor(eC_Instance i) { Instance * inst = (Instance *)_INSTANCE(i, _class.impl); delete inst; }
-   static void class_registration(CPPClass & _class) { }
+   static void class_registration(CPPClass & _class) { Instance_class_registration(Instance); }
+/*
+   VIRTUAL_METHOD(onDisplay, Instance, Instance,
+      void, (eC_Class *, Instance &, Surface &, int, int, int, void *, Alignment, DataDisplayFlags),
+      (eC_Class * cl, Instance & foo, Surface & surface, int x, int y, int w, void * fieldData, Alignment alignment, DataDisplayFlags flags),
+      Instance_onDisplay(cl, foo.impl, surface.impl, x, y, w, fieldData, alignment, flags));
+*/
+
+   VIRTUAL_METHOD(onCompare, Instance, Instance,
+      bool, (eC_Class *, Instance &, Instance &),
+      (eC_Class * cl, Instance & a, Instance & b),
+      return Instance_onCompare(cl, self->impl, b.impl));
+
    inline explicit Instance(eC_Instance _impl, CPPClass & cl = _class)
    {
       Class * c = cl.impl;
index 866afcc..f4bfb76 100644 (file)
@@ -32,10 +32,20 @@ public:
       {
          double i = 3.14159265;
          char tmp[256];
-         constString s = onGetString(class_double, &i, tmp, null, null);
+         constString s = _onGetString(class_double, &i, tmp, null, null);
          PrintLn(class_String, "Hello! -- ", class_String, s, null); // Need to terminate with a null!
          HelloForm2 & self = (HelloForm2 &)owner;
          MessageBox($("C++ Bindings!"), self.button.caption).modal();
+
+         FontResource a("Arial", 20, true);
+         FontResource b("Comic Sans MS", 20, true);
+         FontResource c("Arial", 20, true);
+
+         bool ab = a.onCompare(class_FontResource, a, b);
+         bool ac = a.onCompare(class_FontResource, a, c);
+         printf("a compare b = %d\n", ab);
+         printf("a compare c = %d\n", ac);
+
          return true;
       };
 
index 6113303..3869f0c 100644 (file)
@@ -54,7 +54,7 @@
             "../ecere.hpp"
          ]
       },
-      "sample1.cpp"
+      "form.cpp"
    ],
    "ResourcesPath" : "",
    "Resources" : [