Source code for openalea.oalab.project.qtmodel
# -*- python -*-
#
# OpenAlea.OALab: Multi-Paradigm GUI
#
# Copyright 2013-2015 INRIA - CIRAD - INRA
#
# File author(s): Julien Coste <julien.coste@inria.fr>
# Guillaume Baty <guillaume.baty@inria.fr>
#
# File contributor(s):
#
# Distributed under the Cecill-C License.
# See accompanying file LICENSE.txt or copy at
# http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html
#
# OpenAlea WebSite : http://openalea.gforge.inria.fr
#
###############################################################################
from openalea.oalab.service.drag_and_drop import add_drag_format, encode_to_qmimedata
from openalea.vpltk.qt import QtGui, QtCore
from openalea.oalab.utils import obj_icon, qicon
import openalea.oalab
[docs]class ProjectModel(QtGui.QStandardItemModel):
def __init__(self):
QtGui.QStandardItemModel.__init__(self)
self._data = {}
self._root_item = None
self._project = None
add_drag_format(self, 'openalealab/data')
add_drag_format(self, 'openalealab/model')
[docs] def dropMimeData(self, data, action, row, column, parent):
return False
[docs] def set_project(self, project):
self._project = project
self.refresh()
[docs] def project(self):
return self._project
[docs] def refresh(self):
self.clear()
project = self._project
if project is None:
return
icons = dict(
project=QtGui.QIcon(":/images/resources/openalea_icon2.png"),
src=QtGui.QIcon(":/images/resources/filenew.png"),
control=QtGui.QIcon(":/images/resources/node.png"),
world=QtGui.QIcon(":/images/resources/plant.png"),
startup=QtGui.QIcon(":/images/resources/editredo.png"),
data=qicon("Crystal_Clear_filesystem_folder_grey_open.png"),
doc=QtGui.QIcon(":/images/resources/book.png"),
cache=QtGui.QIcon(":/images/resources/editcopy.png"),
model=qicon("icons/Crystal_Clear_app_kservices.png"),
lib=QtGui.QIcon(":/images/resources/codefile-red.png"),
)
name = project.name
parentItem = self.invisibleRootItem()
item = QtGui.QStandardItem(project.label)
self._root_item = name
item.setIcon(obj_icon(project, default=icons['project'], paths=[project.path]))
parentItem.appendRow(item)
for category in project.categories:
item2 = QtGui.QStandardItem(category)
item.appendRow(item2)
if category in icons:
item2.setIcon(icons[category])
if not hasattr(project, category):
continue
data_dict = getattr(project, category)
names = data_dict.keys()
for name in sorted(names):
data = data_dict[name]
item3 = QtGui.QStandardItem(name)
item3.setIcon(obj_icon(data, packages=[openalea.oalab]))
item3.setData((category, data))
item2.appendRow(item3)
[docs] def projectdata(self, index):
if index is None:
return None
if self._project is None:
return
if index.parent().data() in self._project.categories:
category = index.parent().data()
name = index.data()
return category, name
elif index.data() in self._project.categories:
return ('category', index.data())
elif index.data() == self._root_item:
return ('project', index.data())
else:
return None
[docs] def mimeData(self, indices):
for index in indices:
pass
category, name = self.projectdata(index)
if category in ('model', 'data'):
data = self._project.get_item(category, name)
return encode_to_qmimedata(data, 'openalealab/%s' % category)
else:
# QtGui.QStandardItemModel.mimeData(self, indices)
return QtCore.QMimeData()