Slicer 4.2
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
ColorBox.py
Go to the documentation of this file.
00001 import os
00002 from __main__ import tcl
00003 from __main__ import qt
00004 from __main__ import slicer
00005 
00006 #########################################################
00007 #
00008 # 
00009 comment = """
00010 
00011   ColorBox is a wrapper around a set of Qt widgets and other
00012   structures to manage show a color picker
00013 
00014 # TODO : 
00015 """
00016 #
00017 #########################################################
00018 
00019 class ColorBox(object):
00020 
00021   def __init__(self, parent=None, parameterNode=None, parameter=None, colorNode=None, selectCommand=None):
00022     self.colorNode = colorNode
00023     self.parameterNode = parameterNode
00024     self.parameter = parameter
00025     self.selectCommand = selectCommand
00026     self.showRecents = False # TODO: make a group for recents for visual feedback (otherwise confusing)
00027     self.recents = []
00028     self.label = None
00029     if not parent:
00030       self.parent = slicer.qMRMLWidget()
00031       self.parent.setLayout(qt.QVBoxLayout())
00032       self.parent.setMRMLScene(slicer.mrmlScene)
00033       self.create()
00034       p = qt.QCursor().pos()
00035       self.parent.setGeometry(p.x(), p.y(), 300, 700)
00036       self.parent.show()
00037     else:
00038       self.parent = parent
00039       self.create()
00040 
00041   def create(self):
00042     # add a search box
00043     self.searchFrame = qt.QFrame(self.parent)
00044     self.searchFrame.setLayout(qt.QHBoxLayout())
00045     self.parent.layout().addWidget(self.searchFrame)
00046     self.searchLabel = qt.QLabel(self.searchFrame)
00047     self.searchLabel.setText("Search: ")
00048     self.searchFrame.layout().addWidget(self.searchLabel)
00049     self.search = qt.QLineEdit(self.searchFrame)
00050     self.searchFrame.layout().addWidget(self.search)
00051 
00052     # model and view for color table
00053     self.view = qt.QTreeView()
00054     self.parent.layout().addWidget(self.view)
00055     self.populateColors()
00056     self.search.connect('textChanged(QString)', self.populateColors)
00057     self.view.connect('clicked(QModelIndex)', self.selected)
00058 
00059   def cleanup(self):
00060     pass
00061 
00062   def show(self, parameterNode, parameter, colorNode):
00063     self.colorNode = colorNode
00064     self.parameterNode = parameterNode
00065     self.parameter = parameter
00066     self.populateColors()
00067     self.parent.show()
00068 
00069   def addRow(self,c):
00070     name = self.colorNode.GetColorName(c)
00071     lut = self.colorNode.GetLookupTable()
00072     rgb = lut.GetTableValue(c)
00073     brush = qt.QBrush()
00074     self.brushes.append(brush)
00075     color = qt.QColor()
00076     color.setRgb(rgb[0]*255,rgb[1]*255,rgb[2]*255)
00077     brush.setColor(color)
00078 
00079     # index
00080     item = qt.QStandardItem()
00081     item.setText(str(c))
00082     self.model.setItem(self.row,0,item)
00083     self.items.append(item)
00084     # color
00085     item = qt.QStandardItem()
00086     item.setData(color,1)
00087     self.model.setItem(self.row,1,item)
00088     self.items.append(item)
00089     # name
00090     item = qt.QStandardItem()
00091     item.setText(self.colorNode.GetColorName(c))
00092     self.model.setItem(self.row,2,item)
00093     self.items.append(item)
00094     self.row += 1
00095 
00096   def populateColors(self):
00097     self.brushes = []
00098     self.items = []
00099     self.model = qt.QStandardItemModel()
00100     self.view.setModel(self.model)
00101     pattern = self.search.text
00102     self.row = 0
00103     if self.showRecents and pattern == "":
00104       for c in self.recents:
00105         self.addRow(c)
00106       if self.recents:
00107         item = qt.QStandardItem()
00108         item.setText("--")
00109         self.model.setItem(self.row,0,item)
00110         self.model.setItem(self.row,1,item)
00111         self.model.setItem(self.row,2,item)
00112         self.items.append(item)
00113         self.row+=1
00114     for c in xrange(self.colorNode.GetNumberOfColors()):
00115       name = self.colorNode.GetColorName(c)
00116       if name != "(none)" and name.find(pattern) >= 0:
00117         self.addRow(c)
00118     self.view.setColumnWidth(0,75)
00119     self.view.setColumnWidth(1,50)
00120     self.view.setColumnWidth(2,150)
00121     self.model.setHeaderData(0,1,"Number")
00122     self.model.setHeaderData(1,1,"Color")
00123     self.model.setHeaderData(2,1,"Name")
00124 
00125   def selected(self, modelIndex):
00126     self.label = self.model.item(modelIndex.row(),0).text()
00127     self.recents.append(int(self.label))
00128     if self.parameter:
00129       self.parameterNode.SetParameter(self.parameter,self.label)
00130     if self.selectCommand:
00131       self.selectCommand(int(self.label))
00132     self.parent.hide()
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines