Пример #1
0
        private void ShowAddMediaDialog()
        {
            var typeFilters = new List <string>();

            typeFilters.Add(Resource.vFilterSupportedMediaTypes + "|" + String.Join(";", (from h in MediaManager.Handlers from ext in h.Extensions select "*" + ext).Distinct()));
            typeFilters.AddRange(from h in MediaManager.Handlers select h.Description + "|" + String.Join(";", h.Extensions.Select(s => "*" + s)));
            typeFilters.Add(Resource.vFilterAllFiles + "|*");

            var dlg = new Microsoft.Win32.OpenFileDialog();

            dlg.Title            = Resource.vMenuAddMedia;
            dlg.Filter           = String.Join("|", typeFilters);
            dlg.Multiselect      = true;
            dlg.InitialDirectory = Properties.Settings.Default.LastMediaDirectory;

            if (dlg.ShowDialog() == true)
            {
                Properties.Settings.Default.LastMediaDirectory = Path.GetDirectoryName(dlg.FileNames[0]);

                MediaOrderItem inserted = null;

                var selectedMedia = OrderListBox.SelectedItem as MediaOrderItem;
                int insertionIndex;
                if (selectedMedia != null)
                {
                    insertionIndex = orderList.IndexOf(selectedMedia) + 1;
                }
                else
                {
                    insertionIndex = orderList.Count;
                }

                if (dlg.FileNames.Count() > 1)
                {
                    foreach (var m in MediaManager.LoadMultipleMediaMetadata(dlg.FileNames.Select(f => new Uri(f))))
                    {
                        inserted = orderList.Insert(insertionIndex++, m);
                    }
                }
                else
                {
                    inserted = orderList.Insert(insertionIndex, MediaManager.LoadMediaMetadata(new Uri(dlg.FileName), null));
                }

                OrderListBox.SelectedItem = inserted;

                portfolioModified = true;
            }
        }
Пример #2
0
        void OrderListBox_Drop(object sender, DragEventArgs e)
        {
            try
            {
                this.RemoveInsertionAdorner();

                int index = OrderListBox.GetIndexAtPosition(e.GetPosition(OrderListBox));

                FrameworkElement container;
                bool             isInFirstHalf = false;

                if (index >= 0)
                {
                    container     = OrderListBox.ItemContainerGenerator.ContainerFromIndex(index) as FrameworkElement;
                    isInFirstHalf = e.GetPosition(container).IsInFirstHalf(container, true);
                }
                else
                {
                    index = OrderListBox.HasItems ? OrderListBox.Items.Count - 1 : 0;
                }

                // Data comes from list itself
                if (e.Data.GetData(typeof(MediaOrderItem)) != null)
                {
                    if (oldIndex < 0 || index == oldIndex)
                    {
                        return;
                    }

                    if (index < oldIndex)
                    {
                        index++;
                    }

                    if (isInFirstHalf)
                    {
                        index--;
                    }

                    MediaOrderItem movedItem = orderList[oldIndex];

                    if (index < 0)
                    {
                        orderList.Move(new MediaOrderItem[] { movedItem }, orderList.Count - oldIndex - 1);
                    }
                    else
                    {
                        orderList.Move(new MediaOrderItem[] { movedItem }, index - oldIndex);
                    }

                    oldIndex = -1;
                }
                // Data comes from song list
                else if (e.Data.GetData(SongDataObject.SongDataFormat) != null)
                {
                    if (OrderListBox.HasItems)
                    {
                        index++;
                    }

                    if (isInFirstHalf)
                    {
                        index--;
                    }

                    SongData data = (SongData)e.Data.GetData(SongDataObject.SongDataFormat);
                    Media    m    = MediaManager.LoadMediaMetadata(data.Uri, null);
                    orderList.Insert(index, m);
                }
                // Data comes from explorer
                else if (e.Data.GetData(DataFormats.FileDrop) != null)
                {
                    if (OrderListBox.HasItems)
                    {
                        index++;
                    }

                    if (isInFirstHalf)
                    {
                        index--;
                    }

                    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);

                    IEnumerable <Media> result;

                    if (files.Length < 1)
                    {
                        return;
                    }

                    if (files.Length == 1)
                    {
                        if (MediaManager.TryLoadPortfolio(files[0], out result))
                        {
                            // TODO: maybe insert contents at drop position if the portfolio isn't empty?
                            Controller.OpenPortfolio(files[0]);
                        }
                        else
                        {
                            Media m = MediaManager.LoadMediaMetadata(new Uri(files[0]), null);
                            orderList.Insert(index, m);
                        }
                    }
                    else
                    {
                        foreach (var m in MediaManager.LoadMultipleMediaMetadata(files.Select(f => new Uri(f))))
                        {
                            orderList.Insert(index++, m);
                        }
                    }
                }
                else if (e.Data.GetData(typeof(String)) != null)
                {
                    string data = (string)e.Data.GetData(typeof(String));
                    Uri    u    = null;
                    if (!Uri.TryCreate(data, UriKind.Absolute, out u))
                    {
                        Uri.TryCreate("http://" + data, UriKind.Absolute, out u);
                    }

                    if (u != null)
                    {
                        Media m = MediaManager.LoadMediaMetadata(u, null);
                        orderList.Insert(index, m);
                    }
                }
            }
            catch (Exception ex)
            {
                Controller.ShowUnhandledException(ex, false);
            }
        }