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:
parent
95b838bed2
commit
721a962699
@ -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)
|
||||
};
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
// 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:
|
||||
|
Loading…
Reference in New Issue
Block a user