meld r1006 - trunk



Author: stevek
Date: Thu Jun 26 21:33:23 2008
New Revision: 1006
URL: http://svn.gnome.org/viewvc/meld?rev=1006&view=rev

Log:
Improve tab appearance. Bug 539331.
Ellipsize tab labels. Bug 489603. Both Kai Willadsen

Modified:
   trunk/meldapp.py

Modified: trunk/meldapp.py
==============================================================================
--- trunk/meldapp.py	(original)
+++ trunk/meldapp.py	Thu Jun 26 21:33:23 2008
@@ -22,6 +22,7 @@
 import gtk
 import gtk.glade
 import gobject
+import pango
 
 # project
 import paths
@@ -353,25 +354,54 @@
 #
 ################################################################################
 class NotebookLabel(gtk.HBox):
+    tab_width_in_chars = 30
+
+    def __init__(self, iconname, text, onclose):
+        gtk.HBox.__init__(self, False, 4)
+
+        label = gtk.Label(text)
+        # FIXME: ideally, we would use custom ellipsization that ellipsized the
+        # two paths separately, but that requires significant changes to label
+        # generation in many different parts of the code
+        label.set_ellipsize(pango.ELLIPSIZE_MIDDLE);
+        label.set_single_line_mode(True)
+        label.set_alignment(0.0, 0.5)
+        label.set_padding(0, 0)
+
+        context = self.get_pango_context()
+        metrics = context.get_metrics(self.style.font_desc, context.get_language())
+        char_width = metrics.get_approximate_digit_width()
+        (w, h) = gtk.icon_size_lookup_for_settings (self.get_settings(), gtk.ICON_SIZE_MENU)
+        self.set_size_request(self.tab_width_in_chars * pango.PIXELS(char_width) + 2 * w, -1)
+
+        button = gtk.Button()
+        button.set_relief(gtk.RELIEF_NONE)
+        button.set_focus_on_click(False)
+        image = gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU)
+        image.set_tooltip_text(_("Close tab"))
+        button.add(image)
+        button.set_name("meld-tab-close-button")
+        button.set_size_request(w + 2, h + 2)
+        button.connect("clicked", onclose)
 
-    def __init__(self, iconname, text="", onclose=None):
-        gtk.HBox.__init__(self)
-        self.label = gtk.Label(text)
-        self.button = gtk.Button()
-        self.button.set_relief(gtk.RELIEF_NONE)
-        image = gtk.Image()
-        image.set_from_stock( gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU)
-        image.set_size_request( 10,10 ) #TODO font height
-        self.button.add( image )
         icon = gtk.Image()
         icon.set_from_file( paths.share_dir("glade2/pixmaps/%s" % iconname) )
-        icon.set_from_pixbuf( icon.get_pixbuf().scale_simple(15, 15, 2) ) #TODO stock image
-        self.pack_start( icon )
-        self.pack_start( self.label )
-        self.pack_start( self.button, expand=0 )
+        icon.set_from_pixbuf(icon.get_pixbuf().scale_simple(16, 16, 2)) #TODO stock image
+
+        self.pack_start(icon, expand=False)
+        self.pack_start(label)
+        self.pack_start(button, expand=False)
+        self.set_tooltip_text(text)
         self.show_all()
-        if onclose:
-            self.button.connect("clicked", onclose)
+
+        self.__label = label
+
+    def get_label_text(self):
+        return self.__label.get_text()
+
+    def set_label_text(self, text):
+        self.__label.set_text(text)
+        self.set_tooltip_text(text)
 
 ################################################################################
 #
@@ -483,6 +513,14 @@
     # init
     #
     def __init__(self):
+        gtk.rc_parse_string ("style \"meld-tab-close-button-style\"\n"
+                     "{\n"
+                         "GtkWidget::focus-padding = 0\n"
+                         "GtkWidget::focus-line-width = 0\n"
+                         "xthickness = 0\n"
+                         "ythickness = 0\n"
+                     "}\n"
+                     "widget \"*.meld-tab-close-button\" style \"meld-tab-close-button-style\"")
         gladefile = paths.share_dir("glade2/meldapp.glade")
         gnomeglade.GnomeApp.__init__(self, "meld", version, gladefile, "meldapp")
         self._map_widgets_into_lists( "settings_drawstyle".split() )
@@ -544,14 +582,14 @@
         self.button_undo.set_sensitive(newseq.can_undo())
         self.button_redo.set_sensitive(newseq.can_redo())
         nbl = self.notebook.get_tab_label( newdoc.widget )
-        self.widget.set_title( nbl.label.get_text() + " - Meld")
+        self.widget.set_title(nbl.get_label_text() + " - Meld")
         self.statusbar.set_doc_status("")
         newdoc.on_switch_event()
         self.scheduler.add_task( newdoc.scheduler )
 
     def on_notebook_label_changed(self, component, text):
         nbl = self.notebook.get_tab_label( component.widget )
-        nbl.label.set_text(text)
+        nbl.set_label_text(text)
         self.widget.set_title(text + " - Meld")
         self.notebook.child_set_property(component.widget, "menu-label", text)
 
@@ -699,7 +737,7 @@
                 page.on_file_changed(filename)
 
     def _append_page(self, page, icon):
-        nbl = NotebookLabel(icon, onclose=lambda b: self.try_remove_page(page))
+        nbl = NotebookLabel(icon, "", lambda b: self.try_remove_page(page))
         self.notebook.append_page( page.widget, nbl)
         self.notebook.set_current_page( self.notebook.page_num(page.widget) )
         self.scheduler.add_scheduler(page.scheduler)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]