Ticket #73: list.patch

File list.patch, 3.0 kB (added by rschroll, 2 years ago)

Proof of concept patch

  • a/lib/reinteract/custom_result.py

    old new  
    1111class CustomResult(object): 
    1212    def create_widget(self): 
    1313        raise NotImplementedError() 
     14         
     15class CustomResultList(CustomResult): 
     16     
     17    def __init__(self, results): 
     18        self.results = results 
     19     
     20    def create_widget(self): 
     21        self.widgets = [res.create_widget() for res in self.results] 
     22        ntbk = gtk.Notebook() 
     23        # Notebook tabs have problems unless in EventBox... 
     24        self.notebook = gtk.EventBox() 
     25        self.notebook.add(ntbk) 
     26        self.vertbox = gtk.VBox(spacing=5) 
     27        for widget in self.widgets: 
     28            #self.notebook.append_page(widget) 
     29            self.vertbox.pack_start(widget, False, False) # expand, fill 
     30         
     31        self.container = gtk.HBox() 
     32        expander = gtk.Expander() 
     33        expander.set_expanded(True) 
     34        expander.connect("notify::expanded", self.toggle) 
     35        self.container.pack_start(expander, False, False) 
     36         
     37        self.container.pack_end(self.vertbox, False, False) 
     38        self.container.show_all() 
     39        self.notebook.show_all() 
     40 
     41        return self.container 
     42     
     43    def toggle(self, expander, data=None): 
     44        if expander.get_expanded(): 
     45            self.container.remove(self.notebook) 
     46            self.container.pack_end(self.vertbox, False, False) 
     47            for widget in self.widgets: 
     48                self.notebook.child.remove(widget) 
     49                self.vertbox.pack_start(widget, False, False) 
     50        else: 
     51            self.container.remove(self.vertbox) 
     52            self.container.pack_end(self.notebook, False, False) 
     53            for n, widget in enumerate(self.widgets): 
     54                self.vertbox.remove(widget) 
     55                self.notebook.child.append_page(widget, gtk.Label(" %i "%n)) 
    1456 
    1557def show_menu(widget, event, save_callback=None): 
    1658    """Convenience function to create a right-click menu with a Save As option""" 
  • a/lib/reinteract/statement.py

    old new  
    1111import traceback 
    1212import sys 
    1313 
    14 from custom_result import CustomResult 
     14from custom_result import CustomResult, CustomResultList 
    1515import notebook 
    1616from notebook import HelpResult 
    1717from rewrite import Rewriter, UnsupportedSyntaxError 
     
    140140                return 
    141141            elif isinstance(args[0], CustomResult) or isinstance(args[0], HelpResult): 
    142142                self.results.append(args[0]) 
     143            elif isinstance(args[0], (list, tuple)) and \ 
     144                    all(isinstance(a, CustomResult) for a in args[0]): 
     145                self.results.append(CustomResultList(args[0])) 
    143146            else: 
    144147                self.results.append(repr(args[0])) 
    145148                self.result_scope['_'] = args[0]