예제 #1
0
        /// <summary>
        /// Function to render the geometry
        /// </summary>
        /// <param name="map">The map object, mainly needed for transformation purposes.</param>
        /// <param name="geometry">The geometry to symbolize.</param>
        /// <param name="graphics">The graphics object to use.</param>
        public void Render(MapViewport map, IPuntal geometry, Graphics graphics)
        {
            var mp = geometry as IMultiPoint;

            if (mp != null)
            {
                var combinedArea = RectangleF.Empty;
                foreach (var point in mp.Coordinates)
                {
                    RenderPoint(map, point, graphics);
                    combinedArea = CanvasArea.ExpandToInclude(combinedArea);
                }
                CanvasArea = combinedArea;
                return;
            }
            RenderPoint(map, ((IPoint)geometry).Coordinate, graphics);
        }
예제 #2
0
        private void FindArea(CanvasArea area, string alias)
        {
            if (area.Alias == alias)
            {
                AreaResult = area;
            }

            if (AreaResult == null)
            {
                foreach (var c in area.Controls.Where(x => x.Type == "Grid" || x.Type == "Section"))
                {
                    foreach (var a in c.Areas)
                    {
                        FindArea(a, alias);
                    }
                }
            }
        }
예제 #3
0
        private void FindAreaWithControl(CanvasArea area, Guid controlId)
        {
            var control = area.Controls.FirstOrDefault(x => x.ControlID == controlId);

            if (control != null)
            {
                AreaControlResult = area;
            }

            if (AreaControlResult == null)
            {
                foreach (var c in area.Controls.Where(x => x.Type == "Grid" || x.Type == "Section"))
                {
                    foreach (var a in c.Areas)
                    {
                        FindAreaWithControl(a, controlId);
                    }
                }
            }
        }
예제 #4
0
        /// <summary>
        /// Function to render the symbol
        /// </summary>
        /// <param name="map">The map</param>
        /// <param name="point">The point to symbolize</param>
        /// <param name="g">The graphics object</param>
        protected void RenderPoint(MapViewport map, Coordinate point, Graphics g)
        {
            if (point == null)
            {
                return;
            }

            PointF pp = map.WorldToImage(point);

            if (Rotation != 0f && !Single.IsNaN(Rotation))
            {
                SizeF  offset         = GetOffset();
                PointF rotationCenter = pp;

                using (var origTrans = g.Transform.Clone())
                    using (var t = g.Transform)
                    {
                        t.RotateAt(Rotation, rotationCenter);
                        t.Translate(offset.Width + 1, offset.Height + 1);
                        g.Transform = t;

                        OnRenderInternal(pp, g);

                        g.Transform = origTrans;
                    }

                using (var symTrans = new Matrix())
                {
                    symTrans.RotateAt(Rotation, rotationCenter);
                    symTrans.Translate(offset.Width + 1, offset.Height + 1);
                    var pts = CanvasArea.ToPointArray();
                    symTrans.TransformPoints(pts);
                    CanvasArea = pts.ToRectangleF();
                }
            }
            else
            {
                pp = PointF.Add(pp, GetOffset());
                OnRenderInternal(pp, g);
            }
        }
