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
{
///
/// Interaction logic for UcBasicSetting.xaml
///
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 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();
}
}
}
}