2013-03-05 5 views
5

यह एक नया विजेट बनाने में सक्षम होना आदर्श होगा जो बिल्डर को अपनी सामग्री लोड करने के लिए उपयोग करता है, उदाहरण के लिए।बिल्डर सामग्री का उपयोग कर वैला जीटीके ऑब्जेक्ट का निर्माण

public class MyDialog : Dialog 
    { 
    public MyDialog 
     { 
     Gtk.Builder builder = new Gtk.Builder(); 
     builder.add_from_file ("dialog.ui"); 
     this = builder.get_object ("my_dialog") as Gtk.Widget; 
     } 
    } 

जाहिर है इस वजह this = गलत काम है काम नहीं करेगा, लेकिन अगर वहाँ उन है कि बिल्डर से लोड हो जाने का उपयोग कर एक विजेट की सामग्री को स्थापित करने के लिए एक रास्ता है मैं सोच रहा हूँ।

इस बीच मैं

var content = get_content_area(); 
var dialog = builder.get_object ("my_dialog") as Gtk.Widget; 
var _content = (dialog as Dialog).get_content_area(); 
_content.reparent (content); 

जो काम करता है के साथ this = ... बदल दिया है, लेकिन यह अभी भी मेरे लिए कोई मतलब होता है में सीधे लोड करने के लिए सक्षम होने के लिए।

धन्यवाद।

उत्तर

1

नहीं, संभव नहीं है। सी ++ Gtk.Builderhas this पर बाध्यकारी है, लेकिन दुर्भाग्य से यह सी ++ टेम्पलेट्स पर निर्भर करता है और इसे किसी अन्य बाध्यकारी में लागू नहीं किया गया है।

+0

हम्म, बहुत खराब पाया जा सकता है। क्या आपको लगता है कि content_area reparenting के दृष्टिकोण के साथ कुछ भी गलत है? –

+0

मुझे ठीक लगता है। – ptomato

2

हम इसे गेरी में बड़े पैमाने पर करते हैं। जिस चाल का मैंने सबसे अधिक उपयोग किया है वह ग्लैड में युक्त ऑब्जेक्ट (यानी Gtk.Dialog) को बिल्कुल नहीं बनाना है, बस इसकी सामग्री। फिर आप वाल में संवाद/खिड़की को ही कोड कर सकते हैं।

ग्लैड 3.15 से पहले ऐसा करने का दर्द था क्योंकि यह स्पष्ट रूप से बॉक्स, ग्रिड और अन्य घटकों को अपरिवर्तनीय रूप से समर्थन नहीं करता था। यदि आपने अभी तक अपग्रेड नहीं किया है, तो मैं इसकी अनुशंसा करता हूं।

+0

हू, यह मजाकिया है क्योंकि मैंने वर्षों तक शीर्ष स्तर के रूप में बॉक्स का उपयोग करने का भी प्रयास नहीं किया है क्योंकि यह कभी भी काम नहीं करता था। बहुत बहुत धन्यवाद, मैं अब से क्या कर रहा हूं, न कि सामग्री को पुन: parenting करना काम नहीं करता है, यह अब अनावश्यक लगता है। –

3

यदि कोई भविष्य में इस प्रश्न पर ठोकर खाता है, तो वैला 0.22 समग्र विजेट टेम्पलेट्स, जो उपरोक्त समस्या का एक बहुत आसान समाधान है। समग्र टेम्पलेट्स आपको ग्लैड में एक विजेट को परिभाषित करने और वैल को बताने के लिए विशेषताओं का उपयोग करने की अनुमति देता है, जो आपकी कक्षा के बिट्स को विजेट के कौन से तत्वों का संदर्भ देता है और कॉलबैक को कनेक्ट करने के लिए, Gtk.Builder मैन्युअल रूप से उपयोग किए बिना।

विवरण http://blogs.gnome.org/tvb/2013/05/29/composite-templates-lands-in-vala/

संबंधित मुद्दे