public void Unload() { if (tileObject != null) { tileObject.CaptionChanged -= new TileLib.BaseTile.CaptionChangedEventHandler(TileObject_CaptionChanged); tileObject.IconChanged -= new TileLib.BaseTile.IconChangedEventHandler(TileObject_IconChanged); tileObject.ShowOptionsEvent -= new TileLib.BaseTile.ShowOptionsEventHandler(TileObject_ShowOptionsEvent); tileObject.ShowFlyoutEvent -= new TileLib.BaseTile.ShowFlyoutEventHandler(TileObject_ShowFlyoutEvent); tileObject.HeightChangedEvent -= new TileLib.BaseTile.HeightChangedEventHandler(tileObject_HeightChangedEvent); tileObject.Unload(); tileObject = null; } TileContentGrid.Children.Clear(); this.BeginAnimation(HeightProperty, (DoubleAnimation)this.Resources["UnLoadHeightAnim"]); isLoaded = false; }
public void Load(AppBarSide side, double height) { this.side = side; //////////////////////////////////// if (!System.IO.File.Exists(this.File)) { return; } tileAssembly = Assembly.LoadFrom(this.File); tileModelType = GetTileModelType(tileAssembly); switch ((ModelType)tileModelType) { case ModelType.LongBar: foreach (Type type in tileAssembly.GetTypes()) { if (type.BaseType == typeof(TileLib.BaseTile)) { TileType = type; } } foreach (Attribute attr in tileAssembly.GetCustomAttributes(false)) { if (attr.GetType() == typeof(TileLib.TileInfo)) { Info = (TileLib.TileInfo)attr; this.TitleTextBlock.Text = Info.Name; } } break; case ModelType.KarlsSidebar: foreach (Type type in tileAssembly.GetTypes()) { if (type.BaseType != null && type.BaseType.ToString() == "Applications.Sidebar.BaseTile") { TileType = type; } } foreach (Attribute attr in tileAssembly.GetCustomAttributes(false)) { if (attr.GetType().ToString() == "Applications.Sidebar.SidebarTileInfo") { Info = new TileLib.TileInfo(((SidebarTileInfo)attr).Title, false, false); this.TitleTextBlock.Text = Info.Name; if (System.IO.File.Exists(System.IO.Path.GetDirectoryName(this.File) + @"\Icon.png")) { this.TitleIcon.Source = new BitmapImage(new Uri(System.IO.Path.GetDirectoryName(this.File) + @"\Icon.png")); } } } break; } this.Unloaded += new RoutedEventHandler(Tile_Unloaded); this.SizeChanged += new SizeChangedEventHandler(Tile_SizeChanged); if (Info == null) { hasErrors = true; } //////////////////////////// try { switch (tileModelType) { case ModelType.LongBar: tileObject = (TileLib.BaseTile)TileType.InvokeMember(null, flags | BindingFlags.CreateInstance, null, null, null); tileObject.CaptionChanged += new TileLib.BaseTile.CaptionChangedEventHandler(TileObject_CaptionChanged); tileObject.IconChanged += new TileLib.BaseTile.IconChangedEventHandler(TileObject_IconChanged); tileObject.ShowOptionsEvent += new TileLib.BaseTile.ShowOptionsEventHandler(TileObject_ShowOptionsEvent); tileObject.ShowFlyoutEvent += new TileLib.BaseTile.ShowFlyoutEventHandler(TileObject_ShowFlyoutEvent); tileObject.HeightChangedEvent += new TileLib.BaseTile.HeightChangedEventHandler(tileObject_HeightChangedEvent); tileObject._path = SidebarWindow.sett.path; control = tileObject.Load(); control.MouseLeftButtonDown += new MouseButtonEventHandler(TileContentGrid_MouseLeftButtonDown); break; case ModelType.KarlsSidebar: tileKObject = (Applications.Sidebar.Tile)TileType.InvokeMember(null, flags | BindingFlags.CreateInstance, null, null, null); control = tileKObject.SidebarContent; Info = new TileLib.TileInfo(Info.Name, tileKObject.hasFlyout, tileKObject.hasConfigWindow); break; } } catch (Exception ex) { if (SidebarWindow.sett.showErrors) { TaskDialogs.ErrorDialog.ShowDialog("An error occured while loading tile. Please send feedback.", String.Format("Error: {0}\nTile: {1}\nSee log for detailed info.", ex.Message, Info.Name), ex); } if (!System.IO.Directory.Exists(SidebarWindow.sett.path + @"\Logs")) { System.IO.Directory.CreateDirectory(SidebarWindow.sett.path + @"\Logs"); } string logFile = string.Format(@"{0}\Logs\{1}.{2}.{3}.log", SidebarWindow.sett.path, DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year); try { System.IO.File.AppendAllText(logFile, String.Format("{0}\r\n{1}\r\n--------------------------------------------------------------------------------------\r\n", DateTime.UtcNow.ToString(), ex)); } catch (Exception ex1) { MessageBox.Show("Can't write to log. Reason: " + ex1.Message, null, MessageBoxButton.OK, MessageBoxImage.Error); } hasErrors = true; return; } DoubleAnimation LoadHeightAnim = (DoubleAnimation)FindResource("LoadHeightAnim"); DoubleAnimation LoadOpacityAnim = (DoubleAnimation)FindResource("LoadOpacityAnim"); LoadHeightAnim.Completed += new EventHandler(LoadHeightAnim_Completed); LoadOpacityAnim.Completed += new EventHandler(LoadOpacityAnim_Completed); if (!double.IsNaN(height)) { LoadHeightAnim.To = height; } else if (double.IsNaN(control.Height)) { LoadHeightAnim.To = 125; } else if (!double.IsNaN(Header.Height) && (DockPanel.GetDock(Header) == Dock.Top || DockPanel.GetDock(Header) == Dock.Bottom)) { LoadHeightAnim.To = control.Height + this.Header.Height + 5; } else { LoadHeightAnim.To = control.Height + 5; } RemoveItem.Header = string.Format((string)TryFindResource("Remove"), Info.Name); CustomizeItem.Header = string.Format((string)TryFindResource("Properties"), Info.Name); MinimizedItem.IsChecked = false; TileContentGrid.Children.Clear(); TileContentGrid.Children.Add(control); if (minimized) { normalHeight = height; this.MinimizedItem.IsChecked = true; } ChangeTheme(SidebarWindow.sett.theme); ChangeLocale(SidebarWindow.sett.locale); isLoaded = true; this.BeginAnimation(HeightProperty, LoadHeightAnim); TileContentGrid.BeginAnimation(OpacityProperty, LoadOpacityAnim); }