Barre d'outils dans une fenêtre

VeillardVeillard Membre
18:49 modifié dans API AppKit #1
Bonjour à  tous,

Je cherche comment créer une barre d'outils dans une fenêtre avec le bouton transparent qui permet de l'afficher ou de la masquer. J'ai rien trouvé dans IB ni dans les archives.  :(

Merci

A+

Favouille

Réponses

  • novembre 2004 modifié #3
    Juste un truc: on a depuis une quelques heures une super section lien qui reprendra tous les articles traitant de cocoa sur le web, et ce manière individuelle, et avec un moteur de recherche ;)
  • VeillardVeillard Membre
    18:49 modifié #4
    Merci beaucoup, j'y vais tout de suite  :)
  • VeillardVeillard Membre
    18:49 modifié #5
    Bon je déterre ce vieux thread... Je n'arrive toujours pas à  faire ma barre d'outils  :'(
    J'ai regardé sur Project Omega => trop sec comme explications et sur CocoaDev => ça ne marche pas  :'(

    Bon le problème, c'est que je veux une ToolBar sur une seule fenêtre dans un nib autre que le Main.

    Quelle est la première chose à  faire ?  o:)
  • muqaddarmuqaddar Administrateur
    18:49 modifié #6
    Créer le nib, créer la fenêtre dans le nouveau nib.

    Puis initialiser une instance de la classe qui va aller chercher le nouveau Nib :

    <br />	if (!_prefsControleur) {<br />		_prefsControleur = [[prefsController alloc] initWithWindowNibName:@&quot;Preferences&quot;]; <br />	}<br />	[_prefsControleur showWindow:self];<br />
    


    et dans la classe prefsController, faire un setup :

    [self setupPrefsToolbar];
    


    et importer le fichier qui contient la toolbar (une categorie par exemple comme ds PO) en haut de cette classe.

    Dans le nouveau Nib, personnalise le file'owner avec la classe prefsController (ds mon cas), donc mets la tienne.
  • VeillardVeillard Membre
    18:49 modifié #7
    Excellent !!! merci Alex  o:)
    J'avais oublié le "[self setupPrefsToolbar];"

    Par contre, comment fait-on pour afficher les icônes perso ?  :o
  • 18:49 modifié #8
    > Par contre, comment fait-on pour afficher les icônes perso
    Salut,
    L'article de P? est composé de quatre pages...

    - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar
        itemForItemIdentifier:(NSString *)itemIdentifier
        willBeInsertedIntoToolbar:(BOOL)fla

    Permet d'obtenir le toolbaritem qui accepte un setImage:(NSImage*)
  • muqaddarmuqaddar Administrateur
    18:49 modifié #9
    dans 1123351298:

    Excellent !!! merci Alex  o:)
    J'avais oublié le "[self setupPrefsToolbar];"

    Par contre, comment fait-on pour afficher les icônes perso ?  :o


    <br />if ([itemIdentifier isEqualToString:@&quot;itemCasiers&quot;]) {<br />		[item setLabel:@&quot;Casiers&quot;];<br />		[item setPaletteLabel:[item label]];<br />		[item setImage:[NSImage imageNamed:@&quot;itemCasiers&quot;]];<br />		[item setTarget:self];<br />		[item setAction:@selector(selectViewCasiers:)];<br />	}<br />
    


    donc le setImage comme d'hab, avec le nom de tes icones.
  • VeillardVeillard Membre
    18:49 modifié #10
    dans 1123353388:

    L'article de P? est composé de quatre pages...


    Je me disais aussi que l'article était un peu léger. J'avais pas vu les autres pages  :o je suis un peu fatigué :fouf):

    Merci à  tous les deux
  • VeillardVeillard Membre
    18:49 modifié #11
    Ca y est, j'ai fini ! Il ne reste que quelques détails à  peaufiner on verra ça demain (dodo !).

    Encore merci à  tous 



    [Fichier joint supprimé par l'administrateur]
  • fouffouf Membre
    18:49 modifié #12
    dans 1123367676:

    [...] on verra ça demain (dodo !).

    Déjà  ?? A minuit et demi, c'est top :fouf): :P
  • VeillardVeillard Membre
    18:49 modifié #13
    Non, c'est ma femme qui va râler si je passe mes nuits devant l'ordi. :P
  • muqaddarmuqaddar Administrateur
    18:49 modifié #14
    Nikel, ta toolbar ! ;)
  • VeillardVeillard Membre
    18:49 modifié #15
    Merci  ;)
    J'ai fait encore mieux. Les autres fenêtres ont leur barre d'outil. Honnêtement, je ne pensais pas que c'étais aussi simple  :fouf):

    En revanche, il faut que j'éclaircisse un point obscur sur la mise en place de mon SearchField dans ma toolbar. J'ai un plantage...
  • VeillardVeillard Membre
    18:49 modifié #16
    Bon, un peu plus fin :
    Je cherche à  désactiver un item de la ToolBar mais quand je fais :
    else if ([itemIdentifier isEqualToString:@&quot;deletePlongee&quot;])<br />	{<br />		[item setLabel:@&quot;Supprimer&quot;];<br />		[item setPaletteLabel:[item label]];<br />		[item setImage:[NSImage imageNamed:@&quot;supprimerPl&quot;]];<br />		[item setToolTip:@&quot;Supprimer la/les plongée(s) sélectionnée(s)&quot;];<br />		[item setTarget:self];<br />		[item setAction:@selector(deletePlongee:)];<br />		[item setEnabled:NO];<br />	}<br />
    


    rien ne se passe...
  • fouffouf Membre
    18:49 modifié #17
    Regarde - (BOOL)validateToolbarItem:(NSToolbarItem *)theItem
    de NSObject. C'est envoyé à  la target de l'item en question. Tu retournes NO si tu veux que ca sois désactivé et YES sinon. ;)
  • VeillardVeillard Membre
    18:49 modifié #18
    Merci Fouf ! J'ai tout fini hier soir  :P
  • VeillardVeillard Membre
    18:49 modifié #19
    C'était trop beau, ma barre d'outils me pose quelques problèmes. En réalité c'est le NSSearchField qui fait planter mon appli quand j'essaie de personnaliser la barre en enlevant ou rajoutant la SerarchField.
    J'ai pas trop capté comment on l'insérait dans la barre, j'ai donc fait une bidouille qui marche :
    J'ai glissé un NSSearchField SUR ma TableView puis j'ai créé un outlet sur la Search en question.

    Ce qu'il se passe est très simple. Quand je supprime la Search de la barre, elle réapparaà®t sur ma TableView et inversement avec un plantage à  la clé !

    Je suis presque sûr qu'il ne faut pas s'y prendre de la sorte.  ???
  • muqaddarmuqaddar Administrateur
    18:49 modifié #20
    dans 1123860801:

    C'était trop beau, ma barre d'outils me pose quelques problèmes. En réalité c'est le NSSearchField qui fait planter mon appli quand j'essaie de personnaliser la barre en enlevant ou rajoutant la SerarchField.
    J'ai pas trop capté comment on l'insérait dans la barre, j'ai donc fait une bidouille qui marche :
    J'ai glissé un NSSearchField SUR ma TableView puis j'ai créé un outlet sur la Search en question.

    Ce qu'il se passe est très simple. Quand je supprime la Search de la barre, elle réapparaà®t sur ma TableView et inversement avec un plantage à  la clé !

    Je suis presque sûr qu'il ne faut pas s'y prendre de la sorte.  ???


    Bizarre, une fois que ton élément (searchField) est créé, et qu'il est ajouté ds la toolbar par défaut et celle de customization, il ne devrait pas y avoir de plantage.
    ça plante à  quel moment exactement ?
    On peut voir le code ?
  • VeillardVeillard Membre
    août 2005 modifié #21
    Quand j'enlève le SearchField => pas de plantage. Par contre, quand je la remet => plantage.

    - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag<br />{<br />	NSToolbarItem *item = [[[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier] autorelease];<br /><br />	if ([itemIdentifier isEqualToString:@&quot;saveDocument&quot;])<br />	{<br />	}<br /><br />&nbsp; &nbsp; else if ([itemIdentifier isEqual: @&quot;searchDocToolbarItem&quot;])<br />	{<br />		[item setLabel:@&quot;Chercher dans le carnet&quot;];<br />		[item setPaletteLabel:@&quot;Chercher dans le carnet&quot;];<br />		[item setView:searchField];<br />		[item setMinSize:NSMakeSize(100,NSHeight([searchField frame]))];<br />		[item setMaxSize:NSMakeSize(300,NSHeight([searchField frame]))];<br />		NSMenu *submenu=[[[NSMenu alloc] init] autorelease];<br />		NSMenuItem *submenuItem=[[[NSMenuItem alloc] initWithTitle: @&quot;Chercher&quot;	action:@selector(searchUsingSearchPanel:) keyEquivalent: @&quot;&quot;] autorelease];<br />		NSMenuItem *menuFormRep=[[[NSMenuItem alloc] init] autorelease];<br />		[submenu addItem: submenuItem];<br />		[submenuItem setTarget:self];<br />		[menuFormRep setSubmenu:submenu];<br />		[menuFormRep setTitle:[item label]];<br />		[item setMenuFormRepresentation:menuFormRep];<br />&nbsp; &nbsp; }<br />
    
  • 18:49 modifié #22
    Hello,
    Plus simple pour implémenter ta recherche?
    Ds ton nib, tu crée une NSView, ds cette view tu met ton searchField
    Ds ton header tu met :
    {IBOutlet NSView *searchView;<br />IBOutlet NSSearchField *searchField;<br />}<br />- (IBAction)search:(id)sender;
    


    Tu fais les connexions, et l'action search va du searchField vers ta classe.
    (ou pour  envoyer l'action rechercher en continu tu utilises - (void)textDidChange:(NSNotification *)n
    Sans oublier bien sûr le delegate de SearchField vers ta classe.
    ensuite pour l'implementation ds la toolbar :
    - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar<br />&nbsp; &nbsp; itemForItemIdentifier:(NSString *)itemIdentifier<br />&nbsp; &nbsp; willBeInsertedIntoToolbar:(BOOL)flag<br />{<br />NSToolbarItem *item;<br />&nbsp; &nbsp; item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier];<br />if ( [itemIdentifier isEqualToString:@&quot;Recherche&quot;] ) {<br />	[item setLabel:@&quot;Recherche&quot;];<br />	NSRect fRect = [searchView frame];<br />	[item setPaletteLabel:[item label]];<br />	[item setView:searchView];<br />	[item setMinSize:fRect.size];<br />	[item setMaxSize:fRect.size];<br />&nbsp; &nbsp; }<br />	return [item autorelease];<br />}
    

    et le tour est joué ;)
    J'espère t'avoir aidé ?
  • août 2005 modifié #23
    Sinon pour ajouter et supprimer un item j'ai trouvé une astuce (oui ben c'est à  ma manière hein :p
    En fait, on retourne une array contenant tous les items :
    NSArray *items = [myToolbar items];
    

    Après tu peux faire une boucle (j'vais me faire engueuler) :
    int i;<br />int rechercheIndex;<br />for(i=0;i&lt;[items count];i++){<br />if([[items objectAtIndex:i] isEqualToString:@&quot;Recherche&quot;])<br />rechercheIndex = i;<br />}<br />[myToolbar removeItemAtIndex:rechercheIndex];<br />
    

    Après, tu retiens cet integer puis quand tu veux ajouter le searchField au même endroit :
    [myToolbar insertItemWithItemIdentifier:@&quot;Recherche&quot; atIndex:rechercheIndex];
    


  • 18:49 modifié #24
    Allez, puisque tu as l'air d'y tenir, je vais t'engueuler (et pour te ne pas te décevoir non plus, je suis sûr que tu pensais que c'était moi la victime, alors je vais m'appliquer en plus).

    Engueulade Numéro 1: après rechercheIndex = i, tu peux mettre un break, ça ne sert à  rien de continuer la boucle alors que tu as l'info. Ce qui te dispense également de créer une variable rechercheIndex, vu que i ne sera plus incrémenté après le break, et aura donc la bonne valeur.

    Engueulade numéro 2: items renvoie un tableau rempli de NSToolBarItem et non de NSString, donc ils ne répondront pas au message -isEqualToString:, tu dois donc envoyer -identifier avant le isEqualToString:

    Engueulade numéro 3: le KVC n'est mieux:
    [tt]int rechercheIndex = [[[myToolbar items] valueForKey:@identifier] indexOfObject:@Recherche];[/tt]

    Engueulade numéro 4: en admettant que je me suis planté dans l'engueulade numéro 2, et que c'est effectivement un tableau de string qui est renvoyé, tu peux utiliser -indexOfObject pour retrouver l'index, plutôt que de passer par une boucle.

    Voili voulou.
  • 18:49 modifié #25
    Hoooo grand maà®tre veuillez me pardonner grand maà®tre  o:)   :P
  • VeillardVeillard Membre
    18:49 modifié #26
    Je vois que vous avez bossé tard cette nuit  :)

    Ca marche !
    Je ne savais pas où mettre ma View, maintenant tout est plus clair. Du coup, j'ai viré ma SearchField de ma fenêtre principale.

    Merci à  tous les deux 
  • 18:49 modifié #27
    dans 1123919739:

    Je vois que vous avez bossé tard cette nuit  :)

    Ca marche !
    Je ne savais pas où mettre ma View, maintenant tout est plus clair. Du coup, j'ai viré ma SearchField de ma fenêtre principale.

    Merci à  tous les deux 


    Et y'en a, ils se lèvent tôt je trouve ! Non mais ho c'est les vacances hein.
    Ravi d'avoir pu t'aider même si on a dû me corriger (M'en douté que ça serait Renaud :p  :fouf): )
Connectez-vous ou Inscrivez-vous pour répondre.