X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/74ab5f5b9df928c75c119a2c00b0d2092caa49f1..69fdd54eeb09e2a2dcc9907804d8449499d88aba:/src/generic/collpaneg.cpp diff --git a/src/generic/collpaneg.cpp b/src/generic/collpaneg.cpp index ae5f0cde3c..db24dbd952 100644 --- a/src/generic/collpaneg.cpp +++ b/src/generic/collpaneg.cpp @@ -69,17 +69,22 @@ bool wxGenericCollapsiblePane::Create(wxWindow *parent, m_strLabel = label; +#ifdef __WXMAC__ + // on Mac we use the disclosure triangle + // we need a light gray line above and below, lets approximate with the frame + m_pStaticLine = NULL; + m_pButton = new wxDisclosureTriangle( this, wxID_ANY, GetBtnLabel(), + wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER ); + m_pButton->SetBackgroundColour( wxColour( 221, 226, 239 ) ); + m_sz = new wxBoxSizer(wxHORIZONTAL); + // m_sz->Add(4,4); where shall we put it? + m_sz->Add( m_pButton, 1); +#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); -#ifdef __WXMAC__ - // on Mac we put the static libe above the button - m_sz = new wxBoxSizer(wxVERTICAL); - m_sz->Add(m_pStaticLine, 0, wxALL|wxGROW, GetBorder()); - m_sz->Add(m_pButton, 0, wxLEFT|wxRIGHT|wxBOTTOM, GetBorder()); -#else // 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()); @@ -88,7 +93,7 @@ bool wxGenericCollapsiblePane::Create(wxWindow *parent, // FIXME: at least under wxCE and wxGTK1 the background is black if we don't do // this, no idea why... -#if defined(__WXWINCE__) || (defined(__WXGTK__) && !defined(__WXGTK20__)) +#if defined(__WXWINCE__) || defined(__WXGTK__) SetBackgroundColour(parent->GetBackgroundColour()); #endif @@ -104,14 +109,14 @@ bool wxGenericCollapsiblePane::Create(wxWindow *parent, wxGenericCollapsiblePane::~wxGenericCollapsiblePane() { - if (m_pButton && m_pStaticLine && m_sz) - { + if (m_pButton) m_pButton->SetContainingSizer(NULL); + + if (m_pStaticLine) m_pStaticLine->SetContainingSizer(NULL); - - // our sizer is not deleted automatically since we didn't use SetSizer()! - wxDELETE(m_sz); - } + + // our sizer is not deleted automatically since we didn't use SetSizer()! + wxDELETE(m_sz); } wxSize wxGenericCollapsiblePane::DoGetBestSize() const @@ -131,7 +136,12 @@ wxSize wxGenericCollapsiblePane::DoGetBestSize() const wxString wxGenericCollapsiblePane::GetBtnLabel() const { + // on mac the triangle indicates the state, no string change +#ifdef __WXMAC__ + return m_strLabel; +#else return m_strLabel + (IsCollapsed() ? wxT(" >>") : wxT(" <<")); +#endif } void wxGenericCollapsiblePane::OnStateChange(const wxSize& sz) @@ -215,8 +225,13 @@ void wxGenericCollapsiblePane::Collapse(bool collapse) m_pPane->Show(!collapse); // update button label +#ifdef __WXMAC__ + m_pButton->SetOpen( !collapse ); +#else // NB: this must be done after updating our "state" m_pButton->SetLabel(GetBtnLabel()); +#endif + OnStateChange(GetBestSize()); } @@ -224,16 +239,25 @@ void wxGenericCollapsiblePane::Collapse(bool collapse) void wxGenericCollapsiblePane::SetLabel(const wxString &label) { m_strLabel = label; +#ifdef __WXMAC__ + m_pButton->SetLabel(GetBtnLabel()); +#else m_pButton->SetLabel(GetBtnLabel()); m_pButton->SetInitialSize(); +#endif Layout(); } bool wxGenericCollapsiblePane::Layout() { +#ifdef __WXMAC__ + if (!m_pButton || !m_pPane || !m_sz) + return false; // we need to complete the creation first! +#else if (!m_pButton || !m_pStaticLine || !m_pPane || !m_sz) return false; // we need to complete the creation first! +#endif wxSize oursz(GetSize()); @@ -259,8 +283,6 @@ int wxGenericCollapsiblePane::GetBorder() const { #if defined( __WXMAC__ ) return 6; -#elif defined(__WXGTK20__) - return 3; #elif defined(__WXMSW__) wxASSERT(m_pButton); return m_pButton->ConvertDialogToPixels(wxSize(2, 0)).x;