private void AddBaseLayerControl(BaseLayerItem layer)
        {
            propertiesPanel.Controls.Clear();

            Control ctrl = new Control();

            CommonPropertyCtrl commCtrl = new CommonPropertyCtrl();

            commCtrl.Dock = DockStyle.Fill;

            var item = new LayerPropertiesCtrl(layer.Tag, _edSvc);

            //item.LayerChanged += (s, evt) => { OnResourceChanged(); };
            item.LayerChanged += WeakEventHandler.Wrap((s, evt) => OnResourceChanged(), (eh) => item.LayerChanged -= eh);
            item.Dock          = DockStyle.Top;

            ctrl.Controls.Add(commCtrl);
            ctrl.Controls.Add(item);

            ctrl.Dock = DockStyle.Fill;

            propertiesPanel.Controls.Add(ctrl);

            commCtrl.SelectedObject = new Maestro.Editors.MapDefinition.MapLayersSectionCtrl.BaseLayerItemDesigner(layer);
        }
Beispiel #2
0
        public override bool Place(BaseLayerItem item)
        {
            int posX = Player.tileTargetX;
            int posY = Player.tileTargetY;

            if (!ContainsKey(posX, posY))
            {
                Duct element = new Duct
                {
                    Position = new Point16(posX, posY),
                    Frame    = Point16.Zero,
                    Layer    = this
                };
                data.Add(new Point16(posX, posY), element);

                element.UpdateFrame();
                foreach (Duct neighbor in element.GetVisualNeighbors())
                {
                    neighbor.UpdateFrame();
                }

                element.OnPlace(item);
                return(true);
            }

            return(false);
        }
        private void RemoveSelectedTiledLayerItem(BaseLayerItem layer)
        {
            var grp = layer.Parent;

            grp.RemoveBaseMapLayer(layer.Tag);
            propertiesPanel.Controls.Clear();
            _tiledLayerModel.Invalidate();
        }
        private void RestoreBaseLayerSelection(BaseLayerItem item)
        {
            //The node tag will probably be different, but the wrapped
            //instance is what we're checking for
            var it = RestoreSelection <BaseLayerItem>(trvBaseLayers, (tag) => { return(tag.Tag == item.Tag); });

            if (it != null)
            {
                OnBaseLayerItemSelected(it);
            }
        }
        private void OnBaseLayerItemSelected(BaseLayerItem layer)
        {
            btnRemoveBaseLayer.Enabled   = true;
            btnMoveBaseLayerDown.Enabled = true;
            btnMoveBaseLayerUp.Enabled   = true;

            //var item = new LayerPropertiesCtrl(layer.Tag, _edSvc.ResourceService, _edSvc);
            //item.LayerChanged += (s, evt) => { OnResourceChanged(); };
            //item.Dock = DockStyle.Fill;
            AddBaseLayerControl(layer);
        }
