public class Ephraim { public static int main(string[] args) { Gtk.init(ref args); Gtk.Builder builder = new Gtk.Builder(); try { builder.add_from_file("ephraim.glade"); } catch(Error e) { return 1; } Roster roster = new Roster(); CoreConnector coreconn = new CoreConnector(roster); if(!coreconn.start()) return 1; unowned Gtk.Window window = builder.get_object("MainWindow") as Gtk.Window; window.hide.connect(Gtk.main_quit); unowned Gtk.MenuItem quitItem = builder.get_object("MenuItemQuit") as Gtk.MenuItem; quitItem.activate.connect(() => window.visible = false); unowned Gtk.TreeView rosterView = builder.get_object("Roster") as Gtk.TreeView; rosterView.set_model(roster); rosterView.query_tooltip.connect((x, y, keyboard_tip, tooltip) => { Gtk.TreeModel model; Gtk.TreeIter iter; if(!rosterView.get_tooltip_context(out x, out y, keyboard_tip, out model, null, out iter)) return false; Value value; model.get_value(iter, 0, out value); Contact? c = value.get_object() as Contact; if(c == null) return false; Gee.Map.Entry? r = c.get_resource_with_highest_priority(); if(r == null) return false; tooltip.set_text("Resource: " + r.key + " (" + r.value.priority.to_string() + ")"); return true; }); rosterView.has_tooltip = true; Gtk.TreeViewColumn presenceColumn = new Gtk.TreeViewColumn.with_attributes(null, new CellRendererPresence(), "contact", 0, null); presenceColumn.min_width = 32; rosterView.append_column(presenceColumn); Gtk.TreeViewColumn contactColumn = new Gtk.TreeViewColumn(); Gtk.CellRenderer cellRendererContact = new CellRendererContact(); contactColumn.pack_start(cellRendererContact, true); contactColumn.set_attributes(cellRendererContact, "contact", 0, null); Gtk.CellRenderer cellRendererAvatar = new CellRendererAvatar(); contactColumn.pack_end(cellRendererAvatar, false); contactColumn.set_attributes(cellRendererAvatar, "contact", 0, null); rosterView.append_column(contactColumn); window.visible = true; Gtk.main(); coreconn.stop(); return 0; } }