summaryrefslogtreecommitdiffstats
path: root/src/gui/Ephraim.vala
blob: 51302477b3e5916a272697c6b2b14114e5aea01c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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<string, Contact.Resource>? 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;
  }
}