PluginBridge.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System.Drawing;
  2. using System.Runtime.InteropServices;
  3. using System.Threading.Tasks;
  4. using System.Windows.Forms;
  5. using Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter;
  6. using NppChnConvPlugin.NppPluginInfrastructure;
  7. namespace NppChnConvPlugin
  8. {
  9. internal static class PluginBridge
  10. {
  11. private static readonly IScintillaGateway CurrentEditor = new ScintillaGateway(PluginBase.GetCurrentScintilla());
  12. // for get current editing file info
  13. private static readonly INotepadPPGateway Notepad = new NotepadPPGateway();
  14. public static bool Enable { get; private set; }
  15. public static void SetupPluginMenu()
  16. {
  17. PluginBase.SetCommand(0, "Convert To CHS", ConvertToChs);
  18. PluginBase.SetCommand(1, "Convert To CHT", ConvertToCht);
  19. }
  20. public static void SetupToolBarIcon()
  21. {
  22. var toolbarIcons = new toolbarIcons { hToolbarBmp = Properties.Resources.Bitmap1.GetHbitmap() };
  23. var pTbIcons = Marshal.AllocHGlobal(Marshal.SizeOf(toolbarIcons));
  24. Marshal.StructureToPtr(toolbarIcons, pTbIcons, false);
  25. Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_ADDTOOLBARICON, PluginBase._funcItems.Items[0]._cmdID, pTbIcons);
  26. Marshal.FreeHGlobal(pTbIcons);
  27. toolbarIcons = new toolbarIcons { hToolbarBmp = Properties.Resources.Bitmap2.GetHbitmap() };
  28. pTbIcons = Marshal.AllocHGlobal(Marshal.SizeOf(toolbarIcons));
  29. Marshal.StructureToPtr(toolbarIcons, pTbIcons, false);
  30. Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_ADDTOOLBARICON, PluginBase._funcItems.Items[1]._cmdID, pTbIcons);
  31. Marshal.FreeHGlobal(pTbIcons);
  32. }
  33. private static void ConvertToChs() => DoConvertSelect(ChineseConversionDirection.TraditionalToSimplified);
  34. private static void ConvertToCht() => DoConvertSelect(ChineseConversionDirection.SimplifiedToTraditional);
  35. private static void DoConvertSelect(ChineseConversionDirection chineseConversionDirection)
  36. {
  37. CurrentEditor.BeginUndoAction();
  38. var selections = CurrentEditor.GetSelections();
  39. for (int i = selections - 1; i >= 0; i--)
  40. {
  41. var start = CurrentEditor.GetSelectionNStart(i);
  42. var end = CurrentEditor.GetSelectionNEnd(i);
  43. CurrentEditor.SetTargetStart(start);
  44. CurrentEditor.SetTargetEnd(end);
  45. var text = CurrentEditor.GetTargetText();
  46. var convert = ChineseConverter.Convert(text, chineseConversionDirection);
  47. var len = CurrentEditor.EncodedFromUTF8Len(convert);
  48. CurrentEditor.ReplaceTarget(len, convert);
  49. }
  50. CurrentEditor.EndUndoAction();
  51. }
  52. public static void FlushState()
  53. {
  54. CurrentEditor.SetScintillaHandle(PluginBase.GetCurrentScintilla());
  55. }
  56. public static void UpdateText()
  57. {
  58. }
  59. public static void UpdateScroll()
  60. {
  61. }
  62. public static void Exit()
  63. {
  64. }
  65. }
  66. }