コード例 #1
0
        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);
            }
        }
コード例 #2
0
 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));
         }
     }
 }