# HG changeset patch # User Yuya Nishihara <y...@tcha.org> # Date 1268225105 -32400 # Node ID b2245f94a8fd9e964cf8ddf29322dd24cf1d666f # Parent e5334a932a3acf24a801e2229d005aab4a12027a thgconfig: ability to enable/disable extensions
This adds 'Extensions' page to thgconfig window. For simplicity, there are some limitations by design: * only supports official extensions * unsupported to disable extensions explicitly, `extname = !` diff --git a/tortoisehg/hgtk/thgconfig.py b/tortoisehg/hgtk/thgconfig.py --- a/tortoisehg/hgtk/thgconfig.py +++ b/tortoisehg/hgtk/thgconfig.py @@ -11,7 +11,7 @@ import sys import re import urlparse -from mercurial import hg, ui, util, url, filemerge, error +from mercurial import hg, ui, util, url, filemerge, error, extensions from tortoisehg.util.i18n import _ from tortoisehg.util import hglib, settings, paths @@ -280,7 +280,10 @@ INFO = ( (_('Command Output'), 'gtools.fontlog', [], _('Font used in command output window.' ' Default: monospace 10')), - )),) + )), + +({'name': 'extensions', 'label': _('Extensions'), 'icon': gtk.STOCK_EXECUTE, + 'extra': True}, ()),) _font_presets = { 'win-ja': (_('Japanese on Windows'), { @@ -1129,6 +1132,71 @@ class ConfigDialog(gtk.Dialog): self.customradio.set_active(True) self.presetcombo.set_active(0) + def fill_extensions_frame(self, parent, table): + def allexts(): + enabledexts, maxnamelen = extensions.enabled() + disabledexts, maxnamelen = extensions.disabled() + exts = disabledexts.copy() + exts.update(enabledexts) + return iter((name, exts[name]) + for name in sorted(exts.iterkeys())) + + vbox = gtk.VBox() + parent.pack_start(table, False, False) + + self.extensionschecks = {} + for name, shortdesc in allexts(): + ck = gtk.CheckButton(name) + ck.connect('toggled', self.dirty_event) + ck.connect('focus-in-event', self.set_help, shortdesc) + table.add_row(ck, padding=False) + self.tooltips.set_tip(ck, shortdesc) + self.extensionschecks[name] = ck + + def refresh_extensions_frame(self): + enabledexts, namemaxlen = extensions.enabled() + def getinival(name): + for cand in (name, 'hgext.%s' % name, 'hgext/%s' % name): + try: + return self.ini['extensions'][cand] + except KeyError: + pass + + def changable(name): + curval = getinival(name) + if curval not in ('', None): + # enabled or unspecified, official extensions only + return False + elif name in enabledexts and curval is None: + # re-disabling ext is not supported + return False + else: + return True + + for name, ck in self.extensionschecks.iteritems(): + ck.set_active(name in enabledexts) + ck.set_sensitive(changable(name)) + + def apply_extensions_changes(self): + enabledexts, namemaxlen = extensions.enabled() + for name, ck in self.extensionschecks.iteritems(): + if ck.get_active() == (name in enabledexts): + continue # unchanged + + if 'extensions' not in self.ini: + new_namespace = getattr(self.ini, '_new_namespace', + self.ini.new_namespace) + new_namespace('extensions') + + if ck.get_active(): + self.ini['extensions'][name] = '' + else: + for cand in (name, 'hgext.%s' % name, 'hgext/%s' % name): + try: + del self.ini['extensions'][cand] + except KeyError: + pass + def set_help(self, widget, event, tooltip): text = ' '.join(tooltip.splitlines()) self.descbuffer.set_text(text) @@ -1366,6 +1434,9 @@ class ConfigDialog(gtk.Dialog): for name in list(self.ini.paths): del self.ini['paths'][name] + if 'extensions' in self.pages: + self.apply_extensions_changes() + # Flush changes on all pages for page_num, info, vbox, widgets in self.pages.values(): for n, (label, cpath, values, tip) in enumerate(info): ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Tortoisehg-develop mailing list Tortoisehg-develop@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tortoisehg-develop