/// <summary> /// Get images for ribbon bar buttons /// </summary> /// <param name="imageName">name of image to get</param> /// <returns>image stream</returns> public IStream GetImage(string imageName) { MemoryStream mem = new MemoryStream(); switch (imageName) { case "pageTags.png": Properties.Resources.tag_32x32.Save(mem, ImageFormat.Png); break; case "managePageTags.png": Properties.Resources.settings_32x32.Save(mem, ImageFormat.Png); break; case "findPageTags.png": Properties.Resources.tagSearch_32x32.Save(mem, ImageFormat.Png); break; default: TraceLogger.Log(TraceCategory.Warning(), "Unknown image requested: {0}", imageName); Properties.Resources.tag_32x32.Save(mem, ImageFormat.Png); break; } return(new COMReadonlyStreamAdapter(mem)); }
/// <summary> /// Show a WPF window. /// </summary> /// <typeparam name="W">window type</typeparam> /// <typeparam name="M">view model type</typeparam> /// <param name="viewModelFactory">factory method to generate the view model in the UI thread of the WPF window</param> public void Show <W, M>(Func <M> viewModelFactory) where W : System.Windows.Window, IOneNotePageWindow <M>, new() where M : WindowViewModelBase { var thread = new Thread(() => { try { lock (_SingletonWindows) { System.Windows.Window w; if (_SingletonWindows.TryGetValue(typeof(W), out w)) { w.Dispatcher.Invoke(() => { w.WindowState = WindowState.Normal; BringWindowIntoView(w); }); return; } w = new W(); w.Closing += (o, e) => UnregisterWindow(typeof(W)); w.Closed += (s, e) => w.Dispatcher.InvokeShutdown(); M viewmodel = viewModelFactory(); ((IOneNotePageWindow <M>)w).ViewModel = viewmodel; var helper = new WindowInteropHelper(w) { Owner = (IntPtr)viewmodel.OneNoteApp.CurrentWindow.WindowHandle }; w.Show(); BringWindowIntoView(w); _SingletonWindows.Add(typeof(W), w); } // Turn this thread into an UI thread System.Windows.Threading.Dispatcher.Run(); } catch (ThreadAbortException ta) { TraceLogger.Log(TraceCategory.Warning(), "Window Thread aborted: {0}", ta); } catch (Exception ex) { TraceLogger.Log(TraceCategory.Error(), "Exception while creating dialog: {0}", ex); TraceLogger.ShowGenericErrorBox(Properties.Resources.TagEditor_Error_WindowCreation, ex); } }); thread.SetApartmentState(ApartmentState.STA); thread.IsBackground = true; thread.Start(); }