4.4 Flechas y Tooltips

El widget Arrow (flecha) dibuja una cabeza de flecha, apuntando en una dirección y con un estilo seleccionable. Igual que el widget etiqueta, no emite señales.

Sólo hay dos funciones para manipular un widget Arrow:

arrowNew :: ArrowType -> ShadowType -> IO Arrow

arrowSet :: ArrowClass self => self -> ArrowType -> ShadowType -> IO ()

El ArrowType tiene cinco constructores:

El ShadowType (tipo de sombra) también tiene cinco constructores:

Los Tooltips son esas pequeñas frases que surgen cuando dejas el puntero sobre un botón u otro widget durante unos segundos.

Los widgets que no reciben eventos (los que no tienen su propia ventana) no funcionan con los tooltips.

Esta primera llamada creará un tooltip nuevo. Sólo necesitas llamarla una vez para crear un conjunto de tooltips.

tooltipsNew :: IO Tooltips

Después, para cada widget, usa:

tooltipsSetTip :: (TooltipsClass self, WidgetClass widget)
  => self -> widget -> String -> String -> IO ()

El primer argumento es el tooltip que ya has creado, seguido por el widget para el que quieres el tooltip y el texto que quieres que aparezca. El último argumento es una cadena de texto que puede usarse como su identificador.

Puedes activar o desactivar los mensajes asociados a un Tooltips mediante:

tooltipsEnable :: TooltipsClass self => self -> IO ()
tooltipsDisable :: TooltipsClass self => self -> IO ()

Aquí tienes un ejemplo que ilustra el uso de flechas y tooltips.

Arrow and tooltip example

La ventana superior ha sido cambiada de tamaño, para mostrar como el empaquetado de una tabla preserva el espacio de los botones con sus flechas.

Nota: Los tooltips no funcionan con GHCi (en mi máquina) pero sí lo hacen cuando se compila. Por supuesto, no los puedes ver en la imagen.

import Graphics.UI.Gtk

main :: IO ()
main = do
  initGUI
  window <- windowNew
  set window [windowTitle := "Arrow Tips",
              windowDefaultWidth := 200,
              windowDefaultHeight := 200, containerBorderWidth := 20]

  table <- tableNew 5 5 True
  containerAdd window table

  button1 <- buttonNew
  button2 <- buttonNew
  button3 <- buttonNew
  button4 <- buttonNew

  tableAttachDefaults table button1 0 1 2 3
  tableAttachDefaults table button2 2 3 0 1
  tableAttachDefaults table button3 4 5 2 3
  tableAttachDefaults table button4 2 3 4 5

  tlt <- tooltipsNew

  arrow1 <- arrowNew ArrowLeft ShadowEtchedIn
  containerAdd button1 arrow1
  tooltipsSetTip tlt button1 "West" "T1"

  arrow2 <- arrowNew ArrowUp ShadowEtchedOut
  containerAdd button2 arrow2
  tooltipsSetTip tlt button2 "North" "T2"

  arrow3 <- arrowNew ArrowRight ShadowEtchedIn
  containerAdd button3 arrow3
  tooltipsSetTip tlt button3 "East" "T3"

  arrow4 <- arrowNew ArrowDown ShadowEtchedOut
  containerAdd button4 arrow4
  tooltipsSetTip tlt button4 "South" "T4"

  tooltipsEnable tlt
  widgetShowAll window
  onDestroy window mainQuit
  mainGUI