예제 #1
0
            private void ModelChanged(DTopic.Art a, DTopic t)
            {
                if (t == model)
                {
                    switch (a)
                    {
                    case DTopic.Art.addChild:
                        this.Render(2);
                        break;

                    case DTopic.Art.RemoveChild:
                        this.Dispose();
                        break;

                    case DTopic.Art.value:
                        Input.Render(1);
                        Output.Render(1);
                        break;

                    case DTopic.Art.type:
                        this.Render(3);
                        break;
                    }
                }
            }
예제 #2
0
 private loBlock(DTopic model, LogramView owner)
     : base(owner)
 {
     this.model          = model;
     _pins               = new List <loPin>();
     this.model.changed += model_changed;
 }
예제 #3
0
 internal LogramForm(DTopic data)
 {
     _blocks = new ObservableCollection <LBDesc>();
     InitializeComponent();
     uiLogram.Attach(data, new Action(() => data.Connection.root.GetAsync("/$YS/TYPES/LoBlock").ContinueWith(this.LoBlockLoad, TaskScheduler.FromCurrentSynchronizationContext())));
     icBlocks.ItemsSource = _blocks;
 }
예제 #4
0
 private void model_changed(DTopic.Art a, DTopic t)
 {
     if (t == model)
     {
         if (a == DTopic.Art.type || a == DTopic.Art.addChild)
         {
             Render(3);
         }
     }
     else if (t.parent == model)
     {
         loPin p;
         p = _pins.FirstOrDefault(z => z.GetModel() == t);
         if (p == null)
         {
             if (a == DTopic.Art.addChild)
             {
                 t.GetAsync(null).ContinueWith(PinLoaded, TaskScheduler.FromCurrentSynchronizationContext());
             }
             return;
         }
         if (a == DTopic.Art.RemoveChild)
         {
             lv.DeleteVisual(p);
             _pins.Remove(p);
             t.changed -= pin_changed;
         }
         this.Render(3);
     }
 }
예제 #5
0
 private void ModelChanged(DTopic.Art a, DTopic t)
 {
     if (t == _model)
     {
         if (a == DTopic.Art.type)
         {
             this.Width  = JsLib.OfInt(JsLib.GetField(_model.Manifest, "Logram.width"), 32 * CELL_SIZE);
             this.Height = JsLib.OfInt(JsLib.GetField(_model.Manifest, "Logram.height"), 18 * CELL_SIZE);
         }
     }
     else if (t.parent == _model)
     {
         if (a == DTopic.Art.addChild)
         {
             t.GetAsync(null).ContinueWith(MChildrenLoad, TaskScheduler.FromCurrentSynchronizationContext());
         }
         else if (a == DTopic.Art.RemoveChild)
         {
             foreach (var it in _visuals.OfType <loElement>().Where(z => z.GetModel() == t).ToArray())
             {
                 it.Dispose();
             }
         }
     }
 }
예제 #6
0
 private void ChildChanged(DTopic.Art a, DTopic t)
 {
     if (t.parent == _model)
     {
         if (JsLib.OfString(JsLib.GetField(t.Manifest, "cctor.LoBlock"), null) != null)
         {
             if (a == DTopic.Art.addChild)
             {
                 var b = _visuals.OfType <loBlock>().FirstOrDefault(z => z.GetModel() == t);
                 if (b == null)
                 {
                     loBlock.Create(t, this);
                 }
             }
         }
         else
         {
             if (a == DTopic.Art.addChild)
             {
                 var p = _visuals.OfType <loVariable>().FirstOrDefault(z => z.GetModel() == t);
                 if (p == null)
                 {
                     loVariable.Create(t, this);
                     TopicLoaded(t);
                 }
             }
         }
     }
 }
예제 #7
0
 private void Manifest_changed(DTopic.Art art, DTopic src)
 {
     if (art == DTopic.Art.value)
     {
         UpdateType(_tManifest != null ? _tManifest.State : null, _value);
     }
 }
