using GeekDesk.Control.Other; using GeekDesk.Interface; using GeekDesk.Util; using GeekDesk.ViewModel; using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using static GeekDesk.Util.ShowWindowFollowMouse; namespace GeekDesk.Control.Windows { /// /// IconfontWindow.xaml 的交互逻辑 /// public partial class IconfontWindow : Window, IWindowCommon { private static AppConfig appConfig = MainWindow.appData.AppConfig; private static MenuInfo menuInfo; private static List systemIcons; private static List customIcons; public static IconfontViewModel vm; private IconfontWindow(List icons, MenuInfo menuInfo) { InitializeComponent(); systemIcons = icons; this.Topmost = true; IconfontWindow.menuInfo = menuInfo; vm = new IconfontViewModel { Iconfonts = systemIcons }; this.DataContext = vm; } /// /// 移动窗口 /// /// /// private void DragMove(object sender, System.Windows.Input.MouseButtonEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { DragMove(); } } private void Close_Click(object sender, RoutedEventArgs e) { this.DataContext = null; this.Close(); } private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) { TabItem ti = this.MyTabControl.SelectedItem as TabItem; switch (ti.Tag.ToString()) { case "Custom": CustomButton.IsEnabled = true; if (StringUtil.IsEmpty(appConfig.CustomIconUrl) || StringUtil.IsEmpty(appConfig.CustomIconJsonUrl)) { LoadingEle.Visibility = Visibility.Visible; CustomIcon.Visibility = Visibility.Collapsed; HandyControl.Controls.Dialog.Show(new CustomIconUrlDialog(appConfig), "IconUrlDialog"); } else { if (customIcons == null) { vm.Iconfonts = null; LoadingOnlineIcon(); } else { vm.Iconfonts = customIcons; LoadingEle.Visibility = Visibility.Collapsed; CustomIcon.Visibility = Visibility.Visible; } } break; default: if (CustomButton != null) { CustomButton.IsEnabled = false; } if (vm != null) { vm.Iconfonts = systemIcons; } break; } } private void Confirm_Click(object sender, RoutedEventArgs e) { TabItem ti = this.MyTabControl.SelectedItem as TabItem; int index; switch (ti.Tag.ToString()) { case "Custom": index = this.CustomIcon.IconListBox.SelectedIndex; if (index != -1) { menuInfo.MenuGeometry = customIcons[index].Text; } break; default: index = this.SystemIcon.IconListBox.SelectedIndex; if (index != -1) { menuInfo.MenuGeometry = systemIcons[index].Text; } break; } this.DataContext = null; this.Close(); } private static System.Windows.Window window = null; public static void Show(List listInfo, MenuInfo menuInfo) { if (window == null || !window.Activate()) { window = new IconfontWindow(listInfo, menuInfo); } window.Show(); Keyboard.Focus(window); ShowWindowFollowMouse.Show(window, MousePosition.LEFT_CENTER, 0, 0); } private void CustomButton_Click(object sender, RoutedEventArgs e) { HandyControl.Controls.Dialog.Show(new CustomIconUrlDialog(appConfig), "IconUrlDialog"); } private void CheckSettingUrl_TextChanged(object sender, TextChangedEventArgs e) { if (CheckSettingUrl.Text == "true") { LoadingOnlineIcon(); } else { LoadingEle.IsRunning = true; CustomIcon.Visibility = Visibility.Collapsed; } } private void LoadingOnlineIcon() { try { string svgJsStr = HttpUtil.Get(appConfig.CustomIconUrl); string jsonStr = HttpUtil.Get(appConfig.CustomIconJsonUrl); List icons = SvgToGeometry.GetIconfonts(svgJsStr, jsonStr); customIcons = icons; vm.Iconfonts = customIcons; LoadingEle.Visibility = Visibility.Collapsed; CustomIcon.Visibility = Visibility.Visible; } catch (Exception e) { HandyControl.Controls.Growl.WarningGlobal("加载远程图标异常!"); LogUtil.WriteErrorLog(e, "加载远程图标异常!"); } } public void OnKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Escape) { this.DataContext = null; this.Close(); } } public class IconfontViewModel : INotifyPropertyChanged { private List iconfonts; private string isSettingUrl; public List Iconfonts { get { return iconfonts; } set { iconfonts = value; OnPropertyChanged("Iconfonts"); } } public string IsSettingUrl { get { return isSettingUrl; } set { isSettingUrl = value; OnPropertyChanged("IsSettingUrl"); } } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } } }