Ejemplo n.º 1
0
        /// <summary>
        /// Applies new configuration settings and closes the form.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnAcceptClick(object sender, EventArgs e)
        {
            _bork = false;

            if (cbResources.Checked)             // handle XCOM resource path(s) configuration ->
            {
                Ufo  = Ufo.Trim();
                Tftd = Tftd.Trim();

                if (Ufo.EndsWith(@"\", StringComparison.Ordinal))                 // NOTE: drive-root directories do funny things. Like append '\'
                {
                    Ufo = Ufo.Substring(0, Ufo.Length - 1);
                }

                if (Tftd.EndsWith(@"\", StringComparison.Ordinal))
                {
                    Tftd = Tftd.Substring(0, Tftd.Length - 1);
                }

                if (String.IsNullOrEmpty(Ufo) && String.IsNullOrEmpty(Tftd))
                {
                    ShowErrorDialog("Both folders cannot be blank.");
                }
                else if (!String.IsNullOrEmpty(Ufo) && !Directory.Exists(Ufo))
                {
                    ShowErrorDialog("The UFO folder does not exist.");
                }
                else if (!String.IsNullOrEmpty(Tftd) && !Directory.Exists(Tftd))
                {
                    ShowErrorDialog("The TFTD folder does not exist.");
                }
                else                 // check for a valid XCOM CursorSprite and create MapResources.yml ->
                {
                    const string CursorPck = SharedSpace.CursorFilePrefix + SpriteCollection.PckExt;
                    const string CursorTab = SharedSpace.CursorFilePrefix + SpriteCollection.TabExt;

                    if ((!File.Exists(Path.Combine(Ufo, CursorPck)) || !File.Exists(Path.Combine(Ufo, CursorTab))) &&
                        (!File.Exists(Path.Combine(Tftd, CursorPck)) || !File.Exists(Path.Combine(Tftd, CursorTab))))
                    {
                        ShowErrorDialog("A valid UFO or TFTD resource directory must exist with"
                                        + Environment.NewLine + Environment.NewLine
                                        + CursorPck + Environment.NewLine
                                        + CursorTab);
                    }
                    else
                    {
                        _pathResources.CreateDirectory();

                        using (var fs = new FileStream(_pathResources.Fullpath, FileMode.Create))
                            using (var sw = new StreamWriter(fs))
                            {
                                object node = new
                                {
                                    ufo = (!String.IsNullOrEmpty(Ufo)  ? Ufo
                                                                                                                                        : PathInfo.NotConfigured),
                                    tftd = (!String.IsNullOrEmpty(Tftd) ? Tftd
                                                                                                                                        : PathInfo.NotConfigured)
                                };

                                var ser = new Serializer();
                                ser.Serialize(sw, node);
                            }

                        DialogResult = DialogResult.OK;
                    }
                }
            }

            if (!_bork && cbTilesets.Checked)             // deal with MapTilesets.yml/.tpl ->
            {
                _pathTilesets.CreateDirectory();

                string pfeTilesets = _pathTilesets.Fullpath;

                if (rbTilesets.Checked)                 // make a backup of the user's MapTilesets.yml if it exists.
                {
                    if (File.Exists(pfeTilesets))
                    {
                        File.Copy(pfeTilesets, Path.Combine(_pathTilesets.DirectoryPath, PathInfo.ConfigTilesetsOld), true);
                    }
                }
                else                 // rbTilesetsTpl.Checked
                {
                    pfeTilesets = Path.Combine(_pathTilesets.DirectoryPath, PathInfo.ConfigTilesetsTpl);
                }

                using (var sr = new StreamReader(Assembly.GetExecutingAssembly()
                                                 .GetManifestResourceStream("MapView._Embedded.MapTilesets.yml")))
                    using (var fs = new FileStream(pfeTilesets, FileMode.Create))
                        using (var sw = new StreamWriter(fs))
                            while (sr.Peek() != -1)
                            {
                                sw.WriteLine(sr.ReadLine());
                            }

                if (rbTilesets.Checked)
                {
                    DialogResult = DialogResult.OK;
                }
                else                 // rbTilesetsTpl.Checked
                {
                    ShowInfoDialog("Tileset template has been created "
                                   + Environment.NewLine + Environment.NewLine
                                   + pfeTilesets);

                    if (!cbResources.Checked)
                    {
                        Close();
                    }
                }
            }
        }