예제 #8
0
            private void SourceLoaded(Task <DTopic> tt)
            {
                if (tt.IsFaulted || !tt.IsCompleted || tt.Result == null)
                {
                    _mode = 1;
                    return;
                }
                _source = tt.Result;
                DTopic lo = model.parent;

                if (_owner is loBlock && lo != null)
                {
                    lo = lo.parent;
                }
                if (tt.Result.parent == lo || (tt.Result.parent != null && tt.Result.parent.parent == lo))
                {
                    _mode = 2;
                    var src = lv._visuals.OfType <loPin>().FirstOrDefault(z => z.model == _source && !z.IsInput);
                    if (src != null)
                    {
                        if (_srcBinding != null)
                        {
                            _srcBinding.Dispose();
                        }
                        _srcBinding = new loBinding(src, this, lv);
                        src.AddBinding(_srcBinding);
                        this.Render(3);
                    }
                }
                else
                {
                    _mode = 3;
                    this.Render(3);
                }
            }
예제 #9
0
 private loVariable(DTopic model, LogramView lv)
     : base(lv)
 {
     this.model  = model;
     this.Output = new loPin(this, model, false);
     this.Input  = new loPin(this, model, true);
     Render(3);
 }
예제 #10
0
 public A04Client(string host, string password) {
   if(!Uri.TryCreate(host, UriKind.Absolute, out url)) {
     throw new ArgumentException("host");
   }
   _connEvnt = new List<WaitConnect>();
   _sio = new SioClient((url.Scheme == "x13s" ? "wss://" : "ws://") + url.DnsSafeHost + (url.IsDefaultPort ? string.Empty : (":" + url.Port.ToString())) + "/api/v04", ProcessMessage);
   root = new DTopic(this);
 }
예제 #11
0
 public LogramForm(DTopic data) {
   _bricks = new ObservableCollection<BrickInfo>();
   this.data = data;
   this.data.GetAsync("/etc/brick").ContinueWith(BrickLoaded, TaskScheduler.FromCurrentSynchronizationContext());
   InitializeComponent();
   this.icBricks.ItemsSource = _bricks;
   this.lvCanvas.DataContext = data;
 }
예제 #12
0
 private void _data_PropertyChanged(DTopic.Art art, DTopic child)
 {
     if (art == DTopic.Art.type)
     {
         _value = _data.Manifest;
         UpdateType(_tManifest != null ? _tManifest.State : null, _data.Manifest);
     }
 }
예제 #13
0
 public InspectorForm(DTopic data) {
   this._data = data;
   _valueVC = new ObservableCollection<InBase>();
   CollectionChange(new InValue(data, CollectionChange), true);
   CollectionChange(new InTopic(data, null, CollectionChange), true);
   InitializeComponent();
   lvValue.ItemsSource = _valueVC;
 }
예제 #14
0
        protected virtual void UpdateType(JSC.JSValue manifest)
        {
            this._manifest = manifest;

            string       nv   = null;
            int          attr = 0;
            BitmapSource ni   = null;

            if (_manifest != null && _manifest.ValueType == JSC.JSValueType.Object && _manifest.Value != null)
            {
                var    vv = _manifest["editor"];
                string tmp_s;
                if (vv.ValueType == JSC.JSValueType.String && !string.IsNullOrEmpty(tmp_s = vv.Value as string))
                {
                    nv = tmp_s;
                }
                var iv = _manifest["icon"];
                if (iv.ValueType == JSC.JSValueType.String && !string.IsNullOrEmpty(tmp_s = iv.Value as string))
                {
                    ni = App.GetIcon(tmp_s);
                }
                JSC.JSValue js_attr;
                if ((js_attr = _manifest["attr"]).IsNumber)
                {
                    attr = (int)js_attr;
                }
            }
            IsReadonly = (attr & 2) != 0;
            IsRequired = (attr & 1) != 0;
            if (nv == null)
            {
                nv = DTopic.JSV2Type(value);
            }
            if (ni == null)
            {
                if (value.ValueType == JSC.JSValueType.Object && value.Value == null)
                {
                    ni = App.GetIcon((this is InTopic) ? string.Empty : "Null"); // Folder or Null
                }
            }
            if (ni == null)
            {
                ni = App.GetIcon(nv);
            }

            if (ni != icon)
            {
                icon = ni;
                PropertyChangedReise("icon");
            }
            if (nv != _editorName)
            {
                _editorName = nv;
                editor      = InspectorForm.GetEditor(_editorName, this, _manifest);
                PropertyChangedReise("editor");
            }
            this.editor.TypeChanged(_manifest);
        }
예제 #15
0
            public static loBlock Create(DTopic model, LogramView owner)
            {
                var lb = new loBlock(model, owner);

                owner.AddVisual(lb);
                model.GetAsync(null).ContinueWith(lb.ModelLoaded, TaskScheduler.FromCurrentSynchronizationContext());

                return(lb);
            }
예제 #16
0
 public loPin(loElement owner, DTopic model, bool isInput)
     : base(owner.lv)
 {
     this._owner  = owner;
     this.model   = model;
     this._mode   = isInput ? 1 : 0;
     _connections = new List <loBinding>();
     this.brush   = Brushes.LightGray;
 }
예제 #17
0
        internal void RemoveItem(DTopic t)
        {
            InBase item = _valueVC.OfType <InTopic>().First(z => z.Owner == t);

            if (item != null)
            {
                CollectionChange(item, false);
            }
        }
예제 #18
0
 private void TopicLoaded(DTopic t)
 {
     _topicsToLoad.Remove(t);
     //Log.Debug("$- "+t.path);
     if (_topicsToLoad.Count == 0)
     {
         _topicsToLoad.Clear();
         this.Dispatcher.BeginInvoke(new Action(LoadComplet));
     }
 }
예제 #19
0
 private void ManifestLoaded(Task <DTopic> td)
 {
     if (td.IsCompleted && !td.IsFaulted && td.Result != null)
     {
         _tManifest          = td.Result;
         _tManifest.changed += Manifest_changed;
         UpdateType(_tManifest.State, _data.Manifest);
         base._isExpanded = this.HasChildren;
     }
 }
예제 #20
0
            public static loVariable Create(DTopic model, LogramView lv)
            {
                var el = new loVariable(model, lv);

                lv.AddVisual(el);
                lv.AddVisual(el.Input);
                lv.AddVisual(el.Output);
                model.changed += el.ModelChanged;

                return(el);
            }
예제 #21
0
            private void pin_changed(DTopic.Art a, DTopic t)
            {
                loPin p;

                p = _pins.FirstOrDefault(z => z.GetModel() == t);
                if (p == null)
                {
                    return;
                }
                p.Render(a == DTopic.Art.value ? 1 : 3);
            }
예제 #22
0
 private void _data_PropertyChanged(DTopic.Art art, DTopic child)
 {
     if (art == DTopic.Art.type)
     {
         UpdateType(_data.Manifest);
     }
     else if (art == DTopic.Art.value)
     {
         _value = _data.State;
         UpdateData(_data.State);
     }
 }
예제 #23
0
            public override void Dispose()
            {
                var srcB = System.Threading.Interlocked.Exchange(ref _srcBinding, null);

                if (srcB != null)
                {
                    srcB.Dispose();
                }
                _source = null;
                lv.MapRemove(this);
                lv.DeleteVisual(this);
            }
