NSTextView ou Custom NSView?

AntilogAntilog Membre
16:44 modifié dans Vos applications #1
Salut,

J'ai un nouveau projet en gestation, et je me demande comment gèrer la fenêtre principale...

Cette fenêtre affichera un document d'une page (destiné à  l'impression) qui aura la forme plus ou moins d'une facture, donc avec un positionnement précis des textes: un pavé adresse, un tableau avec des textes et des valeurs, des lignes horizontales et verticales, éventuellement un logo...

Ma première idée était de sous-classer NSView (dans une NSScrollView), ce qui me donne toute lattitude pour positionner à  la fois les textes (par NSAttributedString) et les graphiques.

Cependant, ayant ou௠que les affichages de textes par NS...String étant très peu efficaces (en temps de traitement), et étant donné qu'il est prévu d'afficher pas mal de textes (même s'ils sont courts), je me demande si une NSTextView ne serait pas une meilleure solution...
Par contre, je risque d'avoir plus de problème pour maintenir mes textes dans leurs 'cases', et le calcul de positions des lignes devrait se faire par rapport à  la position du texte...

Qu'en pensez-vous?
Quel serait la meilleure solution à  votre idée? (je dois préciser que la vue ne devrait pas être directement éditable)

Merci d'avance pour vos conseils  o:)

Réponses

  • 16:44 modifié #2
    Si la vue ne doit pas être éditable, la réponse tient pour moi en un mot: webkit.

    Ton programme génère un code HTML (une NSString quoi), qui est affichée dans une webview.
  • AntilogAntilog Membre
    16:44 modifié #3
    dans 1122898479:

    Si la vue ne doit pas être éditable, la réponse tient pour moi en un mot: webkit.

    Ton programme génère un code HTML (une NSString quoi), qui est affichée dans une webview.


    Mmmmmouuui  :(

    A première vue, cette solution ne me plaà®t pas trop (sans vouloir t'offenser) .

    1. La génération d'HTML par le code, ça me semble pas facile-facile (quoi que, avec un 'template' à  remplir...)

    2. La vue est en fait quasiment une preview de l'édition, qui se fera presque certainement, et là , si j'en crois mes expériences jusqu'ici d'édition de HTML, c'est toujours WYSIDDOWYG (What You See Is Definitly Different Of What You Get)  :o
  • août 2005 modifié #4
    La vue n'est pas une preview de l'impression, c'est la même chose.

    Le HTML est très pratique, à  condition de faire le code correctement (autrement dit, éviter les outils wysiwig, rien ne vaut un bon éditeur de texte). Il faut évidemment partir d'une page 'modèle'. Pour ma part, ce que je fais, c'est mettre dans le HTML !#clé#! (à  la manière du publi postage dans Word), j'ai un petit NSScanner qui me scanne le modèle, et remplace ces expressions par [dico valueForKey:clé]. Ceci dit dans ton cas, tu devras peut-être un peu étendre et rajouter des balises pour permettre d'avoir des boucles (pour une liste d'éléments dans une facture par exemple).

    PS: sinon ton wysi machin, pour que ça ait un sens, remplace le dernier G par un W(ant) :p
  • AntilogAntilog Membre
    16:44 modifié #5
    dans 1122914366:

    La vue n'est pas une preview de l'impression, c'est la màƒÂªme chose.


    C'est vrai, autant pour moi, la vue sert indistinctement pour l'affichage et l'àƒÂ©dition, donc, puisque tu me promets qu'il n'y aura pas de surprise àƒÂ  l'impression (tu promets, juràƒÂ©, crachàƒÂ©, non? :o )...

    OK, tu m'as convaincu, en utilisant l'HTML en valeurs fixes, àƒÂ§a pourrait àƒÂªtre sympa...
    En plus, facilitàƒÂ© de mise au point de la vue apràƒÂ¨s coup...
    En plus, je pourrais avoir plusieurs gabarits diffàƒÂ©rents pour les màƒÂªmes informations...

    Merci Renaud, c'est vendu, j'attaque comme àƒÂ§aà‚  <3
  • fouffouf Membre
    16:44 modifié #6
    Euh, ca n'a rien a voir avec le sujet, mais j'ai remarqué que dans les messages d'Antilog, tous les caractères particuliers (lettres accuentuées, cédilles ...) sont remplacés par des truc du genre àƒÂ©. Est-ce que ca se passe aussi chez vous ?
  • AntilogAntilog Membre
    16:44 modifié #7
    dans 1122970796:

    Euh, ca n'a rien a voir avec le sujet, mais j'ai remarqué que dans les messages d'Antilog, tous les caractères particuliers (lettres accuentuées, cédilles ...) sont remplacés par des truc du genre àƒÂ©. Est-ce que ca se passe aussi chez vous ?


    Et oui, ça se passe aussi chez moi  ;D

    Ce n'est pas automatique, ça dépends de l'ordinateur que j'utilise...
    Sur le PC du boulot sous IE, ça marche
    Sur le iBook Mac OS X et Safari, ça marche
    Sur le 4400, Mac OS 8.1  :o et IE de l'époque, je vois les autres messages avec le même type de caractères étranges, les miens me paraissent bons...
    ... mais ne le sont pas.

    Probablement un problème d'encodage, mais par contre ça fonctionne normalement en visualisation de pages Web, alors...
    je devrais peut-être simplement éviter les accents avec cet ordi :'(
  • 16:44 modifié #8
    Peut-être que la détection de l'encodage n'est pas en automatique sur cet ordinateur? Visiblement il est chez toi en Unicode, alors que le site est en ISO-8859-15 (si mes souvenirs sont bons)
  • an3kan3k Membre
    16:44 modifié #9
    Je ne sais pas si c'est tout à  fait dans le meme genre mais (cf mon post), je veux créer un editeur de texte pour mes cours et j'aimerais pouvoir (en mettant de coté une colone pour les définitions) imprimmer dans un template ou exporter en pdf avec un template :
    en haut le nom du fichier et le numéro de la page dans une cellule bleue et sur le coté une colone bleu plus claire (vide).
    Comme s'y prendre ? est-ce que ce sera plus simple en xsl (pas de cocoa) ?
  • Eddy58Eddy58 Membre
    16:44 modifié #10
    Cocoa t'offre tout les outils nécessaires pour le pdf. Tu as le PDFKit (il faut au moins Tiger), et l'AppKit te permet de gérer des pdf, entre autres avec la classe NSPDFImageRep. :)
  • AntilogAntilog Membre
    septembre 2005 modifié #11
    Si tu as un fichier html, tu peux le convertir en pdf _très_ facilement:
    <br />{<br />	NSString * modelePath;<br />	NSString * modeleString;<br />	<br />             // Charger le html<br />	modelePath   = [[NSBundle mainBundle] pathForResource:@&quot;Modele 1&quot; ofType:nil];<br />	modeleString = [[NSString alloc] initWithContentsOfFile:modelePath];<br />	<br />	// Création de la WebView &quot;invisible&quot; (non affichée)<br />	invisibleWV = [[WebView alloc] init];<br />	[invisibleWV setMaintainsBackForwardList:NO];<br /><br />	// Attendre le message didFinishLoadForFrame<br />	[invisibleWV setFrameLoadDelegate:self];<br />	[[invisibleWV mainFrame] loadHTMLString:[[self document] contentString] baseURL:nil];<br />}<br /><br />// delegate de webview<br />- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame<br />{<br />	WebFrame * wf;<br />	WebFrameView * wfv;<br />	NSView * dv;<br /><br />	wf = [sender mainFrame];<br />	wfv = [wf frameView];<br />	dv = [wfv documentView];<br /><br />            // la webview est chargée entièrement, créer le pdf<br />	NSData * dataWV = [dv dataWithPDFInsideRect:[dv bounds]];<br />	NSImage * image = [[NSImage alloc] initWithData:dataWV];<br />	if (image != nil)<br />	{<br />                 ... afficher/sauvegarder l&#39;image pdf<br />	}	<br />}<br /><br />
    


    Ne pas oublier de releaser invisibleWV quelque part

    [edit] Oups! j'ai voulu modifier le message et je l'ai dupliqué  :o [/edit]
  • an3kan3k Membre
    16:44 modifié #12
    ouai, mais je ne m'en sortirais pas, je débute ca risque d'etre sur chaud de faire avec du html... ^^
Connectez-vous ou Inscrivez-vous pour répondre.