]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/bmpcbox.h
Reduce ambiguity of selection functions in wxPropertyGridManager, make them better...
[wxWidgets.git] / include / wx / bmpcbox.h
index 2de65ac579b672e7009ec7d68913c8a8382c99b3..08b1f4638dd297cab5c870d21c9490a22f11d8b7 100644 (file)
 #if wxUSE_BITMAPCOMBOBOX
 
 #include "wx/bitmap.h"
+#include "wx/window.h"
 
+class WXDLLIMPEXP_FWD_CORE wxItemContainer;
+
+// Define wxBITMAPCOMBOBOX_OWNERDRAWN_BASED for platforms which
+// wxBitmapComboBox implementation utilizes ownerdrawn combobox
+// (either native or generic).
+#if !defined(__WXGTK20__) || defined(__WXUNIVERSAL__)
+    #define wxBITMAPCOMBOBOX_OWNERDRAWN_BASED
+#endif
 
 extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxBitmapComboBoxNameStr[];
 
@@ -27,22 +36,87 @@ class WXDLLIMPEXP_ADV wxBitmapComboBoxBase
 {
 public:
     // ctors and such
-    wxBitmapComboBoxBase() { }
+    wxBitmapComboBoxBase() { Init(); }
 
     virtual ~wxBitmapComboBoxBase() { }
 
-    // Returns the image of the item with the given index.
-    virtual wxBitmap GetItemBitmap(unsigned int n) const = 0;
-
     // Sets the image for the given item.
     virtual void SetItemBitmap(unsigned int n, const wxBitmap& bitmap) = 0;
 
+#if !defined(wxBITMAPCOMBOBOX_OWNERDRAWN_BASED)
+
+    // Returns the image of the item with the given index.
+    virtual wxBitmap GetItemBitmap(unsigned int n) const = 0;
+
     // Returns size of the image used in list
     virtual wxSize GetBitmapSize() const = 0;
+
+private:
+    void Init() {}
+
+#else // wxBITMAPCOMBOBOX_OWNERDRAWN_BASED
+
+    // Returns the image of the item with the given index.
+    virtual wxBitmap GetItemBitmap(unsigned int n) const;
+
+    // Returns size of the image used in list
+    virtual wxSize GetBitmapSize() const
+    {
+        return m_usedImgSize;
+    }
+
+protected:
+
+    // Returns pointer to the combobox item container
+    virtual wxItemContainer* GetItemContainer() = 0;
+
+    // Return pointer to the owner-drawn combobox control
+    virtual wxWindow* GetControl() = 0;
+
+    // wxItemContainer functions
+    void BCBDoClear();
+    void BCBDoDeleteOneItem(unsigned int n);
+
+    void DoSetItemBitmap(unsigned int n, const wxBitmap& bitmap);
+
+    void DrawBackground(wxDC& dc, const wxRect& rect, int item, int flags) const;
+    void DrawItem(wxDC& dc, const wxRect& rect, int item, const wxString& text,
+                  int flags) const;
+    wxCoord MeasureItem(size_t item) const;
+
+    // Returns true if image size was affected
+    virtual bool OnAddBitmap(const wxBitmap& bitmap);
+
+    // Recalculates amount of empty space needed in front of text
+    // in control itself. Returns number that can be passed to
+    // wxOwnerDrawnComboBox::SetCustomPaintWidth() and similar
+    // functions.
+    virtual int DetermineIndent();
+
+    void UpdateInternals();
+
+    wxArrayPtrVoid      m_bitmaps;  // Images associated with items
+    wxSize              m_usedImgSize;  // Size of bitmaps
+
+    int                 m_imgAreaWidth;  // Width and height of area next to text field
+    int                 m_fontHeight;
+    int                 m_indent;
+
+private:
+    void Init();
+#endif // !wxBITMAPCOMBOBOX_OWNERDRAWN_BASED/wxBITMAPCOMBOBOX_OWNERDRAWN_BASED
 };
 
 
-#include "wx/generic/bmpcbox.h"
+#if defined(__WXUNIVERSAL__)
+    #include "wx/generic/bmpcbox.h"
+#elif defined(__WXMSW__)
+    #include "wx/msw/bmpcbox.h"
+#elif defined(__WXGTK20__)
+    #include "wx/gtk/bmpcbox.h"
+#else
+    #include "wx/generic/bmpcbox.h"
+#endif
 
 #endif // wxUSE_BITMAPCOMBOBOX