Merge commit 'upstream/0.2.85' into experimental
[debian/pino.git] / src / wrap_label.vala
1 using Gtk;
2
3 /** Label with NORMAL wrapping. Thanks to VMWare team */
4 public class WrapLabel : Label {
5         
6         public int m_wrap_width = 0;
7         public int m_wrap_height = 0;
8         
9         public signal void link_activated(string prot, string uri);
10         
11         public WrapLabel(string? str = null) {
12                 get_layout().set_wrap(Pango.WrapMode.WORD_CHAR);
13                 set_alignment(0, 0);
14                 
15                 set_text(str);
16                 set_wrap_width(m_wrap_width);
17                 
18                 activate_link.connect(link_clicked);
19         }
20         
21         private bool link_clicked(string url) {
22                 link_activated(url.split("://")[0], url.split("://")[1]);
23                 return true;
24         }
25         
26         private void set_wrap_width(int width) {
27                 if (width == 0) {
28                         return;
29                 }
30                 
31                 get_layout().set_width((int) (width * Pango.SCALE));
32                 
33                 int unused = 0;
34                 get_layout().get_pixel_size(out unused, out m_wrap_height);
35                 
36                 if (m_wrap_width != width) {
37                         m_wrap_width = width;
38                         queue_resize();
39                 }
40         }
41         
42         public override void size_request(out Gtk.Requisition req) {            
43                 req.width  = 0;
44                 req.height = m_wrap_height;
45         }
46         
47         public override void size_allocate(Gdk.Rectangle alloc) {
48                 base.size_allocate(alloc);
49                 set_wrap_width(alloc.width);
50         }
51         
52         public void set_markup_plus(string txt) {
53                 set_markup(txt);
54                 set_wrap_width(m_wrap_width);
55         }
56 }