Exemple #1
0
        private void Parse()
        {
            lock (iLock)
            {
                if (!iParsed)
                {
                    List <KeyValuePair <string, string> > displayList = new List <KeyValuePair <string, string> >();
                    List <KeyValuePair <string, string> > fullList    = new List <KeyValuePair <string, string> >();

                    if (iItem != null)
                    {
                        string type = GetItemType(iItem);
                        fullList.Add(new KeyValuePair <string, string>("Type", type));

                        string title = DidlLiteAdapter.Title(iItem);
                        if (title != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("Title", title));
                            fullList.Add(new KeyValuePair <string, string>("Title", title));
                        }

                        string album = DidlLiteAdapter.Album(iItem);
                        // if parent is a musicAlbum and album is blank, try to get album info from parent
                        if (album == string.Empty && iParent is musicAlbum)
                        {
                            album = DidlLiteAdapter.Album(iParent);
                        }
                        // don't display album field if we are a musicAlbum as it will be same as Title
                        if (album != string.Empty && !(iItem is musicAlbum))
                        {
                            // only insert album info for display if parent not a musicAlbum
                            if (!(iParent is musicAlbum))
                            {
                                displayList.Add(new KeyValuePair <string, string>("Album", album));
                            }
                            fullList.Add(new KeyValuePair <string, string>("Album", album));
                        }

                        string artist       = DidlLiteAdapter.Artist(iItem);
                        string albumArtist  = DidlLiteAdapter.AlbumArtist(iItem);
                        string parentArtist = string.Empty;
                        if (iParent != null)
                        {
                            parentArtist = DidlLiteAdapter.Artist(iParent);
                        }

                        // don't display artist field if we are a person, as it will be same as title
                        if (artist != string.Empty && !(iItem is person))
                        {
                            // only display artist field when:
                            // our parent is not a music album
                            // or we are a music album and album artist field is blank
                            // our parent is a music album but artist field is different from album artist field and different from parent's artist field

                            if (!(iParent is musicAlbum) ||
                                (iItem is musicAlbum && albumArtist == string.Empty) ||
                                (iParent is musicAlbum && albumArtist != artist && parentArtist != artist))
                            {
                                displayList.Add(new KeyValuePair <string, string>("Artist", artist));
                            }
                            fullList.Add(new KeyValuePair <string, string>("Artist", artist));
                        }

                        if (albumArtist != string.Empty)
                        {
                            // only display albumartist field when:
                            // we are a musicAlbum and album artist is different from artist
                            // or artist field is blank and album artist is not the same as parent's artist field

                            if ((iItem is musicAlbum && albumArtist != artist) ||
                                (artist == string.Empty && parentArtist != albumArtist))
                            {
                                displayList.Add(new KeyValuePair <string, string>("Album Artist", albumArtist));
                            }
                            fullList.Add(new KeyValuePair <string, string>("Album Artist", albumArtist));
                        }

                        string count = DidlLiteAdapter.Count(iItem);
                        if (count != string.Empty && count != "0")
                        {
                            displayList.Add(new KeyValuePair <string, string>("Count", count));
                            fullList.Add(new KeyValuePair <string, string>("Count", count));
                        }

                        string composer = DidlLiteAdapter.Composer(iItem);
                        if (composer != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("Composer", composer));
                            fullList.Add(new KeyValuePair <string, string>("Composer", composer));
                        }

                        string genre = DidlLiteAdapter.Genre(iItem);
                        if (genre != string.Empty)
                        {
                            string parentGenre = string.Empty;
                            if (iParent != null)
                            {
                                parentGenre = DidlLiteAdapter.Genre(iParent);
                            }
                            if (parentGenre != genre)
                            {
                                displayList.Add(new KeyValuePair <string, string>("Genre", genre));
                            }
                            fullList.Add(new KeyValuePair <string, string>("Genre", genre));
                        }

                        string releaseYear = DidlLiteAdapter.ReleaseYear(iItem);
                        if (releaseYear != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("Release Year", releaseYear));
                            fullList.Add(new KeyValuePair <string, string>("Release Year", releaseYear));
                        }

                        string originalTrackNumber = DidlLiteAdapter.OriginalTrackNumber(iItem);
                        if (originalTrackNumber != string.Empty)
                        {
                            fullList.Add(new KeyValuePair <string, string>("Original Track No.", originalTrackNumber));
                        }

                        string conductor = DidlLiteAdapter.Conductor(iItem);
                        if (conductor != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("Conductor", conductor));
                            fullList.Add(new KeyValuePair <string, string>("Conductor", conductor));
                        }

                        string actor = DidlLiteAdapter.Actor(iItem);
                        if (actor != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("Actor", actor));
                            fullList.Add(new KeyValuePair <string, string>("Actor", actor));
                        }

                        string director = DidlLiteAdapter.Director(iItem);
                        if (director != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("Director", director));
                            fullList.Add(new KeyValuePair <string, string>("Director", director));
                        }

                        string publisher = DidlLiteAdapter.Publisher(iItem);
                        if (publisher != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("Publisher", publisher));
                            fullList.Add(new KeyValuePair <string, string>("Publisher", publisher));
                        }

                        string contributer = DidlLiteAdapter.Contributor(iItem);
                        if (contributer != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("Contributor", contributer));
                            fullList.Add(new KeyValuePair <string, string>("Contributor", contributer));
                        }

                        string duration = DidlLiteAdapter.Duration(iItem);
                        if (duration != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("Duration", duration));
                            fullList.Add(new KeyValuePair <string, string>("Duration", duration));
                        }

                        string size = DidlLiteAdapter.Size(iItem);
                        if (size != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("Size", size));
                            fullList.Add(new KeyValuePair <string, string>("Size", size));
                        }

                        string bitrate = DidlLiteAdapter.Bitrate(iItem);
                        if (bitrate != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("Bitrate", bitrate));
                            fullList.Add(new KeyValuePair <string, string>("Bitrate", bitrate));
                        }

                        string sampleRate = DidlLiteAdapter.SampleRate(iItem);
                        if (sampleRate != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("SampleRate", sampleRate));
                            fullList.Add(new KeyValuePair <string, string>("SampleRate", sampleRate));
                        }

                        string bitDepth = DidlLiteAdapter.BitDepth(iItem);
                        if (bitDepth != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("Bit Depth", bitDepth));
                            fullList.Add(new KeyValuePair <string, string>("Bit Depth", bitDepth));
                        }

                        string mimeType = DidlLiteAdapter.MimeType(iItem);
                        if (mimeType != string.Empty)
                        {
                            fullList.Add(new KeyValuePair <string, string>("Mime Type", mimeType));
                        }

                        string protocolInfo = DidlLiteAdapter.ProtocolInfo(iItem);
                        if (protocolInfo != string.Empty)
                        {
                            fullList.Add(new KeyValuePair <string, string>("Protocol Info", protocolInfo));
                        }

                        string description = DidlLiteAdapter.Description(iItem);
                        if (description != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("Description", description));
                            fullList.Add(new KeyValuePair <string, string>("Description", description));
                        }

                        string info = DidlLiteAdapter.Info(iItem);
                        if (info != string.Empty)
                        {
                            displayList.Add(new KeyValuePair <string, string>("Info", description));
                            fullList.Add(new KeyValuePair <string, string>("Info", description));
                        }

                        string uri = DidlLiteAdapter.Uri(iItem);
                        if (uri != string.Empty)
                        {
                            fullList.Add(new KeyValuePair <string, string>("Uri", uri));
                        }

                        Uri artworkUri = DidlLiteAdapter.ArtworkUri(iItem);
                        if (artworkUri != null)
                        {
                            fullList.Add(new KeyValuePair <string, string>("Artwork Uri", artworkUri.OriginalString));
                        }
                    }
                    iFullInfoList    = fullList;
                    iDisplayInfoList = displayList;
                    iParsed          = true;
                }
            }
        }
