void AccessTreeViewListener::OnDropIndex(DesktopDragObject* drag_object, index_gid_t source, index_gid_t dest)
{
	AccessModel* model = static_cast<AccessModel*>(m_treeview.GetTreeModel());
	Indexer* indexer = g_m2_engine->GetIndexer();

	if (dest == 0)
		dest = model->GetCategoryID();
	else if (drag_object->GetInsertType() == DesktopDragObject::INSERT_BEFORE || drag_object->GetInsertType() == DesktopDragObject::INSERT_AFTER)
		dest = indexer->GetIndexById(dest)->GetParentId();

	if (!CanDropIndex(source, dest))
		return;

	// corner case, changing the order of two folders
	OpINT32Vector children;
	indexer->GetChildren(source, children, FALSE);
	if (children.Find(dest) != -1)
	{
		Index* index = indexer->GetIndexById(dest);
			
		while (index->GetParentId() != source)
		{
			index = indexer->GetIndexById(index->GetParentId());
		}

		index->SetParentId(indexer->GetIndexById(source)->GetParentId());
	}

	indexer->GetIndexById(source)->SetParentId(dest);
}
Esempio n. 2
0
OP_STATUS OPMLM2ImportHandler::OnOutlineBegin(const OpStringC& text,
	const OpStringC& xml_url, const OpStringC& title,
	const OpStringC& description)
{
	if (xml_url.HasContent())
	{
		const OpStringC& folder_name = title.HasContent() ? title : text;

		// First we see if this index already exists.
		Index* index = m_indexer->GetSubscribedFolderIndex(m_newsfeed_account, xml_url, 0, folder_name, FALSE, FALSE);
		if (index == 0)
		{
			// Didn't exist; create it.
			if ((index = m_indexer->GetSubscribedFolderIndex(m_newsfeed_account, xml_url, 0, folder_name, TRUE, FALSE)) == 0)
				return OpStatus::ERR;

			g_m2_engine->RefreshFolder(index->GetId());

			if (m_parent_folder)
				index->SetParentId(m_parent_folder->GetId());

			++m_import_count;
		}
	}
	else
	{
		// this is a folder
		m_parent_folder = m_indexer->GetFeedFolderIndexByName(m_parent_folder->GetId(), title.HasContent() ? title : text);
	}

	return OpStatus::OK;
}