2010-04-23 21 views
5

से संबंधित स्क्रॉलबार के साथ टेक्स्टव्यू में फ़ाइल का एक हिस्सा कैसे प्राप्त कर सकता हूं, मैं एक बहुत बड़ा फ़ाइल संपादक बनाने की कोशिश कर रहा हूं (जहां संपादक केवल स्मृति में बफर का एक हिस्सा संग्रहीत करता है समय), लेकिन मैं अपनी पाठ्यदृश्य वस्तु बनाते समय अटक गया हूं। असल में- मुझे पता है कि मुझे टेक्स्ट व्यू बफर को गतिशील रूप से अपडेट करने में सक्षम होना चाहिए, और मुझे स्क्रॉलबार को पूर्ण फ़ाइल से संबंधित होने के लिए गर्म नहीं पता है, जबकि टेक्स्टव्यू में फ़ाइल का केवल एक छोटा बफर होता है।जीटीके: मैं पूर्ण फ़ाइल

मैंने जीटीके के साथ खेला है। एक Gtk.ScrolledWindow और स्क्रॉलबार पर समायोजन, लेकिन हालांकि मैं स्क्रॉलबार की सीमा का विस्तार कर सकता हूं, फिर भी वे बफर की सीमा पर लागू होते हैं, न कि फाइलसाइज (जिसे मैं सेट करने का प्रयास करता हूं Gtk.Adjustment पैरामीटर के माध्यम से) जब मैं टेक्स्टव्यू में लोड करता हूं। मुझे एक विजेट होना चाहिए जो "जानता है" कि यह फ़ाइल के एक हिस्से को देख रहा है, और फाइल के विभिन्न हिस्सों को देखने के लिए आवश्यक बफर लोड/अनलोड कर सकता है। अब तक, मेरा मानना ​​है कि जब मैं बंद हूं, या वर्तमान बफर से बाहर होने के बारे में गणना करने के लिए "change_view" का जवाब दूंगा और अगले लोड करने की आवश्यकता है, लेकिन मुझे नहीं पता कि स्क्रॉलबार कैसे प्राप्त करें शीर्ष फ़ाइल की शुरुआत से संबंधित है, और नीचे टेक्स्टव्यू में लोड किए गए बफर के बजाय फ़ाइल के अंत से संबंधित है।

किसी भी मदद की सराहना की जाएगी, धन्यवाद!

उत्तर

1

आपको शायद अपना खुद का Gtk.TextBuffer कार्यान्वयन बनाना चाहिए, क्योंकि डिफ़ॉल्ट एक स्मृति में पूरे बफर को संग्रहीत करने पर निर्भर करता है।

0

मैं el.pescado के उत्तर से सहमत हूं, लेकिन आप इसे नकली करने का भी प्रयास कर सकते हैं। आपके द्वारा संपादित की जा रही फ़ाइल में लाइनों की संख्या की गणना करें। बफर में एक स्क्रीनफुल टेक्स्ट रखें और बाकी को नई लाइनों से भरें ताकि बफर के पास फाइल के समान लाइनों की संख्या हो।

फिर पाठ दृश्य वाले स्क्रॉल विंडो के ऊर्ध्वाधर समायोजन के changed सिग्नल से कनेक्ट करें, यह विंडो को स्क्रॉल होने पर आपको सूचित करेगा। जब ऐसा होता है, तो उस पाठ को प्रतिस्थापित करें जो आपके पास पहले से मौजूद बफर में न्यूलाइन के साथ है, और उस अनुभाग को लोड करें जिसे आप अभी देख रहे हैं।

आप बता सकते हैं जो लाइन नंबर आप अपेक्षा की जाती है (बग हो सकते हैं, मैं फ्लाई पर स्मृति से यह कर और अजगर में अनुवाद कर रहा हूँ) इस कोड के साथ एक पाठ दृश्य में पर विचार करना करने के लिए:

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() 
संबंधित मुद्दे