Source code for populse_mia.user_interface.data_viewer.anatomist.mia_anatomist
# -*- coding: utf-8 -*-
"""
MIA data viewer implementation based on `Anatomist
<http://brainvisa.info/anatomist/user_doc/index.html>`_
"""
from __future__ import absolute_import, print_function
import os
try:
from anatomist.simpleviewer.anasimpleviewer import AnaSimpleViewer
except ImportError:
print(
"\nAnatomist seems not to be installed. The data_viewer anatomist "
"and anatomist_2 will not work...\n"
)
from soma.qt_gui.qt_backend import Qt
from populse_mia.data_manager.project import COLLECTION_CURRENT, TAG_FILENAME
from populse_mia.user_interface.data_browser.data_browser import (
TableDataBrowser,
)
from ..data_viewer import DataViewer
[docs]
class MiaViewer(Qt.QWidget, DataViewer):
"""
:class:`MIA data viewer <populse_mia.user_interface.data_viewer.data_viewer.DataViewer>` # noqa: E501
implementation based on `PyAnatomist <http://brainvisa.info/pyanatomist/sphinx/index.html>`_ # noqa: E501
"""
[docs]
def __init__(self, init_global_handlers=None):
"""blabla"""
super(MiaViewer, self).__init__()
self.anaviewer = AnaSimpleViewer(init_global_handlers)
# count global number of viewers using anatomist, in order to close it
# nicely
if not hasattr(DataViewer, "mia_viewers"):
DataViewer.mia_viewers = 0
DataViewer.mia_viewers += 1
def findChild(x, y):
return Qt.QObject.findChild(x, Qt.QObject, y)
awidget = self.anaviewer.awidget
toolbar = findChild(awidget, "toolBar")
open_action = findChild(awidget, "fileOpenAction")
db_action = Qt.QAction(open_action.icon(), "filter", awidget)
toolbar.insertAction(open_action, db_action)
db_action.triggered.connect(self.filter_documents)
layout = Qt.QVBoxLayout()
self.setLayout(layout)
self.anaviewer.awidget.setSizePolicy(
Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Expanding
)
layout.addWidget(self.anaviewer.awidget)
self.project = None
self.documents = []
self.displayed = []
[docs]
def display_files(self, files):
"""blabla"""
self.displayed += files
for filename in files:
self.anaviewer.loadObject(filename)
[docs]
def displayed_files(self):
"""blabla"""
return self.displayed
[docs]
def remove_files(self, files):
"""blabla"""
self.anaviewer.deleteObjectsFromFiles(files)
self.files = [doc for doc in self.displayed if doc not in files]
[docs]
def set_documents(self, project, documents):
"""blabla"""
if self.project is not project:
self.clear()
self.project = project
self.documents = documents
[docs]
def filter_documents(self):
"""blabla"""
dialog = Qt.QDialog()
layout = Qt.QVBoxLayout()
dialog.setLayout(layout)
table_data = TableDataBrowser(
self.project,
self,
self.project.session.get_shown_tags(),
False,
True,
link_viewer=False,
)
layout.addWidget(table_data)
hlay = Qt.QHBoxLayout()
layout.addLayout(hlay)
ok = Qt.QPushButton("Display")
hlay.addWidget(ok)
ok.clicked.connect(dialog.accept)
ok.setDefault(True)
cancel = Qt.QPushButton("Cancel")
hlay.addWidget(cancel)
cancel.clicked.connect(dialog.reject)
hlay.addStretch(1)
# Reducing the list of scans to selection
all_scans = table_data.scans_to_visualize
table_data.scans_to_visualize = self.documents
table_data.scans_to_search = self.documents
table_data.update_visualized_rows(all_scans)
res = dialog.exec_()
if res == Qt.QDialog.Accepted:
points = table_data.selectedIndexes()
result_names = []
for point in points:
row = point.row()
# We get the FileName of the scan from the first row
scan_name = table_data.item(row, 0).text()
value = self.project.session.get_value(
COLLECTION_CURRENT, scan_name, TAG_FILENAME
)
value = os.path.abspath(
os.path.join(self.project.folder, value)
)
result_names.append(value)
self.display_files(result_names)
[docs]
def close(self):
"""blabla"""
super(MiaViewer, self).close()
close_ana = False
DataViewer.mia_viewers -= 1 # dec count
if DataViewer.mia_viewers == 0:
close_ana = True
self.anaviewer.closeAll(close_ana)