UINT32 GalleryLineDragInfo::GetCursorID(DragTarget* pDragTarget) { if (pDragTarget && pDragTarget->IS_KIND_OF(ViewDragTarget)) { PageDropInfo PageDropInfo; ((ViewDragTarget*)pDragTarget)->GetDropInfo(&PageDropInfo); NodeRenderableInk* pObjectHit = PageDropInfo.pObjectHit; ObjectDragTarget TargetHit = PageDropInfo.TargetHit; if (IS_A(pAttr, AttrStartArrow) || IS_A(pAttr, AttrEndArrow)) { if (pObjectHit && pObjectHit->IS_KIND_OF(NodePath)) { Path* pPath = &((NodePath*)pObjectHit)->InkPath; BOOL IsStart; if (DropStartOrEndArrow(pPath, PageDropInfo.DropPos, &IsStart)) { TargetHit = IsStart ? STARTCOL_TARGET : ENDCOL_TARGET; } } } ClickModifiers ClickMods = ClickModifiers::GetClickModifiers(); BOOL IsInside = ClickMods.Constrain; if (!IsInside && pObjectHit && pObjectHit->IsCompound()) { TargetHit = MANY_TARGET; } switch (TargetHit) { case FILL_TARGET: return IsInside ? _R(IDC_DROPINSIDEONLINE) : _R(IDC_CANDROPONLINE); case LINE_TARGET: return IsInside ? _R(IDC_DROPINSIDEONLINE) : _R(IDC_CANDROPONLINE); case STARTCOL_TARGET: return IsInside ? _R(IDC_DROPINSIDEONFILLSTART) : _R(IDC_CANDROPONFILLSTART); case ENDCOL_TARGET: return IsInside ? _R(IDC_DROPINSIDEONFILLEND) : _R(IDC_CANDROPONFILLEND); case MANY_TARGET: return IsInside ? _R(IDC_DROPINSIDEONLINE) : _R(IDC_CANDROPONLINE); case NO_TARGET: return _R(IDC_CANDROPONPAGE); default: break; }; return _R(IDC_CANDROPONPAGE); } return _R(IDC_CANTDROP); }
BOOL GalleryLineDragInfo::OnPageDrop(ViewDragTarget* pDragTarget) { PageDropInfo PageDropInfo; ((ViewDragTarget*)pDragTarget)->GetDropInfo(&PageDropInfo); NodeRenderableInk* pObjectHit = PageDropInfo.pObjectHit; NodeAttribute* Attrib = SourceItem->CreateNewAttribute(IsAnAdjustDrag()); if (Attrib == NULL) return FALSE; if (pObjectHit && (IS_A(Attrib, AttrStartArrow) || IS_A(Attrib, AttrEndArrow))) { if (!pObjectHit->IS_KIND_OF(NodePath)) { delete Attrib; return FALSE; } Path* pPath = &((NodePath*)pObjectHit)->InkPath; BOOL IsStart; if (!DropStartOrEndArrow(pPath, PageDropInfo.DropPos, &IsStart)) { delete Attrib; return FALSE; } Attrib = MakeStartOrEndArrow(Attrib, IsStart); } if (pObjectHit) { // Hit a Line Object, so apply attribute to it AttributeManager::ApplyAttribToNode(pObjectHit, Attrib); } else { // Didn't hit anything, so just set the current attribute AttributeManager::AttributeSelected(Attrib); } return TRUE; }