예제 #24
0
        private void _enumT_changed(DTopic.Art a, DTopic t)
        {
            this.Items.Clear();

            string text;
            Brush  bg_b;
            Brush  fg_b;


            if (_enumT != null && _enumT.State.ValueType == JSC.JSValueType.Object)
            {
                bool isArr = (bool)JSL.Array.isArray(new JSC.Arguments {
                    _enumT.State
                });
                foreach (var kv in _enumT.State)
                {
                    text = string.Empty;
                    bg_b = null;
                    fg_b = Brushes.Black;

                    if (kv.Value.ValueType == JSC.JSValueType.String)
                    {
                        text = kv.Value.Value as string;
                    }
                    else if (kv.Value.ValueType == JSC.JSValueType.Object)
                    {
                        text = kv.Value["text"].Value as string;
                        var bg = kv.Value["BG"];
                        if (bg.ValueType == JSC.JSValueType.String)
                        {
                            try {
                                var c = (Color)ColorConverter.ConvertFromString(bg.Value as string);
                                bg_b = new SolidColorBrush(c);
                                if (Math.Max(c.B, Math.Max(c.G, c.R)) < 64)
                                {
                                    fg_b = Brushes.White;
                                }
                            }
                            catch (Exception) {
                            }
                        }
                    }
                    this.Items.Add(new TextBlock {
                        Tag = isArr ? ((JSC.JSValue) new JSL.Number(int.Parse(kv.Key))) : ((JSC.JSValue) new JSL.String(kv.Key)), Text = text, Background = bg_b, Foreground = fg_b
                    });
                }
                ValueChanged(_owner.value);
            }
        }
예제 #25
0
 private InValue(DTopic data, InValue parent, string name, JSC.JSValue value, JSC.JSValue schema, Action<InBase, bool> collFunc) {
   _data = data;
   _parent = parent;
   _collFunc = collFunc;
   _path = _parent._path + "." + name;
   base.name = name;
   _items = new List<InBase>();
   _isVisible = true;
   _isExpanded = true; // fill _valueVC
   levelPadding = _parent.levelPadding + 7;
   _value = value;
   UpdateSchema(schema);
   UpdateData(value);
   _isExpanded = this.HasChildren;
 }
예제 #26
0
        private void DataUpd(Task <DTopic> t)
        {
            if (t.IsFaulted)
            {
                Log.Warning("{0}", t.Exception.Message);
            }
            else if (t.IsCompleted)
            {
                _data = t.Result;
                if (_data == null) // topic deleted
                {
                    App.Workspace.Close(this);
                    return;
                }
                _data.changed += DataChanged;
                if (System.Threading.Interlocked.CompareExchange(ref _cl, _data.Connection, null) == null)
                {
                    _cl.PropertyChanged += ClientChanged;
                }
                _path = _data.fullPath;
                PropertyChangedReise("data");
                DTopic c = _data;
                _pathItems.Clear();
                while (c != null)
                {
                    _pathItems.Insert(0, c);
                    c = c.parent;
                }
                DataChanged(DTopic.Art.type, _data);
                if (_view == null)
                {
                    _view = _altView ?? "IN";
                }
                if (_data == _data.Connection.root)
                {
                    Title = _data.Connection.alias;
                }
                else
                {
                    Title = _data.name;
                }

                PropertyChangedReise("connected");
                UpdContent();
            }
            this.Focus();
            this.Cursor = Cursors.Arrow;
        }
예제 #27
0
        public ObservableCollection <Control> MenuItems(DTopic t, loItem ctrl)
        {
            var l = new ObservableCollection <Control>();

            JSC.JSValue v1;
            MenuItem    mi;

            mi = new MenuItem()
            {
                Header = "Open in new tab", Tag = t
            };
            mi.Click += miOpen_Click;
            l.Add(mi);
            mi = new MenuItem()
            {
                Header = "Show in Workspace", Tag = t
            };
            mi.Click += miShow_Click;
            l.Add(mi);

            l.Add(new Separator());
            if (ctrl is loPin)
            {
                bool ic = JsLib.ofBool(JsLib.GetField(t.Manifest, "Logram.trace"), false);
                mi = new MenuItem()
                {
                    Header = "Trace", Tag = t, IsCheckable = true, IsChecked = ic
                };
                mi.Click += miTrace_Click;
                l.Add(mi);
                l.Add(new Separator());
            }
            if (t.Manifest != null && (v1 = t.Manifest["Children"]).ValueType == JSC.JSValueType.Object)
            {
                var ad = new Dictionary <string, JSC.JSValue>();
                Jso2Acts(v1, ad);
                FillContextMenu(t, l, ad);
            }
            else if (t.Manifest != null && (v1 = t.Manifest["Children"]).ValueType == JSC.JSValueType.String)
            {
                t.GetAsync(v1.Value as string).ContinueWith(tt => FillContextMenuFromChildren(t, l, tt), TaskScheduler.FromCurrentSynchronizationContext());
            }
            else
            {
                t.Connection.CoreTypes.GetAsync(null).ContinueWith(tt => FillContextMenuFromChildren(t, l, tt), TaskScheduler.FromCurrentSynchronizationContext());
            }
            return(l);
        }
