void ChangeJournalWatcher::deleteWithChildren(_i64 frn, _i64 rid) { std::vector<_i64> children=getChildren(frn, rid); deleteEntry(frn, rid); for(size_t i=0;i<children.size();++i) { deleteWithChildren(children[i], rid); } }
void CtrlrPanelCanvas::handleRightClickOnComponent(const MouseEvent &e) { CtrlrComponent *c = findEventComponent(e); if (c == 0) return; if (dynamic_cast<ResizableBorderComponent*>(e.eventComponent) == 0 && getOwner().getSelection()) { getOwner().getSelection()->selectOnly (c); } PopupMenu m; PopupMenu componentSubMenu = CtrlrComponentTypeManager::getComponentMenu(true); m.addSectionHeader ("Actions"); m.addItem (512, "Export component"); m.addItem (513, "Lock", true, c->getProperty(Ids::componentIsLocked)); m.addSectionHeader ("Layout"); m.addItem (1024, "Send to back"); m.addItem (1025, "Send to front"); m.addSubMenu ("Send to layer", getLayerMenu()); m.addSeparator(); m.addSubMenu ("Replace with", componentSubMenu, true); m.addSeparator(); getEditMenu(m); m.addSeparator(); if (CtrlrComponentTypeManager::isGroupingComponent(c)) { m.addItem (1026, "Delete with children"); m.addItem (1027, "Copy with children"); } const int ret = m.show(); if (ret == 512) { exportSelectedComponents(); } else if (ret == 513) { c->setProperty (Ids::componentIsLocked, !c->getProperty(Ids::componentIsLocked)); } if (ret == 1024) { c->toBack(); c->setProperty (Ids::componentSentBack, true); } else if (ret == 1025) { c->toFront(false); c->setProperty (Ids::componentSentBack, false); } else if (ret == 1026) { deleteWithChildren (c); } else if (ret == 1027) { copyWithChildren (c); } else if (ret >= 2048 && ret < 4096) { handleEditMenu (ret, e); } else if (ret >= 4096 && ret < 8192) { handleLayerMenu (ret, e); } else if (ret < 1024 && ret > 10) { PopupMenu::MenuItemIterator iterator((const PopupMenu &)componentSubMenu); while (iterator.next()) { if (iterator.getItem().subMenu) { PopupMenu::MenuItemIterator iterator2(*iterator.getItem().subMenu); while (iterator2.next()) { if (iterator2.getItem().itemID == ret) { if (c) { replaceComponent (c->getOwner(), iterator2.getItem().text); return; } } } } } } }
void ChangeJournalWatcher::updateWithUsn(const std::wstring &vol, const SChangeJournal &cj, const UsnInt *UsnRecord) { //logEntry(vol, UsnRecord); _i64 dir_id=hasEntry(cj.rid, UsnRecord->FileReferenceNumber); if(dir_id!=-1) //Is a directory { _i64 parent_id=hasEntry(cj.rid, UsnRecord->ParentFileReferenceNumber); if(parent_id==-1) { Server->Log(L"Error: Parent of "+UsnRecord->Filename+L" not found -1", LL_ERROR); } else if(UsnRecord->Reason & (USN_REASON_CLOSE | watch_flags ) ) { std::wstring dir_fn=getFilename(UsnRecord->ParentFileReferenceNumber, cj.rid); if(dir_fn.empty()) { Server->Log(L"Error: Path of "+UsnRecord->Filename+L" not found -2", LL_ERROR); } else { if(UsnRecord->Reason & USN_REASON_RENAME_NEW_NAME ) { renameEntry(UsnRecord->Filename, dir_id, UsnRecord->ParentFileReferenceNumber); } else if(UsnRecord->Reason & USN_REASON_FILE_DELETE) { if(UsnRecord->attributes & FILE_ATTRIBUTE_DIRECTORY ) { listener->On_DirRemoved(dir_fn+UsnRecord->Filename); } deleteWithChildren(UsnRecord->FileReferenceNumber, cj.rid); } if(UsnRecord->Reason & watch_flags ) { listener->On_FileModified(dir_fn+UsnRecord->Filename, false ); } } } else if(UsnRecord->Reason & USN_REASON_RENAME_OLD_NAME ) { std::wstring dir_fn=getFilename(UsnRecord->ParentFileReferenceNumber, cj.rid); if(dir_fn.empty()) { Server->Log(L"Error: Path of "+UsnRecord->Filename+L" not found -3", LL_ERROR); } else { if(UsnRecord->attributes & FILE_ATTRIBUTE_DIRECTORY ) { listener->On_DirRemoved(dir_fn+UsnRecord->Filename); } listener->On_FileModified(dir_fn+UsnRecord->Filename, false); } } } else //Is a file { _i64 parent_id=hasEntry(cj.rid, UsnRecord->ParentFileReferenceNumber); if(parent_id==-1) { Server->Log(L"Error: Parent of file "+UsnRecord->Filename+L" not found -4", LL_ERROR); } else { std::wstring dir_fn=getFilename(UsnRecord->ParentFileReferenceNumber, cj.rid); std::wstring real_fn=dir_fn+UsnRecord->Filename; if( UsnRecord->attributes & FILE_ATTRIBUTE_DIRECTORY ) { if((UsnRecord->Reason & USN_REASON_FILE_CREATE) && (UsnRecord->Reason & USN_REASON_CLOSE) ) { addFrn(UsnRecord->Filename, UsnRecord->ParentFileReferenceNumber, UsnRecord->FileReferenceNumber, cj.rid); } } else { if(UsnRecord->Reason & USN_REASON_CLOSE) { std::map<std::wstring, bool>::iterator it=open_write_files.find(real_fn); if(it!=open_write_files.end()) { open_write_files.erase(it); } } else if(UsnRecord->Reason & watch_flags) { open_write_files[real_fn]=true; } } if( (UsnRecord->Reason & USN_REASON_RENAME_OLD_NAME) || (UsnRecord->Reason & watch_flags) && (UsnRecord->Reason & USN_REASON_CLOSE) ) { bool save_fn=false; if( (UsnRecord->Reason & USN_REASON_BASIC_INFO_CHANGE) && (UsnRecord->attributes & FILE_ATTRIBUTE_DIRECTORY)==0 ) { save_fn=true; } listener->On_FileModified(real_fn, save_fn); } } } }