Couleur du label/étiquette dans le finder

ObiObi Membre
12:59 modifié dans Actualités #1
Je ne savais pas trop dans quelle rubrique poster, alors j'ai choisi "Autres"  :)

Dans une appli cocoa, j'aimerais pouvoir recuperer (et eventuellement changer) la couleur du label d'un fichier/dossier du finder.
Apres moultes recherches, j'ai vu qu'il y a 2 façon de faire, soit en appelant une fonction carbon, soit un applescript. Dans les 2 cas, je n'y connais rien et je patauge completement :'(

Pour la version carbon, j'ai trouvé les 2 fonctions à  appeller (GetSuiteLabel et SetSuiteLabel) dans la doc d'Apple et ce code :
( (FileInfo*)inCatInfo.finderInfo )->finderFlags & kColor


Pour la version applescript, il y a ce code :
Tell application "Finder" set label index of (some given file/folder/volume) to (a value between 0 and 7)


Que me conseillez-vous de faire ? Si vous avez un bout de code ou un url, je suis preneur  o:)

Réponses

  • mpergandmpergand Membre
    12:59 modifié #2
    Salut;

    Exemple de gestion des finder flags:
    <br />// recherche finder flags<br /><br />+(long)finderFlags:(NSString*)filePath<br />	{<br />	long ret;<br />	FSRef fRef;<br />	FileInfo fileInfo;<br />	const char* filePathStr=[filePath UTF8String];<br />	<br />	if(!(ret=FSPathMakeRef(filePathStr,&amp;fRef,NULL)))<br />		{<br />		FSCatalogInfo catInfo;<br />	<br />		ret=FSGetCatalogInfo(&amp;fRef,kFSCatInfoFinderInfo,&amp;catInfo,NULL,NULL,NULL);<br />	<br />		if(ret==noErr)<br />			{<br />			BlockMoveData(catInfo.finderInfo,&amp;fileInfo,sizeof(FileInfo));<br />			ret=fileInfo.finderFlags;<br />			}<br />		}<br /><br />	return ret;	// retourne finder flags ou no d&#39;erreur si &lt;0<br />	}<br /><br />	<br />// change finder flags<br /><br />+(long) setFinderFlags:(NSString*)filePath flags:(long)flags<br />	{<br />	long ret;<br />	FSRef fRef;<br />	FileInfo fileInfo;<br /><br />	const char* filePathStr=[filePath UTF8String];<br />	<br />	if(!(ret=FSPathMakeRef(filePathStr,&amp;fRef,NULL)))<br />		{<br />		FSCatalogInfo catInfo;<br />				// rch FileInfo<br />		ret=FSGetCatalogInfo(&amp;fRef,kFSCatInfoFinderInfo,&amp;catInfo,NULL,NULL,NULL);<br />		<br />		if(ret==noErr)<br />			{<br />			BlockMoveData(catInfo.finderInfo,&amp;fileInfo,sizeof(FileInfo));<br />			fileInfo.finderFlags=(flags&amp;0xffff);<br />			BlockMoveData(&amp;fileInfo,catInfo.finderInfo,sizeof(FileInfo));<br />		<br />			ret=FSSetCatalogInfo(&amp;fRef,kFSCatInfoFinderInfo,&amp;catInfo);<br />			}<br />	<br />		}<br /><br /><br />	return ret;	// erreur si &lt;0<br />	}
    


    Quelques liens utiles:
    MoreFilesX
    Finder Flags
    GetLabel

    Faire attention à  ne modifier que les flags voulus !

    long flags; // valeurs initiales

    flags&=~kColor;  // effacement des bits de couleur
    flags|=(3<<1);  // nouvelle valeur
  • ObiObi Membre
    12:59 modifié #3
    Merci beaucoup !  :)

    J'avais opté pour la piste applescript parce que j'avais trouvé des exemples plus compréhensible pour moi mais je vais essayer ton code.
    Niveau performance, il y a une différence à  ton avis ?
    Sinon, sais-tu comment récuperer le nom des labels ? C'etait possible sur mac os 9 avec applescript en appellant "Finder preferences" mais ce n'est plus implementé dans mac os x :'(
    J'ai essayé de trouver où le finder pouvait stocker ces noms (dans les com.apple.finder et autres) mais sans succès pour le moment :(
  • ObiObi Membre
    12:59 modifié #4
    Je viens de tester le code pour recuperer le flag, ca marche mais ca ne me donne pas le meme nombre qu'avec la version applescript ??? Est-ce normal ?
    Je ne pige pas grand chose en fait de ce types de fonctions, je ne connais que la programmation object de base (java en particulier) :(

    Tu n'utilises pas la fonction GetLabel dans ton exemple, pourtant la doc parle de "labelNumber", "labelColor", "labelString", ce qui semble etre des informations parfaites pour moi.
    Je décortique des exemples que j'ai trouvé mais ca m'enerve un peu de galerer pour refaire des bouts de code qui existent déjà  >:)
  • mpergandmpergand Membre
    12:59 modifié #5
    Je viens de tester le code pour recuperer le flag, ca marche mais ca ne me donne pas le meme nombre qu'avec la version applescript


    pour avoir le n° de la couleur, faire:

    no_couleur=(flags & kColor)>>1;

    Bon, c'est le bazar ! GetLabel ne donne pas les bonnes infos :'( , donc je ne vois que applescript comme alternative...

    Quand l'utilisateur modifie les noms des étiquettes, un fichier com.apple.Labels.plist est créé.
  • ObiObi Membre
    12:59 modifié #6
    dans 1113231951:

    Bon, c'est le bazar ! GetLabel ne donne pas les bonnes infos :'( , donc je ne vois que applescript comme alternative...

    Quand l'utilisateur modifie les noms des étiquettes, un fichier com.apple.Labels.plist est créé.


    C'est ce que je constate :)
    J'arrive à  un resultat à  peu près potable, j'ai pris des captures pour comparer. Je vais essayer d'ameliorer mais j'ai déjà  grosso-modo ce que je voulais. Merci ! o:)

    [Fichier joint supprimé par l'administrateur]
Connectez-vous ou Inscrivez-vous pour répondre.