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

scene win, added some options to context menu

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1797 5a81b35b-ba03-0410-adc8-b2c5c5119f08
parent 27b625a4
No related branches found
No related tags found
No related merge requests found
......@@ -30,7 +30,6 @@
#include <ost/gui/gosty_app.hh>
#include <ost/gui/scene_win/scene_win.hh>
#include <ost/gui/query_dialog.hh>
#include <ost/gui/query_dialog.hh>
#include "scene_selection.hh"
......@@ -147,6 +146,18 @@ void SceneSelection::Select() {
}
}
void SceneSelection::Deselect(){
for(unsigned int i = 0; i < nodes_.size(); i++){
gfx::GfxNodeP node = nodes_[i];
if (node) {
gfx::Entity* obj = dynamic_cast<gfx::Entity*> (node.get());
if (obj) {
obj->SetSelection(obj->GetView().CreateEmptyView());
}
}
}
}
void SceneSelection::CopyViews() {
QueryDialog d;
QList<gfx::GfxObjP> objects_to_add;
......@@ -227,6 +238,34 @@ void SceneSelection::MakeHidden(){
}
}
void SceneSelection::SelectAllViews(){
mol::EntityView union_view = this->GetViewUnion();
if(union_view.IsValid()){
view_entity_->SetSelection(union_view);
}
}
void SceneSelection::DeselectAllViews(){
mol::EntityView sel = view_entity_->GetSelection();
if(sel.IsValid()){
for(unsigned int i= 0; i < views_.size(); i++){
sel = mol::Difference(sel, views_[i].GetEntityView());
}
}
}
void SceneSelection::SelectViews(){
QueryDialog d;
if (d.exec() == QDialog::Accepted) {
QString query = d.GetQueryString();
mol::Query q(query.toStdString());
mol::EntityView union_view = this->GetViewUnion();
if(union_view.IsValid() && q.IsValid()){
view_entity_->SetSelection(union_view.Select(q));
}
}
}
gfx::EntityP SceneSelection::GetViewEntity() const{
return view_entity_;
}
......
......@@ -46,8 +46,12 @@ public slots:
void Delete();
void CopyViews();
void Select();
void Deselect();
void Show();
void Hide();
void SelectAllViews();
void DeselectAllViews();
void SelectViews();
void MakeVisible();
void MakeHidden();
void ShowExclusive();
......
......@@ -19,12 +19,15 @@
/*
Authors: Stefan Scheuber
*/
#include <boost/pointer_cast.hpp>
#include <QAction>
#include <QMenu>
#include <QItemSelection>
#include <QItemSelectionModel>
#include <ost/gui/scene_selection.hh>
#include <ost/gui/query_dialog.hh>
#include "custom_part_node.hh"
#include "entity_node.hh"
......@@ -95,8 +98,12 @@ void ContextMenu::ShowMenu(const QPoint& pos)
if(all_entities){
action = menu->addAction("Copy");
connect(action, SIGNAL(triggered()), SceneSelection::Instance(), SLOT(CopyViews()));
action = menu->addAction("Select");
action = menu->addAction("Create Custom View");
connect(action, SIGNAL(triggered()), this, SLOT(AddViewFromEntity()));
action = menu->addAction("Select..");
connect(action, SIGNAL(triggered()), SceneSelection::Instance(), SLOT(Select()));
action = menu->addAction("Deselect");
connect(action, SIGNAL(triggered()), SceneSelection::Instance(), SLOT(Deselect()));
}
if(all_not_scene){
......@@ -127,6 +134,15 @@ void ContextMenu::ShowMenu(const QPoint& pos)
action = menu->addAction("Hide Exclusive");
connect(action, SIGNAL(triggered()), SceneSelection::Instance(), SLOT(HideExclusive()));
action = menu->addAction("Select All");
connect(action, SIGNAL(triggered()), SceneSelection::Instance(), SLOT(SelectAllViews()));
action = menu->addAction("Deselect All");
connect(action, SIGNAL(triggered()), SceneSelection::Instance(), SLOT(DeselectAllViews()));
action = menu->addAction("Select..");
connect(action, SIGNAL(triggered()), SceneSelection::Instance(), SLOT(SelectViews()));
action = menu->addAction("Create Custom View");
connect(action, SIGNAL(triggered()), this, SLOT(AddView()));
......@@ -150,6 +166,30 @@ void ContextMenu::ShowMenu(const QPoint& pos)
}
}
void ContextMenu::AddViewFromEntity() {
QueryDialog d;
if (d.exec() == QDialog::Accepted) {
QString query = d.GetQueryString();
int node_count = SceneSelection::Instance()->GetActiveNodeCount();
for(int i = 0; i < node_count; i++){
gfx::GfxNodeP node = SceneSelection::Instance()->GetActiveNode(i);
if (node) {
EntityNode* ent_node = qobject_cast<EntityNode*>(model_->FindGfxNode(node));
if (ent_node) {
mol::Query q(query.toStdString());
if (q.IsValid()) {
gfx::EntityP entity = boost::dynamic_pointer_cast<gfx::Entity>(ent_node->GetGfxNode());
if(entity){
CustomPartNode* child_node = new CustomPartNode("New View", entity, mol::QueryViewWrapper(q,entity->GetView()),ent_node->GetCustomViewNode());
model_->AddNode(ent_node->GetCustomViewNode(),child_node);
}
}
}
}
}
}
}
void ContextMenu::AddView(){
gfx::EntityP entity = SceneSelection::Instance()->GetViewEntity();
......
......@@ -42,6 +42,7 @@ public:
void Rename(QModelIndex index);
private slots:
void AddViewFromEntity();
void AddView();
void Rename();
void DeleteView();
......
......@@ -48,9 +48,12 @@ EntityNode::EntityNode(gfx::EntityP& entity, SceneNode* parent):
SceneNode* node = new EntityPartNode("Backbone", entity, mol::QueryViewWrapper(entity->GetView().Select("aname=CA,C,N,O and peptide=true")), quick_selection);
model->AddNode(quick_selection, node);
node = new EntityPartNode("Sidechains", entity, mol::QueryViewWrapper(entity->GetView().Select("aname!=CA,C,N,O and peptide=true")), quick_selection);
model->AddNode(quick_selection, node);
node = new EntityPartNode("Ligands", entity, mol::QueryViewWrapper(entity->GetView().Select("ishetatm=1 and ele=C")), quick_selection);
model->AddNode(quick_selection, node);
custom_view_ = new LabelNode("Custom Views", this);
model->AddNode(this, custom_view_);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment