// Created: 20.08.00
// RCS-ID: $Id$
// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "univscrolbar.h"
#endif
IMPLEMENT_DYNAMIC_CLASS(wxScrollBar, wxControl)
BEGIN_EVENT_TABLE(wxScrollBar, wxScrollBarBase)
- EVT_IDLE(wxScrollBar::OnIdle)
END_EVENT_TABLE()
// ----------------------------------------------------------------------------
// the scrollbars never have the border
style &= ~wxBORDER_MASK;
- if ( !wxControl::Create(parent, id, pos, size, style, wxDefaultValidator, name) )
+ if ( !wxControl::Create(parent, id, pos, size, style, validator, name) )
return FALSE;
SetBestSize(size);
{
}
-bool wxScrollBar::AcceptsFocus() const
+// ----------------------------------------------------------------------------
+// misc accessors
+// ----------------------------------------------------------------------------
+
+bool wxScrollBar::IsStandalone() const
{
- if (!wxWindow::AcceptsFocus()) return FALSE;
-
- wxWindow *parent = (wxWindow*) GetParent();
-
- if (parent)
+ wxWindow *parent = GetParent();
+ if ( !parent )
{
- if ((parent->GetScrollbar( wxHORIZONTAL ) == this) ||
- (parent->GetScrollbar( wxVERTICAL ) == this))
- {
- return FALSE;
- }
+ return TRUE;
}
-
- return TRUE;
+
+ return (parent->GetScrollbar(wxHORIZONTAL) != this) &&
+ (parent->GetScrollbar(wxVERTICAL) != this);
+}
+
+bool wxScrollBar::AcceptsFocus() const
+{
+ // the window scrollbars never accept focus
+ return wxScrollBarBase::AcceptsFocus() && IsStandalone();
}
// ----------------------------------------------------------------------------
// drawing
// ----------------------------------------------------------------------------
-void wxScrollBar::OnIdle(wxIdleEvent& event)
+void wxScrollBar::OnInternalIdle()
{
UpdateThumb();
- event.Skip();
+ wxControl::OnInternalIdle();
}
void wxScrollBar::UpdateThumb()
bool changed = m_thumbPos != thumbOld;
if ( notify || changed )
{
+ if ( IsStandalone() )
+ {
+ // we should generate EVT_SCROLL events for the standalone
+ // scrollbars and not the EVT_SCROLLWIN ones
+ //
+ // NB: we assume that scrollbar events are sequentially numbered
+ // but this should be ok as other code relies on this as well
+ scrollType += wxEVT_SCROLL_TOP - wxEVT_SCROLLWIN_TOP;
+ }
+
wxScrollWinEvent event(scrollType, m_thumbPos,
IsVertical() ? wxVERTICAL : wxHORIZONTAL);
event.SetEventObject(this);