2010-04-23 4 views
5

Ich versuche, einen sehr großen Dateieditor (wo der Editor speichert nur einen Teil des Puffers im Speicher bei a Zeit), aber ich bleibe stecken, während ich mein Textview-Objekt erstelle. Grundsätzlich- Ich weiß, dass ich in der Lage sein muss, den Textansichtspuffer dynamisch zu aktualisieren, und ich weiß nicht heiß, um die Bildlaufleisten auf die vollständige Datei beziehen zu lassen, während die Textansicht nur einen kleinen Puffer der Datei enthält.Gtk: Wie bekomme ich einen Teil einer Datei in einer Textansicht mit Bildlaufleisten in Bezug auf die vollständige Datei

Ich habe mit Gtk.Adjustment auf einem Gtk.ScrolledWindow und ScrollBars gespielt, aber obwohl ich den Bereich der Bildlaufleisten erweitern kann, gelten sie immer noch für den Bereich des Puffers und nicht die Dateigröße (die ich versuche zu setzen über Gtk.Adjustment Parameter) wenn ich in Textview lade. Ich muss ein Widget haben, das "weiß", dass es einen Teil einer Datei anschaut, und kann Puffer laden/entfernen, wie es notwendig ist, um verschiedene Teile der Datei zu sehen. Bisher glaube ich, dass ich auf die "change_view" reagieren werde, um zu berechnen, wann ich aus bin, oder ob ich gerade aus dem aktuellen Puffer bin und den nächsten laden muss, aber ich weiß nicht, wie ich die Bildlaufleisten bekommen soll Der Anfang bezieht sich auf den Anfang der Datei, und der untere bezieht sich auf das Ende der Datei und nicht auf den geladenen Puffer in Textansicht.

Jede Hilfe wäre sehr dankbar, danke!

Antwort

1

Sie sollten wahrscheinlich Ihre eigene Gtk.TextBuffer-Implementierung erstellen, da die Standardimplementierung darauf beruht, den gesamten Puffer im Speicher zu speichern.

0

Ich stimme el.pescado's Antwort zu, aber Sie könnten auch versuchen, es zu fälschen. Zählen Sie die Anzahl der Zeilen in der Datei, die Sie bearbeiten. Setzen Sie einen Bildschirm voller Text in den Puffer und füllen Sie den Rest mit Zeilenumbrüchen, so dass der Puffer die gleiche Anzahl von Zeilen wie die Datei hat.

Verbinden Sie sich dann mit dem Signal changed der vertikalen Anpassung des Bildlauffensters, das die Textansicht enthält, dies benachrichtigt Sie, wenn das Fenster gescrollt wird. Ersetzen Sie in diesem Fall den Text, den Sie bereits im Puffer hatten, durch Zeilenumbrüche, und laden Sie den Abschnitt, den Sie gerade betrachten.

können Sie sagen, welchen Zeilennummern Sie mit diesem Code an in einer Textansicht Suche werden sollen (Fehler haben kann, ich dies aus dem Gedächtnis zu tun und on the fly in Python zu übersetzen):

visible_rect = textview.get_visible_rect() 
top = textview.get_iter_at_location(visible_rect.x, visible_rect.y) 
bottom = textview.get_iter_at_location(visible_rect.x, visible_rect.y + visible_rect.height) 
top_line, bottom_line = top.get_line(), bottom.get_line() 
Verwandte Themen