]> git.saurik.com Git - wxWidgets.git/commitdiff
Fixed the equality and inequality operators for some of the basic
authorRobin Dunn <robin@alldunn.com>
Fri, 31 Mar 2006 23:29:39 +0000 (23:29 +0000)
committerRobin Dunn <robin@alldunn.com>
Fri, 31 Mar 2006 23:29:39 +0000 (23:29 +0000)
data types (wx.Point, wx.Size, wx.Colour, etc.) to no longer raise a
TypeError if the compared object is not compatible, but to just return
a boolean as expected.  For example::

  wx.Colour(64,0,64) == 123      ==> False

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38493 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/src/_colour.i
wxPython/src/_defs.i
wxPython/src/_gbsizer.i
wxPython/src/_gdicmn.i
wxPython/src/grid.i

index b69c056343bf8cb5fd523f9089ab1f15422813d7..7b1d7ef5bd6f6d5456ca41fd548c3aad41236bc7 100644 (file)
@@ -106,14 +106,32 @@ COLORREF is returned. On X, an allocated pixel value is returned.  -1
 is returned if the pixel is invalid (on X, unallocated).", "");
     
     
 is returned if the pixel is invalid (on X, unallocated).", "");
     
     
-    DocDeclStr(
-        bool , operator==(const wxColour& colour) const,
-        "Compare colours for equality", "");
-    
-    DocDeclStr(
-        bool , operator!=(const wxColour& colour) const,
-        "Compare colours for inequality", "");
-    
+    %extend {
+        KeepGIL(__eq__);
+        DocStr(__eq__, "Compare colours for equality.", "");
+        bool __eq__(PyObject* other) {
+            wxColour  temp, *obj = &temp;
+            if ( other == Py_None ) return false;
+            if ( ! wxColour_helper(other, &obj) ) {
+                PyErr_Clear();
+                return false;
+            }
+            return self->operator==(*obj);
+        }
+
+        
+        KeepGIL(__ne__);
+        DocStr(__ne__, "Compare colours for inequality.", "");
+        bool __ne__(PyObject* other) {
+            wxColour  temp, *obj = &temp;
+            if ( other == Py_None ) return true;
+            if ( ! wxColour_helper(other, &obj)) {
+                PyErr_Clear();
+                return true;
+            }
+            return self->operator!=(*obj);
+        }
+    }
 
 
     %extend {
 
 
     %extend {
index 9347ef9995084be62b749ab7a55f4e1a5f4dbc70..8828de982687adfbe95e4804d5d38ed2e9378294 100644 (file)
 }
 %enddef
 
 }
 %enddef
 
-    
 
 
+// This macro can be used to disable the releasing of the GIL when calling the
+// C++ function.
+%define KeepGIL(name)
+%exception name {
+    $action
+    if (PyErr_Occurred()) SWIG_fail;
+}
+%enddef
+        
 //---------------------------------------------------------------------------
 // some type definitions to simplify things for SWIG
 
 //---------------------------------------------------------------------------
 // some type definitions to simplify things for SWIG
 
index 8b79cc4c7d4c7356a882df53293fcd4c39c18512..412ad058e5c24615bb6bd316b817581eae611436 100644 (file)
@@ -80,14 +80,35 @@ public:
     void SetRow(int row);
     void SetCol(int col);
 
     void SetRow(int row);
     void SetCol(int col);
 
