public void DrawCommonList()
        {
            GUILayout.BeginArea(new Rect(10, 45, 500, 100));
            var rect = EditorGUILayout.BeginVertical();

            EditorGUILayout.LabelField(TabName, EditorStyles.boldLabel);

            SelectedItemId = EditorGUILayout.IntPopup(ListName, SelectedItemId, PopupDataList.Select(x => x.Name).ToArray(), PopupDataList.Select(x => x.Id).ToArray());

            if (SelectedItemId > 0)
            {
                IsEmpty = false;
                string tagName = PopupDataList.Where(x => x.Id == SelectedItemId).Select(x => x.TagName).FirstOrDefault();

                if (!string.IsNullOrEmpty(tagName))
                {
                    Data = (T)DataDictionary.Data.Values.Cast <IData>().SingleOrDefault(x => x.TagName == tagName);
                }
                else
                {
                    Debug.LogError("Tag Name is null or empty");
                }
            }

            if (SelectedItemId == 0)
            {
                IsEmpty = true;
            }

            else if (!IsNew && SelectedItemId == 0)
            {
                Clear();
            }

            if (GUI.Button(new Rect(rect.x, rect.y + rect.height, 50, 25), "New"))
            {
                New();
                SelectedItemId = 0;
            }

            if (IsNew)
            {
                if (GUI.Button(new Rect(rect.x + 50, rect.y + rect.height, 50, 25), "Save"))
                {
                    Save(Data);
                }
            }
            else if (!IsEmpty)
            {
                if (GUI.Button(new Rect(rect.x + 50, rect.y + rect.height, 50, 25), "Update"))
                {
                    Save(Data);
                }
            }

            EditorGUILayout.EndVertical();
            GUILayout.EndArea();
        }
 public void Save(T data)
 {
     if (!DataDictionary.Data.ContainsKey(((IData)data).TagName))
     {
         DataDictionary.Add(((IData)data).TagName, data);
         JsonData.SaveJson(Constants.CountriesFileName, DataDictionary, Application.dataPath);
         int maxId = PopupDataList.Select(x => x.Id).Max();
         PopupDataList.Add(new PopupData {
             Id = maxId, Name = ((IData)data).Name, TagName = ((IData)data).TagName
         });
         SelectedItemId = maxId;
         IsNew          = false;
     }
 }
        public void Load()
        {
            DataDictionary = DataManager.Load <StaticDictionary <T> >(FileName, Application.dataPath);
            if (DataDictionary == null)
            {
                DataDictionary = new StaticDictionary <T>();
            }

            PopupDataList.Add(new PopupData {
                Id = 0, Name = "Empty", TagName = "empty"
            });
            int count = 1;

            foreach (var data in DataDictionary.Data)
            {
                PopupDataList.Add(new PopupData {
                    Id = count, Name = ((IData)data.Value).Name, TagName = ((IData)data.Value).TagName
                });
                count++;
            }
        }