Ouverture d'un document sans NSDocument
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.
ç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.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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.
Bon allez va pour la sous classe s'il n'y a pas un évent côté NSApplication envoyé pour ça.
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é.
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
Merci encore.
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).