예제 #28
0
 private void EnumRcv(Task <DTopic> td)
 {
     if (td.IsCompleted && !td.IsFaulted)
     {
         if (_enumT != null)
         {
             _enumT.changed -= _enumT_changed;
         }
         _enumT = td.Result;
         if (_enumT != null)
         {
             _enumT.changed += _enumT_changed;
         }
         _enumT_changed(DTopic.Art.value, _enumT);
     }
 }
예제 #29
0
 private InManifest(InManifest parent, string name, JSC.JSValue value, JSC.JSValue type)
 {
     _signature         = System.Threading.Interlocked.Increment(ref SIGNATURE_CNT);
     this._parent       = parent;
     base._compactView  = false;
     this._data         = _parent._data;
     base._collFunc     = _parent._collFunc;
     base.name          = name;
     this._path         = string.IsNullOrEmpty(_parent._path) ? name : (_parent._path + "." + name);
     base._isVisible    = _parent._isExpanded;
     base._items        = new List <InBase>();
     base.IsGroupHeader = false;
     base.levelPadding  = _parent.levelPadding + 8;
     this._value        = value;
     UpdateType(type, value);
 }
예제 #30
0
 public InValue(DTopic data, Action<InBase, bool> collFunc) {
   _data = data;
   _parent = null;
   _collFunc = collFunc;
   name = "value";
   _path = string.Empty;
   _isVisible = true;
   _isExpanded = true; // fill _valueVC
   levelPadding = 5;
   _items = new List<InBase>();
   _value = _data.value;
   UpdateSchema(_data.schema);
   UpdateData(_data.value);
   _isExpanded = this.HasChildren;
   _data.changed += _data_PropertyChanged;
 }
예제 #31
0
 internal InspectorForm(DTopic data)
 {
     _valueVC   = new ObservableCollection <InBase>();
     this._data = data;
     if (_data != null)
     {
         CollectionChange(new InValue(_data, CollectionChange), true);
         CollectionChange(new InManifest(_data, CollectionChange), true);
         CollectionChange(new InTopic(_data, null, CollectionChange), true);
     }
     else
     {
         App.Workspace.ShowTopicInWorkspace += Workspace_ShowTopicInWorkspace;
     }
     InitializeComponent();
     lvValue.ItemsSource = _valueVC;
 }
예제 #32
0
 public InManifest(DTopic data, Action <InBase, bool> collFunc)
 {
     _signature        = System.Threading.Interlocked.Increment(ref SIGNATURE_CNT);
     _data             = data;
     _parent           = null;
     base._compactView = false;
     base._collFunc    = collFunc;
     name               = "Manifest";
     _path              = string.Empty;
     base._isVisible    = true;
     base._isExpanded   = true;
     base.IsGroupHeader = true;
     base.levelPadding  = 1;
     base._items        = new List <InBase>();
     _data.changed     += _data_PropertyChanged;
     _data.GetAsync("/$YS/TYPES/Ext/Manifest").ContinueWith(ManifestLoaded, TaskScheduler.FromCurrentSynchronizationContext());
 }