-//     %extend {
-//         bool __eq__(const wxGBPosition* other) { return other ? (*self == *other) : false; }
-//         bool __ne__(const wxGBPosition* other) { return other ? (*self != *other) : true;  }
-//     }
 
 
-    bool operator==(const wxGBPosition& other);
-    bool operator!=(const wxGBPosition& other);
-    
+    %extend {
+        KeepGIL(__eq__);
+        DocStr(__eq__, "Compare GBPosition for equality.", "");
+        bool __eq__(PyObject* other) {
+            wxGBPosition  temp, *obj = &temp;
+            if ( other == Py_None ) return false;
+            if ( ! wxGBPosition_helper(other, &obj) ) {
+                PyErr_Clear();
+                return false;
+            }
+            return self->operator==(*obj);
+        }
+
+        
+        KeepGIL(__ne__);
+        DocStr(__ne__, "Compare GBPosition for inequality.", "");
+        bool __ne__(PyObject* other) {
+            wxGBPosition  temp, *obj = &temp;
+            if ( other == Py_None ) return true;
+            if ( ! wxGBPosition_helper(other, &obj)) {
+                PyErr_Clear();
+                return true;
+            }
+            return self->operator!=(*obj);
+        }
+    }
+
+   
     %extend {
         void Set(int row=0, int col=0) {
             self->SetRow(row);
     %extend {
         void Set(int row=0, int col=0) {
             self->SetRow(row);
@@ -150,14 +171,35 @@ cell in each direction.", "");
     int GetColspan() const;
     void SetRowspan(int rowspan);
     void SetColspan(int colspan);
     int GetColspan() const;
     void SetRowspan(int rowspan);
     void SetColspan(int colspan);
+
     
     
-//     %extend {
-//         bool __eq__(const wxGBSpan* other) { return other ? (*self == *other) : false; }
-//         bool __ne__(const wxGBSpan* other) { return other ? (*self != *other) : true;  }
-//     }
-    bool operator==(const wxGBSpan& other);
-    bool operator!=(const wxGBSpan& other);
-    
+    %extend {
+        KeepGIL(__eq__);
+        DocStr(__eq__, "Compare wxGBSpan for equality.", "");
+        bool __eq__(PyObject* other) {
+            wxGBSpan  temp, *obj = &temp;
+            if ( other == Py_None ) return false;
+            if ( ! wxGBSpan_helper(other, &obj) ) {
+                PyErr_Clear();
+                return false;
+            }
+            return self->operator==(*obj);
+        }
+
+        
+        KeepGIL(__ne__);
+        DocStr(__ne__, "Compare GBSpan for inequality.", "");
+        bool __ne__(PyObject* other) {
+            wxGBSpan  temp, *obj = &temp;
+            if ( other == Py_None ) return true;
+            if ( ! wxGBSpan_helper(other, &obj)) {
+                PyErr_Clear();
+                return true;
+            }
+            return self->operator!=(*obj);
+        }
+    }
+
 
     %extend {
         void Set(int rowspan=1, int colspan=1) {
 
     %extend {
         void Set(int rowspan=1, int colspan=1) {
index bb54248466877f235ff6cfb8ae03cd1ef419bb48..6e7e24241f02573de716d546e47a6d297c5e6691 100644 (file)
@@ -130,19 +130,33 @@ public:
 
     ~wxSize();
 
 
     ~wxSize();
 
-// None/NULL is now handled properly by the typemap, so these are not needed.
-//     %extend {
-//         bool __eq__(const wxSize* other) { return other ? (*self == *other) : false; }
-//         bool __ne__(const wxSize* other) { return other ? (*self != *other) : true;  }
-//     }
-
-    DocDeclStr(
-        bool, operator==(const wxSize& sz),
-        "Test for equality of wx.Size objects.", "");
+    
+    %extend {
+        KeepGIL(__eq__);
+        DocStr(__eq__, "Test for equality of wx.Size objects.", "");
+        bool __eq__(PyObject* other) {
+            wxSize  temp, *obj = &temp;
+            if ( other == Py_None ) return false;
+            if ( ! wxSize_helper(other, &obj) ) {
+                PyErr_Clear();
+                return false;
+            }
+            return self->operator==(*obj);
+        }
 
 
-    DocDeclStr(
-        bool, operator!=(const wxSize& sz),
-        "Test for inequality.", "");
+        
+        KeepGIL(__ne__);
+        DocStr(__ne__, "Test for inequality of wx.Size objects.", "");
+        bool __ne__(PyObject* other) {
+            wxSize  temp, *obj = &temp;
+            if ( other == Py_None ) return true;
+            if ( ! wxSize_helper(other, &obj)) {
+                PyErr_Clear();
+                return true;
+            }
+            return self->operator!=(*obj);
+        }
+    }
 
     DocDeclStr(
         wxSize, operator+(const wxSize& sz),
 
     DocDeclStr(
         wxSize, operator+(const wxSize& sz),
@@ -235,13 +249,32 @@ public:
     
     ~wxRealPoint();
 
     
     ~wxRealPoint();
 
-    DocDeclStr(
-        bool, operator==(const wxRealPoint& pt),
-        "Test for equality of wx.RealPoint objects.", "");
+    %extend {
+        KeepGIL(__eq__);
+        DocStr(__eq__, "Test for equality of wx.RealPoint objects.", "");
+        bool __eq__(PyObject* other) {
+            wxRealPoint  temp, *obj = &temp;
+            if ( other == Py_None ) return false;
+            if ( ! wxRealPoint_helper(other, &obj) ) {
+                PyErr_Clear();
+                return false;
+            }
+            return self->operator==(*obj);
+        }
 
 
-    DocDeclStr(
-        bool, operator!=(const wxRealPoint& pt),
-        "Test for inequality of wx.RealPoint objects.", "");
+        
+        KeepGIL(__ne__);
+        DocStr(__ne__, "Test for inequality of wx.RealPoint objects.", "");
+        bool __ne__(PyObject* other) {
+            wxRealPoint  temp, *obj = &temp;
+            if ( other == Py_None ) return true;
+            if ( ! wxRealPoint_helper(other, &obj)) {
+                PyErr_Clear();
+                return true;
+            }
+            return self->operator!=(*obj);
+        }
+    }
 
     
     DocDeclStr(
 
     
     DocDeclStr(
@@ -311,14 +344,32 @@ public:
     ~wxPoint();
 
     
     ~wxPoint();
 
     
-    DocDeclStr(
-        bool, operator==(const wxPoint& pt),
-        "Test for equality of wx.Point objects.", "");
-
-    DocDeclStr(
-        bool, operator!=(const wxPoint& pt),
-        "Test for inequality of wx.Point objects.", "");
+    %extend {
+        KeepGIL(__eq__);
+        DocStr(__eq__, "Test for equality of wx.Point objects.", "");
+        bool __eq__(PyObject* other) {
+            wxPoint  temp, *obj = &temp;
+            if ( other == Py_None ) return false;
+            if ( ! wxPoint_helper(other, &obj) ) {
+                PyErr_Clear();
+                return false;
+            }
+            return self->operator==(*obj);
+        }
 
 
+        
+        KeepGIL(__ne__);
+        DocStr(__ne__, "Test for inequality of wx.Point objects.", "");
+        bool __ne__(PyObject* other) {
+            wxPoint  temp, *obj = &temp;
+            if ( other == Py_None ) return true;
+            if ( ! wxPoint_helper(other, &obj)) {
+                PyErr_Clear();
+                return true;
+            }
+            return self->operator!=(*obj);
+        }
+    }
 
 
 //     %nokwargs operator+;
 
 
 //     %nokwargs operator+;
@@ -560,13 +611,32 @@ bottom, otherwise it is moved to the left or top respectively.", "",
         wxRect&, operator+=(const wxRect& rect),
         "Add the properties of rect to this rectangle, updating this rectangle.", "");
 
         wxRect&, operator+=(const wxRect& rect),
         "Add the properties of rect to this rectangle, updating this rectangle.", "");
 
-    DocDeclStr(
-        bool, operator==(const wxRect& rect) const,
-        "Test for equality.", "");
+    %extend {
+        KeepGIL(__eq__);
+        DocStr(__eq__, "Test for equality of wx.Rect objects.", "");
+        bool __eq__(PyObject* other) {
+            wxRect  temp, *obj = &temp;
+            if ( other == Py_None ) return false;
+            if ( ! wxRect_helper(other, &obj) ) {
+                PyErr_Clear();
+                return false;
+            }
+            return self->operator==(*obj);
+        }
 
 
-    DocDeclStr(
-        bool, operator!=(const wxRect& rect) const,
-        "Test for inequality.", "");
+        
+        KeepGIL(__ne__);
+        DocStr(__ne__, "Test for inequality of wx.Rect objects.", "");
+        bool __ne__(PyObject* other) {
+            wxRect  temp, *obj = &temp;
+            if ( other == Py_None ) return true;
+            if ( ! wxRect_helper(other, &obj)) {
+                PyErr_Clear();
+                return true;
+            }
+            return self->operator!=(*obj);
+        }
+    }
 
     
     DocStr( Inside, "Return True if the point is (not strcitly) inside the rect.", "");
 
     
     DocStr( Inside, "Return True if the point is (not strcitly) inside the rect.", "");
@@ -713,13 +783,32 @@ public:
     wxPoint2D& operator*=(const wxPoint2D& pt);
     wxPoint2D& operator/=(const wxPoint2D& pt);
 
     wxPoint2D& operator*=(const wxPoint2D& pt);
     wxPoint2D& operator/=(const wxPoint2D& pt);
 
-    DocDeclStr(
-        bool, operator==(const wxPoint2D& pt) const,
-        "Test for equality", "");
-    
-    DocDeclStr(
-        bool, operator!=(const wxPoint2D& pt) const,
-        "Test for inequality", "");
+    %extend {
+        KeepGIL(__eq__);
+        DocStr(__eq__, "Test for equality of wx.Point2D objects.", "");
+        bool __eq__(PyObject* other) {
+            wxPoint2D  temp, *obj = &temp;
+            if ( other == Py_None ) return false;
+            if ( ! wxPoint2D_helper(other, &obj) ) {
+                PyErr_Clear();
+                return false;
+            }
+            return self->operator==(*obj);
+        }
+
+        
+        KeepGIL(__ne__);
+        DocStr(__ne__, "Test for inequality of wx.Point2D objects.", "");
+        bool __ne__(PyObject* other) {
+            wxPoint2D  temp, *obj = &temp;
+            if ( other == Py_None ) return true;
+            if ( ! wxPoint2D_helper(other, &obj)) {
+                PyErr_Clear();
+                return true;
+            }
+            return self->operator!=(*obj);
+        }
+    }
 
     %Rename(x, double,  m_x);
     %Rename(y, double,  m_y);
 
     %Rename(x, double,  m_x);
     %Rename(y, double,  m_y);
index d6f7f1c6eff934f50e8e347df3179cbc2a4e109a..ec563fc7f230d0dcc917d1f4796478200eada979 100644 (file)
@@ -1534,8 +1534,33 @@ public:
     void SetCol( int n );
     void Set( int row, int col );
 
     void SetCol( int n );
     void Set( int row, int col );
 
-    bool operator==( const wxGridCellCoords& other ) const;
-    bool operator!=( const wxGridCellCoords& other ) const;
+    %extend {
+        KeepGIL(__eq__);
+        DocStr(__eq__, "Test for equality of GridCellCoords objects.", "");
+        bool __eq__(PyObject* other) {
+            wxGridCellCoords  temp, *obj = &temp;
+            if ( other == Py_None ) return false;
+            if ( ! wxGridCellCoords_helper(other, &obj) ) {
+                PyErr_Clear();
+                return false;
+            }
+            return self->operator==(*obj);
+        }
+
+        
+        KeepGIL(__ne__);
+        DocStr(__ne__, "Test for inequality of GridCellCoords objects.", "");
+        bool __ne__(PyObject* other) {
+            wxGridCellCoords  temp, *obj = &temp;
+            if ( other == Py_None ) return true;
+            if ( ! wxGridCellCoords_helper(other, &obj)) {
+                PyErr_Clear();
+                return true;
+            }
+            return self->operator!=(*obj);
+        }
+    }
+
 
     %extend {
         PyObject* Get() {
 
     %extend {
         PyObject* Get() {