packages feed

fltkhs 0.4.0.5 → 0.4.0.6

raw patch · 17 files changed

+386/−113 lines, 17 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Graphics.UI.FLTK.LowLevel.Clock: instance (impl ~ (Graphics.UI.FLTK.LowLevel.Clock.ClockType -> GHC.Types.IO ())) => Graphics.UI.FLTK.LowLevel.Dispatch.Op (Graphics.UI.FLTK.LowLevel.Hierarchy.SetType ()) Graphics.UI.FLTK.LowLevel.Hierarchy.Clock orig impl
+ Graphics.UI.FLTK.LowLevel.Clock: instance (impl ~ GHC.Types.IO Graphics.UI.FLTK.LowLevel.Clock.ClockType) => Graphics.UI.FLTK.LowLevel.Dispatch.Op (Graphics.UI.FLTK.LowLevel.Hierarchy.GetType_ ()) Graphics.UI.FLTK.LowLevel.Hierarchy.Clock orig impl
+ Graphics.UI.FLTK.LowLevel.Clock: instance GHC.Show.Show Graphics.UI.FLTK.LowLevel.Clock.ClockType
+ Graphics.UI.FLTK.LowLevel.Hierarchy: type MenuBar = CMenuBar MenuPrim
+ Graphics.UI.FLTK.LowLevel.MenuBar: instance (impl ~ (Graphics.UI.FLTK.LowLevel.Fl_Enumerations.Event -> GHC.Types.IO GHC.Types.Int)) => Graphics.UI.FLTK.LowLevel.Dispatch.Op (Graphics.UI.FLTK.LowLevel.Hierarchy.Handle ()) Graphics.UI.FLTK.LowLevel.Hierarchy.MenuBar orig impl
+ Graphics.UI.FLTK.LowLevel.MenuBar: instance (impl ~ GHC.Types.IO ()) => Graphics.UI.FLTK.LowLevel.Dispatch.Op (Graphics.UI.FLTK.LowLevel.Hierarchy.Destroy ()) Graphics.UI.FLTK.LowLevel.Hierarchy.MenuBar orig impl
+ Graphics.UI.FLTK.LowLevel.MenuBar: menuBarNew :: Rectangle -> Maybe String -> IO (Ref MenuBar)
+ Graphics.UI.FLTK.LowLevel.MenuItem: addMenuItem :: (Parent menuItem MenuItem) => Either (Ref MenuPrim) (Ref MenuItem) -> String -> Maybe Shortcut -> Maybe (Ref menuItem -> IO ()) -> MenuItemFlags -> (Ptr () -> String -> CInt -> FunPtr CallbackWithUserDataPrim -> Int -> IO Int) -> (Ptr () -> String -> String -> FunPtr CallbackWithUserDataPrim -> Int -> IO Int) -> IO (MenuItemIndex)
+ Graphics.UI.FLTK.LowLevel.MenuPrim: insertMenuItem :: (Parent a MenuPrim) => Ref MenuPrim -> Int -> String -> Maybe Shortcut -> (Ref a -> IO ()) -> MenuItemFlags -> (Ptr () -> Int -> String -> CInt -> FunPtr CallbackWithUserDataPrim -> Int -> IO Int) -> (Ptr () -> Int -> String -> String -> FunPtr CallbackWithUserDataPrim -> Int -> IO Int) -> IO (MenuItemIndex)
+ Graphics.UI.FLTK.LowLevel.SysMenuBar: instance (Graphics.UI.FLTK.LowLevel.Dispatch.Parent a Graphics.UI.FLTK.LowLevel.Hierarchy.MenuItem, impl ~ (GHC.Base.String -> GHC.Base.Maybe Graphics.UI.FLTK.LowLevel.Fl_Types.Shortcut -> GHC.Base.Maybe (Graphics.UI.FLTK.LowLevel.Fl_Types.Ref a -> GHC.Types.IO ()) -> Graphics.UI.FLTK.LowLevel.Fl_Types.MenuItemFlags -> GHC.Types.IO Graphics.UI.FLTK.LowLevel.MenuItem.MenuItemIndex)) => Graphics.UI.FLTK.LowLevel.Dispatch.Op (Graphics.UI.FLTK.LowLevel.Hierarchy.Add ()) Graphics.UI.FLTK.LowLevel.Hierarchy.SysMenuBar orig impl
+ Graphics.UI.FLTK.LowLevel.SysMenuBar: instance (Graphics.UI.FLTK.LowLevel.Dispatch.Parent a Graphics.UI.FLTK.LowLevel.Hierarchy.MenuPrim, impl ~ (GHC.Types.Int -> GHC.Base.String -> GHC.Base.Maybe Graphics.UI.FLTK.LowLevel.Fl_Types.Shortcut -> (Graphics.UI.FLTK.LowLevel.Fl_Types.Ref a -> GHC.Types.IO ()) -> Graphics.UI.FLTK.LowLevel.Fl_Types.MenuItemFlags -> GHC.Types.IO Graphics.UI.FLTK.LowLevel.MenuItem.MenuItemIndex)) => Graphics.UI.FLTK.LowLevel.Dispatch.Op (Graphics.UI.FLTK.LowLevel.Hierarchy.Insert ()) Graphics.UI.FLTK.LowLevel.Hierarchy.SysMenuBar orig impl
+ Graphics.UI.FLTK.LowLevel.SysMenuBar: instance (impl ~ (GHC.Base.String -> GHC.Types.IO ())) => Graphics.UI.FLTK.LowLevel.Dispatch.Op (Graphics.UI.FLTK.LowLevel.Hierarchy.AddName ()) Graphics.UI.FLTK.LowLevel.Hierarchy.SysMenuBar orig impl
- Graphics.UI.FLTK.LowLevel.Hierarchy: type SysMenuBar = CSysMenuBar MenuPrim
+ Graphics.UI.FLTK.LowLevel.Hierarchy: type SysMenuBar = CSysMenuBar MenuBar

