bool wxGxContentView::OnDropObjects(wxCoord x, wxCoord y, const wxArrayString& GxObjects, bool bIsControlOn) { bool bMove = !bIsControlOn; SetItemState(m_HighLightItem, 0, wxGISLIST_STATE_DROPHILITED); //SetItemState(m_HighLightItem, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); wxPoint pt(x, y); unsigned long nFlags(0); long nItemId = HitTest(pt, (int &)nFlags); long nObjectID(m_nParentGxObjectID); if(nItemId != wxNOT_FOUND && (nFlags & wxLIST_HITTEST_ONITEM)) { LPITEMDATA pItemData = (LPITEMDATA)GetItemData(nItemId); nObjectID = pItemData->nObjectID; } wxGxObject* pGxObject = m_pCatalog->GetRegisterObject(nObjectID); IGxDropTarget* pTarget = dynamic_cast<IGxDropTarget*>(pGxObject); if(pTarget) { wxDragResult res(bMove == true ? wxDragMove : wxDragCopy); if(wxIsDragResultOk(pTarget->CanDrop(res))) return pTarget->Drop(GxObjects, bMove); } return false; }
wxDragResult wxGxTreeView::OnDragOver(wxCoord x, wxCoord y, wxDragResult def) { if(m_HighLightItemId.IsOk()) SetItemDropHighlight(m_HighLightItemId, false); wxPoint pt(x, y); int flag = wxTREE_HITTEST_ONITEMINDENT; wxTreeItemId ItemId = wxTreeCtrl::HitTest(pt, flag); if(ItemId.IsOk()) { wxSize sz = GetClientSize(); if(DNDSCROLL > y)//scroll up ScrollLines(-1); else if((sz.GetHeight() - DNDSCROLL) < y)//scroll down ScrollLines(1); SetItemDropHighlight(ItemId); m_HighLightItemId = ItemId; wxGxTreeItemData* pData = (wxGxTreeItemData*)GetItemData(ItemId); if(pData == NULL) return wxDragNone; //check drop capability wxGxObject* pGxObject = m_pCatalog->GetRegisterObject(pData->m_nObjectID); IGxDropTarget* pTarget = dynamic_cast<IGxDropTarget*>(pGxObject); if(pTarget == NULL) return wxDragNone; return pTarget->CanDrop(def); } return def; }
bool wxGxTreeView::OnDropObjects(wxCoord x, wxCoord y, const wxArrayString& GxObjects) { bool bMove = !wxGetKeyState(WXK_CONTROL); wxPoint pt(x, y); int flag = wxTREE_HITTEST_ONITEMINDENT; wxTreeItemId ItemId = wxTreeCtrl::HitTest(pt, flag); if(ItemId.IsOk()) { SetItemDropHighlight(ItemId, false); wxGxTreeItemData* pData = (wxGxTreeItemData*)GetItemData(ItemId); if(pData == NULL) return wxDragNone; wxGxObject* pGxObject = m_pCatalog->GetRegisterObject(pData->m_nObjectID); IGxDropTarget* pTarget = dynamic_cast<IGxDropTarget*>(pGxObject); if(pTarget) { wxDragResult res(bMove == true ? wxDragMove : wxDragCopy); if(wxIsDragResultOk(pTarget->CanDrop(res))) return pTarget->Drop(GxObjects, bMove); } } return false; }
bool wxGISCatalogMainCmd::GetEnabled(void) { wxCHECK_MSG(m_pGxApp, false, wxT("Application pointer is null")); wxGxSelection* pSel = m_pGxApp->GetGxSelection(); wxGxCatalogBase* pCat = GetGxCatalog(); switch(m_subtype) { case 0://Up One Level if(pCat && pSel) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetFirstSelectedObjectId()); return pGxObject != NULL && pGxObject->GetParent(); } return false; case 1: return true; case 2: //check if wxGxDiscConnection if(pCat && pSel) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetFirstSelectedObjectId()); return pGxObject != NULL && pGxObject->IsKindOf(wxCLASSINFO(wxGxDiscConnection)); } return false; case 3: return true; case 4://delete if(pCat && pSel) { for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxObjectEdit* pGxObjectEdit = dynamic_cast<IGxObjectEdit*>(pGxObject); if(pGxObjectEdit && pGxObjectEdit->CanDelete()) return true; } } return false; case 5: if(pSel) return pSel->CanUndo(); return false; case 6: if(pSel) return pSel->CanRedo(); return false; case 7: if(pCat && pSel) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetFirstSelectedObjectId()); wxGxObjectContainer* pCont = wxDynamicCast(pGxObject, wxGxObjectContainer); if(pCont) return pCont->CanCreate(enumGISContainer, enumContFolder); } return false; case 8://Rename if(pCat && pSel) { size_t nCounter(0); for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxObjectEdit* pGxObjectEdit = dynamic_cast<IGxObjectEdit*>(pGxObject); if(pGxObjectEdit && pGxObjectEdit->CanRename()) nCounter++; } return nCounter == 1 ? true : false; } return false; case 9://Refresh if(pSel) return pSel->GetCount() > 0; return false; case 10://Properties //check if IGxObjectEditUI if(pCat && pSel) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetLastSelectedObjectId()); return dynamic_cast<IGxObjectEditUI*>(pGxObject); } return false; case 11://Copy if(pCat && pSel) { for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxObjectEdit* pGxObjectEdit = dynamic_cast<IGxObjectEdit*>(pGxObject); if(pGxObjectEdit && pGxObjectEdit->CanCopy("")) return true; } } return false; case 12://Cut if(pCat && pSel) { for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxObjectEdit* pGxObjectEdit = dynamic_cast<IGxObjectEdit*>(pGxObject); if(pGxObjectEdit && pGxObjectEdit->CanMove("")) return true; } } return false; case 13://Paste { IViewDropTarget* pViewDropTarget = dynamic_cast<IViewDropTarget*>(wxWindow::FindFocus()); if(pViewDropTarget) { if( pViewDropTarget->CanPaste() ) { wxClipboardLocker locker; bool bMove(false); if(!locker) { // } else { wxTextDataObject data; if(wxTheClipboard->GetData( data )) { if(data.GetText() == wxString(wxT("cut"))) bMove = true; } } for(size_t i = 0; i < pSel->GetCount(); ++i) { IGxDropTarget* pGxDropTarget = dynamic_cast<IGxDropTarget*>(pCat->GetRegisterObject(pSel->GetSelectedObjectId(i))); if(pGxDropTarget && wxIsDragResultOk(pGxDropTarget->CanDrop(bMove == true ? wxDragMove : wxDragCopy))) return true; } } } } return false; default: return false; } }