예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        /// <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();
        }
예제 #4
0
        /// <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));
        }
예제 #5
0
        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);
                    }
                }
            }
        }
예제 #6
0
        /// <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();
        }
예제 #7
0
        /// <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;
            }
        }
예제 #8
0
 /// <summary>
 /// デフォルトコンストラクタ
 /// </summary>
 public FeatureSizeSelectedParts() : base()
 {
     _tokenMouseUpJob = NamedId.FromName("SizeMouseUpJob");
 }
예제 #9
0
 private void resetTokenTrigger()
 {
     _tokenTrigger = NamedId.FromName("TokenChangeLanguageTo_" + _code);
 }
예제 #10
0
        /// <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);
            }
        }