using KernelViewerCtrlDll; using MediaGalleryDll; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Threading; namespace HistoryDLL { /// /// DetailViewer.xaml 的互動邏輯 /// public partial class DetailViewer : UserControl { public delegate void ChangeLanguageBtnTriggerDelegate(int index, int useLangIndex); public event ChangeLanguageBtnTriggerDelegate ChangeLanguageBtnTriggerEvent; public delegate void CloseBtnTriggerDelegate(int indexOfCtrl); public event CloseBtnTriggerDelegate CloseBtnTriggerEvent; private XmlData xmlDatas; private int dataIndex = 0; private int eventIndex = 0; private int mediaIndex = 0; private double itemWidth = 85; private double itemHeight = 85; private LangIndex curDisLan = LangIndex.Language1; public int IndexOfControl = -1; public bool isPlayVideo = false; /// /// 建構 /// /// 資料 /// 參數一資料的索引值,改變語系時通知上層所傳的 Index /// 該資料的第幾個事件 /// 該事件的第幾張媒體檔 public DetailViewer(XmlData xmlData, int dataIndex, int eventIndex, int picIndex) { InitializeComponent(); if (GlobalFunction.isSolutionUsing4K) { this.Width *= 2; this.Height *= 2; uxFirstLayer1.Height = new GridLength(20 * 2); uxFirstLayer2.Height = new GridLength(30 * 2); uxFirstLayer3.Height = new GridLength(85 * 2); uxFirstLayer4.Height = new GridLength(60 * 2); uxTopLayer1.Width = new GridLength(20 * 2); uxTopLayer2.Width = new GridLength(20 * 2); uxTopLayer3.Width = new GridLength(275 * 2); uxTopLayer4.Width = new GridLength(20 * 2); uxImgLayer.Height = new GridLength(310 * 2); uxGalleryGd.Margin = new Thickness(uxGalleryGd.Margin.Left * 2, 0, uxGalleryGd.Margin.Right * 2, 0); uxLan0.Width *= 2; uxLan1.Width *= 2; uxLan2.Width *= 2; uxLan3.Width *= 2; uxLan0.Height *= 2; uxLan1.Height *= 2; uxLan2.Height *= 2; uxLan3.Height *= 2; uxLan0.FontSize *= 1.5; uxLan1.FontSize *= 1.5; uxLan2.FontSize *= 1.5; uxLan3.FontSize *= 1.5; uxExitBtn.Width *= 2; uxExitBtn.Height *= 2; uxExitBtn.FontSize *= 1.5; uxLan0.Margin = uxLan1.Margin = uxLan2.Margin = uxLan3.Margin = uxExitBtn.Margin = new Thickness(0, 0, 10 * 2, 0); uxTitleText.Width *= 2; uxTitleText.Height *= 2; uxStrMainScroll.Width *= 2; uxStrMainScroll.Height *= 2; uxDateText.Width *= 2; uxDateText.Height *= 2; uxContentText.Width *= 2; uxContentText.Height *= 2; uxTitleText.FontSize *= 1.5; uxDateText.FontSize *= 1.5; uxContentText.FontSize *= 1.5; } this.xmlDatas = xmlData; this.dataIndex = dataIndex; this.eventIndex = eventIndex; this.mediaIndex = picIndex; //this.curDisLan = (LangIndex)ConfigSettingClass.MainBackCollect.DefaultLangIndex; if (this.mediaIndex < 0) this.mediaIndex = 0; this.Loaded += DetailViewer_Loaded; } private List GetEventFirstFileMap() { List result = new List(); for (int i = 0; i < xmlDatas.monthclassList.Count; i++) { if (xmlDatas.monthclassList[i].imagepath != "" && Directory.Exists(GlobalFunction.EventFileImgPath + xmlDatas.monthclassList[i].imagepath)) { string[] files = Directory.GetFiles(GlobalFunction.EventFileImgPath + xmlDatas.monthclassList[i].imagepath); foreach (string file in files) { if (GlobalFunction.imgDimList.Contains(System.IO.Path.GetExtension(file).ToLower()) || GlobalFunction.mediaDimList.Contains(System.IO.Path.GetExtension(file).ToLower())) { result.Add(file); break; } } } else { // 沒有圖片~ 則載入 Logo result.Add(GlobalFunction.thumbPath + ConfigSettingClass.MainBackCollect.ImgLogo); } } return result; } private void InitialLayoutColor() { // 背景 uxDetailviewerGd.Background = new SolidColorBrush(ConfigSettingClass.EventContentCollect.BackgroundColor); // 文字顏色 uxTitleText.Foreground = new SolidColorBrush(ConfigSettingClass.EventContentCollect.TextColor); uxDateText.Foreground = new SolidColorBrush(ConfigSettingClass.EventContentCollect.TextColor); uxContentText.Foreground = new SolidColorBrush(ConfigSettingClass.EventContentCollect.TextColor); // 切換語系的 Radiobtn for (int i = 0; i < ConfigSettingClass.MainBackCollect.LangText.Count(); i++) { RadioButton radiobtn = FindName("uxLan" + i) as RadioButton; radiobtn.Content = ConfigSettingClass.MainBackCollect.LangText[i]; radiobtn.Background = new SolidColorBrush(ConfigSettingClass.BtnSelectCollect.BackgroundColorUnselect); radiobtn.Foreground = new SolidColorBrush(ConfigSettingClass.BtnSelectCollect.TextColorUnselect); if (ConfigSettingClass.MainBackCollect.LangText[i] == "") { radiobtn.Visibility = Visibility.Collapsed; } } // 關閉按鈕 uxExitBtn.Background = new SolidColorBrush(ConfigSettingClass.BtnSelectCollect.BackgroundColor); uxExitBtn.Foreground = new SolidColorBrush(ConfigSettingClass.BtnSelectCollect.TextColor); } private void DetailViewer_Loaded(object sender, RoutedEventArgs e) { InitialLayoutColor(); // 載入小圖列表 (取得每個事件的第一張圖) List eventFileList = GetEventFirstFileMap(); MediaGalleryCtrl mediaList = new MediaGalleryCtrl(eventFileList, eventIndex, ConfigSettingClass.EventContentCollect.ThicknessColor); mediaList.Width = 770; mediaList.Height = 85; mediaList.CallbackMediaFileNameEvent += MediaList_CallbackMediaFileNameEvent; mediaList.ItemWidth = itemWidth; mediaList.ItemHeight = itemHeight; if (GlobalFunction.isSolutionUsing4K) { mediaList.Width *= 2; mediaList.Height *= 2; mediaList.ItemWidth *= 2; mediaList.ItemHeight *= 2; } uxGalleryGd.Children.Add(mediaList); switch (ConfigSettingClass.MainBackCollect.DefaultLangIndex) { case 0: uxLan0.IsChecked = true; break; case 1: uxLan1.IsChecked = true; break; case 2: uxLan2.IsChecked = true; break; case 3: uxLan3.IsChecked = true; break; } // 載入圖片 LoadEventInforMedia(); } // 由 MediaGalleryDll 傳出來的事件,重新載入圖片 private void MediaList_CallbackMediaFileNameEvent(int selectedIndex) { if (eventIndex != selectedIndex) { eventIndex = selectedIndex; // 重載入文字 LoadEventInforStr(); // 重新載入圖片 LoadEventInforMedia(); } } private void LoadEventInforMedia() { uxMainMediaShowGd.Children.Clear(); Dviewer dviewer = new Dviewer(GlobalFunction.EventFileImgPath + xmlDatas.monthclassList[eventIndex].imagepath, mediaIndex, GlobalFunction.isSolutionUsing4K, GlobalFunction.thumbPath + ConfigSettingClass.MainBackCollect.ImgLogo); mediaIndex = 0; dviewer.CallBackFileCountEvent += Dviewer_CallBackFileCountEvent; dviewer.CallBackDisplayIndexEvent += Dviewer_CallBackDisplayIndexEvent; dviewer.CurIsPlaingVideoEvent += Dviewer_CurIsPlaingVideoEvent; uxMainMediaShowGd.Children.Add(dviewer); } private void Dviewer_CurIsPlaingVideoEvent(bool isPlayVideo) { this.isPlayVideo = isPlayVideo; } private void Dviewer_CallBackDisplayIndexEvent(int Index) { for (int i = 0; i < uxImgTagList.Children.Count; i++) { (uxImgTagList.Children[i] as DetailViewerDot).uxLabel.IsEnabled = false; } if (Index < uxImgTagList.Children.Count) { (uxImgTagList.Children[Index] as DetailViewerDot).uxLabel.IsEnabled = true; } } private void Dviewer_CallBackFileCountEvent(int realCount) { uxImgTagList.Children.Clear(); for (int i = 0; i < realCount; i++) { DetailViewerDot dot = new DetailViewerDot(ConfigSettingClass.EventContentCollect.ThicknessColor); if (i >= 20) break; uxImgTagList.Children.Add(dot); } } private void LoadEventInforStr() { if (eventIndex < ConfigSettingClass.MainBackCollect.LangFlowDir.Length) { uxTitleText.FlowDirection = ConfigSettingClass.MainBackCollect.LangFlowDir[eventIndex]; uxDateText.FlowDirection = ConfigSettingClass.MainBackCollect.LangFlowDir[eventIndex]; uxContentText.FlowDirection = ConfigSettingClass.MainBackCollect.LangFlowDir[eventIndex]; } switch (curDisLan) { case LangIndex.Language1: uxTitleText.Text = xmlDatas.monthclassList[eventIndex].titleLan1; uxContentText.Text = xmlDatas.monthclassList[eventIndex].Language1; break; case LangIndex.Language2: uxTitleText.Text = xmlDatas.monthclassList[eventIndex].titleLan2; uxContentText.Text = xmlDatas.monthclassList[eventIndex].Language2; break; case LangIndex.Language3: uxTitleText.Text = xmlDatas.monthclassList[eventIndex].titleLan3; uxContentText.Text = xmlDatas.monthclassList[eventIndex].Language3; break; case LangIndex.Language4: uxTitleText.Text = xmlDatas.monthclassList[eventIndex].titleLan4; uxContentText.Text = xmlDatas.monthclassList[eventIndex].Language4; break; } if (xmlDatas.monthclassList[eventIndex].month == null || xmlDatas.monthclassList[eventIndex].month == "") uxDateText.Visibility = Visibility.Collapsed; else uxDateText.Text = xmlDatas.monthclassList[eventIndex].month; } private void uxBoundGrid_ManipulationBoundaryFeedback(object sender, System.Windows.Input.ManipulationBoundaryFeedbackEventArgs e) { e.Handled = true; } private void uxCloseBtn_Click(object sender, RoutedEventArgs e) { if (CloseBtnTriggerEvent != null) this.Dispatcher.BeginInvoke(CloseBtnTriggerEvent, DispatcherPriority.Background, IndexOfControl); } private void uxLan_Checked(object sender, RoutedEventArgs e) { RadioButton radiobtnDisable = FindName("uxLan" + (int)this.curDisLan) as RadioButton; radiobtnDisable.Background = new SolidColorBrush(ConfigSettingClass.BtnSelectCollect.BackgroundColorUnselect); radiobtnDisable.Foreground = new SolidColorBrush(ConfigSettingClass.BtnSelectCollect.TextColorUnselect); this.curDisLan = (LangIndex)int.Parse((sender as RadioButton).Tag.ToString()); RadioButton radiobtnEnable = FindName("uxLan" + (int)this.curDisLan) as RadioButton; radiobtnEnable.Background = new SolidColorBrush(ConfigSettingClass.BtnSelectCollect.BackgroundColor); radiobtnEnable.Foreground = new SolidColorBrush(ConfigSettingClass.BtnSelectCollect.TextColor); // 重載入文字 LoadEventInforStr(); } } public enum LangIndex { Language1 = 0, Language2 = 1, Language3 = 2, Language4 = 3 } }