Esempio n. 1
0
    private void OnPatchVisibilityChange(DataLayer dataLayer, Patch patch, bool visible)
    {
        if (visible)
        {
            if (citationsManager.TryGet(patch, out Citation citation) && citation.isMandatory)
            {
                patches.Add(patch, citation);

                if (citations.TryGetValue(citation, out CitationInfo info))
                {
                    info.count++;
                }
                else
                {
                    var uiCitation = Instantiate(citationPrefab);
                    uiCitation.text = "<b>" + patch.DataLayer.Name + ":</b>  " + citation.text;
                    uiCitation.transform.SetParent(transform, false);

                    citations.Add(citation, new CitationInfo(uiCitation.gameObject));
                }
            }
        }
        else
        {
            if (patches.TryGetValue(patch, out Citation citation))
            {
                patches.Remove(patch);

                var info = citations[citation];
                info.count--;
                if (info.count == 0)
                {
                    citations.Remove(citation);
                    Destroy(info.go);
                }
            }
        }

        GuiUtils.RebuildLayout(transform);
    }
Esempio n. 2
0
    public void ShowData(DataLayer dataLayer, RectTransform rt)
    {
        if (delayedHideCoroutine != null)
        {
            StopCoroutine(delayedHideCoroutine);
            delayedHideCoroutine = null;
        }

        transform.position = rt.position;

        currentRow = 0;

        bool allPatchesHaveSameValue = true;

        var patchCount = dataLayer.loadedPatchesInView.Count;

        if (patchCount == 0)
        {
            Add(translator.Get("No Info"), "");
        }
        else
        {
            var firstPatch     = dataLayer.loadedPatchesInView[0];
            var firstPatchData = firstPatch.Data;

            // Size
            double north = firstPatchData.north;
            double south = firstPatchData.south;
            double east  = firstPatchData.east;
            double west  = firstPatchData.west;
            for (int i = 1; i < patchCount; i++)
            {
                var data = dataLayer.loadedPatchesInView[i].Data;
                north = Math.Max(north, data.north);
                south = Math.Min(south, data.south);
                east  = Math.Max(east, data.east);
                west  = Math.Min(west, data.west);
            }
            Add(translator.Get("Extents"), "N  " + north.ToString("0.0000") +
                "\nS  " + south.ToString("0.0000") +
                "\nE  " + east.ToString("0.0000") +
                "\nW  " + west.ToString("0.0000"));

            var size = GeoCalculator.LonLatToMeters(east, north) - GeoCalculator.LonLatToMeters(west, south);
            var unit = "m";
            if (size.x >= 1000 && size.y >= 1000)
            {
                size *= 0.001;
                unit  = "km";
            }
            Add(translator.Get("Size"), size.x.ToString("0.#") + " x " + size.y.ToString("0.#") + " " + unit);

            if (firstPatchData is GridData)
            {
                var firstGridData = firstPatchData as GridData;

                // Resolution
                allPatchesHaveSameValue = true;
                var cellWidth = firstGridData.GetCellWidth();
                for (int i = 1; i < patchCount; i++)
                {
                    var otherCellWidth = (dataLayer.loadedPatchesInView[i].Data as GridData).GetCellWidth();
                    if (Math.Abs(otherCellWidth - cellWidth) > 0.000001f)
                    {
                        allPatchesHaveSameValue = false;
                        break;
                    }
                }
                if (allPatchesHaveSameValue)
                {
                    var resolution = (float)(GeoCalculator.Deg2Meters * cellWidth);
                    unit = "m";
                    if (resolution > 1000)
                    {
                        unit        = "km";
                        resolution *= 0.001f;
                    }

                    int number = Mathf.RoundToInt(resolution);
                    Add(translator.Get("Resolution"), number + " x " + number + " " + unit);
                }
                else
                {
                    AddMultiValue(translator.Get("Resolution"));
                }

                // Units
                if (!firstGridData.IsCategorized)
                {
                    allPatchesHaveSameValue = true;
                    var units = firstGridData.units;
                    for (int i = 1; i < patchCount; i++)
                    {
                        var otherUnits = (dataLayer.loadedPatchesInView[i].Data as GridData).units;
                        if (otherUnits != units)
                        {
                            allPatchesHaveSameValue = false;
                            break;
                        }
                    }
                    if (allPatchesHaveSameValue)
                    {
                        Add(translator.Get("Units"), units);
                    }
                    else
                    {
                        AddMultiValue(translator.Get("Units"));
                    }
                }
            }

            // Year
            allPatchesHaveSameValue = true;
            var year = firstPatch.Year;
            for (int i = 1; i < patchCount; i++)
            {
                var otherYear = dataLayer.loadedPatchesInView[i].Year;
                if (otherYear != year)
                {
                    allPatchesHaveSameValue = false;
                    break;
                }
            }
            if (allPatchesHaveSameValue)
            {
                Add(translator.Get("Year"), year.ToString());
            }
            else
            {
                AddMultiValue(translator.Get("Year"));
            }

            // Records
            HashSet <int> years = new HashSet <int>();
            foreach (var patch in dataLayer.loadedPatchesInView)
            {
                foreach (var recordYear in patch.SiteRecord.layerSite.records.Keys)
                {
                    if (!years.Contains(recordYear))
                    {
                        years.Add(recordYear);
                    }
                }
            }
            if (years.Count > 1)
            {
                List <int> sortedYears = new List <int>(years);
                sortedYears.Sort();

                var records = "";
                foreach (var recordYear in sortedYears)
                {
                    records += recordYear + ", ";
                }
                Add(translator.Get("Records"), records.Remove(records.Length - 2));
            }

            string citationStr = null;

            // Add metadata
            if (firstPatchData.metadata != null)
            {
                foreach (var row in firstPatchData.metadata)
                {
                    allPatchesHaveSameValue = true;
                    var value = row.Value;
                    for (int i = 1; i < patchCount; i++)
                    {
                        var otherValue = dataLayer.loadedPatchesInView[i].Data.metadata.Get(row.Key);
                        if (!otherValue.Equals(value))
                        {
                            allPatchesHaveSameValue = false;
                            break;
                        }
                    }

                    if (row.Key != "Citation" && row.Key != "MandatoryCitation")
                    {
                        if (allPatchesHaveSameValue)
                        {
                            Add(translator.Get(row.Key, false), row.Value);
                        }
                        else
                        {
                            AddMultiValue(translator.Get(row.Key, false));
                        }
                    }

                    // Source/Citation
                    if (row.Key == "Source" && citationStr == null)
                    {
                        if (allPatchesHaveSameValue)
                        {
                            if (citationsManager.TryGet(firstPatch, out Citation citation))
                            {
                                citationStr = citation.text;
                            }
                        }
                        else
                        {
                            AddMultiValue(translator.Get("Citation"));
                        }
                    }
                    else if (row.Key == "Citation")
                    {
                        if (allPatchesHaveSameValue)
                        {
                            citationStr = value;
                        }
                        else
                        {
                            citationStr = AddAllValues(dataLayer, row.Key, value);
                        }
                    }
                    else if (row.Key == "MandatoryCitation" && citationStr == null)
                    {
                        if (allPatchesHaveSameValue)
                        {
                            citationStr = value;
                        }
                        else
                        {
                            citationStr = AddAllValues(dataLayer, row.Key, value);
                        }
                    }
                }
            }

            if (!string.IsNullOrWhiteSpace(citationStr))
            {
                Add(translator.Get("Citation"), citationStr);
            }
        }

        // DO NOT DELETE OR CHANGE THIS COMMENT BLOCK
        // The following lines will force the LocalizationManager to export the quoted text:
        // "Source"/*translatable*/
        // "Layer Name"/*translatable*/

        // Hide remaining rows
        for (int i = infoRows.Count - 1; i >= currentRow; i--)
        {
            infoRows[i].key.gameObject.SetActive(false);
            infoRows[i].value.gameObject.SetActive(false);
            infoRows[i].key.text = infoRows[i].value.text = "";
        }

        neck.gameObject.SetActive(true);
        panel.gameObject.SetActive(true);

        // Hide previous anchor image
        if (anchor != null)
        {
            SetImageTransparency(anchor, 0);
        }

        // Show new anchor image
        anchor = rt.GetComponent <Image>();
        if (anchor != null)
        {
            SetImageTransparency(anchor, 1);
        }

        panelHeight = panel.rect.height;
        AdjustPanel();
    }