public static void LoadProject <T>(ISavable <T> view, bool dialog = false, bool message = true)
        {
            if (dialog)
            {
                Directory.CreateDirectory(view.DefaultSaveFolder);
            }
            string path = dialog ? IOHelper.LoadProjectDialog(view.DefaultSaveFolder) : view.AutoSavePath;

            // If the file name is not an empty string open it for saving.
            if (path == "")
            {
                return;
            }
            try {
                T project = LoadJson <T>(path);

                if (project == null)
                {
                    throw new Exception("Loaded project is a null reference.");
                }

                view.SetSaveData(project);
            } catch (Exception ex) {
                Console.WriteLine(ex.StackTrace);
                Console.WriteLine(ex.Message);

                if (message)
                {
                    MessageBox.Show("Project could not be loaded!");
                    ex.Show();
                }
            }
        }
        public static void NewProject <T>(ISavable <T> view, bool dialog = false, bool message = true)
        {
            if (dialog)
            {
                var messageBoxResult = MessageBox.Show("Are you sure you want to start a new project? All unsaved progress will be lost.", "Confirm new project", MessageBoxButton.YesNo);
                if (messageBoxResult != MessageBoxResult.Yes)
                {
                    return;
                }
            }

            try {
                T project = Activator.CreateInstance <T>();
                view.SetSaveData(project);
            } catch (Exception ex) {
                Console.WriteLine(ex.StackTrace);
                Console.WriteLine(ex.Message);

                if (message)
                {
                    MessageBox.Show("New project could not be initialized!");
                    ex.Show();
                }
            }
        }