]> git.saurik.com Git - wxWidgets.git/commitdiff
Add wxRenderer::DrawCheckButton for use inside
authorRobert Roebling <robert@roebling.de>
Tue, 18 Apr 2006 16:14:12 +0000 (16:14 +0000)
committerRobert Roebling <robert@roebling.de>
Tue, 18 Apr 2006 16:14:12 +0000 (16:14 +0000)
    wxDataViewCtrl.

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

include/wx/renderer.h
src/generic/datavgen.cpp
src/generic/renderg.cpp
src/gtk/renderer.cpp

index 3f6087866572592ddd0c7dca66086698497e2332..8a8076c484cd78f190383ab66a4d2cdc495f0563 100644 (file)
@@ -170,6 +170,15 @@ public:
                                const wxRect& rect,
                                int flags = 0) = 0;
 
+
+    // draw check button
+    //
+    // flags may use wxCONTROL_CHECKED, wxCONTROL_UNDETERMINED and wxCONTROL_CURRENT
+    virtual void DrawCheckButton(wxWindow *win,
+                                 wxDC& dc,
+                                 const wxRect& rect,
+                                 int flags = 0) = 0;
+                                 
     // geometry functions
     // ------------------
 
@@ -272,6 +281,12 @@ public:
                                int flags = 0)
         { m_rendererNative.DrawDropArrow(win, dc, rect, flags); }
 
+    virtual void DrawCheckButton(wxWindow *win,
+                                 wxDC& dc,
+                                 const wxRect& rect,
+                                 int flags = 0 )
+        { m_rendererNative.DrawCheckButton( win, dc, rect, flags ); }
+        
     virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win)
         { return m_rendererNative.GetSplitterParams(win); }
 
index 2ad27c525e20ed2271fbdd13fde6cff0ae656cc1..4e8b0fbb8d11c25ee2e57841094316f111638f9b 100644 (file)
@@ -315,26 +315,23 @@ bool wxDataViewToggleCell::Render( wxRect cell, wxDC *dc, int WXUNUSED(state) )
 {
     // User wxRenderer here
 
-    if (GetMode() == wxDATAVIEW_CELL_ACTIVATABLE)
-        dc->SetPen( *wxBLACK_PEN );
-    else
-        dc->SetPen( *wxGREY_PEN );
-    dc->SetBrush( *wxTRANSPARENT_BRUSH );
     wxRect rect;
     rect.x = cell.x + cell.width/2 - 10;
     rect.width = 20;
     rect.y = cell.y + cell.height/2 - 10;
     rect.height = 20;
-    dc->DrawRectangle( rect );
+    
+    int flags = 0;
     if (m_toggle)
-    {
-        rect.x += 2;
-        rect.y += 2;
-        rect.width -= 4;
-        rect.height -= 4;
-        dc->DrawLine( rect.x, rect.y, rect.x+rect.width, rect.y+rect.height );
-        dc->DrawLine( rect.x+rect.width, rect.y, rect.x, rect.y+rect.height );
-    }
+        flags |= wxCONTROL_CHECKED;
+    if (GetMode() != wxDATAVIEW_CELL_ACTIVATABLE)
+        flags |= wxCONTROL_DISABLED;
+
+    wxRendererNative::Get().DrawCheckButton(
+            GetOwner()->GetOwner(),
+            *dc,
+            rect,
+            flags );
 
     return true;
 }
index 546e7ff9de7a1b046fc2ad0b1e385ab6666660d2..c8a103d195489ceaae3213f82caa311f09c7e12d 100644 (file)
@@ -78,6 +78,11 @@ public:
                                const wxRect& rect,
                                int flags = 0);
 
+    virtual void DrawCheckButton(wxWindow *win,
+                                 wxDC& dc,
+                                 const wxRect& rect,
+                                 int flags = 0);
+                                 
     virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
 
     virtual wxRendererVersion GetVersion() const
@@ -395,6 +400,30 @@ wxRendererGeneric::DrawDropArrow(wxWindow *win,
     dc.DrawPolygon(WXSIZEOF(pt), pt, rect.x, rect.y);
 }
 
