Advertisement
yiidev

Error delegate to signal

Nov 23rd, 2015
2,470
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Vala 7.61 KB | None | 0 0
  1. /**
  2.  * Buku Telepon
  3.  * Aplikasi untuk menyimpan buku telepon atau kontak
  4.  *
  5.  * @author    Agus Susilo
  6.  * @date      13 November 2015 22:00
  7.  * @version   0.1
  8.  * @copyright (C) 2015 Susilolab
  9.  */
  10. namespace PhoneBook
  11. {
  12.     public class PhoneBookForm: Gtk.Application
  13.     {
  14.         public delegate void ToolButtonEvent();
  15.  
  16.         private Gtk.Builder builder;
  17.         private Gtk.Window main_window;
  18.         private Gtk.ImageMenuItem mnPhoneBook;
  19.         private Gtk.ImageMenuItem mnQuit;
  20.         private Gtk.ImageMenuItem mnAddGroup;
  21.         private Gtk.ImageMenuItem mnAbout;
  22.         private Gtk.ImageMenuItem mnRefresh;
  23.         private Gtk.ScrolledWindow swPhoneBook;
  24.         private Gtk.ToolItem tItemAdd;
  25.         private Gtk.ToolItem tItemEdit;
  26.         private Gtk.ToolItem tItemDelete;
  27.         private Gtk.Toolbar toolbar;
  28.  
  29.         private Gtk.Box box;
  30.         private Gtk.Box boxGrid;
  31.         private Gtk.TreeView view;
  32.         private Gtk.ListStore list_store = new Gtk.ListStore(6, typeof(string), typeof(string), typeof(string),
  33.                 typeof(string), typeof(string), typeof(string));
  34.         private Sqlite.Database db;
  35.         private const string dbName = "share/data/phonebook.db";
  36.  
  37.         public PhoneBookForm() {
  38.             Object(application_id: "com.susilolabs.phonebook", flags: ApplicationFlags.FLAGS_NONE);
  39.         }
  40.  
  41.         protected override void activate() {
  42.             try {
  43.                 builder = new Gtk.Builder();
  44.                 builder.add_from_file("share/ui/phonebook.glade");
  45.                 builder.connect_signals(null);
  46.  
  47.                 this.main_window = builder.get_object("winPhoneBook") as Gtk.Window;
  48.                 this.main_window.application = this;
  49.                 //this.main_window.set_position(WindowPosition.CENTER);
  50.  
  51.                 swPhoneBook = builder.get_object("swPhoneBook") as Gtk.ScrolledWindow;
  52.                 box = builder.get_object("box1") as Gtk.Box;
  53.                 mnPhoneBook = builder.get_object("mnPhoneBook") as Gtk.ImageMenuItem;
  54.                 mnPhoneBook.activate.connect(mnPhoneBook_activate);
  55.  
  56.                 mnRefresh = builder.get_object("mnRefresh") as Gtk.ImageMenuItem;
  57.                 mnRefresh.activate.connect(refresh_table_contact);
  58.  
  59.                 mnQuit = builder.get_object("mnQuit") as Gtk.ImageMenuItem;
  60.                 mnQuit.activate.connect( () => {
  61.                     this.quit();
  62.                 });
  63.  
  64.                 mnAddGroup = builder.get_object("mnAddGroup") as Gtk.ImageMenuItem;
  65.                 mnAddGroup.activate.connect( () => {
  66.                     AddGroup group = new AddGroup.with_parent_window(this.main_window);
  67.                 });
  68.  
  69.                 mnAbout = builder.get_object("mnAbout") as Gtk.ImageMenuItem;
  70.                
  71.                 add_toolbar();
  72.                 components_init();
  73.                 db_init();
  74.                 builder.connect_signals(this);
  75.                 this.main_window.show_all();
  76.  
  77.             }catch(Error e) {
  78.                 Utils.MessageBox(this.main_window, e.message, "Error saat memuat layout file");
  79.                 stderr.printf("%s\n", e.message);
  80.             }
  81.         }
  82.  
  83.         private Gtk.ToolItem new_item_button(string label, Gtk.Image img, ToolButtonEvent? evt=null) {
  84.             var item = new Gtk.ToolItem();
  85.             var btn = new Gtk.Button.with_label(label);
  86.             btn.set_image(img);
  87.             if(evt != null) {
  88.                 ToolButtonEvent ev = evt;
  89.                 btn.clicked.connect(ev());
  90.             }
  91.             btn.set_margin_left(5);
  92.             btn.set_margin_top(5);
  93.             btn.set_margin_right(5);
  94.             btn.set_margin_bottom(5);
  95.  
  96.             item.add(btn);
  97.             return item;
  98.         }
  99.  
  100.         private void add_toolbar() {
  101.             toolbar = builder.get_object("toolbar1") as Gtk.Toolbar;
  102.  
  103.             var imgAdd = new Gtk.Image.from_file("share/icons/add.png");
  104.             ToolButtonEvent evtAdd = () => { stdout.printf("Tombol tambah diklik.\n"); };
  105.             tItemAdd = new_item_button("Tambah", imgAdd, evtAdd);
  106.             toolbar.add(tItemAdd);
  107.  
  108.             var imgEdit = new Gtk.Image.from_file("share/icons/pencil.png");
  109.             tItemEdit = new_item_button("Ubah", imgEdit);
  110.             toolbar.add(tItemEdit);
  111.  
  112.             var imgDelete = new Gtk.Image.from_file("share/icons/delete.png");
  113.             tItemDelete = new_item_button("Hapus", imgDelete);
  114.             toolbar.add(tItemDelete);
  115.         }
  116.  
  117.         private void mnPhoneBook_activate() {
  118.             AddContactForm app = new AddContactForm.with_parent_window(main_window);
  119.             app.set_parent_app(this);
  120.         }
  121.  
  122.         private List<Contact> get_contact() {
  123.             List<Contact> contacts = new List<Contact>();
  124.  
  125.             File dbFile = File.new_for_path(dbName);
  126.             int ec = 0;
  127.             if(dbFile.query_exists(null)) {
  128.                 ec = Sqlite.Database.open(dbFile.get_path(), out db);
  129.             }
  130.  
  131.             if(ec != Sqlite.OK) {
  132.                 stderr.printf("Tidak dapat membuka database: %s\n", db.errmsg());
  133.             }
  134.  
  135.             string sql = "SELECT pb.id AS id, c.name AS cat_name, pb.name, pb.company, pb.title, ";
  136.             sql += "pb.phone_number, pb.email FROM phone_book pb LEFT JOIN category c ";
  137.             sql += "ON pb.category_id=c.id;";
  138.             string errMsg;
  139.             string[] res;
  140.             int nrows;
  141.             int ncols;
  142.  
  143.             ec = db.get_table(sql, out res, out nrows, out ncols, out errMsg);
  144.             if(ec != Sqlite.OK) {
  145.                 stderr.printf("Error saat select: %s\n", errMsg);
  146.             }
  147.  
  148.             int max = nrows * ncols + ncols;
  149.             for(int i=0; i<max; i=i+ncols) {
  150.                 Contact  contact = new Contact();
  151.                 if(i == 0)
  152.                     continue;
  153.                 else {
  154.                     for(int j=0; j<ncols; j++) {
  155.                         if(j == 0) {
  156.                             contact.id = int.parse(res[i+j]);
  157.                         }else if(j == 1) {
  158.                             contact.category_name = res[i+j];
  159.                         }else if(j == 2) {
  160.                             contact.name = res[i+j];
  161.                         }else if(j == 3) {
  162.                             contact.company = res[i+j];
  163.                         }else if(j == 4) {
  164.                             contact.title = res[i+j];
  165.                         }else if(j == 5) {
  166.                             contact.phone_number = res[i+j];
  167.                         }else if(j == 6) {
  168.                             contact.email = res[i+j];
  169.                         }
  170.                     }
  171.                 }
  172.                
  173.                 if(i > 0) contacts.append(contact);
  174.             }
  175.             return contacts;           
  176.         }
  177.  
  178.         public void refresh_table_contact() {
  179.             list_store.clear();
  180.  
  181.             Gtk.TreeIter iter;
  182.             List<Contact> contact = get_contact();
  183.             foreach(Contact c in contact) {
  184.                 list_store.append(out iter);
  185.                 list_store.set(iter, 0, c.title, 1, c.name, 2, c.phone_number, 3, c.category_name,
  186.                     4, c.email, 5, c.company);
  187.             }
  188.             view.set_model(list_store);
  189.         }
  190.  
  191.         private void show_table_contact() {
  192.             string[] cols = { "Judul", "Nama", "No. HP", "Grup", "Email", "Perusahaan" };
  193.             boxGrid = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
  194.             Gtk.TreeIter iter;
  195.             List<Contact> contact = get_contact();
  196.             foreach(Contact c in contact) {
  197.                 list_store.append(out iter);
  198.                 list_store.set(iter, 0, c.title, 1, c.name, 2, c.phone_number, 3, c.category_name,
  199.                     4, c.email, 5, c.company);
  200.             }
  201.  
  202.             view = new Gtk.TreeView.with_model(list_store);
  203.             view.headers_clickable = true;
  204.             view.show_expanders = true;
  205.             boxGrid.pack_start(view, true, true, 0);
  206.             swPhoneBook.add(boxGrid);
  207.  
  208.             Gtk.CellRendererText cell = new Gtk.CellRendererText();
  209.             cell.editable = false;
  210.             int i = 0;
  211.             foreach(string col in cols) {
  212.                 view.insert_column_with_attributes(-1, col, cell, "text", i);
  213.                 i++;
  214.             }
  215.         }
  216.  
  217.         private void components_init() {
  218.             show_table_contact();
  219.         }
  220.  
  221.         private void db_init() {
  222.             File dbFile = File.new_for_path("share/data/phonebook.db");
  223.             int ec = 0;
  224.             if(!dbFile.query_exists(null)) {
  225.                 ec = Sqlite.Database.open(dbFile.get_path(), out db);
  226.             }
  227.  
  228.             if(ec != Sqlite.OK) {
  229.                 Utils.MessageBox(null, "Tidak dapat membuka database: " + db.errmsg(), "Error sqlite");
  230.             }
  231.  
  232.             string sql = """
  233.             CREATE TABLE IF NOT EXISTS phone_book(
  234.                 id INT PRIMARY KEY NOT NULL,
  235.                 category_id INT NOT NULL,
  236.                 name TEXT NOT NULL,
  237.                 company TEXT NOT NULL,
  238.                 title TEXT NOT NULL,
  239.                 phone_number TEXT NOT NULL,
  240.                 email TEXT NOT NULL
  241.             );
  242.  
  243.             CREATE TABLE IF NOT EXISTS category(
  244.                 id INT PRIMARY KEY NOT NULL,
  245.                 name TEXT NOT NULL
  246.             );
  247.             """;
  248.  
  249.             string err;
  250.             ec = db.exec(sql, null, out err);
  251.             if(ec != Sqlite.OK) {
  252.                 Utils.MessageBox(null, "Error: " + err, "Error saat membuat tabel");
  253.             }
  254.         }
  255.  
  256.         public static int main(string[] args) {
  257.             PhoneBookForm app = new PhoneBookForm();
  258.             return app.run(args);
  259.         }
  260.     }
  261. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement