wxSizeEvent for wxPalmTLW. wxScrollEvent for wxSlider.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31821 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Włodzimierz Skiba 2005-02-07 15:20:01 +00:00
parent 95b838bed2
commit 721a962699
4 changed files with 161 additions and 17 deletions

View File

@ -20,7 +20,10 @@
class WXDLLEXPORT wxSlider : public wxSliderBase
{
public:
wxSlider();
wxSlider()
{
Init();
}
wxSlider(wxWindow *parent, wxWindowID id,
int value, int minValue, int maxValue,
@ -30,6 +33,7 @@ public:
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxSliderNameStr)
{
Init();
Create(parent, id, value, minValue, maxValue, pos, size, style, validator, name);
}
@ -53,7 +57,7 @@ public:
// For trackbars only
void SetTickFreq(int n, int pos);
int GetTickFreq() const { return GetPageSize(); }
int GetTickFreq() const;
void SetPageSize(int pageSize);
int GetPageSize() const;
void ClearSel();
@ -72,10 +76,18 @@ public:
// send a notification event, return true if processed
bool SendUpdatedEvent();
bool SendScrollEvent(EventType* event);
protected:
virtual wxSize DoGetBestSize() const;
private:
void Init();
int m_oldPos;
int m_lineSize;
DECLARE_DYNAMIC_CLASS_NO_COPY(wxSlider)
};

View File

@ -84,8 +84,10 @@ public:
// interface to native frame structure
FormType *GetForm() const;
// handle controls
// handle native events
bool HandleControlSelect(EventType* event);
bool HandleControlRepeat(EventType* event);
bool HandleSize(EventType* event);
protected:
// common part of all ctors

View File

