From 1345a1a8d8f33a6c1ff8f5b56f45f1cc7fc7676f Mon Sep 17 00:00:00 2001
From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Mon, 8 Mar 2010 07:58:50 +0000
Subject: [PATCH] Fixed selection when hiding and showing views

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1783 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 modules/gfx/src/entity.cc               |  6 +++---
 modules/gfx/src/impl/entity_renderer.cc | 10 ++++++----
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/modules/gfx/src/entity.cc b/modules/gfx/src/entity.cc
index 27ebbe957..ebc216065 100644
--- a/modules/gfx/src/entity.cc
+++ b/modules/gfx/src/entity.cc
@@ -559,7 +559,7 @@ void Entity::OnRenderModeChange()
   r->AddView(this->GetView());
   for (RendererMap::iterator i=renderer_.begin(), 
        e=renderer_.end(); i!=e; ++i) {
-     mol::EntityView rv=i->second->GetEffectiveView();
+     mol::EntityView rv=i->second->GetFullView();
      if (rv.IsValid() && rv.GetAtomCount()>0) {
        i->second->SetSelection(mol::Intersection(sel_, rv));
      }         
@@ -625,7 +625,7 @@ void Entity::SetRenderMode(RenderMode::Type mode,
      if (!keep && i->first!=mode) {
        renderer->SubstractView(view);
      }
-     mol::EntityView rv=renderer->GetEffectiveView();
+     mol::EntityView rv=renderer->GetFullView();
      if (rv.IsValid()) {
        renderer->SetSelection(mol::Intersection(sel_, rv));
      }
@@ -691,7 +691,7 @@ void Entity::UpdateSelection()
        e=renderer_.end(); i!=e; ++i) {
     impl::EntityRenderer* renderer=i->second;
     if (renderer->HasDataToRender()) {
-      renderer->SetSelection(mol::Intersection(renderer->GetEffectiveView(), sel_));
+      renderer->SetSelection(mol::Intersection(renderer->GetFullView(), sel_));
       renderer->UpdateViews();
     }
   }  
diff --git a/modules/gfx/src/impl/entity_renderer.cc b/modules/gfx/src/impl/entity_renderer.cc
index 5ba60e936..c28dbf892 100644
--- a/modules/gfx/src/impl/entity_renderer.cc
+++ b/modules/gfx/src/impl/entity_renderer.cc
@@ -153,9 +153,11 @@ bool EntityRenderer::HasSelection() const
 
 void EntityRenderer::SetSelection(const mol::EntityView& sel)
 {
-  full_sel_=sel;
-  sel_=full_sel_;
-  sel_state_=DIRTY_VIEW|DIRTY_VA;
+  if(sel.IsValid()){
+    full_sel_=sel;
+    sel_=(hidden_view_.IsValid())? mol::Difference(full_sel_,hidden_view_) : full_sel_;
+    sel_state_=DIRTY_VIEW|DIRTY_VA;
+  }
 }
 
 void EntityRenderer::SetVisible(const mol::EntityView& view, bool visible)
@@ -169,7 +171,7 @@ void EntityRenderer::SetVisible(const mol::EntityView& view, bool visible)
     hidden_view_=hidden_view_.IsValid() ? Union(hidden_view_, view) : view.Copy();
   }
 
-  sel_=(full_sel_.IsValid()&& hidden_view_.IsValid())? mol::Difference(full_sel_,hidden_view_) : sel_;
+  sel_= hidden_view_.IsValid() ? mol::Difference(full_sel_,hidden_view_) : sel_;
 
   if(full_view_.IsValid()){
     effective_view_=hidden_view_.IsValid() ? mol::Difference(full_view_,hidden_view_): full_view_;
-- 
GitLab