void ItemDocument::raiseZ(const ItemList & itemList) {
	if (m_zOrder.empty()) slotUpdateZOrdering();

	if (m_zOrder.empty()) return;

	IntItemMap::iterator begin = m_zOrder.begin();
	IntItemMap::iterator previous = m_zOrder.end();
	IntItemMap::iterator it = --m_zOrder.end();

	do {
		Item *previousData = (previous == m_zOrder.end()) ? 0 : previous->second;
		Item *currentData = it->second;

		if (currentData && previousData && itemList.contains(currentData) && !itemList.contains(previousData)) {
			previous->second = currentData;
			it->second = previousData;
		}

		previous = it;

		--it;
	} while (previous != begin);

	slotUpdateZOrdering();
}
void ItemDocument::lowerZ(const ItemList &itemList) {
	if (m_zOrder.empty()) slotUpdateZOrdering();

	if (m_zOrder.empty()) return;

	IntItemMap::iterator previous = m_zOrder.begin();
	IntItemMap::iterator end = m_zOrder.end();
	for (IntItemMap::iterator it = m_zOrder.begin(); it != end; ++it) {
		Item *previousData = previous->second;
		Item *currentData = it->second;

		if (currentData && previousData && itemList.contains(currentData) && !itemList.contains(previousData)) {
			previous->second = currentData;
			it->second = previousData;
		}

		previous = it;
	}

	slotUpdateZOrdering();
}