Beispiel #6
0
        public override void OnPlace(BaseLayerItem item)
        {
            if (item is BaseDuct d)
            {
                Tier = d.Tier;
                switch (Tier)
                {
                case DuctTier.Basic:
                    Speed = 20;
                    break;

                case DuctTier.Advanced:
                    Speed = 12;
                    break;

                case DuctTier.Elite:
                    Speed = 5;
                    break;
                }
            }

            List <RoutedNetwork> networks = GetNeighbors().Select(duct => duct.Network).Distinct().ToList();
            RoutedNetwork        network  = new RoutedNetwork
            {
                Tiles        = networks.SelectMany(routedNetwork => routedNetwork.Tiles).Concat(this).ToList(),
                NetworkItems = networks.SelectMany(routedNetwork => routedNetwork.NetworkItems).ToList()
            };

            foreach (Duct duct in network.Tiles)
            {
                RoutedNetwork.Networks.Remove(duct.Network);
                duct.Network = network;
            }

            foreach (Duct duct in network.Tiles)
            {
                if ((duct.frame & 1) != 0 && (duct.frame & 16) != 0 && (duct.frame & 4) == 0 && (duct.frame & 64) == 0)
                {
                    duct.isNode = false;
                }
                else if ((duct.frame & 1) == 0 && (duct.frame & 16) == 0 && (duct.frame & 4) != 0 && (duct.frame & 64) != 0)
                {
                    duct.isNode = false;
                }
                else
                {
                    duct.isNode = true;
                }
            }
        }
        private void trvBaseLayers_DragDrop(object sender, DragEventArgs e)
        {
            var rids = e.Data.GetData(typeof(RepositoryHandle[])) as RepositoryHandle[];
            var data = e.Data.GetData(typeof(TreeNodeAdv[])) as TreeNodeAdv[];

            if (rids != null && rids.Length > 0)
            {
                int added = 0;
                var node  = trvBaseLayers.GetNodeAt(trvBaseLayers.PointToClient(new Point(e.X, e.Y)));

                IBaseMapGroup group = null;
                if (node != null && node.Tag is BaseLayerGroupItem)
                {
                    group = ((BaseLayerGroupItem)node.Tag).Tag;
                }

                //No group? Let's make one!
                if (group == null)
                {
                    group = _tsd.AddBaseLayerGroup(GenerateBaseGroupName(_tsd));
                }

                IBaseMapLayer focusLayer = null;
                foreach (var rid in rids)
                {
                    if (rid.ResourceId.ResourceType == ResourceTypes.LayerDefinition.ToString())
                    {
                        focusLayer = group.AddLayer(GenerateBaseLayerName(rid.ResourceId.ToString(), _tsd), rid.ResourceId.ToString());
                        added++;
                    }
                }

                if (added > 0)
                {
                    _tiledLayerModel.Invalidate();
                    if (focusLayer != null)
                    {
                        RestoreBaseLayerSelection(focusLayer);
                    }
                }
            }
            else if (data != null && data.Length == 1)
            {
                var li = data[0].Tag as BaseLayerItem;
                if (li != null)
                {
                    IBaseMapLayer sourceLayer = li.Tag;
                    IBaseMapLayer targetLayer = null;
                    IBaseMapGroup targetGroup = null;
                    var           node        = trvBaseLayers.GetNodeAt(trvBaseLayers.PointToClient(new Point(e.X, e.Y)));
                    BaseLayerItem tli         = null;
                    if (node != null)
                    {
                        tli = node.Tag as BaseLayerItem;
                        var tlg = node.Tag as BaseLayerGroupItem;
                        if (tli != null)
                        {
                            targetLayer = tli.Tag;
                        }
                        else if (tlg != null)
                        {
                            targetGroup = tlg.Tag;
                        }
                    }

                    if (sourceLayer != null && targetGroup != null && targetGroup.GetIndex(sourceLayer) < 0) //Dropping to a different base layer group
                    {
                        var srcGroup = _tsd.GetGroupForLayer(sourceLayer);
                        srcGroup.RemoveBaseMapLayer(sourceLayer);
                        targetGroup.InsertLayer(0, sourceLayer);

                        _tiledLayerModel.Invalidate();

                        //Keep group expanded
                        if (tli != null)
                        {
                            RestoreBaseLayerSelection(sourceLayer);
                        }
                    }
                    else if (sourceLayer != null && targetLayer != null && sourceLayer != targetLayer)
                    {
                        var srcGroup = _tsd.GetGroupForLayer(sourceLayer);
                        var dstGroup = _tsd.GetGroupForLayer(targetLayer);

                        if (srcGroup != null)
                        {
                            if (srcGroup == dstGroup)
                            {
                                int idx = srcGroup.GetIndex(targetLayer);
                                if (idx >= 0)
                                {
                                    srcGroup.RemoveBaseMapLayer(sourceLayer);
                                    srcGroup.InsertLayer(idx, sourceLayer);

                                    _tiledLayerModel.Invalidate();

                                    //Keep group expanded
                                    if (tli != null)
                                    {
                                        RestoreBaseLayerSelection(sourceLayer);
                                    }
                                }
                            }
                            else
                            {
                                srcGroup.RemoveBaseMapLayer(sourceLayer);
                                dstGroup.InsertLayer(0, targetLayer);

                                _tiledLayerModel.Invalidate();

                                //Keep group expanded
                                if (tli != null)
                                {
                                    RestoreBaseLayerSelection(targetLayer);
                                }
                            }
                        }
                    }
                }
            }
        }