using Microsoft.Office.Tools.Ribbon;
using System;
using System.Diagnostics;
using AIProofread.Controls;
using UtilLib;
using Microsoft.Office.Interop.Word;
using AIProofread.Util;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AIProofread.core;
using System.Windows.Forms;
using AIProofread.Properties;
using System.Security.Policy;
namespace AIProofread
{
public partial class Ribbon1
{
private bool IS_LOGIN = false;
private Userinfo currentLoginUserinfo;
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
//btnLogin.Label = "用户\n登录";
//btnLogout.Label = "退出\n登录";
Globals.ThisAddIn.ribbon = this;
InitModule();
}
///
/// 用于调试或测试
///
public void InitModule()
{
menuProofreadList.Visible = AppModule.ENABLE_PROOFREAD;
BtnExportProofreadResult.Visible = AppModule.ENABLE_EXPORT_PROOFREAD_RESULT;
btnOpenLexicon.Visible = AppModule.ENABLE_LEXICON_MANAGE;
menuSencenDect.Visible = AppModule.ENABLE_COMMONSENSE_CHECK;
btnSetting.Visible = AppModule.ENABLE_SETTING;
ButtonSaveCache.Visible = AppModule.ENABLE_SAVE_CACHE;
ButtonLoadCache.Visible = AppModule.ENABLE_LOAD_CACHE;
BtnGetContact.Visible = AppModule.ENABLE_CUSTOMER_SERVICE;
BtnUpdate.Visible = AppModule.ENABLE_UPGRADE;
BtnShowManual.Visible = AppModule.ENABLE_HELP;
// 调试面板
grpDebug.Visible = Config.RUN_IN_DEBUG;
}
public void SetCommonBtnStatus(bool status)
{
// BtnProofreadAll.Enabled = status;
menuProofreadList.Enabled = status;
btnClear.Enabled = status;
btnOpenLexicon.Enabled = status;
btnSetting.Enabled = status;
BtnUpdate.Enabled = status;
btnLogin.Enabled = status;
btnLogout.Enabled = status;
ButtonLoadCache.Enabled = status;
ButtonSaveCache.Enabled = status;
menuSencenDect.Enabled = status;
//BtnShowPanel.Enabled = status;
BtnExportProofreadResult.Enabled = status;
}
public void SetBtnStatus(string key, bool status)
{
if (key == "proofread-status")
{
SetCommonBtnStatus(status);
}
else if (key == "view-panel")
{
BtnShowPanel.Enabled = status;
}
else if (key == "disable-by-upgrade")
{
SetCommonBtnStatus(status);
BtnUpdate.Enabled = true;
BtnShowPanel.Enabled = status;
}
}
///
/// 初始化WPS相关功能(图标)
///
public void InitWPS()
{
menuProofreadList.Image = AIProofread.Properties.Resources.icon_proofread_wps;
btnClear.Image = AIProofread.Properties.Resources.icon_clear_wps;
btnOpenLexicon.Image = AIProofread.Properties.Resources.icon_book_wps;
btnSetting.Image = AIProofread.Properties.Resources.icon_setting_wps;
BtnGetContact.Image = AIProofread.Properties.Resources.icon_phone_wps;
BtnUpdate.Image = AIProofread.Properties.Resources.icon_update_wps;
btnLogin.Image = AIProofread.Properties.Resources.icon_user_wps;
menuSencenDect.Image = AIProofread.Properties.Resources.icon_ai_robot_wps;
btnLogout.Image = AIProofread.Properties.Resources.icon_logout_wps;
// 缓存相关
ButtonLoadCache.Image = AIProofread.Properties.Resources.icon_refresh_wps;
ButtonSaveCache.Image = AIProofread.Properties.Resources.icon_save_wps;
// 显示面板
BtnShowPanel.Image = AIProofread.Properties.Resources.icon_panel_wps;
// 导出校对结果
BtnExportProofreadResult.Image = AIProofread.Properties.Resources.icon_export_wps;
BtnShowManual.Image = AIProofread.Properties.Resources.icon_manual_wps;
}
public void ProcessLoginInfo(Userinfo userinfo)
{
if (userinfo == null) return;
currentLoginUserinfo = userinfo;
// 登录状态
IS_LOGIN = true;
// 切换登录状态
ToggleLogin();
LblNickname.Label = userinfo.nickname;
LblDate.Label = userinfo.expiration;
// 关闭所有登录窗口
foreach (var item in Globals.ThisAddIn.LoginFormList)
{
try
{
if (!item.IsDisposed)
{
item.Close();
}
}
catch (Exception ex)
{
LogHelper.Log(this.Name, ex);
}
}
Globals.ThisAddIn.LoginFormList.Clear();
}
///
/// 注销登录
///
public void ProcessLogout()
{
Globals.ThisAddIn.CloseReadmeIfShown();
IS_LOGIN = false;
currentLoginUserinfo = null;
ToggleLogin();
Globals.ThisAddIn.HideAllPanel();
}
// 处理是否登录的展示
private void ToggleLogin()
{
btnLogin.Visible = !IS_LOGIN;
btnLogout.Visible = IS_LOGIN;
//LblNickname.Visible = IS_LOGIN;
//LblDate.Visible = IS_LOGIN;
}
// 弹出登录窗口
private void btnLogin_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
Bridge.bridge.ShowLoginForm(null);
}
// 注销登录
private void btnLogout_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
Globals.ThisAddIn.ActiveDocument.ShowDialog(currentLoginUserinfo.phone + " 退出AI校对王?", "确定", "logout");
//Globals.ThisAddIn.ShowDialog("退出AI校对王",)
// 注销吧
//Bridge.bridge.Logout(null);
//Globals.ThisAddIn.HideAllPanel();
//Globals.ThisAddIn.SendMessageToWeb("confirm-logout", null);
}
public void ShowNewVersionIcon()
{
Globals.ThisAddIn.CloseReadmeIfShown();
BtnUpdate.Image = Globals.ThisAddIn.IsWPS? Resources.icon_update_new_wps : Resources.icon_update_new;
}
private void btnOpenLexicon_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
Globals.ThisAddIn.SendMessageToWeb("show-lexicon", null);
//(new FormLexicon()).Show();
}
private void btnSetting_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
Globals.ThisAddIn.SendMessageToWeb("show-setting", null);
}
private void BtnGetContact_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
var frm = new FormContact();
Globals.ThisAddIn.ActiveDocument.RunInMainThread(() =>
{
frm.ShowDialog();
});
}
private void BtnUpdate_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
//System.Windows.Forms.MessageBox.Show("当前插件是最新版本");
//Globals.ThisAddIn.SendMessageToWeb("upgrade", Config.APP_VERSION);
Bridge.bridge.ShowUpgradeView();
}
private void btnClear_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
//DocumentUtil.ClearProofreadMarks();
Globals.ThisAddIn.ActiveDocument.ShowDialog("请确认是否清除此文档的所有校对标注?", "确定", "clear-tips");
//if (result == DialogResult.OK)
//{
// //Bridge.bridge.clearAllProofreadMark(null);
// Globals.ThisAddIn.ClearAllProofreadMark();
//}
}
private void btnShowPane_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
Globals.ThisAddIn.ShowPanel();
}
private void btnHidePane_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
Globals.ThisAddIn.HidePanel();
}
private Microsoft.Office.Interop.Word.Document CurrentDocument;
private void TestSplit()
{
//try
//{
// this.CurrentDocument = Globals.ThisAddIn.Application.ActiveDocument;
// string rangeText = GetRangeText(CurrentDocument.Content);
// // 获取所有数学公式吗
// foreach (OMath oMath in CurrentDocument.OMaths)
// {
// Console.WriteLine("xx");
// }
// // 形状哟
// int count = CurrentDocument.Shapes.Count;
// System.Windows.Forms.MessageBox.Show(string.Format("Shapes总计:{0}", count));
// foreach (Microsoft.Office.Interop.Word.Shape shape in CurrentDocument.Shapes)
// {
// }
// int count2 = CurrentDocument.InlineShapes.Count;
// System.Windows.Forms.MessageBox.Show(string.Format("InlineShapes总计:{0}", count2));
// foreach (InlineShape inlineShape in CurrentDocument.InlineShapes)
// {
// }
// string text5 = rangeText;
// Logger.Log($"Removed unuseable section article: {text5}");
// string text6 = HostHelper.ReplaceSpecialChars(rangeText, isReplaceMultSpaceLine: true);
// Logger.Log($"Removed unuseable section upload: {text6}");
// int end = CurrentDocument.Content.End;
// // 分割
// string[] separator = new string[5] { "\r\a", "\a", "\r", "\v", "\f" };
// string[] array4 = text5.Split(separator, StringSplitOptions.None);
// string[] array5 = text6.Split('\n');
// object Start = 0;
// object End = 1;
// //int pagenumber = GetIndexPageNumber(CurrentDocument.Range(ref Start, ref End));
// int start = 0;
// int start2 = 0;
// int start3 = 0;
// string empty = string.Empty;
// string empty2 = string.Empty;
// string empty3 = string.Empty;
// Range lastRange = null;
// for (int j = 0; j < array5.Length; j++)
// {
// empty3 = string.Empty;
// List characters = new List();
// CorrectionFragmentAbstract correctionFragmentAbstract = null;
// //Logger.Instance.Info($"Handling {j + 1} upload part");
// empty2 = array5[j];
// if (string.IsNullOrEmpty(empty2))
// {
// continue;
// }
// int num4 = start + empty2.Length + 1;
// for (; string.IsNullOrEmpty(HostHelper.RemoveInvisibleCharas(array4[i])); i++)
// {
// num4 += array4[i].Length + 1;
// }
// empty = array4[i];
// //Logger.Instance.Info($"Upload part is {empty2}");
// End = start;
// Start = num4;
// Range range3 = CurrentDocument.Range(ref End, ref Start);
// string rangeText3 = GetRangeText(range3);
// //Logger.Instance.Info($"Text is {rangeText3}");
// StringBuilder stringBuilder = new StringBuilder();
// string text7 = (string.IsNullOrEmpty(rangeText3) ? "" : rangeText3.Last().ToString());
// if (HostHelper.RemoveInvisibleCharas(rangeText3) != empty2 || (text7 != "\r" && text7 != "\r\a" && text7 != "\a" && text7 != "\f" && text7 != "\v"))
// {
// int articleIndex = start;
// Start = articleIndex;
// End = articleIndex + 1;
// Range range4 = CurrentDocument.Range(ref Start, ref End);
// text7 = GetRangeText(range4);
// bool flag = true;
// while ((text7 != "\r" && text7 != "\r\a" && text7 != "\a" && text7 != "\f" && text7 != "\v") || flag)
// {
// if (flag)
// {
// //Logger.Instance.Info(string.Format("Special text default logic.", rangeText3));
// GetInvisibleCharacters(ref articleIndex, empty2, end, stringBuilder, characters, flag);
// }
// else
// {
// //Logger.Instance.Info(string.Format("Text not contains \\r.", rangeText3));
// GetInvisibleCharacters(ref articleIndex, "\r", end, stringBuilder, characters, flag);
// }
// End = articleIndex;
// Start = articleIndex + 1;
// range4 = CurrentDocument.Range(ref End, ref Start);
// text7 = GetRangeText(range4);
// flag = false;
// }
// stringBuilder.Append(text7);
// string text8 = stringBuilder.ToString();
// empty = text8.Replace("\a", "");
// num4 = range4.End;
// //Logger./*Instance*/.Info($"Article part is {empty}");
// if (empty.ToUpper().Contains("PAGEREF _TOC"))
// {
// start = num4;
// //Logger.Instance.Info("String Contains 'PAGEREF _TOC' Struct.");
// continue;
// }
// }
// else
// {
// empty = rangeText3.Replace("\a", "");
// int tempIndex = start;
// empty.ToCharArray().ToList().ForEach(delegate (char x)
// {
// characters.Add(new CorrectionCharacter(x, _v: true, tempIndex));
// tempIndex++;
// });
// }
// }
//}
//catch (Exception ex)
//{
// System.Windows.Forms.MessageBox.Show("出现了异常:" + ex.Message);
//}
}
private string GetInvisibleCharacters(ref int articleIndex, string articlePart, int end, StringBuilder stringBuilder, List characters, bool isFirst = true)
{
int num = articleIndex;
if (!isFirst)
{
articlePart = HostHelper.RemoveInvisibleCharas(articlePart);
}
int num2 = ((articlePart.Length + articleIndex < end) ? articlePart.Length : (end - articleIndex));
Range range = null;
string empty = string.Empty;
if (string.IsNullOrEmpty(articlePart))
{
string[] source = new string[4] { "\r", "\r\a", "\v", "\f" };
empty = string.Empty;
while (range == null || range.Text == null || !source.Contains(empty))
{
if (!string.IsNullOrEmpty(empty))
{
stringBuilder.Append(empty);
num++;
}
if (num >= end)
{
//Logger.Instance.Error($"Correction dictionary over length:{stringBuilder.ToString()}");
throw new ArgumentOutOfRangeException($"Not pair character: \\r \\f \\v \\r\\a, position {articleIndex}");
}
object Start = num;
object End = num + 1;
range = CurrentDocument.Range(ref Start, ref End);
empty = GetRangeText(range);
string text = empty;
string text2 = text;
if (text2 != null && (text2 == null || text2.Length != 0))
{
if (text2 == "\u001e")
{
empty = "-";
}
}
else
{
empty = "\n";
}
characters.Add(new CorrectionCharacter(empty.First(), source.Contains(empty), range.Start));
}
}
else
{
for (int i = 0; i < num2; i++)
{
string text3 = articlePart[i].ToString();
empty = string.Empty;
while (range == null || range.Text == null || !empty.Contains(text3))
{
if (num >= end)
{
//Logger.Instance.Error($"Correction dictionary over length:{stringBuilder.ToString()}");
throw new ArgumentOutOfRangeException($"Not pair character: {text3}, position {articleIndex}");
}
object End = num;
object Start = num + 1;
range = CurrentDocument.Range(ref End, ref Start);
empty = GetRangeText(range);
string text4 = empty;
string text5 = text4;
if (text5 != null && (text5 == null || text5.Length != 0))
{
if (text5 == "\u001e")
{
empty = "-";
}
}
else
{
empty = "\n";
}
stringBuilder.Append(empty);
num++;
characters.Add(new CorrectionCharacter(empty.First(), empty.Contains(text3), range.Start));
}
}
}
articleIndex = num;
return stringBuilder.ToString();
}
public static int GetIndexPageNumber(Range range)
{
int result = -1;
try
{
result = int.Parse(range.get_Information(WdInformation.wdActiveEndPageNumber).ToString());
}
catch (Exception exception)
{
LogHelper.Log(exception);
}
return result;
}
protected string GetRangeText(Range range)
{
return string.IsNullOrEmpty(range.Text) ? "" : range.Text;
}
private void BtnOpenLog_Click(object sender, RibbonControlEventArgs e)
{
// 打开日志目录
Process.Start(Config.APP_LOG_PATH);
}
private void button1_Click(object sender, RibbonControlEventArgs e)
{
Bridge.StartUpgradeProcess();
}
private void BtnOpenLogger_Click(object sender, RibbonControlEventArgs e)
{
// 判断日志窗口是否已经存在或者打开
if (LogHelper.LoggerForm == null || LogHelper.LoggerForm.IsDisposed)
{
// 创建日志窗口
LogHelper.LoggerForm = new FormLogger();
}
LogHelper.LoggerForm.Show();
}
private int GetRangeParagraphNumber(Range range)
{
var app = Globals.ThisAddIn.Application;
int paragraphNumber = 0;
if (range.Paragraphs.Count > 0)
{
// 获取当前文本在文档的段落数
var currentParagraph = range.Paragraphs.First;
var currentParagraphStart = currentParagraph.Range.Start;
var allParagraphs = app.ActiveDocument.Paragraphs;
for (var i = 1; i <= allParagraphs.Count; i++)
{
var paragraph = allParagraphs[i];
var paragraphStart = paragraph.Range.Start;
if (paragraphStart > currentParagraphStart)
{
break;
}
if (currentParagraphStart == paragraphStart || paragraph == currentParagraph)
{
paragraphNumber = i;
break;
}
}
}
return paragraphNumber;
}
private void BtnTest_Click(object sender, RibbonControlEventArgs e)
{
// 获取当前系统时间戳
//int time = (int)(DateTime.Now.Ticks / 10000000);
//BtnTest.Label = "测试按钮" + time;
//var result = MessageBox.Show("Test", "xxx");
//Globals.ThisAddIn.Application.
var app = Globals.ThisAddIn.Application;
var selection = app.Selection;
var range = selection.Range.Duplicate;
range.End = selection.Start;
// 获取所在页
var pageNumber = GetIndexPageNumber(range);
// 获取所在行
var rowNumber = range.get_Information(WdInformation.wdFirstCharacterLineNumber);
int paragraphNumber = GetRangeParagraphNumber(range);
MessageBox.Show($"当前页:{pageNumber}, 行:{rowNumber}, 段落:{paragraphNumber}");
}
private void ButtonSaveCache_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.SendMessageToWeb("save-cache", "");
}
private void ButtonLoadCache_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
Globals.ThisAddIn.ShowDialog("即将加载最近保存的进度,新的修改可能会丢失!", "确定", "load-cache");
}
private void BtnShowPanel_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
Globals.ThisAddIn.SendMessageToWeb("show-panel", "");
}
private void BtnOpenAppDir_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
// 打开日志目录
Process.Start(AppDomain.CurrentDomain.BaseDirectory);
}
private void BtnExportProofreadResult_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
Globals.ThisAddIn.SendMessageToWeb("export-result", "");
}
private void BtnShowVersion_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
Globals.ThisAddIn.SendMessageToWeb("show-version", "");
}
public Range currectSelectRange;
private void btnDetectionAll_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
Globals.ThisAddIn.SendMessageToWeb("show-check-all", "");
}
private void btnDetectionParagraph_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
// 获取当前选中的选区的首尾段落起始与结束位置
var start = currectSelectRange.Start; // .Paragraphs.First.Range
var end = currectSelectRange.End; // .Paragraphs.Last.Range
var data = JSONObject.Create().Put("start", start).Put("end", end).ToString();
Globals.ThisAddIn.SendMessageToWeb("show-check-range", data);
}
private void btnDetectionHistory_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
Globals.ThisAddIn.SendMessageToWeb("show-check-history", "");
}
///
/// 存储当前选区
///
///
public void ParseSelectionChange(Selection s)
{
var r = s.Range;
this.currectSelectRange = r;
if (CommonSenseDetection.instance.isChecking)
{
return;
}
btnDetectionParagraph.Enabled = r.Start != r.End;
btnDetectionAll.Enabled = r.Start == r.End;
}
public void SetDetectionBtnStatus(bool allStatus,bool rangeStatus)
{
btnDetectionAll.Enabled = allStatus;
btnDetectionParagraph.Enabled = rangeStatus;
}
private void BtnShowManual_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
try
{
Process.Start(Config.USER_MANUAL_URL);
}catch (Exception) {
Globals.ThisAddIn.ActiveDocument.ShowMessage("打开用户手册失败", 2000, false);
}
}
private void BtnProofreadExact_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
//
Globals.ThisAddIn.ActiveDocument.CheckPanel();
Globals.ThisAddIn.SendMessageToWeb("start", "exact");
}
private void BtnProofreadFull_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
Globals.ThisAddIn.ActiveDocument.CheckPanel();
Globals.ThisAddIn.SendMessageToWeb("start", "full");
}
private void button2_Click(object sender, RibbonControlEventArgs e)
{
Globals.ThisAddIn.CloseReadmeIfShown();
Bridge.bridge.ShowLoginForm(null);
}
}
}