예제 #5
0
        public JsonResult AddControl(string areaAlias, string controlType, int pageId)
        {
            var controlId = Guid.NewGuid();

            string columns = "6:medium:;6:medium:";

            var model = Repository.GetObjectById(pageId);

            if (model != null && !string.IsNullOrEmpty(controlType) && !string.IsNullOrEmpty(areaAlias))
            {
                // Find Area In Grid/Section or Root

                foreach (var area in model.Areas)
                {
                    FindArea(area, areaAlias);
                }

                if (AreaResult != null)
                {
                    var control = new CanvasControl
                    {
                        ControlID = controlId,
                        Type      = controlType
                    };

                    // If control is grid then create area inside it

                    if (controlType == "Grid")
                    {
                        control.Columns = columns;

                        int p = 0;
                        foreach (var column in columns.Split(';').Where(x => !string.IsNullOrEmpty(x)))
                        {
                            string col = column.Split(':')[0];

                            var area = new CanvasArea {
                                Alias = "grid-" + col + "-" + controlId.ToString() + "-" + p
                            };


                            control.Areas.Add(area);

                            p++;
                        }
                    }

                    // If control is section then create area inside it

                    if (controlType == "Section")
                    {
                        var area = new CanvasArea {
                            Alias = "section-" + controlId.ToString()
                        };

                        control.Areas.Add(area);
                    }

                    AreaResult.Controls.Add(control);
                }

                // Convert model back to json for saving

                Repository.SaveJson(model, pageId);
            }
            else
            {
                // If no area is found, create it

                var m = new CanvasModel();

                var area = new CanvasArea {
                    Alias = areaAlias
                };

                var control = new CanvasControl
                {
                    ControlID = controlId,
                    Type      = controlType
                };

                area.Controls.Add(control);

                m.Areas.Add(area);

                Repository.SaveJson(m, pageId);
            }

            return(Json(new { success = true, controlType = controlType, controlId = controlId.ToString(), pageId = pageId }));
        }
예제 #6
0
        public JsonResult PostEditControl(FormCollection form)
        {
            var controlId   = new Guid(form["controlId"]);
            var pageId      = form["pageId"];
            var controlType = form["controlType"];

            var model = Repository.GetObjectById(Convert.ToInt32(pageId));

            if (model != null)
            {
                // Finna Area hvort sem það sé inn í Grid/section eða rótar svæði sem á undir sér Control

                foreach (var area in model.Areas)
                {
                    FindAreaWithControl(area, controlId);
                }

                if (AreaControlResult != null)
                {
                    var control = AreaControlResult.Controls.FirstOrDefault(x => x.ControlID == controlId);

                    if (control != null)
                    {
                        var controlProperties = control.GetType().GetProperties().ToDictionary(x => x.Name, x => x.GetValue(control, null) ?? "").ToList();

                        foreach (var property in controlProperties)
                        {
                            if (property.Key != "Type" && property.Key != "ControlID")
                            {
                                var value = form[property.Key];

                                // If Macro control
                                // Replace single quote with double quote
                                if (controlType == "Macro" && property.Key == "Macro")
                                {
                                    value = value.Replace("'", "\"");
                                }

                                PropertyInfo prop = control.GetType().GetProperty(property.Key, BindingFlags.Public | BindingFlags.Instance);
                                if (null != prop && prop.CanWrite)
                                {
                                    prop.SetValue(control, HttpContext.Server.HtmlEncode(value), null);
                                }
                            }
                        }

                        // Ef Control er grid þá þarf að eyða út gömlum svæðum og búa til ný
                        if (controlType == "Grid")
                        {
                            var columns = form["columns"].Split(';');

                            var ListOfAreasThatHaveNotChanges = new List <CanvasArea>();

                            // Finna öll svæði sem eru undir Controli
                            var AreasInsideGrid = control.Areas;

                            bool update = true;

                            // Athuga hvort það eigi að uppfæra grid eða búa til nýtt area undir þessu controli. t.d. col-4-12345 í stað col-6-12345

                            var p = 0;
                            foreach (var col in columns)
                            {
                                string[] colValue = col.Split(':');

                                var colAreaAlis = "grid-" + colValue[0] + "-" + controlId.ToString() + "-" + p;

                                p++;

                                var AreaInsideGrid = AreasInsideGrid.FirstOrDefault(x => x.Alias == colAreaAlis);

                                if (AreaInsideGrid == null)
                                {
                                    update = false;
                                }
                                else
                                {
                                    ListOfAreasThatHaveNotChanges.Add(AreaInsideGrid);
                                }
                            }

                            if (!update)
                            {
                                // Eyða út öllum svæðum sem hafa breyst

                                var AreasToRemove = AreasInsideGrid.Intersect(ListOfAreasThatHaveNotChanges).ToList();

                                foreach (var a in AreasToRemove.ToList())
                                {
                                    AreasInsideGrid.Remove(a);
                                }

                                p = 0;
                                foreach (var column in columns)
                                {
                                    string col = column.Split(':')[0];

                                    var area = new CanvasArea
                                    {
                                        Alias = "grid-" + col + "-" + controlId.ToString() + "-" + p
                                    };


                                    control.Areas.Insert(p, area);

                                    p++;
                                }
                            }
                        }
                    }
                }
            }

            var saveStatus = Repository.SaveJson(model, Convert.ToInt32(pageId));

            return(Json(new { success = saveStatus }));
        }
