def __init__(self, dataset, parent=None):

        self.dataset = dataset

        gtk.Dialog.__init__(self, "Edit Structure", parent,
                            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
                            (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
                             gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
        self.set_size_request(480,300)

        #
        # button box
        #

        buttons = [(gtk.STOCK_EDIT, self.on_row_activated),
                   (gtk.STOCK_NEW, self.on_btn_add_clicked),
                   (gtk.STOCK_REMOVE, self.on_btn_remove_clicked),
                   (gtk.STOCK_GO_UP, self.on_btn_move_clicked, -1),
                   (gtk.STOCK_GO_DOWN, self.on_btn_move_clicked, +1)
                   ]

        btnbox = uihelper.construct_vbuttonbox(buttons)
        btnbox.set_spacing(uihelper.SECTION_SPACING)
        btnbox.set_border_width(uihelper.SECTION_SPACING)
                
                
        # cview = column view
        cview = ColumnView(dataset)
        cview.connect( "row-activated", self.on_row_activated )        
        self.cview = cview

        # put cview and btnbox next to each other into a hbox
        hbox = gtk.HBox()
        hbox.set_spacing(5)
        hbox.pack_start(cview, True, True)
        hbox.pack_start(btnbox, False, True)

        self.vbox.add(hbox)
        self.show_all()
    def __init__(self, layer):
        AbstractTab.__init__(self)
        self.layer = layer

        #
        # Construct TreeView and ButtonBox
        #

        keys = ['visible', 'label', 'style', 'width', 'color', 'marker', 'marker_color', 'marker_size', 'source', 'cx', 'cy', 'row_first', 'row_last']
        self.factory = widget_factory.CTreeViewFactory(layer, 'lines')
        self.factory.add_columns(keys, source=self.create_source_column)
        self.treeview = self.factory.create_treeview()
        sw = uihelper.add_scrollbars(self.treeview)

        #
        # keybox = label + key_combo 
        #
        model = gtk.ListStore(str, object)
        key_combo = gtk.ComboBox(model)
        cell = gtk.CellRendererText()
        key_combo.pack_start(cell, True)
        key_combo.add_attribute(cell, 'text', 0)
        key_combo.connect('changed', lambda cb: self.limit_columns())
        self.key_combo = key_combo # for use in limit_columns()
        
        viewdict = {'all' : ['_all'],
                    'style' : ['visible', 'label', 'style', 'width', 'color', 'marker', 'marker_color', 'marker_size'],
                    'data' : ['visible', 'label', 'source', 'cx', 'cy', 'row_first', 'row_last']}
        for key, alist in viewdict.iteritems():
            model.append((key, alist))

        keybox = gtk.HBox(False, 5)
        keybox.pack_start(gtk.Label("Display:"), False, False)
        keybox.pack_start(key_combo, False, False)
        keybox.pack_start(gtk.Label(), True, True)

        self.key_combo.set_active(0)
        self.limit_columns()
        
        buttons = [(gtk.STOCK_ADD, self.on_insert_new),
                   (gtk.STOCK_REMOVE, self.on_remove_selection),
                   (gtk.STOCK_GO_UP, self.on_move_selection, -1),
                   (gtk.STOCK_GO_DOWN, self.on_move_selection, +1)]        
        buttonbox = uihelper.construct_vbuttonbox(buttons, labels=False)
        
        hbox = gtk.HBox(False, 5)
        hbox.pack_start(sw, True, True)
        hbox.pack_start(buttonbox, False, True)

        vbox = gtk.VBox(False, 5)
        vbox.pack_start(keybox, False, False)
        vbox.pack_start(hbox)
        
        frame1 = uihelper.new_section('Lines', vbox)
        
        #
        # Construct Group Boxes
        #
        #self.gblist = [GroupBox(self.layer, 'group_linestyle'),
        #               GroupBox(self.layer, 'group_linemarker'),
        #               GroupBox(self.layer, 'group_linewidth'),
        #               GroupBox(self.layer, 'group_linecolor')]
        self.gblist = []

        # DISABLE GROUP BOXES RIGHT NOW!
        self.gblist = []

#         # Wrap group boxes into a table       
#         table = gtk.Table(rows=len(self.gblist), columns=3)

#         n = 0
#         for widget in self.gblist:
#             # label (put into an event box to display the tooltip)
#             label = gtk.Label(widget.prop.blurb or widget.propname)
#             ebox = gtk.EventBox()
#             ebox.add(label)
#             if widget.prop.doc is not None:
#                 tooltips.set_tip(ebox, widget.prop.doc)
            
#             table.attach(ebox, 0, 1, n, n+1,
#                          xoptions=gtk.FILL, yoptions=0,
#                          xpadding=5, ypadding=1)            
#             table.attach(widget, 1, 2, n, n+1,
#                          xoptions=gtk.EXPAND|gtk.FILL, yoptions=0,
#                          xpadding=5, ypadding=1)
#             n += 1       

#         frame2 = uihelper.new_section('Group Properties', table)

        #
        # Put everything together!
        #
        self.pack_start(frame1,True,True)

        # DISABLE GROUP BOXES RIGHT NOW
        #self.pack_start(frame2,False,True)

        self.show_all()
    def __init__(self):
        gtk.VBox.__init__(self)
    
        # We create copies of all templates and put these into the
        # treeview.  This allows the user to reject the modifications
        # (RESPONSE_REJECT).  If however he wishes to use the
        # modifications (RESPONSE_ACCEPT), then we simply need to
        # replace the current templates with these temporary ones.

        # check in
        self.model = gtk.ListStore(str, object) # key, object
        model = self.model # TBR

        #
        # create gui
        #
        # columns should be created in the order given by COLUMN_xxx
        # definitions above.
        tv = gtk.TreeView(model)

        tv.set_headers_visible(False)

        cell = gtk.CellRendererText()
        column = gtk.TreeViewColumn()
        column.pack_start(cell)

        def render(column, cell, model, iter):
            object = model.get_value(iter, self.MODEL_OBJECT)
            key = model.get_value(iter, self.MODEL_KEY)

            key = "<big><b>%s</b></big>" % key

            if object.blurb is not None:
                blurb = "<i>%s</i>" % object.blurb
            else:
                blurb = "<i>no description</i>"

            if object.immutable is True:
                blurb += " <i>(immutable)</i>"

            text = "%s\n%s" % (key, blurb)

            cell.set_property('markup', text)

        column.set_cell_data_func(cell, render)
        tv.append_column(column)
            
        self.treeview = tv
        sw = uihelper.add_scrollbars(tv)

        tv.connect("row-activated", (lambda a,b,c: self.on_edit_item(a,c)))
                    
        buttons=[(gtk.STOCK_EDIT, self.on_edit_item),
                 (gtk.STOCK_ADD, self.on_add_item),
                 (gtk.STOCK_COPY, self.on_copy_item),
                 (gtk.STOCK_DELETE, self.on_delete_item)]

        btnbox = uihelper.construct_vbuttonbox(buttons)
        btnbox.set_spacing(uihelper.SECTION_SPACING)
        btnbox.set_border_width(uihelper.SECTION_SPACING)

        sw.set_border_width(uihelper.SECTION_SPACING)


        hbox = gtk.HBox()
        hbox.pack_start(sw,True,True)
        hbox.pack_start(btnbox,False,True)
        
        frame = uihelper.new_section("Import Templates", hbox)
        self.add(frame)
        self.show_all()