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:
- Program dijalankan, sebuah window terbuka. Main loop (Gtk.main) berjalan.. menunggu/sleep sampai ada signal yang diterima olehnya.
- User menutup window (ini adalah event destroy) yang mengirimkan signal destroy ke GTK widget.
- GTK memeriksa blok program dan menemukan ada kode yang menerima signal destroy yang bersesuaian (window.signal_connect(“destroy”)) lalu mengeksekusi bagian program tersebut.
- 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:
lho lho?
ada blog sempalan? 😮
jadi pengen bikin versi python.. wakakkaa.. *baru belajar jg*
Kk.. Kk.. AjarIN aQ LinUX dOOng..
*kabur*
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? 😛
oh, salah masuk.
kirain tadi diki lingerie.
maap yah…
jeng diki istirahat makan siangnya ngoprek ruby gtk, kalo istirahat makan malam ngoprek siapa?…eh apa?… hihiihihi
EBUSET GADISANGKA TERNYATA ADA JEBAKAN BETMEN UNTUNG GW GOOGLING TERUS NEMU SIAPA ITU F****N GA KENAAAALLL!!!
Interpreting Dutch cannabis policy: Reasoning by analogy in the legalization debate. ,
mas ,yang di maksud intpreting signal apa y????