00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 import sys
00022 from ost import mol
00023 from ost import gui
00024 from ost import gfx
00025 try:
00026 from ost import img
00027 _img_present=True
00028 except ImportError:
00029 _img_present=False
00030 pass
00031
00032 from PyQt4 import QtCore, QtGui
00033 from scene_selection_helper import SelHelper
00034 from gradient_editor_widget import GradientEditor
00035 from uniform_color_widget import UniformColorWidget
00036 from combo_options_widget import ComboOptionsWidget
00037
00038 class ColorOptionsWidget(ComboOptionsWidget):
00039 def __init__(self, parent=None):
00040 ComboOptionsWidget.__init__(self, parent)
00041
00042
00043 self.text_ = "Color Options"
00044
00045
00046 self.entity_widgets_ = list()
00047 self.entity_widgets_.append(["Color by Element", ByElementWidget("Color by Element")])
00048 self.entity_widgets_.append(["Color by Chain", ByChainWidget("Color by Chain")])
00049 self.entity_widgets_.append(["Color by Property", GradientEditor()])
00050 self.entity_widgets_.append(["Uniform",UniformColorWidget()])
00051
00052 self.img_widgets_ = list()
00053 self.img_widgets_.append(["Uniform",UniformColorWidget()])
00054
00055 self.setMinimumSize(250,200)
00056
00057 def DoSomething(self, item):
00058 scene_selection = gui.SceneSelection.Instance()
00059 for i in range(0,scene_selection.GetActiveNodeCount()):
00060 node = scene_selection.GetActiveNode(i)
00061 item.ChangeColor(node)
00062
00063 if(scene_selection.GetActiveViewCount() > 0):
00064 entity = scene_selection.GetViewEntity()
00065 view = scene_selection.GetViewUnion()
00066 item.ChangeViewColor(entity,view)
00067
00068 self.DoResize()
00069
00070
00071 def Update(self):
00072
00073 ComboOptionsWidget.setEnabled(self,True)
00074
00075 if SelHelper().CheckAllFlags(SelHelper.NO_SELECTION):
00076 ComboOptionsWidget.setEnabled(self,False)
00077 return
00078
00079 for w in self.entity_widgets_:
00080 self.RemoveWidget(w[0])
00081 for w in self.img_widgets_:
00082 self.RemoveWidget(w[0])
00083
00084
00085 if SelHelper().CheckFlags(SelHelper.HAS_IMG | SelHelper.IS_ONE_TYPE):
00086 for w in self.img_widgets_:
00087 self.AddWidget(w[0], w[1])
00088 elif SelHelper().CheckMinOneFlag(SelHelper.HAS_ENTITY| SelHelper.HAS_VIEW| SelHelper.HAS_SURFACE) and SelHelper().CheckNotFlags(SelHelper.HAS_IMG):
00089 for w in self.entity_widgets_:
00090 self.AddWidget(w[0], w[1])
00091 else:
00092 ComboOptionsWidget.setEnabled(self,False)
00093 return
00094
00095 self.GetCurrentWidget().Update()
00096
00097 def GetText(self):
00098 return self.text_
00099
00100
00101 class ByElementWidget(QtGui.QWidget):
00102 def __init__(self, text, parent=None):
00103 QtGui.QLabel.__init__(self, parent)
00104
00105
00106 self.text_ = text
00107
00108
00109 text_label = QtGui.QLabel(text)
00110 font = text_label.font()
00111 font.setBold(True)
00112
00113 grid = QtGui.QGridLayout()
00114 grid.addWidget(text_label,0,0,1,1)
00115 grid.addWidget(QtGui.QLabel("No Settings available"), 1, 0, 1, 3)
00116 grid.setRowStretch(2,1)
00117 self.setLayout(grid)
00118 self.setMinimumSize(250,60)
00119
00120 def Update(self):
00121 pass
00122
00123 def ChangeColor(self, node):
00124 if isinstance(node, gfx.Entity):
00125 node.CleanColorOps()
00126 node.ColorByElement()
00127
00128 def ChangeViewColor(self, entity, view):
00129 if isinstance(entity, gfx.Entity) and isinstance(view, mol.EntityView):
00130 beco=gfx.ByElementColorOp(mol.QueryViewWrapper(view))
00131 entity.Apply(beco)
00132
00133 def GetText(self):
00134 return self.text_
00135
00136
00137 class ByChainWidget(QtGui.QWidget):
00138 def __init__(self, text, parent=None):
00139 QtGui.QLabel.__init__(self, parent)
00140
00141
00142 self.text_ = text
00143
00144
00145 text_label = QtGui.QLabel(text)
00146 font = text_label.font()
00147 font.setBold(True)
00148
00149 grid = QtGui.QGridLayout()
00150 grid.addWidget(text_label,0,0,1,1)
00151 grid.addWidget(QtGui.QLabel("No Settings available"), 1, 0, 1, 3)
00152 grid.setRowStretch(2,1)
00153 self.setLayout(grid)
00154 self.setMinimumSize(250,60)
00155
00156 def Update(self):
00157 pass
00158
00159 def ChangeColor(self, node):
00160 if isinstance(node, gfx.Entity):
00161 node.CleanColorOps()
00162 node.ColorByChain()
00163
00164 def ChangeViewColor(self, entity, view):
00165 if isinstance(entity, gfx.Entity) and isinstance(view, mol.EntityView):
00166 bco=gfx.ByChainColorOp(mol.QueryViewWrapper(view))
00167 entity.Apply(bco)
00168
00169 def GetText(self):
00170 return self.text_