// 當注音符號有變動 private void cboPhCode_SelectedIndexChanged(object sender, EventArgs e) { if (m_IsUpdatingUI || m_BrWord == null) { return; } if (cboPhCode.SelectedIndex < 0) { return; } m_BrWord.PhoneticCode = cboPhCode.Text; BrailleCellList cellList = m_ChtWordCvt.CreatePhoneticCellList(m_BrWord.PhoneticCode); m_BrWord.CellList.Assign(cellList); txtBraille.Text = BrailleFontConverter.ToString(cellList); }
private void UpdateUI() { m_IsUpdatingUI = true; try { txtChar.Text = m_BrWord.Text; cboPhCode.Items.Clear(); if (m_BrWord.IsPolyphonic) { string[] zhuyinCodes = ZhuyinQueryHelper.GetZhuyinSymbols(txtChar.Text, true); cboPhCode.Items.AddRange(zhuyinCodes); } cboPhCode.SelectedIndex = cboPhCode.Items.IndexOf(m_BrWord.PhoneticCode); txtBraille.Text = BrailleFontConverter.ToString(m_BrWord); } finally { m_IsUpdatingUI = false; } }
/// <summary> /// 更新指定的點字方格。 /// </summary> /// <param name="row"></param> /// <param name="col"></param> /// <param name="brWord"></param> private void UpdateCell(int row, int col, BrailleWord brWord) { // 處理點字 string brFontText = null; try { if (brWord.IsContextTag) { brFontText = " "; } else { brFontText = BrailleFontConverter.ToString(brWord); } } catch (Exception e) { MsgBoxHelper.ShowError(e.Message + "\r\n" + "列:" + row.ToString() + ", 行: " + col.ToString()); brFontText = ""; } row = GetBrailleRowIndex(row); // 確保列索引為點字列。 //若每個 cell 一方點字,就用以下迴圈填入點字 //for (int i = 0; i < brFontText.Length; i++) //{ // brGrid[row, col+i].Value = brFontText[i]; //} brGrid[row, col].Value = brFontText; brGrid[row, col].Tag = brWord; brGrid[row + 1, col].Value = brWord.Text; brGrid[row + 1, col].Tag = brWord; brGrid[row + 2, col].Value = brWord.PhoneticCode; brGrid[row + 2, col].Tag = brWord; }
/// <summary> /// 把一列點字填入指定的 grid 列(影響三列)。 /// </summary> /// <param name="brLine">點字串列。</param> /// <param name="row">欲填入 grid 中的哪一列。</param> /// <param name="autoSize">填完之後,是否要自動重新調整儲存格大小。</param> private void FillRow(BrailleLine brLine, int row, bool autoSize) { string brFontText; int col = brGrid.FixedColumns; // 確保列索引是點字所在的列。 row = GetBrailleRowIndex(row); brGrid.SuspendLayout(); try { foreach (BrailleWord brWord in brLine.Words) { // 處理點字 try { if (brWord.IsContextTag) { brFontText = " "; } else { brFontText = BrailleFontConverter.ToString(brWord); } } catch (Exception e) { MsgBoxHelper.ShowError(e.Message + "\r\n" + "列:" + row.ToString() + ", 行: " + col.ToString()); brFontText = ""; } brGrid[row, col] = new SourceGrid.Cells.Cell(brFontText); brGrid[row, col].ColumnSpan = brFontText.Length; brGrid[row, col].View = m_BrView; brGrid[row, col].Tag = brWord; brGrid[row, col].AddController(m_MenuController); brGrid[row, col].AddController(m_ClickController); // 處理明眼字 brGrid[row + 1, col] = new SourceGrid.Cells.Cell(brWord.Text); brGrid[row + 1, col].ColumnSpan = brFontText.Length; brGrid[row + 1, col].View = m_MingViewCJK; // TODO: 確認音標字形可以正確顯示. 否則要分開判斷,音標符號改用 m_MingView brGrid[row + 1, col].Tag = brWord; brGrid[row + 1, col].AddController(m_MenuController); brGrid[row + 1, col].AddController(m_ClickController); // 處理注音碼 brGrid[row + 2, col] = new SourceGrid.Cells.Cell(brWord.PhoneticCode); brGrid[row + 2, col].ColumnSpan = brFontText.Length; if (brWord.IsPolyphonic) { if (AppGlobals.Config.Braille.ErrorProneWords.IndexOf(brWord.Text) >= 0) { // 容易判斷錯誤的破音字用顯眼的紅色標示。 brGrid[row + 2, col].View = m_PhonView3; } else { // 一般破音字用黃色標示。 brGrid[row + 2, col].View = m_PhonView2; } } else { brGrid[row + 2, col].View = m_PhonView; } brGrid[row + 2, col].Tag = brWord; col += brFontText.Length; } } finally { brGrid.Rows.AutoSizeRow(row); brGrid.Rows.AutoSizeRow(row + 1); brGrid.Rows.AutoSizeRow(row + 2); brGrid.ResumeLayout(); } }