From: Daan L. <da...@cs...> - 2005-02-11 13:38:57
|
Lemmih wrote: > 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). Hi Lemmih, Great work! Thanks for you contribution -- I will integrate in the forthcoming 0.9 release. Thanks again, I can hardly believe you are new Haskell! -- Daan. > > [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) > |