示例#1
0
        private static ArgumentHandleResult ProcessSharedCspSettings(SharedEntry shared, byte[] data)
        {
            var result = ShowDialog(shared);

            using (var model = PatchSettingsModel.Create()) {
                switch (result)
                {
                case Choise.Save:
                case Choise.ApplyAndSave:
                    var filename = FileUtils.EnsureUnique(Path.Combine(
                                                              PresetsManager.Instance.GetDirectory(model.PresetableCategory), @"Loaded", shared.GetFileName()));
                    Directory.CreateDirectory(Path.GetDirectoryName(filename) ?? "");
                    File.WriteAllBytes(filename, data);
                    if (result == Choise.ApplyAndSave)
                    {
                        model.ImportFromPresetData(data.ToUtf8String());
                        UserPresetsControl.SetCurrentFilename(model.PresetableKey, filename);
                    }
                    return(ArgumentHandleResult.SuccessfulShow);

                case Choise.Apply:
                    model.ImportFromPresetData(data.ToUtf8String());
                    UserPresetsControl.SetCurrentFilename(model.PresetableKey, null);
                    return(ArgumentHandleResult.SuccessfulShow);

                default:
                    return(ArgumentHandleResult.Failed);
                }
            }
        }
示例#2
0
        private static async Task <ArgumentHandleResult> ProcessRaceQuick(CustomUriRequest custom)
        {
            var preset = GetSettings(custom.Params, @"preset") ?? throw new Exception(@"Settings are not specified");

            var assists = GetSettings(custom.Params, @"assists");

            if (assists != null && !UserPresetsControl.LoadSerializedPreset(AssistsViewModel.Instance.PresetableKey, assists))
            {
                AssistsViewModel.Instance.ImportFromPresetData(assists);
            }

            if (custom.Params.GetFlag("loadPreset"))
            {
                QuickDrive.Show(serializedPreset: preset, forceAssistsLoading: custom.Params.GetFlag("loadAssists"));
                return(ArgumentHandleResult.SuccessfulShow);
            }

            if (!await QuickDrive.RunAsync(serializedPreset: preset, forceAssistsLoading: custom.Params.GetFlag("loadAssists")))
            {
                NonfatalError.Notify(AppStrings.Common_CannotStartRace, AppStrings.Arguments_CannotStartRace_Commentary);
                return(ArgumentHandleResult.Failed);
            }

            return(ArgumentHandleResult.Successful);
        }
示例#3
0
        public HierarchicalGroup CreateGroup(string presetsKey, string displayName = "", string prependWithDefault = null)
        {
            Func <IEnumerable <object> > groupPresets = () => {
                var result = UserPresetsControl.GroupPresets(presetsKey);

                if (prependWithDefault != null)
                {
                    var menuItem = new HierarchicalItem {
                        Header = new TextBlock {
                            Text = prependWithDefault, FontStyle = FontStyles.Italic
                        }
                    };

                    HierarchicalItemsView.SetValue(menuItem, null);
                    result = result.Prepend(menuItem);
                }

                return(result);
            };

            var group = new HierarchicalGroup(displayName, groupPresets());

            var handler = new EventHandler((sender, e) => {
                group.ReplaceEverythingBy(groupPresets());
            });

            PresetsManager.Instance.Watcher(presetsKey).Update += handler;
            _presetsHandlersToRemove.Add(new PresetsHandlerToRemove {
                Key = presetsKey, Handler = handler
            });

            return(group);
        }
示例#4
0
        private static ArgumentHandleResult ProcessSharedSettingsPreset(IUserPresetable presetable, SharedEntry shared, byte[] data)
        {
            var result = ShowDialog(shared);

            switch (result)
            {
            case Choise.Save:
            case Choise.ApplyAndSave:
                var filename = FileUtils.EnsureUnique(Path.Combine(
                                                          PresetsManager.Instance.GetDirectory(presetable.PresetableKey), @"Loaded", shared.GetFileName()));
                Directory.CreateDirectory(Path.GetDirectoryName(filename) ?? "");
                File.WriteAllBytes(filename, data);
                if (result == Choise.ApplyAndSave)
                {
                    UserPresetsControl.LoadPreset(presetable.PresetableKey, filename);
                }
                return(ArgumentHandleResult.SuccessfulShow);

            case Choise.Apply:
                presetable.ImportFromPresetData(data.ToUtf8String());
                return(ArgumentHandleResult.SuccessfulShow);

            default:
                return(ArgumentHandleResult.Failed);
            }
        }
