Esempio n. 1
0
        private void LoadCustomDir_Execute(bool subdirs)
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog
            {
                Description         = "Select Directory to Load",
                ShowNewFolderButton = false,
                SelectedPath        = Core.EditSaveDir,
            };

            if (fbd.ShowDialog() != System.Windows.Forms.DialogResult.OK)
            {
                return;
            }

            SeatDataBlock.ResetSeats();
            CharacterCollection collection = DataContext as CharacterCollection;

            if (collection != null)
            {
                while (!collection.ViewModelProvider.Finish())
                {
                    MessageBoxResult msg = MessageBox.Show(MESSAGE_ERROR_FINISH_PROVIDER,
                                                           "Error",
                                                           MessageBoxButton.OKCancel,
                                                           MessageBoxImage.Hand);
                    if (msg == MessageBoxResult.Cancel)
                    {
                        return;
                    }
                }
                collection.ViewModelProvider.Dispose();
            }

            ICharacterViewModelProvider viewModelProvider = subdirs
                ? new FileSystemCharacterViewModelProvider(true, fbd.SelectedPath)
                : new FileSystemCharacterViewModelProvider(false, fbd.SelectedPath);

            viewModelProvider.Initialize(this);

            viewModelProvider.CharacterLoaded += ViewModelProviderOnCharacterLoaded;
            CharacterCollection characterCollection = new CharacterCollection(Dispatcher, viewModelProvider);

            viewModelProvider.CharacterLoaded -= ViewModelProviderOnCharacterLoaded;
            SetTitle();
            DataContext = characterCollection;

            SortBox.SelectedValue           = viewModelProvider.DefaultSortProperty;
            OrderBox.SelectedValue          = viewModelProvider.DefaultSortDirection;
            CharactersControl.SelectedIndex = 0;
        }
Esempio n. 2
0
        private void LoadEditorSave_Execute(bool subdirs)
        {
            SeatDataBlock.ResetSeats();
            CharacterCollection collection = DataContext as CharacterCollection;

            if (collection != null)
            {
                while (!collection.ViewModelProvider.Finish())
                {
                    MessageBoxResult msg = MessageBox.Show(MESSAGE_ERROR_FINISH_PROVIDER,
                                                           "Error",
                                                           MessageBoxButton.OKCancel,
                                                           MessageBoxImage.Hand);
                    if (msg == MessageBoxResult.Cancel)
                    {
                        return;
                    }
                }
                collection.ViewModelProvider.Dispose();
            }

            ICharacterViewModelProvider viewModelProvider;

            if (subdirs)
            {
                viewModelProvider = new FileSystemCharacterViewModelProvider(true, Core.EditSaveDir);
            }
            else
            {
                viewModelProvider = new FileSystemCharacterViewModelProvider(false,
                                                                             Path.Combine(Core.EditSaveDir, "Male"),
                                                                             Path.Combine(Core.EditSaveDir, "Female"));
            }

            viewModelProvider.CharacterLoaded += ViewModelProviderOnCharacterLoaded;
            viewModelProvider.Initialize(this);

            CharacterCollection characterCollection = new CharacterCollection(Dispatcher, viewModelProvider);

            viewModelProvider.CharacterLoaded -= ViewModelProviderOnCharacterLoaded;
            SetTitle();
            DataContext = characterCollection;

            SortBox.SelectedValue           = viewModelProvider.DefaultSortProperty;
            OrderBox.SelectedValue          = viewModelProvider.DefaultSortDirection;
            CharactersControl.SelectedIndex = 0;
        }
Esempio n. 3
0
        internal static IDataBlock CreateEnumDataBlock(
            IEnumerable <XElement> enumerables,
            XElement datablock,
            ref int autoAddr)
        {
            XAttribute typeNode    = datablock.Attribute("type");
            XAttribute addressNode = datablock.Attribute("address");
            XAttribute keyNode     = datablock.Attribute("key");
            XAttribute nameNode    = datablock.Attribute("displayname");

            XAttribute copyaddressNode = datablock.Attribute("copyaddress");
            XAttribute readonlyNode    = datablock.Attribute("readonly");

            XAttribute metaKeyNode = datablock.Attribute("metakey");

            if (!addressNode.Value.Equals("auto", StringComparison.OrdinalIgnoreCase))
            {
                autoAddr = addressNode.Value.ToInt32();
            }

            bool ignore = keyNode == null;

            string type = typeNode == null
                ? "enum"
                : typeNode.Value;

            string key = keyNode == null
                ? String.Empty
                : keyNode.Value;

            string metaKey = type == "enum"
                ? metaKeyNode.Value
                : null;

            string name = nameNode == null
                ? key
                : nameNode.Value;

            var copyAddresses = copyaddressNode == null
                ? new int[0]
                : copyaddressNode.Value.Split(';')
                                .Select(Extensions.ToInt32)
                                .ToArray();
            bool readOnly = bool.Parse(readonlyNode.Value);

            XElement enumTypeNode = enumerables.FirstOrDefault
                                        (enumerable => enumerable.Attribute("key")
                                        .Value.Equals(metaKey, StringComparison.OrdinalIgnoreCase));
            string enumType;

            switch (type)
            {
            case "seat":
                enumType = "int32";
                break;

            default:
                enumType = enumTypeNode.Attribute("type")
                           .Value;
                break;
            }

            int len;

            switch (enumType)
            {
            default:
            case "byte":
                len = 1;
                break;

            case "int16":
                len = 2;
                break;

            case "int32":
                len = 4;
                break;
            }

            var dictionary = new Dictionary <int, string>();

            if (type == "enum")
            {
                foreach (XElement element in enumTypeNode.Elements("enumpair"))
                {
                    string pairKey = element.Attribute("key")
                                     .Value;
                    string pairValue = element.Attribute("value")
                                       .Value;
                    dictionary.Add(pairKey.ToInt32(), pairValue);
                }
            }

            IDataBlock block;

            switch (type)
            {
            case "seat":
                block = new SeatDataBlock
                {
                    Key           = key,
                    Name          = name,
                    Address       = autoAddr,
                    CopyAddresses = copyAddresses,
                    ReadOnly      = readOnly,
                };
                break;

            default:
                block = new EnumDataBlock
                {
                    Key           = key,
                    Name          = name,
                    Address       = autoAddr,
                    EnumName      = metaKey,
                    CopyAddresses = copyAddresses,
                    Size          = len,
                    Enum          = dictionary,
                    ReadOnly      = readOnly,
                };
                break;
            }

            autoAddr += block.Size;

            return(!ignore
                ? block
                : null);
        }
Esempio n. 4
0
        private void LoadGameSave_Execute()
        {
            SeatDataBlock.ResetSeats();

            string         saveDir = Path.Combine(Core.PlaySaveDir, "class");
            OpenFileDialog opfd    = new OpenFileDialog
            {
                AddExtension     = true,
                CheckFileExists  = true,
                Filter           = "Save Files (*.sav)|*.sav",
                InitialDirectory = saveDir
            };

            opfd.CustomPlaces.Add(new FileDialogCustomPlace(saveDir));
            if (!opfd.ShowDialog(this)
                .Value)
            {
                return;
            }

            CharacterCollection collection = DataContext as CharacterCollection;

            if (collection != null)
            {
                while (!collection.ViewModelProvider.Finish())
                {
                    MessageBoxResult msg = MessageBox.Show(MESSAGE_ERROR_FINISH_PROVIDER,
                                                           "Error",
                                                           MessageBoxButton.OKCancel,
                                                           MessageBoxImage.Hand);
                    if (msg == MessageBoxResult.Cancel)
                    {
                        return;
                    }
                }
                collection.Dispose();
            }

            ICharacterViewModelProvider viewModelProvider = new SaveFileCharacterViewModelProvider(opfd.FileName);

            viewModelProvider.Initialize(this);

            viewModelProvider.CharacterLoaded += ViewModelProviderOnCharacterLoaded;
            CharacterCollection characterCollection = new CharacterCollection(Dispatcher, viewModelProvider);

            viewModelProvider.CharacterLoaded -= ViewModelProviderOnCharacterLoaded;
            SetTitle();
            DataContext = characterCollection;

            SortBox.SelectedValue           = viewModelProvider.DefaultSortProperty;
            OrderBox.SelectedValue          = viewModelProvider.DefaultSortDirection;
            CharactersControl.SelectedIndex = 0;

            characterCollection.Characters.ForEach
                (model =>
            {
                int seat = (int)model.ExtraData["PLAY_SEAT"];
                SeatDataBlock.SetSeat(seat, model.Profile.FullName);
                model.Character.PropertyChanged += (sender, args) =>
                {
                    if (!args.PropertyName.Contains("NAME"))
                    {
                        return;
                    }

                    string name = model.Profile.FullName;
                    SeatDataBlock.SetSeat(seat, name);
                };
            });
        }