Exemplo n.º 1
0
 /// <summary>
 /// Notifies clients about change in the cell
 /// </summary>
 /// <param name="aChangeType">
 /// Type of change <see cref="CellChangedType"/>
 /// </param>
 protected virtual void OnCellChanged(CellChangedType aChangeType)
 {
     if (cellChanged != null)
     {
         cellChanged(this, new EnumCellChangedEventArgs(aChangeType, this));
     }
 }
        /// <summary>
        /// 修改儲存格。
        /// </summary>
        /// <param name="row">儲存格的列索引。</param>
        /// <param name="col">儲存格的行索引。</param>
        /// <returns>若有更動儲存格內容,則傳回 true,否則傳回 false。</returns>
        internal void EditCell(int row, int col)
        {
            /* NOTE
             * 每當儲存格內容有變動時,需考慮以下情況:
             *
             * 1. 修改了明眼字。此情況的變化比較大,例如:把原本的英數字 "123"
             *    中間的 "2" 改成中文字。碰到這種情況,相鄰的 "3" 的點字也會受
             *    到影響,必須重新產生才行。但重新產生整份文件的點字又會造成其
             *    他已經修改過的部份得再修改一次,因此,碰到這種英數字改成中文
             *    字的情況,程式還是不自動修正相鄰的點字,而由使用者自行以修改
             *    點字(接著的第 3 種情況)的功能來修正此問題。
             * 2. 只修改點字的注音碼。此種情況可能使新的點字方數增加或減少,
             *    因此必須重新斷行,並將點字重新添入 Grid。若方數不變,或沒有
             *    超過每列最大方數,就不要重新斷行,以節省處理時間。
             * 3. 修改點字。這種情況只需比對新舊點字的方數,若有差異,則要重新
             *    斷行。
             *
             * 第 1 種情況可能會包含後面兩種情況,第 2 種可能包含第 3 種情況,
             * 但是不會包含第 1 種情況。同理,第 3 種情況也不會包含第 1 或第 2
             * 種情況。
             */

            if (row < 0 || col < 0) // 防錯:如果不是有效的儲存格位置就直接返回。
            {
                return;
            }

            BrailleWord brWord = (BrailleWord)brGrid[row, col].Tag;

            EditCellForm form = new EditCellForm();

            form.Mode        = EditCellMode.Edit;
            form.BrailleWord = brWord;
            if (form.ShowDialog() == DialogResult.OK)
            {
                // 判斷新的跟原本的點字,以得知是屬於哪一種修改情況。
                CellChangedType cellChgType = CellChangedType.None;
                if (!brWord.Text.Equals(form.BrailleWord.Text))
                {
                    cellChgType = CellChangedType.Text;
                }
                else if (!brWord.PhoneticCode.Equals(form.BrailleWord.PhoneticCode))
                {
                    cellChgType = CellChangedType.Phonetic;
                }
                else if (!brWord.CellList.Equals(form.BrailleWord.CellList))
                {
                    cellChgType = CellChangedType.Braille;
                }

                if (cellChgType != CellChangedType.None)
                {
                    brWord.Copy(form.BrailleWord);

                    OnDataChanged();

                    GridCellChanged(row, col, brWord, cellChgType);
                }
            }
        }
		protected override void OnCellChanged (CellChangedType aChangeType)
		{
			base.OnCellChanged (aChangeType);
			switch (ItemState) {
			case EnumItemState.Normal:
				image.MouseOver = false;
				label.ModifyFg(StateType.Normal);
				break;
			case EnumItemState.Preflight:
				image.MouseOver = true;
				label.ModifyFg(StateType.Normal);
				break;
			case EnumItemState.Selected:
				image.MouseOver = false;
				label.ModifyFg(StateType.Normal, label.Style.Foregrounds[(int) StateType.Selected]);
				break;
			}
			label.Visible = (DisplayMode != EnumItemDisplayMode.IconsOnly);
			image.Visible = (DisplayMode != EnumItemDisplayMode.TextOnly);
		}
        /// <summary>
        /// 將指定的 BrailleWord 物件的資料填入指定的儲存格。
        /// </summary>
        /// <param name="row">指定之儲存格的列索引。</param>
        /// <param name="col">指定之儲存格的行索引。</param>
        /// <param name="brWord">欲填入儲存格的 BrailleWord 物件。</param>
        private void GridCellChanged(int row, int col, BrailleWord brWord, CellChangedType chgType)
        {
            if (chgType == CellChangedType.None)
            {
                return;
            }

            // 由於每個點字在顯示時佔三列(點字、明眼字、注音碼),因此先推算出點字的列索引。
            row = GetBrailleRowIndex(row);

            // Note: 不可重新轉點字,只重新斷行。

            // 判斷新設定的點字方數是否不同於儲存格原有的點字方數,若否,則必須重新斷字。
            if (brGrid[row, col].ColumnSpan == brWord.Cells.Count)
            {
                UpdateCell(row, col, brWord);
            }
            else
            {
                ReformatRow(row);
            }
        }
Exemplo n.º 5
0
        protected override void OnCellChanged(CellChangedType aChangeType)
        {
            base.OnCellChanged(aChangeType);
            switch (ItemState)
            {
            case EnumItemState.Normal:
                image.MouseOver = false;
                label.ModifyFg(StateType.Normal);
                break;

            case EnumItemState.Preflight:
                image.MouseOver = true;
                label.ModifyFg(StateType.Normal);
                break;

            case EnumItemState.Selected:
                image.MouseOver = false;
                label.ModifyFg(StateType.Normal, label.Style.Foregrounds[(int)StateType.Selected]);
                break;
            }
            label.Visible = (DisplayMode != EnumItemDisplayMode.IconsOnly);
            image.Visible = (DisplayMode != EnumItemDisplayMode.TextOnly);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Cell changed event
        /// </summary>
        /// <param name="aChangeType">
        /// Change type <see cref="CellChangedType"/>
        /// </param>
        protected override void OnCellChanged(CellChangedType aChangeType)
        {
            base.OnCellChanged(aChangeType);
            switch (ItemState)
            {
            case EnumItemState.Normal:
            case EnumItemState.Preflight:
                label.ModifyFg(StateType.Normal);
                if (BoldWhenSelected == true)
                {
                    label.Text = Text;
                }
                break;

            case EnumItemState.Selected:
                label.ModifyFg(StateType.Normal, label.Style.Foregrounds[(int)StateType.Selected]);
                if (BoldWhenSelected == true)
                {
                    label.Markup = "<b>" + Text + "</b>";
                }
                break;
            }
            label.Visible = (DisplayMode != EnumItemDisplayMode.IconsOnly);
        }
Exemplo n.º 7
0
 public EnumCellChangedEventArgs(CellChangedType aChangeType, HComboCell aCell)
 {
     cell       = aCell;
     changeType = aChangeType;
 }