⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 browserview.cpp

📁 此为Insight opc client InfoServerExplorer源程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
}

void CBrowserView::OnUpdateOpcRefreshgroup(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(IsGroupSelected());
}

void CBrowserView::OnOpcRemoveitem() 
{
	// TODO: Add your command handler code here
	HTREEITEM	item;

	CTreeCtrl& tree = GetTreeCtrl();
	item = tree.GetSelectedItem();
	CItem* pItem = (CItem*) tree.GetItemData(item);
	CGroup*	pGroup = pItem->GetGroup();

	if(pGroup->RemoveItem(&pItem))
	{
		//add group item
		tree.DeleteItem(item);
		GetDocument()->UpdateAllViews(this, 0, NULL);
	}
}

void CBrowserView::OnUpdateOpcRemoveitem(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(IsItemSelected());
}

BOOL CBrowserView::IsItemSelected()
{
	CTreeCtrl& tree = GetTreeCtrl();
	HTREEITEM item = tree.GetSelectedItem();

	if(item != NULL)
	{
		CObject* pObj = (CObject*) tree.GetItemData(item);
		if(pObj != NULL)
		{
			if(pObj->IsKindOf(RUNTIME_CLASS(CItem)))
				return TRUE;
		}
	}

	return FALSE;
}

BOOL CBrowserView::IsGroupSelected()
{
	CTreeCtrl& tree = GetTreeCtrl();
	HTREEITEM item = tree.GetSelectedItem();

	if(item != NULL)
	{
		CObject* pObj = (CObject*) tree.GetItemData(item);
		if(pObj != NULL)
		{
			if(pObj->IsKindOf(RUNTIME_CLASS(CGroup)))
				return TRUE;
		}
	}

	return FALSE;
}


BOOL CBrowserView::IsServerSelected()
{
	CTreeCtrl& tree = GetTreeCtrl();
	HTREEITEM item = tree.GetSelectedItem();

	if(item != NULL)
	{
		CObject* pObj = (CObject*) tree.GetItemData(item);
		if(pObj != NULL)
		{
			if(pObj->IsKindOf(RUNTIME_CLASS(CInfoServer)))
				return TRUE;
		}
	}

	return FALSE;
}
	

void CBrowserView::OnOpcRemovegroup() 
{
	// TODO: Add your command handler code here
	HTREEITEM	item;

	CTreeCtrl& tree = GetTreeCtrl();
	item = tree.GetSelectedItem();
	CGroup* pGroup = (CGroup*) tree.GetItemData(item);

	if(((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->RemoveGroup(&pGroup))
	{
		//remove group item
		tree.DeleteItem(item);
		GetDocument()->UpdateAllViews(this, 0, NULL);
	}
}

void CBrowserView::OnUpdateOpcRemovegroup(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(IsGroupSelected());
}


void CBrowserView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
	// TODO: Add your message handler code here
	UINT		flags;
	HTREEITEM	hTarget;
	CPoint		test_point = point;
	CMenu		menu;
	CTreeCtrl&	tree = GetTreeCtrl();

	CWnd::ScreenToClient(&test_point);

	try
	{
		//select the item first if any	 	
		if( (hTarget = tree.HitTest(test_point,&flags)) ) 	//popup only available if any item
		{													//is selectable 
			tree.SelectItem(hTarget);

				
			VERIFY(menu.LoadMenu(IDR_MAINFRAME));			

			CMenu* pPopup = menu.GetSubMenu(3);
			ASSERT(pPopup != NULL);	

			pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());

			menu.DestroyMenu();

			//popup workaround: 
			tree.SetItemState(hTarget, 0, TVIS_DROPHILITED);
		}
		else
		{
			CTreeView::OnContextMenu(pWnd, point);
		}

		//popup workaround: 
		if (m_pOldSel != NULL) 
		{
			tree.Select(m_pOldSel, TVGN_DROPHILITE);
            m_pOldSel = NULL;        
		}
	}
	catch(...)
	{
		tree.SelectItem(tree.GetRootItem());
	}
}

