import pygtk
pygtk.require("2.0")

import gobject, gtk

import fragment, template
import cell

class TemplateView(gtk.VBox):

    def __init__(self, template=None):
        gtk.VBox.__init__(self)
        if template:
            self.set_template(template)


    def set_template(self, template):
        self.__template = template
        self.__assemble()


    def __assemble(self):
        for c in self.get_children():
            self.remove(c)

        if not self.__template:
            return

        line = gtk.HBox(0, 0)
        for i in xrange(self.__template.length()):
            f = self.__template.get_fragment(i)

            if isinstance(f, fragment.Break):
                self.pack_start(line, expand=0, fill=0)
                line.show_all()
                line = gtk.HBox(0, 0)
            elif isinstance(f, fragment.Token):
                t = f.get_token()
                c = cell.Cell()

                if t.is_start() or t.is_stop():

                    c.set_color(background="lightblue", foreground="black")
                    if t.is_start():
                        c.set_text(">>>")
                    else: # t.is_stop()
                        c.set_text("<<<")

                else:
                
                    c.set_color(background="white", foreground="black")
                    c.set_text(t.to_string())

                line.pack_start(c, expand=0, fill=0)
                
            elif isinstance(f, fragment.Language):
                c = cell.Cell()
                c.set_color(background="lightgreen", foreground="black")
                info = f.get_meter() or ""
                c.set_text("(language: %s)" % info)
                line.pack_start(c, expand=0, fill=0)

        if line.get_children():
            self.pack_start(line, expand=0, fill=0)
            line.show_all()

            
            
