forked from mendix/ExtensionAPI-Samples
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMyEntityContextMenuExtension.cs
More file actions
74 lines (57 loc) · 3.36 KB
/
MyEntityContextMenuExtension.cs
File metadata and controls
74 lines (57 loc) · 3.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System.ComponentModel.Composition;
using Mendix.StudioPro.ExtensionsAPI.Model;
using Mendix.StudioPro.ExtensionsAPI.Model.DomainModels;
using Mendix.StudioPro.ExtensionsAPI.UI.Menu;
using Mendix.StudioPro.ExtensionsAPI.UI.Services;
namespace MyCompany.MyProject.MendixExtension;
[method: ImportingConstructor]
[Export(typeof(ContextMenuExtension<>))]
class MyEntityContextMenuExtension(IMessageBoxService messageBoxService) : ContextMenuExtension<IEntity>
{
MenuViewModel? disabledMenu;
public override IEnumerable<MenuViewModel> GetContextMenus(IEntity entity)
{
var nudgeDownLeft = new MenuViewModel("Left", () => NudgeIt(entity, right: false, down: true));
var nudgeDownLeftRight = new MenuViewModel("Right", () => NudgeIt(entity, right: true, down: true) );
var nudgeDown = new MenuViewModel("Down", [nudgeDownLeft, nudgeDownLeftRight]);
var nudgeUpLeft = new MenuViewModel("Left", () => NudgeIt(entity, right: false, down: false));
var nudgeUpRight = new MenuViewModel("Right", () => NudgeIt(entity, right: true, down: false));
var nudgeUp = new MenuViewModel("Up", [nudgeUpLeft, nudgeUpRight])
{
Separator = MenuSeparator.Before
};
yield return new MenuViewModel("Nudge it!", [nudgeDown, nudgeUp]);
// new group
var randomRenameString = new MenuViewModel("Random string", () => RenameEntity(entity, number: false));
var randomRenameNumber = new MenuViewModel("Random number", () => RenameEntity(entity, number: true));
yield return new MenuViewModel("Randomly rename", [randomRenameString, randomRenameNumber]);
// show location
yield return new MenuViewModel("Show location", () => ShowLocation(entity, messageBoxService));
var showName = new MenuViewModel("Show current name", () => messageBoxService.ShowInformation(entity.Name));
// "Randomly rename" was added previously, thus it will trigger an exception when collected if uncommented
//yield return new MenuViewModel("Randomly rename", [showName]);
// Enabling a disabled menu
disabledMenu ??= new MenuViewModel("Disabled menu", () =>
{
messageBoxService.ShowInformation("I'm enabled now. But not for long!");
disabledMenu!.IsEnabled = false;
}){ IsEnabled = false };
var enablingMenu = new MenuViewModel("Enable disabled menu", () => disabledMenu.IsEnabled = true );
yield return new MenuViewModel("Enabling menus", [disabledMenu, enablingMenu]);
}
void NudgeIt(IEntity entity, bool right, bool down)
{
var incrementRight = right ? 20 : -20;
var incrementDown = down ? 20 : -20;
using var transaction = CurrentApp!.StartTransaction("nudge with context menu");
entity.Location = new Location(entity.Location.X + incrementRight, entity.Location.Y + incrementDown);
transaction.Commit();
}
void RenameEntity(IEntity entity, bool number)
{
using var transaction = CurrentApp!.StartTransaction("rename with context menu");
entity.Name = number ? $"E_{new Random().Next()}" : $"E_{Guid.NewGuid().ToString().Replace("-", "")}";
transaction.Commit();
}
static void ShowLocation(IEntity entity, IMessageBoxService messageBoxService) => messageBoxService.ShowInformation($"X: {entity.Location.X}, Y: {entity.Location.Y}");
}