def _make_properties_frame(self):
        frame = gtk.Frame('Properties')
        frame.set_border_width(5)
        vboxProps = gtk.VBox()
        frame.add(vboxProps)
        f1 = gtk.Frame("Opacity")
        f1.show()
        vboxProps.pack_start(f1, False)
        self.scrollbar_opacity = gtk.HScrollbar()
        self.scrollbar_opacity.set_update_policy(gtk.UPDATE_DELAYED)
        self.scrollbar_opacity.show()
        self.scrollbar_opacity.set_size_request(*self.SCROLLBARSIZE)
        self.scrollbar_opacity.set_range(0, 1)
        self.scrollbar_opacity.set_increments(.05, .2)
        self.scrollbar_opacity.set_value(1.0)
        self.scrollbar_opacity.connect('value_changed', self.change_opacity_of_roi)
        f1.add(self.scrollbar_opacity)

        f2 = gtk.Frame("Color")
        f2.show()
        vboxProps.pack_start(f2, False)
        tmp = gtk.HBox()
        f2.add(tmp)
        self.color_chooser = ColorChooser()
        self.color_chooser.connect("color_changed",self.change_color_of_roi)
        tmp.pack_start(self.color_chooser,True,False)
        vboxProps.show_all()
        return frame
class RoiRendererProps(gtk.VBox):
    SCROLLBARSIZE = 150,20
    lastColor = SurfParams.color
    paramd = {}   # a dict from names to SurfParam instances

    def __init__(self):
        gtk.VBox.__init__(self)
        self.show()

        toolbar = self.__create_toolbar()
        self.pack_start(toolbar,False,False)

        self.scrolled_window = gtk.ScrolledWindow()

        self.inner_vbox = gtk.VBox()
        self.inner_vbox.set_spacing(20)
        self.scrolled_window.add_with_viewport(self.inner_vbox)
        self.pack_start(self.scrolled_window)
        self.scrolled_window.show_all()

        self._make_roi_list()
            
        button = ButtonAltLabel('Render', gtk.STOCK_EXECUTE)
        button.show()
        button.connect('clicked', self.render)
        self.pack_end(button, False, False)        
        self.__update_treeview_visibility()


    def render(self, *args):
        EventHandler().notify("render now")
            
    def __create_toolbar(self):
        conf = [
                [gtk.STOCK_ADD,
                 'Add',
                 'Load ROI from file and render it',
                 self.add_roi
                ],
                [gtk.STOCK_REMOVE, 
                 'Remove', 
                 'Remove selected ROI',
                 self.rm_roi
                ],
                #"-",
                #[gtk.STOCK_GO_UP, 
                # 'Move up', 
                # 'Move selected marker up in list',
                # self.cb_move_up
                #],
                #[gtk.STOCK_GO_DOWN, 
                # 'Move down', 
                # 'Move selected marker down in list',
                # self.cb_move_down
                #],
               ]
        return ListToolbar(conf)

    def _make_roi_list(self):
        #create TreeView
        #Fields: Index, Short filename, long FN, is_active?, opacity
        self.tree_roi = gtk.TreeStore(gobject.TYPE_INT, gobject.TYPE_STRING, gobject.TYPE_STRING,gobject.TYPE_BOOLEAN,gobject.TYPE_FLOAT)
        self.nroi = 0
        self.treev_roi = gtk.TreeView(self.tree_roi)
        self.treev_sel = self.treev_roi.get_selection()
        self.treev_sel.connect("changed",self.treev_sel_changed)
        self.treev_sel.set_mode(gtk.SELECTION_SINGLE)
        renderer = gtk.CellRendererText()
        renderer.set_property("xalign",0.0)
        #renderer.set_xalign(0.0)
        #self.col1 = gtk.TreeViewColumn("#",renderer,text=0)
        #self.treev_roi.append_column(self.col1)
        self.col1 = gtk.TreeViewColumn("Short filename",renderer,text=1)
        self.treev_roi.append_column(self.col1)
        #self.treev_roi.show()
        self.inner_vbox.pack_start(self.treev_roi, False)

        #Empty-indicator
        self.emptyIndicator = gtk.Label('No region-of-interest defined')
        self.emptyIndicator.show()
        self.inner_vbox.pack_start(self.emptyIndicator, False)

        #Edit properties of one ROI
        self.props_frame = self._make_properties_frame()
        self.inner_vbox.pack_start(self.props_frame,False,False)

        #vboxProps.pack_start()

    def _make_properties_frame(self):
        frame = gtk.Frame('Properties')
        frame.set_border_width(5)
        vboxProps = gtk.VBox()
        frame.add(vboxProps)
        f1 = gtk.Frame("Opacity")
        f1.show()
        vboxProps.pack_start(f1, False)
        self.scrollbar_opacity = gtk.HScrollbar()
        self.scrollbar_opacity.set_update_policy(gtk.UPDATE_DELAYED)
        self.scrollbar_opacity.show()
        self.scrollbar_opacity.set_size_request(*self.SCROLLBARSIZE)
        self.scrollbar_opacity.set_range(0, 1)
        self.scrollbar_opacity.set_increments(.05, .2)
        self.scrollbar_opacity.set_value(1.0)
        self.scrollbar_opacity.connect('value_changed', self.change_opacity_of_roi)
        f1.add(self.scrollbar_opacity)

        f2 = gtk.Frame("Color")
        f2.show()
        vboxProps.pack_start(f2, False)
        tmp = gtk.HBox()
        f2.add(tmp)
        self.color_chooser = ColorChooser()
        self.color_chooser.connect("color_changed",self.change_color_of_roi)
        tmp.pack_start(self.color_chooser,True,False)
        vboxProps.show_all()
        return frame

    def add_roi(self,*args):
        dialog = gtk.FileSelection('Choose filename for ROI mask')
        dialog.set_filename(shared.get_last_dir())
        dialog.show()
        response = dialog.run()
        if response==gtk.RESPONSE_OK:
            fname = dialog.get_filename()
            dialog.destroy()
            try: 
                #Actually add ROI 
                self.nroi+=1
                tree_iter = self.tree_roi.append(None)
                self.tree_roi.set(tree_iter,0,self.nroi,1,os.path.split(fname)[1],2,fname,3,True)
                self.__update_treeview_visibility()

                roi_image_reader = vtkNiftiImageReader()
                roi_image_reader.SetFileName(fname)
                roi_image_reader.Update()
                roi_id = self.tree_roi.get(tree_iter,0) 
                self.paramd[roi_id] = RoiParams(roi_image_reader.GetOutput())
                #self.paramd[roi_id].update_pipeline()
                #print self.paramd[roi_id].intensity
                shared.set_file_selection(fname)
            except IOError:
                error_msg(
                    'Could not load ROI mask from %s' % fname, 
                    )
            finally:
                self.__update_treeview_visibility()
        else: dialog.destroy()
        self.render()

    def rm_roi(self,*args):
        treestore,treeiter = self.treev_sel.get_selected()
        roi_id = treestore.get(treeiter,0)
        treestore.remove(treeiter)
        self.paramd[roi_id].destroy()
        del self.paramd[roi_id]
        self.__update_treeview_visibility()
        self.render()

    def treev_sel_changed(self,selection):
        treeiter = selection.get_selected()[1]
        if treeiter:
            self.props_frame.show_all()
            #print "selection changed", self.tree_roi.get(treeiter,0,1,2)
            roi_id = self.tree_roi.get(treeiter,0)
            try:
                self.color_chooser._set_color(self.paramd[roi_id].color)
            except Exception, e:
                print "During setting color of color chooser:", type(e),e
            try:
                self.scrollbar_opacity.set_value(self.paramd[roi_id].opacity)
            except Exception, e:
                print "During setting value of opacity scrollbar:", type(e),e