kopano-ol-extension/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/DebugSupport/FeatureDebugSupport.cs

123 lines
3.5 KiB
C#

/// Copyright 2016 Kopano b.v.
///
/// This program is free software: you can redistribute it and/or modify
/// it under the terms of the GNU Affero General Public License, version 3,
/// as published by the Free Software Foundation.
///
/// This program is distributed in the hope that it will be useful,
/// but WITHOUT ANY WARRANTY; without even the implied warranty of
/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
/// GNU Affero General Public License for more details.
///
/// You should have received a copy of the GNU Affero General Public License
/// along with this program.If not, see<http://www.gnu.org/licenses/>.
///
/// Consult LICENSE file for details
using Microsoft.Office.Interop.Outlook;
using System;
using System.Collections.Generic;
using Acacia.Features.ReplyFlags;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Acacia.Utils;
using System.Threading;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Acacia.UI;
using Acacia.ZPush;
using Acacia.UI.Outlook;
namespace Acacia.Features.DebugSupport
{
[AcaciaOption("Contains features to enable support and debugging of the plugin.")]
public class FeatureDebugSupport : Feature, FeatureWithRibbon
{
public FeatureDebugSupport()
{
}
public override void Startup()
{
RegisterButton(this, "About", false, ShowAbout);
if (Dialog)
RegisterButton(this, "Debug", false, ShowDialog);
RegisterButton(this, "Settings", false, ShowSettings);
}
#region About dialog
public void ShowAbout()
{
new AboutDialog().ShowDialog();
}
#endregion
#region Debug options
private static readonly DebugOptions.BoolOption OPTION_DIALOG = new DebugOptions.BoolOption("Dialog", false);
[AcaciaOption("Enables the debug dialog")]
public bool Dialog
{
get { return GetOption(OPTION_DIALOG); }
set { SetOption(OPTION_DIALOG, value); }
}
#endregion
#region Settings
public void ShowSettings()
{
new SettingsDialog().ShowDialog();
}
public override FeatureSettings GetSettings()
{
return new DebugSupportSettings(this);
}
#endregion
#region Debug dialog
private void ShowDialog()
{
new DebugDialog().Show();
}
#endregion
#region Log
public void ShowLog()
{
if (Logger.Instance.Path != null)
{
// This is roughly equivalent to starting explorer with /select, but has
// the benefit of reusing windows if it's done multiple times
IntPtr pidl = ILCreateFromPathW(Logger.Instance.Path);
SHOpenFolderAndSelectItems(pidl, 0, IntPtr.Zero, 0);
ILFree(pidl);
}
}
[DllImport("shell32.dll", CharSet = CharSet.Unicode)]
private static extern IntPtr ILCreateFromPathW(string pszPath);
[DllImport("shell32.dll")]
private static extern int SHOpenFolderAndSelectItems(IntPtr pidlFolder, int cild, IntPtr apidl, int dwFlags);
[DllImport("shell32.dll")]
private static extern void ILFree(IntPtr pidl);
#endregion
}
}