Ouverture d'un document sans NSDocument

04:29 modifié dans API AppKit #1
Bonjour à  tous,

ça fait très longtemps que je n'ai pas touché à  NSDocument et tout ce qui tourne autour de ça.
J'aimerai que mon application réagisse au double-clique d'un fichier, sans devoir créer un nouveau NSDocument. Le fichier ouvert sera en fait une license pour l'application.
La dernière fois que j'ai fait ça j'ai utilisé NSDocument mais je trouve ça vraiment pas propre pour un truc aussi simple.. Alors je me demandais s'il n'existait pas un autre moyen.


Merci,
Louka.

Réponses

  • fouffouf Membre
    04:29 modifié #2
    Si tu fais une interface pour la validation de la licence contrôlée par ta sous-classe de NSDocument, je trouve que ca n'a absolument rien de "sale".
    C'est ce que j'ai fait une fois pour gérer une bibliothèque à  laquelle on peut ajouter des éléments contenus dans un fichier, juste en double-cliquant. Mon interface se résume à  une fenêtre avec marqué " Add the shape collection named %@ containing %d shapes ? " et deux boutons, un pour valider, l'autre pour annuler.
  • 04:29 modifié #3
    M'oui tu as raison c'est pas sale mais ça fait bizarre d'avoir une sous classe de NSDocument pour si peut.
    Bon allez va pour la sous classe s'il n'y a pas un évent côté NSApplication envoyé pour ça.

  • NoNo Membre
    04:29 modifié #4
    Je ne pense pas que NSDocument soit nécessaire pour faire réagir l'appli à  une ouverture de fichier depuis le Finder.

    J'utiliserai plutôt la piste du delegate de NSApplication application:openFile: afin de capturer la demande d'ouverture du fichier, et la modification du info.plist afin de déclarer le fichier "license" comme fichier ouvrable (et appartenant) à  l'appli.

    Voici la modif du plist que je verrai (spécifique 10.5) :
    [tt]
    <key>CFBundleDocumentTypes</key>
      <array>

          <dict>

            <key>CFBundleTypeExtensions</key>
            <array>
                <string>loukalicense</string>
            </array>

            <key>CFBundleTypeIconFile</key>
            <string>nom-du-fichier-icône</string>

            <key>CFBundleTypeName</key>
            <string>Fichier license de Louka</string>

            <key>CFBundleTypeRole</key>
            <string>Editor</string>

            <key>LSHandlerRank</key>
            <string>Owner</string>

            <key>LSItemContentTypes</key>
            <array>
                <string>fr.louka.loukalicense</string>
            </array>

          </dict>
    [/tt]

    La modif du info.plist déclare un nouveau type de fichier dont l'extension est .loukalicense, et le type (UTI) est fr.louka.loukalicense.
    Il est possible d'ajouter une icône à  ce type de fichier.

    Malheureusement, je fais ça de tête et entre 10.3, 10.4 et 10.5, ça a beaucoup bougé.
  • 04:29 modifié #5
    Merci pour la piste 
    Je me disais bien qu'il y avait un truc côté NSApplication :|
    Par contre la méthode application:openFile: retourne seulement le filename... Aucun moyen d'avoir le path ?
  • NoNo Membre
    04:29 modifié #6
    dans 1241424695:

    Merci pour la piste 
    Je me disais bien qu'il y avait un truc côté NSApplication :|
    Par contre la méthode application:openFile: retourne seulement le filename... Aucun moyen d'avoir le path ?


    Ici, le filename correspond bien sûr au chemin complet du fichier à  ouvrir, et non juste à  son nom, malgré ce que semble dire le doc.
  • 04:29 modifié #7
    dans 1241425639:

    dans 1241424695:

    Merci pour la piste 
    Je me disais bien qu'il y avait un truc côté NSApplication :|
    Par contre la méthode application:openFile: retourne seulement le filename... Aucun moyen d'avoir le path ?


    Ici, le filename correspond bien sûr au chemin complet du fichier à  ouvrir, et non juste à  son nom, malgré ce que semble dire le doc.


    Tsss, la Doc est bien foutu mais parfois c'est ambigà¼e :p
    Merci encore.
  • uocramuocram Membre
    04:29 modifié #8
    Et pour ouvrir le fichier.loukalicense par un drag & drop à  partir du finder sur l'icône d'application tu peux ajouter dans l'Info.plist un item au Documents types -> Item 1 -> Document Type Name : NSFilenamesPboardType
    et si pas déjà  fait dans Item 1 -> CFBundleTypeExtensions -> item 1 : loukalicense

    et dans
    - (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames

    tu récupères le nom du fichier.loukalicense comme avec un double-clic

    Si au lieu de loukalicense tu mets * dans le CFBundleTypeExtensions, tu "ouvres" n'importe quel fichier ou dossier (cela place seulement leur path dans filenames).
Connectez-vous ou Inscrivez-vous pour répondre.