123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- using BellwetherBackend.Utility;
- using Microsoft.Win32;
- using Microsoft.WindowsAPICodePack.Shell;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- namespace BellwetherBackend.SubPage
- {
- /// <summary>
- /// Interaction logic for UcBasicSetting.xaml
- /// </summary>
- public partial class UcFrontPage : UserControl
- {
- private const int avalibleTotalElement = 100;
- private const string frontpageDataPath = @"Data\FrontPage\";
- private Utility.FrontPageJson frontPageJson;
- private int selectMediaIndex = -1;
- public UcFrontPage()
- {
- InitializeComponent();
- //icon load
- AddCategoryToolBar();
- LoadSettingData();
- this.Loaded += UcAbout_Loaded;
- }
- private void UcAbout_Loaded(object sender, RoutedEventArgs e)
- {
- //load media
- List<string> fileLists = frontPageJson.MediaList; //Utility.Setting.AboutComapnyImgList;
- Image imageBuf;
- Grid gridBuf;
- if (fileLists != null)
- for (int fileIndex = 0; fileIndex < fileLists.Count; fileIndex++)
- {
- Border bd = new Border() { BorderThickness = new Thickness(5), BorderBrush = new SolidColorBrush(Colors.Gray), CornerRadius = new CornerRadius(2), Margin = new Thickness(3, 20, 3, 20), Background = Brushes.White };
- bd.Focusable = true;
- bd.PreviewMouseLeftButtonUp += Sc_PreviewMouseLeftButtonUp;
- string aboutImgDirPath = frontpageDataPath;
- string path = System.IO.Path.Combine(aboutImgDirPath, fileLists[fileIndex]); //GlobalFunction.rootPath + GlobalFunction.dataFolder + GlobalFunction.multiMediaFolderName + multiMediaJsonData.folderColletion[currentFolderIndex].folderName + @"\" + fileLists[fileIndex];
- //string path = System.IO.Path.Combine(Directory.GetCurrentDirectory(), fileLists[fileIndex]);
- if (GlobalFunction.CheckFileIsImage(path))
- {
- imageBuf = new Image();
- //imageBuf.Source = new BitmapImage(new Uri(path));
- imageBuf.Source = GlobalFunction.GetBitMap(path);
- imageBuf.Stretch = Stretch.Uniform;
- gridBuf = new Grid();
- //imageBuf.TouchDown += StackElemnt_TouchDown;
- gridBuf.Children.Add(imageBuf);
- gridBuf.Width = 213;
- gridBuf.Height = 120;
- bd.Child = gridBuf;
- uxFileViewer.Children.Add(bd);
- }
- else if (GlobalFunction.CheckFileIsVideo(path))
- {
- ShellFile shellFile = ShellFile.FromFilePath(path);
- imageBuf = new Image();
- if (shellFile != null && shellFile.Thumbnail != null && shellFile.Thumbnail.ExtraLargeBitmapSource != null)
- imageBuf.Source = shellFile.Thumbnail.ExtraLargeBitmapSource;
- //imageBuf.TouchDown += BotImage_TouchDown;
- imageBuf.Stretch = Stretch.Uniform;
- gridBuf = new Grid();
- gridBuf.Width = 213;
- gridBuf.Height = 120;
- gridBuf.Children.Add(imageBuf);
- gridBuf.Children.Add(new Image() { Source = new BitmapImage(new Uri("pack://application:,,,/BellwetherBackend;component/Image/play.png")), Width = 80 });
- bd.Child = gridBuf;
- uxFileViewer.Children.Add(bd);
- }
- }
- }
- private void AddCategoryToolBar()
- {
- new GlobalFunction();
- uxAddBtn.IconData = GlobalFunction.AddBtnData;
- uxDeleteBtn.IconData = GlobalFunction.DeleteBtnData;
- uxUpBtn.IconData = GlobalFunction.MoveUpBtnData;
- uxDownBtn.IconData = GlobalFunction.MoveDownBtnData;
- }
- private void LoadSettingData()
- {
- frontPageJson = Setting.frontPageJsonFile;
- uxSolarEnergyUrlText.Text = frontPageJson.SolarEnergyUrl;
- uxAutoPlaIntervalText.Text = frontPageJson.AutoPlayIntervalSec.ToString();
- }
- private void SaveData()
- {
- Setting.frontPageJsonFile = frontPageJson;
- }
- private void uxSolarUrlText_TextChanged(object sender, TextChangedEventArgs e)
- {
- if (this.IsLoaded)
- {
- uxSolarEnergyUrlText.TextChanged -= uxSolarUrlText_TextChanged;
- frontPageJson.SolarEnergyUrl = uxSolarEnergyUrlText.Text;
- SaveData();
- uxSolarEnergyUrlText.TextChanged += uxSolarUrlText_TextChanged;
- }
- }
- private void uxAutoPlaIntervalText_TextChanged(object sender, TextChangedEventArgs e)
- {
- if (this.IsLoaded)
- {
- uxAutoPlaIntervalText.TextChanged -= uxSolarUrlText_TextChanged;
- if (int.TryParse(uxAutoPlaIntervalText.Text, out var interval))
- {
- frontPageJson.AutoPlayIntervalSec = interval;
- SaveData();
- }
- uxAutoPlaIntervalText.TextChanged += uxSolarUrlText_TextChanged;
- }
- }
- private void uxAddBtn_Click(object sender, RoutedEventArgs e)
- {
- if (uxFileViewer.Children.Count >= avalibleTotalElement)
- {
- MessageBox.Show("容許數量已滿");
- return;
- }
- OpenFileDialog openfileDlg = new OpenFileDialog();
- openfileDlg.Multiselect = true;
- openfileDlg.Filter = "Supported files|";
- for (int i = 0; i < GlobalFunction.imgDimList.Count(); i++)
- {
- openfileDlg.Filter += "*" + GlobalFunction.imgDimList[i] + ";";
- }
- for (int i = 0; i < GlobalFunction.mediaDimList.Count(); i++)
- {
- openfileDlg.Filter += "*" + GlobalFunction.mediaDimList[i] + ";";
- }
- //openfileDlg.Filter += "*" + ".PPT" + ";";
- //openfileDlg.Filter += "*" + ".PPTX" + ";";
- if ((bool)openfileDlg.ShowDialog())
- {
- Image imageBuf;
- Grid gridBuf;
- foreach (string name in openfileDlg.FileNames)
- {
- //string[] imageList = mediaLists[mediaIndex];
- Border bd = new Border() { BorderThickness = new Thickness(5), BorderBrush = new SolidColorBrush(Colors.Gray), CornerRadius = new CornerRadius(2), Margin = new Thickness(3, 20, 3, 20), Background = Brushes.White };
- bd.Focusable = true;
- bd.PreviewMouseLeftButtonUp += Sc_PreviewMouseLeftButtonUp;
- if (GlobalFunction.CheckFileIsImage(name))
- {
- //image
- string legalFileName = GlobalFunction.GetFolderFileName(frontpageDataPath, name);
- string fileTo = System.IO.Path.Combine(frontpageDataPath, legalFileName);
- //複製
- //File.Copy(name, fileTo);
- ReduceImageResolution.CheckImageResolution(name, fileTo, 1920, 1080);
- //json
- frontPageJson.MediaList.Add(legalFileName);
- //ux - bd
- imageBuf = new Image();
- //imageBuf.Source = new BitmapImage(new Uri(fileTo));
- imageBuf.Source = GlobalFunction.GetBitMap(fileTo);
- imageBuf.Stretch = Stretch.Uniform;
- gridBuf = new Grid();
- gridBuf.Children.Add(imageBuf);
- gridBuf.Width = 213;
- gridBuf.Height = 120;
- bd.Child = gridBuf;
- uxFileViewer.Children.Add(bd);
- }
- else if (GlobalFunction.CheckFileIsVideo(name))
- {
- string legalFileName = GlobalFunction.GetFolderFileName(frontpageDataPath, name);
- string fileTo = System.IO.Path.Combine(frontpageDataPath, legalFileName);
- //複製
- File.Copy(name, fileTo);
- //json - mediafile
- frontPageJson.MediaList.Add(legalFileName);
- //ux - bd
- ShellFile shellFile = ShellFile.FromFilePath(fileTo);
- imageBuf = new Image();
- if (shellFile != null && shellFile.Thumbnail != null && shellFile.Thumbnail.ExtraLargeBitmapSource != null)
- imageBuf.Source = shellFile.Thumbnail.ExtraLargeBitmapSource;
- imageBuf.Stretch = Stretch.Uniform;
- gridBuf = new Grid();
- gridBuf.Children.Add(imageBuf);
- gridBuf.Children.Add(new Image() { Source = new BitmapImage(new Uri("pack://application:,,,/BellwetherBackend;component/Image/play.png")), Width = 80 });
- gridBuf.Width = 213;
- gridBuf.Height = 120;
- bd.Child = gridBuf;
- uxFileViewer.Children.Add(bd);
- }
- else if (GlobalFunction.pptDimList.Contains(System.IO.Path.GetExtension(name).ToLower()))
- {
- string legalFileName;
- string fileTo;
- string tempPath = System.Windows.Forms.Application.StartupPath + @"\Temp"; //暫存資料夾路徑
- string testResImgFile = tempPath + "\\testResolution.BMP";
- Microsoft.Office.Interop.PowerPoint.Application pptApplication =
- new Microsoft.Office.Interop.PowerPoint.Application();
- Microsoft.Office.Interop.PowerPoint.Presentation pptPresentation =
- pptApplication.Presentations.Open(name, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoFalse);
- //lb_noimage.Refresh();
- // Export the first page to retrieve its resolution
- pptPresentation.Slides[1].Export(testResImgFile, "BMP");
- BitmapImage directImage = new BitmapImage();
- directImage.BeginInit();
- directImage.UriSource = new Uri(testResImgFile);
- directImage.CreateOptions = BitmapCreateOptions.IgnoreColorProfile;
- directImage.CacheOption = BitmapCacheOption.OnLoad;
- directImage.EndInit();
- int width = directImage.PixelWidth;
- int height = directImage.PixelHeight;
- // Resolution adaptation
- if (directImage.PixelWidth > directImage.PixelHeight)
- {
- // landscape (1600*900)
- width = 1600;
- height = 900;
- }
- else
- {
- // portrait (900*1600)
- width = 900;
- height = 1600;
- }
- double bestResFactor = Math.Min((double)width / directImage.PixelWidth, (double)height / directImage.PixelHeight);
- width = (int)(directImage.PixelWidth * bestResFactor);
- height = (int)(directImage.PixelHeight * bestResFactor);
- int slidesCount = pptPresentation.Slides.Count;
- for (int idx = 1; idx <= slidesCount; idx++)
- {
- bd = new Border() { BorderThickness = new Thickness(5), BorderBrush = new SolidColorBrush(Colors.Gray), CornerRadius = new CornerRadius(2), Margin = new Thickness(3, 15, 3, 15) , Background = Brushes.White };
- bd.PreviewMouseLeftButtonUp += Sc_PreviewMouseLeftButtonUp;
- legalFileName = GlobalFunction.GetFolderFileName(frontpageDataPath, "1.BMP");
- fileTo = System.IO.Path.Combine(frontpageDataPath, legalFileName);// GlobalFunction.rootPath + GlobalFunction.dataFolder + GlobalFunction.multiMediaFolderName + multiMediaJsonData.folderColletion[currentFolderIndex].folderName + @"\" + legalFileName;
- //json - mediafile
- frontPageJson.MediaList.Add(legalFileName);
- fileTo = System.IO.Path.Combine(Directory.GetCurrentDirectory(), fileTo);
- pptPresentation.Slides[idx].Export(fileTo, "BMP", width, height);
- //ux - bd
- imageBuf = new Image();
- //imageBuf.Source = new BitmapImage(new Uri(fileTo));
- imageBuf.Source = GlobalFunction.GetBitMap(fileTo);
- imageBuf.Stretch = Stretch.Uniform;
- gridBuf = new Grid();
- gridBuf.Children.Add(imageBuf);
- gridBuf.Width = 213;
- gridBuf.Height = 120;
- bd.Child = gridBuf;
- uxFileViewer.Children.Add(bd);
- }
- pptPresentation.Close();
- System.IO.File.Delete(testResImgFile);
- }
- }
- if (selectMediaIndex != -1)
- {
- ((Border)uxFileViewer.Children[selectMediaIndex]).BorderBrush = new SolidColorBrush(Colors.Gray);
- }
- selectMediaIndex = uxFileViewer.Children.Count - 1;
- ((Border)uxFileViewer.Children[selectMediaIndex]).BorderBrush = new SolidColorBrush(Colors.Blue);
- ((Border)uxFileViewer.Children[selectMediaIndex]).Focus();
- }
- Setting.frontPageJsonFile = frontPageJson;
- }
- private void uxDeleteBtn_Click(object sender, RoutedEventArgs e)
- {
- if (selectMediaIndex < 0)
- {
- return;
- }
- uxFileViewer.Children.RemoveAt(selectMediaIndex);
- string path = System.IO.Path.Combine(Directory.GetCurrentDirectory(), frontPageJson.MediaList[selectMediaIndex]);
- File.Delete(System.IO.Path.Combine(frontpageDataPath, frontPageJson.MediaList[selectMediaIndex]));// GlobalFunction.rootPath + GlobalFunction.dataFolder + GlobalFunction.multiMediaFolderName + multiMediaJsonData.folderColletion[currentFolderIndex].folderName + @"\" + multiMediaJsonData.folderColletion[currentFolderIndex].fileNameList[selectMediaIndex]);
- frontPageJson.MediaList.RemoveAt(selectMediaIndex);
- //remove items
- if (frontPageJson.MediaList.Count == 0)
- {
- selectMediaIndex = -1;
- }
- else
- {
- if (selectMediaIndex > (frontPageJson.MediaList.Count - 1))
- {
- selectMediaIndex = frontPageJson.MediaList.Count - 1;
- }
- else
- {
- //selectMediaIndex = selectMediaIndex;
- }
- Border gd = uxFileViewer.Children[selectMediaIndex] as Border;
- gd.BorderBrush = new SolidColorBrush(Colors.Blue);
- }
- Setting.frontPageJsonFile = frontPageJson;
- }
- private void uxLeftBtn_Click(object sender, RoutedEventArgs e)
- {
- if (selectMediaIndex > 0)
- {
- Border bdTemp = uxFileViewer.Children[selectMediaIndex] as Border;
- string stTemp = frontPageJson.MediaList[selectMediaIndex];
- uxFileViewer.Children.RemoveAt(selectMediaIndex);
- frontPageJson.MediaList.RemoveAt(selectMediaIndex);
- selectMediaIndex = selectMediaIndex - 1;
- uxFileViewer.Children.Insert(selectMediaIndex, bdTemp);
- frontPageJson.MediaList.Insert(selectMediaIndex, stTemp);
- bdTemp.Focus();
- Setting.frontPageJsonFile = frontPageJson;
- }
- }
- private void uxRightBtn_Click(object sender, RoutedEventArgs e)
- {
- if (selectMediaIndex != (uxFileViewer.Children.Count - 1) && selectMediaIndex >= 0)
- {
- Border bdTemp = uxFileViewer.Children[selectMediaIndex] as Border;
- string stTemp = frontPageJson.MediaList[selectMediaIndex];
- uxFileViewer.Children.RemoveAt(selectMediaIndex);
- frontPageJson.MediaList.RemoveAt(selectMediaIndex);
- selectMediaIndex = selectMediaIndex + 1;
- uxFileViewer.Children.Insert(selectMediaIndex, bdTemp);
- frontPageJson.MediaList.Insert(selectMediaIndex, stTemp);
- bdTemp.Focus();
- Setting.frontPageJsonFile = frontPageJson;
- }
- }
- private void Sc_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
- {
- int newIndex = uxFileViewer.Children.IndexOf((Border)sender);
- if (selectMediaIndex == newIndex)
- {
- return;
- }
- else
- {
- Border bd;
- if (selectMediaIndex != -1)
- {
- bd = uxFileViewer.Children[selectMediaIndex] as Border;
- bd.BorderBrush = new SolidColorBrush(Colors.Gray);
- }
- selectMediaIndex = newIndex;
- bd = uxFileViewer.Children[selectMediaIndex] as Border;
- bd.BorderBrush = new SolidColorBrush(Colors.Blue);
- bd.Focus();
- }
- }
- }
- }
|