GrandMA3 Plugin ile UI Widget Kullanımı
GrandMA3 plugin geliştirmede UI widget'larını Lua ile nasıl oluşturacağınızı ve yöneteceğinizi öğrenin.
GrandMA3 Plugin Geliştirmede UI Widget Nedir?
GrandMA3, plugin geliştiricilerine kendi arayüz bileşenlerini oluşturma imkânı tanır. UI widget'lar; düğmeler, metin kutuları, kaydırıcılar ve listeler gibi ekrana yerleştirilen etkileşimli öğelerdir. Lua tabanlı plugin sistemi sayesinde bu bileşenleri programatik olarak oluşturabilir, özelleştirebilir ve kullanıcı etkileşimlerine yanıt verecek şekilde programlayabilirsiniz.
Plugin İçin Temel Yapı
Bir UI widget plugin'i yazmadan önce doğru dosya yapısını ve giriş noktasını tanımlamanız gerekir. GrandMA3, plugin dosyalarını .xml manifest ve .lua betik çifti olarak okur.
Bir plugin betiğinin temel iskeleti şu şekildedir:
local function Init(display_handle) -- widget'lar burada oluşturulur end local function CleanUp() -- kaynaklar serbest bırakılır end return Init, CleanUpÖnemli Not: Her plugin mutlaka bir CleanUp fonksiyonu döndürmelidir. Aksi takdirde plugin kapatıldığında bellek sızıntısı yaşanabilir.Widget Oluşturma Adımları
- Display handle almak: Plugin başlatılırken sistem size bir
display_handleiletir; tüm widget'lar bu handle üzerine inşa edilir. - Widget tipini seçmek: GrandMA3 API'si farklı widget türleri sunar. En yaygın kullanılanlar şunlardır:
StaticText— salt okunur metin gösterimiPushButton— tıklanabilir düğmeTextEdit— kullanıcı girişi için metin alanıSlider— sayısal değer seçimi için kaydırıcı
- Widget'ı konumlandırmak: Her widget için konum ve boyut parametreleri piksel cinsinden belirtilir.
- Callback bağlamak: Kullanıcı etkileşimleri için olay dinleyicisi tanımlanır.
Düğme Widget'ı Örneği
Aşağıdaki örnek, ekrana bir PushButton ekler ve tıklandığında konsola mesaj yazar:
local button = display_handle:CreateWidget("PushButton", {x=10, y=10, width=120, height=40}) button:SetLabel("Sahneyi Başlat") button:SetPressedFunction(function() Printf("Buton tıklandı!") end)Burada SetPressedFunction, düğmeye bir callback bağlar. Bu callback içinde fixture kontrolü, cue tetiklemesi veya harici API çağrısı gibi her türlü Lua kodu çalıştırılabilir.
Slider ile Değer Okuma
Bir sahne elemanının yoğunluğunu dinamik olarak kontrol etmek için kaydırıcı kullanabilirsiniz:
local slider = display_handle:CreateWidget("Slider", {x=10, y=70, width=200, height=30}) slider:SetMinMax(0, 100) slider:SetValue(50) slider:SetChangedFunction(function(val) Printf("Yeni değer: " .. tostring(val)) end)İpucu: SetChangedFunction her değer değişiminde tetiklenir. Performans açısından bu callback içinde ağır işlemler yapmaktan kaçının; mümkünse değeri bir değişkende saklayıp ayrı bir döngüde işleyin.Widget Stilini Özelleştirme
GrandMA3 widget'ları temel stil seçenekleri sunar. Renk, font boyutu ve görünürlük gibi özellikler aşağıdaki metodlarla ayarlanır:
SetBackColor(r, g, b)— arka plan rengini ayarlarSetTextColor(r, g, b)— metin rengini ayarlarSetVisible(true/false)— widget'ı gösterir veya gizlerSetEnable(true/false)— widget'ı etkin veya pasif yapar
Bu yöntemlerle kullanıcı arayüzünüzü konsolun genel tasarım diline uygun hale getirebilir, farklı durumlara göre (örneğin bağlantı kesildiğinde) widget'ları dinamik olarak devre dışı bırakabilirsiniz.
Yaygın Hatalar ve Çözümleri
- Widget görünmüyor:
display_handle'ın geçerli bir referans olduğundan emin olun;nilkontrolü yapın. - Callback çalışmıyor: Fonksiyonu atadıktan sonra widget'ın hâlâ var olduğunu doğrulayın; erken temizleme sık karşılaşılan bir sorundur.
- Konum kayması: Farklı ekran çözünürlüklerinde görünüm bozulabilir; koordinatları sabit kodlamak yerine ekran boyutunu sorgulayarak hesaplayın.