// Purpose: generic wxInfoBar implementation
// Author: Vadim Zeitlin
// Created: 2009-07-28
-// RCS-ID: $Id: wxhead.cpp,v 1.10 2009-06-29 10:23:04 zeitlin Exp $
+// RCS-ID: $Id$
// Copyright: (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#if wxUSE_INFOBAR
+#include "wx/infobar.h"
+
#ifndef WX_PRECOMP
#include "wx/bmpbuttn.h"
#include "wx/button.h"
+ #include "wx/dcmemory.h"
#include "wx/settings.h"
#include "wx/statbmp.h"
#include "wx/stattext.h"
+ #include "wx/sizer.h"
#endif // WX_PRECOMP
-#include "wx/infobar.h"
-
#include "wx/artprov.h"
#include "wx/renderer.h"
#include "wx/scopeguard.h"
-#include "wx/sizer.h"
BEGIN_EVENT_TABLE(wxInfoBarGeneric, wxInfoBarBase)
EVT_BUTTON(wxID_ANY, wxInfoBarGeneric::OnButton)
m_text = NULL;
m_button = NULL;
- m_showEffect = wxSHOW_EFFECT_SLIDE_TO_BOTTOM;
- m_hideEffect = wxSHOW_EFFECT_SLIDE_TO_TOP;
+ m_showEffect =
+ m_hideEffect = wxSHOW_EFFECT_MAX;
// use default effect duration
m_effectDuration = 0;
return true;
}
+wxInfoBarGeneric::BarPlacement wxInfoBarGeneric::GetBarPlacement() const
+{
+ wxSizer * const sizer = GetContainingSizer();
+ if ( !sizer )
+ return BarPlacement_Unknown;
+
+ // FIXME-VC6: can't compare "const wxInfoBarGeneric *" and "wxWindow *",
+ // so need this workaround
+ wxWindow * const self = const_cast<wxInfoBarGeneric *>(this);
+ const wxSizerItemList& siblings = sizer->GetChildren();
+ if ( siblings.GetFirst()->GetData()->GetWindow() == self )
+ return BarPlacement_Top;
+ else if ( siblings.GetLast()->GetData()->GetWindow() == self )
+ return BarPlacement_Bottom;
+ else
+ return BarPlacement_Unknown;
+}
+
+wxShowEffect wxInfoBarGeneric::GetShowEffect() const
+{
+ if ( m_showEffect != wxSHOW_EFFECT_MAX )
+ return m_showEffect;
+
+ switch ( GetBarPlacement() )
+ {
+ case BarPlacement_Top:
+ return wxSHOW_EFFECT_SLIDE_TO_BOTTOM;
+
+ case BarPlacement_Bottom:
+ return wxSHOW_EFFECT_SLIDE_TO_TOP;
+
+ default:
+ wxFAIL_MSG( "unknown info bar placement" );
+ // fall through
+
+ case BarPlacement_Unknown:
+ return wxSHOW_EFFECT_NONE;
+ }
+}
+
+wxShowEffect wxInfoBarGeneric::GetHideEffect() const
+{
+ if ( m_hideEffect != wxSHOW_EFFECT_MAX )
+ return m_hideEffect;
+
+ switch ( GetBarPlacement() )
+ {
+ case BarPlacement_Top:
+ return wxSHOW_EFFECT_SLIDE_TO_TOP;
+
+ case BarPlacement_Bottom:
+ return wxSHOW_EFFECT_SLIDE_TO_BOTTOM;
+
+ default:
+ wxFAIL_MSG( "unknown info bar placement" );
+ // fall through
+
+ case BarPlacement_Unknown:
+ return wxSHOW_EFFECT_NONE;
+ }
+}
+
void wxInfoBarGeneric::UpdateParent()
{
- wxWindow * const parent = wxGetTopLevelParent(GetParent());
+ wxWindow * const parent = GetParent();
parent->Layout();
}
void wxInfoBarGeneric::DoHide()
{
- HideWithEffect(m_hideEffect, m_effectDuration);
+ HideWithEffect(GetHideEffect(), GetEffectDuration());
UpdateParent();
}
// finally do really show the window.
- ShowWithEffect(m_showEffect, m_effectDuration);
+ ShowWithEffect(GetShowEffect(), GetEffectDuration());
}
void wxInfoBarGeneric::ShowMessage(const wxString& msg, int flags)