public bool Copy(bool run = true)
{
if (_selectedShapes.Count == 0)
return false;
if (run)
{
var buf = SerializeSelected();
var data = new DataObject();
data.SetData("DiagramDocument", buf.ToArray());
var sortedShapes = _selectedShapes.OrderBy(s =>
{
var c = s.BBox.Center();
return c.Y + c.X / 10;
});
var text = StringExt.Join("\n\n", sortedShapes
.Select(s => s.PlainText()).Where(t => !string.IsNullOrEmpty(t)));
if (!string.IsNullOrEmpty(text))
data.SetText(text);
// Crazy Clipboard deletes data by default on app exit!
// need 'true' parameter to prevent loss of data on exit
Clipboard.SetDataObject(data, true);
}
return true;
}