Added close buttons to notebook
[findit] / src / misc.py
index b807c1d..5127e6d 100755 (executable)
@@ -2,9 +2,76 @@
 # -*-coding: utf-8 -*-
 # vim: sw=4 ts=4 expandtab ai
 
+#=== Localization =============================================================
+
+import sys
+import gettext
+import os
+
+os.environ['LANGUAGE'] = 'ru'   ###
+
+try:
+    # Meaning ru/LC_MESSAGES/findit.mo is in current dir (sys.path[0])
+    # For /usr/share/locale write `gettext.bindtextdomain('findit')`:
+    gettext.bindtextdomain('findit', sys.path[0])
+    gettext.textdomain('findit')
+    _ = gettext.gettext
+except IOError:
+    # Comment out before use pygettext
+    def _(text):
+        return text
+
+#==============================================================================
+
 def size_hum_read(size):
-        """Return string with file size in b or Kb or Mb or Gb or Tb."""
-        for i, unit in enumerate(['%d b', '%.1f Kb', '%.2f Mb', '%.3f Gb', '%.4f Tb']):
-            if size < 1024**(i+1):
-                return unit % (size/1024.**i)
-        return '>1024 Tb'
+    """Return string with file size in b or Kb or Mb or Gb or Tb."""
+    for i, unit in enumerate(['%d b', '%.1f Kb', '%.2f Mb', '%.3f Gb', '%.4f Tb']):
+        if size < 1024**(i+1):
+            return unit % (size/1024.**i)
+    return '>1024 Tb'
+
+#==============================================================================
+
+class NotebookWCloseBtns(object):
+    """gtk.Notebook widget with close buttons."""
+
+    def __init__(self):
+        import gtk
+        global gtk
+
+        self.notebook = gtk.Notebook()
+
+    def new_tab(self, child, title, noclose=False):
+        self.notebook.append_page(child)
+
+        label = self.create_tab_label(child, title, noclose)
+        label.show_all()
+        self.notebook.set_tab_label(child, label)
+
+        pages = self.notebook.get_n_pages()
+        self.notebook.set_current_page(pages)
+
+    def create_tab_label(self, child, title, noclose):
+        label = gtk.Label(title)
+
+        image = gtk.Image()
+        image.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU)
+
+        close_btn = gtk.Button()
+        close_btn.connect('clicked', self.close_tab, child)
+        close_btn.set_relief(gtk.RELIEF_NONE)
+        if noclose:
+            close_btn.set_sensitive(False)
+
+        close_btn.set_image(image)
+
+        hbox = gtk.HBox()
+        hbox.pack_start(label, True, True)
+        hbox.pack_end(close_btn, False, False)
+        return hbox
+
+    def close_tab(self, widget, child):
+        pagenum = self.notebook.page_num(child)
+        if pagenum != -1:
+            self.notebook.remove_page(pagenum)
+        child.destroy()