214 lines
7.0 KiB
C#
Executable File
214 lines
7.0 KiB
C#
Executable File
/* Ribbon.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.IO;
|
|
using System.Reflection;
|
|
using System.Runtime.InteropServices;
|
|
using System.Windows;
|
|
using System.Drawing;
|
|
using System.Windows.Resources;
|
|
using Office = Microsoft.Office.Core;
|
|
|
|
// TODO: Follow these steps to enable the Ribbon (XML) item:
|
|
|
|
// 1: Copy the following code block into the ThisAddin, ThisWorkbook, or ThisDocument class.
|
|
|
|
// protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
|
|
// {
|
|
// return new Ribbon();
|
|
// }
|
|
|
|
// 2. Create callback methods in the "Ribbon Callbacks" region of this class to handle user
|
|
// actions, such as clicking a button. Note: if you have exported this Ribbon from the Ribbon designer,
|
|
// move your code from the event handlers to the callback methods and modify the code to work with the
|
|
// Ribbon extensibility (RibbonX) programming model.
|
|
|
|
// 3. Assign attributes to the control tags in the Ribbon XML file to identify the appropriate callback methods in your code.
|
|
|
|
// For more information, see the Ribbon XML documentation in the Visual Studio Tools for Office Help.
|
|
|
|
|
|
namespace zaaReloaded2
|
|
{
|
|
[ComVisible(true)]
|
|
public class Ribbon : Office.IRibbonExtensibility
|
|
{
|
|
#region Constructor
|
|
|
|
public Ribbon()
|
|
{
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IRibbonExtensibility Members
|
|
|
|
public string GetCustomUI(string ribbonID)
|
|
{
|
|
return GetResourceText("zaaReloaded2.Ribbon.xml");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Ribbon Callbacks
|
|
//Create callback methods here. For more information about adding callback methods, visit http://go.microsoft.com/fwlink/?LinkID=271226
|
|
|
|
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
|
|
{
|
|
_ribbon = ribbonUI;
|
|
Microsoft.Office.Interop.Word.Application word = Globals.ThisAddIn.Application;
|
|
word.WindowSelectionChange += Application_WindowSelectionChange;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Handles ribbon button clicks. This method also contains the try...catch
|
|
/// structure that invokes the central exception handler in the event of an
|
|
/// exception.
|
|
/// </summary>
|
|
/// <param name="control"></param>
|
|
public void Ribbon_Click(Office.IRibbonControl control)
|
|
{
|
|
try
|
|
{
|
|
switch (control.Id)
|
|
{
|
|
case "zrlFormatLab":
|
|
Commands.Format();
|
|
break;
|
|
case "zrlSettings":
|
|
Commands.ChooseSettings();
|
|
break;
|
|
case "zrlAbout":
|
|
Commands.ShowAbout();
|
|
break;
|
|
case "zrlPreferences":
|
|
Commands.ShowPreferences();
|
|
break;
|
|
case "zrlDaniel":
|
|
Commands.ApplyDanielsStyle();
|
|
break;
|
|
case "zrlDemo":
|
|
Commands.LoadDemo();
|
|
break;
|
|
case "zrlFormatDrugsOneCol":
|
|
Commands.FormatDrugs(1);
|
|
break;
|
|
case "zrlFormatDrugsTwoCol":
|
|
Commands.FormatDrugs(2);
|
|
break;
|
|
default:
|
|
throw new InvalidOperationException("No operation defined for " + control.Id);
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Bovender.ExceptionHandler.CentralHandler.Manage(this, e);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns an Image object for the ribbon.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// The image file is expected to be a WPF resource file, not an embedded resource.
|
|
/// To be consistent accross the application which uses WPF resources for its WPF
|
|
/// windows, all images are to be built as resources rather than embedded resources.
|
|
/// </remarks>
|
|
/// <param name="imageId">The file name (without path) of the image.</param>
|
|
/// <returns>Image object</returns>
|
|
public object Ribbon_LoadImage(string imageId)
|
|
{
|
|
string initPackScheme = System.IO.Packaging.PackUriHelper.UriSchemePack;
|
|
StreamResourceInfo sri = Application.GetResourceStream(
|
|
new Uri(@"pack://application:,,,/zaaReloaded2;component/Icons/" + imageId));
|
|
return Image.FromStream(sri.Stream);
|
|
}
|
|
|
|
public bool Daniel_GetVisible(Office.IRibbonControl control)
|
|
{
|
|
switch (Environment.UserName.ToUpper())
|
|
{
|
|
case "DANIEL":
|
|
case "KRAUS_D1":
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public bool CanFormat(Office.IRibbonControl control)
|
|
{
|
|
return Commands.CanFormat();
|
|
}
|
|
|
|
public bool CanFormatDrugs(Office.IRibbonControl control)
|
|
{
|
|
return Commands.CanFormat();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Public methods
|
|
|
|
/// <summary>
|
|
/// Activates the add-in's tab.
|
|
/// </summary>
|
|
public void ActivateZaaTab()
|
|
{
|
|
_ribbon.ActivateTab("zaaReloaded2");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Private methods
|
|
|
|
private void Application_WindowSelectionChange(Microsoft.Office.Interop.Word.Selection Sel)
|
|
{
|
|
_ribbon.Invalidate();
|
|
}
|
|
|
|
private static string GetResourceText(string resourceName)
|
|
{
|
|
Assembly asm = Assembly.GetExecutingAssembly();
|
|
string[] resourceNames = asm.GetManifestResourceNames();
|
|
for (int i = 0; i < resourceNames.Length; ++i)
|
|
{
|
|
if (string.Compare(resourceName, resourceNames[i], StringComparison.OrdinalIgnoreCase) == 0)
|
|
{
|
|
using (StreamReader resourceReader = new StreamReader(asm.GetManifestResourceStream(resourceNames[i])))
|
|
{
|
|
if (resourceReader != null)
|
|
{
|
|
return resourceReader.ReadToEnd();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Fields
|
|
|
|
private Office.IRibbonUI _ribbon;
|
|
|
|
#endregion
|
|
}
|
|
}
|