📄 browserview.cpp
字号:
}
}
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 + -