]> git.saurik.com Git - wxWidgets.git/commitdiff
Improve wxCollapsiblePane appearance under OS X.
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 16 Oct 2009 16:25:43 +0000 (16:25 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 16 Oct 2009 16:25:43 +0000 (16:25 +0000)
By default, don't use border in wxDisclosureTriangle because the native
applications do not. However do honour wxBORDER_XXX style if specified in case
this becomes useful in the future (this required no effort as the code was
already there for bitmap buttons and just had to be extracted into a reusable
function).

Don't expand the disclosure triangle in wxCollapsiblePane sizer, as this
resulted in the text being centered instead of remaining left-aligned.

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

include/wx/osx/button.h
src/generic/collpaneg.cpp
src/osx/cocoa/button.mm

index 8959d9b14200c3a1d3de8c7363bbf035b6b7c78c..75108eeb248a5f8d43a77a31b5b8262cf96721be 100644 (file)
@@ -89,7 +89,7 @@ public:
              const wxString& label = wxEmptyString,
              const wxPoint& pos = wxDefaultPosition,
              const wxSize& size = wxDefaultSize,
-             long style = 0,
+             long style = wxBORDER_NONE,
              const wxValidator& validator = wxDefaultValidator,
              const wxString& name = wxButtonNameStr)
     {
@@ -101,7 +101,7 @@ public:
                 const wxString& label = wxEmptyString,
                 const wxPoint& pos = wxDefaultPosition,
                 const wxSize& size = wxDefaultSize,
-                long style = 0,
+                long style = wxBORDER_NONE,
                 const wxValidator& validator = wxDefaultValidator,
                 const wxString& name = wxButtonNameStr);
 
index b032263be6220f2c48b37edd658aa58431db4445..894345be6b0cf238e9282895450c9467a4004bf2 100644 (file)
@@ -87,22 +87,22 @@ bool wxGenericCollapsiblePane::Create(wxWindow *parent,
 
     m_strLabel = label;
 
+    // sizer containing the expand button and possibly a static line
+    m_sz = new wxBoxSizer(wxHORIZONTAL);
+
 #if defined( __WXMAC__ ) && !defined(__WXUNIVERSAL__)
-    // on Mac we use the disclosure triangle
+    // on Mac we use the special disclosure triangle button
     m_pStaticLine = NULL;
-    m_pButton = new wxDisclosureTriangle(this, wxID_ANY, GetBtnLabel(),
-                                         wxDefaultPosition, wxDefaultSize,
-                                         style & wxBORDER_MASK);
-    m_sz = new wxBoxSizer(wxHORIZONTAL);
-    m_sz->Add(m_pButton, wxSizerFlags(1).Expand());
+    m_pButton = new wxDisclosureTriangle(this, wxID_ANY, GetBtnLabel());
+    m_sz->Add(m_pButton);
 #else
     // create children and lay them out using a wxBoxSizer
     // (so that we automatically get RTL features)
     m_pButton = new wxButton(this, wxID_ANY, GetBtnLabel(), wxPoint(0, 0),
                              wxDefaultSize, wxBU_EXACTFIT);
     m_pStaticLine = new wxStaticLine(this, wxID_ANY);
+
     // on other platforms we put the static line and the button horizontally
-    m_sz = new wxBoxSizer(wxHORIZONTAL);
     m_sz->Add(m_pButton, 0, wxLEFT|wxTOP|wxBOTTOM, GetBorder());
     m_sz->Add(m_pStaticLine, 1, wxALIGN_CENTER|wxLEFT|wxRIGHT, GetBorder());
 #endif
index 9dbcbee2da4549c9cb257031c700c0305a572002..355b77707a8440db15050edad69986e82f445544 100644 (file)
@@ -130,6 +130,26 @@ private:
     }
 };
 