示例#5
0
 private static void OnPresetSaved(object sender, PresetSavedEventArgs e)
 {
     if (e.Key == RhmService.Instance.PresetableKey)
     {
         UserPresetsControl.SetCurrentFilename(RhmService.Instance.PresetableKey, e.Filename);
     }
 }
示例#6
0
 public static void LoadSerializedPreset([NotNull] string serializedPreset, [NotNull] string keySaveable = KeySaveable)
 {
     if (!UserPresetsControl.LoadSerializedPreset(PresetableKeyValue, serializedPreset))
     {
         ValuesStorage.Set(keySaveable, serializedPreset);
     }
 }
示例#7
0
        public static IEnumerable <object> GroupPresets(string presetsKey, [CanBeNull] Action <ISavedPresetEntry> action)
        {
            var group  = new HierarchicalGroup("", UserPresetsControl.GroupPresets(presetsKey));
            var result = new HierarchicalItemsView(o => {
                action?.Invoke((ISavedPresetEntry)o);
            }, group, false);

            return(result);
        }
示例#8
0
        public static void LoadSerializedPreset(string serializedPreset)
        {
            if (!UserPresetsControl.LoadSerializedPreset(PresetableKeyValue, serializedPreset))
            {
                ValuesStorage.Set(KeySaveable, serializedPreset);
            }

            NavigateToPage();
        }
示例#9
0
        private void RegisterBuiltInPresets()
        {
            PresetsManager.Instance.ClearBuiltInPresets(TrackStateViewModelBase.PresetableCategory);
            foreach (var preset in GetBuiltInPresets())
            {
                PresetsManager.Instance.RegisterBuiltInPreset(preset.Item2.ToBytes(), TrackStateViewModelBase.PresetableCategory, preset.Item1);
            }

            UserPresetsControl.RescanCategory(TrackStateViewModelBase.PresetableCategory, true);
        }
示例#10
0
        protected virtual async Task Share()
        {
            var data = ExportToPresetData();

            if (data == null)
            {
                return;
            }
            await SharingUiHelper.ShareAsync(SharedEntryType.CustomShowroomPreset,
                                             Path.GetFileNameWithoutExtension(UserPresetsControl.GetCurrentFilename(_presetableKeyValue)), null, data);
        }
示例#11
0
            private async Task Share()
            {
                var data = ExportToPresetData();

                if (data == null)
                {
                    return;
                }
                await SharingUiHelper.ShareAsync(SharedEntryType.QuickDrivePreset,
                                                 Path.GetFileNameWithoutExtension(UserPresetsControl.GetCurrentFilename(PresetableKeyValue)), null,
                                                 data);
            }
示例#12
0
        public static void Transfer(DarkRendererSettings settings, DarkKn5ObjectRenderer renderer)
        {
            var data = ToSaveableData(settings, renderer);

            var filename = UserPresetsControl.GetCurrentFilename(DarkRendererSettings.DefaultPresetableKeyValue);

            if (filename != null)
            {
                var relative = FileUtils.GetRelativePath(filename, PresetsManager.Instance.Combine(DarkRendererSettings.DefaultPresetableKeyValue));
                filename = relative == filename ? null : Path.Combine(PresetsManager.Instance.Combine(DefaultPresetableKeyValue), relative);
            }

            PresetsManager.Instance.SavePresetUsingDialog(null, DefaultPresetableKeyValue, SaveHelper <SaveableData> .Serialize(data), filename);
        }
示例#13
0
        private async Task Share()
        {
            var model = DataContext as AssistsViewModel;
            var data  = model?.ExportToPresetData();

            if (data == null)
            {
                return;
            }

            await SharingUiHelper.ShareAsync(SharedEntryType.AssistsSetupPreset,
                                             Path.GetFileNameWithoutExtension(UserPresetsControl.GetCurrentFilename(model.PresetableKey)), null,
                                             data);
        }
