सार यूआई। C # XWT के लिए नई रूपरेखा

यदि आप उपयोगकर्ता इंटरफेस (WPF, GTK, Qt, wxWidgets, और यहां तक ​​कि ट्रेंडी वेब समाधान) को लागू करने के लिए मौजूदा आधुनिक ढांचे को देखते हैं, तो आप आसानी से देख सकते हैं कि वे जुड़वाँ बच्चों की तरह एक-दूसरे की तरह दिखते हैं। किसी भी फ्रेमवर्क में बटन, फ़ील्ड, चेकबॉक्स, स्विचेस होते हैं, जो उपयोगकर्ता के दृष्टिकोण से तर्क के समान होते हैं। मतभेद केवल निम्न-स्तरीय कार्यान्वयन में हैं।

जब प्रोग्रामिंग दुनिया में कुछ समान दिखाई देता है, तो वे इसे एक अमूर्त परत में लपेटते हैं। और इसलिए मैं गलती से ज़मीर के लोगों द्वारा बनाए गए एक समान समाधान पर ठोकर खाई। जो iOS और Android के लिए C # फ्रेमवर्क बेचते हैं । इस समाधान को Xwt कहा जाता था - जाहिरा तौर पर, यह Xamarin विंडो टूलकिट के लिए खड़ा है।



सार में




विचार सरल है। नियंत्रण, बुनियादी गुणों के साथ मिलकर, एक ऐसे इंटरफ़ेस में लिपटे होते हैं जो मौजूदा रूपरेखाओं का उपयोग करके कार्यान्वित किया जाता है। इस मामले में, कार्यान्वयन अलग-अलग विधानसभाओं में स्थित हैं और यह प्रत्येक मंच पर किसी एक विधानसभा को रखने के लिए पर्याप्त है।

सबसे पहले, इंटरफ़ेस के बारे में: चूँकि Xwt का कार्य Gtk से Coco तक MonoDevelop को पोर्ट करना था, Xwt इंटरफ़ेस Gtk # इंटरफ़ेस के बहुत करीब है। जीटीके से विरासत में मिले भरण और विस्तार नियमों के अनुसार नियंत्रण स्वचालित रूप से स्केल की गई पंक्ति, कॉलम और टेबल लेआउट में रखे जाते हैं। Gtk ने TreeView / TreeStore डिवाइस को भी बनाए रखा, हालाँकि यह कुछ हद तक .NET मानकों के करीब था।

Xwt के मौजूदा संस्करण में WPF, Gtk और कोको के लिए कार्यान्वयन हैं। इसी समय, कोई भी विंडोज या मैक ओएस एक्स पर जीटीके का उपयोग करने से मना नहीं करता है।

आप यहां से स्रोत में रूपरेखा चुन सकते हैं । इंटरफ़ेस Xwt.dll में अलग से इकट्ठा किया गया है, और Xwt.Gtk.dll, Xwt.Mac.dll, Xwt.WPF.dll में असेंबली। इस मामले में, कार्यान्वयन विकल्प और उनके लिंक हार्ड फ़ाइल में हैं, इसलिए आप पूरे प्रोजेक्ट को भूलकर केवल अपना कार्यान्वयन जोड़ सकते हैं।

आइए Xwt पर एक छोटा अनुप्रयोग बनाने की कोशिश करते हैं:
class Program { [STAThread] static void Main(string[] args) { Xwt.Application.Initialize(Xwt.ToolkitType.Wpf); Xwt.Window MainWindow = new Xwt.Window() { Title = "Xwt Test" }; MainWindow.CloseRequested += (o, e) => { Xwt.Application.Exit(); }; Xwt.Menu MainMenu = new Xwt.Menu(); Xwt.RichTextView TextView = new Xwt.RichTextView(); Xwt.MenuItem FileOpenMenuItem = new Xwt.MenuItem(""); Xwt.Menu FileMenu = new Xwt.Menu(); FileOpenMenuItem.Clicked += (o,e) => { Xwt.OpenFileDialog Dialog = new Xwt.OpenFileDialog(" "); if (Dialog.Run(MainWindow)) { TextView.LoadFile(Dialog.FileName, Xwt.Formats.TextFormat.Markdown); } }; Xwt.MenuItem FileMenuItem = new Xwt.MenuItem("") { SubMenu = FileMenu }; FileMenu.Items.Add(FileOpenMenuItem); MainMenu.Items.Add(FileMenuItem); MainWindow.MainMenu = MainMenu; MainWindow.Content = TextView; MainWindow.Show(); Xwt.Application.Run(); } } 


