]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_pen.i
PyCrust now has an option for showing/hiding the notebook.
[wxWidgets.git] / wxPython / src / _pen.i
index 757872a251e2c8a5e8e86d9517f8570533f499c3..577c0a936e8bf35be4fa135b7a69a61a231bfca7 100644 (file)
@@ -29,6 +29,8 @@
 %newgroup
 
 
+MustHaveApp(wxPen);
+
 class wxPen : public wxGDIObject {
 public:
     wxPen(wxColour& colour, int width=1, int style=wxSOLID);
@@ -40,7 +42,8 @@ public:
     int GetStyle();
     int GetWidth();
 
-    bool Ok();
+    bool IsOk();
+    %pythoncode { Ok = IsOk }
 
     void SetCap(int cap_style);
     void SetColour(wxColour& colour);
@@ -54,66 +57,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);
+        }
     }
-    
-    %extend {
-        bool __eq__(const wxPen* other) { return other ? (*self == *other) : False; }
-        bool __ne__(const wxPen* other) { return other ? (*self != *other) : True;  }
+    %pythoncode {
+    def SetDashes(self, dashes):
+        """
+        Associate a list of dash lengths with the Pen.
+        """
+        self._SetDashes(self, dashes)
     }
 
+    
 #ifndef __WXMAC__
-//  wxDash* GetDash() const;
     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();
-
-    void SetDashes(int dashes, wxDash* dashes_array);
+    %pythoncode { def __nonzero__(self): return self.IsOk() }
+
+    %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 };
 
 //---------------------------------------------------------------------------