public void Test_ManualID() { var v1 = NamedId.From("Test1", Id.From(999)); var v2 = NamedId.FromName("Test1"); Assert.AreEqual <NamedId>(v1, v2, "Should equal because of same name"); Assert.AreEqual <Id>(v1.Id, v2.Id); }
public void Test_AutoID() { var v1 = NamedId.FromName("Test1"); var v2 = NamedId.FromName("Test1"); Assert.AreEqual <NamedId>(v1, v2, "Should equal because of same name"); Assert.AreEqual <Id>(v1.Id, v2.Id); var v3 = NamedId.FromName("test1"); Assert.AreNotEqual <NamedId>(v1, v3, "Should not equal because of different character cap"); Assert.AreNotEqual <Id>(v1.Id, v3.Id); }
/// <summary> /// イベント転送 /// </summary> private void _event(object sender, EventArgs e, string eventName) { if (Enabled == false) { return; } IList <EventUnit> vals = null; foreach (var einame in _addEvents.Keys) { if (einame == eventName) { vals = _addEvents[einame]; break; } } if (vals == null) { System.Diagnostics.Debug.WriteLine("未登録イベント = " + eventName); return; } foreach (var cp in vals) { var control = cp.control; if (control == sender) { var t = GetType(); var eventTid = NamedId.FromName("event@@" + t.AssemblyQualifiedName + "@@" + ID.ToString()); GetRoot().SetUrgentToken(startToken, eventTid, new object[] { sender, e, eventName, ID }); try { if (cp.function is ColumnClickEventHandler) { ((ColumnClickEventHandler)cp.function)(sender, (ColumnClickEventArgs)e); } else { ((EventHandler)cp.function)(sender, e); } } catch (Exception ex) { var gr = (FeatureGroupBase)_fi_parentGroup.GetValue(this); _mi_setAutoRemoveFeature.Invoke(gr, new object[] { this, ex, "_event" }); } break; } } // 最後にトークン・ファイナライザループを実行する GetRoot().FlushFeatureTriggers(); }
/// <summary> /// 初期化処理 /// </summary> public override void OnInitInstance() { base.OnInitInstance(); _cursorSet = NamedId.FromName("CursorSet"); if (Pane is IControlUI) { _normalCursor = ((IControlUI)Pane).Cursor; } else { throw new NotSupportedException("FeatureCursorProviderは、IControlUIを実装しているPaneにのみ使用できます"); } // ステータス同期 _state = (DataSharingManager.Int)Share.Get("CursorProviderStatus", typeof(DataSharingManager.Int)); }
public override void Start(NamedId who) { base.Start(who); var fd = new FontDialog(); // 初期化 foreach (PartsCollectionBase.PartsEntry pe in _selectedParts) { if (pe.Parts is PartsTextBase fp) { fd.Font = fp.LastFont; fd.Color = fp.FontColor; break; } } fd.MinSize = 4; fd.MaxSize = 300; fd.ShowEffects = false; fd.ShowHelp = false; fd.ShowColor = true; fd.FontMustExist = true; fd.AllowVerticalFonts = false; // 選択 if (fd.ShowDialog() == DialogResult.OK) { foreach (PartsCollectionBase.PartsEntry pe in _selectedParts) { if (pe.Parts is PartsTextBase fp) { fp.FontName = fd.Font.Name; fp.FontSize = fd.Font.SizeInPoints; fp.FontColor = fd.Color; fp.IsItalic = fd.Font.Italic; fp.IsBold = fd.Font.Bold; fp.LastFont = fd.Font; Parts.Invalidate(fp, pe.Pane); Link.Equalization(fp); Data.SetModified(); Token.Add(NamedId.FromName("TokenFontChanged"), this); } } } }
/// <summary> /// コントロールイベント取得 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void target_Raise(object sender, EventArgs e) { var pi = sender.GetType().GetProperty("Tag"); var tag = (string)pi.GetValue(sender, null); string token; var id = tag.ToUpper().IndexOf("TOKEN:"); if (id >= 0) { token = tag.Substring(id + 6); if (token.IndexOf(';') >= 0) { token = token.Substring(0, token.IndexOf(';')); } } else { token = tag; } Token.Add(NamedId.FromName(token), this); GetRoot().FlushFeatureTriggers(); }
/// <summary> /// パラメータを取得し、フィーチャーやトークン発行などを行う /// </summary> private void resetSwitch() { var ss = GetParamString().Split(new char[] { ',' }); var fis = GetRoot().GetChildFeatureInstance(); var tokenLidName = string.Empty; foreach (var s in ss) { var s2 = s.Trim(); if (s2.StartsWith("[")) // チェックボックス関連は関係ない { continue; } // トークン、シェアを設定する var com = s2.Split(new char[] { '=' }); if (com.Length == 2) { if (com[0].Trim().Equals("Command", StringComparison.CurrentCultureIgnoreCase)) { switch (com[1].Trim().ToUpper()) { case "REDRAW": Pane.Invalidate(null); break; case "KEEPOFF": ThreadSafe.SetChecked(_checkBox, false); _isOn = false; break; } } if (com[0].Trim().Equals("Token", StringComparison.CurrentCultureIgnoreCase)) { tokenLidName = com[1].Trim(); } if (com[0].Trim().Equals("ShareBool", StringComparison.CurrentCultureIgnoreCase)) { var b = (DataSharingManager.Boolean)Share.Get(com[1].Trim(), typeof(DataSharingManager.Boolean)); b.value = _isOn; } } else { // フィーチャーのEnabledを設定する foreach (FeatureBase fi in fis) { if (s2.StartsWith("@")) { if (fi.Name == s2.Substring(1)) { fi.Enabled = _isOn; } } else { if (fi.GetType().Name == s2) { fi.Enabled = _isOn; } } } } } // トークンを投げる(フィーチャーのEnableを設定した後) if (_isNoToken == false) { if (string.IsNullOrEmpty(tokenLidName) == false) { Token.Add(NamedId.FromName(tokenLidName), this); } } else { _isNoToken = false; } }
/// <summary> /// デフォルトコンストラクタ /// </summary> public FeatureSizeSelectedParts() : base() { _tokenMouseUpJob = NamedId.FromName("SizeMouseUpJob"); }
private void resetTokenTrigger() { _tokenTrigger = NamedId.FromName("TokenChangeLanguageTo_" + _code); }
/// <summary> /// 指定ストリームにオブジェクトを送信する、サイクリックループ /// </summary> /// <param name="writer">ストリーム</param> /// <param name="value">オブジェクト</param> private static void sendLoop(Stream writer, object value) { // 送信できない型を変換する if (value != null) { if (value is EventHandler) { value = null; } if (value is IRichPane && value.GetType() != typeof(RichPaneBinder)) { value = RichPaneBinder.CreateCopy((IRichPane)value); } if (value is System.Windows.Forms.Form) { value = null; } if (value is PartsBase) { ((PartsBase)value).SetPartsPositionCorderName(true); ((PartsBase)value).SetPartsPositionerName(true); } } // ヌル値の処理 if (value == null) { writer.WriteByte((byte)Tag.Null); return; } var tarType = value.GetType(); var ttag = _typeToTag[tarType]; if (ttag != null) { // タグの埋め込み writer.WriteByte((byte)ttag); // 値の埋め込み var mi = typeof(SerializerEx).GetMethod("SendDirect", new Type[] { typeof(Stream), tarType }); mi.Invoke(null, new object[] { writer, value }); return; } // クラスID var cid = NamedId.FromName(tarType.FullName); var isClassProced = false; IDictionary dupchk = new HybridDictionary(); // リストの特化処理 if (value is IList) { // タグの埋め込み writer.WriteByte((byte)Tag.List); // クラスID SendDirect(writer, cid); SendDirect(writer, ((IList)value).Count); for (var i = 0; i < ((IList)value).Count; i++) { sendLoop(writer, ((IList)value)[i]); } isClassProced = true; } // ディクショナリの特化処理 if (value is IDictionary) { // タグの埋め込み writer.WriteByte((byte)Tag.Dictionary); // クラスID SendDirect(writer, cid.Id.Value); SendDirect(writer, ((IDictionary)value).Count); foreach (DictionaryEntry de in ((IDictionary)value)) { sendLoop(writer, de.Key); sendLoop(writer, de.Value); } isClassProced = true; } // クラスの処理 if (isClassProced == false) { writer.WriteByte((byte)Tag.ClassStart); SendDirect(writer, cid.Id.Value); } else { // リスト、ディクショナリ系で、派生クラスのフィールドは保存不要と記し付ける for (var type = tarType; type != typeof(object); type = type.BaseType) { if (type.Namespace.StartsWith("System.") == false) { continue; } const BindingFlags flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; var fis = type.GetFields(flags); foreach (var fi in fis) { if (fi.DeclaringType != fi.ReflectedType) { continue; // 派生クラスの保存フェーズで行う } if ((fi.Attributes & FieldAttributes.NotSerialized) == 0) { dupchk[fi.Name] = true; } } } } // ~クラスフィールドの処理 var inheritLevel = 0; for (var type = tarType; type != typeof(object); type = type.BaseType) { var fcnt = 0; const BindingFlags flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; var fis = type.GetFields(flags); foreach (var fi in fis) { if (fi.DeclaringType != fi.ReflectedType) { continue; // 派生クラスの保存フェーズで行う } if ((fi.Attributes & FieldAttributes.NotSerialized) == 0) { if (dupchk[fi.Name] == null) { dupchk.Add(fi.Name, true); if (fcnt == 0 && inheritLevel > 0) // ベースクラス初めてのフィールドの時。 { // ベースクラス開始TAGを埋め込む writer.WriteByte((byte)Tag.SubClass); // クラス派生先識別IDを埋め込む var bid = NamedId.FromName(type.FullName); SendDirect(writer, bid.Id.Value); } // タグの埋め込み writer.WriteByte((byte)Tag.Field); // フィールド名を埋め込む var fid = NamedId.FromName($"{type.FullName}...{fi.Name}"); //.FromField(fi); SendDirect(writer, fid.Id.Value); // フィールドの値を埋め込む sendLoop(writer, fi.GetValue(value)); fcnt++; } } } inheritLevel++; } // クラス終了TAGを埋め込む writer.WriteByte((byte)Tag.ClassEnd); // シリアライズ終了時の開放処理等 if (value is PartsBase) { ((PartsBase)value).SetPartsPositionCorderName(false); ((PartsBase)value).SetPartsPositionerName(false); } }