Vue de conditions

laurrislaurris Membre
janvier 2005 modifié dans Vos applications #1
Bonjour,

Il ne s' agit pas vraiment d' un projet d' application mais d'un élément d'interface réutilisable. J' appelle ça un criteria View mais je ne sais pas comment ça s' appelle en vrai. Un court dessin valant mieux qu' un long discours, j' ai fait une copie d' écran.
On retrouve ce genre de choses dans iTunes, iPhoto, Mail, etc ... et avec spotlight je pense que ça va devenir à  la mode.
L' avantage réside dans le fait que tout est paramétrable dans un fichier plist chargé au démarrage (criteria.plist). Les valeurs des objets comparés ainsi que les conditions possibles sont des paramètres.
La ligne de popups correspondant à  une condition provient d' un nib chargé à  chaque fois qu' on l' ajoute.
Tous les éléments sont pilotés par des bindings.

Bon enfin voilà , le code n' est pas écrit avec la plus grande subtilité et il y a un workaround avec le binding du NSTextField, mais je crois qu' il est facile à  comprendre et à  améliorer.
Si vous voulez utiliser le code dans vos application, vous pouvez. Dans ce cas, merci de me faire part de vos suggestions. De mon coté je vous indiquerai les endroits qui posent problème et qu' il faut améliorer.

A+ . Laurris.
Téléchargement (xcode 1.5): CriteriaView.dmg

