// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "toplevel.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#include "wx/checkbox.h"
#include "wx/radiobut.h"
#include "wx/tglbtn.h"
+#include "wx/slider.h"
+#include "wx/datectrl.h"
+
+#include <Window.h>
+#include <Form.h>
// ----------------------------------------------------------------------------
// globals
// Pointer to the currently active frame for the form event handler.
wxTopLevelWindowPalm* ActiveParentFrame;
+static Boolean FrameFormHandleEvent(EventType *event);
+
// ============================================================================
// wxTopLevelWindowPalm implementation
// ============================================================================
return 0;
}
-WXHWND wxTopLevelWindowPalm::PalmGetParent() const
-{
- return NULL;
-}
-
bool wxTopLevelWindowPalm::Create(wxWindow *parent,
wxWindowID id,
const wxString& title,
if(FrameForm==NULL)
return false;
- FrmSetEventHandler(FrameForm,FrameFormHandleEvent);
+ FrmSetEventHandler((FormType *)FrameForm,FrameFormHandleEvent);
- FrmSetActiveForm(FrameForm);
+ FrmSetActiveForm((FormType *)FrameForm);
ActiveParentFrame=this;
{
}
+// ---------------------------------------------------------------------------
+// implementation
+// ---------------------------------------------------------------------------
+
+WXWINHANDLE wxTopLevelWindowPalm::GetWinHandle() const
+{
+ FormType *form = (FormType *)GetForm();
+ if(form)
+ return FrmGetWindowHandle(form);
+ return NULL;
+}
+
// ----------------------------------------------------------------------------
// wxTopLevelWindowPalm showing
// ----------------------------------------------------------------------------
bool wxTopLevelWindowPalm::Show(bool show)
{
- FrmDrawForm(FrameForm);
+ FrmDrawForm((FormType *)FrameForm);
wxPaintEvent event(m_windowId);
event.SetEventObject(this);
void wxTopLevelWindowPalm::DoGetSize( int *width, int *height ) const
{
RectangleType rect;
- FrmGetFormBounds( GetForm() , &rect );
+ FrmGetFormBounds( (FormType *)GetForm() , &rect );
if(width)
*width = rect.extent.x;
if(height)
return false;
}
-FormType *wxTopLevelWindowPalm::GetForm() const
+WXFORMPTR wxTopLevelWindowPalm::GetForm() const
{
return FrmGetActiveForm();
}
-#ifndef __WXWINCE__
-
bool wxTopLevelWindowPalm::SetShape(const wxRegion& region)
{
return false;
}
-#endif // !__WXWINCE__
-
// ----------------------------------------------------------------------------
-// wxTopLevelWindow event handling
+// wxTopLevelWindow native event handling
// ----------------------------------------------------------------------------
-bool wxTopLevelWindowPalm::HandleControlSelect(EventType* event)
+bool wxTopLevelWindowPalm::HandleControlSelect(WXEVENTPTR event)
{
- int id = event->data.ctlSelect.controlID;
+ const EventType *palmEvent = (EventType *)event;
+ const int id = palmEvent->data.ctlSelect.controlID;
+
wxWindow* win = FindWindowById(id,this);
if(win==NULL)
return false;
+#if wxUSE_BUTTON
wxButton* button = wxDynamicCast(win,wxButton);
if(button)
return button->SendClickEvent();
+#endif // wxUSE_BUTTON
+#if wxUSE_CHECKBOX
wxCheckBox* checkbox = wxDynamicCast(win,wxCheckBox);
if(checkbox)
return checkbox->SendClickEvent();
+#endif // wxUSE_CHECKBOX
+#if wxUSE_TOGGLEBTN
wxToggleButton* toggle = wxDynamicCast(win,wxToggleButton);
if(toggle)
return toggle->SendClickEvent();
+#endif // wxUSE_TOGGLEBTN
+#if wxUSE_RADIOBTN
wxRadioButton* radio = wxDynamicCast(win,wxRadioButton);
if(radio)
return radio->SendClickEvent();
+#endif // wxUSE_RADIOBTN
+
+#if wxUSE_DATEPICKCTRL
+ wxDatePickerCtrl* datepicker = wxDynamicCast(win,wxDatePickerCtrl);
+ if(datepicker)
+ return datepicker->SendClickEvent();
+#endif // wxUSE_DATEPICKCTRL
+
+#if wxUSE_SLIDER
+ wxSlider* slider = wxDynamicCast(win,wxSlider);
+ if(slider)
+ return slider->SendUpdatedEvent();
+#endif // wxUSE_SLIDER
+
+ return false;
+}
+
+bool wxTopLevelWindowPalm::HandleControlRepeat(WXEVENTPTR event)
+{
+ const EventType *palmEvent = (EventType *)event;
+ const int id = palmEvent->data.ctlRepeat.controlID;
+
+ wxWindow* win = FindWindowById(id, this);
+ if(win==NULL)
+ return false;
+
+#if wxUSE_SLIDER
+ wxSlider* slider = wxDynamicCast(win,wxSlider);
+ if(slider)
+ return slider->SendScrollEvent(event);
+#endif // wxUSE_SLIDER
return false;
}
+bool wxTopLevelWindowPalm::HandleSize(WXEVENTPTR event)
+{
+ const EventType *palmEvent = (EventType *)event;
+ wxSize newSize(palmEvent->data.winResized.newBounds.extent.x,
+ palmEvent->data.winResized.newBounds.extent.y);
+ wxSizeEvent eventWx(newSize,GetId());
+ eventWx.SetEventObject(this);
+ return GetEventHandler()->ProcessEvent(eventWx);
+}
+
void wxTopLevelWindowPalm::OnActivate(wxActivateEvent& event)
{
}
* finds a better solution, please let me know. My email address is
* wbo@freeshell.org
*/
-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;
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: