00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 from ost import gui
00022 from ost import gfx
00023 from ost import mol
00024 try:
00025 from ost import img
00026 _img_present=True
00027 except ImportError:
00028 _img_present=False
00029 pass
00030 from PyQt4 import QtCore, QtGui
00031 from color_select_widget import ColorSelectWidget
00032
00033
00034 class UniformColorWidget(QtGui.QWidget):
00035 def __init__(self, parent=None):
00036 QtGui.QWidget.__init__(self, parent)
00037 self.parent_ = parent
00038
00039 self.text_ = "Uniform Color"
00040
00041
00042 uniform_label = QtGui.QLabel(self.text_)
00043 font = uniform_label.font()
00044 font.setBold(True)
00045
00046 self.color_select_widget_ = ColorSelectWidget(1,1,QtGui.QColor("White"))
00047
00048 top_layout = QtGui.QVBoxLayout()
00049
00050 grid = QtGui.QGridLayout()
00051 grid.addWidget(self.color_select_widget_, 2, 1, 1, 1)
00052 grid.setRowStretch(1, 1)
00053 grid.setRowStretch(3, 1)
00054 grid.setColumnStretch(0,1)
00055 grid.setColumnStretch(2,1)
00056
00057 top_layout.addWidget(uniform_label)
00058 top_layout.addLayout(grid)
00059 self.setLayout(top_layout)
00060
00061 QtCore.QObject.connect(self.color_select_widget_, QtCore.SIGNAL("colorChanged"), self.ChangeColors)
00062
00063 self.setMinimumSize(250,150)
00064
00065 def Update(self):
00066 scene_selection = gui.SceneSelection.Instance()
00067 for i in range(0,scene_selection.GetActiveNodeCount()):
00068 node = scene_selection.GetActiveNode(i)
00069 if _img_present and isinstance(node, gfx.MapIso):
00070 if self.color_select_widget_.GetGfxColor() != node.GetColor():
00071 self.color_select_widget_.SetGfxColor(node.GetColor())
00072 else:
00073 self.ChangeColors()
00074
00075 def ChangeColors(self):
00076 scene_selection = gui.SceneSelection.Instance()
00077 for i in range(0,scene_selection.GetActiveNodeCount()):
00078 node = scene_selection.GetActiveNode(i)
00079 self.ChangeColor(node)
00080
00081 if(scene_selection.GetActiveViewCount() > 0):
00082 entity = scene_selection.GetViewEntity()
00083 view = scene_selection.GetViewUnion()
00084 self.ChangeViewColor(entity,view)
00085
00086 def ChangeColor(self, node):
00087 gfx_color = self.color_select_widget_.GetGfxColor()
00088 if isinstance(node, gfx.Entity) or isinstance(node, gfx.Surface):
00089 node.CleanColorOps()
00090 if self.parent_.GetCarbonsOnly():
00091 node.SetColor(gfx_color,"ele=C")
00092 else:
00093 node.SetColor(gfx_color,"")
00094 elif _img_present and isinstance(node, gfx.MapIso):
00095 node.SetColor(gfx_color)
00096
00097 def ChangeViewColor(self, entity, view):
00098 if isinstance(entity, gfx.Entity) and isinstance(view, mol.EntityView):
00099 gfx_color = self.color_select_widget_.GetGfxColor()
00100 if self.parent_.GetCarbonsOnly():
00101 ufco=gfx.UniformColorOp(mol.QueryViewWrapper(mol.Query("ele=C"), view),gfx_color)
00102 else:
00103 ufco=gfx.UniformColorOp(mol.QueryViewWrapper(view),gfx_color)
00104 entity.Apply(ufco)
00105
00106 def resizeEvent(self, event):
00107 self.color_select_widget_.SetSize(self.width()/2,self.height()/2)
00108
00109 def GetText(self):
00110 return self.text_