Skip to content
Snippets Groups Projects
Commit c7712eaa authored by stefan's avatar stefan
Browse files

Inspector Gadget, fixed Update method, added new helper class for scene selection

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2356 5a81b35b-ba03-0410-adc8-b2c5c5119f08
parent f5f83076
No related branches found
No related tags found
No related merge requests found
...@@ -45,6 +45,7 @@ render_mode_widget.py ...@@ -45,6 +45,7 @@ render_mode_widget.py
render_op.py render_op.py
render_options_widget.py render_options_widget.py
scene_observer_impl.py scene_observer_impl.py
scene_selection_helper.py
simple_widget.py simple_widget.py
sline_widget.py sline_widget.py
toolbar_options_widget.py toolbar_options_widget.py
......
...@@ -30,6 +30,7 @@ except ImportError: ...@@ -30,6 +30,7 @@ except ImportError:
pass pass
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from scene_selection_helper import SelHelper
from gradient_editor_widget import GradientEditor from gradient_editor_widget import GradientEditor
from uniform_color_widget import UniformColorWidget from uniform_color_widget import UniformColorWidget
from combo_options_widget import ComboOptionsWidget from combo_options_widget import ComboOptionsWidget
...@@ -70,9 +71,8 @@ class ColorOptionsWidget(ComboOptionsWidget): ...@@ -70,9 +71,8 @@ class ColorOptionsWidget(ComboOptionsWidget):
def Update(self): def Update(self):
ComboOptionsWidget.setEnabled(self,True) ComboOptionsWidget.setEnabled(self,True)
scene_selection = gui.SceneSelection.Instance()
if scene_selection.GetActiveNodeCount() == 0 and scene_selection.GetActiveViewCount() == 0: if SelHelper().CheckAllFlags(SelHelper.NO_SELECTION):
ComboOptionsWidget.setEnabled(self,False) ComboOptionsWidget.setEnabled(self,False)
return return
...@@ -81,19 +81,11 @@ class ColorOptionsWidget(ComboOptionsWidget): ...@@ -81,19 +81,11 @@ class ColorOptionsWidget(ComboOptionsWidget):
for w in self.img_widgets_: for w in self.img_widgets_:
self.RemoveWidget(w[0]) self.RemoveWidget(w[0])
all_entity = True
all_img = True
for i in range(0,scene_selection.GetActiveNodeCount()):
node = scene_selection.GetActiveNode(i)
if not (isinstance(node, gfx.Entity) or isinstance(node, gfx.Surface)):
all_entity = False
if (not _img_present) or (not isinstance(node, gfx.MapIso)):
all_img = False
if all_img and (not all_entity): if SelHelper().CheckAllFlags(SelHelper.HAS_IMG | SelHelper.IS_SINGLE):
for w in self.img_widgets_: for w in self.img_widgets_:
self.AddWidget(w[0], w[1]) self.AddWidget(w[0], w[1])
elif all_entity and (not all_img): elif SelHelper().CheckMinOneFlag(SelHelper.HAS_ENTITY| SelHelper.HAS_VIEW| SelHelper.HAS_SURFACE) and SelHelper().CheckNotFlags(SelHelper.HAS_IMG):
for w in self.entity_widgets_: for w in self.entity_widgets_:
self.AddWidget(w[0], w[1]) self.AddWidget(w[0], w[1])
else: else:
......
...@@ -59,11 +59,19 @@ class ColorSelectWidget(QtGui.QWidget): ...@@ -59,11 +59,19 @@ class ColorSelectWidget(QtGui.QWidget):
def GetColor(self): def GetColor(self):
return self.color_ return self.color_
def GetGfxColor(self):
color = self.GetColor()
return gfx.Color(color.redF(), color.greenF(), color.blueF())
def SetColor(self, color): def SetColor(self, color):
if(self.color_ != color): if(self.color_ != color):
self.color_ = color self.color_ = color
self.emit(QtCore.SIGNAL("colorChanged")) self.emit(QtCore.SIGNAL("colorChanged"))
self.update() self.update()
def SetGfxColor(self, color):
qcolor= QtGui.QColor(color.Red()*255,color.Green()*255,color.Blue()*255,color.Alpha()*255)
self.SetColor(qcolor)
def paintEvent(self, event): def paintEvent(self, event):
if self.isEnabled(): if self.isEnabled():
......
...@@ -103,7 +103,9 @@ class ComboOptionsWidget(QtGui.QWidget): ...@@ -103,7 +103,9 @@ class ComboOptionsWidget(QtGui.QWidget):
self.__UpdateView(None) self.__UpdateView(None)
def GetCurrentWidget(self): def GetCurrentWidget(self):
return self.__GetCurrentPair()[1] if(self.combo_box_.currentIndex() >= 0):
return self.__GetCurrentPair()[1]
return None
def DoResize(self): def DoResize(self):
item = self.GetCurrentWidget() item = self.GetCurrentWidget()
......
...@@ -29,6 +29,7 @@ from render_options_widget import RenderOptionsWidget ...@@ -29,6 +29,7 @@ from render_options_widget import RenderOptionsWidget
from color_options_widget import ColorOptionsWidget from color_options_widget import ColorOptionsWidget
from ost.gui.scene.scene_observer_impl import SceneObserverImpl from ost.gui.scene.scene_observer_impl import SceneObserverImpl
from map_level_widget import AdditionalSettingsWidget from map_level_widget import AdditionalSettingsWidget
from scene_selection_helper import SelHelper
class InspectorWidget(ToolBarOptionsWidget): class InspectorWidget(ToolBarOptionsWidget):
ICONS_PATH = os.path.join(ost.GetSharedDataPath(), "scene", "icons/") ICONS_PATH = os.path.join(ost.GetSharedDataPath(), "scene", "icons/")
...@@ -58,15 +59,19 @@ class InspectorWidget(ToolBarOptionsWidget): ...@@ -58,15 +59,19 @@ class InspectorWidget(ToolBarOptionsWidget):
#Observer Methods #Observer Methods
def NodeRemoved(self, node): def NodeRemoved(self, node):
SelHelper().Update()
ToolBarOptionsWidget.Update(self) ToolBarOptionsWidget.Update(self)
def RenderModeChanged(self, node): def RenderModeChanged(self, node):
SelHelper().Update()
ToolBarOptionsWidget.Update(self) ToolBarOptionsWidget.Update(self)
def NodeChanged(self, node): def NodeChanged(self, node):
SelHelper().Update()
ToolBarOptionsWidget.Update(self) ToolBarOptionsWidget.Update(self)
def ActiveNodesChanged(self): def ActiveNodesChanged(self):
SelHelper().Update()
ToolBarOptionsWidget.Update(self) ToolBarOptionsWidget.Update(self)
class InspectorDialog(QtGui.QDialog): class InspectorDialog(QtGui.QDialog):
......
...@@ -29,6 +29,7 @@ except ImportError: ...@@ -29,6 +29,7 @@ except ImportError:
_img_present=False _img_present=False
pass pass
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from scene_selection_helper import SelHelper
from combo_options_widget import ComboOptionsWidget from combo_options_widget import ComboOptionsWidget
from custom_widget import CustomWidget from custom_widget import CustomWidget
from cpk_widget import CPKWidget from cpk_widget import CPKWidget
...@@ -73,6 +74,7 @@ class RenderOptionsWidget(ComboOptionsWidget): ...@@ -73,6 +74,7 @@ class RenderOptionsWidget(ComboOptionsWidget):
self.img_widgets_.append([gfx.RenderMode.SIMPLE, WireframeWidget()]) self.img_widgets_.append([gfx.RenderMode.SIMPLE, WireframeWidget()])
self.img_widgets_.append([gfx.RenderMode.FILL, EmptyMode("Fill",gfx.RenderMode.FILL)]) self.img_widgets_.append([gfx.RenderMode.FILL, EmptyMode("Fill",gfx.RenderMode.FILL)])
self._in_view_method = False
self.setMinimumSize(250,200) self.setMinimumSize(250,200)
def DoSomething(self, item): def DoSomething(self, item):
...@@ -86,11 +88,10 @@ class RenderOptionsWidget(ComboOptionsWidget): ...@@ -86,11 +88,10 @@ class RenderOptionsWidget(ComboOptionsWidget):
if(scene_selection.GetActiveViewCount() > 0): if(scene_selection.GetActiveViewCount() > 0):
entity = scene_selection.GetViewEntity() entity = scene_selection.GetViewEntity()
for i in range(0,scene_selection.GetActiveViewCount()): view = scene_selection.GetViewUnion()
view = scene_selection.GetActiveView(i) render_mode = item.GetRenderMode()
render_mode = item.GetRenderMode() if render_mode is not None:
if render_mode is not None: entity.SetRenderMode(item.GetRenderMode(),view,self.keep_action_.isChecked())
entity.SetRenderMode(item.GetRenderMode(),view,self.keep_action_.isChecked())
item.Update() item.Update()
self.DoResize() self.DoResize()
...@@ -98,47 +99,60 @@ class RenderOptionsWidget(ComboOptionsWidget): ...@@ -98,47 +99,60 @@ class RenderOptionsWidget(ComboOptionsWidget):
def Update(self): def Update(self):
if hasattr(self, "keep_button_"): if hasattr(self, "keep_button_"):
self.keep_button_.setEnabled(True) self.keep_button_.setEnabled(True)
scene_selection = gui.SceneSelection.Instance()
if scene_selection.GetActiveNodeCount() == 0 and scene_selection.GetActiveViewCount() == 0: ComboOptionsWidget.setEnabled(self,True)
cur_widget = self.GetCurrentWidget()
new_render_mode = None
if cur_widget is not None:
new_render_mode = cur_widget.GetRenderMode()
if SelHelper().CheckAllFlags(SelHelper.NO_SELECTION):
ComboOptionsWidget.setEnabled(self,False) ComboOptionsWidget.setEnabled(self,False)
return return
if not self._in_view_method:
for w in self.entity_widgets_:
self.RemoveWidget(w[0])
for w in self.img_widgets_:
self.RemoveWidget(w[0])
scene_selection = gui.SceneSelection.Instance()
if scene_selection.GetActiveNodeCount() > 0 : if scene_selection.GetActiveNodeCount() > 0 :
if hasattr(self, "keep_button_"): if hasattr(self, "keep_button_"):
self.keep_button_.setEnabled(False) self.keep_button_.setEnabled(False)
render_mode_valid = True render_mode_valid = True
all_entity = True
all_img = True
render_mode = None render_mode = None
for i in range(0,scene_selection.GetActiveNodeCount()): for i in range(0,scene_selection.GetActiveNodeCount()):
node = scene_selection.GetActiveNode(i) node = scene_selection.GetActiveNode(i)
if not isinstance(node, gfx.Entity):
all_entity = False
if (not _img_present) or (not isinstance(node, gfx.MapIso)):
all_img = False
if isinstance(scene_selection.GetActiveNode(i), gfx.GfxObj): if isinstance(scene_selection.GetActiveNode(i), gfx.GfxObj):
if render_mode is None: if render_mode is None:
render_mode = node.GetRenderMode() render_mode = node.GetRenderMode()
elif render_mode != node.GetRenderMode(): elif render_mode != node.GetRenderMode():
render_mode_valid = False render_mode_valid = False
if all_img and (not all_entity):
for w in self.img_widgets_: if SelHelper().CheckFlags(SelHelper.HAS_IMG | SelHelper.IS_SINGLE):
self.AddWidget(w[0], w[1]) for w in self.img_widgets_:
elif all_entity and (not all_img): self.AddWidget(w[0], w[1])
elif SelHelper().CheckMinOneFlag(SelHelper.HAS_ENTITY| SelHelper.HAS_VIEW) and SelHelper().CheckNotFlags(SelHelper.HAS_IMG):
if not self._in_view_method:
for w in self.entity_widgets_: for w in self.entity_widgets_:
self.AddWidget(w[0], w[1]) self.AddWidget(w[0], w[1])
else: else:
ComboOptionsWidget.setEnabled(self,False) ComboOptionsWidget.setEnabled(self,False)
return return
if SelHelper().CheckMinOneFlag(SelHelper.HAS_ENTITY| SelHelper.HAS_IMG) and SelHelper().CheckNotFlags(SelHelper.HAS_VIEW):
if(render_mode_valid): if(render_mode_valid):
ComboOptionsWidget.ChangeSelectedItem(self,render_mode) ComboOptionsWidget.ChangeSelectedItem(self,render_mode)
else: else:
ComboOptionsWidget.ChangeSelectedItem(self,"") ComboOptionsWidget.ChangeSelectedItem(self,"")
else:
if not self._in_view_method:
self._in_view_method = True
ComboOptionsWidget.ChangeSelectedItem(self,new_render_mode)
self.GetCurrentWidget().Update() self.GetCurrentWidget().Update()
ComboOptionsWidget.setEnabled(self,True)
def GetText(self): def GetText(self):
return self.text_ return self.text_
......
#------------------------------------------------------------------------------
# This file is part of the OpenStructure project <www.openstructure.org>
#
# Copyright (C) 2008-2010 by the OpenStructure authors
#
# This library is free software; you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation; either version 3.0 of the License, or (at your option)
# any later version.
# This library is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this library; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#------------------------------------------------------------------------------
import sys
from ost import gui
import sip
from ost import gfx
import ost
import os
try:
from ost import img
_img_present=True
except ImportError:
_img_present=False
pass
class SelHelper():
__shared_state = {}
NO_SELECTION = 0
HAS_ENTITY = 1
HAS_VIEW = 2
HAS_IMG = 4
HAS_SURFACE = 8
IS_SINGLE = 16
IS_MULTI = 32
def __init__(self):
self.__dict__ = self.__shared_state
if not '_ready' in dir(self):
self.scene_sel_ = gui.SceneSelection.Instance()
self.current_flags_ = 0
self._ready = True
def Update(self):
self.current_flags_ = 0
if self.scene_sel_.GetActiveNodeCount() == 0 and self.scene_sel_.GetActiveViewCount() == 0:
return
for i in range(0,self.scene_sel_.GetActiveNodeCount()):
node = self.scene_sel_.GetActiveNode(i)
if isinstance(node, gfx.Entity):
self.current_flags_ = self.current_flags_ | SelHelper.HAS_ENTITY
if isinstance(node, gfx.Surface):
self.current_flags_ = self.current_flags_ | SelHelper.HAS_SURFACE
if (_img_present) and isinstance(node, gfx.MapIso):
self.current_flags_ = self.current_flags_ | SelHelper.HAS_IMG
if self.scene_sel_.GetActiveViewCount() > 0:
self.current_flags_ = self.current_flags_ | SelHelper.HAS_VIEW
cnt = 0
if self.current_flags_ & SelHelper.HAS_ENTITY:
cnt += 1
if self.current_flags_ & SelHelper.HAS_SURFACE:
cnt += 1
if self.current_flags_ & SelHelper.HAS_IMG:
cnt += 1
if self.current_flags_ & SelHelper.HAS_VIEW:
cnt += 1
if cnt == 1:
self.current_flags_ = self.current_flags_ | SelHelper.IS_SINGLE
elif cnt > 1:
self.current_flags_ = self.current_flags_ | SelHelper.IS_MULTI
def CheckAllFlags(self, flags):
if(flags == self.current_flags_ & flags) and (flags == self.current_flags_ | flags):
return True
return False
def CheckNotFlags(self, flags):
return not self.CheckFlags(flags)
def CheckFlags(self, flags):
if(flags == self.current_flags_ & flags):
return True
return False
def CheckMinOneFlag(self, flags):
if((self.current_flags_ - (self.current_flags_ & flags)) < self.current_flags_):
return True
return False
\ No newline at end of file
...@@ -58,39 +58,45 @@ class UniformColorWidget(QtGui.QWidget): ...@@ -58,39 +58,45 @@ class UniformColorWidget(QtGui.QWidget):
top_layout.addLayout(grid) top_layout.addLayout(grid)
self.setLayout(top_layout) self.setLayout(top_layout)
QtCore.QObject.connect(self.color_select_widget_, QtCore.SIGNAL("colorChanged"), self.Update) QtCore.QObject.connect(self.color_select_widget_, QtCore.SIGNAL("colorChanged"), self.ChangeColors)
self.setMinimumSize(250,150) self.setMinimumSize(250,150)
def Update(self): def Update(self):
scene_selection = gui.SceneSelection.Instance()
for i in range(0,scene_selection.GetActiveNodeCount()):
node = scene_selection.GetActiveNode(i)
if _img_present and isinstance(node, gfx.MapIso):
if self.color_select_widget_.GetGfxColor() != node.GetColor():
self.color_select_widget_.SetGfxColor(node.GetColor())
else:
self.ChangeColors()
def ChangeColors(self):
scene_selection = gui.SceneSelection.Instance() scene_selection = gui.SceneSelection.Instance()
for i in range(0,scene_selection.GetActiveNodeCount()): for i in range(0,scene_selection.GetActiveNodeCount()):
node = scene_selection.GetActiveNode(i) node = scene_selection.GetActiveNode(i)
self.ChangeColor(node) self.ChangeColor(node)
if(scene_selection.GetActiveViewCount() > 0): if(scene_selection.GetActiveViewCount() > 0):
entity = scene_selection.GetViewEntity() entity = scene_selection.GetViewEntity()
view = scene_selection.GetViewUnion() view = scene_selection.GetViewUnion()
self.ChangeViewColor(entity,view) self.ChangeViewColor(entity,view)
def ChangeColor(self, node): def ChangeColor(self, node):
gfx_color = self.GetGfxColor() gfx_color = self.color_select_widget_.GetGfxColor()
if isinstance(node, gfx.Entity) or isinstance(node, gfx.Surface): if isinstance(node, gfx.Entity) or isinstance(node, gfx.Surface):
node.CleanColorOps() node.CleanColorOps()
node.SetColor(gfx_color,"") node.SetColor(gfx_color,"")
elif _img_present and isinstance(node, gfx.MapIso): elif _img_present and isinstance(node, gfx.MapIso):
node.SetColor(gfx_color) node.SetColor(gfx_color)
def ChangeViewColor(self, entity, view): def ChangeViewColor(self, entity, view):
if isinstance(entity, gfx.Entity) and isinstance(view, mol.EntityView): if isinstance(entity, gfx.Entity) and isinstance(view, mol.EntityView):
gfx_color = self.GetGfxColor() gfx_color = self.color_select_widget_.GetGfxColor()
ufco=gfx.UniformColorOp(mol.QueryViewWrapper(view),gfx_color) ufco=gfx.UniformColorOp(mol.QueryViewWrapper(view),gfx_color)
entity.Apply(ufco) entity.Apply(ufco)
def GetGfxColor(self):
color = self.color_select_widget_.GetColor()
return gfx.Color(color.redF(), color.greenF(), color.blueF())
def resizeEvent(self, event): def resizeEvent(self, event):
self.color_select_widget_.SetSize(self.width()/2,self.height()/2) self.color_select_widget_.SetSize(self.width()/2,self.height()/2)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment