Warning icon

molgowmolgow Membre
09:35 modifié dans API AppKit #1
Bonjour,

J'aimerais afficher l'icone "warning" standard de Mac OS X (celui-ci). Mais sans le recopier et l'inclure dans mon soft, j'aimerais vraiment utiliser celui du système. Mais je ne trouve aucun moyen de l'obtenir, Cocoa ne semble pas fournir ce genre de choses :(

Quelqu'un aurait-il une idée ? une suggestion ?

molgow

Réponses

  • LeChatNoirLeChatNoir Membre, Modérateur
    09:35 modifié #2
    Quand tu fais une NSAlterPanel, si tu mets le bon type, il t'affiche le warning.

    Mais j'imagine que tu souhaites le mettre ailleurs ?

    Si oui, il faut trouver le fichier image si ça en est un (ça peut être dessiner chaque fois...).
    Ou sinon, peut être dans le framework OmniGroup. Ils ont pas mal d'icones.

    a+
  • BruBru Membre
    09:35 modifié #3
    La méthode "officielle" (ne faisant appelle à  aucune undocumented) serait de créer une boite d'alerte de type "caution" sans l'afficher, puis de récupérer l'icône par la méthode icon de la classe NSAlert :

    <br />NSImage* GetSystemWarningIcon()<br />{<br />&nbsp; &nbsp; NSAlert *tmpAlert;<br />&nbsp; &nbsp; NSImage *warningIcon;<br /><br />&nbsp; &nbsp; tmpAlert=[[NSAlert alloc] init];<br />&nbsp; &nbsp; [tmpAlert setAlertStyle:NSCriticalAlertStyle];<br />&nbsp; &nbsp; warningIcon=[tmpAlert icon];<br />&nbsp; &nbsp; [tmpAlert release];<br /><br />&nbsp; &nbsp; return warningIcon;<br />}<br />
    


    .
  • molgowmolgow Membre
    09:35 modifié #4
    dans 1141292095:

    Quand tu fais une NSAlterPanel, si tu mets le bon type, il t'affiche le warning.

    Mais j'imagine que tu souhaites le mettre ailleurs ?

    Si oui, il faut trouver le fichier image si ça en est un (ça peut être dessiner chaque fois...).
    Ou sinon, peut être dans le framework OmniGroup. Ils ont pas mal d'icones.

    a+


    En effet, c'est pour le mettre ailleurs. C'est pour faire quelque chose de similiaire à  ce qu'il y a dans le preference pane "Economiseur d'énergie".
    Je ne l'ai pas trouvé dans l'arborescence du système. Et j'aimerais vraiment bien utiliser celui du système, pour qu'au cas où il change il continue à  avoir le même look.
  • 09:35 modifié #5
    /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertCautionIcon.icns (thx ali)

    Mais rien ne dit que dans la prochaine version de os x elle sera encore là .
  • 09:35 modifié #6
    Bru, il me semble que l'icône d'alert est un mix entre celle de l'application et celle du type d'erreur ? Je n'ai pas essayé ta méthode (pas taper)

    [Fichier joint supprimé par l'administrateur]
  • molgowmolgow Membre
    09:35 modifié #7
    Merci pour votre aide.

    Bru, ça ne fonctionne pas. Je fais :

    <br />&nbsp; &nbsp; NSAlert *tmpAlert;<br />&nbsp; &nbsp; NSImage *warningIcon;<br /><br />&nbsp; &nbsp; tmpAlert=[[NSAlert alloc] init];<br />&nbsp; &nbsp; [tmpAlert setAlertStyle:NSCriticalAlertStyle];<br />&nbsp; &nbsp; warningIcon=[tmpAlert icon];<br />&nbsp; &nbsp; [tmpAlert release];<br />	<br />&nbsp; &nbsp; [warningIconImageView setImage:warningIcon];<br />
    


    warningIconImageView est un IBOutlet vers un NSImageView.
  • BruBru Membre
    09:35 modifié #8
    dans 1141293161:

    Bru, ça ne fonctionne pas. Je fais :

    <br />&nbsp; &nbsp; NSAlert *tmpAlert;<br />&nbsp; &nbsp; NSImage *warningIcon;<br /><br />&nbsp; &nbsp; tmpAlert=[[NSAlert alloc] init];<br />&nbsp; &nbsp; [tmpAlert setAlertStyle:NSCriticalAlertStyle];<br />&nbsp; &nbsp; warningIcon=[tmpAlert icon];<br />&nbsp; &nbsp; [tmpAlert release];<br />	<br />&nbsp; &nbsp; [warningIconImageView setImage:warningIcon];<br />
    


    warningIconImageView est un IBOutlet vers un NSImageView.



    Essaie un [tt]NSLog ("%@", warningIcon);[/tt] avant le [tt][tmpAlert release];[/tt] pour voir si un objet image est bien retourné.

    Le problème peut avoir 2 sources :
    1- le release de l'alerte release aussi l'image.
    2- le fait de créer l'alerte ne "charge pas les ressources", et dans ce cas, il faut afficher l'alerte pour avoir l'image.

    C'est à  tester !

    .
  • BruBru Membre
    09:35 modifié #9
    dans 1141292923:

    Bru, il me semble que l'icône d'alert est un mix entre celle de l'application et celle du type d'erreur ? Je n'ai pas essayé ta méthode (pas taper)


    C'est pas faux...
    (je n'ai pas non plus testé)

    .
  • molgowmolgow Membre
    09:35 modifié #10
    dans 1141293518:

    Essaie un [tt]NSLog ("%@", warningIcon);[/tt] avant le [tt][tmpAlert release];[/tt] pour voir si un objet image est bien retourné.

    Le problème peut avoir 2 sources :
    1- le release de l'alerte release aussi l'image.
    2- le fait de créer l'alerte ne "charge pas les ressources", et dans ce cas, il faut afficher l'alerte pour avoir l'image.


    Je n'ai pas fait de NSLog (je développe un Preference Pane alors pas facile de tester).

    Mais si j'affiche "warningIcon" dans un NSAlert, je n'obtiens pas NULL mais quelque chose comme ça :
    NSImage 0x3fa4c0 Size={128, 128} Reps=(
        NSBitmapImageRep 0x3f7f40 Size={128, 128} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=128x128 Alpha=YES Planar=NO Format=3,
        NSBitmapImageRep 0x3f5ee0 Size={32, 32} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=32x32 Alpha=YES Planar=NO Format=3,
        NSBitmapImageRep 0x3f5f60 Size={16, 16} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=16x16 Alpha=YES Planar=NO Format=3,
        NSBitmapImageRep 0x3f8bf0 Size={32, 32} ColorSpace=NSCalibratedWhiteColorSpace BPS=1 BPP=2 Pixels=32x32 Alpha=YES Planar=NO Format=2,
        NSBitmapImageRep 0x3f66e0 Size={16, 16} ColorSpace=NSCalibratedWhiteColorSpace BPS=1 BPP=2 Pixels=16x16 Alpha=YES Planar=NO Format=2
    )
  • molgowmolgow Membre
    mars 2006 modifié #11
    Le problème doit plutôt être comment j'essaie de l'afficher.

    Comme j'ai dit, j'ai un PreferencePane, et dans la méthode mainViewDidLoad j'appelle une méthode qui va initialiser les éléments de l'interface et notamment devrait faire ce [warningIconImageView setImage:warningIcon];.


    Bref, mon problème je crois que surtout pour charger et afficher une NSImage dans un NSImageView !  :-\\
  • molgowmolgow Membre
    09:35 modifié #12
    C'est bon. En fait, je dois faire ces choses dans awakeFromNib mais pas dans mainViewDidLoad...

    Fallait savoir, je débute en Cocoa  B)
  • BruBru Membre
    09:35 modifié #13
    dans 1141297883:

    C'est bon. En fait, je dois faire ces choses dans awakeFromNib mais pas dans mainViewDidLoad...


    Et l'icône, est-ce bien celle que tu voulais ?

    .
  • molgowmolgow Membre
    09:35 modifié #14
    Le NSAlert retourne une image de l'icone de l'application + le warning icon.

    J'ai donc chargé celui du système directement même si je trouve pas très propre du tout.
Connectez-vous ou Inscrivez-vous pour répondre.