home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / python2.6 / dist-packages / checkbox_gtk / gtk_interface.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  11.6 KB  |  286 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import re
  5. import gtk
  6. import gtk.glade as gtk
  7. import posixpath
  8. from gettext import gettext as _
  9. from checkbox.test import ALL_STATUS, TestResult
  10. from checkbox.user_interface import UserInterface
  11. from checkbox_gtk.hyper_text_view import HyperTextView
  12.  
  13. class GTKHack(object):
  14.     
  15.     def __init__(self, function):
  16.         self._function = function
  17.  
  18.     
  19.     def __get__(self, instance, cls = None):
  20.         self._instance = instance
  21.         return self
  22.  
  23.     
  24.     def __call__(self, *args, **kwargs):
  25.         self._instance._set_sensitive('button_previous', False)
  26.         self._instance._set_sensitive('button_next', False)
  27.         self._instance._set_sensitive('button_previous', True)
  28.         self._instance._set_sensitive('button_next', True)
  29.         return self._function(self._instance, *args, **kwargs)
  30.  
  31.  
  32.  
  33. class GTKInterface(UserInterface):
  34.     
  35.     def __init__(self, title, data_path):
  36.         super(GTKInterface, self).__init__(title, data_path)
  37.         gtk.window_set_default_icon_name('checkbox')
  38.         gtk.glade.textdomain(self.gettext_domain)
  39.         self.widgets = gtk.glade.XML(posixpath.join(data_path, 'checkbox-gtk.glade'))
  40.         self.widgets.signal_autoconnect(self)
  41.         eventbox_head = self._get_widget('eventbox_head')
  42.         eventbox_head.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('white'))
  43.         self._dialog = self._get_widget('dialog_main')
  44.         self._dialog.set_title(title)
  45.         self._wait = self._get_widget('window_wait')
  46.         self._wait.set_transient_for(self._dialog)
  47.         self._wait.realize()
  48.         self._wait.window.set_functions(gtk.gdk.FUNC_MOVE)
  49.         self._notebook = self._get_widget('notebook_main')
  50.         self._handler_id = None
  51.  
  52.     
  53.     def _get_widget(self, widget):
  54.         return self.widgets.get_widget(widget)
  55.  
  56.     
  57.     def _get_radio_button(self, map):
  58.         for radio_button, value in map.items():
  59.             if self._get_widget(radio_button).get_active():
  60.                 return value
  61.         
  62.         raise Exception, 'Failed to map radio_button.'
  63.  
  64.     
  65.     def _get_text(self, name):
  66.         widget = self._get_widget(name)
  67.         return widget.get_text()
  68.  
  69.     
  70.     def _get_text_view(self, name):
  71.         widget = self._get_widget(name)
  72.         buffer = widget.get_buffer()
  73.         text = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter())
  74.         return text
  75.  
  76.     
  77.     def _set_label(self, name, label = ''):
  78.         widget = self._get_widget(name)
  79.         widget.set_label(label)
  80.  
  81.     
  82.     def _set_text(self, name, text = ''):
  83.         widget = self._get_widget(name)
  84.         widget.set_text(text)
  85.  
  86.     
  87.     def _set_text_view(self, name, text = ''):
  88.         buffer = gtk.TextBuffer()
  89.         buffer.set_text(text)
  90.         widget = self._get_widget(name)
  91.         widget.set_buffer(buffer)
  92.  
  93.     
  94.     def _set_hyper_text_view(self, name, text = ''):
  95.         
  96.         def clicked(widget, text, anchor, button):
  97.             self.show_url(anchor)
  98.  
  99.         widget = self._get_widget(name)
  100.         widget.connect('anchor-clicked', clicked)
  101.         buffer = gtk.TextBuffer()
  102.         widget.set_buffer(buffer)
  103.         url_regex = 'https?://[^\\s]+'
  104.         tag_regex = '\\[\\[[^\\]]+\\]\\]'
  105.         in_hyper_text = False
  106.         for part in re.split('(%s|%s)' % (url_regex, tag_regex), text):
  107.             if in_hyper_text:
  108.                 in_hyper_text = False
  109.                 anchor = part
  110.                 if re.match('^%s$' % tag_regex, part):
  111.                     part = part.lstrip('[').rstrip(']')
  112.                     if '|' in part:
  113.                         (anchor, part) = part.split('|', 1)
  114.                     
  115.                 
  116.                 widget.insert_with_anchor(part, anchor)
  117.                 continue
  118.             in_hyper_text = True
  119.             widget.insert(part)
  120.         
  121.  
  122.     
  123.     def _set_active(self, name, value = True):
  124.         widget = self._get_widget(name)
  125.         widget.set_active(bool(value))
  126.  
  127.     
  128.     def _set_show(self, name, value = True):
  129.         widget = self._get_widget(name)
  130.         if value:
  131.             widget.show()
  132.         else:
  133.             widget.hide()
  134.  
  135.     
  136.     def _set_sensitive(self, name, value = True):
  137.         self._set_show(name, False)
  138.         self._set_show(name, True)
  139.         widget = self._get_widget(name)
  140.         widget.set_sensitive(bool(value))
  141.  
  142.     
  143.     def _run_dialog(self, dialog = None):
  144.         
  145.         def on_dialog_response(dialog, response, self):
  146.             self.direction = response
  147.             gtk.main_quit()
  148.  
  149.         if not dialog:
  150.             pass
  151.         dialog = self._dialog
  152.         dialog.connect('response', on_dialog_response, self)
  153.         dialog.show()
  154.         gtk.main()
  155.         if self.direction == gtk.RESPONSE_DELETE_EVENT:
  156.             raise KeyboardInterrupt
  157.         self.direction == gtk.RESPONSE_DELETE_EVENT
  158.  
  159.     
  160.     def do_function(self, function, *args, **kwargs):
  161.         self._set_sensitive('button_previous', False)
  162.         self._set_sensitive('button_next', False)
  163.         result = super(GTKInterface, self).do_function(function, *args, **kwargs)
  164.         self._set_sensitive('button_previous', True)
  165.         self._set_sensitive('button_next', True)
  166.         return result
  167.  
  168.     
  169.     def show_wait(self, message, function, *args, **kwargs):
  170.         self._set_text('label_wait', message)
  171.         self._wait.show()
  172.         result = self.do_function(function, *args, **kwargs)
  173.         self._wait.hide()
  174.         return result
  175.  
  176.     
  177.     def show_pulse(self):
  178.         self._get_widget('progressbar_wait').pulse()
  179.         while gtk.events_pending():
  180.             gtk.main_iteration()
  181.  
  182.     
  183.     def show_intro(self, title, text):
  184.         self._set_sensitive('button_previous', False)
  185.         self._notebook.set_current_page(0)
  186.         intro = '\n\n'.join([
  187.             title,
  188.             text])
  189.         self._set_hyper_text_view('hyper_text_view_intro_text', intro)
  190.         self._run_dialog()
  191.         self._set_sensitive('button_previous', True)
  192.  
  193.     show_intro = GTKHack(show_intro)
  194.     
  195.     def show_category(self, title, text, category = None):
  196.         self._notebook.set_current_page(1)
  197.         self._set_hyper_text_view('hyper_text_view_category', text)
  198.         if category:
  199.             self._set_active('radio_button_%s' % category)
  200.         
  201.         self._run_dialog()
  202.         return self._get_radio_button({
  203.             'radio_button_desktop': 'desktop',
  204.             'radio_button_laptop': 'laptop',
  205.             'radio_button_server': 'server' })
  206.  
  207.     show_category = GTKHack(show_category)
  208.     
  209.     def _run_test(self, test):
  210.         self._set_sensitive('button_test', False)
  211.         message = _('Running test %s...') % test.name
  212.         result = self.show_wait(message, test.command)
  213.         description = self.do_function(test.description, result)
  214.         self._set_hyper_text_view('hyper_text_view_test', description)
  215.         self._set_sensitive('button_test', True)
  216.         self._set_label('button_test', _('_Test Again'))
  217.  
  218.     
  219.     def show_test(self, test, result = None):
  220.         self._set_sensitive('button_test', False)
  221.         self._notebook.set_current_page(2)
  222.         description = self.do_function(test.description, result)
  223.         self._set_hyper_text_view('hyper_text_view_test', description)
  224.         if str(test.command):
  225.             self._set_sensitive('button_test', True)
  226.             button_test = self._get_widget('button_test')
  227.             if self._handler_id:
  228.                 button_test.disconnect(self._handler_id)
  229.             
  230.             self._handler_id = button_test.connect('clicked', (lambda w, t = (test,): self._run_test(t)))
  231.         
  232.         answers = [
  233.             'yes',
  234.             'no',
  235.             'skip']
  236.         if result:
  237.             self._set_text_view('text_view_comment', result.data)
  238.             answer = dict(zip(ALL_STATUS, answers))[result.status]
  239.             self._set_active('radio_button_%s' % answer)
  240.         else:
  241.             self._set_text_view('text_view_comment')
  242.             self._set_active('radio_button_skip')
  243.         self._run_dialog()
  244.         self._set_hyper_text_view('hyper_text_view_test')
  245.         self._set_label('button_test', _('_Test'))
  246.         radio_buttons = [ 'radio_button_%s' % a for a in answers ]
  247.         status = self._get_radio_button(dict(zip(radio_buttons, ALL_STATUS)))
  248.         data = self._get_text_view('text_view_comment')
  249.         return TestResult(test, status, data)
  250.  
  251.     show_test = GTKHack(show_test)
  252.     
  253.     def show_exchange(self, authentication, message = None):
  254.         self._notebook.set_current_page(3)
  255.         if authentication is not None:
  256.             self._set_text('entry_authentication', authentication)
  257.         
  258.         if message is not None:
  259.             self._set_hyper_text_view('hyper_text_view_exchange', message)
  260.         
  261.         self._run_dialog()
  262.         authentication = self._get_text('entry_authentication')
  263.         return authentication
  264.  
  265.     show_exchange = GTKHack(show_exchange)
  266.     
  267.     def show_final(self, message = None):
  268.         self._set_label('button_next', _('_Finish'))
  269.         self._notebook.set_current_page(4)
  270.         if message is not None:
  271.             self._set_hyper_text_view('hyper_text_view_final', message)
  272.         
  273.         self._run_dialog()
  274.         self._set_label('button_next', _('Ne_xt'))
  275.  
  276.     show_final = GTKHack(show_final)
  277.     
  278.     def show_error(self, title, text):
  279.         message_dialog = gtk.MessageDialog(parent = self._dialog, type = gtk.MESSAGE_ERROR, buttons = gtk.BUTTONS_CLOSE, message_format = text)
  280.         message_dialog.set_modal(True)
  281.         message_dialog.set_title(title)
  282.         self._run_dialog(message_dialog)
  283.         message_dialog.hide()
  284.  
  285.  
  286.