예제 #1
0
        public void ProcSpeechEvent(SpeechEvent se)
        {
            try
            {
                var p2  = (int)(DateTime.Now - Hot.FirstSpeech).TotalSeconds + 1;
                var tar = Parts.GetPartsByLocationID(new Id {
                    Value = se.RowID
                }).Select(a => (PartsTalkBar)a).Where(a => a.SessionID == se.SessionID).FirstOrDefault();
                switch (se.Action)
                {
                case SpeechEvent.Actions.Start:
                    ProcStart(se, p2);
                    break;

                case SpeechEvent.Actions.SetColor:
                    ProcSetColor(se, p2, tar);
                    break;

                default:
                    ProcUpdate(se, p2, tar);
                    break;
                }
            }
            catch (Exception ex)
            {
                LOG.WriteLineException(ex);
            }
            Pane.Invalidate(null);
        }
예제 #2
0
        /// <summary>
        /// マウスダウンイベント転送
        /// </summary>
        public virtual void OnMouseDown(Tono.GuiWinForm.MouseState e)
        {
            if (Parts == null)
            {
                return;
            }

            if (_clickPos == null)
            {
                _clickPos = (MouseState)Share.Get("ClickPosition", typeof(MouseState));   // 移動中のパーツ一覧
            }
            SerializerEx.CopyObject(_clickPos, e);

            // パーツを取得する
            ClickParts = Parts.GetPartsAt(e.Pos, true, out var clickPane);
            ClickPane  = clickPane;

            //lock(_children.SyncRoot)	// 途中でAddChildしないので、スレッドセーフ。途中でAddChildしてしまうと下のループでAssertされる
            {
                foreach (var c in _children)
                {
                    if (c is FeatureBase && ((FeatureBase)c).Enabled == false)
                    {
                        continue;
                    }

                    if (c is IMouseListener)
                    {
#if DEBUG
                        if (c is FeatureBase)
                        {
                            TimeKeeper.SetStart(TimeKeeper.RecordType.MouseDown, ((FeatureBase)c).ID);
                        }
#endif
#if DEBUG == false
                        try
#endif
                        {
                            ((IMouseListener)c).OnMouseDown(e);
                        }
#if DEBUG == false
                        catch (Exception ex)
                        {
                            LOG.WriteLineException(ex);
                        }
#endif
#if DEBUG
                        if (c is FeatureBase)
                        {
                            TimeKeeper.SetEnd(TimeKeeper.RecordType.MouseDown, ((FeatureBase)c).ID);
                        }
#endif
                    }
                }
            }
            checkAndFireDataChanged();  // パーツ削除イベント
        }
예제 #3
0
        /// <summary>
        /// スクロール変更イベント転送
        /// </summary>
        /// <param name="target"></param>
        public virtual void ScrollChanged(IRichPane target)
        {
            //lock(_children.SyncRoot)	// 途中でAddChildしないので、スレッドセーフ。途中でAddChildしてしまうと下のループでAssertされる
            {
                foreach (var c in _children)
                {
                    if (c is FeatureBase && ((FeatureBase)c).Enabled == false)
                    {
                        continue;
                    }

                    if (c is IScrollListener)
                    {
                        foreach (var t in ((IScrollListener)c).ScrollEventTargets)
                        {
                            if (target == null || t == target)
                            {
#if DEBUG
                                if (c is FeatureBase)
                                {
                                    TimeKeeper.SetStart(TimeKeeper.RecordType.ScrollChanged, ((FeatureBase)c).ID);
                                }
#endif
#if DEBUG == false
                                try
#endif
                                {
                                    ((IScrollListener)c).ScrollChanged(target);
                                }
#if DEBUG == false
                                catch (Exception ex)
                                {
                                    LOG.WriteLineException(ex);
                                }
#endif
#if DEBUG
                                if (c is FeatureBase)
                                {
                                    TimeKeeper.SetEnd(TimeKeeper.RecordType.ScrollChanged, ((FeatureBase)c).ID);
                                }
#endif
                            }
                        }
                    }
                }
            }
            checkAndFireDataChanged();  // パーツ削除イベント
        }
예제 #4
0
        /// <summary>
        /// キーダウンイベント転送
        /// </summary>
        public virtual void OnKeyDown(KeyState e)
        {
            //lock(_children.SyncRoot)	// 途中でAddChildしないので、スレッドセーフ。途中でAddChildしてしまうと下のループでAssertされる
            {
                foreach (var c in _children)
                {
                    if (c is FeatureBase && ((FeatureBase)c).Enabled == false)
                    {
                        continue;
                    }

                    if (c is IKeyListener)
                    {
#if DEBUG
                        if (c is FeatureBase)
                        {
                            TimeKeeper.SetStart(TimeKeeper.RecordType.KeyDown, ((FeatureBase)c).ID);
                        }
#endif
#if DEBUG == false
                        try
#endif
                        {
                            ((IKeyListener)c).OnKeyDown(e);
                        }
#if DEBUG == false
                        catch (Exception ex)
                        {
                            LOG.WriteLineException(ex);
                        }
#endif
#if DEBUG
                        if (c is FeatureBase)
                        {
                            TimeKeeper.SetEnd(TimeKeeper.RecordType.KeyDown, ((FeatureBase)c).ID);
                        }
#endif
                    }
                }
            }
            checkAndFireDataChanged();  // パーツ削除イベント
        }
예제 #5
0
        /// <summary>
        /// レイヤーを描画
        /// </summary>
        /// <param name="pane">描画するペーン</param>
        /// <param name="pts">描画するパーツ</param>
        protected virtual void drawLayer(IRichPane pane, int layerid, IEnumerable <PartsBase> pts)
        {
            foreach (var dp in pts)
            {
                foreach (IRichPane pp in PartsIllusionProjector.GetEnumerator(pane, getProjectors(pane, false), dp))
                {
#if DEBUG
                    try
                    {
                        dp.Draw(pp);
                    }
                    catch (Exception ex)
                    {
                        LOG.WriteLineException(ex);
                        //throw exinner;	// ここにブレークポイントを設けると、どのパーツで例外発生したか特定できる
                    }
#else
                    dp.Draw(pp);
#endif
                }
            }
        }
예제 #6
0
        /// <summary>
        /// 登録しているファイナライザをすべて実行する
        /// </summary>
        public bool Flush()
        {
            var cnt = 0;

            try
            {
                for (var en = GetEnumerator(); en.MoveNext();)
                {
                    var res = ((FinalizeManager)en.Current).Invoke();
                    if (res)
                    {
                        cnt++;
                    }
                }
                Clear();
            }
            catch (Exception ex)
            {
                LOG.WriteLineException(ex);
            }
            return(cnt > 0);
        }