protected override void PrepareMenu(Project project, IEnumerable<TimelineEvent> plays, EventType eventType, Time time,
IList<EventType> eventTypes, bool editableName)
{
bool isLineup = false, isSubstitution = false;
this.plays = plays.ToList ();
this.eventType = eventType;
this.time = time;
this.project = project;
if (eventType != null) {
string label = String.Format ("{0} in {1}", Catalog.GetString ("Add new event"), eventType.Name);
newPlay.SetLabel (label);
newPlay.Visible = true;
} else {
newPlay.Visible = false;
}
if (plays == null) {
plays = new List<TimelineEvent> ();
} else if (plays.Count () == 1) {
isLineup = plays.FirstOrDefault () is LineupEvent;
isSubstitution = plays.FirstOrDefault () is SubstitutionEvent;
}
if (isLineup || isSubstitution) {
edit.Visible = true;
del.Visible = isSubstitution;
snapshot.Visible = moveCat.Visible = drawings.Visible =
addPLN.Visible = render.Visible = duplicate.Visible = false;
} else {
edit.Visible = editableName && this.plays.Count == 1;
snapshot.Visible = this.plays.Count == 1;
drawings.Visible = this.plays.Count == 1 && this.plays.FirstOrDefault ().Drawings.Count > 0;
moveCat.Visible = del.Visible = addPLN.Visible = duplicate.Visible = this.plays.Any ();
}
MenuHelpers.FillExportToVideoFileMenu (render, project, plays, Catalog.GetString ("Export to video file"));
if (plays.Count () > 0) {
string label = String.Format ("{0} ({1})", Catalog.GetString ("Delete"), plays.Count ());
del.SetLabel (label);
label = String.Format ("{0} ({1})", Catalog.GetString ("Duplicate "), plays.Count ());
duplicate.SetLabel (label);
}
if (moveCat.Visible) {
Menu catMenu = new Menu ();
foreach (EventType c in eventTypes) {
if (plays.Any (p => p.EventType == c))
continue;
var item = new MenuItem (c.Name);
catMenu.Append (item);
item.Activated += (sender, e) => {
App.Current.EventsBroker.Publish<MoveToEventTypeEvent> (
new MoveToEventTypeEvent {
TimelineEvents = plays.ToList (),
EventType = c
}
);
};
}
catMenu.ShowAll ();
moveCat.Submenu = catMenu;
}
if (drawings.Visible) {
Menu drawingsMenu = new Menu ();
for (int i = 0; i < plays.FirstOrDefault ().Drawings.Count; i++) {
int index = i;
MenuItem drawingItem = new MenuItem (Catalog.GetString ("Drawing ") + (i + 1));
MenuItem editItem = new MenuItem (Catalog.GetString ("Edit"));
MenuItem deleteItem = new MenuItem (Catalog.GetString ("Delete"));
Menu drawingMenu = new Menu ();
drawingsMenu.Append (drawingItem);
drawingMenu.Append (editItem);
drawingMenu.Append (deleteItem);
editItem.Activated += (sender, e) => {
App.Current.EventsBroker.Publish<DrawFrameEvent> (
new DrawFrameEvent {
Play = plays.FirstOrDefault (),
DrawingIndex = index,
CamConfig = plays.FirstOrDefault ().Drawings [index].CameraConfig,
Current = false
}
);
};
deleteItem.Activated += (sender, e) => {
plays.FirstOrDefault ().Drawings.RemoveAt (index);
plays.FirstOrDefault ().UpdateMiniature ();
};
drawingItem.Submenu = drawingMenu;
drawingMenu.ShowAll ();
}
drawingsMenu.ShowAll ();
drawings.Submenu = drawingsMenu;
}
if (!IsLineupEvent ()) {
MenuHelpers.FillAddToPlaylistMenu (addPLN, project.Playlists, this.plays);
}
}