[Fichier joint supprimé par l'administrateur]

Réponses

  • fouffouf Membre
    02:22 modifié #2
    Ca a l'air super.

    Deux questions :
    1- Est-ce que je pourrais te donner un coup de main ? (peut-etre pas tout de suite, dans un mois j'espere)

    2- Comptes-tu en faire un framework ?

    Bravo  <3
  • cbrandtcbrandt Membre
    02:22 modifié #3
    utile ! en tout cas, je vais avoir besoin d'un truc comme ça dans mon projet (pour les recherches spotlight, justement)
    pour info, il y a un article sur stepwise sur ce type d'élément
    (http://www.stepwise.com/Articles/Technical/2003-12-20.01.html)
  • laurrislaurris Membre
    02:22 modifié #4
    salut,

    Pour fouf: 1/ Oui avec plaisir, quand tu veux. Je n' ai pas touché au projet depuis quelques semaines donc il faudrait que je m' y replonge pour voir dans quelles directions ça peut évoluer.
    2/ Un Framework, c' est une bonne idée mais je n' y ai pas réfléchi.

    pour cbrandt: j' ai vu cet article. Si je me souviens bien, l' exemple utilisait une Table View. Finalement j' ai utilisé une NSView simple parce qu' avec une NSTableView on ne peut avoir des UI différents dans une même colonne.

    PS: Si vous avez des questions sur l' utilisation ou les méthodes (précises si possibles), n' hésitez pas.
    D' ailleurs je précise un truc: Le bouton "interpret" est relié à  une action qui lit un fichier testRecords.plist situé dans le répertoire ressource et vérifie s' il est satisfait par les conditions données dans l'interface.
    A+
  • 02:22 modifié #5
    Il est possible d'avoir des UI différentes dans une même colonne en surchargeant dataCellForRow de NSTableColumn.
  • fouffouf Membre
    02:22 modifié #6
    Merci laurris.

    J'ai commencer a regarder pour  un Framework mais il y a un probleme (enfin pour moi qui ne suis pas un expert pour faire des Frameworks  :o ) : il y a plusieurs sous-classes de NSView (ca, ca va encore, on peut faire un IBPalette), mais ces sous-classes utilisent des bindings  B) La, je suis paume.

    On peut-etre regarder dans le framework Graphtool de Mala.

    A voir.

    Sinon, le code a l'air hyper-simple a integrer dans ses applis.
    Bravo laurris.
  • nucleusnucleus Membre
    02:22 modifié #7
    Avez-vous regardé The Subview-TableView?

    Sinon il me semble plus adéquat de parler d'éditeur de règles au lieu de vue de conditions
  • laurrislaurris Membre
    février 2005 modifié #8
    Bonjour,
    Je ressucite temporairement ce fil parce que je viens de découvrir dans les nouvelles classes de Tiger quelque chose qui ressemble à  ce projet.
    Il s' agit de la classe NSPredicate qui semble représenter une condition, j' imagine dans le but d' être utilisée avec spotlight. Je dis "semble" parce que je n' ai pas vu de documentation et d' ailleurs si quelqu' un a plus d' infos sur le sujet, ça serait utile. Je crois que dans l'idéal, si mon élément d' inteface est destiné à  être frameworkisé, il faudrait reprendre les mêmes concepts de code que dans Tiger et essayer de l' adapter le plus possible pour panther ...

    Pour répondre à  fouf: je ne connais rien aux IBpalettes, je ne sais pas si on peut inclure des bindings. Il faut considérer aussi que dans mon code, les "règles" ou "conditions" sont des nibs chargés dynamiquement quand on les créé... je sais pas si c' est clair quand on voit le code...

    Sinon, concernant la comparaison avec un système de TableView avec des rows, il y a du pour et du contre mais je crois que ce système est plus souple et plus modulaire. On peut imaginer toute sorte d' éléments d' interface dans la règle, sans avoir les contraintes imposées par la TableView.

    Nucléus: Merci, "Editeur de règles" c' est effectivement plus approprié et plus parlant. hélas je ne paeux pas changer le titre du fil.

    A+. Laurris.
  • Eddy58Eddy58 Membre
    02:22 modifié #9
    dans 1109155512:

    Bonjour,
    Je ressucite temporairement ce fil parce que je viens de découvrir dans les nouvelles classes de Tiger quelque chose qui ressemble à  ce projet.
    Il s' agit de la classe NSPredicate qui semble représenter une condition, j' imagine dans le but d' être utilisée avec spotlight. Je dis "semble" parce que je n' ai pas vu de documentation et d' ailleurs si quelqu' un a plus d' infos sur le sujet, ça serait utile. Je crois que dans l'idéal, si mon élément d' inteface est destiné à  être frameworkisé, il faudrait reprendre les mêmes concepts de code que dans Tiger et essayer de l' adapter le plus possible pour panther ...


    Fais gaffe Laurris ! Tu parles de choses intéressantes, mais soumises à  un NDA...:-\\
  • cbrandtcbrandt Membre
    02:22 modifié #10
    dans 1109164327:

    Fais gaffe Laurris ! Tu parles de choses intéressantes, mais soumises à  un NDA...:-\\


    je confirme...  :-\\
  • laurrislaurris Membre
    02:22 modifié #11
    Et moi je confirme que ce que j' ai écrit n' est absolument pas concerné par le NDA.
    Autant je peux comprendre,- et j' accepte volontiers- que les administrateurs du site essaient de faire respecter des règles dont la violation pourraient les mettre en cause, autant je saisis pas bien l' interet de jouer du sifflet quand on a pas l' uniforme.
    Moi je veux bien "faire gaffe", comme vous dites mais je crois qu' en l'occurence il ne faut pas tomber dans la paranoia ou se faire plus flic qu' on ne l' est.
    Pour que ce soit clair, je parle de la classe NSPredicate et je déplore de n' avoir aucune information dessus. Il n' y a là  rien de secret puisque le terme NSPredicate est présent sur une page publique d' Apple http://developer.apple.com/macosx/tiger/spotlight.html
    Restons zen et buvons du cacao !
  • muqaddarmuqaddar Administrateur
    02:22 modifié #12
    Salut,

    Effectivement NSPredicate est cité sur cette page mais ils développent pas dessus. Alors attention quand même. ;) C'est pas de la paranoia, c'est de la prévention. :)
  • mpergandmpergand Membre
    02:22 modifié #13
    A propos de toutes ces fabuleuses nouvelles technos de Tiger, CoreImage, CoreVideo, CoreMachin, ça sera aussi bien documenté que CoreAudio ?  ;D ;D
  • Eddy58Eddy58 Membre
    02:22 modifié #14
    Bonne question mpergand, en tout cas j'espère que toutes ces nouvelles technologies disposeront de wrappers Objective-C...:)
  • mpergandmpergand Membre
    02:22 modifié #15
    dans 1109173697:

    Bonne question mpergand, en tout cas j'espère que toutes ces nouvelles technologies disposeront de wrappers Objective-C...:)


    Alors là , je crois que tu vas être décu, enfin je pense...

    Les développeurs attendent beaucoup de Tiger, peut-être trop, on verra bien  ;)
  • ClicCoolClicCool Membre
    02:22 modifié #16
    dans 1109174093:

    dans 1109173697:

    Bonne question mpergand, en tout cas j'espère que toutes ces nouvelles technologies disposeront de wrappers Objective-C...:)


    Alors là , je crois que tu vas être décu, enfin je pense...

    Les développeurs attendent beaucoup de Tiger, peut-être trop, on verra bien  ;)


    Je ne suis pas aussi pessimiste que toi mpergand, d'après les bribes d'infos disponible au vulgaire amateur n'ayant pas 500¤ à  dépenser pour ne pas attendre la sortie officielle du tigre, la pluspart des coreMachin seront dispo pour Obj-C sous xCode.

    Maintenant peut-être pas en java ;)
  • laurrislaurris Membre
    02:22 modifié #17
    Sur la page d' Apple dont je donne l' adresse plus haut, on trouve des infos sur metadata et Cocoa ( en bas de la page) .
    Je recopie ici le paragraphe qui est donc complètement NDA free (bien sur):

    Cocoa API Support

    When Tiger ships, there will be full support for working with Spotlight using the NSMetadataItem, NSMetadataQuery, NSMetadataResultGroup, and NSPredicate classes. The Cocoa API will offer support for the same features as the CoreServices APIs discussed in this article. As well, the Cocoa meta-data APIs will be fully key-value coding/observing compatible. This means that you will be able to use the API along with Cocoa Bindings in your applications.

    As far as the meta-data plug-in API, it's easy to use your existing Cocoa based file handling code. Simply change the .c extension on the files to .m, import the Foundation framework, and link away.
  • mpergandmpergand Membre
    02:22 modifié #18
    CoreImage se dévoile:
    http://developer.apple.com/macosx/tiger/coreimage.html

    C'est une API objet !!

    Regardez ce bout de code:
    <br />NSURL *url; <br />CIImage source;<br />CIImage result;<br />CIFilter hueAdjust;<br />url = [NSURL fileURLWithPath:path];<br />source = [CIImage imageWithContentsOfURL:url];<br />hueAdjust = CIFilter filterWIthName:@&quot;CIHueAdjust&quot;];<br />[hueAdjust setDefaults];<br />[hueAdjust setValue:source forKey:@&quot;inputImage&quot;];<br />[hueAdjust setValue:[NSNumber numberWithFloat:2.094<br />             forKey:@&quot;inputAngle&quot;];<br />result = [hueAdjust valueForKey:@&quot;outputImage&quot;]; <br />
    

    Y a un truc bizarre, CIImage et CIFilter: ce ne sont pas des pointeurs ???

    C'est quoi alors, juste un typedef ou alors c'est vraiment alloué dans la pile  ???

    Curieux, non ?
  • cbrandtcbrandt Membre
    02:22 modifié #19
    à  mon avis c'est juste une faute de frappe - il manque aussi un '[':

    dans 1110282100:

    <br />hueAdjust = CIFilter filterWIthName:@&quot;CIHueAdjust&quot;];<br />
    

  • mpergandmpergand Membre
    02:22 modifié #20
    http://www.cocoabuilder.com/archive/message/cocoa/2005/3/8/129766
    ;D ;D ;D

    Dis-moi cbrandt, tous les exemples de code sont du même genre dans la beta de Tiger  ;D
  • cbrandtcbrandt Membre
    02:22 modifié #21
    ben je les ai, les beta de tiger, mais j'ai pas de lecteur dvd dans mon mac... autant dire que j'ai jeté l'argent par les fenêtres sur ce coup là ...  :'( :'(
  • 02:22 modifié #22
    Et tu ne sais pas en mettre un? Macway en vend pour les Cube (en interne).
  • cbrandtcbrandt Membre
    02:22 modifié #23
    plus de sous... mes découverts sont abbysaux en ce moment...  :(
  • fouffouf Membre
    02:22 modifié #24
    Incroyable ces typos. Core Image a quand même l'air dêtre sympa.
    Par contre, est-ce que ca marchera sur mon iMac achete en 2002 ?
    Ca a l'air d'être une sacrée me..e pour développer de nouveaux modules :
    As well, the following are not supported:
    The mat2, mat3, mat4, struct, and arrays data types.
    The continue, break, and discard statements.
    The %, <<, >>, &, ^, ||, &&, ^^, and ~ expression operators.
    The ftransform, matrixCompMult, dfdx, dfdy, fwidth, noise1, noise2, noise3, noise4, and refract built-in functions.
    As well, the if, for, while, and do while flow control statements are supported only when the loop condition can be inferred at the time the code is compiled.

    Pas Glop  :'(
  • laurrislaurris Membre
    02:22 modifié #25
    cbrant, si tu as Tiger sur ton disque dur tu peux te débrouiller sans lecteur DVD. Il te suffit de 2 partitions dont une pour démarrer l' intallation. Dans l' utilitaire de disque tu peux restaurer une partition à  partir d' une image disque.
    Si tu veux plus d' infos, demande-moi, c' est pas compliqué (même si c' est pas la méthode officielle d' Apple).
  • cbrandtcbrandt Membre
    02:22 modifié #26
    ben justement, il est pas dans mon disque dur... et je n'ai qu'une partition... mais j'ai un petit disque externe, je vais me servir d'un mac avec lecteur dvd au bureau, pour y installer tiger (si j'ai le temps)...
  • Eddy58Eddy58 Membre
    mars 2005 modifié #27
    dans 1110282100:

    Regardez ce bout de code:
    <br />NSURL *url; <br />CIImage source;<br />CIImage result;<br />CIFilter hueAdjust;<br />url = [NSURL fileURLWithPath:path];<br />source = [CIImage imageWithContentsOfURL:url];<br />hueAdjust = CIFilter filterWIthName:@&quot;CIHueAdjust&quot;];<br />[hueAdjust setDefaults];<br />[hueAdjust setValue:source forKey:@&quot;inputImage&quot;];<br />[hueAdjust setValue:[NSNumber numberWithFloat:2.094<br />             forKey:@&quot;inputAngle&quot;];<br />result = [hueAdjust valueForKey:@&quot;outputImage&quot;]; <br />
    

    Y a un truc bizarre, CIImage et CIFilter: ce ne sont pas des pointeurs ???

    C'est quoi alors, juste un typedef ou alors c'est vraiment alloué dans la pile  ???

    Curieux, non ?

    Je ne pense pas qu'il y ait d'erreur de la part d'Apple dans cet exemple (à  part le "[" manquant), car c'est une caractéristique des Cores APIs d'utiliser ce genre d'écriture. :)
    Exemples :
    [tt]
    CFStringRef string=CFSTR("Vive Cocoa !");
    CGImageRef image;
    CGWindowRef window;
    [/tt]
    Quand on regarde CGWindowRef, on a un typedef :
    [tt]
    typedef WindowPtr WindowRef;
    [/tt]
    Et en cherchant plus loin, on tombe enfin sur le pointeur de structure :
    [tt]
    typedef struct OpaqueWindowPtr * WindowPtr;
    [/tt]
    Bien sûr les APIs Core Foundation, Core Graphics sont procédurales alors que Core Image et autres Core Datas sont orientées objets, mais je pense que les racines sont communes et sont la raison de l'utilisation des typedefs.
  • amnesicamnesic Membre
    02:22 modifié #28
    Si si c'était bien des coquilles ...mais bon ils sont réactifs car s'est corrigé sur le site web ;)
  • Eddy58Eddy58 Membre
    02:22 modifié #29
    Ha oui en effet, donc on peut oublier ce que j'ai dit plus haut...:P
Connectez-vous ou Inscrivez-vous pour répondre.