+// set bezel style depending on the wxBORDER_XXX flags specified by the style
+void SetBezelStyleFromBorderFlags(NSButton *v, long style)
+{
+    if ( style & wxBORDER_NONE )
+    {
+        [v setBezelStyle:NSShadowlessSquareBezelStyle];
+        [v setBordered:NO];
+    }
+    else // we do have a border
+    {
+        // see trac #11128 for a thorough discussion
+        if ( (style & wxBORDER_MASK) == wxBORDER_RAISED )
+            [v setBezelStyle:NSRegularSquareBezelStyle];
+        else if ( (style & wxBORDER_MASK) == wxBORDER_SUNKEN )
+            [v setBezelStyle:NSSmallSquareBezelStyle];
+        else
+            [v setBezelStyle:NSShadowlessSquareBezelStyle];
+    }
+}
+
 } // anonymous namespace
 
 wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer,
@@ -167,8 +187,8 @@ void wxWidgetCocoaImpl::SetDefaultButton( bool isDefault )
 
 void wxWidgetCocoaImpl::PerformClick()
 {
-    if ([m_osxView isKindOfClass:[NSControl class]]) 
-        [(NSControl*)m_osxView performClick:nil]; 
+    if ([m_osxView isKindOfClass:[NSControl class]])
+        [(NSControl*)m_osxView performClick:nil];
 }
 
 #if wxUSE_BMPBUTTON
@@ -184,33 +204,18 @@ wxWidgetImplType* wxWidgetImpl::CreateBitmapButton( wxWindowMac* wxpeer,
 {
     NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
     wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
-    
-    // trying to get as close as possible to flags
-    if ( style & wxBORDER_NONE )
-    {
-        [v setBezelStyle:NSShadowlessSquareBezelStyle];
-        [v setBordered:NO]; 
-    }
-    else
-    {
-        // see trac #11128 for a thorough discussion
-        if ( (style & wxBORDER_MASK) == wxBORDER_RAISED )
-            [v setBezelStyle:NSRegularSquareBezelStyle];
-        else if ( (style & wxBORDER_MASK) == wxBORDER_SUNKEN )
-            [v setBezelStyle:NSSmallSquareBezelStyle];
-        else
-            [v setBezelStyle:NSShadowlessSquareBezelStyle];
-    }
-    
+
+    SetBezelStyleFromBorderFlags(v, style);
+
     if (bitmap.Ok())
         [v setImage:bitmap.GetNSImage() ];
-    
+
     [v setButtonType:NSMomentaryPushInButton];
     wxWidgetCocoaImpl* c = new wxButtonCocoaImpl( wxpeer, v );
     return c;
 }
 
-#endif
+#endif // wxUSE_BMPBUTTON
 
 //
 // wxDisclosureButton implementation
@@ -262,7 +267,6 @@ static const char * disc_triangle_xpm[] = {
 - (id) initWithFrame:(NSRect) frame
 {
     self = [super initWithFrame:frame];
-    [self setBezelStyle:NSSmallSquareBezelStyle];
     isOpen = NO;
     [self setImagePosition:NSImageLeft];
     [self updateImage];
@@ -348,16 +352,19 @@ public :
 
 wxWidgetImplType* wxWidgetImpl::CreateDisclosureTriangle( wxWindowMac* wxpeer,
                                     wxWindowMac* WXUNUSED(parent),
-                                    wxWindowID WXUNUSED(id),
+                                    wxWindowID WXUNUSED(winid),
                                     const wxString& label,
                                     const wxPoint& pos,
                                     const wxSize& size,
-                                    long WXUNUSED(style),
+                                    long style,
                                     long WXUNUSED(extraStyle))
 {
     NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
     wxDisclosureNSButton* v = [[wxDisclosureNSButton alloc] initWithFrame:r];
-    [v setTitle:wxCFStringRef( label).AsNSString()];
-    wxDisclosureTriangleCocoaImpl* c = new wxDisclosureTriangleCocoaImpl( wxpeer, v );
-    return c;
+    if ( !label.empty() )
+        [v setTitle:wxCFStringRef(label).AsNSString()];
+
+    SetBezelStyleFromBorderFlags(v, style);
+
+    return new wxDisclosureTriangleCocoaImpl( wxpeer, v );
 }