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

ContextMenu, Improved alignment when more two structures are selected

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2047 5a81b35b-ba03-0410-adc8-b2c5c5119f08
parent 54f2f08d
No related branches found
No related tags found
No related merge requests found
...@@ -3,7 +3,98 @@ from PyQt4 import QtCore, QtGui ...@@ -3,7 +3,98 @@ from PyQt4 import QtCore, QtGui
from ost import geom, gfx, gui from ost import geom, gfx, gui
from ost import settings from ost import settings
from ost.bindings import tmtools from ost.bindings import tmtools
class SelectRefDialog(QtGui.QDialog):
def __init__(self, ent_list, parent=None):
QtGui.QDialog.__init__(self, parent)
self.ent_list_ = ent_list
vb = QtGui.QVBoxLayout()
self.setLayout(vb)
self.setWindowTitle("Select Reference Object")
self.label = QtGui.QLabel("Please Select the Reference Object")
self.list = QtGui.QTableWidget(self)
self.list.setColumnCount(2)
self.list.setColumnWidth(0, 30)
self.list.setColumnWidth(1,220)
self.list.verticalHeader().setVisible(False)
self.list.horizontalHeader().setVisible(False)
self.list.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
self.list.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
vb.addWidget(self.label)
vb.addWidget(self.list)
hb = QtGui.QHBoxLayout()
hb.setDirection(QtGui.QBoxLayout.LeftToRight)
cancel_btn = QtGui.QPushButton("Cancel", self)
load_btn = QtGui.QPushButton("Select", self)
hb.addStretch(1)
hb.addWidget(cancel_btn)
hb.addWidget(load_btn)
vb.addItem(hb)
load_btn.setDefault(True)
QtCore.QObject.connect(load_btn, QtCore.SIGNAL("clicked()"), self.Select)
QtCore.QObject.connect(cancel_btn, QtCore.SIGNAL("clicked()"), self.reject)
row = 0
for ent in self.ent_list_:
variant = QtCore.QVariant(ent)
self.list.insertRow(row)
new_item = QtGui.QTableWidgetItem("%i"%(row+1))
new_item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
new_item.setData(QtCore.Qt.UserRole,variant)
self.list.setItem(row, 0, new_item)
new_item = QtGui.QTableWidgetItem(ent.GetName())
new_item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
self.list.setItem(row, 1, new_item)
row += 1
def Select(self):
items = self.list.selectedItems()
for item in items:
if(item.column()==0):
ent = item.data(QtCore.Qt.UserRole).toPyObject()
self.ent_list_.remove(ent)
self.ent_list_.insert(0,ent)
self.accept()
def GetEntities(self):
return self.ent_list_
class ShowResultDialog(QtGui.QDialog):
def __init__(self, ent_list, res_list, parent=None):
QtGui.QDialog.__init__(self, parent)
self.ent_list_ = ent_list
vb = QtGui.QVBoxLayout()
self.setLayout(vb)
self.setWindowTitle("Alignment result")
self.label = QtGui.QLabel("Alignment results with %s as reference"%ent_list[0].GetName())
self.list = QtGui.QTableWidget(self)
self.list.setColumnCount(3)
self.list.verticalHeader().setVisible(False)
self.list.setHorizontalHeaderLabels (["Name","RMSD","TMScore"])
self.list.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
vb.addWidget(self.label)
vb.addWidget(self.list)
hb = QtGui.QHBoxLayout()
hb.setDirection(QtGui.QBoxLayout.LeftToRight)
ok_btn = QtGui.QPushButton("OK", self)
hb.addStretch(1)
hb.addWidget(ok_btn)
vb.addItem(hb)
ok_btn.setDefault(True)
QtCore.QObject.connect(ok_btn, QtCore.SIGNAL("clicked()"), self.accept)
for i in range(0, len(res_list)):
self.list.insertRow(i)
new_item = QtGui.QTableWidgetItem(ent_list[i+1].GetName())
new_item.setFlags(QtCore.Qt.ItemIsEnabled)
self.list.setItem(i, 0, new_item)
new_item = QtGui.QTableWidgetItem("%.2f"%res_list[i].rmsd)
new_item.setFlags(QtCore.Qt.ItemIsEnabled)
self.list.setItem(i, 1, new_item)
new_item = QtGui.QTableWidgetItem("%i"%res_list[i].tm_score)
new_item.setFlags(QtCore.Qt.ItemIsEnabled)
self.list.setItem(i, 2, new_item)
class AlignmentContextMenu(QtCore.QObject): class AlignmentContextMenu(QtCore.QObject):
def __init__(self, context_menu): def __init__(self, context_menu):
try: try:
...@@ -12,27 +103,43 @@ class AlignmentContextMenu(QtCore.QObject): ...@@ -12,27 +103,43 @@ class AlignmentContextMenu(QtCore.QObject):
self.action = QtGui.QAction("Align", self) self.action = QtGui.QAction("Align", self)
QtCore.QObject.connect(self.action,QtCore.SIGNAL("triggered()"), self.Align) QtCore.QObject.connect(self.action,QtCore.SIGNAL("triggered()"), self.Align)
print gui.ContextActionType.ENTITY | gui.ContextActionType.MULTI
context_menu.AddAction(self.action, gui.ContextActionType.ENTITY | gui.ContextActionType.MULTI) context_menu.AddAction(self.action, gui.ContextActionType.ENTITY | gui.ContextActionType.MULTI)
except settings.FileNotFound: except settings.FileNotFound:
return return
def Align(self): def Align(self):
scene_selection = gui.SceneSelection.Instance() scene_selection = gui.SceneSelection.Instance()
if scene_selection.GetActiveNodeCount() >= 2: ent_list = list()
node = scene_selection.GetActiveNode(0) for i in range(0,scene_selection.GetActiveNodeCount()):
if isinstance(node, gfx.Entity): ent_list.append(scene_selection.GetActiveNode(i))
ref = node.view.handle if len(ent_list) == 2:
for i in range(1,scene_selection.GetActiveNodeCount()): self.__Align(ent_list)
node = scene_selection.GetActiveNode(i) elif len(ent_list) > 2:
if isinstance(node, gfx.Entity): sd = SelectRefDialog(ent_list)
print tmtools.TMAlign(node.view.handle, ref) if(sd.exec_()):
node.UpdatePositions() self.__Align(sd.GetEntities())
def __Align(self, ent_list):
node = ent_list[0]
res_list = list()
if isinstance(node, gfx.Entity):
ref = node.view.handle
for i in range(1,len(ent_list)):
node = ent_list[i]
if isinstance(node, gfx.Entity):
res_list.append(tmtools.TMAlign(node.view.handle, ref))
node.UpdatePositions()
self.__ShowScore(ent_list, res_list)
def __ShowScore(self, ent_list, res_list):
if(len(res_list)==1):
res = res_list[0]
string = "RMSD: %.2f, TMScore: %i"%(res.rmsd, res.tm_score)
gui.GostyApp.Instance().perspective.StatusMessage(string)
elif(len(res_list)>1):
ShowResultDialog(ent_list, res_list).exec_()
def _InitContextMenu(): def _InitContextMenu():
cm=gui.GostyApp.Instance().GetSceneWin().GetContextMenu() cm=gui.GostyApp.Instance().GetSceneWin().GetContextMenu()
AlignmentContextMenu(cm) AlignmentContextMenu(cm)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment