|
Slicer 4.2
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
|
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()
1.7.4