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 }
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()); } }
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; }
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; }
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; }