कृपया ध्यान दें कि संबंधित इंटरफेस न केवल नियंत्रण के लिए, बल्कि मानक संवाद बॉक्स के लिए भी बनाए गए हैं। एक बोनस के रूप में, एक मार्कडाउन पार्सर को रिचटेक्स्ट व्यू कंट्रोल में बनाया गया है :)

इस एप्लिकेशन को चलाकर हम यहां देखेंगे:


एक पंक्ति को Xwt.Application.Initialize(Xwt.ToolkitType.Gtk); बदलें Xwt.Application.Initialize(Xwt.ToolkitType.Gtk); और एक अलग परिणाम प्राप्त करें।


अधिक अमूर्तता


लेखक और भी आगे बढ़े और Gdk के समान दिखने में एक सार ड्राइंग इंटरफ़ेस शामिल किया। इस इंटरफ़ेस के भीतर, उदाहरण के लिए, Xwt.Drawing.Color , System.Drawing.Color और Gdk.Color से अलग है।

यहाँ एक सरल कोड एक वृत्त खींच रहा है। यह सभी प्लेटफार्मों पर सफलतापूर्वक चलता है।
 class DrawCircle : Xwt.Canvas { protected override void OnDraw(Xwt.Drawing.Context ctx, Xwt.Rectangle dirtyRect) { ctx.SetColor(Xwt.Drawing.Colors.Black); ctx.SetLineWidth(1); ctx.Arc(50, 50, 30, 0, 350); ctx.Stroke(); } } class Program { [STAThread] static void Main(string[] args) { Xwt.Application.Initialize(Xwt.ToolkitType.Wpf); Xwt.Window MainWindow = new Xwt.Window() { Title = "Xwt Test" }; MainWindow.CloseRequested += (o, e) => { Xwt.Application.Exit(); }; DrawCircle Canvas = new DrawCircle(); MainWindow.Content = Canvas; MainWindow.Show(); Xwt.Application.Run(); } } 


एक तरफ, क्रॉस-प्लेटफ़ॉर्म ड्राइंग इंटरफ़ेस एक चीज है, ज़ाहिर है, आवश्यक है। दूसरी ओर, मौजूदा कोड को पोर्ट नहीं किया जा सकता है, न ही अगर यह System.Drawing के लिए लिखा गया है, न ही काहिरा के लिए।

बड़े-बड़े दावे


