Pages

Wednesday, October 17, 2007

GTK# for .NET

GTK+ (The GIMP Toolkit) merupakan multi-platform toolkit untuk membuat GUI(Graphical User Interfaces).

GTK bertugas "menggambar" pada layar komputer.
Bila anda pernah menggunakan GIMP(free grahpic editor) maka anda sudah melihat 'indahnya' hasil toolkit ini(terutama menggunakan gtk themes).
Banyak framework yang menggunakan Toolkit ini sebagai GUI-nya. Salah satunya adalah .Net framework.

Pada dasarnya GTK hanya library, dan kita menggunakannya melalui API.
Kalau anda programmer di win32 maka anda akan menggunakan WindowAPI untuk membuat sebuah kotak di layar hanya dengan mengakses API(gdi).
window API untuk GUI ini sudah ada di namespace System.Windows.Forms ; dan untuk mengakses API GTK ini dalam .Net Framework di buatlah GTK#(baca: GTK Sharp).
Jadi dengan GTK# ini pengguna .Net Framework akan merasakan manfaat dari GTK+ sebagai GUI aplikasi.

Tujuan

Dalam artikel ini sengaja menggunakan bahasa basic(VB.Net) karena lebih banyak developer di bahasa ini bekerja untuk desktop aplikasi.
Dengan harapan mereka dapat lebih mudah bertransisi multi-platform.
Dan dapat menikmati keuntungan dari .Net Framework untuk cross-platform aplikasi, sehingga akan lebih banyak software dekstop yang dikembangkan(terutama untuk user non teknik) bagi kemajuan bersama.
Ada harapan teman-teman yang biasa berkecimpung di satu platform bisa berkontribusi untuk platform lain-nya.
Walaupun artikel ini hanya pengenalan hubungan GTK+ dan .Net Framework melalui GTK#, anggap langkah kecil buat pejalanan panjang di dunia bit dan byte. :-)

Yang di butuhkan

Microsoft .Net Framework v.1.1 - dalam Framework ini sudah terdapat compiler(C#-csc.exe,VB.Net-vbc.exe,J#-vjc.exe), BCL(Base Class Library), dan tentu saja .Net Runtime (JIT,Memory Management, dll).

GTK#/GTK-Sharp Library dengan GTK2
Project ini hanya membantu kita dalam meng-install GTK2 ke system dan GTK# library ke GAC.
saat ini kita cukup menggunakan runtime versi(gtksharp-runtime-x.x.x-win32-x.x.exe).
Tapi bila anda mempunyai visual studio 2003, ada glade tool yang bisa di plug-in.
Gunakan Developer versi(gtksharp-x.x.x-win32-x.x.exe).

Text Editor
Saat ini tool terbaik untuk membuat .Net Aplikasi adalah Visual Studio. tapi dengan notepad-pun bukan masalah. Tentu di artikel ini kita menggunakan simpel editor (notepad atau edit).

Konsep dan code

GTK di-kembangkan pada lingkungan X-window yang notabene bekerja dengan X-protocol. Tentu caranya agak berbeda dengan win32 GDI arsitektur.
Bila anda dari Visual Basic maka anda terbiasa dengan RAD akan mengenal Form. Form yang kita kenal berbentuk Window. Dan TextBox, Button, Label dll kita sebut sebagai control.
GTK hanya mengenal Widget; kalau kita samakan widget itu seperti control tapi "form"-nya pun disebut widget.
Dan karena ini GTK# berdiri di atas .Net maka widget ini akan berbentuk object. object ini merepesentasikan class yang ada di GTK#.
Bagi yang anda yang dari Visual Basic .Net maka widget ini kita kenalnya sebagai class. WindowsForms-pun bentuk class, textbos berbentuk class; yang perlu anda lakukan hanya meng-instant class tersebut menjadi object. hal ini yang kadang mengbingungkan bagi developer visual basic ke visual basic .Net; tapi sekarang anda sudah mengetahui-nya bukan? :-)

Ok, mungkin anda sudah bosan dengan basa-basi diatas. nah, sekarang kita buat sebuah file, kita sebut "GTKPertamaku.vb"
isi dengan code dibawah:

Imports System
Imports Gtk

Namespace BenPinter

Module MainApp

Sub Main()

Application.Init()

Dim window As New Gtk.Window("My First GTK Window")
window.Show()

Application.Run()

End Sub

End Module

End Namespace

Buka Command prompt lalu kita compile dengan:

  vbc C:GTKPertamaku.vb /libpath:"C:WINNTMicrosoft.
NETFrameworkv1.1.4322";"C:Program
FilesCommon FilesGTK2.2libgtk-sharp"; /r:System.dll
/r:gtk-sharp.dll /r:glib-sharp.dll /r:atk-sharp.dll

bila berhasil maka anda akan mendapatkan GTKPertamaku.exe; coba anda jalankan software itu, maka akan muncul sebuah window kosong.
wah anda sudah membuat sebuah window dengan GTK+ :-). (ini lebih menyenangkan dari pada menulis 7 halaman(A4) dengan c untuk window 3.1.1 hanya untuk membuat sebuah window seperti ini)

mari kita bedah code-nya:

 Imports System
Imports Gtk

kita membutuhkan ini agar ter-refence pada external libary

 Application.Init()

Fungsi ini perlu dijalankan agar GTK# Ter-inisiasi.

 Dim window As New Gtk.Window("My First GTK Window")
window.Show()
Application.Run()

Di sini kita membuat sebuah object dengan meng-instant class Gtk.Window ke variable window.
Dan kita memerintahkan agar Gtk mulai meng-create widget/form kita.

code diatas tercompile dan berjalan tapi dia tidak bisa berjalan semestinya. karena untuk keluar anda membutuhkan Application.Quit()
Sekarang anda CTRL+C, maka window itu akan menghilang. untuk menyempurnakan tambahkan code pada module seperti dibawah:

    Module MainApp

Sub Main()

Application.Init()

Dim window As New Gtk.Window("My First GTK Window")
AddHandler window.DeleteEvent, AddressOf OnDeleteEvent

window.Show()
Application.Run()

End Sub

Sub OnDeleteEvent(ByVal sender As System.Object, ByVal args As
DeleteEventArgs)

Console.WriteLine("I am out of business")
Application.Quit()
args.RetVal = True

End Sub

End Module

Setelah meng-edit-nya; compile dengan cara di atas; lalu jalan kembali; sekarang kita dapat meng-close window kita seperti normal.

Sekarang kita coba membuat-nya lebih menarik. tambahkan code pada module seperti dibawah:

    Module MainApp

Sub Main()

Application.Init()

Dim window As New Gtk.Window("My First GTK Window")
AddHandler window.DeleteEvent, AddressOf OnDeleteEvent

Dim btnGtkButton As New Button("Hello")
AddHandler btnGtkButton.Clicked, AddressOf OnClicked

window.Add(btnGtkButton)
window.ShowAll()

Application.Run()

End Sub

Sub OnDeleteEvent(ByVal sender As System.Object, ByVal args As
DeleteEventArgs)

Console.WriteLine("I am out of business")
Application.Quit()
args.RetVal = True

End Sub

Sub OnClicked(ByVal sender As System.Object, ByVal e As EventArgs)

Console.WriteLine("Hello World []", New Random().Next(10000).ToString())

End Sub

End Module

Di sini kita menambahkan sebuah tombol/button, yang memiliki event clicked.
Anda save; compile dan jalankan. :-) mudah bukan.

No comments :