示例#14
0
        private static async Task <ArgumentHandleResult> ProcessRaceConfig(CustomUriRequest custom)
        {
            var config = GetSettings(custom.Params, @"config") ?? throw new Exception(@"Settings are not specified");

            var assists = GetSettings(custom.Params, @"assists");

            if (assists != null && !UserPresetsControl.LoadSerializedPreset(AssistsViewModel.Instance.PresetableKey, assists))
            {
                AssistsViewModel.Instance.ImportFromPresetData(assists);
            }

            await GameWrapper.StartAsync(new Game.StartProperties {
                PreparedConfig = IniFile.Parse(config)
            });

            return(ArgumentHandleResult.Successful);
        }
            public bool Save()
            {
                try {
                    var data = AcSettingsHolder.CombineAppPresets(Entries.Select(x => Tuple.Create(x.Preset, x.PresetDesktopToUse.IntValue ?? 0)),
                                                                  Entries.FindIndex(x => x.IsSelected) + 1);
                    string filename = null;
                    if (PresetsManager.Instance.SavePresetUsingDialog(AcSettingsHolder.AppsPresetsKey, AcSettingsHolder.AppsPresetsCategory, data, ref filename))
                    {
                        UserPresetsControl.LoadPreset(AcSettingsHolder.AppsPresetsKey, filename);
                        return(true);
                    }
                } catch (Exception e) {
                    NonfatalError.Notify("Can’t combine presets", e);
                }

                return(false);
            }
示例#16
0
            public ViewModel()
            {
                Entries = new ChangeableObservableCollection <PresetPerMode>();
                Modes   = new BetterObservableCollection <Mode>();

                AppPresets   = new HierarchicalGroup("", UserPresetsControl.GroupPresets(AcSettingsHolder.AppsPresetsKey));
                AudioPresets = new HierarchicalGroup("", UserPresetsControl.GroupPresets(AcSettingsHolder.AudioPresetsKey));
                VideoPresets = new HierarchicalGroup("", UserPresetsControl.GroupPresets(AcSettingsHolder.VideoPresetsKey));

                UpdateModes();
                FilesStorage.Instance.Watcher(ContentCategory.PresetsPerModeConditions).Update += OnCategoriesUpdate;

                Saveable.Initialize();

                Entries.CollectionChanged   += OnCollectionChanged;
                Entries.ItemPropertyChanged += OnItemPropertyChanged;
            }
示例#17
0
        private HierarchicalGroup Rebuild(string header, [Localizable(false)] string sub, IEnumerable <PresetEntry> presets)
        {
            var directory = Path.Combine(ControlsSettings.PresetsDirectory, sub);

            return(new HierarchicalGroup(header, UserPresetsControl.GroupPresets(presets, directory)));
        }
示例#18
0
 public static void LoadPreset(string presetFilename)
 {
     UserPresetsControl.LoadPreset(PresetableKeyValue, presetFilename);
     NavigateToPage();
 }
