Added close buttons to notebook
[findit] / src / misc.py
1 #!/usr/bin/python
2 # -*-coding: utf-8 -*-
3 # vim: sw=4 ts=4 expandtab ai
4
5 #=== Localization =============================================================
6
7 import sys
8 import gettext
9 import os
10
11 os.environ['LANGUAGE'] = 'ru'   ###
12
13 try:
14     # Meaning ru/LC_MESSAGES/findit.mo is in current dir (sys.path[0])
15     # For /usr/share/locale write `gettext.bindtextdomain('findit')`:
16     gettext.bindtextdomain('findit', sys.path[0])
17     gettext.textdomain('findit')
18     _ = gettext.gettext
19 except IOError:
20     # Comment out before use pygettext
21     def _(text):
22         return text
23
24 #==============================================================================
25
26 def size_hum_read(size):
27     """Return string with file size in b or Kb or Mb or Gb or Tb."""
28     for i, unit in enumerate(['%d b', '%.1f Kb', '%.2f Mb', '%.3f Gb', '%.4f Tb']):
29         if size < 1024**(i+1):
30             return unit % (size/1024.**i)
31     return '>1024 Tb'
32
33 #==============================================================================
34
35 class NotebookWCloseBtns(object):
36     """gtk.Notebook widget with close buttons."""
37
38     def __init__(self):
39         import gtk
40         global gtk
41
42         self.notebook = gtk.Notebook()
43
44     def new_tab(self, child, title, noclose=False):
45         self.notebook.append_page(child)
46
47         label = self.create_tab_label(child, title, noclose)
48         label.show_all()
49         self.notebook.set_tab_label(child, label)
50
51         pages = self.notebook.get_n_pages()
52         self.notebook.set_current_page(pages)
53
54     def create_tab_label(self, child, title, noclose):
55         label = gtk.Label(title)
56
57         image = gtk.Image()
58         image.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU)
59
60         close_btn = gtk.Button()
61         close_btn.connect('clicked', self.close_tab, child)
62         close_btn.set_relief(gtk.RELIEF_NONE)
63         if noclose:
64             close_btn.set_sensitive(False)
65
66         close_btn.set_image(image)
67
68         hbox = gtk.HBox()
69         hbox.pack_start(label, True, True)
70         hbox.pack_end(close_btn, False, False)
71         return hbox
72
73     def close_tab(self, widget, child):
74         pagenum = self.notebook.page_num(child)
75         if pagenum != -1:
76             self.notebook.remove_page(pagenum)
77         child.destroy()