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 |
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) > |
From: Lemmih <le...@gm...> - 2005-02-11 14:24:14
|
On Fri, 11 Feb 2005 14:38:41 +0100, Daan Leijen <da...@cs...> wrote: > 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! New to wxHaskell, not Haskell (: -- Friendly, Lemmih |