Exemple #2
0
        protected override void EventListViewLibrary_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
        {
            TextFormatFlags flags = TextFormatFlags.VerticalCenter | TextFormatFlags.NoPrefix | TextFormatFlags.EndEllipsis;

            // Because of a bug in the underlying Win32 control, the DrawItem event occurs without accompanying DrawSubItem events once per row in the
            // details view when the mouse pointer moves over the row, causing anything painted in a DrawSubItem event handler to be painted over by a
            // custom background drawn in a DrawItem event handler. See the example in the OwnerDraw reference topic for a workaround that invalidates
            // each row when the extra event occurs. An alternative workaround is to put all your custom drawing code in a DrawSubItem event handler
            // and paint the background for the entire item (including subitems) only when the DrawListViewSubItemEventArgs.ColumnIndex value is 0.
            if (e.ColumnIndex == 0)
            {
                e.Graphics.FillRectangle(iBackBrush, e.Bounds);

                if (iIsAlbum && Items.Count > 0)
                {
                    ListViewKinsky.Item item  = Items[0] as ListViewKinsky.Item;
                    musicTrack          track = item.Tag as musicTrack;

                    int iconHeight = (int)(Columns[0].Width * 0.5f);
                    int iconOffset = 5;// (int)((Columns[0].Width - iconHeight) * 0.5f);

                    Image albumArt = item.Icon;
                    if (albumArt != null)
                    {
                        e.Graphics.FillRectangle(iBackBrush, item.Bounds.Left + iconOffset, item.Bounds.Top + iconOffset, iconHeight, iconHeight);
                        try
                        {
                            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                            e.Graphics.DrawImage(albumArt, item.Bounds.Left + iconOffset, item.Bounds.Top + iconOffset, iconHeight, iconHeight);
                        }
                        catch (ArgumentException ex)
                        {
                            Trace.WriteLine(Trace.kKinsky, "ListViewLibrary.EventListViewLibrary_DrawSubItem: " + ex.Message);
                        }
                    }

                    if (track != null)
                    {
                        int x      = item.Bounds.Left + iconOffset + iconHeight + iconOffset;
                        int y      = item.Bounds.Top + iconOffset;
                        int width  = Columns[0].Width + item.Bounds.Left;
                        int height = iFont.Height;

                        e.Graphics.FillRectangle(iBackBrush, new Rectangle(x, y, width - x, height * 4));

                        string album = DidlLiteAdapter.Album(track);
                        if (!string.IsNullOrEmpty(album))
                        {
                            TextRenderer.DrawText(e.Graphics, album, iFont, new Rectangle(x, y, width - x, height), ForeColor, flags);
                            y += height;
                        }

                        string artist = DidlLiteAdapter.AlbumArtist(track);
                        if (!string.IsNullOrEmpty(artist))
                        {
                            TextRenderer.DrawText(e.Graphics, artist, iFont, new Rectangle(x, y, width - x, height), Color.DarkGray, flags);
                            y += height;
                        }

                        string genre = DidlLiteAdapter.Genre(track);
                        if (!string.IsNullOrEmpty(genre))
                        {
                            TextRenderer.DrawText(e.Graphics, genre, iFont, new Rectangle(x, y, width - x, height), Color.DarkGray, flags);
                            y += height;
                        }

                        TextRenderer.DrawText(e.Graphics, DidlLiteAdapter.ReleaseYear(track), iFont, new Rectangle(x, y, width - x, height), Color.DarkGray, flags);
                    }
                }
            }
            //Console.WriteLine("columIndex=" + e.ColumnIndex + ", header=" + e.Header + ", item=" + e.Item + ", itemIndex=" + e.ItemIndex + ", subItem=" + e.SubItem);
            //e.DrawDefault = true;
            //return;

            if (e.ColumnIndex > 0)
            {
                if (e.Item.Selected)
                {
                    e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
                    e.Graphics.FillRectangle(iHighlightBackBrush, e.Bounds);
                }
                else
                {
                    e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
                    e.Graphics.FillRectangle(iBackBrush, e.Bounds);
                }
            }

            ListViewItem.ListViewSubItem subItem = null;
            for (int i = 0; i < e.Item.SubItems.Count; ++i)
            {
                if (e.Item.SubItems[i].Name == e.Header.Name)
                {
                    subItem = e.Item.SubItems[i];
                    break;
                }
            }

            if (subItem != null)
            {
                if (e.Item.Selected)
                {
                    TextRenderer.DrawText(e.Graphics, subItem.Text, iFont, e.Bounds, HighlightForeColour, flags);
                }
                else
                {
                    if (e.Header.Name != "Title")
                    {
                        TextRenderer.DrawText(e.Graphics, subItem.Text, iFont, e.Bounds, ForeColorMuted, flags);
                    }
                    else
                    {
                        TextRenderer.DrawText(e.Graphics, subItem.Text, iFont, e.Bounds, ForeColor, flags);
                    }
                }
            }
        }