From: Lemmih <le...@gm...> - 2005-02-09 19:28:23
|
Greetings, I couldn't find CalendarCtrl event handling code in the src tree so wrote my own. Note that I'm new to wx(Haskell/Widgets). [Graphics.UI.WX.Controls] calendarEvent :: Event (CalendarCtrl a) (EventCalendar -> IO ()) calendarEvent = newEvent "calendarEvent" calendarCtrlGetOnListEvent calendarCtrlOnListEvent [Graphics.UI.WXCore.Events] data EventCalendar = CalendarDayChanged (DateTime ()) | CalendarDoubleClicked (DateTime ()) | CalendarMonthChanged (DateTime ()) | CalendarSelectionChanged (DateTime ()) | CalendarWeekdayClicked Int | CalendarYearChanged (DateTime ()) | CalendarUnknown fromCalendarEvent :: CalendarEvent a -> IO EventCalendar fromCalendarEvent calEvent = do tp <- eventGetEventType calEvent case lookup tp calEvents of Just f -> f calEvent Nothing -> return CalendarUnknown calEvents :: [(Int, CalendarEvent a -> IO EventCalendar)] calEvents = [(wxEVT_CALENDAR_DAY_CHANGED ,withDate CalendarDayChanged) ,(wxEVT_CALENDAR_DOUBLECLICKED ,withDate CalendarDoubleClicked) ,(wxEVT_CALENDAR_MONTH_CHANGED ,withDate CalendarMonthChanged) ,(wxEVT_CALENDAR_SEL_CHANGED ,withDate CalendarSelectionChanged) ,(wxEVT_CALENDAR_WEEKDAY_CLICKED,withWeekday CalendarWeekdayClicked) ,(wxEVT_CALENDAR_YEAR_CHANGED ,withDate CalendarYearChanged)] where withDate event calEvent = do date <- dateTimeCreate withObjectPtr date $ calendarEventGetDate calEvent return (event date) withWeekday event calEvent = fmap event $ calendarEventGetWeekDay calEvent -- | Set a calendar event handler. calendarCtrlOnCalEvent :: CalendarCtrl a -> (EventCalendar -> IO ()) -> IO () calendarCtrlOnCalEvent calCtrl eventHandler = windowOnEvent calCtrl (map fst calEvents) eventHandler calHandler where calHandler event = do eventCalendar <- fromCalendarEvent (objectCast event) eventHandler eventCalendar -- | Get the current calendar event handler of a window. calendarCtrlGetOnCalEvent :: CalendarCtrl a -> IO (EventCalendar -> IO ()) calendarCtrlGetOnCalEvent calCtrl = unsafeWindowGetHandlerState calCtrl wxEVT_CALENDAR_SEL_CHANGED (\event -> skipCurrentEvent) -- Friendly, Lemmih |