@ -98,8 +98,10 @@ IMPLEMENT_DYNAMIC_CLASS(wxSlider, wxControl)
#endif
// Slider
wxSlider::wxSlider()
void wxSlider::Init()
{
m_oldPos = 0;
m_lineSize = 1;
}
bool wxSlider::Create(wxWindow *parent, wxWindowID id,
@ -109,6 +111,16 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id,
const wxValidator& validator,
const wxString& name)
{
// wxSL_AUTOTICKS is ignored - always on
// wxSL_LABELS is ignored - always off
// wxSL_LEFT is ignored - always off
// wxSL_RIGHT is ignored - always off
// wxSL_TOP is ignored - always off
// wxSL_SELRANGE is ignored - always off
// wxSL_INVERSE is ignored - always off
// wxSL_VERTICAL is impossible in native form
wxCHECK_MSG(!(style & wxSL_VERTICAL), false, _T("non vertical slider on PalmOS"));
if(!wxControl::Create(parent, id, pos, size, style, validator, name))
return false;
@ -116,6 +128,8 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id,
if(form==NULL)
return false;
m_oldPos = value;
SliderControlType *slider = CtlNewSliderControl (
(void **)&form,
GetId(),
@ -187,68 +201,93 @@ int wxSlider::GetValue() const
void wxSlider::SetValue(int value)
{
SetIntValue(value);
m_oldPos = value;
}
wxSize wxSlider::DoGetBestSize() const
{
return wxSize(0,0);
// 15 is taken as used in one of official samples
// 45 is dummy height tripled, any idea what's better ?
return wxSize(45,15);
}
void wxSlider::SetRange(int minValue, int maxValue)
void wxSlider::SetRange(int WXUNUSED(minValue), int WXUNUSED(maxValue))
{
// unsupported feature
}
void wxSlider::SetTickFreq(int n, int pos)
void wxSlider::SetTickFreq(int WXUNUSED(n), int WXUNUSED(pos))
{
// unsupported feature
}
void wxSlider::SetPageSize(int pageSize)
{
ControlType *control = (ControlType *)GetObjectPtr();
if(control==NULL)
return;
uint16_t val = pageSize;
CtlSetSliderValues(control, NULL, NULL, &val, NULL);
}
void wxSlider::ClearSel()
{
// unsupported feature
}
void wxSlider::ClearTicks()
{
// unsupported feature
}
void wxSlider::SetLineSize(int lineSize)
{
m_lineSize = lineSize;
}
int wxSlider::GetLineSize() const
{
return 0;
return m_lineSize;
}
int wxSlider::GetSelEnd() const
{
return 0;
// unsupported feature
return GetValue();
}
int wxSlider::GetSelStart() const
{
return 0;
// unsupported feature
return GetValue();
}
void wxSlider::SetSelection(int minPos, int maxPos)
void wxSlider::SetSelection(int WXUNUSED(minPos), int WXUNUSED(maxPos))
{
// unsupported feature
}
void wxSlider::SetThumbLength(int len)
void wxSlider::SetThumbLength(int WXUNUSED(len))
{
// unsupported feature
}
int wxSlider::GetThumbLength() const
{
// unsupported feature
return 0;
}
void wxSlider::SetTick(int tickPos)
int wxSlider::GetTickFreq() const
{
// unsupported feature
return GetPageSize();
}
void wxSlider::SetTick(int WXUNUSED(tickPos))
{
// unsupported feature
}
// ----------------------------------------------------------------------------
@ -257,12 +296,69 @@ void wxSlider::SetTick(int tickPos)
bool wxSlider::SendUpdatedEvent()
{
m_oldPos = GetValue();
// first track event
wxScrollEvent eventWxTrack(wxEVT_SCROLL_THUMBRELEASE, GetId());
eventWxTrack.SetPosition(m_oldPos);
eventWxTrack.SetEventObject(this);
GetEventHandler()->ProcessEvent(eventWxTrack);
// then scroll event
wxCommandEvent event(wxEVT_COMMAND_SLIDER_UPDATED, GetId());
event.SetEventObject(this);
event.SetInt(GetValue());
event.SetInt(m_oldPos);
return ProcessCommand(event);
}
bool wxSlider::SendScrollEvent(EventType* event)
{
wxEventType scrollEvent;
int newPos = event->data.ctlRepeat.value;
if ( newPos == GetMax() )
{
scrollEvent = wxEVT_SCROLL_TOP;
}
else if ( newPos == GetMin() )
{
scrollEvent = wxEVT_SCROLL_BOTTOM;
}
else if ( newPos == ( m_oldPos + GetLineSize() ) )
{
scrollEvent = wxEVT_SCROLL_LINEUP;
}
else if ( newPos == ( m_oldPos - GetLineSize() ) )
{
scrollEvent = wxEVT_SCROLL_LINEDOWN;
}
else if ( newPos == ( m_oldPos + GetPageSize() ) )
{
scrollEvent = wxEVT_SCROLL_PAGEUP;
}
else if ( newPos == ( m_oldPos - GetPageSize() ) )
{
scrollEvent = wxEVT_SCROLL_PAGEDOWN;
}
else
{
return false;
}
m_oldPos = newPos;
// first track event
wxScrollEvent eventWxTrack(wxEVT_SCROLL_THUMBTRACK, GetId());
eventWxTrack.SetPosition(newPos);
eventWxTrack.SetEventObject(this);
GetEventHandler()->ProcessEvent(eventWxTrack);
// then scroll event
wxScrollEvent eventWxScroll(scrollEvent, GetId());
eventWxScroll.SetPosition(newPos);
eventWxScroll.SetEventObject(this);
return GetEventHandler()->ProcessEvent(eventWxScroll);
}
void wxSlider::Command (wxCommandEvent & event)
{
}

View File

@ -243,12 +243,13 @@ bool wxTopLevelWindowPalm::SetShape(const wxRegion& region)
#endif // !__WXWINCE__
// ----------------------------------------------------------------------------
// wxTopLevelWindow event handling
// wxTopLevelWindow native event handling
// ----------------------------------------------------------------------------
bool wxTopLevelWindowPalm::HandleControlSelect(EventType* event)
{
int id = event->data.ctlSelect.controlID;
wxWindow* win = FindWindowById(id,this);
if(win==NULL)
return false;
@ -276,6 +277,30 @@ bool wxTopLevelWindowPalm::HandleControlSelect(EventType* event)
return false;
}
bool wxTopLevelWindowPalm::HandleControlRepeat(EventType* event)
{
int id = event->data.ctlRepeat.controlID;
wxWindow* win = FindWindowById(id,this);
if(win==NULL)
return false;
wxSlider* slider = wxDynamicCast(win,wxSlider);
if(slider)
return slider->SendScrollEvent(event);
return false;
}
bool wxTopLevelWindowPalm::HandleSize(EventType* event)
{
wxSize newSize(event->data.winResized.newBounds.extent.x,
event->data.winResized.newBounds.extent.y);
wxSizeEvent eventWx(newSize,GetId());
eventWx.SetEventObject(this);
return GetEventHandler()->ProcessEvent(eventWx);
}
void wxTopLevelWindowPalm::OnActivate(wxActivateEvent& event)
{
}
@ -296,12 +321,21 @@ void wxTopLevelWindowPalm::OnActivate(wxActivateEvent& event)
*/
static Boolean FrameFormHandleEvent(EventType* event)
{
wxFrame* frame = wxDynamicCast(ActiveParentFrame,wxFrame);
// frame and tlw point to the same object but they are for convenience
// of calling proper structure withiout later dynamic typcasting
wxFrame* frame = wxDynamicCast(ActiveParentFrame,wxFrame);
wxTopLevelWindowPalm* tlw = ActiveParentFrame;
Boolean handled = false;
switch (event->eType) {
case ctlSelectEvent:
handled = frame->HandleControlSelect(event);
handled = tlw->HandleControlSelect(event);
break;
case ctlRepeatEvent:
handled = tlw->HandleControlRepeat(event);
break;
case winResizedEvent:
handled = tlw->HandleSize(event);
break;
#if wxUSE_MENUS_NATIVE
case menuOpenEvent: