afficher les numéros de ligne
Chacha
Membre
Salut,
Je me pose un problème, et je n'ai absolument aucune idée de la façon de le résoudre. Je voudrais une zone où l'on puisse taper du texte, et qui affiche à gauche les numéros de ligne (comme dans XCode, quoi).
Voici donc une multi-question : comment dois-je emboà®ter quelles vues ?
Je ne sais vraiment pas par quelle bout y prendre (comme on dit chez moi).
+
Chacha
Je me pose un problème, et je n'ai absolument aucune idée de la façon de le résoudre. Je voudrais une zone où l'on puisse taper du texte, et qui affiche à gauche les numéros de ligne (comme dans XCode, quoi).
Voici donc une multi-question : comment dois-je emboà®ter quelles vues ?
Je ne sais vraiment pas par quelle bout y prendre (comme on dit chez moi).
+
Chacha
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
NSRulerView, tiens je ne connais pas ça, je vais regarder.
Merci du tuyau !
+
Chacha
Apparemment, ce n'est pas simple; plutôt que de partir dans n'importe quelle direction, je vous demanderais bien encore quelques conseils.
Isolons les problèmes:
-Ma NSTextView n'a pas de scroller horizontal, le texte revient tout seul à la ligne, donc une ligne "réelle" se terminant par "\n" peut tenir sur plusieurs lignes "visuelles" de la NSTextview, ce qui induit une forte irrégularité dans ce que je devrais afficher dans la NSRulerView.
-je vais donc avoir besoin, a priori (détrompez-moi sinon), de calculer un peut le <bounding rect> d'une ligne réelle. Pour ça, je crois que c'est le NSLayoutManager qui contient la bonne information, et me permettra, avec un NSRange de caractères, de calculer la taille à l'écran (tenant compte de la fonte, etc.)
-ensuite, je n'ai qu'à surcharger l'affichage des marqueurs dans la rulerview, pour afficher un numéro en regard de chaque <bounding rect> calculé précédemment; c'est la partie la moins claire dans ma tête, je suis un peu perdu.
Vos avis ?
+
Chacha
euh, je dis peut-être une bétise pour ton cas mais la méthode size des NSAttributedString tout simplement ça t'irait pas ?
À première vue non, car la taille de la string est, je pense, indépendant de son contexte; je veux dire, c'est la taille qu'elle aurait si on l'affichait sur une seule ligne, mais en réalité elle est peut-être à cheval sur plusieurs lignes à cause de la largeur réduite du NSTextView.
Je posterai un code propre dès que ce sera bien rôdé. En fait ça a été plus simple que ce que je croyais.
+
Chacha
[Fichier joint supprimé par l'administrateur]
1)Créez une classe LineCountRulerView dérivant de NSRulerView
2)associez ce ruler personnalisé à votre textView ainsi:
Puis, réimplémentez la méthode suivante dans LineCountRulerView:
Une dernière chose, il faut rafraà®chir le ruler quand le texte est modifié. On peut le faire brutalement en lui faisant scruter la notification correspondante:
Toujours dans LineCountRulerView:
pas mal, non ? Je vous file une petite capture d'écran:
[Fichier joint supprimé par l'administrateur]
Ca vaudrait d'être mis dans les trucs et astuces ou dans les ressources ça !
Je vais p'tet encore dire une bétise mais pour identifier tes lignes séparées par des @\n, pourquoi ne pas tout tronçoner dans un array de lignes avec
?
J'allais te répondre une bêtise ! Je m'appretais, furibond, à transcrire au clavier qu'une telle technique perd l'information des ranges, et puis en fait j'ai réalisé qu'on retrouve très facilement cette information avec la taille des chaà®nes. Donc oui, c'est une excellente idée !
+
Chacha