private void OtherToolsDropdown(ImGui gui, ref bool closed) { if (gui.BuildContextMenuButton("Duplicate page")) { closed = true; var project = editingPage.owner; var collector = new ErrorCollector(); var serializedCopy = JsonUtils.Copy(editingPage, project, collector); if (collector.severity > ErrorSeverity.None) { ErrorListPanel.Show(collector); } if (serializedCopy != null) { serializedCopy.GenerateNewGuid(); serializedCopy.icon = icon; serializedCopy.name = name; project.RecordUndo().pages.Add(serializedCopy); MainScreen.Instance.SetActivePage(serializedCopy); Close(); } } if (gui.BuildContextMenuButton("Share (export string to clipboard)")) { closed = true; var data = JsonUtils.SaveToJson(editingPage); using (var targetStream = new MemoryStream()) { using (var compress = new DeflateStream(targetStream, CompressionLevel.Optimal, true)) { using (var writer = new BinaryWriter(compress, Encoding.UTF8, true)) { // write some magic chars and version as a marker writer.Write("YAFC\nProjectPage\n".AsSpan()); writer.Write(YafcLib.version.ToString().AsSpan()); writer.Write("\n\n\n".AsSpan()); } data.CopyTo(compress); } var encoded = Convert.ToBase64String(targetStream.GetBuffer(), 0, (int)targetStream.Length); SDL.SDL_SetClipboardText(encoded); } } }
public override void Build(ImGui gui) { gui.spacing = 3f; BuildHeader(gui, editingPage == null ? "Create new page" : "Edit page icon and name"); Build(gui, ref name, icon, s => { icon = s; Rebuild(); }); using (gui.EnterRow(0.5f, RectAllocator.RightRow)) { if (editingPage == null && gui.BuildButton("Create", active: !string.IsNullOrEmpty(name))) { callback?.Invoke(name, icon); Close(); } if (editingPage != null && gui.BuildButton("OK", active: !string.IsNullOrEmpty(name))) { if (editingPage.name != name || editingPage.icon != icon) { editingPage.RecordUndo(true).name = name; editingPage.icon = icon; } Close(); } if (gui.BuildButton("Cancel", SchemeColor.Grey)) { Close(); } if (editingPage != null && gui.BuildButton("Duplicate page", SchemeColor.Grey, active: !string.IsNullOrEmpty(name))) { var project = editingPage.owner; var collector = new ErrorCollector(); var serializedCopy = JsonUtils.Copy(editingPage, project, collector); if (collector.severity > ErrorSeverity.None) { ErrorListPanel.Show(collector); } if (serializedCopy != null) { serializedCopy.GenerateNewGuid(); serializedCopy.icon = icon; serializedCopy.name = name; project.RecordUndo().pages.Add(serializedCopy); MainScreen.Instance.SetActivePage(serializedCopy); Close(); } } gui.allocator = RectAllocator.LeftRow; if (editingPage != null && gui.BuildRedButton("Delete page") == ImGuiUtils.Event.Click) { Project.current.RecordUndo().pages.Remove(editingPage); Close(); } } }