gtksourceview3-0.13.1.4: Graphics/UI/Gtk/SourceView/SourceMarkAttributes.chs
{-# LANGUAGE CPP #-}
-- -*-haskell-*-
-- GIMP Toolkit (GTK) SourceMarkAttributes
--
-- Author : Hamish Mackenzie
--
-- Created: 20 June 2015
--
-- Copyright (C) 2015 Hamish Mackenzie
--
-- This library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2.1 of the License, or (at your option) any later version.
--
-- This library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- |
-- Maintainer : http://github.com/gtk2hs
-- Stability : provisional
-- Portability : portable (depends on GHC)
--
module Graphics.UI.Gtk.SourceView.SourceMarkAttributes (
-- * Description
-- | `SourceMarkAttributes` is an object specifying attributes used by
-- a `SourceView` to visually show lines marked with `SourceMarks` of
-- a specific category. It allows you to define a background color of
-- a line, an icon shown in gutter and tooltips.
--
-- The background color is used as a background of a line where a mark
-- is placed and it can be set with `sourceMarkAttributesSetBackground`.
-- To check if any custom background color was defined and what color
-- it is, use `sourceMarkAttributesGetBackground`.
--
-- An icon is a graphic element which is shown in the gutter of a view.
-- An example use is showing a red filled circle in a debugger to show
-- that a breakpoint was set in certain line. To get an icon that will
-- be placed in a gutter, first a base for it must be specified and
-- then `sourceMarkAttributesRenderIcon` must be called. There are
-- several ways to specify a base for an icon:
--
-- * `sourceMarkAttributesSetIconName`
-- * `sourceMarkAttributesSetGIcon`
-- * `sourceMarkAttributesSetPixbuf`
--
-- Using any of the above functions overrides the one used earlier.
-- But note that a getter counterpart of earlier used function can
-- still return some value, but it is just not used when rendering
-- the proper icon.
--
-- To provide meaningful tooltips for a given mark of a category, you
-- should connect to `queryTooltipText` or `queryTooltipMarkup` where
-- the latter takes precedence.
-- * Types
SourceMarkAttributes,
SourceMarkAttributesClass,
-- * Methods
castToSourceMarkAttributes,
sourceMarkAttributesNew,
sourceMarkAttributesSetBackground,
sourceMarkAttributesGetBackground,
sourceMarkAttributesSetIconName,
sourceMarkAttributesGetIconName,
sourceMarkAttributesSetPixbuf,
sourceMarkAttributesGetPixbuf,
sourceMarkAttributesRenderIcon,
sourceMarkAttributesGetTooltipText,
sourceMarkAttributesGetTooltipMarkup,
-- * Attributes
sourceMarkAttributesBackground,
sourceMarkAttributesIconName,
sourceMarkAttributesPixbuf,
-- * Signals
queryTooltipMarkup,
queryTooltipText
) where
import Control.Monad (liftM)
import System.Glib.GObject (makeNewGObject)
import System.Glib.Attributes
import System.Glib.FFI
import System.Glib.UTFString
import Graphics.UI.Gtk.Abstract.Object (makeNewObject)
import Graphics.UI.Gtk (RGBA)
{#import Graphics.UI.Gtk.SourceView.Signals#}
{#import Graphics.UI.Gtk.SourceView.Types#}
{# context lib="gtk" prefix="gtk" #}
-- | Creates a new source mark attributes.
--
sourceMarkAttributesNew :: IO SourceMarkAttributes
sourceMarkAttributesNew = makeNewObject mkSourceMarkAttributes $ liftM castPtr
{# call unsafe source_mark_attributes_new #}
-- | Sets background color.
--
sourceMarkAttributesSetBackground :: SourceMarkAttributesClass attributes => attributes -> Maybe RGBA -> IO ()
sourceMarkAttributesSetBackground attributes background =
maybeWith with background $ \ backgroundPtr ->
{# call unsafe source_mark_attributes_set_background #}
(toSourceMarkAttributes attributes)
(castPtr backgroundPtr)
-- | Gets background color.
--
sourceMarkAttributesGetBackground :: SourceMarkAttributesClass attributes => attributes -> IO (Maybe RGBA)
sourceMarkAttributesGetBackground attributes =
alloca $ \ rgbaPtr -> do
isSet <- {# call gtk_source_mark_attributes_get_background #}
(toSourceMarkAttributes attributes)
(castPtr rgbaPtr)
if isSet /= 0 then Just <$> peek rgbaPtr else return Nothing
-- | Sets a name of an icon to be used as a base for rendered icon.
--
sourceMarkAttributesSetIconName :: (SourceMarkAttributesClass attributes, GlibString iconName)
=> attributes
-> Maybe iconName
-> IO ()
sourceMarkAttributesSetIconName attributes iconName =
maybeWith withUTFString iconName $ \iconNamePtr ->
{# call gtk_source_mark_attributes_set_icon_name #}
(toSourceMarkAttributes attributes)
iconNamePtr
-- | Gets a name of an icon to be used as a base for rendered icon.
--
sourceMarkAttributesGetIconName :: (SourceMarkAttributesClass attributes, GlibString iconName)
=> attributes
-> IO (Maybe iconName)
sourceMarkAttributesGetIconName attributes =
{# call gtk_source_mark_attributes_get_icon_name #}
(toSourceMarkAttributes attributes)
>>= maybePeek peekUTFString
-- | Sets a pixbuf to be used as a base for rendered icon.
--
sourceMarkAttributesSetPixbuf :: SourceMarkAttributesClass attributes
=> attributes
-> Maybe Pixbuf
-> IO ()
sourceMarkAttributesSetPixbuf attributes pixbuf =
{# call source_mark_attributes_set_pixbuf #}
(toSourceMarkAttributes attributes)
(maybe (Pixbuf nullForeignPtr) id pixbuf)
-- | Gets a pixbuf to be used as a base for rendered icon.
--
sourceMarkAttributesGetPixbuf :: SourceMarkAttributesClass attributes
=> attributes
-> IO (Maybe Pixbuf)
sourceMarkAttributesGetPixbuf attributes =
maybeNull (makeNewGObject mkPixbuf) $
{# call gtk_source_mark_attributes_get_pixbuf #}
(toSourceMarkAttributes attributes)
-- | Renders an icon of given size. The base of the icon is set by the
-- last call to one of: `sourceMarkAttributesSetPixbuf`,
-- `sourceMarkAttributesSetGIcon` or `sourceMarkAttributessetIconName`.
--
sourceMarkAttributesRenderIcon :: (SourceMarkAttributesClass attributes, WidgetClass widget)
=> attributes
-> widget -- ^ @widget@ of which style settings may be used.
-> Int -- ^ @size@ of the redered icon. Cannot be lower than 1
-> IO (Maybe Pixbuf)
sourceMarkAttributesRenderIcon attributes widget size =
maybeNull (makeNewGObject mkPixbuf) $
{# call gtk_source_mark_attributes_render_icon #}
(toSourceMarkAttributes attributes)
(toWidget widget)
(fromIntegral size)
-- | Queries for a tooltip by emitting a `queryTooltipText` signal. The tooltip is a plain text.
--
sourceMarkAttributesGetTooltipText :: (SourceMarkAttributesClass attributes, SourceMarkClass mark, GlibString text)
=> attributes
-> mark
-> IO (Maybe text)
sourceMarkAttributesGetTooltipText attributes mark =
{# call gtk_source_mark_attributes_get_tooltip_text #}
(toSourceMarkAttributes attributes)
(toSourceMark mark)
>>= maybePeek readUTFString
-- | Queries for a tooltip by emitting a `queryTooltipMarkup` signal. The tooltip may contain a markup.
--
sourceMarkAttributesGetTooltipMarkup :: (SourceMarkAttributesClass attributes, SourceMarkClass mark, GlibString markup)
=> attributes
-> mark
-> IO (Maybe markup)
sourceMarkAttributesGetTooltipMarkup attributes mark =
{# call gtk_source_mark_attributes_get_tooltip_markup #}
(toSourceMarkAttributes attributes)
(toSourceMark mark)
>>= maybePeek readUTFString
-- | A color used for background of a line.
--
sourceMarkAttributesBackground :: SourceMarkAttributesClass attributes => Attr attributes (Maybe RGBA)
sourceMarkAttributesBackground = newAttr sourceMarkAttributesGetBackground sourceMarkAttributesSetBackground
-- | An icon name that may be a base of a rendered icon.
--
sourceMarkAttributesIconName :: (SourceMarkAttributesClass attributes, GlibString iconName) => Attr attributes (Maybe iconName)
sourceMarkAttributesIconName = newAttr sourceMarkAttributesGetIconName sourceMarkAttributesSetIconName
-- | A `Pixbuf` that may be a base of a rendered icon.
--
sourceMarkAttributesPixbuf :: SourceMarkAttributesClass attributes => Attr attributes (Maybe Pixbuf)
sourceMarkAttributesPixbuf = newAttr sourceMarkAttributesGetPixbuf sourceMarkAttributesSetPixbuf
-- | The code should connect to this signal to provide a tooltip for given mark . The tooltip can contain a markup.
--
queryTooltipMarkup :: (SourceMarkAttributesClass self, GlibString markup) => Signal self (SourceMark -> IO markup)
queryTooltipMarkup = Signal (connect_OBJECT__GLIBSTRING "query-tooltip-markup")
-- | The code should connect to this signal to provide a tooltip for given mark . The tooltip should be just a plain text.
--
queryTooltipText :: (SourceMarkAttributesClass self, GlibString text) => Signal self (SourceMark -> IO text)
queryTooltipText = Signal (connect_OBJECT__GLIBSTRING "query-tooltip-text")