//判断当前编辑器中是否有某个session。哈希值是根据用户id和消息id计算的。 private CodeEditSessionInfo hasSession(CodeEditSessionInfo info) { foreach (var session in openedSessions.Keys) { if (session.GetHashCode() == info.GetHashCode()) { return(session); } } return(null); }
//请求开启编辑会话。 //如果编辑会话已存在,则切换到它。 //如果编辑会话还不存在,则加入会话集合并进行一些准备工作。 //如果内部的编辑器还没加载好,加入等待队列。 public void RequestOpenSession(CodeEditSessionInfo session) { if (!innerEditorLoaded) { initMonaco(); waitingSessions.Enqueue(session); } else { handleAddSession(session); } }
//创建一个新tab。 private muxc.TabViewItem createTabViewItem(CodeEditSessionInfo session) { var newTab = new muxc.TabViewItem() { Header = "与" + session.Contact.DisplayName + "聊天中的代码", IsClosable = true, IconSource = new muxc.SymbolIconSource() { Symbol = Symbol.Document }, Content = "", Tag = session }; return(newTab); }
private void editorTabView_AddTabButtonClick(muxc.TabView sender, object args) { var info = new CodeEditSessionInfo() { Contact = new ContactPage.ContactItemViewModel() { UserID = count.ToString(), }, CreateTime = DateTime.Now, Language = "csharp", Code = "using System;" }; RequestOpenSession(info); count++; }
public testPage() { this.InitializeComponent(); date = DateTime.Now; info = new CodeEditorPage.CodeEditSessionInfo() { Contact = new ContactPage.ContactItemViewModel() { UserID = "22234", }, CreateTime = date, Language = "csharp", Code = "using System;" }; testPre.Content = page; }
private void handleAddSession(CodeEditSessionInfo session) { var temp = hasSession(session); if (temp != null) { editorTabView.SelectedItem = openedSessions[temp]; } else { var newTab = createTabViewItem(session); editorTabView.TabItems.Add(newTab); openedSessions.Add(session, newTab); editorTabView.SelectedItem = newTab; if (editorPresenter.Content == null) { editorPresenter.Content = codeEditor; } } }
//当关闭一个会话时,需要: //将它的tab移除,将其从本类的字典openedSessions中移除,通知代码编辑器关闭这个会话。 public void RequestCloseSession(CodeEditSessionInfo session) { editorTabView.TabItems.Remove(openedSessions[session]); openedSessions.Remove(session); codeEditor.CloseSession(session); }