GrandMA3 Plugin ile UI Widget Kullanımı

GrandMA3 plugin geliştirmede UI widget'larını nasıl oluşturacağınızı ve yöneteceğinizi adım adım öğrenin.

GrandMA3 Plugin'lerde UI Widget Nedir?

GrandMA3'ün Lua tabanlı plugin sistemi, yalnızca arka planda çalışan scriptler yazmakla kalmaz; konsolun kendi arayüzüne entegre UI widget'ları oluşturmanıza da olanak tanır. Bu sayede operatör dostu butonlar, açılır listeler ve metin alanları doğrudan plugin pencerenizde görünür.

Widget'lar, gma.gui kütüphanesi aracılığıyla erişilir ve bir dialog veya layout penceresi içine yerleştirilir. Temel mantık; önce bir pencere (window) oluşturmak, ardından bu pencereye widget eklemektir.

Temel Widget Türleri

  • Button: Kullanıcı tıklamasıyla tetiklenen eylemler için
  • TextEdit: Kullanıcıdan metin veya sayısal girdi almak için
  • Dropdown (ComboBox): Önceden tanımlı seçenekler sunmak için
  • Label: Bilgi veya açıklama metni göstermek için
  • CheckBox: Açık/kapalı durumu takip etmek için

İlk UI Plugin'ini Oluşturma

Aşağıdaki örnek, kullanıcıdan bir fixture numarası alıp o fixture'ı seçen basit bir dialog penceresi oluşturur.

Dialog Penceresini Tanımlamak

Öncelikle gma.gui.confirm yerine özelleştirilebilir bir dialog için gma.gui.dialog fonksiyonunu kullanıyoruz. Widget'ları bir tablo (table) içinde tanımlayıp dialog'a geçirmeniz yeterlidir:

local result = gma.gui.confirm("Fixture Seç", "Hangi fixture numarasını seçmek istersiniz?")

Daha gelişmiş senaryolarda custom dialog tercih edilir. Bu yapıda her widget'ın bir type, label ve gerekiyorsa default değeri tanımlanır.

TextEdit Widget ile Girdi Almak

Kullanıcıdan numerik girdi almanın en pratik yolu TextEdit widget'ıdır:

local dlg = gma.gui.dialog("Fixture Numarası", {{type="textedit", label="Numara:", default="1"}})

Dialog kapatıldığında dönen tablo içinden değeri şöyle okuyabilirsiniz:

if dlg then local num = dlg[1] gma.cmd("SelFix " .. num) end

Dropdown ile Seçim Sunmak

Sabit seçenekler için dropdown (combobox) kullanmak arayüzü çok daha temiz hale getirir:

local options = {"Preset 1", "Preset 2", "Preset 3"} local dlg = gma.gui.dialog("Preset Seç", {{type="dropdown", label="Preset:", items=options, default=1}})

İpucu: Dropdown'dan dönen değer, seçilen öğenin index numarasıdır (1'den başlar). Öğenin metnine ulaşmak için options[dlg[1]] kullanın.

Widget Etkileşimini Yönetmek

GrandMA3 plugin sistemi event-driven bir yapıya tam olarak sahip olmadığından, kullanıcı etkileşimi genellikle dialog'un kapanmasıyla tetiklenir. Bu nedenle karmaşık gerçek zamanlı UI yerine adım adım dialog akışları tasarlamak daha sağlıklı bir yaklaşımdır.

  1. İlk dialog'u aç ve kullanıcıdan mod seçmesini iste
  2. Seçime göre ikinci dialog'u dinamik olarak oluştur
  3. Son değerleri topla ve gma.cmd() ile konsola uygula

Hata Yönetimi

Kullanıcı dialog'u iptal ettiğinde gma.gui.dialog fonksiyonu nil döner. Bu durumu kontrol etmeden devam etmek script hatasına yol açar:

if dlg == nil then gma.echo("İşlem iptal edildi.") return end

Önemli Not: GrandMA3 yazılım güncellemeleriyle birlikte GUI API fonksiyonlarında değişiklikler olabilir. Plugin'lerinizi her büyük yazılım güncellemesinden sonra test etmeyi alışkanlık haline getirin.

Performans İpuçları

  • Dialog'ları döngü içinde açmaktan kaçının; tüm girdiyi tek bir dialog'da toplayın
  • Widget sayısını kullanıcıyı bunaltmayacak şekilde sınırlı tutun
  • gma.echo() ile kullanıcıya işlem sonucunu her zaman bildirin
  • Büyük dropdown listelerini script başında bir kez tanımlayıp yeniden kullanın