NSColorWell Utilisation

NseaProtectorNseaProtector Membre
11:24 modifié dans API AppKit #1
Bonjour,
Je patauge dans la choucroute, j'ai le cocoa par la pratique, j'arrive a faire pas mal de trucs et j'ai les bases en C, même en assembleur du reste, mais ce doit être la logique POO qui m'échappe...
Voilà  mon problème,
J'ai une NSView pour laquelle j'ai créer une classe maVue, je dessine un rectangle coloré (chapitre 12 du cocoa par la pratique), mais je voudrais qu'un NSColorWell change la couleur de mon rectangle.
J'y arrive, sauf que mon NSColorWell ne reflète pas la couleur de mon rectangle au démarrage et je ne pense pas que mon code soit nickel.
J'imaginais que dans maVue.h je devais ajouter une variable NSColor *bgColor;
et créer les setters et getter
-(NSColor *)bgColor;<br />-(void)setBgColor:(NSColor *)c;<br />

Mais après je fait comment pour lier mon NSColorWell à  ma vue ?

Réponses

  • schlumschlum Membre
    11:24 modifié #2
    dans 1228164241:

    J'imaginais que dans maVue.h je devais ajouter une variable NSColor *bgColor;
    et créer les setters et getter
    -(NSColor *)bgColor;<br />-(void)setBgColor:(NSColor *)c;<br />
    



    Non... "IBOutlet NSColorWell *bgColorWell;" et pas de setters ou getters, mais une IBAction qui fait un "setNeedDisplayInRect"
  • NseaProtectorNseaProtector Membre
    décembre 2008 modifié #3
    Merci Schlum, donc si je comprends je mets l'IBOutlet dans ma Classe "maVue.h"
    et l'IBAction dans l'AppController, non ? Je dis ça parce que mon NSColorWell n'a rien a voir avec ma classe.
    J'essaye tout de suite.
        [bgColor set];
    ça m'agace de pas savoir !!!!
    [bgColorWell Set];  // ça le fait pas !!!
    [maVue setNeedsDisplay:YES]; // Unrecognised selector ...
    Je patauge encore mais j'ai une base pour chercher...

  • CéroceCéroce Membre, Modérateur
    11:24 modifié #4
    Réfléchis un peu: ton rectangle change de couleur quand le ColorWell envoie son action à  ton contrôleur.
    Or, au démarrage, aucune action n'est envoyée.

    Tu disposes dés lors de deux solutions:
    1 - Adopter la même couleur par défaut pour la vue et le colorWell (c'est le plus facile)
    2 - Que le contrôleur aille chercher la couleur du colorWell (donc, là  il lui faut une outlet vers le Colorwell) et la donne à  la vue (dans -awakeFromNib).

  • NseaProtectorNseaProtector Membre
    11:24 modifié #5
    Oui en me tordant un peu les neurones et en fouinant dans les exemples j'ai trouvé...
    Voilà  ce qui me bloquait:
    J'essayais de faire:
    [bgColorWell set]; ou autre code exotique en vue de passer directement la couleur du NSColorWell
    

    en fait il me fallait faire:
    NSColor *c;<br />c=[bgColorWell color];<br />[c set];
    

    Et je n'arrivais pas a demander le redessin de ma vue:
    En commentaire mon erreur
    -(IBAction)bgColor:(id)sender<br />{<br />	NSLog(@&quot;BGCOLOR Action&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; //[maVue setNeedsDisplay:YES];<br />	[self setNeedsDisplay:YES ];<br />	<br />}
    

    Mais le plus important c'est de comprendre et dans les erreurs d'apprendre...
  • CéroceCéroce Membre, Modérateur
    11:24 modifié #6
    En passant: ton code marche, mais tu ne respectes pas le paradigme MVC.
    http://www.cocoa.fr/2008/11/19/vos-debuts-en-cocoa/

    Normalement, seul le contrôleur devrait avoir des actions et des outlets.
    Tu n'as pas non plus de couche modèle; typiquement le modèle devrait ici comporter une NSColor. Certes ça complique, mais le MVC est une bonne manière d'organiser un programme lorsqu'il devient complexe.
  • schlumschlum Membre
    11:24 modifié #7
    dans 1228208699:

    En passant: ton code marche, mais tu ne respectes pas le paradigme MVC.
    http://www.cocoa.fr/2008/11/19/vos-debuts-en-cocoa/

    Normalement, seul le contrôleur devrait avoir des actions et des outlets.
    Tu n'as pas non plus de couche modèle; typiquement le modèle devrait ici comporter une NSColor. Certes ça complique, mais le MVC est une bonne manière d'organiser un programme lorsqu'il devient complexe.



    Dans les programmes ou modules simples, la vue peut faire office de contrôleur  ;)
  • NseaProtectorNseaProtector Membre
    11:24 modifié #8
    dans 1228208699:

    En passant: ton code marche, mais tu ne respectes pas le paradigme MVC.
    http://www.cocoa.fr/2008/11/19/vos-debuts-en-cocoa/

    Normalement, seul le contrôleur devrait avoir des actions et des outlets.
    Tu n'as pas non plus de couche modèle; typiquement le modèle devrait ici comporter une NSColor. Certes ça complique, mais le MVC est une bonne manière d'organiser un programme lorsqu'il devient complexe.


    C'est bien pour cela que je venais chercher conseil, et je compte procéder par étape, j'imagine que je vais devoir remanier cela car si je met une sauvegarde et des préférences je risque de me confronter a une usine a gaz style Pompidou ou pire encore...
    Sinon, pour info mon programme est juste ludique pour moi, il s'agit de créer une vue style au choix papier millimétré / grand carreau / partition avec un NSColorWell pour le fond et un pour les lignes, un ou plusieurs réglages des écarts, impression et PDF et pourquoi pas une sauvegarde XML.
    Bref un programme assez bête mais qui me semble idéale pour mettre en oeuvre tout seul les connaissances du livre de qui vous savez. (oui ce soir y'a Harry Potter, lol)
  • CéroceCéroce Membre, Modérateur
    11:24 modifié #9
    Je pense que c'est un bon projet, qui t'es accessible sans être trop facile. Mon conseil, c'est de t'y tenir et d'aller jusqu'au bout (avec la doc, et la traduction en anglais...). J'ai eu personnellement tendance à  abandonner les projets lorsqu'arrivent trop de difficultés; pourtant c'est par ces difficultés qu'on apprend le plus ! Mais c'est vrai aussi qu'il est difficile de rester motivé, surtout quand le projet n'a rien d'utile.

    Bon courage !
  • NseaProtectorNseaProtector Membre
    11:24 modifié #10
    dans 1228232237:

    Je pense que c'est un bon projet, qui t'es accessible sans être trop facile. Mon conseil, c'est de t'y tenir et d'aller jusqu'au bout (avec la doc, et la traduction en anglais...). J'ai eu personnellement tendance à  abandonner les projets lorsqu'arrivent trop de difficultés; pourtant c'est par ces difficultés qu'on apprend le plus ! Mais c'est vrai aussi qu'il est difficile de rester motivé, surtout quand le projet n'a rien d'utile.

    Bon courage !



    Je te remercie, c'est sympathique comme commentaire, l'utilité est effectivement pas élevé sauf pour en faire un tuto... Encore merci c'est encourageant.
Connectez-vous ou Inscrivez-vous pour répondre.