2011-06-28 9 views
5

Gtk2hsには、Widgetクラスを実装するさまざまなウィジェットデータ型があります。同じことをするカスタムデータ型を書くことは可能ですか?gtkhsのWidgetクラスのカスタム実装

私はこのようなルアコードを表示して実行するためのウィジェットを持っています。

data LuaWidget = LuaWidget { text :: TextView, package :: HBox } deriving Eq 
instance Widget LuaWidget where 
    .... 

ハスケルレベルでは可能ですか?

答えて

3

gtkのHaskellで新しいウィジェット 'クラス'を作成することはできません。

あなたができることは、既存のウィジェットタイプにカスタム属性を与えることです。

import System.Glib.GObject 
import Graphics.UI.Gtk 

-- | create a new 'Figure' plot 
plotNew :: FigureHandle -> IO DrawingArea 
plotNew f = do 
    canvas <- drawingAreaNew 

    set canvas [maybeFigure := (Just f)] 

    _ <- on canvas exposeEvent $ tryEvent $ liftIO $ do 
      s <- widgetGetSize canvas 
      drw <- widgetGetDrawWindow canvas 
      fig <- get canvas figure 
      renderWithDrawable drw (renderFigureState fig s) 

    return canvas 

-- | the figure attribute 
figure :: Attr DrawingArea FigureState 
figure = newAttr getFigure setFigure 
    where getFigure o = do 
       Just f <- get o maybeFigure 
       readMVar f 
     setFigure o f = set o [maybeFigure :~> (\(Just h) -> do 
       modifyMVar_ h (\_ -> return f) 
       return $ Just h)] 

maybeFigure :: Attr DrawingArea (Maybe FigureHandle) 
maybeFigure = unsafePerformIO $ objectCreateAttribute 
{-# NOINLINE maybeFigure #-} 
:例えば、パッケージ plot-gtkカスタム・データ・フィールド( System.Glib.GObject)に drawingAreaウィジェットに追加されます
関連する問題