gtksourceview2 0.12.0 → 0.12.1
raw patch · 7 files changed
+166/−53 lines, 7 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Graphics.UI.Gtk.SourceView.SourceGutter: sourceGutterSetCellDataFunc :: (SourceGutterClass sg, CellRendererClass cell) => sg -> cell -> (CellRenderer -> Int -> Bool -> IO ()) -> IO ()
+ Graphics.UI.Gtk.SourceView.SourceGutter: sourceGutterSetCellSizeFunc :: (SourceGutterClass gutter, CellRendererClass cell) => gutter -> cell -> (CellRenderer -> IO ()) -> IO ()
Files
- Graphics/UI/Gtk/SourceView/Signals.chs +1/−1
- Graphics/UI/Gtk/SourceView/SourceGutter.chs +51/−0
- demo/LineNumber.hs +53/−0
- demo/Makefile +12/−5
- demo/SourceView.hs +46/−0
- demo/SourceViewTest.hs +0/−45
- gtksourceview2.cabal +3/−2
Graphics/UI/Gtk/SourceView/Signals.chs view
@@ -54,7 +54,7 @@ import Control.Monad (liftM) import System.Glib.FFI-import System.Glib.UTFString (peekUTFString)+import System.Glib.UTFString (peekUTFString,maybePeekUTFString) import System.Glib.GError (failOnGError) {#import System.Glib.Signals#} {#import System.Glib.GObject#}
Graphics/UI/Gtk/SourceView/SourceGutter.chs view
@@ -53,6 +53,8 @@ sourceGutterReorder, sourceGutterRemove, sourceGutterQueueDraw,+ sourceGutterSetCellDataFunc,+ sourceGutterSetCellSizeFunc, -- * Attributes sourceGutterView,@@ -80,6 +82,18 @@ {# context lib="gtk" prefix="gtk" #} +{#pointer SourceGutterDataFunc#}++foreign import ccall "wrapper" mkSourceGutterDataFunc ::+ (Ptr SourceGutter -> Ptr CellRenderer -> {#type gint#} -> {#type gboolean#} -> Ptr () -> IO ())+ -> IO SourceGutterDataFunc++{#pointer SourceGutterSizeFunc#}++foreign import ccall "wrapper" mkSourceGutterSizeFunc ::+ (Ptr SourceGutter -> Ptr CellRenderer -> Ptr () -> IO ())+ -> IO SourceGutterSizeFunc+ -- | Get the 'Window' of the gutter. The window will only be available when the gutter has at least one, -- non-zero width, cell renderer packed. sourceGutterGetWindow :: SourceGutterClass sg => sg -> IO (Maybe DrawWindow)@@ -124,6 +138,42 @@ sourceGutterQueueDraw sb = {#call gtk_source_gutter_queue_draw #} (toSourceGutter sb) +-- | Sets the 'SourceGutterDataFunc' to use for renderer. This function is used to setup the cell+-- renderer properties for rendering the current cell.+sourceGutterSetCellDataFunc :: (SourceGutterClass sg, CellRendererClass cell)+ => sg+ -> cell+ -> (CellRenderer -> Int -> Bool -> IO ())+ -> IO ()+sourceGutterSetCellDataFunc gutter cell func = do+ funcPtr <- mkSourceGutterDataFunc $ \_ c line currentLine _ -> do+ func (toCellRenderer cell)+ (fromIntegral line)+ (toBool currentLine)+ {#call gtk_source_gutter_set_cell_data_func #}+ (toSourceGutter gutter)+ (toCellRenderer cell)+ funcPtr+ (castFunPtrToPtr funcPtr)+ destroyFunPtr++-- | Sets the 'SourceGutterSizeFunc' to use for renderer. This function is used to setup the cell+-- renderer properties for measuring the maximum size of the cell.+sourceGutterSetCellSizeFunc :: (SourceGutterClass gutter, CellRendererClass cell)+ => gutter+ -> cell+ -> (CellRenderer -> IO ())+ -> IO ()+sourceGutterSetCellSizeFunc gutter cell func = do+ funcPtr <- mkSourceGutterSizeFunc $ \ _ c _ -> do+ func (toCellRenderer cell)+ {#call gtk_source_gutter_set_cell_size_func #}+ (toSourceGutter gutter)+ (toCellRenderer cell)+ funcPtr+ (castFunPtrToPtr funcPtr)+ destroyFunPtr+ -- | The 'SourceView' of the gutter sourceGutterView :: SourceGutterClass sg => Attr sg SourceView sourceGutterView = newAttrFromObjectProperty "view"@@ -150,3 +200,4 @@ sourceGutterQueryTooltip :: SourceGutterClass sg => Signal sg (CellRenderer -> TextIter -> Tooltip -> IO Bool) sourceGutterQueryTooltip = Signal $ connect_OBJECT_BOXED_OBJECT__BOOL "query-tooltip" mkTextIterCopy+
+ demo/LineNumber.hs view
@@ -0,0 +1,53 @@+-- | Line number demo.+-- Author : Andy Stewart+-- Copyright : (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>+--+-- This demo show how to build your own line number gutter.+--+module Main where++import Graphics.UI.Gtk+import Graphics.UI.Gtk.SourceView++main = do+ -- Init.+ initGUI+ + -- Create window.+ window <- windowNew+ windowSetDefaultSize window 900 600+ windowSetPosition window WinPosCenter++ -- Create source view widget.+ sourceView <- sourceViewNew++ -- Create scroll window.+ scrolledWindow <- scrolledWindowNew Nothing Nothing++ -- Insert CellRendererText in source view's gutter.+ gutter <- sourceViewGetGutter sourceView TextWindowLeft+ cell <- cellRendererTextNew+ sourceGutterInsert gutter cell 0++ -- Set gutter data.+ sourceGutterSetCellDataFunc gutter cell $ \ c l currentLine -> do+ -- Display line number.+ set (castToCellRendererText c) [cellText := show (l + 1)]+ -- Highlight current line.+ let color = if currentLine + then Color 65535 0 0 + else Color 0 65535 0+ set (castToCellRendererText c) [cellTextForegroundColor := color]++ -- Set gutter size.+ sourceGutterSetCellSizeFunc gutter cell $ \ c -> + -- -1 mean cell renderer will adjust width with chars dynamically.+ set (castToCellRendererText c) [cellTextWidthChars := (-1)]++ -- Connect and show.+ scrolledWindow `containerAdd` sourceView+ window `containerAdd` scrolledWindow+ window `onDestroy` mainQuit+ widgetShowAll window++ mainGUI
demo/Makefile view
@@ -1,11 +1,18 @@ -PROG = sourceview-SOURCES = SourceViewTest.hs+PROGS = sourceview linenumber +SOURCES = SourceView.hs LineNumber.hs -$(PROG) : $(SOURCES)- $(HC) --make $< -o $@ $(HCFLAGS)+all : $(PROGS) +sourceview : SourceView.hs+ $(HC_RULE)++linenumber : LineNumber.hs+ $(HC_RULE)++HC_RULE = $(HC) --make $< -o $@ $(HCFLAGS)+ clean:- rm -f $(SOURCES:.hs=.hi) $(SOURCES:.hs=.o) $(PROG)+ rm -f $(SOURCES:.hs=.hi) $(SOURCES:.hs=.o) $(PROGS) HC=ghc
+ demo/SourceView.hs view
@@ -0,0 +1,46 @@+-- Test file for the SourceView widget.+module Main where++import Graphics.UI.Gtk+import Graphics.UI.Gtk.SourceView++main = do+ initGUI+ win <- windowNew+ windowSetPosition win WinPosCenter+ win `onDestroy` mainQuit++ -- create the appropriate language+ lm <- sourceLanguageManagerNew+ langM <- sourceLanguageManagerGetLanguage lm "haskell"+ lang <- case langM of+ (Just lang) -> return lang+ Nothing -> do+ langDirs <- sourceLanguageManagerGetSearchPath lm+ error ("please copy haskell.lang to one of the following directories:\n"+ ++unlines langDirs)++ -- create a new SourceBuffer object+ buffer <- sourceBufferNewWithLanguage lang++ -- load up and display a file+ fileContents <- readFile "SourceView.hs"+ textBufferSetText buffer fileContents+ textBufferSetModified buffer False++ sourceBufferSetHighlightSyntax buffer True++ -- create a new SourceView Widget+ sv <- sourceViewNewWithBuffer buffer++ -- put it in a scrolled window+ sw <- scrolledWindowNew Nothing Nothing+ sw `containerAdd` sv+ scrolledWindowSetPolicy sw PolicyAutomatic PolicyAutomatic+ sw `scrolledWindowSetShadowType` ShadowIn+ win `containerAdd` sw++ -- show the widget and run the main loop+ windowSetDefaultSize win 400 500+ widgetShowAll win+ mainGUI
− demo/SourceViewTest.hs
@@ -1,45 +0,0 @@--- Test file for the SourceView widget.-module Main where--import Graphics.UI.Gtk-import Graphics.UI.Gtk.SourceView--main = do- initGUI- win <- windowNew- win `onDestroy` mainQuit-- -- create the appropriate language- lm <- sourceLanguageManagerNew- langM <- sourceLanguageManagerGetLanguage lm "haskell"- lang <- case langM of- (Just lang) -> return lang- Nothing -> do- langDirs <- sourceLanguageManagerGetSearchPath lm- error ("please copy haskell.lang to one of the following directories:\n"- ++unlines langDirs)-- -- create a new SourceBuffer object- buffer <- sourceBufferNewWithLanguage lang-- -- load up and display a file- fileContents <- readFile "SourceViewTest.hs"- textBufferSetText buffer fileContents- textBufferSetModified buffer False-- sourceBufferSetHighlightSyntax buffer True-- -- create a new SourceView Widget- sv <- sourceViewNewWithBuffer buffer-- -- put it in a scrolled window- sw <- scrolledWindowNew Nothing Nothing- sw `containerAdd` sv- scrolledWindowSetPolicy sw PolicyAutomatic PolicyAutomatic- sw `scrolledWindowSetShadowType` ShadowIn- win `containerAdd` sw-- -- show the widget and run the main loop- windowSetDefaultSize win 400 500- widgetShowAll win- mainGUI
gtksourceview2.cabal view
@@ -1,5 +1,5 @@ Name: gtksourceview2-Version: 0.12.0+Version: 0.12.1 License: LGPL-2.1 License-file: COPYING Copyright: (c) 2001-2010 The Gtk2Hs Team@@ -24,8 +24,9 @@ Data-Dir: demo Data-Files: haskell.lang- SourceViewTest.hs+ SourceView.hs Makefile+ LineNumber.hs x-Types-File: Graphics/UI/Gtk/SourceView/Types.chs x-Types-Tag: gtksourceview2