|
@@ -1,4 +1,5 @@
|
|
|
using Microsoft.Office.Core;
|
|
|
+using Microsoft.Office.Interop.Word;
|
|
|
using Microsoft.Office.Tools.Ribbon;
|
|
|
using Microsoft.Office.Tools.Word;
|
|
|
using System;
|
|
@@ -6,29 +7,26 @@ using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
using System.IO;
|
|
|
using System.Linq;
|
|
|
+using System.Net.Http;
|
|
|
using System.Reflection;
|
|
|
using System.Text;
|
|
|
using System.Text.Json;
|
|
|
+using System.Threading.Tasks;
|
|
|
using System.Windows.Forms;
|
|
|
+using static HTEXMark.QRCodeForm;
|
|
|
+using static ZXing.QrCode.Internal.Version;
|
|
|
+using Task = System.Threading.Tasks.Task;
|
|
|
namespace HTEXMark
|
|
|
{
|
|
|
public partial class MarkRibbon
|
|
|
{
|
|
|
public static MarkLanguage lang = null;
|
|
|
+ public KnowledgeUserControl knowledgeUserControl;
|
|
|
+ public System.Windows.Forms.ListBox knowledgeListBox;
|
|
|
+ private HttpClient httpClient;
|
|
|
+ public Microsoft.Office.Tools.CustomTaskPane customTaskPane;
|
|
|
private void MarkRibbon_Load(object sender, RibbonUIEventArgs e)
|
|
|
{
|
|
|
-
|
|
|
-
|
|
|
- List<string> strs = new List<string>() { "1", "2", "3" };
|
|
|
-
|
|
|
- foreach (var x in strs)
|
|
|
- {
|
|
|
- var dropDownItem = Factory.CreateRibbonDropDownItem();
|
|
|
- dropDownItem.Label=x;
|
|
|
- dropDownItem.Tag=x;
|
|
|
- schoolDropDown.Items.Add(dropDownItem);
|
|
|
- }
|
|
|
- var wordApp = Globals.ThisAddIn.Application;
|
|
|
// 获取 Office 应用程序的语言设置
|
|
|
LanguageSettings languageSettings = Globals.ThisAddIn.Application.LanguageSettings;
|
|
|
// 获取主语言 ID
|
|
@@ -79,8 +77,142 @@ namespace HTEXMark
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+ knowledgeUserControl =new KnowledgeUserControl();
|
|
|
+ customTaskPane = Globals.ThisAddIn.CustomTaskPanes.Add(knowledgeUserControl, lang.paneTitle);
|
|
|
+ customTaskPane.Visible = false;
|
|
|
+ knowledgeListBox= new System.Windows.Forms.ListBox();
|
|
|
+ knowledgeListBox.Dock = DockStyle.Fill;
|
|
|
+ knowledgeUserControl.Controls.Add(knowledgeListBox);
|
|
|
+ httpClient = HttpClientFactory.Create();
|
|
|
+ }
|
|
|
+ public async void SchoolSelectionChanged(object sender, RibbonControlEventArgs e)
|
|
|
+ {
|
|
|
+ var data = sender as RibbonDropDown;
|
|
|
+ knowledgeListBox.Items.Clear();
|
|
|
+ await AppendSubjectDropDown(data.SelectedItem.Tag.ToString(), httpClient);
|
|
|
+
|
|
|
+ }
|
|
|
+ public async Task AppendSubjectDropDown(string school, HttpClient httpClient)
|
|
|
+ {
|
|
|
+ subjectDropDown.Items.Clear();
|
|
|
+ subjectDropDown.SelectionChanged-=SubjectSelectionChanged;
|
|
|
+ knowledgeListBox.SelectedValueChanged-= KnowledgeListBoxSelectedValueChanged;
|
|
|
+ knowledgeListBox.Items.Clear();
|
|
|
+ var response = await httpClient.GetAsync($"https://rc.teammodel.cn/hita/get-school-data?school={school}");
|
|
|
+ if (response.IsSuccessStatusCode)
|
|
|
+ {
|
|
|
+ string content = await response.Content.ReadAsStringAsync();
|
|
|
+ if (!string.IsNullOrWhiteSpace(content))
|
|
|
+ {
|
|
|
+ var json = JsonSerializer.Deserialize<JsonElement>(content);
|
|
|
+ var periodSubjects = JsonSerializer.Deserialize<List<IdCodeNameCount>>(json.GetProperty("periodSubjects"));
|
|
|
+ if (periodSubjects!=null && periodSubjects.Count>0)
|
|
|
+ {
|
|
|
+ var data = periodSubjects.OrderByDescending(x => x.count);
|
|
|
+ foreach (var subject in data)
|
|
|
+ {
|
|
|
+ var item = this.Factory.CreateRibbonDropDownItem();
|
|
|
+ item.Label=$"{subject.name}({subject.count})";
|
|
|
+ item.Tag=$"{school}:{subject.id}:{subject.code}";
|
|
|
+ subjectDropDown.Items.Add(item);
|
|
|
+ }
|
|
|
+ subjectDropDown.SelectionChanged+=SubjectSelectionChanged;
|
|
|
+ var blocks= await AppendKnowledge(school, data.First().id, data.First().code, httpClient);
|
|
|
+ knowledgeUserControl.InitializeTreeView(knowledgeListBox, blocks);
|
|
|
+ knowledgeListBox.SelectedValueChanged+= KnowledgeListBoxSelectedValueChanged;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var itemDefault = this.Factory.CreateRibbonDropDownItem();
|
|
|
+ itemDefault.Label=$"--------------";
|
|
|
+ subjectDropDown.Items.Add(itemDefault);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void KnowledgeListBoxSelectedValueChanged(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ var box = sender as System.Windows.Forms.ListBox;
|
|
|
+ var point =$"{box.SelectedItem}";
|
|
|
+ Microsoft.Office.Interop.Word.Selection selection = Globals.ThisAddIn.Application.Selection;
|
|
|
+ // 获取当前选择的范围
|
|
|
+ Range selectedRange = selection.Range;
|
|
|
+ // 获取当前光标所在行的范围
|
|
|
+ Range lineRange = selectedRange.Paragraphs[1].Range;
|
|
|
+ if (!string.IsNullOrWhiteSpace(lineRange.Text) && lineRange.Text.Contains(lang.point))
|
|
|
+ {
|
|
|
+ string str = lineRange.Text.TrimEnd();
|
|
|
+ string textBeforeCursor = str.Substring(str.Length-1, 1);
|
|
|
+ if ("..、::,,;".Contains(textBeforeCursor))
|
|
|
+ {
|
|
|
+ selection.TypeText($"{point}");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (textBeforeCursor.Equals("}"))
|
|
|
+ {
|
|
|
+ selection.TypeText($"{point}");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ selection.TypeText($",{point}");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ MessageBox.Show(lang.pointMsgShow);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ private async void SubjectSelectionChanged(object sender, RibbonControlEventArgs e)
|
|
|
+ {
|
|
|
+ List<Block> blocks = new List<Block>();
|
|
|
+ var data = sender as RibbonDropDown;
|
|
|
+ knowledgeListBox.Items.Clear();
|
|
|
+ knowledgeListBox.SelectedValueChanged-= KnowledgeListBoxSelectedValueChanged;
|
|
|
+ string tag = data.SelectedItem.Tag.ToString();
|
|
|
+ string[] tags = tag.Split(':');
|
|
|
+ if (tags.Length==3)
|
|
|
+ {
|
|
|
+ blocks= await AppendKnowledge(tags[0], tags[1], tags[2], httpClient);
|
|
|
+ knowledgeUserControl.InitializeTreeView(knowledgeListBox, blocks);
|
|
|
+ knowledgeListBox.SelectedValueChanged+= KnowledgeListBoxSelectedValueChanged;
|
|
|
+ }
|
|
|
}
|
|
|
+ public async Task<List<Block>> AppendKnowledge(string school, string code, string id, HttpClient httpClient)
|
|
|
+ {
|
|
|
+ var response = await httpClient.GetAsync($"https://rc.teammodel.cn/hita/get-school-knowledge?school={school}&id={id}&code={code}");
|
|
|
+ if (response.IsSuccessStatusCode)
|
|
|
+ {
|
|
|
+
|
|
|
+ string content = await response.Content.ReadAsStringAsync();
|
|
|
+ if (!string.IsNullOrWhiteSpace(content))
|
|
|
+ {
|
|
|
|
|
|
+ List<Block> block = new List<Block>();
|
|
|
+ var json = JsonSerializer.Deserialize<JsonElement>(content);
|
|
|
+ if (json.TryGetProperty("code", out JsonElement _code)&& $"{_code}".Equals("200"))
|
|
|
+ {
|
|
|
+ var points = JsonSerializer.Deserialize<List<string>>(json.GetProperty("points"));
|
|
|
+ if (points!=null && points.Count>0)
|
|
|
+ {
|
|
|
+ block.Add(new Block { name="未归类", points=points });
|
|
|
+ }
|
|
|
+ //var blocks = JsonSerializer.Deserialize<List<Block>>(json.GetProperty("blocks"));
|
|
|
+ //if (blocks!=null && blocks.Count>0)
|
|
|
+ //{
|
|
|
+ // block.AddRange(blocks);
|
|
|
+ //}
|
|
|
+ }
|
|
|
+ return block;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
private void SetLang(MarkLanguage language) {
|
|
|
|
|
|
item_mark_tab.Label=language.item_mark_tab;
|
|
@@ -116,6 +248,11 @@ namespace HTEXMark
|
|
|
count.Label=$"{language.count}\n";
|
|
|
qrcode.Label=$"{language.qrcode}\n";
|
|
|
user.Label=$"{language.user}\n";
|
|
|
+ item_user.Label=$"{language.item_user}";
|
|
|
+ qrcode.Label=$"{language.qrcode}\n";
|
|
|
+ user.Label=$"{language.user}\n";
|
|
|
+ schoolDropDown.Label=$"{language.schoolDropDown}";
|
|
|
+ subjectDropDown.Label=$"{language.subjectDropDown}";
|
|
|
//
|
|
|
single.Tag=language.single;
|
|
|
multiple.Tag=language.multiple;
|
|
@@ -143,7 +280,7 @@ namespace HTEXMark
|
|
|
ended.Tag=language.ended;
|
|
|
level.Tag=language.level;
|
|
|
count.Tag=language.count;
|
|
|
-
|
|
|
+
|
|
|
|
|
|
|
|
|
}
|
|
@@ -151,7 +288,7 @@ namespace HTEXMark
|
|
|
// 创建 Windows Forms 窗口
|
|
|
var qrcode_button = sender as RibbonButton;
|
|
|
|
|
|
- QRCodeForm qrCodeForm = new QRCodeForm(qrcode_button, user,schoolDropDown,subjectDropDown, lang,this )
|
|
|
+ QRCodeForm qrCodeForm = new QRCodeForm(qrcode_button, user,schoolDropDown,subjectDropDown, lang,this, customTaskPane)
|
|
|
{
|
|
|
|
|
|
|
|
@@ -176,12 +313,30 @@ namespace HTEXMark
|
|
|
// 设置窗体位置
|
|
|
qrCodeForm.Location = new System.Drawing.Point(x, y);
|
|
|
}
|
|
|
+ private bool IsCursorAtLineStart(Selection selection)
|
|
|
+ {
|
|
|
+ // 获取当前选择的范围
|
|
|
+ Range selectedRange = selection.Range;
|
|
|
+
|
|
|
+ // 获取当前光标所在行的范围
|
|
|
+ Range lineRange = selectedRange.Paragraphs[1].Range;
|
|
|
+
|
|
|
+ // 判断光标是否在行的开始
|
|
|
+ bool isAtLineStart = (selectedRange.Start == lineRange.Start);
|
|
|
+
|
|
|
+ return isAtLineStart;
|
|
|
+ }
|
|
|
private void MarkTags_Click(object sender, RibbonControlEventArgs e)
|
|
|
{ // 在这里根据按钮的标识执行相应的操作
|
|
|
var button = sender as RibbonButton;
|
|
|
string buttonId = button.Id;
|
|
|
string buttonTag = button.Tag.ToString();
|
|
|
Microsoft.Office.Interop.Word.Selection selection = Globals.ThisAddIn.Application.Selection;
|
|
|
+ string br = string.Empty;
|
|
|
+ if (!IsCursorAtLineStart(selection))
|
|
|
+ {
|
|
|
+ br="\n";
|
|
|
+ }
|
|
|
if (buttonId.Equals("compose"))
|
|
|
{
|
|
|
// 获取 Office 应用程序的语言设置
|
|
@@ -193,16 +348,16 @@ namespace HTEXMark
|
|
|
{
|
|
|
case 2052:
|
|
|
// 2052 是简体中文的语言 ID
|
|
|
- selection.TypeText("{" + buttonTag + "}{综合题结束}"); break;
|
|
|
+ selection.TypeText(br+"{" + buttonTag + "}\n\n{综合题结束}\n"); break;
|
|
|
case 1028:
|
|
|
// 1028 是繁体中文的语言 ID
|
|
|
- selection.TypeText("{" + buttonTag + "}{題組題結束}"); break;
|
|
|
+ selection.TypeText(br+"{" + buttonTag + "}\n\n{題組題結束}\n"); break;
|
|
|
case 1033:
|
|
|
// 1033 是英语的语言 ID
|
|
|
- selection.TypeText("{" + buttonTag + "}{QuestionGroupEnded}"); break;
|
|
|
+ selection.TypeText(br+"{" + buttonTag + "}\n\n{QuestionGroupEnded}\n"); break;
|
|
|
default:
|
|
|
// System.Windows.Forms.MessageBox.Show("未知的 Office 语言版本:" + languageId.ToString());
|
|
|
- selection.TypeText("{" + buttonTag + "}");
|
|
|
+ selection.TypeText(br+"{" + buttonTag + "}");
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -216,22 +371,46 @@ namespace HTEXMark
|
|
|
{
|
|
|
case 2052:
|
|
|
// 2052 是简体中文的语言 ID
|
|
|
- selection.TypeText("{综合题结束}"); break;
|
|
|
+ selection.TypeText(br+"{综合题结束}\n"); break;
|
|
|
case 1028:
|
|
|
// 1028 是繁体中文的语言 ID
|
|
|
- selection.TypeText("{題組題結束}"); break;
|
|
|
+ selection.TypeText(br+"{題組題結束}\n"); break;
|
|
|
case 1033:
|
|
|
// 1033 是英语的语言 ID
|
|
|
- selection.TypeText("{QuestionGroupEnded}"); break;
|
|
|
+ selection.TypeText(br+"{QuestionGroupEnded}\n"); break;
|
|
|
default:
|
|
|
// System.Windows.Forms.MessageBox.Show("未知的 Office 语言版本:" + languageId.ToString());
|
|
|
- selection.TypeText("{QuestionGroupEnded}");
|
|
|
+ selection.TypeText(br+"{QuestionGroupEnded}\n");
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- selection.TypeText("{" + buttonTag + "}");
|
|
|
+ if (buttonId.Equals("remember")||buttonId.Equals("understand")||buttonId.Equals("apply")||buttonId.Equals("analyze")
|
|
|
+ ||buttonId.Equals("evaluate")||buttonId.Equals("create"))
|
|
|
+ {
|
|
|
+ // 获取当前选择的范围
|
|
|
+ Range selectedRange = selection.Range;
|
|
|
+
|
|
|
+ // 获取当前光标所在行的范围
|
|
|
+ Range lineRange = selectedRange.Paragraphs[1].Range;
|
|
|
+
|
|
|
+ if (lineRange.Text.Contains(lang.taxonomy))
|
|
|
+ {
|
|
|
+ selection.TypeText( buttonTag+"\n");
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ selection.TypeText(br + "{" + buttonTag + "}\n");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else if (buttonId.Equals("itrue")||buttonId.Equals("ifalse")) {
|
|
|
+ selection.TypeText(br + "{" + buttonTag + "}\n");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ selection.TypeText(br+"{" + buttonTag + "}");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|