zaaReloaded2/zaaReloaded2/ThisAddIn.cs

204 lines
6.4 KiB
C#
Executable File

/* thisaddin.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.IO;
using Word = Microsoft.Office.Interop.Word;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Word;
using Bovender.Versioning;
using Bovender.Mvvm.Messaging;
using zaaReloaded2.ExceptionHandler;
using System.Windows;
using System.Windows.Input;
using System.Windows.Controls;
using System.Windows.Media;
namespace zaaReloaded2
{
public partial class ThisAddIn
{
/// <summary>
/// Gets the subdirectory for addin data in the user profile directory.
/// </summary>
public static string Subdir
{
get
{
return Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
"zaaReloaded2");
}
}
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Bovender.ExceptionHandler.CentralHandler.ManageExceptionCallback += CentralHandler_ManageExceptionCallback;
RegisterTextBoxSelectAll();
CheckForUpdates();
_oldCaption = Globals.ThisAddIn.Application.Caption;
Globals.ThisAddIn.Application.Caption =
String.Format(
"{0} ({1} {2})",
_oldCaption,
Properties.Settings.Default.AddinName,
Updater.Version.CurrentVersion().ToString()
);
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
if (_updaterVM != null && _updaterVM.IsUpdatePending)
{
if (_updaterVM.InstallUpdateCommand.CanExecute(null))
_updaterVM.InstallUpdateCommand.Execute(null);
}
try
{
Globals.ThisAddIn.Application.Caption = _oldCaption;
}
catch { }
}
#region Properties
public Ribbon Ribbon
{
get
{
if (_ribbon == null)
{
_ribbon = new Ribbon();
}
return _ribbon;
}
}
#endregion
#region Ribbon
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return Ribbon;
}
#endregion
#region Updater
void CheckForUpdates()
{
if (DateTime.Today == Properties.Settings.Default.LastUpdateCheck.Date)
return;
Properties.Settings.Default.LastUpdateCheck = DateTime.Today;
Properties.Settings.Default.Save();
_updaterVM = new UpdaterViewModel(new Updater.Updater());
if (!_updaterVM.CanCheckForUpdate) return;
_updaterVM.UpdateAvailableMessage.Sent += UpdateAvailableMessage_Sent;
_updaterVM.CheckForUpdateCommand.Execute(null);
}
void UpdateAvailableMessage_Sent(object sender, MessageArgs<ViewModelMessageContent> e)
{
UpdaterViewModel uvm = e.Content.ViewModel as UpdaterViewModel;
uvm.DestinationFolder = System.IO.Path.GetTempPath();
uvm.DownloadUpdateCommand.Execute(null);
}
#endregion
#region Exception handler
void CentralHandler_ManageExceptionCallback(object sender, Bovender.ExceptionHandler.ManageExceptionEventArgs e)
{
e.IsHandled = true;
ExceptionViewModel vm = new ExceptionViewModel(e.Exception);
vm.InjectInto<ExceptionView>().ShowDialog();
}
#endregion
#region Private fields
Ribbon _ribbon;
UpdaterViewModel _updaterVM;
string _oldCaption;
#endregion
#region VSTO generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
#endregion
void RegisterTextBoxSelectAll()
{
// Select the text in a TextBox when it receives focus.
EventManager.RegisterClassHandler(typeof(TextBox), TextBox.PreviewMouseLeftButtonDownEvent,
new MouseButtonEventHandler(SelectivelyIgnoreMouseButton));
EventManager.RegisterClassHandler(typeof(TextBox), TextBox.GotKeyboardFocusEvent,
new RoutedEventHandler(SelectAllText));
EventManager.RegisterClassHandler(typeof(TextBox), TextBox.MouseDoubleClickEvent,
new RoutedEventHandler(SelectAllText));
}
void SelectivelyIgnoreMouseButton(object sender, MouseButtonEventArgs e)
{
// Find the TextBox
DependencyObject parent = e.OriginalSource as UIElement;
while (parent != null && !(parent is TextBox))
parent = VisualTreeHelper.GetParent(parent);
if (parent != null)
{
var textBox = (TextBox)parent;
if (!textBox.IsKeyboardFocusWithin)
{
// If the text box is not yet focused, give it the focus and
// stop further processing of this click event.
textBox.Focus();
e.Handled = true;
}
}
}
void SelectAllText(object sender, RoutedEventArgs e)
{
var textBox = e.OriginalSource as TextBox;
if (textBox != null)
textBox.SelectAll();
}
}
}