void CBrowserView::OnOpcReloadfromserver() 
{
	// TODO: Add your command handler code here
	if(((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->ReloadFromServer())
	{
		GetDocument()->UpdateAllViews(NULL, 0, NULL);
	}
	
}

void CBrowserView::OnUpdateOpcReloadfromserver(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CInfoServer* pInfoServer = ((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer();
	
	if(pInfoServer != NULL)
	{
		pCmdUI->Enable(pInfoServer->IsConnected());
	}
	else pCmdUI->Enable(FALSE);
	
}

void CBrowserView::OnOpcClonegroup() 
{
	// TODO: Add your command handler code here
	HTREEITEM		item;
	TV_INSERTSTRUCT	TreeItem;

	TreeItem.hInsertAfter = TVI_SORT;
	TreeItem.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;

	CTreeCtrl& tree = GetTreeCtrl();
	item = tree.GetSelectedItem();
	CGroup* pGroup = (CGroup*) tree.GetItemData(item);

	CGroup*	pNewGroup = NULL;
	if(((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->CloneGroup(pGroup, &pNewGroup))
	{
		//add group item
		HTREEITEM hGroupItem;

		TreeItem.hParent = tree.GetRootItem();
		CString sName = pNewGroup->GetName();
		TreeItem.item.pszText = (LPSTR) sName.GetBuffer(sName.GetLength());
		TreeItem.item.iImage = 1;
		TreeItem.item.iSelectedImage = 1;
		TreeItem.item.lParam = (LONG) pNewGroup;

		hGroupItem = tree.InsertItem(&TreeItem);
		tree.EnsureVisible(hGroupItem);

		//loads the point items for this cloned groupp from the server
		if(pNewGroup->ReloadItems())
		{
			//create items in tree view
			CArray<CItem*, CItem*>*	pItems;
			unsigned int nItems = 0;

			nItems = pNewGroup->GetItems(&pItems);
			for(unsigned int i = 0; i < nItems; i++)
			{
				TreeItem.hParent = hGroupItem;
				CString sName = (*pItems)[i]->GetName();
				TreeItem.item.pszText = (LPSTR) sName.GetBuffer(sName.GetLength());
				TreeItem.item.iImage = 2;
				TreeItem.item.iSelectedImage = 2;
				TreeItem.item.lParam = (LONG) (*pItems)[i];

				tree.EnsureVisible(tree.InsertItem(&TreeItem));
			}
		}

		GetDocument()->SetModifiedFlag();
		GetDocument()->UpdateAllViews(this, 0, NULL);
	}
}

void CBrowserView::OnUpdateOpcClonegroup(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(IsGroupSelected());
}

void CBrowserView::OnOpcReloadserver() 
{
	// TODO: Add your command handler code here
	if(((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->ReloadServer())
	{
		if(IDYES  == AfxMessageBox(_T("Do you want to reload from the server ?"),MB_YESNOCANCEL))
		{
			OnOpcReloadfromserver();
		}
	}
}

void CBrowserView::OnUpdateOpcReloadserver(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CInfoServer* pInfoServer = ((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer();
	
	if(pInfoServer != NULL)
	{
		pCmdUI->Enable(pInfoServer->IsConnected());
	}
	else pCmdUI->Enable(FALSE);
}

void CBrowserView::OnOpcEdititem() 
{
	// TODO: Add your command handler code here
	HTREEITEM		item;

	CTreeCtrl& tree = GetTreeCtrl();
	item = tree.GetSelectedItem();
	CItem* pItem = (CItem*) tree.GetItemData(item);

	pItem->EditItem();

	GetDocument()->UpdateAllViews(this, CONTENT_UPDATE_ONLY, NULL);
}

void CBrowserView::OnUpdateOpcEdititem(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(IsItemSelected());
}

void CBrowserView::OnOpcCancel() 
{
	// TODO: Add your command handler code here
	HTREEITEM	item;
	CGroup*		pGroup = NULL;

	CTreeCtrl& tree = GetTreeCtrl();
	item = tree.GetSelectedItem();
	
	//no virtual functions possible in template classes and or 
	//can a template exist as an object alone ?

	if(IsItemSelected())
	{
		CItem* pItem = (CItem*) tree.GetItemData(item);
		pGroup = pItem->GetGroup();
	}
	else if(IsGroupSelected())
	{
		pGroup = (CGroup*) tree.GetItemData(item);
	}

	if(pGroup != NULL) pGroup->Cancel();
}

void CBrowserView::OnUpdateOpcCancel(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(IsItemSelected() || IsGroupSelected());
}

//popup workaround: 
void CBrowserView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	UINT		uFlags;        
	HTREEITEM	htItem = GetTreeCtrl().HitTest(point, &uFlags);

    if ((htItem != NULL) && (uFlags & TVHT_ONITEM))
		GetTreeCtrl().Select(htItem, TVGN_DROPHILITE);

	CTreeView::OnLButtonDown(nFlags, point);
}

void CBrowserView::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	UINT		uFlags;        
	HTREEITEM	htItem = GetTreeCtrl().HitTest(point, &uFlags);
    
	if ((htItem != NULL) && (uFlags & TVHT_ONITEM)) 
	{
		m_pOldSel = GetTreeCtrl().GetSelectedItem();
		GetTreeCtrl().Select(htItem, TVGN_DROPHILITE);        
	}
}

void CBrowserView::OnOpcOptions() 
{
	// TODO: Add your command handler code here
	COptionsDlg dlg;

	dlg.m_iOPCVersion = (int)((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->GetOPCVersion() - 1;
	dlg.m_iDataChangeType = ((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->GetDataChangeType();
	dlg.m_iReloadEnumNextElements = ((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->GetReloadEnumNextElements();
	dlg.m_iReloadEnumMethod = ((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->GetReloadEnumMethod();
	dlg.m_iBrowserEnumNextElements = ((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->GetBrowserEnumNextElements();
	dlg.m_iReloadEnumAttributesNextElements = ((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->GetReloadEnumAttributesNextElements();
	dlg.m_bValidateItems = ((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->UseValidateItems();

	if(IDOK == dlg.DoModal())
	{
		//update options
		((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->SetOPCVersion((float)dlg.m_iOPCVersion + 1);
		((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->SetDataChangeType(dlg.m_iDataChangeType);
		((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->SetReloadEnumNextElements(dlg.m_iReloadEnumNextElements);
		((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->SetReloadEnumMethod(dlg.m_iReloadEnumMethod);
		((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->SetBrowserEnumNextElements(dlg.m_iBrowserEnumNextElements);
		((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->SetReloadEnumAttributesNextElements(dlg.m_iReloadEnumAttributesNextElements);
		((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->SetUseValidateItems(dlg.m_bValidateItems);
		GetDocument()->SetModifiedFlag();
	}
}

void CBrowserView::OnOpcConnect() 
{
	// TODO: Add your command handler code here
	CInfoServer* pInfoServer = ((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer();

	if(pInfoServer != NULL)
	{
		if(pInfoServer->ChooseServer())
		{
			if(pInfoServer->Connect())
			{
				//add item
				TV_INSERTSTRUCT TreeItem;

				CTreeCtrl& tree = GetTreeCtrl();
				HTREEITEM item = tree.GetSelectedItem();

				TreeItem.hParent = TVI_ROOT;
				CString sName = pInfoServer->GetOPCServerName();
				TreeItem.item.pszText = (LPSTR) sName.GetBuffer(sName.GetLength());
				TreeItem.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
				TreeItem.item.iImage = 0;
				TreeItem.item.iSelectedImage = 0;
				TreeItem.item.lParam = (LONG)pInfoServer;

				tree.EnsureVisible(tree.InsertItem(&TreeItem));
				GetDocument()->SetModifiedFlag();
				GetDocument()->UpdateAllViews(this, 0, NULL);
			}
		}
	}
}

void CBrowserView::OnUpdateOpcConnect(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(!((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->IsConnected());
	
}

void CBrowserView::OnOpcDisconnect() 
{
	// TODO: Add your command handler code here
	CInfoServer* pInfoServer = ((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer();

	if(pInfoServer != NULL)
	{
		if(pInfoServer->Disconnect())
		{
			//remove item
			CTreeCtrl& tree = GetTreeCtrl();

			tree.DeleteAllItems();
			GetDocument()->UpdateAllViews(this, 0, NULL);
		}
	}
}

void CBrowserView::OnUpdateOpcDisconnect(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(IsServerSelected() && ((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->IsConnected());
}

//handle shift-F10
void CBrowserView::OnKeydown(NMHDR* pNMHDR, LRESULT* pResult) 
{
	TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*)pNMHDR;        
	
	if(((GetAsyncKeyState(VK_SHIFT) < 0 ) && 
			(pTVKeyDown->wVKey == VK_F10)) || 
			(GetAsyncKeyState(VK_APPS) < 0 )) 
	{
		HTREEITEM hItem = GetTreeCtrl().GetSelectedItem( );
        CRect rect;
        GetTreeCtrl().GetItemRect( hItem, &rect, TRUE);
        ClientToScreen( rect );
        OnContextMenu( this, CPoint( rect.right, rect.top ) );        
	}    
	
	*pResult = 0;
}



void CBrowserView::OnOpcPrintstatistictologfile() 
{
	((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer()->PrintStatistic();
}

void CBrowserView::OnUpdateOpcPrintstatistictologfile(CCmdUI* pCmdUI) 
{
	CInfoServer* pInfoServer = ((CInfoServerExplorerDoc*)GetDocument())->GetInfoServer();
	
	if(pInfoServer != NULL)
	{
		pCmdUI->Enable(pInfoServer->IsConnected());
	}
	else pCmdUI->Enable(FALSE);
}

void CBrowserView::OnOpcValidateitem() 
{
	// TODO: Add your command handler code here
	HTREEITEM	item;
	CGroup*		pGroup = NULL;

	CTreeCtrl& tree = GetTreeCtrl();
	item = tree.GetSelectedItem();

	if(IsGroupSelected())
	{
		pGroup = (CGroup*) tree.GetItemData(item);
	}

	if(pGroup != NULL)
	{
		CValidateItemDlg dlg(pGroup);

		dlg.DoModal();
	}
}

void CBrowserView::OnUpdateOpcValidateitem(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(IsGroupSelected());
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -