Example #1
0
void CaIjaTable::Display (CTreeCtrl* pTree, HTREEITEM hParent)
{
	HTREEITEM hItem = m_treeCtrlData.GetTreeItem();
	BOOL bMultiple = FALSE;
	CString strDisplay;
#if defined (MULTIPLE_TABLEOWNER)
	//
	// Find if this Item exists in the Tree:
	if (pTree->ItemHasChildren(hParent))
	{
		HTREEITEM hT1 = pTree->GetChildItem(hParent);
		while (hT1)
		{
			CaIjaTreeItemData* pData = (CaIjaTreeItemData*)pTree->GetItemData(hT1);
			if (pData && pData != this)
			{
				if (pData->GetItem().CompareNoCase(m_strItem) == 0)
				{
					if (!pData->GetOwner().IsEmpty())
						AfxFormatString2 (strDisplay, IDS_OWNERxITEM, (LPCTSTR)pData->GetOwner(), (LPCTSTR)pData->GetItem());
					else
						strDisplay = pData->GetItem();
					pTree->SetItemText (hT1, strDisplay);
					bMultiple = TRUE;
					break;
				}
			}
			hT1 = pTree->GetNextItem (hT1, TVGN_NEXT);
		}
	}
	
	if (bMultiple)
		AfxFormatString2 (strDisplay, IDS_OWNERxITEM, (LPCTSTR)m_strOwner, (LPCTSTR)m_strItem);
	else
		strDisplay = m_strItem;

	if (hItem == NULL)
	{
		hItem = IJA_TreeAddItem (strDisplay, pTree, hParent, TVI_SORT, m_treeCtrlData.GetImage(), (DWORD)this);
		m_treeCtrlData.SetTreeItem(hItem);
		GetTreeCtrlData().SetState (CaTreeCtrlData::ITEM_EXIST);
	}
	else
	{
		pTree->SetItemText (hItem, strDisplay);
	}
#else
	if (hItem == NULL)
	{
		if (!m_strItemOwner.IsEmpty())
			AfxFormatString2 (strDisplay, IDS_OWNERxITEM, (LPCTSTR)m_strItemOwner, (LPCTSTR)m_strItem);
		else
			strDisplay = m_strItem;
		hItem = IJA_TreeAddItem (strDisplay, pTree, hParent, TVI_LAST, m_treeCtrlData.GetImage(), (DWORD)this);
		m_treeCtrlData.SetTreeItem(hItem);
	}
#endif
}
Example #2
0
void CaIjaNode::Display (CTreeCtrl* pTree, HTREEITEM hParent)
{
	HTREEITEM hItem = m_treeCtrlData.GetTreeItem();
	//
	// Create this tree item of Node:
	if (hItem == NULL)
	{
		CString strDisplay = m_strItem;
		hItem = IJA_TreeAddItem (strDisplay, pTree, hParent, TVI_SORT, m_treeCtrlData.GetImage(), (DWORD)this);
		m_treeCtrlData.SetTreeItem (hItem);
		GetTreeCtrlData().SetState (CaTreeCtrlData::ITEM_EXIST);
	}

	CaIjaTreeItemData* pData = NULL;
	POSITION p, pos = m_listDatabase.GetHeadPosition();
	//
	// Delete all items if their states are <ITEM_DELETE>
	while (pos != NULL)
	{
		p = pos;
		pData = m_listDatabase.GetNext (pos);
		hItem = pData->GetTreeCtrlData().GetTreeItem();
		if (pData->GetTreeCtrlData().GetState() == CaTreeCtrlData::ITEM_DELETE)
		{
			if (hItem)
				pTree->DeleteItem (hItem);
			pData->GetTreeCtrlData().SetTreeItem(NULL);
			m_listDatabase.RemoveAt (p);
			delete pData;
		}
	}

	//
	// Display the rest of items if their states are <ITEM_NEW>:
	pos = m_listDatabase.GetHeadPosition();
	if (pos == NULL)
	{
		m_EmptyDatabase.Display (pTree, m_treeCtrlData.GetTreeItem());
		return;
	}
	else
	{
		CaTreeCtrlData& emptyDta = m_EmptyDatabase.GetTreeCtrlData();
		if (emptyDta.GetTreeItem())
			pTree->DeleteItem (emptyDta.GetTreeItem());
		emptyDta.SetTreeItem(NULL);
	}

	while (pos != NULL)
	{
		pData = m_listDatabase.GetNext (pos);
		pData->Display (pTree, m_treeCtrlData.GetTreeItem());
	}
}
Example #3
0
BOOL CtrfFolderColumn::RefreshData(CTreeCtrl* pTree, HTREEITEM hItem, CaRefreshTreeInfo* pInfo)
{
	BOOL bOk = FALSE;
	CTypedPtrList< CObList, CaDBObject* > lNew;
	//
	// Refresh only the branch has already been expanded:
	if (pInfo && pInfo->GetAction() == CaRefreshTreeInfo::ACTION_REFRESH && !GetTreeCtrlData().IsAlreadyExpanded())
		return TRUE;
	CaLLQueryInfo* pQueryInfo = GetQueryInfo(NULL);
	ASSERT (pQueryInfo);
	if (!pQueryInfo)
		return FALSE;

	if (GetPfnCOMQueryObject())
		bOk  = GetPfnCOMQueryObject()(GetAptAccess(), pQueryInfo, lNew);
	else
	{
		CmtSessionManager* pSessionManager = GetSessionManager();
		ASSERT (pSessionManager);
		if (!pSessionManager)
			return FALSE;

		if (GetPfnUserQueryObject())
			bOk = GetPfnUserQueryObject()(pQueryInfo, lNew, pSessionManager);
		else
			bOk = INGRESII_llQueryObject (pQueryInfo, lNew, pSessionManager);
	}
	if (!bOk)
		return FALSE;

	//
	// Mark all old object as being deleted:
	CtrfItemData* pObj = NULL;
	POSITION p = NULL, pos = m_listObject.GetHeadPosition();
	while (pos != NULL)
	{
		pObj = m_listObject.GetNext (pos);
		pObj->GetTreeCtrlData().SetState (CaTreeCtrlData::ITEM_DELETE);
	}

	//
	// Add new Objects:
	while (!lNew.IsEmpty())
	{
		CaColumn* pNew = (CaColumn*)lNew.RemoveHead();
		CtrfItemData* pExist = SearchObject(pNew);

		//
		// The new queried object already exists in the old list, we destroy it !
		if (pExist != NULL)
		{
			pExist->GetTreeCtrlData().SetState (CaTreeCtrlData::ITEM_EXIST);
			delete pNew;
			continue;
		}

		//
		// New object that is not in the old list, add it to the list:
		CtrfColumn* pNewObject = new CtrfColumn (pNew);
		pNewObject->SetBackParent (this);
		pNewObject->Initialize();
		m_listObject.AddTail (pNewObject);

		delete pNew;
	}

	//
	// Refresh Sub-Branches ?

	Display (pTree, hItem);
	return TRUE;
}
Example #4
0
BOOL CaIjaTreeData::RefreshData(CTreeCtrl* pTree, HTREEITEM hItem, CaRefreshTreeInfo* pInfo)
{
	BOOL bError = FALSE;
	CTypedPtrList<CObList, CaIjaTreeItemData*> listNode;
	try
	{
		//
		// Refresh only the branch has already been expanded:
		if (!GetTreeCtrlData().IsAlreadyExpanded())
			return TRUE;

		if (!IJA_QueryNode (listNode))
			return FALSE;
	}
	catch (CeSqlException e)
	{
		if (!INGRESII_IsRunning())
		{
			CString strMsg;
			strMsg.LoadString(IDS_INGRES_NOT_RUNNING);
			AfxMessageBox (strMsg);
		}
		else
			AfxMessageBox (e.GetReason());
		bError = TRUE;
	}
	catch (...)
	{
		AfxMessageBox (_T("System error::IJA_QueryNode, failed to query nodes."));
		bError = TRUE;
	}
	if (bError)
	{
		CString csItem;
		csItem.LoadString(IDS_DATA_UNAVAILABLE);
		m_EmptyNode.SetItem(csItem);
		if (pTree && hItem)
			Display (pTree, NULL);
		return FALSE;
	}


	CfMainFrame* pm = (CfMainFrame*)theApp.m_pMainWnd;
	ASSERT (pm);
	if (!pm)
		return FALSE;
	CvViewRight* pV = (CvViewRight*)pm->GetRightView();
	ASSERT (pV);
	if (!pV)
		return FALSE;
	BOOL bAddNode = FALSE;
	if (pV->m_pCtrl && IsWindow (pV->m_pCtrl->m_hWnd))
	{
		pV->m_pCtrl->CleanNode();
		bAddNode = TRUE;
	}
	//
	// Mark all old Node to be deleted:
	POSITION pos = m_listNode.GetHeadPosition();
	while (pos != NULL)
	{
		CaIjaTreeItemData* pItem = m_listNode.GetNext (pos);
		pItem->GetTreeCtrlData().SetState (CaTreeCtrlData::ITEM_DELETE);
	}
	//
	// Add new Node:
	pos = listNode.GetHeadPosition();
	while (pos != NULL)
	{
		CaIjaTreeItemData* pItem = listNode.GetNext (pos);
		CaIjaTreeItemData* pExist = IJA_FindItem (m_listNode, pItem);
		if (pExist)
		{
			pExist->GetTreeCtrlData().SetState (CaTreeCtrlData::ITEM_EXIST);
			delete pItem;
			continue;
		}

		pItem->GetTreeCtrlData().SetState (CaTreeCtrlData::ITEM_NEW);
		m_listNode.AddTail (pItem);
	}

	if (pInfo->m_nLevel == 1 || pInfo->m_nLevel == -1)
	{
		pos = m_listNode.GetHeadPosition();
		while (pos != NULL)
		{
			CaIjaTreeItemData* pItem = m_listNode.GetNext (pos);
			if (pItem->GetTreeCtrlData().GetState () == CaTreeCtrlData::ITEM_DELETE)
				continue;
			CaRefreshTreeInfo info;
			if (pInfo->m_nLevel == 1)
				info.SetInfo (0);
			else
				info.SetInfo (-1);
			pItem->RefreshData (NULL, NULL, &info);
		}
	}

	//
	// Update display of all nodes:
	if (pTree && hItem)
		Display (pTree, NULL);
	if (bAddNode)
	{
		pos = m_listNode.GetHeadPosition();
		while (pos != NULL)
		{
			CaIjaTreeItemData* pItem = m_listNode.GetNext (pos);
			pV->m_pCtrl->AddNode(pItem->GetItem());
		}
	}

	return TRUE;
}
Example #5
0
BOOL CaIjaNode::RefreshData(CTreeCtrl* pTree, HTREEITEM hItem, CaRefreshTreeInfo* pInfo)
{
	CTypedPtrList<CObList, CaIjaTreeItemData*> listDatabase;
	BOOL bError = FALSE;
	try
	{
		//
		// Refresh only the branch has already been expanded:
		if (!GetTreeCtrlData().IsAlreadyExpanded())
			return TRUE;

		if (!IJA_QueryDatabase (m_strItem, listDatabase))
			return FALSE;
	}
	catch (CeSqlException e)
	{
		AfxMessageBox (e.GetReason());
		bError = TRUE;
	}
	catch (...)
	{
		AfxMessageBox (_T("System error::IJA_QueryDatabase, failed to query databases."));
		bError = TRUE;
	}
	if (bError)
	{
		CString csItem;
		csItem.LoadString(IDS_DATA_UNAVAILABLE);
		m_EmptyDatabase.SetItem(csItem);
		if (pTree && hItem)
			Display (pTree, m_treeCtrlData.GetTreeItem());
		return FALSE;
	}


	CTypedPtrList<CObList, CaIjaTreeItemData*>& listOldDatabase = m_listDatabase;
	//
	// Mark all old databases to be deleted:
	POSITION pos = listOldDatabase.GetHeadPosition();
	while (pos != NULL)
	{
		CaIjaTreeItemData* pItem = listOldDatabase.GetNext (pos);
		pItem->GetTreeCtrlData().SetState (CaTreeCtrlData::ITEM_DELETE);
	}
	//
	// Add new Databases:
	pos = listDatabase.GetHeadPosition();
	while (pos != NULL)
	{
		CaIjaTreeItemData* pItem = listDatabase.GetNext (pos);
		CaIjaTreeItemData* pExist = IJA_FindItem (listOldDatabase, pItem);
		if (pExist)
		{
			pExist->GetTreeCtrlData().SetState (CaTreeCtrlData::ITEM_EXIST);
			delete pItem;
			continue;
		}

		pItem->GetTreeCtrlData().SetState (CaTreeCtrlData::ITEM_NEW);
		pItem->SetBackParent (this);
		listOldDatabase.AddTail (pItem);
	}

	if (pInfo->m_nLevel == 1 || pInfo->m_nLevel == -1)
	{
		CaRefreshTreeInfo info;
		pos = listOldDatabase.GetHeadPosition();
		while (pos != NULL)
		{
			CaIjaTreeItemData* pItem = listOldDatabase.GetNext (pos);
			if (pItem->GetTreeCtrlData().GetState () == CaTreeCtrlData::ITEM_DELETE)
				continue;
			info.SetInfo (pInfo->m_nLevel);
			pItem->RefreshData(NULL, NULL, &info);
		}
	}
	//
	// Update display the branches of path <Node>::<Database>:
	if (pTree && hItem)
		Display (pTree, pTree->GetParentItem(hItem));
	return TRUE;
}