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); }
/// <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(); // パーツ削除イベント }
/// <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(); // パーツ削除イベント }
/// <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(); // パーツ削除イベント }
/// <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 } } }
/// <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); }