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

View File

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

View File

@@ -98,8 +98,10 @@ IMPLEMENT_DYNAMIC_CLASS(wxSlider, wxControl)
#endif #endif
// Slider // Slider
wxSlider::wxSlider() void wxSlider::Init()
{ {
m_oldPos = 0;
m_lineSize = 1;
} }
bool wxSlider::Create(wxWindow *parent, wxWindowID id, bool wxSlider::Create(wxWindow *parent, wxWindowID id,
@@ -109,6 +111,16 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id,
const wxValidator& validator, const wxValidator& validator,
const wxString& name) 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)) if(!wxControl::Create(parent, id, pos, size, style, validator, name))
return false; return false;
@@ -116,6 +128,8 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id,
if(form==NULL) if(form==NULL)
return false; return false;
m_oldPos = value;
SliderControlType *slider = CtlNewSliderControl ( SliderControlType *slider = CtlNewSliderControl (
(void **)&form, (void **)&form,
GetId(), GetId(),
@@ -187,68 +201,93 @@ int wxSlider::GetValue() const
void wxSlider::SetValue(int value) void wxSlider::SetValue(int value)
{ {
SetIntValue(value); SetIntValue(value);
m_oldPos = value;
} }
wxSize wxSlider::DoGetBestSize() const 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) 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() void wxSlider::ClearSel()
{ {
// unsupported feature
} }
void wxSlider::ClearTicks() void wxSlider::ClearTicks()
{ {
// unsupported feature
} }
void wxSlider::SetLineSize(int lineSize) void wxSlider::SetLineSize(int lineSize)
{ {
m_lineSize = lineSize;
} }
int wxSlider::GetLineSize() const int wxSlider::GetLineSize() const
{ {
return 0; return m_lineSize;
} }
int wxSlider::GetSelEnd() const int wxSlider::GetSelEnd() const
{ {
return 0; // unsupported feature
return GetValue();
} }
int wxSlider::GetSelStart() const 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 int wxSlider::GetThumbLength() const
{ {
// unsupported feature
return 0; 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() 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()); wxCommandEvent event(wxEVT_COMMAND_SLIDER_UPDATED, GetId());
event.SetEventObject(this); event.SetEventObject(this);
event.SetInt(GetValue()); event.SetInt(m_oldPos);
return ProcessCommand(event); 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) void wxSlider::Command (wxCommandEvent & event)
{ {
} }

View File

@@ -243,12 +243,13 @@ bool wxTopLevelWindowPalm::SetShape(const wxRegion& region)
#endif // !__WXWINCE__ #endif // !__WXWINCE__
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxTopLevelWindow event handling // wxTopLevelWindow native event handling
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
bool wxTopLevelWindowPalm::HandleControlSelect(EventType* event) bool wxTopLevelWindowPalm::HandleControlSelect(EventType* event)
{ {
int id = event->data.ctlSelect.controlID; int id = event->data.ctlSelect.controlID;
wxWindow* win = FindWindowById(id,this); wxWindow* win = FindWindowById(id,this);
if(win==NULL) if(win==NULL)
return false; return false;
@@ -276,6 +277,30 @@ bool wxTopLevelWindowPalm::HandleControlSelect(EventType* event)
return false; 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) void wxTopLevelWindowPalm::OnActivate(wxActivateEvent& event)
{ {
} }
@@ -296,12 +321,21 @@ void wxTopLevelWindowPalm::OnActivate(wxActivateEvent& event)
*/ */
static Boolean FrameFormHandleEvent(EventType* 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; Boolean handled = false;
switch (event->eType) { switch (event->eType) {
case ctlSelectEvent: 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; break;
#if wxUSE_MENUS_NATIVE #if wxUSE_MENUS_NATIVE
case menuOpenEvent: case menuOpenEvent: