Newer
Older
Correlator / PipeGallery / View / AudioListView.xaml.cs
using PipeGallery.Correlator;
using PipeGallery.Manage;
using PipeGallery.Model;
using PipeGallery.ViewModel;
using System;
using System.Diagnostics;
using System.Linq;
using System.Media;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media.Imaging;

namespace PipeGallery.View
{
    /// <summary>
    /// AudioListView.xaml 的交互逻辑
    /// </summary>
    public partial class AudioListView : UserControl
    {
        private bool isOrderBy = true;
        private OrderField orderField = OrderField.FileName;

        private bool isPic = false;
        private bool isPlay = false;

        public AudioListView(bool isPic = false)
        {
            InitializeComponent();
            this.DataContext = AudioListViewModel.Instance;

            this.isPic = isPic;
            DataFactory.InitalAudioListData(isPic ? "snapshot" : "audio");

            this.btnReturn.Click += btnReturn_Click;
            this.btnFirstPage.Click += btnFirstPage_Click;
            this.btnUpPage.Click += btnUpPage_Click;
            this.btnNextPage.Click += btnNextPage_Click;
            this.btnEndPage.Click += btnEndPage_Click;
            this.btnJump.Click += btnJump_Click;
            this.btnName.Click += btnName_Click;
            //this.btnPersonLiable.Click += btnPersonLiable_Click;
            this.btnCreateTime.Click += btnCreateTime_Click;
            this.btnFileSize.Click += btnFileSize_Click;
            this.btnDel.Click += btnDel_Click;
            this.btnRefresh.Click += btnRefresh_Click;
            if (isPic)
                lbx.Tag = "0";
            else
                lbx.Tag = "1";

            btnClose.Click += BtnClose_Click;
        }

        private void BtnClose_Click(object sender, RoutedEventArgs e)
        {
            gridImg.Visibility = Visibility.Collapsed;
        }

        void btnName_Click(object sender, RoutedEventArgs e)
        {       
            RadioButton rb = sender as RadioButton;
            if (rb != null)
            {
                rb.IsChecked = true;
                if (orderField != OrderField.FileName)
                {
                    isOrderBy = true;
                }
                if (isOrderBy)
                {
                    AudioListViewModel.Instance.FileInfos = AudioListViewModel.Instance.FileInfos.OrderBy(o => o.FileName).ToList();
                    isOrderBy = false;
                    rb.Tag = "1";
                }
                else
                {
                    AudioListViewModel.Instance.FileInfos = AudioListViewModel.Instance.FileInfos.OrderByDescending(o => o.FileName).ToList();
                    isOrderBy = true;
                    rb.Tag = "0";
                }
                orderField = OrderField.FileName;
                AudioListViewModel.Instance.RefreshOrder();
                AudioListViewModel.Instance.CurrentPage = 1;
                AudioListViewModel.Instance.RefreshShowFileInfos();
            }
        }

        void btnPersonLiable_Click(object sender, RoutedEventArgs e)
        {
            RadioButton rb = sender as RadioButton;
            if (rb != null)
            {
                rb.IsChecked = true;
                if (orderField != OrderField.PersonLiable)
                {
                    isOrderBy = true;
                }
                if (isOrderBy)
                {
                    AudioListViewModel.Instance.FileInfos = AudioListViewModel.Instance.FileInfos.OrderBy(o => o.PersonLiable).ToList();
                    isOrderBy = false;
                    rb.Tag = "1";
                }
                else
                {
                    AudioListViewModel.Instance.FileInfos = AudioListViewModel.Instance.FileInfos.OrderByDescending(o => o.PersonLiable).ToList();
                    isOrderBy = true;
                    rb.Tag = "0";
                }
                orderField = OrderField.PersonLiable;
                AudioListViewModel.Instance.RefreshOrder();
                AudioListViewModel.Instance.CurrentPage = 1;
                AudioListViewModel.Instance.RefreshShowFileInfos();
            }
        }

        void btnCreateTime_Click(object sender, RoutedEventArgs e)
        {
            RadioButton rb = sender as RadioButton;
            if (rb != null)
            {
                rb.IsChecked = true;
                if (orderField != OrderField.CreationTimeUtc)
                {
                    isOrderBy = true;
                }
                if (isOrderBy)
                {
                    AudioListViewModel.Instance.FileInfos = AudioListViewModel.Instance.FileInfos.OrderBy(o => o.CreationTimeUtc).ToList();
                    isOrderBy = false;
                    rb.Tag = "1";
                }
                else
                {
                    AudioListViewModel.Instance.FileInfos = AudioListViewModel.Instance.FileInfos.OrderByDescending(o => o.CreationTimeUtc).ToList();
                    isOrderBy = true;
                    rb.Tag = "0";
                }
                orderField = OrderField.CreationTimeUtc;

                AudioListViewModel.Instance.RefreshOrder();
                AudioListViewModel.Instance.CurrentPage = 1;
                AudioListViewModel.Instance.RefreshShowFileInfos();
            }
        }

        void btnFileSize_Click(object sender, RoutedEventArgs e)
        {
            RadioButton rb = sender as RadioButton;
            if (rb != null)
            {
                rb.IsChecked = true;
                if (orderField != OrderField.FileSize)
                {
                    isOrderBy = true;
                }
                if (isOrderBy)
                {
                    AudioListViewModel.Instance.FileInfos = AudioListViewModel.Instance.FileInfos.OrderBy(o => o.FileSize).ToList();
                    isOrderBy = false;
                    rb.Tag = "1";
                }
                else
                {
                    AudioListViewModel.Instance.FileInfos = AudioListViewModel.Instance.FileInfos.OrderByDescending(o => o.FileSize).ToList();
                    isOrderBy = true;
                    rb.Tag = "0";
                }
                orderField = OrderField.FileSize;

                AudioListViewModel.Instance.RefreshOrder();
                AudioListViewModel.Instance.CurrentPage = 1;
                AudioListViewModel.Instance.RefreshShowFileInfos();
            }
        }

        void btnReturn_Click(object sender, RoutedEventArgs e)
        {
            Border bdr = this.Parent as Border;
            if (bdr != null)
            {
                HomePageView homePageView = new HomePageView();
                bdr.Child = homePageView;
            }
        }

        void btnJump_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                AudioListViewModel.Instance.CurrentPage = int.Parse(txtPage.Text);
                AudioListViewModel.Instance.RefreshShowFileInfos();

                clearSelected();
            }
            catch
            {

            }
        }

        void btnFirstPage_Click(object sender, RoutedEventArgs e)
        {
            AudioListViewModel.Instance.CurrentPage = 1;
            AudioListViewModel.Instance.RefreshShowFileInfos();

            clearSelected();
        }

        void btnUpPage_Click(object sender, RoutedEventArgs e)
        {
            AudioListViewModel.Instance.CurrentPage--;
            AudioListViewModel.Instance.RefreshShowFileInfos();

            clearSelected();
        }

        void btnNextPage_Click(object sender, RoutedEventArgs e)
        {
            AudioListViewModel.Instance.CurrentPage++;
            AudioListViewModel.Instance.RefreshShowFileInfos();

            clearSelected();
        }

        void btnEndPage_Click(object sender, RoutedEventArgs e)
        {
            AudioListViewModel.Instance.RefreshShowFileInfos(true);

            clearSelected();
        }

        FileInfo fi = null;
        private void rbPlay_Click(object sender, RoutedEventArgs e)
        {
            RadioButton rb = sender as RadioButton;
            if (rb != null)
            {
                try
                {
                    FileInfo file = rb.DataContext as FileInfo;
                    //得到文件信息,对文件进行操作

                    SoundPlayer play = new SoundPlayer(file.FullPath);
                    if (isPlay && file.Order == fi.Order)
                    {
                        play.Stop();
                        rb.IsChecked = false;
                        isPlay = false;
                    }
                    else
                    {
                        play.Play();
                        isPlay = true;
                    }
                    fi = file;
                }
                catch (Exception ex)
                {
                    LogHelper.Error(ex.ToString());
                    return;
                }
            }
        }


        private void rbPic_Click(object sender, RoutedEventArgs e)
        {
            Button btn = sender as Button;
            if (btn != null)
            {
                FileInfo file = btn.DataContext as FileInfo;//得到文件信息,对文件进行操作              
     
                gridImg.Visibility = Visibility;
                BitmapImage bitmap = new BitmapImage();
                bitmap.BeginInit();
                bitmap.CacheOption = BitmapCacheOption.OnLoad;
                bitmap.CreateOptions = BitmapCreateOptions.None;
                bitmap.UriSource = new Uri(file.FullPath, UriKind.RelativeOrAbsolute);
                bitmap.DecodePixelHeight = 768;
                bitmap.EndInit();
                bitmap.Freeze();
                img.Source = bitmap;
            }
        }

        private void rbPage_Click(object sender, RoutedEventArgs e)
        {
            RadioButton rb = sender as RadioButton;
            if (rb != null)
            {
                string page = rb.DataContext as string;
                AudioListViewModel.Instance.CurrentPage = int.Parse(page);
                AudioListViewModel.Instance.RefreshShowFileInfos();
            }

            clearSelected();
        }

        private void lbx_ManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e)
        {
            e.Handled = true;
        }

        private void btnDel_Click(object sender, RoutedEventArgs e)
        {
            //List<FileInfo> fileList = AudioListViewModel.Instance.FileInfos;
            //AudioListViewModel.Instance.FileInfos.RemoveAll((f)=> f.IsSelected);
            foreach (FileInfo fi in AudioListViewModel.Instance.FileInfos)
            {
                if (fi.IsSelected)
                {
                    System.IO.File.Delete(fi.FullPath);                   
                }
            }
            DataFactory.InitalAudioListData(isPic ? "snapshot" : "audio");

            clearSelected();
        }

        private void btnRefresh_Click(object sender, RoutedEventArgs e)
        {
            DataFactory.InitalAudioListData(isPic ? "snapshot" : "audio");

            clearSelected();
        }

        private void lbx_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

        }

        private void clearSelected()
        {
            foreach (FileInfo fi in AudioListViewModel.Instance.FileInfos)
            {
                if (fi.IsSelected)
                {
                    fi.IsSelected = false;
                }
            }

            this.chkAllSelect.IsChecked = false;

            this.txtPage.Text = "";
        }

    }

    public enum OrderField
    {
        FileName,
        PersonLiable,
        CreationTimeUtc,
        FileSize
    }
}