From 3d78428aaeb545bf773c55bc4c96bf0c8a7729af Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Thu, 8 Oct 2009 21:27:00 +0100 Subject: [PATCH] now make the encoding submenu work --- terminatorlib/terminal.py | 8 ++++ terminatorlib/terminal_popup_menu.py | 72 +++++++++++++++++++++++++++- 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/terminatorlib/terminal.py b/terminatorlib/terminal.py index 8f4ca48b..073482ec 100755 --- a/terminatorlib/terminal.py +++ b/terminatorlib/terminal.py @@ -448,6 +448,14 @@ class Terminal(gtk.VBox): else: widget.show() + def on_encoding_change(self, widget, encoding): + """Handle the encoding changing""" + current = self.vte.get_encoding() + if current != encoding: + dbg('on_encoding_change: setting encoding to: %s' % encoding) + self.custom_encoding = not (encoding == self.config['encoding']) + self.vte.set_encoding(encoding) + def on_drag_begin(self, widget, drag_context, data): pass diff --git a/terminatorlib/terminal_popup_menu.py b/terminatorlib/terminal_popup_menu.py index 0a83f701..4e92f3c2 100755 --- a/terminatorlib/terminal_popup_menu.py +++ b/terminatorlib/terminal_popup_menu.py @@ -8,6 +8,7 @@ import gtk from version import APP_NAME from translation import _ +from encoding import TerminatorEncoding class TerminalPopupMenu(object): """Class implementing the Terminal context menu""" @@ -121,10 +122,79 @@ class TerminalPopupMenu(object): item.set_sensitive(False) menu.append(item) - # FIXME: Add menu items for profile editing, encodings + item = gtk.MenuItem(_('Ed_it profile')) + item.connect('activate', lambda x: + terminal.terminator.edit_profile(terminal)) + menu.append(item) + + self.add_encoding_items(menu) menu.show_all() menu.popup(None, None, None, button, time) return(True) + + def add_encoding_items(self, menu): + """Add the encoding list to the menu""" + terminal = self.terminal + active_encodings = terminal.config['active_encodings'] + item = gtk.MenuItem (_("Encodings")) + menu.append (item) + submenu = gtk.Menu () + item.set_submenu (submenu) + encodings = TerminatorEncoding ().get_list () + encodings.sort (lambda x, y: cmp (x[2].lower (), y[2].lower ())) + + current_encoding = terminal.vte.get_encoding () + group = None + + if current_encoding not in active_encodings: + active_encodings.insert (0, _(current_encoding)) + + for encoding in active_encodings: + if encoding == terminal.default_encoding: + extratext = " (%s)" % _("Default") + elif encoding == current_encoding and terminal.custom_encoding == True: + extratext = " (%s)" % _("User defined") + else: + extratext = "" + + radioitem = gtk.RadioMenuItem (group, _(encoding) + extratext) + + if encoding == current_encoding: + radioitem.set_active (True) + + if group is None: + group = radioitem + + radioitem.connect ('activate', terminal.on_encoding_change, encoding) + submenu.append (radioitem) + + item = gtk.MenuItem (_("Other Encodings")) + submenu.append (item) + #second level + + submenu = gtk.Menu () + item.set_submenu (submenu) + group = None + + for encoding in encodings: + if encoding[1] in active_encodings: + continue + + if encoding[1] is None: + label = "%s %s"%(encoding[2], terminal.vte.get_encoding ()) + else: + label = "%s %s"%(encoding[2], encoding[1]) + + radioitem = gtk.RadioMenuItem (group, label) + if group is None: + group = radioitem + + if encoding[1] == current_encoding: + radioitem.set_active (True) + + radioitem.connect ('activate', terminal.on_encoding_change, encoding[1]) + submenu.append (radioitem) +