Files

README.md view
@@ -5,33 +5,81 @@  NOTE: As of version 0.4.0.0, due to the introduction of closed type families, only GHC >= 7.8.1 is supported. -Abbreviated installation instructions are for Linux and Mac are:+Quick Install+-------------+### Linux and *BSD+Install FLTK-1.3.3 from source: -- Download [FLTK 1.3.3] [2].-- Install with: ```-    > ./configure --enable-shared-    > make-    > make install+   > wget http://fltk.org/pub/fltk/1.3.3/fltk-1.3.3-source.tar.gz+   > tar -zxvf fltk-1.3.3-source.tar.gz+   > cd fltk-1.3.3+   > configure --enable-shared+   > make+   > sudo make install+   > fltk-config --version+   1.3.3 ``` -- Install via the `fltkhs-hello-world` skeleton application:+Build the FLTKHS skeleton project:+ ```-    > git clone https://github.com/deech/fltkhs-hello-world-    > cd fltkhs-hello-world-    > stack build+   > git clone http://github.com/deech/fltkhs-hello-world+   > cd fltkhs-hello-world+   > stack install+   # About 6-8 minutes passes ...+   > stack exec fltkhs-hello-world ``` -- Test your installation by invoking: 'stack exec fltkhs-hello-world'.+### OSX Yosemite only -The rest of the documentation (including installation instructions for Windows and API usage) is located in the [FLTKHS module] [3]. This is the primary module that needs to be imported by every Fltkhs app and the entry point into the application.+Install FLTK-1.3.3 from Brew: +```+   > brew install autoconf+   > brew install fltk+   > fltk-config --version+   1.3.3+```+Build the FLTKHS skeleton project:++```+   > git clone http://github.com/deech/fltkhs-hello-world+   > cd fltkhs-hello-world+   > stack install+   # About 6-8 minutes passes ...+   > stack exec fltkhs-hello-world+```++### OSX El Capitan only++Install the development version of FLTK from Brew:++```+  > brew install --devel fltk+  > fltk-config --version+  1.3.4+```+Build the FLTKHS skeleton project:++```+   > git clone http://github.com/deech/fltkhs-hello-world+   > cd fltkhs-hello-world+   > stack install+   # About 6-8 minutes passes ...+   > stack exec fltkhs-hello-world+```++### Windows++Please see the [detailed Windows installation instructions](http://hackage.haskell.org/package/fltkhs/docs/Graphics-UI-FLTK-LowLevel-FLTKHS.html#g:7)+ Screenshots -----------  [Drawing with FLTKHS](images/arc-windows.png) -[A table of widgets](images/widget-table.png)+[A table of widgets](images/widget-table-windows.png)  [A complex tree](images/tree-complex-windows.png) Done completely using Fluid. Notice how tree nodes can be arbitrary widgets. 
c-src/Fl_CallbackC.cpp view
@@ -85,6 +85,24 @@     return menu_->insert(index,name,shortcut,NULL,p,flags);   } }+int C_to_Fl_Callback::menu_insert(Fl_Sys_Menu_Bar* menu_, int index, char* name, int shortcut, int flags){+  if (this->callback) {+    return menu_->insert(index,name,shortcut,intercept,this,flags);+  }+  else {+    void* p = 0;+    return menu_->insert(index,name,shortcut,NULL,p,flags);+  }+}+int C_to_Fl_Callback::menu_insert(Fl_Sys_Menu_Bar* menu_, int index, char* name, char* shortcut, int flags){+  if (this->callback) {+    return menu_->insert(index,name,shortcut,intercept,this,flags);+  }+  else {+    void* p = 0;+    return menu_->insert(index,name,shortcut,NULL,p,flags);+  }+} int C_to_Fl_Callback::menu_add(Fl_Menu_Item* item, char* name, int shortcut, int flags){   if (this->callback) {     return item->add(name, shortcut, intercept, this, flags);@@ -113,6 +131,24 @@   } } int C_to_Fl_Callback::menu_add(Fl_Menu_* menu_, char* name, int shortcut, int flags){+  if (this->callback) {+    return menu_->add(name,shortcut,intercept,this,flags);+  }+  else {+    void* p = 0;+    return menu_->add(name,shortcut,NULL,p,flags);+  }+}+int C_to_Fl_Callback::menu_add(Fl_Sys_Menu_Bar* menu_, char* name, char* shortcut, int flags){+  if (this->callback) {+    return menu_->add(name,shortcut,intercept,this,flags);+  }+  else {+    void* p = 0;+    return menu_->add(name,shortcut,NULL,p,flags);+  }+}+int C_to_Fl_Callback::menu_add(Fl_Sys_Menu_Bar* menu_, char* name, int shortcut, int flags){   if (this->callback) {     return menu_->add(name,shortcut,intercept,this,flags);   }
c-src/Fl_CallbackC.h view
@@ -10,6 +10,7 @@ #include <FL/Fl_Widget.H> #include <FL/Fl_Menu_Item.H> #include <FL/Fl_Menu_.H>+#include <FL/Fl_Sys_Menu_Bar.H> #include <FL/Fl_Text_Buffer.H> #include <FL/Fl_Text_Editor.H> #include <FL/Fl_File_Chooser.H>@@ -62,10 +63,14 @@   int menu_insert(Fl_Menu_Item* item, int index, char* name, int shortcut, int flags = 0);   int menu_insert(Fl_Menu_* menu_, int index, char* name, int shortcut, int flags = 0);   int menu_insert(Fl_Menu_* menu_, int index, char* name, char* shortcut, int flags = 0);+  int menu_insert(Fl_Sys_Menu_Bar* menu_, int index, char* name, int shortcut, int flags = 0);+  int menu_insert(Fl_Sys_Menu_Bar* menu_, int index, char* name, char* shortcut, int flags = 0);   int menu_add(Fl_Menu_Item* item, char* name, int shortcut, int flags = 0);   int menu_add(Fl_Menu_Item* item, char* name, char* shortcut, int flags = 0);   int menu_add(Fl_Menu_* menu,char* name, char* shortcut, int flags = 0);   int menu_add(Fl_Menu_* menu,char* name, int shortcut, int flags = 0);+  int menu_add(Fl_Sys_Menu_Bar* menu,char* name, char* shortcut, int flags = 0);+  int menu_add(Fl_Sys_Menu_Bar* menu,char* name, int shortcut, int flags = 0); }; #endif #endif /* __FL_CALLBACK_C__ */
+ c-src/Fl_Menu_BarC.cpp view
@@ -0,0 +1,22 @@+#include "Fl_Menu_BarC.h"+#include "UtilsC.h"+#ifdef __cplusplus+EXPORT {+#endif+  FL_EXPORT_C(int,Fl_Menu_Bar_handle )(fl_Menu_Bar menu_bar, int event){+    return (static_cast<Fl_Menu_Bar*>(menu_bar))->handle(event);+  }+  FL_EXPORT_C(fl_Menu_Bar, Fl_Menu_Bar_New_WithLabel)(int x, int y, int w, int h, const char* label) {+    Fl_Menu_Bar* menu_bar = new Fl_Menu_Bar(x,y,w,h,label);+    return (static_cast<fl_Menu_Bar>(menu_bar));+  }+  FL_EXPORT_C(fl_Menu_Bar, Fl_Menu_Bar_New)(int x, int y, int w, int h) {+    Fl_Menu_Bar* menu_bar = new Fl_Menu_Bar(x,y,w,h,0);+    return (fl_Menu_Bar)menu_bar;+  }+  FL_EXPORT_C(void   , Fl_Menu_Bar_Destroy)(fl_Menu_Bar menu_bar){+    delete (static_cast<Fl_Menu_Bar*>(menu_bar));+  }+#ifdef __cplusplus+}+#endif
+ c-src/Fl_Menu_BarC.h view
@@ -0,0 +1,19 @@+#ifndef __FL_MENU_BAR_C__+#define __FL_MENU_BAR_C__+#ifdef __cplusplus+// always include the FL/*.H headers before local headers+// Fl_Widget is included transitively and needed for+// the callback mechanism included below to work.+#include "FL/Fl.H"+#include "FL/Fl_Menu_Bar.H"+#include "Fl_CallbackC.h"+EXPORT {+#endif+  FL_EXPORT_C(int,          Fl_Menu_Bar_handle)(fl_Group self, int event);+  FL_EXPORT_C(fl_Menu_Bar,   Fl_Menu_Bar_New_WithLabel)(int x, int y, int w, int h, const char* label);+  FL_EXPORT_C(fl_Menu_Bar   , Fl_Menu_Bar_New)(int x, int y, int w, int h);+  FL_EXPORT_C(void   , Fl_Menu_Bar_Destroy)(fl_Menu_Bar menu_bar);+#ifdef __cplusplus+}+#endif+#endif /* __FL_MENU_BAR_C__ */
c-src/Fl_Sys_Menu_BarC.cpp view
@@ -321,6 +321,10 @@     C_to_Fl_Callback* callback_interceptor = new C_to_Fl_Callback(cb);     return callback_interceptor->menu_insert((static_cast<Fl_Sys_Menu_Bar*>(sys_menu_bar)),index,name,shortcut, flags);   }+  FL_EXPORT_C(int,Fl_Sys_Menu_Bar_insert_with_shortcutname_flags)(fl_Sys_Menu_Bar menu_,int index,char* name,char* shortcut,fl_Callback* cb,int flags){+    C_to_Fl_Callback* callback_interceptor = new C_to_Fl_Callback(cb);+    return callback_interceptor->menu_insert((static_cast<Fl_Sys_Menu_Bar*>(menu_)),index, name,shortcut,flags);+  }   FL_EXPORT_C(int,Fl_Sys_Menu_Bar_insert_with_user_data_flags)(fl_Sys_Menu_Bar sys_menu_bar,int index,char* name,int shortcut,fl_Callback* cb,void* user_data,int flags){     C_to_Fl_Callback* callback_interceptor = new C_to_Fl_Callback(cb, user_data);     return callback_interceptor->menu_insert((static_cast<Fl_Sys_Menu_Bar*>(sys_menu_bar)),index,name,shortcut,flags);@@ -332,6 +336,9 @@   FL_EXPORT_C(int,Fl_Sys_Menu_Bar_add_with_user_data)(fl_Sys_Menu_Bar sys_menu_bar,char* name,int shortcut,fl_Callback* cb,void* user_data){     C_to_Fl_Callback* callback_interceptor = new C_to_Fl_Callback(cb, user_data);     return callback_interceptor->menu_add((static_cast<Fl_Sys_Menu_Bar*>(sys_menu_bar)),name,shortcut,0);+  }+  FL_EXPORT_C(int, Fl_Sys_Menu_Bar_add_with_name)(fl_Sys_Menu_Bar menu_,  char* name){+    return (static_cast<Fl_Sys_Menu_Bar*>(menu_))->add(name);   }   FL_EXPORT_C(int,Fl_Sys_Menu_Bar_add_with_flags)(fl_Sys_Menu_Bar sys_menu_bar,char* name,int shortcut,fl_Callback* cb,int flags){     C_to_Fl_Callback* callback_interceptor = new C_to_Fl_Callback(cb);
c-src/Fl_Sys_Menu_BarC.h view
@@ -7,7 +7,6 @@ #include "FL/Fl.H" #include "FL/Fl_Sys_Menu_Bar.H" #include "Fl_CallbackC.h"-#include "Fl_Menu_C.h" EXPORT { #endif   /* Inherited from Fl_Widget */
c-src/Fl_Types.h view
@@ -456,6 +456,7 @@   typedef void* fl_Single_Window;   typedef void* fl_Slider;   typedef void* fl_Spinner;+  typedef void* fl_Menu_Bar;   typedef void* fl_Sys_Menu_Bar;   typedef void* fl_Table;   typedef void* fl_Table_Row;
c-src/Makefile.in view
@@ -86,6 +86,7 @@ 	fl_show_colormapC.cpp \ 	Fl_Single_WindowC.cpp \ 	Fl_SliderC.cpp \+	Fl_Menu_BarC.cpp \ 	Fl_Sys_Menu_BarC.cpp \ 	Fl_TableC.cpp \ 	Fl_Table_RowC.cpp \
fltkhs.cabal view
@@ -1,5 +1,5 @@ name : fltkhs-version : 0.4.0.5+version : 0.4.0.6 synopsis : FLTK bindings description:     Low level bindings for the FLTK GUI toolkit. For installation and quick start instruction please scroll all the way down to the README.@@ -55,6 +55,7 @@                    Graphics.UI.FLTK.LowLevel.Browser                    Graphics.UI.FLTK.LowLevel.SelectBrowser                    Graphics.UI.FLTK.LowLevel.SysMenuBar+                   Graphics.UI.FLTK.LowLevel.MenuBar                    Graphics.UI.FLTK.LowLevel.Choice                    Graphics.UI.FLTK.LowLevel.MenuButton                    Graphics.UI.FLTK.LowLevel.Image
src/Graphics/UI/FLTK/LowLevel/Clock.chs view
@@ -39,7 +39,7 @@   DigitalClock = FL_DIGITAL_CLOCK }; #endc-{# enum ClockType {} #}+{# enum ClockType {} deriving (Show) #} newtype Hour = Hour Int newtype Minute = Minute Int newtype Second = Second Int@@ -89,6 +89,14 @@ {#fun Fl_Clock_handle as menu_Handle' { id `Ptr ()', id `CInt' } -> `Int' #} instance (impl ~ (Event -> IO Int)) => Op (Handle ()) Clock orig impl where   runOp _ _ menu_ event = withRef menu_ (\p -> menu_Handle' p (fromIntegral . fromEnum $ event))++{# fun Fl_Clock_set_type as setType' { id `Ptr ()',`Word8' } -> `()' #}+instance (impl ~ (ClockType ->  IO ())) => Op (SetType ()) Clock orig impl where+  runOp _ _ clock type'' = withRef clock $ \clockPtr -> setType' clockPtr (fromIntegral (fromEnum type''))++{# fun Fl_Clock_type as type' { id `Ptr ()' } -> `Word8' #}+instance (impl ~ ( IO (ClockType))) => Op (GetType_ ()) Clock orig impl where+   runOp _ _ clock = withRef clock $ \clockPtr -> type' clockPtr >>= return . toEnum . fromIntegral  -- $Clockfunctions --
src/Graphics/UI/FLTK/LowLevel/FLTKHS.hs view
@@ -104,6 +104,7 @@          module Graphics.UI.FLTK.LowLevel.SingleWindow,          module Graphics.UI.FLTK.LowLevel.Slider,          module Graphics.UI.FLTK.LowLevel.Spinner,+         module Graphics.UI.FLTK.LowLevel.MenuBar,          module Graphics.UI.FLTK.LowLevel.SysMenuBar,          module Graphics.UI.FLTK.LowLevel.Tabs,          module Graphics.UI.FLTK.LowLevel.Table,@@ -174,6 +175,7 @@ import Graphics.UI.FLTK.LowLevel.NiceSlider import Graphics.UI.FLTK.LowLevel.MenuItem import Graphics.UI.FLTK.LowLevel.MenuPrim+import Graphics.UI.FLTK.LowLevel.MenuBar import Graphics.UI.FLTK.LowLevel.SysMenuBar import Graphics.UI.FLTK.LowLevel.Choice import Graphics.UI.FLTK.LowLevel.MenuButton
src/Graphics/UI/FLTK/LowLevel/Hierarchy.hs view
@@ -529,6 +529,8 @@          setTextcolor,          DownBox,          downBox,+         -- * MenuBar+         MenuBar,          -- * SysMenuBar          SysMenuBar,          -- * Choice,@@ -2290,8 +2292,17 @@ MAKE_METHOD(SetTextcolor,setTextcolor) MAKE_METHOD(DownBox,downBox) +data CMenuBar parent+type MenuBar = CMenuBar MenuPrim+type MenuBarFuncs =+  (Destroy+  (Handle+  ()))+type instance Functions MenuBar = MenuBarFuncs++ data CSysMenuBar parent-type SysMenuBar = CSysMenuBar MenuPrim+type SysMenuBar = CSysMenuBar MenuBar type SysMenuBarFuncs =   (Destroy   (SetMenu@@ -2305,7 +2316,10 @@   (GetMode   (SetShortcut   (Handle-  ()))))))))))))+  (Add+  (AddName+  (Insert+  ())))))))))))))))  type instance Functions SysMenuBar = SysMenuBarFuncs @@ -3094,7 +3108,9 @@   (GetValue   (GetValueSinceEpoch   (SetValue-  ()))))+  (SetType+  (GetType_+  ()))))))   type instance Functions Clock = ClockFuncs
+ src/Graphics/UI/FLTK/LowLevel/MenuBar.chs view
@@ -0,0 +1,72 @@+{-# LANGUAGE CPP, ExistentialQuantification, TypeSynonymInstances, FlexibleInstances, MultiParamTypeClasses, FlexibleContexts, ScopedTypeVariables, UndecidableInstances #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}+module Graphics.UI.FLTK.LowLevel.MenuBar+    (+     menuBarNew,+     -- * Hierarchy+     --+     -- $hierarchy++     -- * Functions+     --+     -- $functions+    )+where+#include "Fl_ExportMacros.h"+#include "Fl_Types.h"+#include "Fl_Menu_BarC.h"+import C2HS hiding (cFromEnum, cFromBool, cToBool,cToEnum)+import Foreign.C.Types+import Graphics.UI.FLTK.LowLevel.Widget+import Graphics.UI.FLTK.LowLevel.Fl_Enumerations+import Graphics.UI.FLTK.LowLevel.Fl_Types+import Graphics.UI.FLTK.LowLevel.Utils+import Graphics.UI.FLTK.LowLevel.Dispatch+import Graphics.UI.FLTK.LowLevel.Hierarchy+import Graphics.UI.FLTK.LowLevel.MenuItem+import qualified Data.ByteString.Char8 as C++{# fun Fl_Menu_Bar_New as widgetNew' { `Int',`Int',`Int',`Int' } -> `Ptr ()' id #}+{# fun Fl_Menu_Bar_New_WithLabel as widgetNewWithLabel' { `Int',`Int',`Int',`Int',unsafeToCString `String'} -> `Ptr ()' id #}+menuBarNew :: Rectangle -> Maybe String -> IO (Ref MenuBar)+menuBarNew rectangle l' =+    let (x_pos, y_pos, width, height) = fromRectangle rectangle+    in case l' of+        Nothing -> widgetNew' x_pos y_pos width height >>=+                             toRef+        Just l -> widgetNewWithLabel' x_pos y_pos width height l >>=+                             toRef++{# fun Fl_Menu_Bar_Destroy as widgetDestroy' { id `Ptr ()' } -> `()' supressWarningAboutRes #}+instance (impl ~ (IO ())) => Op (Destroy ()) MenuBar orig impl where+  runOp _ _ menuBar = swapRef menuBar $+                          \menuBarPtr ->+                             widgetDestroy' menuBarPtr >>+                             return nullPtr+{#fun Fl_Menu_Bar_handle as menuBarHandle' { id `Ptr ()', id `CInt' } -> `Int' #}+instance (impl ~ (Event -> IO Int)) => Op (Handle ()) MenuBar orig impl where+  runOp _ _ menuBar event = withRef menuBar (\p -> menuBarHandle' p (fromIntegral . fromEnum $ event))+++-- $functions+--+-- @+--+-- destroy :: 'Ref' 'MenuBar' -> 'IO' ()+--+-- handle :: 'Ref' 'MenuBar' -> 'Event' -> 'IO' 'Int'+--+-- @++-- $hierarchy+--+-- @+-- "Graphics.UI.FLTK.LowLevel.Widget"+--  |+--  v+-- "Graphics.UI.FLTK.LowLevel.MenuPrim"+--  |+--  v+-- "Graphics.UI.FLTK.LowLevel.MenuBar"+--+-- @
src/Graphics/UI/FLTK/LowLevel/MenuItem.chs view
@@ -3,6 +3,7 @@ module Graphics.UI.FLTK.LowLevel.MenuItem   (    menuItemNew,+   addMenuItem,    MenuItemIndex(..),    MenuItemName(..),    MenuItemPointer(..),@@ -235,40 +236,59 @@ instance (impl ~ (Ref Widget  ->  IO ())) => Op (DoCallback ()) MenuItem orig impl where   runOp _ _ menu_item o = withRef menu_item $ \menu_itemPtr -> withRef o $ \oPtr -> doCallback' menu_itemPtr oPtr +addMenuItem ::+  (Parent menuItem MenuItem) =>+  Either (Ref MenuPrim) (Ref MenuItem) ->+  String ->+  Maybe Shortcut ->+  Maybe (Ref menuItem -> IO ()) ->+  MenuItemFlags ->+  (Ptr () -> String -> CInt -> FunPtr CallbackWithUserDataPrim -> Int -> IO Int) ->+  (Ptr () -> String -> String -> FunPtr CallbackWithUserDataPrim -> Int -> IO Int) ->+  IO (MenuItemIndex)+addMenuItem refMenuOrMenuItem name shortcut cb flags addWithFlags addWithShortcutnameFlags =+     either+       (\menu -> withRef menu (go "Menu_.add: Shortcut format string cannot be empty" ))+       (\menuItem -> withRef menuItem (go "MenuItem.add: Shortcut format string cannot be empty"))+       refMenuOrMenuItem+    where+      go :: String -> Ptr () -> IO MenuItemIndex+      go errorMsg menu_Ptr = do+        let combinedFlags = menuItemFlagsToInt flags+        ptr <- maybe (return (castPtrToFunPtr nullPtr)) toCallbackPrim cb+        idx' <- case shortcut of+                 Just s' -> case s' of+                   KeySequence (ShortcutKeySequence modifiers char) ->+                     addWithFlags+                      menu_Ptr+                      name+                      (keySequenceToCInt modifiers char)+                      (castFunPtr ptr)+                      combinedFlags+                   KeyFormat format' ->+                     if (not $ null format') then+                       addWithShortcutnameFlags+                       menu_Ptr+                       name+                       format'+                       (castFunPtr ptr)+                       combinedFlags+                     else error errorMsg+                 Nothing ->+                     addWithFlags+                      menu_Ptr+                      name+                      0+                      (castFunPtr ptr)+                      combinedFlags+        return (MenuItemIndex idx')+ {# fun Fl_Menu_Item_insert_with_flags as insertWithFlags' { id `Ptr ()',`Int', unsafeToCString `String',id `CInt',id `FunPtr CallbackWithUserDataPrim',`Int'} -> `Int' #} {# fun Fl_Menu_Item_add_with_flags as addWithFlags' { id `Ptr ()', unsafeToCString `String',id `CInt',id `FunPtr CallbackWithUserDataPrim',`Int'} -> `Int' #} {# fun Fl_Menu_Item_add_with_shortcutname_flags as addWithShortcutnameFlags' { id `Ptr ()', unsafeToCString `String', unsafeToCString `String',id `FunPtr CallbackWithUserDataPrim',`Int' } -> `Int' #} instance (Parent a MenuItem, impl ~ (String -> Maybe Shortcut -> Maybe (Ref a -> IO ()) -> MenuItemFlags -> IO (MenuItemIndex))) => Op (Add ()) MenuItem orig impl where   runOp _ _ menu_item name shortcut cb flags =-    withRef menu_item $ \menu_itemPtr -> do-      let combinedFlags = menuItemFlagsToInt flags-      ptr <- maybe (return nullFunPtr) toCallbackPrim cb-      idx' <- case shortcut of-               Just s' -> case s' of-                 KeySequence (ShortcutKeySequence modifiers char) ->-                   addWithFlags'-                     menu_itemPtr-                     name-                     (keySequenceToCInt modifiers char)-                     (castFunPtr ptr)-                     combinedFlags-                 KeyFormat format' ->-                   if (not $ null format') then-                     addWithShortcutnameFlags'-                       menu_itemPtr-                       name-                       format'-                       (castFunPtr ptr)-                       combinedFlags-                   else error "menuItemAdd: shortcut format string cannot be empty"-               Nothing ->-                  addWithFlags'-                    menu_itemPtr-                    name-                    0-                    (castFunPtr ptr)-                    combinedFlags-      return (MenuItemIndex idx')+    addMenuItem (Right menu_item) name shortcut cb flags addWithFlags' addWithShortcutnameFlags'  instance (Parent a MenuItem, impl ~ (Int -> String -> Maybe ShortcutKeySequence -> (Ref a -> IO ()) -> MenuItemFlags -> IO (MenuItemIndex))) => Op (Insert ()) MenuItem orig impl where   runOp _ _ menu_item index' name ks cb flags =
src/Graphics/UI/FLTK/LowLevel/MenuPrim.chs view
@@ -3,7 +3,8 @@ module Graphics.UI.FLTK.LowLevel.MenuPrim     (      menu_New,-     menu_Custom+     menu_Custom,+     insertMenuItem      -- * Hierarchy      --      -- $hierarchy@@ -157,42 +158,56 @@ instance (Parent a MenuItem, impl ~ (Ref a->  IO ())) => Op (Copy ()) MenuPrim orig impl where   runOp _ _ menu_ m = withRef menu_ $ \menu_Ptr -> withRef m $ \mPtr -> copy' menu_Ptr mPtr +insertMenuItem ::+  (Parent a MenuPrim) =>+  Ref MenuPrim ->+  Int ->+  String ->+  Maybe Shortcut ->+  (Ref a -> IO ()) ->+  MenuItemFlags ->+  (Ptr () -> Int -> String -> CInt -> FunPtr CallbackWithUserDataPrim -> Int -> IO Int) ->+  (Ptr () -> Int -> String  -> String -> FunPtr CallbackWithUserDataPrim -> Int -> IO Int) ->+  IO (MenuItemIndex)+insertMenuItem menu_ index' name shortcut cb flags insertWithFlags'' insertWithShortcutnameFlags'' =+  withRef menu_ $ \menu_Ptr -> do+    let combinedFlags = menuItemFlagsToInt flags+    ptr <- toCallbackPrim cb+    idx' <- case shortcut of+             Just s' -> case s' of+               KeySequence (ShortcutKeySequence modifiers char) ->+                 insertWithFlags''+                  menu_Ptr+                  index'+                  name+                  (keySequenceToCInt modifiers char)+                  (castFunPtr ptr)+                  combinedFlags+               KeyFormat format' ->+                 if (not $ null format') then+                   insertWithShortcutnameFlags''+                     menu_Ptr+                     index'+                     name+                     format'+                     (castFunPtr ptr)+                     combinedFlags+                 else error "Fl_Menu_.menu_insert: shortcut format string cannot be empty"+             Nothing ->+               insertWithFlags''+                 menu_Ptr+                 index'+                 name+                 0+                 (castFunPtr ptr)+                 combinedFlags+    return (MenuItemIndex idx')+ {# fun Fl_Menu__insert_with_flags as insertWithFlags' { id `Ptr ()',`Int',unsafeToCString `String',id `CInt',id `FunPtr CallbackWithUserDataPrim',`Int'} -> `Int' #} {# fun Fl_Menu__insert_with_shortcutname_flags as insertWithShortcutnameFlags' { id `Ptr ()',`Int',unsafeToCString `String', unsafeToCString `String',id `FunPtr CallbackWithUserDataPrim',`Int' } -> `Int' #} instance (Parent a MenuPrim, impl ~ ( Int -> String -> Maybe Shortcut -> (Ref a -> IO ()) -> MenuItemFlags -> IO (MenuItemIndex))) => Op (Insert ()) MenuPrim orig impl where-  runOp _ _ menu_ index' name shortcut cb flags =-    withRef menu_ $ \menu_Ptr -> do-      let combinedFlags = menuItemFlagsToInt flags-      ptr <- toCallbackPrim cb-      idx' <- case shortcut of-               Just s' -> case s' of-                 KeySequence (ShortcutKeySequence modifiers char) ->-                   insertWithFlags'-                    menu_Ptr-                    index'-                    name-                    (keySequenceToCInt modifiers char)-                    (castFunPtr ptr)-                    combinedFlags-                 KeyFormat format' ->-                   if (not $ null format') then-                     insertWithShortcutnameFlags'-                       menu_Ptr-                       index'-                       name-                       format'-                       (castFunPtr ptr)-                       combinedFlags-                   else error "Fl_Menu_.menu_insert: shortcut format string cannot be empty"-               Nothing ->-                 insertWithFlags'-                   menu_Ptr-                   index'-                   name-                   0-                   (castFunPtr ptr)-                   combinedFlags-      return (MenuItemIndex idx')+  runOp _ _ menu_ index' name shortcut cb flags = insertMenuItem menu_ index' name shortcut cb flags insertWithFlags' insertWithShortcutnameFlags'+ {# fun Fl_Menu__add_with_name as add' { id `Ptr ()',unsafeToCString `String'} -> `()' #} instance (impl ~ (String -> IO ())) => Op (AddName ()) MenuPrim orig impl where   runOp _ _ menu_ name' = withRef menu_ $ \menu_Ptr -> add' menu_Ptr name'@@ -200,35 +215,8 @@ {# fun Fl_Menu__add_with_shortcutname_flags as addWithShortcutnameFlags' { id `Ptr ()', unsafeToCString `String', unsafeToCString `String',id `FunPtr CallbackWithUserDataPrim',`Int' } -> `Int' #} instance (Parent a MenuItem, impl ~ ( String -> Maybe Shortcut -> Maybe (Ref a-> IO ()) -> MenuItemFlags -> IO (MenuItemIndex))) => Op (Add ()) MenuPrim orig (impl) where   runOp _ _ menu_ name shortcut cb flags =-    withRef menu_ $ \menu_Ptr -> do-      let combinedFlags = menuItemFlagsToInt flags-      ptr <- maybe (return (castPtrToFunPtr nullPtr)) toCallbackPrim cb-      idx' <- case shortcut of-               Just s' -> case s' of-                 KeySequence (ShortcutKeySequence modifiers char) ->-                   addWithFlags'-                    menu_Ptr-                    name-                    (keySequenceToCInt modifiers char)-                    (castFunPtr ptr)-                    combinedFlags-                 KeyFormat format' ->-                   if (not $ null format') then-                     addWithShortcutnameFlags'-                     menu_Ptr-                     name-                     format'-                     (castFunPtr ptr)-                     combinedFlags-                   else error "Fl_Menu_.menu_add: Shortcut format string cannot be empty"-               Nothing ->-                   addWithFlags'-                    menu_Ptr-                    name-                    0-                    (castFunPtr ptr)-                    combinedFlags-      return (MenuItemIndex idx')+    addMenuItem (Left menu_) name shortcut cb flags addWithFlags' addWithShortcutnameFlags'+ {# fun Fl_Menu__size as size' { id `Ptr ()' } -> `Int' #} instance (impl ~ ( IO (Int))) => Op (GetSize ()) MenuPrim orig impl where   runOp _ _ menu_ = withRef menu_ $ \menu_Ptr -> size' menu_Ptr
src/Graphics/UI/FLTK/LowLevel/SysMenuBar.chs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP, EmptyDataDecls, TypeSynonymInstances, FlexibleInstances, MultiParamTypeClasses, FlexibleContexts #-}+{-# LANGUAGE CPP, EmptyDataDecls, TypeSynonymInstances, FlexibleInstances, MultiParamTypeClasses, FlexibleContexts, UndecidableInstances #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Graphics.UI.FLTK.LowLevel.SysMenuBar     (@@ -23,6 +23,8 @@ import Graphics.UI.FLTK.LowLevel.Utils import Graphics.UI.FLTK.LowLevel.Dispatch import Graphics.UI.FLTK.LowLevel.Hierarchy+import Graphics.UI.FLTK.LowLevel.MenuItem+import Graphics.UI.FLTK.LowLevel.MenuPrim  {# fun Fl_Sys_Menu_Bar_New as sysMenuBarNew' { `Int',`Int',`Int',`Int' } -> `Ptr ()' id #} {# fun Fl_Sys_Menu_Bar_New_WithLabel as sysMenuBarNewWithLabel' { `Int',`Int',`Int',`Int', unsafeToCString `String'} -> `Ptr ()' id #}@@ -75,9 +77,28 @@         withRefs items $ \menu_itemsPtr ->             menuWithM' menu_Ptr menu_itemsPtr (length items) +{# fun Fl_Sys_Menu_Bar_add_with_name as add' { id `Ptr ()',unsafeToCString `String'} -> `()' #}+instance (impl ~ (String -> IO ())) => Op (AddName ()) SysMenuBar orig impl where+  runOp _ _ menu_ name' = withRef menu_ $ \menu_Ptr -> add' menu_Ptr name'++{# fun Fl_Sys_Menu_Bar_add_with_flags as addWithFlags' { id `Ptr ()',unsafeToCString `String',id `CInt',id `FunPtr CallbackWithUserDataPrim',`Int' } -> `Int' #}+{# fun Fl_Sys_Menu_Bar_add_with_shortcutname_flags as addWithShortcutnameFlags' { id `Ptr ()', unsafeToCString `String', unsafeToCString `String',id `FunPtr CallbackWithUserDataPrim',`Int' } -> `Int' #}+instance (Parent a MenuItem, impl ~ ( String -> Maybe Shortcut -> Maybe (Ref a-> IO ()) -> MenuItemFlags -> IO (MenuItemIndex))) => Op (Add ()) SysMenuBar orig (impl) where+  runOp _ _ menu_ name shortcut cb flags =+    addMenuItem (Left (safeCast menu_)) name shortcut cb flags addWithFlags' addWithShortcutnameFlags'++{# fun Fl_Sys_Menu_Bar_insert_with_flags as insertWithFlags' { id `Ptr ()',`Int',unsafeToCString `String',id `CInt',id `FunPtr CallbackWithUserDataPrim',`Int'} -> `Int' #}+{# fun Fl_Sys_Menu_Bar_insert_with_shortcutname_flags as insertWithShortcutnameFlags' { id `Ptr ()',`Int',unsafeToCString `String', unsafeToCString `String',id `FunPtr CallbackWithUserDataPrim',`Int' } -> `Int' #}+instance (Parent a MenuPrim, impl ~ ( Int -> String -> Maybe Shortcut -> (Ref a -> IO ()) -> MenuItemFlags -> IO (MenuItemIndex))) => Op (Insert ()) SysMenuBar orig impl where+  runOp _ _ menu_ index' name shortcut cb flags = insertMenuItem (safeCast menu_) index' name shortcut cb flags insertWithFlags' insertWithShortcutnameFlags'+ -- $functions -- @ --+-- add:: ('Parent' a 'MenuItem') => 'Ref' 'SysMenuBar' -> 'String' -> 'Maybe' 'Shortcut' -> 'Maybe' ('Ref' a-> 'IO' ()) -> 'MenuItemFlags' -> 'IO' ('MenuItemIndex')+--+-- addName :: 'Ref' 'SysMenuBar' -> 'String' -> 'IO' ()+-- -- clear :: 'Ref' 'SysMenuBar' -> 'IO' () -- -- clearSubmenu :: 'Ref' 'SysMenuBar' -> 'Int' -> 'IO' ('Int')@@ -90,6 +111,8 @@ -- -- handle :: 'Ref' 'SysMenuBar' -> 'Event' -> 'IO' 'Int' --+-- insert:: ('Parent' a 'MenuPrim') => 'Ref' 'SysMenuBar' -> 'Int' -> 'String' -> 'Maybe' 'Shortcut' -> ('Ref' a -> 'IO' ()) -> 'MenuItemFlags' -> 'IO' ('MenuItemIndex')+-- -- remove :: 'Ref' 'SysMenuBar' -> 'Int' -> 'IO' () -- -- replace :: 'Ref' 'SysMenuBar' -> 'Int' -> 'String' -> 'IO' ()@@ -99,7 +122,8 @@ -- setMode :: 'Ref' 'SysMenuBar' -> 'Int' -> 'Int' -> 'IO' () -- -- setShortcut :: 'Ref' 'SysMenuBar' -> 'Int' -> 'ShortcutKeySequence' -> 'IO' ()-+--+-- @  -- $hierarchy -- @@@ -109,5 +133,9 @@ -- "Graphics.UI.FLTK.LowLevel.MenuPrim" --  | --  v+-- "Graphics.UI.FLTK.LowLevel.MenuBar"+--  |+--  v -- "Graphics.UI.FLTK.LowLevel.SysMenuBar"+-- -- @