Tutoriel Gtk2Hs

4.4 Flèches et infobulles

Le widget Arrow dessine une pointe de flèche, pointant dans plusieurs directions possibles et avec plusieurs styles possibles. Comme le widget Label, il n’émet pas de signaux:

Il y a seulement deux fonctions pour manipuler un widget Arrow :

arrowNew :: ArrowType -> ShadowType -> IO Arrow

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

Le type ArrowType a cinq constructeurs:

  • ArrowUp
  • ArrowDown
  • ArrowLeft
  • ArrowRight
  • ArrowNone

Le type ShadowType a également cinq constructeurs:

  • ShadowIn
  • ShadowOut
  • ShadowEtchedIn
  • ShadowEtchedOut
  • ShadowNone

Les infobulles sont les petites chaînes de texte qui apparaissent quand vous laissez le pointeur de la souris au dessus d’un bouton ou au dessus d’autres widgets pendant quelques secondes.

Les widgets qui ne reçoivent pas d’événements (Les widgets qui n’ont pas leur propre fenêtre) ne fonctionnent pas avec les info-bulles.

Le premier appel que vous utilisez crée une nouvelle info-bulle. Vous avez seulement besoin de le faire une fois pour un groupe d’info-bulles.

tooltipsNew :: IO Tooltips

Ensuite, pour tous les widgets, utilisez:

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

Le premier argument est l’infobulle que vous avez crée, suivi par le widget auquel vous souhaitez assigner l’infobulle et enfin le texte que vous souhaitez afficher. Le dernier argument est une chaîne de caractères qui peut être utilisée comme identifiant.

Vous pouvez activer ou désactiver l’infobulle associée à un Tooltips avec :

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

Voici un exemple pour montrer l’utilisation des flèches et des infobulles

Gtk Gtk2Hs Arrow and tooltip example

La fenêtre ci-dessus a été redimensionnée par rapport à sa taille d’origine pour montrer comment l’empaquetage dans une grille conserve l’espacement des boutons avec les flèches.

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