예제 #33
0
 private void RefreshOwner(DTopic tt)
 {
     if (_owner != null)
     {
         _owner.changed -= _owner_PropertyChanged;
         if (_items != null)
         {
             _items.Clear();
             _items = null;
         }
     }
     _owner = tt;
     name   = tt.name;
     if (_populated && _owner.children != null)
     {
         var tsk = InsertItems(_owner.children);
     }
 }
예제 #34
0
 private InValue(DTopic data, InValue parent, string name, JSC.JSValue value, JSC.JSValue type, Action <InBase, bool> collFunc)
 {
     _data              = data;
     _parent            = parent;
     base._compactView  = false;
     _collFunc          = collFunc;
     _path              = _parent._path + "." + name;
     base.name          = name;
     _items             = new List <InBase>();
     _isVisible         = true;
     _isExpanded        = true; // fill _valueVC
     base.IsGroupHeader = false;
     levelPadding       = _parent.levelPadding + 8;
     _value             = value;
     UpdateType(type);
     UpdateData(value);
     _isExpanded = this.HasChildren;
 }
예제 #35
0
        private async void FillContextMenuFromChildren(DTopic owner, ObservableCollection <Control> l, Task <DTopic> tt)
        {
            var acts = new Dictionary <string, JSC.JSValue>();

            if (tt.IsCompleted && !tt.IsFaulted && tt.Result != null)
            {
                foreach (var t in tt.Result.children)
                {
                    var z = await t.GetAsync(null);

                    if (z.State.ValueType == JSC.JSValueType.Object && z.State.Value != null && z.State["default"].Defined)
                    {
                        acts.Add(z.name, z.State);
                    }
                }
            }
            FillContextMenu(owner, l, acts);
        }
예제 #36
0
 private void TBrick_changed(DTopic.Art art, DTopic src) {
   if(src == null || src.schemaStr != "Bclass" || src.value.ValueType!=JSC.JSValueType.Object || art == DTopic.Art.schema) {
     return;
   }
   for(int i = 0; i < _bricks.Count; i++) {
     if(string.Compare(src.path, _bricks[i].owner.path) > 0) {
       if(art == DTopic.Art.addChild || art == DTopic.Art.value) {
         _bricks.Insert(i, new BrickInfo(src));
       }
       return;
     } else if(_bricks[i].owner == src) {
       if(art == DTopic.Art.addChild || art == DTopic.Art.value) {
         _bricks[i] = new BrickInfo(src);
       } else if(art == DTopic.Art.RemoveChild) {
         _bricks.RemoveAt(i);
       }
       return;
     }
   }
   _bricks.Add(new BrickInfo(src));
 }
예제 #37
0
 public InTopic(DTopic owner, InTopic parent, Action<InBase, bool> collFunc) {
   _owner = owner;
   _parent = parent;
   _collFunc = collFunc;
   _root = _parent == null;
   IsGroupHeader = _root;
   _owner.changed += _owner_PropertyChanged;
   if(_root) {
     name = "children";
     icon = App.GetIcon("children");
     editor = null;
     levelPadding = 5;
     _populated = true;
     if(_owner.children != null) {
       InsertItems(_owner.children);
     }
   } else {
     name = _owner.name;
     base.UpdateSchema(_owner.schema);
     levelPadding = _parent.levelPadding + 7;
   }
   base._isExpanded = _root && _owner.children!=null && _owner.children.Any();
   base._isVisible = _root || (_parent._isVisible && _parent._isExpanded);
 }
예제 #38
0
 private void _data_PropertyChanged(DTopic.Art art, DTopic child) {
   if(art==DTopic.Art.schema) {
     UpdateSchema(_data.schema);
   } else if(art==DTopic.Art.value) {
     _value = _data.value;
     UpdateSchema(_data.schema);
     UpdateData(_data.value);
   }
 }
