Modification de la top bar d'une Window

06:36 modifié dans API AppKit #1
Bonjour à  tous,

Je ne sais pas si un tel sujet existe déjà  (pas trouvé malgré la recherche), mais je cherche à  faire une modification sur le topbar d'une NSWindow.
Il s'agit en fait de faire comme pas mal de Shareware (et aussi comme Safari 4), c'est à  dire implémenter un ptit objet en haut à  droite de la fenêtre.
Pour mon cas, ça sera un popup (voir screenshot joint)

Si vous avez une piste, je prend !  :o

Réponses

  • schlumschlum Membre
    06:36 modifié #2
    À part créer sa propre classe fenêtre, je ne vois pas...
  • 06:36 modifié #3
    dans 1238665336:

    À part créer sa propre classe fenêtre, je ne vois pas...

    Tu veux dire qu'il faudrait carrément que je réimplémente les différents boutons close, minimize, zoom et tout le tralala ? ... abusé quand même...

    Moi quand je vois les shareware qui implémentent ça juste pour mettre "XX Days left... Buy Now", j'ai du mal à  croire qu'ils se sont taper une sous classe NSWindow avec le codage des différents event (mouseDragged, etc..)
  • schlumschlum Membre
    06:36 modifié #4
    dans 1238665799:

    dans 1238665336:

    À part créer sa propre classe fenêtre, je ne vois pas...

    Tu veux dire qu'il faudrait carrément que je réimplémente les différents boutons close, minimize, zoom et tout le tralala ? ... abusé quand même...


    Non, mais hacker la méthode de dessin de la barre en appelant la méthode père puis ce qu'on veut...
  • 06:36 modifié #5
    dans 1238665883:

    dans 1238665799:

    dans 1238665336:

    À part créer sa propre classe fenêtre, je ne vois pas...

    Tu veux dire qu'il faudrait carrément que je réimplémente les différents boutons close, minimize, zoom et tout le tralala ? ... abusé quand même...


    Non, mais hacker la méthode de dessin de la barre en appelant la méthode père puis ce qu'on veut...


    Et comment je vais trouver ça moi :o
  • schlumschlum Membre
    06:36 modifié #6
    Ah ben c'est du reverse engeneering avec class-dump...

    Mais il y a peut-être une méthode non documentée pour le faire directement d'ailleurs.
  • avril 2009 modifié #7
    Apparemment en documenté il y a
    <br />standardWindowButton:<br />
    

    de NSWindow


    if you want to put a view in the titlebar, simply ask a standard button for its superview and frame and add some view relative to that.


    En récupérant par exemple la superview de NSWindowToolbarButton (donc situé là  où je veux, cà d à  droite), on peut la modifier pour y rajouter ce que l'on veut
    <br />id superview = [[[self window] standardWindowButton:NSWindowToolbarButton] superview];<br />
    
  • schlumschlum Membre
    06:36 modifié #8
    Ah ben c'est même documenté alors, c'est merveilleux  :)

    Mais je suppose que c'est incompatible avec un éventuel "toolbarButton".
  • 06:36 modifié #9
    dans 1238668460:

    Ah ben c'est même documenté alors, c'est merveilleux  :)

    Mais je suppose que c'est incompatible avec un éventuel "toolbarButton".


    Bha à  la limite si y'en a un de toolbarbutton tu mets une condition pour décaler l'item que tu rajoutes dans la title bar.
  • NoNo Membre
    06:36 modifié #10
    Il y a 2 méthodes pour pouvoir ajouter quelque chose à  une barre de titre d'une fenêtre cocoa.

    La première qui est aussi la plus officielle est de créer une mini fenêtre sans décor (borderless) dans laquelle se trouve ton NSControl.
    Ensuite tu attaches cette mini fenêtre (méthode addChildWindow:ordered: de NSWindow) à  ta fenêtre principale.

    La seconde est tout simplement d'accéder à  la NSView dans laquelle est dessinée la barre de titre pour ensuite y ajouter (méthode addSubview de NSView) ton NSControl.
    Cette NSview est récupérable par un [[maFenetre contentView] superview].
    Cette méthode reste fiable, tant qu'Apple ne change pas la manière dont il dessine ses fenêtres cocoa, et bien sûr, elle ne fonctionne que sur les fenêtres stylées (donc celle qui ont une barre de menu).
  • FantattitudeFantattitude Membre
    06:36 modifié #11
    Matt Patenaude, dev' Cocoa renommé notamment pour le magnifique Bowtie et le récent Bluebird s'est intéressé au problème et à  créé une classe pour faire très aisément cela, cette classe est accompagné d'un tutorial magnifiquement fait =).

    Voilà  : http://13bold.com/tutorials/accessory-view/
Connectez-vous ou Inscrivez-vous pour répondre.