prendre en compte un drop dans le dock sans ouvrir un document

ChachaChacha Membre
16:29 modifié dans API AppKit #1
Salut,

J'ai une appli multi-documents. D'habitude, quand je drag'n drop un fichier (qui va bien) sur l'icône du Dock, ça m'ouvre un nouveau document.
En revanche, j'aimerais bien qu'un certain type de fichier (de config en l'occurence) soit pris en compte, mais n'ouvre pas de document (ça ne doit avoir que l'effet de modifier la config générale de l'application).
Si je rajoute simplement ce type de fichier dans le DocumentType de la classe MyDocument de l'inspecteur de target, ça ne va pas.
Il y a une bidouille à  faire ? Rajouter une ligne au tableau sus-cité ? Je ne sais pas trop (et le code doit être compatible Panther).

+
Chacha

Réponses

  • mpergandmpergand Membre
    16:29 modifié #2
    Salut, chacha,

    Ce que tu veux faire est un peu curieux, mais bon, je pense que pour empêcher la fenêtre de document de s'ouvrir, il suffit de retourner NO dans la méthode loadDataRepresentation pour le type de document du fichier de config.
  • ChachaChacha Membre
    16:29 modifié #3
    dans 1122053236:

    Salut, chacha,

    Ce que tu veux faire est un peu curieux, mais bon, je pense que pour empêcher la fenêtre de document de s'ouvrir, il suffit de retourner NO dans la méthode loadDataRepresentation pour le type de document du fichier de config.

    Ouaip, c'est la première chose que j'ai essayée (dans -(BOOL) readFromFile:(NSString *)file ofType:(NSString *)aType) , mais dans ce cas, une joli message d'erreur prévient l'utilisateur que ça a foiré. or, ça n'a pas foiré !
  • ChachaChacha Membre
    juillet 2005 modifié #4
    Bon, j'ai trouvé un début solution:
    -je crée une nouvelle sous-classe de NSDocument
    -je lui crée un NIB quasi vide
    -je rajoute une ligne pour lui dans le target inspector

    ça fonctionne à  peu près. Je dosi expérimenter un peu plus

    [edit]
    Ouais. C'est bizarre, le readFromFile est bien appelé, mais ensuite le chargement du document reste bloqué (j'ai rajouté une fenêtre dans le nib, elle n'apparaà®t jamais, et un deuxième drop ne donne rien)
    [/edit]
  • ChachaChacha Membre
    juillet 2005 modifié #5
    En fait, ça ne marchait pas. Pas satisfaisant.
    Je me suis donc tourné vers une autre méthode plus logique : sous-classer NSDocumentController.
    C'est assez amusant : on crée une sous-classe, et dans la doc d'Apple, ils expliquent où l'instancier pour que ce soit la première instance de NSDocumentController créée dans le programme. Et c'est la première instance qui devient le sharedDocumentController.
    Et pourtant...
    C'est très bizarre !
    Ma sous-classe s'appelle MyDocumentController (original, non ?)
    Et bien que je surcharge son init ou pas, quand elle est créée, on obtient un NSDocumentController et pas un MyDocumentController. Et pourtant son init est bien appelé.
    Encore plus étrange :
    <br />-(id) init<br />{<br />  self = [super init];//ne plante pas<br />   NSLog(@&quot;self =%@&quot;, self);//affiche &quot;NSDocumentController&quot; et pas MyDocumentController !!!<br />  return self;<br />}<br />
    


    Autre essai :
    <br />-(id) init<br />{<br />  [super init];//le programme plante !<br />  return self;<br />}<br />
    


    Bizarre tout ça. Si quelqu'un y voit clair...

    +
    Chacha


    [edit]
    Bon, j'ai finalement trouvé mon erreur, maintenant la sous-classe de NSDocumentController marche bien.
    Par contre, ça ne résout toujours pas mon problème initial : moi ce que je veux, c'est déclencher une action grâce à  un fichier déposé sur l'icône du Dock. Pour intercepter cette action, je pensais que le gestionnaire de documents était adapté, mais le problème, c'est que je ne veux PAS créer de document avec cette action. Donc les méthodes "openDocumentWithFile:..." doivent dans ce cas renvoyer nil, mais une erreur est alors présentée à  l'utilisateur ! (et ce message d'erreur est levé dans une méthode privée de l'AppKit, ce qui fait que je ne peux pas me permettre de surcharger pour la contourner)
    Je rappelle que le problème vient surtout du fait que le code doit être compatible Panther, donc je n'ai pas droit aux nouvelles méthodes de 10.4.
    [/edit]
  • Eddy58Eddy58 Membre
    16:29 modifié #6
    Je me demande si cette méthode delegate de NSApplication pourrait être adaptée à  ton cas, mais peut-être y-as-tu déjà  pensé et/ou essayé...:)

    [tt]
    - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
    [/tt]
  • ChachaChacha Membre
    16:29 modifié #7
    dans 1122132083:

    Je me demande si cette méthode delegate de NSApplication pourrait être adaptée à  ton cas, mais peut-être y-as-tu déjà  pensé et/ou essayé...:)


    Ouaaiiiis bien vu, je n'y avais pas pensé ! Bon, j'ai trouvé ma solution avec un delegate de NSApplication.

    Merci !
    +
    Chacha
Connectez-vous ou Inscrivez-vous pour répondre.