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:
@@ -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)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@@ -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:
|
||||||
|
Reference in New Issue
Block a user