public IMediaControlPanel CreatePanel(Media data) { Type dataType = data.GetType(); Type panelType = null; if (panelTypes.ContainsKey(dataType)) { panelType = panelTypes[dataType]; } else { foreach (var key in panelTypes.Keys) { if (dataType.IsSubclassOf(key)) { panelType = panelTypes[key]; break; } } } if (panelType != null) { IMediaControlPanel panel = (IMediaControlPanel)System.Activator.CreateInstance(panelType); panel.Init(data); return(panel); } else { throw new ArgumentException("No panel type registered for " + dataType.Name); } }
private void orderList_ActiveItemChanged(object sender, EventArgs e) { OnPropertyChanged("ActiveMedia"); if (ActiveMedia == null) { this.CurrentPanel = null; Controller.PresentationManager.CurrentPresentation = null; } else { var media = ActiveMedia; try { MediaManager.LoadMedia(media); IMediaControlPanel panel = Controller.ControlPanels.CreatePanel(media); if (panel is SongControlPanel) { (panel as SongControlPanel).ShowChords = SongPresentationShowChords; } this.CurrentPanel = panel; } catch (FileNotFoundException) { orderList.ReplaceActive(new FileNotFoundMedia(media.Uri)); } catch (DirectoryNotFoundException) { orderList.ReplaceActive(new FileNotFoundMedia(media.Uri)); } } }