예제 #7
0
        public JsonResult SortControl(string areaFromAlias, string areaToAlias, int pageId, Guid controlId, int position)
        {
            var           model           = Repository.GetObjectById(pageId);
            CanvasControl control         = null;
            CanvasArea    areaDraggedFrom = null;
            CanvasArea    areaDroppedTo   = null;

            foreach (var area in model.Areas)
            {
                FindArea(area, areaFromAlias);
            }

            if (AreaResult != null)
            {
                areaDraggedFrom = AreaResult;
            }

            // if Sort
            if (areaFromAlias == areaToAlias)
            {
                // If sort

                if (areaDraggedFrom != null)
                {
                    control = areaDraggedFrom.Controls.FirstOrDefault(x => x.ControlID == controlId);

                    areaDraggedFrom.Controls.Remove(control);

                    areaDraggedFrom.Controls.Insert(position, control);
                }
            }
            else
            {
                // If Move
                AreaResult = null;

                foreach (var area in model.Areas)
                {
                    FindArea(area, areaToAlias);
                }

                if (AreaResult != null)
                {
                    areaDroppedTo = AreaResult;
                }

                if (areaDraggedFrom != null)
                {
                    control = areaDraggedFrom.Controls.FirstOrDefault(x => x.ControlID == controlId);

                    areaDraggedFrom.Controls.Remove(control);
                }

                if (areaDroppedTo != null)
                {
                    areaDroppedTo.Controls.Insert(position, control);
                }
            }


            Repository.SaveJson(model, pageId);

            return(Json(new { success = true }));
        }
예제 #8
0
        public static CanvasView Get(string alias, bool isAuthenticated)
        {
            try
            {
                var View = new CanvasView();

                int pageId = UmbracoContext.Current.PageId.Value;

                if (isAuthenticated)
                {
                    var cs = ApplicationContext.Current.Services.ContentService;

                    var page = cs.GetById(pageId);

                    var model = Repository.GetObjectById(pageId);

                    // Find area recurcivly

                    if (model.Areas.All(x => x.Alias != alias))
                    {
                        // Did not find area

                        // Check if there is a root area, create it if not.

                        Log.Info("Canvas - Did not find area, try to create it: " + alias);

                        var area = new CanvasArea();

                        area.Alias = alias;

                        if (model.Areas.Any())
                        {
                            // Append new

                            model.Areas.Add(area);

                            Repository.SaveJson(model, pageId);

                            page = cs.GetById(pageId);
                        }
                        else
                        {
                            // Create new

                            var areaModel = new CanvasModel();

                            areaModel.Areas.Add(area);

                            Repository.SaveJson(areaModel, pageId);

                            page = cs.GetById(pageId);
                        }
                    }

                    View.page     = page;
                    View.viewName = "/Views/Canvas/Backend.cshtml";
                }
                else
                {
                    View.node     = UmbracoContext.Current.ContentCache.GetById(pageId);
                    View.viewName = "/Views/Canvas/FrontEnd.cshtml";
                }

                View.alias = alias;

                return(View);
            }
            catch (Exception ex)
            {
                Log.Error("Canvas error on Get in ViewHelper.", ex);
                return(null);
            }
        }