Détecter le clique du bouton afficher/masquer Toolbar

skimpyskimpy Membre
mars 2006 modifié dans API AppKit #1
Bonjour,

La barre des titres d'une fenêtre est composée d'un bouton à  droite qui permet d'afficher / masquer la barre d'outils. J'aimerais pouvoir intercepter cet évènement afin d'effectuer une action si la barre d'outils est visible ou non.

N'ayant rien trouvé dans la doc sur un delegate ou notification au niveau de NSToolbar, je me suis dit que j'allais utiliser le delegate windowDidResize de NSWindow (la fenêtre se rétrécit ou s'agrandit quand la barre est affichée ou cachée).
Le problème que j'ai, c'est qu'il voit toujours la barre cachée quand je mets ce code dans mon delegate :

<br />- (void)windowDidResize:(NSNotification *)aNotification<br />{<br />	if([nlToolbar isVisible])<br />		NSLog(@&quot;Toolbar visible&quot;);<br />	else<br />		NSLog(@&quot;Toolbar invisible&quot;);<br />}<br />


et voilà  le résultat que j'ai (à  chaque fois que j'utilise le bouton, j'ai une succession du message ci-dessous) :
2006-03-11 09:49:45.777 Mon Appli[9984] Toolbar invisible
2006-03-11 09:49:45.882 Mon Appli[9984] Toolbar invisible
2006-03-11 09:49:45.933 Mon Appli[9984] Toolbar invisible
2006-03-11 09:49:46.036 Mon Appli[9984] Toolbar invisible

Je voulais savoir si je procédais de la bonne façon et trouver une solution pour qu'il m'affiche correctement : visible / invisible ?

Merci.

[EDIT] : j'ai essayé avec la méthode - (void)toggleToolbarShown:(id)sender en la redéfinissant mais elle n'est pas appelé quand je clique sur le bouton.

Réponses

  • BruBru Membre
    mars 2006 modifié #2
    Voici une petite astuce qui te permettra d'implanter un pseudo-delegate sur le bouton de la barre d'outil.
    Ce delegate sera appelé à  chaque appui du bouton avant apparition/masquage de la barre.

    1. dans ton objet contrôleur (celui lié à  ta fenêtre), mets ces 2 varibles d'instance dans l'@interface du header :
    <br />id oldToolbarButtonTarget;<br />SEL oldToolbarButtonAction;<br />
    



    2. dans le awakeFromNib du contrôleur, juste apès l'initialisation de la barre d'outils, ajoute ces 5 lignes de code :
    <br />    NSButton *toolBarButton=[maFenetre standardWindowButton:NSWindowToolbarButton];<br />    oldToolbarButtonTarget =[toolBarButton target];<br />    oldToolbarButtonAction =[toolBarButton action];<br />    [toolBarButton setTarget:self];<br />    [toolBarButton setAction:@selector(toolBarDelegate:)];<br />
    

    maFenetre est l'outlet qui pointe sur ta fenêtre (celle qui contient la barre d'outil).


    3. enfin, implante la méthode toolBarDelegate: dans ton contrôleur :
    <br />- (void)toolBarDelegate:(id)sender<br />{<br />    if ([[maFenetre toolbar] isVisible])<br />    {<br />        // ce que je dois faire quand le bouton est appuyé et la barre est visible<br />        // (donc appui du bouton pour masque la barre)<br />    }<br />    else<br />    {<br />        // ce que je dois faire quand le bouton est appuyé et la barre n&#39;est pas visible<br />        // (donc appui du bouton pour afficher la barre)<br />    }<br />    [oldToolbarButtonTarget performSelector:oldToolbarButtonAction withObject:sender];<br />}<br />
    


    Voilà .

    .
  • skimpyskimpy Membre
    09:47 modifié #3
    Merci Bru, ça fonctionne parfaitement.
Connectez-vous ou Inscrivez-vous pour répondre.