from os.path import join, abspath, normcase, isdir, getsize
from heapq import nlargest
-from misc import size_hum_read, _
+from misc import size_hum_read, _, NotebookWCloseBtns
from config import config
OUTTYPES = [
import gtk
global gtk # for show_current_status()
- self.nb = gtk.Notebook()
- self.nb.set_scrollable(True)
- self.nb.set_border_width(2)
+ self.nb = NotebookWCloseBtns()
+ self.nb.notebook.set_scrollable(True)
+ self.nb.notebook.set_border_width(2)
#====================
# Notebook
cr_vbox.pack_start(hbox2, False, False, 0)
cr_vbox.pack_start(hbox3, False, False, 0)
cr_vbox.pack_end(hbox4, False, False, 0)
- self.nb.append_page(cr_vbox, gtk.Label(_('Criteria')))
+
+ self.nb.new_tab(cr_vbox, _('Criteria'), noclose=True)
#====================
# Others
self.context_id = self.statusbar.get_context_id('Current walked file')
self.vbox = gtk.VBox()
- self.vbox.pack_start(self.nb, True, True, 0)
+ self.vbox.pack_start(self.nb.notebook, True, True, 0)
self.vbox.pack_end(self.statusbar, False, False, 0)
# self.show_out_toplevel(config['outtype'], [(1, 'path', 'bytesize')])
self.statusbar.push(self.context_id, current_path)
gtk.main_iteration()
- def _new_page(self, child, label):
+ def _new_page(self, child, title):
"""Create new notebook page with search output."""
- self.nb.append_page(child, gtk.Label(label))
- #self.nb.set_current_page(-1)
- #child.grab_focus()
-
- def _close_page(self):
- pass
+ pages = self.nb.notebook.get_n_pages()
+ self.nb.new_tab(child, title)
+ child.show_all()
+ self.nb.notebook.set_current_page(pages)
def run(self):
pass
self.out_toplevel = out_submodule.Gtk_Presentation(results).toplevel
self._new_page(self.out_toplevel, outtype['label'])
- self.out_toplevel.show_all()
### out_submodule.Gtk_Presentation().show_results(results)
#==============================================================================
# -*-coding: utf-8 -*-
# vim: sw=4 ts=4 expandtab ai
-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'
-
-#==============================================================================
+#=== Localization =============================================================
import sys
import gettext
# 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'
+
+#==============================================================================
+
+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()