no message

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4015 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Webster
1999-10-15 21:00:38 +00:00
parent 63d963a189
commit 409c9842c7
18 changed files with 1453 additions and 410 deletions

View File

@@ -1,32 +1,39 @@
/////////////////////////////////////////////////////////////////////////////
// Name: slider.cpp
// Purpose: wxSlider
// Author: AUTHOR
// Author: David Webster
// Modified by:
// Created: ??/??/98
// Created: 10/15/99
// RCS-ID: $Id$
// Copyright: (c) AUTHOR
// Licence: wxWindows licence
// Copyright: (c) David Webster
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation "slider.h"
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include <stdio.h>
#include <wx/utils.h>
#include <wx/brush.h>
#endif
#include "wx/slider.h"
#include "wx/os2/private.h"
#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxSlider, wxControl)
BEGIN_EVENT_TABLE(wxSlider, wxControl)
END_EVENT_TABLE()
#endif
// Slider
wxSlider::wxSlider()
{
m_staticValue = 0;
m_staticMin = 0;
m_staticMax = 0;
m_pageSize = 1;
m_lineSize = 1;
m_rangeMax = 0;
@@ -65,8 +72,90 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id,
return FALSE;
}
bool wxSlider::OS2OnScroll(int WXUNUSED(orientation), WXWORD wParam,
WXWORD pos, WXHWND control)
{
int position = 0; // Dummy - not used in this mode
int nScrollInc;
wxEventType scrollEvent = wxEVT_NULL;
// TODO:
/*
switch ( wParam )
{
case SB_TOP:
nScrollInc = m_rangeMax - position;
scrollEvent = wxEVT_SCROLL_TOP;
break;
case SB_BOTTOM:
nScrollInc = - position;
scrollEvent = wxEVT_SCROLL_BOTTOM;
break;
case SB_LINEUP:
nScrollInc = - GetLineSize();
scrollEvent = wxEVT_SCROLL_LINEUP;
break;
case SB_LINEDOWN:
nScrollInc = GetLineSize();
scrollEvent = wxEVT_SCROLL_LINEDOWN;
break;
case SB_PAGEUP:
nScrollInc = -GetPageSize();
scrollEvent = wxEVT_SCROLL_PAGEUP;
break;
case SB_PAGEDOWN:
nScrollInc = GetPageSize();
scrollEvent = wxEVT_SCROLL_PAGEDOWN;
break;
case SB_THUMBTRACK:
case SB_THUMBPOSITION:
#ifdef __WIN32__
nScrollInc = (signed short)pos - position;
#else // Win16
nScrollInc = pos - position;
#endif // Win32/16
scrollEvent = wxEVT_SCROLL_THUMBTRACK;
break;
default:
nScrollInc = 0;
}
if ( nScrollInc == 0 )
{
// no event...
return FALSE;
}
int newPos = (int)::SendMessage((HWND) control, TBM_GETPOS, 0, 0);
if ( (newPos < GetMin()) || (newPos > GetMax()) )
{
// out of range - but we did process it
return TRUE;
}
*/
SetValue(newPos);
wxScrollEvent event(scrollEvent, m_windowId);
event.SetPosition(newPos);
event.SetEventObject( this );
GetEventHandler()->ProcessEvent(event);
wxCommandEvent cevent( wxEVT_COMMAND_SLIDER_UPDATED, GetId() );
cevent.SetEventObject( this );
return GetEventHandler()->ProcessEvent( cevent );
}
wxSlider::~wxSlider()
{
// TODO:
}
int wxSlider::GetValue() const
@@ -90,9 +179,167 @@ void wxSlider::GetPosition(int *x, int *y) const
// TODO
}
void wxSlider::SetSize(int x, int y, int width, int height, int sizeFlags)
// TODO one day, make sense of all this horros and replace it with a readable
// DoGetBestSize()
void wxSlider::DoSetSize(int x, int y, int width, int height, int sizeFlags)
{
// TODO
int x1 = x;
int y1 = y;
int w1 = width;
int h1 = height;
int currentX, currentY;
GetPosition(&currentX, &currentY);
if (x == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
x1 = currentX;
if (y == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
y1 = currentY;
// TODO:
/*
AdjustForParentClientOrigin(x1, y1, sizeFlags);
wxChar buf[300];
int x_offset = x;
int y_offset = y;
int cx; // slider,min,max sizes
int cy;
int cyf;
wxGetCharSize(GetHWND(), &cx, &cy, & this->GetFont());
if ((m_windowStyle & wxSL_VERTICAL) != wxSL_VERTICAL)
{
if ( m_windowStyle & wxSL_LABELS )
{
int min_len = 0;
GetWindowText((HWND) m_staticMin, buf, 300);
GetTextExtent(buf, &min_len, &cyf,NULL,NULL, & this->GetFont());
int max_len = 0;
GetWindowText((HWND) m_staticMax, buf, 300);
GetTextExtent(buf, &max_len, &cyf,NULL,NULL, & this->GetFont());
if (m_staticValue)
{
int new_width = (int)(wxMax(min_len, max_len));
int valueHeight = (int)cyf;
#ifdef __WIN32__
// For some reason, under Win95, the text edit control has
// a lot of space before the first character
new_width += 3*cx;
#endif
// The height needs to be a bit bigger under Win95 if using native
// 3D effects.
valueHeight = (int) (valueHeight * 1.5) ;
MoveWindow((HWND) m_staticValue, x_offset, y_offset, new_width, valueHeight, TRUE);
x_offset += new_width + cx;
}
MoveWindow((HWND) m_staticMin, x_offset, y_offset, (int)min_len, cy, TRUE);
x_offset += (int)(min_len + cx);
int slider_length = (int)(w1 - x_offset - max_len - cx);
int slider_height = h1;
if (slider_height < 0 )
slider_height = 20;
// Slider must have a minimum/default length/height
if (slider_length < 100)
slider_length = 100;
MoveWindow(GetHwnd(), x_offset, y_offset, slider_length, slider_height, TRUE);
x_offset += slider_length + cx;
MoveWindow((HWND) m_staticMax, x_offset, y_offset, (int)max_len, cy, TRUE);
}
else
{
// No labels
// If we're prepared to use the existing size, then...
if (width == -1 && height == -1 && ((sizeFlags & wxSIZE_AUTO) != wxSIZE_AUTO))
{
GetSize(&w1, &h1);
}
if ( w1 < 0 )
w1 = 200;
if ( h1 < 0 )
h1 = 20;
MoveWindow(GetHwnd(), x1, y1, w1, h1, TRUE);
}
}
else
{
if ( m_windowStyle & wxSL_LABELS )
{
int min_len;
GetWindowText((HWND) m_staticMin, buf, 300);
GetTextExtent(buf, &min_len, &cyf,NULL,NULL, & this->GetFont());
int max_len;
GetWindowText((HWND) m_staticMax, buf, 300);
GetTextExtent(buf, &max_len, &cyf,NULL,NULL, & this->GetFont());
if (m_staticValue)
{
int new_width = (int)(wxMax(min_len, max_len));
int valueHeight = (int)cyf;
//// Suggested change by George Tasker - remove this block...
#ifdef __WIN32__
// For some reason, under Win95, the text edit control has
// a lot of space before the first character
new_width += 3*cx;
#endif
... and replace with following line:
new_width += cx;
// The height needs to be a bit bigger under Win95 if using native
// 3D effects.
valueHeight = (int) (valueHeight * 1.5) ;
MoveWindow((HWND) m_staticValue, x_offset, y_offset, new_width, valueHeight, TRUE);
y_offset += valueHeight;
}
MoveWindow((HWND) m_staticMin, x_offset, y_offset, (int)min_len, cy, TRUE);
y_offset += cy;
int slider_length = (int)(h1 - y_offset - cy - cy);
int slider_width = w1;
if (slider_width < 0 )
slider_width = 20;
// Slider must have a minimum/default length
if (slider_length < 100)
slider_length = 100;
MoveWindow(GetHwnd(), x_offset, y_offset, slider_width, slider_length, TRUE);
y_offset += slider_length;
MoveWindow((HWND) m_staticMax, x_offset, y_offset, (int)max_len, cy, TRUE);
}
else
{
// No labels
// If we're prepared to use the existing size, then...
if (width == -1 && height == -1 && ((sizeFlags & wxSIZE_AUTO) != wxSIZE_AUTO))
{
GetSize(&w1, &h1);
}
if ( w1 < 0 )
w1 = 20;
if ( h1 < 0 )
h1 = 200;
MoveWindow(GetHwnd(), x1, y1, w1, h1, TRUE);
}
}
*/
}
void wxSlider::SetRange(int minValue, int maxValue)
@@ -103,6 +350,29 @@ void wxSlider::SetRange(int minValue, int maxValue)
// TODO
}
WXHBRUSH wxSlider::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
{
// TODO:
/*
if ( nCtlColor == CTLCOLOR_SCROLLBAR )
return 0;
// Otherwise, it's a static
if (GetParent()->GetTransparentBackground())
SetBkMode((HDC) pDC, TRANSPARENT);
else
SetBkMode((HDC) pDC, OPAQUE);
::SetBkColor((HDC) pDC, RGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue()));
::SetTextColor((HDC) pDC, RGB(GetForegroundColour().Red(), GetForegroundColour().Green(), GetForegroundColour().Blue()));
wxBrush *backgroundBrush = wxTheBrushList->FindOrCreateBrush(GetBackgroundColour(), wxSOLID);
return (WXHBRUSH) backgroundBrush->GetResourceHandle();
*/
return (WXHBRUSH)0;
}
// For trackbars only
void wxSlider::SetTickFreq(int n, int pos)
{
@@ -176,6 +446,11 @@ void wxSlider::SetTick(int tickPos)
// TODO
}
bool wxSlider::ContainsHWND(WXHWND hWnd) const
{
return ( hWnd == GetStaticMin() || hWnd == GetStaticMax() || hWnd == GetEditValue() );
}
void wxSlider::Command (wxCommandEvent & event)
{
SetValue (event.GetInt());