/** * Clean up paths that lead nowhere and the root path. * @param source_id ID of the root node. * @param paths Paths to be cleaned up. */ void MultiCommodityFlow::CleanupPaths(NodeID source_id, PathVector &paths) { Path *source = paths[source_id]; paths[source_id] = NULL; for (PathVector::iterator i = paths.begin(); i != paths.end(); ++i) { Path *path = *i; if (path == NULL) continue; if (path->GetParent() == source) path->Detach(); while (path != source && path != NULL && path->GetFlow() == 0) { Path *parent = path->GetParent(); path->Detach(); if (path->GetNumChildren() == 0) { paths[path->GetNode()] = NULL; delete path; } path = parent; } } delete source; paths.clear(); }
inline void PlaneListWidget::EditClicked() { assert(GetList().GetCursorIndex() < list.size()); const unsigned index = GetList().GetCursorIndex(); const Path old_path = list[index].path; const TCHAR *old_filename = list[index].name; Plane plane; PlaneGlue::ReadFile(plane, old_path); while (dlgPlaneDetailsShowModal(plane)) { if (plane.registration.empty()) { ShowMessageBox(_("Please enter the registration of the plane!"), _("Error"), MB_OK); continue; } StaticString<42> filename(plane.registration); filename += _T(".xcp"); if (filename != old_filename) { const auto path = AllocatedPath::Build(old_path.GetParent(), filename); if (File::Exists(path)) { StaticString<256> tmp; tmp.Format(_("Plane \"%s\" already exists. " "Overwrite it?"), plane.registration.c_str()); if (ShowMessageBox(tmp, _("Overwrite"), MB_YESNO) != IDYES) continue; } File::Delete(old_path); PlaneGlue::WriteFile(plane, path); if (Profile::GetPathIsEqual("PlanePath", old_path)) { list[index].path = Path(path); list[index].name = filename; Load(index); } } else { PlaneGlue::WriteFile(plane, old_path); if (Profile::GetPathIsEqual("PlanePath", old_path)) Load(index); } UpdateList(); break; } }
static bool SelectProfile(Path path) { try { if (!CheckProfilePasswordResult(CheckProfileFilePassword(path))) return false; } catch (const std::runtime_error &e) { ShowError(e, _("Password")); return false; } Profile::SetFiles(path); if (RelativePath(path) == nullptr) /* When a profile from a secondary data path is used, this path becomes the primary data path */ SetPrimaryDataPath(path.GetParent()); File::Touch(path); return true; }