अमूर्त ड्राइंग इंजन के अलावा, रूपरेखा के लेखक एनिमेशन के लिए एक अमूर्त बनाने के लिए झूलते हैं। वर्तमान स्तर पर, यह पहले के $ .animate () संस्करणों के समान कुछ प्रस्तुत करता है: एक टाइमर पर एक साधारण आवरण। मेरे लिए एक एनिमेटेड Gtk # की कल्पना करना कठिन था, इसलिए मैंने सिर्फ एक साधारण शेक बनाने की कोशिश की, जैसा कि ट्रेंडी लॉगिन विंडो में होता है।

  class Program { [STAThread] static void Main(string[] args) { Xwt.Application.Initialize(Xwt.ToolkitType.Gtk); Xwt.Window W = new Xwt.Window() { }; Xwt.Button B = new Xwt.Button("Animate"); W.Content = B; W.Show(); B.Clicked += (o, e) => { #region  // -    ,      WX = WX    - ,    .    .    ,  . double CurX = WX, CurY = WY; WX = CurX; WY = CurY; double DiffX = WX - CurX, DiffY = WY - CurY; WX = CurX - DiffX; WY = CurY - DiffY; #endregion W.Animate("", (X) => { W.Location = new Point((CurX - DiffX) + 8 * Math.Sin(20 * X), (CurY - DiffY)); }, length: 750, repeat: () => false); }; Xwt.Application.Run(); } } 


ऊपर दिए गए उदाहरण ने टूलकिट टाइप.गेट और टूलकिट टाइप.पफ दोनों के साथ सफलतापूर्वक काम किया।

एक निष्कर्ष के बजाय


अब यह MIT लाइसेंस के तहत वितरित एक बहुत ही कच्ची, ओपन-सोर्स परियोजना है; इसका कोई प्रलेखन नहीं है, नहीं, बिल्कुल भी नहीं। हालाँकि, इस पर एक पूरी IDE (मोनोऑड्वेल्ड 4) लिखी गई है। इस परियोजना में अभी भी एक ग्राफिक डिजाइनर नहीं है, और यह अभी तक स्पष्ट नहीं है कि डेवलपर्स किस तरह से एक घोषणात्मक भाषा के साथ जाएंगे - कांटा ग्लेड या एक्सएएमएल का अनुकूलन। पहले से ही, मोनो के साथ संयोजन के रूप में शैक्षणिक परियोजनाओं के लिए रूपरेखा का उपयोग किया जा सकता है, और कम से कम सबसे सरल घोषणात्मक भाषा के आगमन के साथ, यह सुविधाजनक भी होगा। यह मजाक होगा, मेरी राय में, एक स्थानीय वेब सर्वर की तैनाती के साथ एक jQuery बैकएंड को लागू करने के लिए: यह किसी भी यूआई प्लेटफॉर्म के बिना ऐसे अकादमिक समाधान को निष्पादित करना संभव होगा, उदाहरण के लिए, क्लाउड में एक वर्चुअल मशीन पर। उसी समय, सिद्धांत को कमजोरियों के लिए संरक्षित किया जाएगा : "एक बार लिखो, हर जगह भागो।" और स्वयं मोनड्यूड्यूल को क्लाउड में ही लॉन्च किया जा सकता है :) एक छोटा सा मौका है कि Xamarin, Microsoft के साथ दोस्ती के दौरान, Xwt को क्रॉस-प्लेटफ़ॉर्म UI के लिए मुख्य Microsoft समाधान के रूप में पेश करेगा, और फिर यह कच्चा मुफ्त प्रोजेक्ट हर जगह होगा।

कुछ विशेषज्ञों का मानना ​​है कि अलग-अलग प्लेटफार्मों पर मौजूदा UI टूलकिट को इंटरफ़ेस करने की कोशिश करना एक ऐसा काम है, जिसकी परिभाषा में पर्याप्त समाधान नहीं है, क्योंकि विभिन्न प्लेटफार्मों में अलग-अलग उपयोगकर्ता अनुभव हैं। Xwt, हालांकि, काफी कार्यात्मक है। इसका माइनस यह है कि यह नियंत्रण और व्यवहार का एक तंग समूह शामिल करता है, और इस प्रकार इन सभी इंटरफेस को लागू करने के लिए बैकएंड की आवश्यकता होती है। यह बेहतर होगा यदि प्रत्येक नियंत्रण एक अनुबंध का एक झलक था; एप्लिकेशन ऐसे अनुबंधों के सेट को इंगित करेगा और केवल उन फ्रेमवर्क पर निष्पादित किया जाएगा जहां ये अनुबंध उपलब्ध हैं।

और मैं मैक के मालिकों से विभिन्न तरीकों में रूपरेखा के काम का परीक्षण करने का प्रयास करने के लिए भी कहना चाहूंगा।

Source: https://habr.com/ru/post/In201460/


All Articles