+void 
+wxRendererGeneric::DrawCheckButton(wxWindow *win,
+                                   wxDC& dc,
+                                   const wxRect& rect,
+                                   int flags)
+{
+    if (flags & wxCONTROL_DISABLED)
+        dc.SetPen( *wxGREY_PEN );
+    else
+        dc.SetPen( *wxBLACK_PEN );
+    dc.SetBrush( *wxTRANSPARENT_BRUSH );
+    wxRect my_rect = rect;
+    dc.DrawRectangle( my_rect );
+    if (flags & wxCONTROL_CHECKED)
+    {
+        my_rect.x += 2;
+        my_rect.y += 2;
+        my_rect.width -= 4;
+        my_rect.height -= 4;
+        dc.DrawLine( my_rect.x, my_rect.y, my_rect.x+my_rect.width, my_rect.y+my_rect.height );
+        dc.DrawLine( my_rect.x+my_rect.width, my_rect.y, my_rect.x, my_rect.y+my_rect.height );
+    }
+}
+
 // ----------------------------------------------------------------------------
 // A module to allow cleanup of generic renderer.
 // ----------------------------------------------------------------------------
index b60fac28456f5c15fac521be1ace22360d6000f1..e4a3f236b76a9af070eaf13afa6b6bd3df1cc030 100644 (file)
@@ -78,6 +78,11 @@ public:
                                const wxRect& rect,
                                int flags = 0);
 
+    virtual void DrawCheckButton(wxWindow *win,
+                                 wxDC& dc,
+                                 const wxRect& rect,
+                                 int flags = 0);
+                                 
     virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
 
 private:
@@ -88,6 +93,9 @@ private:
 
     // used by DrawTreeItemButton()
     static GtkWidget *GetTreeWidget();
+    
+    // used by DrawCheckButton()
+    static GtkWidget *GetCheckButtonWidget();
 };
 
 // ============================================================================
@@ -124,6 +132,24 @@ wxRendererGTK::GetButtonWidget()
     return s_button;
 }
 
+GtkWidget *
+wxRendererGTK::GetCheckButtonWidget()
+{
+    static GtkWidget *s_button = NULL;
+    static GtkWidget *s_window = NULL;
+
+    if ( !s_button )
+    {
+        s_window = gtk_window_new( GTK_WINDOW_POPUP );
+        gtk_widget_realize( s_window );
+        s_button = gtk_check_button_new();
+        gtk_container_add( GTK_CONTAINER(s_window), s_button );
+        gtk_widget_realize( s_button );
+    }
+
+    return s_button;
+}
+
 GtkWidget *
 wxRendererGTK::GetTreeWidget()
 {
@@ -431,3 +457,38 @@ wxRendererGTK::DrawComboBoxDropButton(wxWindow *win,
 
 }
 
+void 
+wxRendererGTK::DrawCheckButton(wxWindow *win,
+                                 wxDC& dc,
+                                 const wxRect& rect,
+                                 int flags )
+{
+    GtkWidget *button = GetCheckButtonWidget();
+
+    // for reason why we do this, see DrawDropArrow
+    wxWindowDC& wdc = (wxWindowDC&)dc;
+    wxASSERT ( wdc.IsKindOf(CLASSINFO(wxWindowDC)) );
+    
+    GtkStateType state;
+
+    if ( flags & wxCONTROL_PRESSED )
+        state = GTK_STATE_ACTIVE;
+    else if ( flags & wxCONTROL_DISABLED )
+        state = GTK_STATE_INSENSITIVE;
+    else if ( flags & wxCONTROL_CURRENT )
+        state = GTK_STATE_PRELIGHT;
+    else
+        state = GTK_STATE_NORMAL;
+    
+    gtk_paint_check
+    (
+        button->style,
+        wdc.m_window,
+        state,
+        flags & wxCONTROL_CHECKED ? GTK_SHADOW_IN : GTK_SHADOW_OUT,
+        NULL,
+        button,
+        "cellcheck",
+        rect.x, rect.y, 13, 13
+    );
+}