예제 #39
0
 private void OwnerChanged(DTopic t) {
   if(t != _owner) {
     if(_owner != null) {
       _owner.changed -= _owner_changed;
     }
     _owner = t;
     if(_owner != null) {
       _owner.changed += _owner_changed;
     }
   }
   if(_owner == null) {
     return;
   }
   _offsetTop = _owner.GetField<double>("T");
   _offsetLeft = _owner.GetField<double>("L");
   this.Width = _owner.GetField<double>("W") * CELL_SIZE + 10;
   this.Height = _owner.GetField<double>("H") * CELL_SIZE + 10;
   AddVisual(new LiBrick(this, t));
 }
예제 #40
0
 private void _owner_changed(DTopic.Art art, DTopic src) {
   if(art == DTopic.Art.value && src == _owner) {
     OwnerChanged(_owner);
   }
 }
예제 #41
0
 public BrickInfo(DTopic owner) {
   this.owner = owner;
   info = this.owner.GetField<string>("info") ?? owner.name;
   image = App.GetIcon(this.owner.GetField<string>("icon") ?? "Null");
 }
예제 #42
0
 public LiBrick(LogramView view, DTopic data) : base(view, data) {
   this.Offset = new Vector(50, 50);
   Render(3);
 }
예제 #43
0
 private void _owner_PropertyChanged(DTopic.Art art, DTopic child) {
   if(!_root) {
     if(art == DTopic.Art.schema) {
       this.UpdateSchema(_owner.schema);
     } else if(art == DTopic.Art.value) {
       this.UpdateSchema(_owner.schema);
       this.editor.ValueChanged(_owner.value);
     }
   }
   if(_populated) {
     if(art == DTopic.Art.addChild) {
       if(_items == null) {
         InsertItems(_owner.children);
       } else {
         var td = AddTopic(child);
       }
     } else if(art == DTopic.Art.RemoveChild) {
       var it = _items.FirstOrDefault(z => z.name == child.name);
       if(it != null) {
         it.Deleted();
         _items.Remove(it);
       }
     }
   }
 }
예제 #44
0
 private async Task AddTopic(DTopic t) {
   InTopic tmp;
   var tt = await t.GetAsync(null);
   if(tt != null) {
     if((tmp = _items.OfType<InTopic>().FirstOrDefault(z => z.name == tt.name)) != null) {
       _items.Remove(tmp);
       _collFunc(tmp, false);
       tmp.RefreshOwner(tt);
     } else {
       tmp = new InTopic(tt, this, _collFunc);
       if(_isVisible && _isExpanded) {
         _collFunc(tmp, true);
       }
     }
     int i;
     for(i = 0; i < _items.Count; i++) {
       if(string.Compare(_items[i].name, tt.name) > 0) {
         break;
       }
     }
     _items.Insert(i, tmp);
   }
 }
예제 #45
0
 private void RefreshOwner(DTopic tt) {
   if(_owner != null) {
     _owner.changed -= _owner_PropertyChanged;
     if(_items != null) {
       _items.Clear();
       _items = null;
     }
   }
   _owner = tt;
   name = tt.name;
   if(_populated && _owner.children != null) {
     InsertItems(_owner.children);
   }
 }
예제 #46
0
 private void SetNameComplete(Task<DTopic> td) {
   if(td.IsCompleted && td.Result != null) {
     _owner = td.Result;
     _owner.changed += _owner_PropertyChanged;
     base.name = _owner.name;
     base.UpdateSchema(_owner.schema);
     IsEdited = false;
     PropertyChangedReise("IsEdited");
     PropertyChangedReise("name");
   } else {
     if(td.IsFaulted) {
       Log.Warning("{0}/{1} - {2}", _parent._owner.fullPath, base.name, td.Exception.Message);
     }
     _parent._items.Remove(this);
     _collFunc(this, false);
   }
 }
예제 #47
0
 protected LiBase(LogramView view, DTopic data) {
   this._view = view;
   this.data = data;
 }
예제 #48
0
 public void Dispose() {
   _collFunc(this, false);
   if(_owner != null) {
     _owner.changed -= _owner_PropertyChanged;
     _owner = null;
   }
 }