def generate_version_row(cls, parent, pseudo_model, version): """Generates a new version row :return: """ # column 0 version_item = VersionItem(0, 0) version_item.parent = parent version_item.pseudo_model = pseudo_model version_item.version = version version_item.setEditable(False) reference_resolution = pseudo_model.reference_resolution if version in reference_resolution['update']: action = 'update' font_color = QtGui.QColor(192, 128, 0) if version in reference_resolution['root']: version_item.setCheckable(True) version_item.setCheckState(QtCore.Qt.Checked) elif version in reference_resolution['create']: action = 'create' font_color = QtGui.QColor(192, 0, 0) if version in reference_resolution['root']: version_item.setCheckable(True) version_item.setCheckState(QtCore.Qt.Checked) else: font_color = QtGui.QColor(0, 192, 0) action = '' version_item.action = action set_item_color(version_item, font_color) # thumbnail thumbnail_item = QtGui.QStandardItem() thumbnail_item.setEditable(False) # thumbnail_item.setText('no thumbnail') thumbnail_item.version = version thumbnail_item.action = action set_item_color(thumbnail_item, font_color) # Nice Name nice_name_item = QtGui.QStandardItem() nice_name_item.toolTip() nice_name_item.setText('%s_v%s' % (version.nice_name, ('%s' % version.version_number).zfill(3))) nice_name_item.setEditable(False) nice_name_item.version = version nice_name_item.action = action set_item_color(nice_name_item, font_color) # Take take_item = QtGui.QStandardItem() take_item.setEditable(False) take_item.setText(version.take_name) take_item.version = version take_item.action = action set_item_color(take_item, font_color) # Current current_version_item = QtGui.QStandardItem() current_version_item.setText('%s' % version.version_number) current_version_item.setEditable(False) current_version_item.version = version current_version_item.action = action set_item_color(current_version_item, font_color) # Latest latest_published_version = version.latest_published_version latest_published_version_item = QtGui.QStandardItem() latest_published_version_item.version = version latest_published_version_item.action = action latest_published_version_item.setEditable(False) latest_published_version_text = 'No Published Version' if latest_published_version: latest_published_version_text = '%s' % \ latest_published_version.version_number latest_published_version_item.setText(latest_published_version_text) set_item_color(latest_published_version_item, font_color) # Action action_item = QtGui.QStandardItem() action_item.setEditable(False) action_item.setText(action) action_item.version = version action_item.action = action set_item_color(action_item, font_color) # Updated By updated_by_item = QtGui.QStandardItem() updated_by_item.setEditable(False) updated_by_text = '' if latest_published_version and latest_published_version.updated_by: updated_by_text = latest_published_version.updated_by.name updated_by_item.setText(updated_by_text) updated_by_item.version = version updated_by_item.action = action set_item_color(updated_by_item, font_color) # Description description_item = QtGui.QStandardItem() if latest_published_version: description_item.setText(latest_published_version.description) description_item.setEditable(False) description_item.version = version description_item.action = action set_item_color(description_item, font_color) # # Path # path_item = QtGui.QStandardItem() # if latest_published_version: # path_item.setText(version.absolute_full_path) # path_item.setEditable(True) # set_item_color(path_item, font_color) return [ version_item, thumbnail_item, nice_name_item, take_item, current_version_item, latest_published_version_item, action_item, updated_by_item, description_item ]
def fetchMore(self): logger.debug('TaskItem.fetchMore() is started for item: %s' % self.text()) if self.canFetchMore(): from sqlalchemy.orm import aliased from sqlalchemy.dialects.postgresql import array_agg from stalker import Task, User from stalker.models.task import Task_Resources from stalker.db.session import DBSession inner_tasks = aliased(Task) subquery = DBSession.query(Task.id) \ .filter(Task.id == inner_tasks.parent_id) query = DBSession.query( Task.id, Task.name, Task.entity_type, Task.status_id, subquery.exists().label('has_children'), array_agg(User.name).label('resources') ) \ .outerjoin(Task_Resources, Task.__table__.c.id == Task_Resources.c.task_id) \ .outerjoin(User, Task_Resources.c.resource_id == User.id) \ .group_by( Task.id, Task.name, Task.entity_type, Task.status_id, subquery.exists().label('has_children') ) if self.task.entity_type != 'Project': # query child tasks query = query.filter(Task.parent_id == self.task.id) else: # query only root tasks query = query.filter(Task.project_id == self.task.id)\ .filter(Task.parent_id==None) tasks = query.order_by(Task.name).all() # # model = self.model() # This will cause a SEGFAULT # # TODO: update it later on # start = time.time() from anima import defaults task_items = [] for task in tasks: task_item = TaskItem(0, 4, task=task) task_item.parent = self # color with task status task_item.setData( QtGui.QColor( *defaults.status_colors_by_id[task.status_id]), QtCore.Qt.BackgroundRole) # use black text task_item.setForeground(QtGui.QBrush(QtGui.QColor(0, 0, 0))) task_items.append(task_item) if task_items: # self.appendRows(task_items) for task_item in task_items: # TODO: Create a custom QStandardItem for each data type in different columns entity_type_item = QtGui.QStandardItem() entity_type_item.setData(task_item.task.entity_type, QtCore.Qt.DisplayRole) resources_item = QtGui.QStandardItem() if task_item.task.resources != [None]: resources_item.setData( ', '.join(map(str, task_item.task.resources)), QtCore.Qt.DisplayRole) self.appendRow( [task_item, entity_type_item, resources_item]) self.fetched_all = True logger.debug('TaskItem.fetchMore() is finished for item: %s' % self.text())