protected void removeSelectedItemsFromPlaylistManagementList()
        {
            SortedList <int, int> deleteList;
            int         rowStartPos = -1, prevPos = -1, curPos = -1;
            IEnumerator selectedItemsEnum = PlaylistManagementListControl.SelectedItems.GetEnumerator();
            IEnumerator <KeyValuePair <int, int> > listEnum;

            deleteList = this.removeSelectedItemsFromMediaItemList(PlaylistManagementListControl);

            PlaylistObjectMediaList playlistList = (PlaylistObjectMediaList)rfController.playlistBrowser.getCurrentList();

            // run through sorted list from the backwards
            listEnum = deleteList.GetEnumerator();
            while (listEnum.MoveNext())
            {
                curPos = listEnum.Current.Value;
                if (rowStartPos == -1)
                {
                    rowStartPos = curPos;
                }
                if (prevPos != -1 && prevPos - 1 != curPos)
                {
                    playlistList.removeItem(prevPos, rowStartPos);
                    rowStartPos = curPos;
                }
                prevPos = curPos;
            }
            playlistList.removeItem(curPos, rowStartPos);
        }
        private void playlistManagementControl_PreviewMouseUpSink(object sender, MouseButtonEventArgs e)
        {
            MediaItem     mediaInfo;
            HitTestResult result = VisualTreeHelper.HitTest(PlaylistManagementListControl, e.GetPosition(PlaylistManagementListControl));

            if (result == null)
            {
                return;
            }
            ListBoxItem lbi = findVisualParent <ListBoxItem>(result.VisualHit);

            if (lbi == null)
            {
                return;
            }

            mediaInfo = (MediaItem)lbi.Content;
            if (mediaInfo == null)
            {
                return;
            }

            PlaylistObjectMediaList mediaList = (PlaylistObjectMediaList)rfController.playlistBrowser.getCurrentList();

            if (mediaList.isPlaylistLevel)
            {
                ListBoxItem listBoxItem = (ListBoxItem)PlaylistManagementListControl.ItemContainerGenerator.ContainerFromItem(mediaInfo);
                if (e.GetPosition(PlaylistManagementListControl).X <= 55)
                {
                    this.showPlaylistManagementListActionContextMenu(mediaInfo, e.GetPosition(PlaylistManagementListControl), listBoxItem);
                }
            }
        }
        protected void DragOverPlaylistManagementList(IDropInfo _dropInfo)
        {
            MediaItem mediaItem = (MediaItem)_dropInfo.DragInfo.SourceItem;
            ListBox   listBoxTarget, listBoxSource;
            PlaylistObjectMediaList playlistList = this.currentPlaylistManagementList();

            listBoxTarget = (ListBox)_dropInfo.VisualTarget;
            listBoxSource = (ListBox)_dropInfo.DragInfo.VisualSource;

            if (playlistList == null || !mediaItem.isAllowedToDropOnTrackList() || !playlistList.isEditable)
            {
                _dropInfo.Effects = System.Windows.DragDropEffects.None;
                return;
            }

            this.savePlaylistManagementListPosition();

            listBoxTarget = (ListBox)_dropInfo.VisualTarget;
            listBoxSource = (ListBox)_dropInfo.DragInfo.VisualSource;

            if (listBoxTarget.Name == listBoxSource.Name)
            {
                _dropInfo.Effects = System.Windows.DragDropEffects.Move;
            }
            else
            {
                _dropInfo.Effects = System.Windows.DragDropEffects.Copy;
            }
        }
        void playlistManagementContextMenu_actionRenamePlaylistSink(RaumfeldNET.WPFControls.PlaylistManagementContextMenuControl _control, string _playlistObjectId, string _newName)
        {
            MediaItem mediaItem = (MediaItem)_control.DataContext;
            PlaylistObjectMediaList playlistList = (PlaylistObjectMediaList)rfController.playlistBrowser.getCurrentList();

            this.setPlaylistManagementListOnUpdate(true);
            this.savePlaylistManagementListPosition();
            this.hidePlaylistManagementActionContextMenu();

            // TODO: doesn't work properly
            //rfController.playlistManagement.renamePlaylist(mediaItem.objectId, _newName);

            rfController.playlistBrowser.rereadCurrentList();
        }
        void playlistManagementContextMenu_actionDeletePlaylistSink(RaumfeldNET.WPFControls.PlaylistManagementContextMenuControl _control, string _playlistObjectId)
        {
            MediaItem mediaItem = (MediaItem)_control.DataContext;
            PlaylistObjectMediaList playlistList = (PlaylistObjectMediaList)rfController.playlistBrowser.getCurrentList();

            this.setPlaylistManagementListOnUpdate(true);
            this.hidePlaylistManagementActionContextMenu();

            if (MessageBox.Show("Playliste wirklich löschen?", "Playliste löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
            {
                rfController.playlistManagement.deletePlaylist(mediaItem.objectId);
                rfController.playlistBrowser.rereadCurrentList();
            }
            else
            {
                this.setPlaylistManagementListOnUpdate(false);
            }
        }
        protected void removeSelectedPlaylists()
        {
            int curPos = -1;
            SortedList <int, int> deleteList;

            deleteList = this.removeSelectedItemsFromMediaItemList(PlaylistManagementListControl);
            IEnumerator <KeyValuePair <int, int> > listEnum;

            PlaylistObjectMediaList playlistList = (PlaylistObjectMediaList)rfController.playlistBrowser.getCurrentList();

            // run through sorted list from the backwards
            listEnum = deleteList.GetEnumerator();
            while (listEnum.MoveNext())
            {
                curPos = listEnum.Current.Value;
                rfController.playlistManagement.deletePlaylist(playlistList.list[curPos].objectId);
            }
            rfController.playlistBrowser.rereadCurrentList();
        }
        protected void DropOnPlaylistManagementList(IDropInfo _dropInfo)
        {
            ListBox listBoxTarget, listBoxSource;
            PlaylistObjectMediaList playlistList = this.currentPlaylistManagementList();

            listBoxTarget = (ListBox)_dropInfo.VisualTarget;
            listBoxSource = (ListBox)_dropInfo.DragInfo.VisualSource;

            if (playlistList == null || !playlistList.isEditable)
            {
                return;
            }

            this.savePlaylistManagementListPosition();

            this.setPlaylistManagementListOnUpdate(true);

            MediaItem mediaItem = (MediaItem)_dropInfo.DragInfo.SourceItem;

            if (listBoxTarget.Name == listBoxSource.Name)
            {
                if (_dropInfo.InsertIndex > mediaItem.listIndex)
                {
                    playlistList.moveItem(mediaItem.listIndex, _dropInfo.InsertIndex - 1);
                }
                else
                {
                    playlistList.moveItem(mediaItem.listIndex, _dropInfo.InsertIndex);
                }
            }
            else
            {
                List <MediaItem> selectedList = this.getSelectedItemsFromMediaItemList(listBoxSource);
                if (selectedList.Count > 1)
                {
                    playlistList.addItems(selectedList, _dropInfo.InsertIndex, true);
                }
                else
                {
                    playlistList.addItem(mediaItem, _dropInfo.InsertIndex);
                }
            }
        }
 private void playlistManagementList_KeyUpSink(object sender, KeyEventArgs e)
 {
     this.savePlaylistManagementListPosition();
     if (e.Key == Key.Delete)
     {
         this.setPlaylistManagementListOnUpdate(true);
         PlaylistObjectMediaList playlistList = (PlaylistObjectMediaList)rfController.playlistBrowser.getCurrentList();
         if (playlistList.isEditable)
         {
             this.removeSelectedItemsFromPlaylistManagementList();
         }
         else
         {
             if (MessageBox.Show("Markierte Playlisten wirklich löschen?", "Playlisten löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
             {
                 this.removeSelectedPlaylists();
             }
             else
             {
                 this.setPlaylistManagementListOnUpdate(false);
             }
         }
     }
 }