virtual void InsertObject(void *root,void *userdata,void *obj,Int32 dragtype,void *dragobject,Int32 insertmode, Bool bCopy) { TreeView* pTree = (TreeView*)userdata; if (dragtype == DRAGTYPE_FILES) { Filename* fn = (Filename*)dragobject; if (!fn) return; ((CTreeDialog*)pTree->m_pParent)->OpenDialog(*fn); } if (dragtype == pTree->m_lElementType) { TreeViewItem* pDragItem = (TreeViewItem*)dragobject; TreeViewItem* pDestItem = (TreeViewItem*)obj; if (bCopy) { if (!pDragItem || !pDestItem) return; CTreeDialog* pDlg = (CTreeDialog*)pTree->m_pParent; if (!pDlg) return; CDialogDoc* pDoc = pDlg->GetDocument(); if (!pDoc) return; CDialogItem* pDlgItemDrag = (CDialogItem*)pDragItem->GetData()->GetVoid(TREEVIEW_DATA); CDialogItem* pDlgItemDrop = (CDialogItem*)pDestItem->GetData()->GetVoid(TREEVIEW_DATA); if (!pDlgItemDrag || !pDlgItemDrop) return; pDoc->ExportMacro(GeGetPluginPath() + String("DragDrop.dmf"), pDlgItemDrag); CDialogItem* pNewItem = pDoc->ImportMacro(GeGetPluginPath() + String("DragDrop.dmf"), pDlgItemDrop); GeFKill(GeGetPluginPath() + String("DragDrop.dmf")); if (pNewItem) { TreeViewItem* pNewTreeItem = pNewItem->m_pTreeViewItem; switch (insertmode) { case INSERT_BEFORE: pNewTreeItem->ChangeParent(pDestItem->GetParent(), pDestItem, nullptr); break; case INSERT_UNDER: pNewTreeItem->ChangeParent(pDestItem, nullptr, nullptr); Open(root, userdata, obj, true); break; default: pNewTreeItem->ChangeParent(pDestItem->GetParent(), nullptr, pDestItem); break; } Select(root, userdata, pNewTreeItem, SELECTION_NEW); } } else { switch (insertmode) { case INSERT_BEFORE: pDragItem->ChangeParent(pDestItem->GetParent(), pDestItem, nullptr); break; case INSERT_UNDER: pDragItem->ChangeParent(pDestItem, nullptr, nullptr); Open(root, userdata, obj, true); break; default: pDragItem->ChangeParent(pDestItem->GetParent(), nullptr, pDestItem); break; } } BaseContainer bc; bc.SetInt32(TREEVIEW_MESSAGE_TYPE, TREEVIEW_STRUCTURE_CHANGE); pTree->m_pParent->Command(pTree->m_lTreeID, bc); pTree->m_pTree->Refresh(); } }
Bool ForceOpenFileWrite(BaseFile* pFile, const Filename &fn) { if (pFile->Open(fn, FILEOPEN_WRITE)) return true; String str = GeLoadString(IDS_WRITE_PROTECTION, fn.GetFileString()); if (GeOutString(str, GEMB_ICONQUESTION | GEMB_YESNO) != GEMB_R_YES) return false; GeFKill(fn, GE_FKILL_FORCE); return pFile->Open(fn, FILEOPEN_WRITE); }