示例#19
0
            internal ViewModel(string serializedPreset, bool uiMode, CarObject carObject = null, string carSkinId = null,
                               TrackObjectBase trackObject = null, string carSetupId = null, string weatherId = null, int?time = null, bool savePreset = false)
            {
                _uiMode     = uiMode;
                _carSetupId = carSetupId;
                _weatherId  = weatherId;
                _forceTime  = time;

                _saveable = new SaveHelper <SaveableData>(KeySaveable, () => new SaveableData {
                    RealConditions             = RealConditions,
                    RealConditionsLocalWeather = RealConditionsLocalWeather,
                    RealConditionsTimezones    = RealConditionsTimezones,
                    RealConditionsManualTime   = RealConditionsManualTime,

                    Mode     = SelectedMode,
                    ModeData = SelectedModeViewModel?.ToSerializedString(),

                    CarId     = SelectedCar?.Id,
                    TrackId   = SelectedTrack?.IdWithLayout,
                    WeatherId = SelectedWeather?.Id,

                    // TODO
                    TrackPropertiesData           = TrackState.ExportToPresetData(),
                    TrackPropertiesPresetFilename = UserPresetsControl.GetCurrentFilename(TrackState.PresetableKey),

                    Temperature   = Temperature,
                    Time          = Time,
                    TimeMultipler = TimeMultipler,
                }, o => {
                    TimeMultipler = o.TimeMultipler;

                    RealConditions             = _weatherId == null && o.RealConditions;
                    RealConditionsTimezones    = o.RealConditionsTimezones ?? true;
                    RealConditionsLocalWeather = o.RealConditionsLocalWeather ?? false;
                    RealConditionsManualTime   = o.RealConditionsManualTime ?? false;

                    Temperature = o.Temperature;
                    Time        = o.Time;

                    if (RealConditions)
                    {
                        UpdateConditions();
                    }

                    try {
                        _skipLoading = o.ModeData != null;
                        if (o.Mode != null && o.Mode.OriginalString.Contains('_'))
                        {
                            SelectedMode = o.Mode;
                        }
                        if (o.ModeData != null)
                        {
                            SelectedModeViewModel?.FromSerializedString(o.ModeData);
                        }
                    } finally {
                        _skipLoading = false;
                    }

                    if (o.CarId != null)
                    {
                        SelectedCar = CarsManager.Instance.GetById(o.CarId) ?? SelectedCar;
                    }
                    if (o.TrackId != null)
                    {
                        SelectedTrack = TracksManager.Instance.GetLayoutById(o.TrackId) ?? SelectedTrack;
                    }
                    if (_weatherId != null)
                    {
                        SelectedWeather = WeatherManager.Instance.GetById(_weatherId);
                    }
                    else if (o.WeatherId != null)
                    {
                        SelectedWeather = WeatherManager.Instance.GetById(o.WeatherId) ?? SelectedWeather;
                    }

                    if (o.TrackPropertiesPresetFilename != null && File.Exists(o.TrackPropertiesPresetFilename))
                    {
                        UserPresetsControl.LoadPreset(TrackState.PresetableKey, o.TrackPropertiesPresetFilename);
                    }
                    else if (o.TrackPropertiesData != null)
                    {
                        UserPresetsControl.LoadSerializedPreset(TrackState.PresetableKey, o.TrackPropertiesData);
                    }
                    else if (o.ObsTrackPropertiesPreset != null)
                    {
                        UserPresetsControl.LoadBuiltInPreset(TrackState.PresetableKey, TrackStateViewModelBase.PresetableCategory, o.ObsTrackPropertiesPreset);
                    }
                }, () => {
                    RealConditions             = false;
                    RealConditionsTimezones    = true;
                    RealConditionsManualTime   = false;
                    RealConditionsLocalWeather = false;

                    SelectedMode    = new Uri("/Pages/Drive/QuickDrive_Race.xaml", UriKind.Relative);
                    SelectedCar     = CarsManager.Instance.GetDefault();
                    SelectedTrack   = TracksManager.Instance.GetDefault();
                    SelectedWeather = WeatherManager.Instance.GetDefault();

                    UserPresetsControl.LoadBuiltInPreset(TrackState.PresetableKey, TrackStateViewModelBase.PresetableCategory, "Green");

                    Temperature   = 12.0;
                    Time          = 12 * 60 * 60;
                    TimeMultipler = 1;
                });

                if (string.IsNullOrEmpty(serializedPreset))
                {
                    _saveable.LoadOrReset();
                }
                else
                {
                    _saveable.Reset();

                    if (savePreset)
                    {
                        _saveable.FromSerializedString(serializedPreset);
                    }
                    else
                    {
                        _saveable.FromSerializedStringWithoutSaving(serializedPreset);
                    }
                }

                if (carObject != null)
                {
                    SelectedCar = carObject;
                    // TODO: skin?
                }

                if (trackObject != null)
                {
                    SelectedTrack = trackObject;
                }

                UpdateConditions();
            }
示例#20
0
 private static string GetPresetName()
 {
     return(Path.GetFileNameWithoutExtension(UserPresetsControl.GetCurrentFilename(CmPreviewsSettings.DefaultPresetableKeyValue)));
 }