Ruby/GTK (Bagian 2: Signal)

Sambil istirahat makan siang saya coba lagi belajar Ruby/GTK sambil didokumentasikan, kali ini mulai mencoba mengenal signal dan signal handler. Dimulai saja dengan membuat lagi file baru:

$> gedit rg002.rb

Isinya (berikut comment sebagai penjelasan) sebagai berikut:

#!/usr/bin/env ruby
# panggil library gtk
require 'gtk2'
# buat button, mulai tambahkan signal handler
button = Gtk::Button.new("Tombol Penghasil Ayam")
button.signal_connect("clicked") {
  puts "Ayam"
}
# buat window, tambahkan signal handler dan pernak-pernik
window = Gtk::Window.new
window.signal_connect("destroy") {
  puts "Destroy event nih"
  Gtk.main_quit
}
window.border_width = 20
# tambahkan button ke window
window.add(button)
window.show_all
# loop utama
Gtk.main

Jalankan program Ruby tersebut via console (hasilnya adalah sebuah window dengan tombol yang bisa mencetak “Ayam” di console setiap kita menekannya):

$> ruby rg002.rb

Lebih Detail tentang Signal

Aktivitas di program Ruby/GTK ini umumnya berupa trigger (yang dinamakan “signal“) yang merupakan tanggapan dari suatu kejadian (atau “event“) yang selanjutnya memicu aktivitas lain (yang dinamakan “function/method“. Contoh sederhananya adalah peristiwa senggol bacok (yayaya saya miskin analogi). Ketika seseorang menyenggol preman (menyenggol=event), preman tersebut akan menerima indikasi atau tanda ketidaksopanan (ketidaksopanan=signal) untuk selanjutnya si preman terpicu untuk membacok si orang yang menyenggol dirinya (membacok=response method).

Di Ruby/GTK, penangan aktivitas signaling ini ditangani oleh method signal_connect yang merupakan bagian dari pustaka Ruby/GLib. Method ini menerima inputan berupa nama signal (umumnya adalah event) untuk selanjutnya bisa kita tambahkan kode apa yang akan dieksekusi oleh si blok method kita ini selanjutnya. Contohnya:

window.signal_connect("destroy") {
  puts "Windownya distop!"
  Gtk.main_quit
}

Jadi urutannya secara kasar adalah seperti ini:

  1. Program dijalankan, sebuah window terbuka. Main loop (Gtk.main) berjalan.. menunggu/sleep sampai ada signal yang diterima olehnya.
  2. User menutup window (ini adalah event destroy) yang mengirimkan signal destroy ke GTK widget.
  3. GTK memeriksa blok program dan menemukan ada kode yang menerima signal destroy yang bersesuaian (window.signal_connect(“destroy”)) lalu mengeksekusi bagian program tersebut.
  4. String “Windownya distop!” dicetak ke layar lalu main loop dimatikan (Gtk.main_quit) sehingga program/window tertutup.

Event-event dalam GTK yang bisa menjadi inputan bagi signal_connect antara lain:

  • event
  • button_press_event
  • button_release_event
  • scroll_event
  • motion_notify_event
  • delete_event
  • destroy_event
  • expose_event
  • key_press_event
  • key_release_event
  • enter_notify_event
  • leave_notify_event
  • configure_event
  • focus_in_event
  • focus_out_event
  • map_event
  • unmap_event
  • property_notify_event
  • selection_clear_event
  • selection_request_event
  • selection_notify_event
  • proximity_in_event
  • proximity_out_event
  • visibility_notify_event
  • client_event
  • no_expose_event
  • window_state_event

Referensi:


9 thoughts on “Ruby/GTK (Bagian 2: Signal)

  1. sony : bukan, ini bukan spin off, inih opisial! 😀
    iang : gut gut meneer fajran, kalo udah bisa ntar ajarin gue
    blek : ih nulisnya imut ala abg, adiknya farhan perdana yah? 😛

Leave a reply to Black_Claw Cancel reply