]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_pen.i
remove unused any more wxArrayHandlers
[wxWidgets.git] / wxPython / src / _pen.i
index 3c0677b5fb977a32466ea5f737c84dc0ceefcf39..40a09b39e5cc14f7f4bb81c1cc41c63b55ae8bf3 100644 (file)
@@ -29,6 +29,8 @@
 %newgroup
 
 
+MustHaveApp(wxPen);
+
 class wxPen : public wxGDIObject {
 public:
     wxPen(wxColour& colour, int width=1, int style=wxSOLID);
@@ -54,56 +56,71 @@ public:
         PyObject* GetDashes() {
             wxDash* dashes;
             int count = self->GetDashes(&dashes);
-            wxPyBeginBlockThreads();
+            wxPyBlock_t blocked = wxPyBeginBlockThreads();
             PyObject* retval = PyList_New(0);
-            for (int x=0; x<count; x++)
-                PyList_Append(retval, PyInt_FromLong(dashes[x]));
-            wxPyEndBlockThreads();
+            for (int x=0; x<count; x++) {
+                PyObject* pyint = PyInt_FromLong(dashes[x]);
+                PyList_Append(retval, pyint);
+                Py_DECREF(pyint);
+            }
+            wxPyEndBlockThreads(blocked);
             return retval;
         }
+
+        void _SetDashes(PyObject* _self, PyObject* pyDashes) {
+            wxPyBlock_t blocked = wxPyBeginBlockThreads();
+            int size = PyList_Size(pyDashes);
+            wxDash* dashes = (wxDash*)byte_LIST_helper(pyDashes);
+
+            // black magic warning!  The array of wxDashes needs to exist as
+            // long as the pen does because wxPen does not copy the array.  So
+            // stick a copy in a Python string object and attach it to _self,
+            // and then call SetDashes with a pointer to that array.  Then
+            // when the Python pen object is destroyed the array will be
+            // cleaned up too.
+            PyObject* strDashes = PyString_FromStringAndSize((char*)dashes, size*sizeof(wxDash));
+            PyObject_SetAttrString(_self, "_dashes", strDashes);
+                        
+            self->SetDashes(size, (wxDash*)PyString_AS_STRING(strDashes));
+            delete [] dashes;
+            Py_DECREF(strDashes);
+            wxPyEndBlockThreads(blocked);
+        }
+    }
+    %pythoncode {
+    def SetDashes(self, dashes):
+        """
+        Associate a list of dash lengths with the Pen.
+        """
+        self._SetDashes(self, dashes)
     }
 
+    
+#ifndef __WXMAC__
+    int GetDashCount() const;
+    %property(DashCount, GetDashCount, doc="See `GetDashCount`");
+#endif
+    
 #ifdef __WXMSW__
     wxBitmap* GetStipple();
     void SetStipple(wxBitmap& stipple);
+    %property(Stipple, GetStipple, SetStipple, doc="See `GetStipple` and `SetStipple`");
 #endif
 
-    %pythoncode { def __nonzero__(self): return self.Ok() }
-};
-
-
-// The list of ints for the dashes needs to exist for the life of the pen
-// so we make it part of the class to save it.  See pyclasses.h
-
-%{
-wxPyPen::~wxPyPen()
-{
-    if (m_dash)
-        delete [] m_dash;
-}
-
-void wxPyPen::SetDashes(int nb_dashes, const wxDash *dash)
-{
-    if (m_dash)
-        delete [] m_dash;
-    m_dash = new wxDash[nb_dashes];
-    for (int i=0; i<nb_dashes; i++) {
-        m_dash[i] = dash[i];
+    
+    %extend {
+        bool __eq__(const wxPen* other) { return other ? (*self == *other) : false; }
+        bool __ne__(const wxPen* other) { return other ? (*self != *other) : true;  }
     }
-    wxPen::SetDashes(nb_dashes, m_dash);
-} 
-%}
-
-
-class wxPyPen : public wxPen {
-public:
-    wxPyPen(wxColour& colour, int width=1, int style=wxSOLID);
-    ~wxPyPen();
+    %pythoncode { def __nonzero__(self): return self.Ok() }
 
-    void SetDashes(int dashes, wxDash* dashes_array);
+    %property(Cap, GetCap, SetCap, doc="See `GetCap` and `SetCap`");
+    %property(Colour, GetColour, SetColour, doc="See `GetColour` and `SetColour`");
+    %property(Dashes, GetDashes, SetDashes, doc="See `GetDashes` and `SetDashes`");
+    %property(Join, GetJoin, SetJoin, doc="See `GetJoin` and `SetJoin`");
+    %property(Style, GetStyle, SetStyle, doc="See `GetStyle` and `SetStyle`");
+    %property(Width, GetWidth, SetWidth, doc="See `GetWidth` and `SetWidth`");
 };
 
-// wxPyPen is aliased to wxPen
-%pythoncode { Pen = PyPen };
 
 //---------------------------------------------------------------------------