Please note:The SCons wiki is now restored from the attack in March 2013. All old passwords have been invalidated. Please reset your password if you have an account. If you note missing pages, please report them to webmaster@scons.org. Also, new account creation is currently disabled due to an ongoing spam flood (2013/08/27).

This is a quick program that parses the output of a scons --debug=tree run and displays it in a more friendly format, as a tree widget. It uses wxPython, so you'll need to have that installed. It's my first wxPython program, so feel free to point out anything I've done wrong.

   1 from wxPython.wx import *
   2 import os
   3 import sys
   4 
   5 ID_OPEN=102
   6 
   7 class SconsTreeView(wxApp):
   8   def OnInit(self):
   9     frame = wxFrame(NULL, -1, 'Scons tree view')
  10     self.frame=frame
  11     frame.Show(true)
  12     self.SetTopWindow(frame)
  13 
  14     filemenu = wxMenu()
  15     filemenu.Append(ID_OPEN, '&Open')
  16     menuBar = wxMenuBar()
  17     menuBar.Append(filemenu, '&File')
  18     frame.SetMenuBar(menuBar)
  19     EVT_MENU(self, ID_OPEN, self.OnOpen)
  20 
  21     self.tree = wxTreeCtrl(frame)
  22     sizer = wxBoxSizer(wxHORIZONTAL)
  23     sizer.Add(self.tree, 1, wxEXPAND)
  24     frame.SetSizer(sizer)
  25     frame.SetAutoLayout(1)
  26     sizer.Fit(frame)
  27     if (len(sys.argv) > 1):
  28       f = open(sys.argv[1], 'r')
  29       print f
  30       self.Parse(f)
  31     return true
  32 
  33   def OnOpen(self, evt):
  34     dlg = wxFileDialog(self.frame, "Choose a file", "", "", "*.*", wxOPEN)
  35     if dlg.ShowModal() == wxID_OK:
  36       filename = dlg.GetFilename()
  37       dirname = dlg.GetDirectory()
  38       f = open(os.path.join(dirname, filename), 'r')
  39       self.Parse(f)
  40       f.close()
  41     dlg.Destroy()
  42 
  43   def Parse(self, f):
  44     t = self.tree
  45     t.DeleteAllItems()
  46     for line in f:
  47       if line.startswith('+') and line.find('-') != -1:
  48         lastdepth = line.index('-')/2
  49         nodes = [ t.AddRoot('.') ]
  50         break
  51 
  52     lastnode = nodes[-1]
  53     for line in f:
  54       if line.find('-') == -1:
  55         break
  56       depth=line.index('-')/2
  57       content = line[line.index('-')+1:]
  58       if depth > lastdepth:
  59         nodes.append(lastnode)
  60         lastnode = t.AppendItem(nodes[-1], content)
  61       elif depth < lastdepth:
  62         for i in range(depth, lastdepth):
  63           nodes.pop()
  64         lastnode = t.AppendItem(nodes[-1], content)
  65       else:
  66         lastnode = t.AppendItem(nodes[-1], content)
  67       lastdepth = depth
  68 
  69 app=SconsTreeView(0)
  70 app.MainLoop()


I like this script, but in newer version of wxpython the names of some classes/modules have changed. I have attached a patched version of this script SconsTreeView-wx2.8.8.0.py . (John Femiani)


CategoryHomepage

SconsTreeView (last edited 2008-07-05 22:50:46 by JohnFemiani)