private void PaletteListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            DisplayTuple <string, TilesetModel> selectedTileset = (DisplayTuple <string, TilesetModel>)TilesetListBox.SelectedItem;

            if (selectedTileset == null)
            {
                return;
            }
            DisplayTuple <int, PaletteModel> selected = (DisplayTuple <int, PaletteModel>)PaletteListBox.SelectedItem;

            if (selected == null)
            {
                return;
            }
            PaletteEditorWindow paletteEditorWindow = new PaletteEditorWindow(selected.Value, selected.Index);

            paletteEditorWindow.Owner = this;
            bool result = (bool)paletteEditorWindow.ShowDialog();

            if (result && paletteEditorWindow.DialogDataResult != null)
            {
                int selectedIndex = PaletteListBox.SelectedIndex;
                selected.Value = paletteEditorWindow.DialogDataResult;
                selectedTileset.Value.SelectedPalette = selectedTileset.Value.Palettes[selectedIndex];
            }
        }
        private void ChangeGraphicButton_Click(object sender, RoutedEventArgs e)
        {
            DisplayTuple <string, TilesetModel> selected = (DisplayTuple <string, TilesetModel>)TilesetListBox.SelectedItem;

            if (selected == null)
            {
                return;
            }
            loadGraphicDialog.FileName = "";
            System.Windows.Forms.DialogResult result = loadGraphicDialog.ShowDialog();
            if (result == System.Windows.Forms.DialogResult.Abort || result == System.Windows.Forms.DialogResult.Cancel)
            {
                return;
            }
            try
            {
                BitmapImage img = new BitmapImage(new Uri(loadGraphicDialog.FileName, UriKind.Absolute));
                if (img.Format != PixelFormats.Indexed4)
                {
                    throw new Exception("Image has not 4 indexed bit per pixel");
                }
                selected.Value.GraphicPath = loadGraphicDialog.FileName;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message, "Import error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
        private void AddMapContextEntry_Click(object sender, RoutedEventArgs e)
        {
            DisplayTuple <int, IBankModel> selected = (DisplayTuple <int, IBankModel>)MapTreeView.SelectedItem;

            if (selected == null || selected.Value.EntryMode == BankEntryType.Nullpointer)
            {
                return;
            }
            ((BankModel)selected.Value).Maps.Add(new DisplayTuple <int, IMapModel>(((BankModel)selected.Value).Maps.Count, new MapHeaderModel(new LazyReference <MapHeader>(new MapHeader()), ((BankModel)selected.Value), App.MainViewModel)));
        }
Exemple #4
0
 public TilesetModel(LazyReference <Tileset> tileset, BlockEditorModel parentEditorModel) : base(tileset)
 {
     _graphicPath = tileset.Data.Graphic;
     _compressed  = tileset.Data.Compressed;
     _secondary   = tileset.Data.Secondary;
     _field2      = tileset.Data.Field2;
     _field3      = tileset.Data.Field3;
     _palettes    = new ObservableCollectionEx <DisplayTuple <int, PaletteModel> >(tileset.Data.Palettes.Select((p, pi) =>
                                                                                                                new DisplayTuple <int, PaletteModel>(pi, new PaletteModel(p))));
     _palettes.ItemPropertyChanged += Palettes_ItemPropertyChanged;
     _blocks               = new ObservableCollectionEx <TilesetEntryModel>(tileset.Data.Blocks.Select(p => new TilesetEntryModel(p, this)));
     _selectedPalette      = _palettes[0];
     _blockEditorViewModel = parentEditorModel;
     _phHandler            = new PropertyDependencyHandler(this);
 }
        private void RemoveTilesetContextEntry_Click(object sender, RoutedEventArgs e)
        {
            DisplayTuple <string, TilesetModel> selected = (DisplayTuple <string, TilesetModel>)TilesetListBox.SelectedItem;

            if (selected == null)
            {
                return;
            }
            MessageBoxResult result = MessageBox.Show("Delete this tileset?", "Delete tileset", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);

            if (result == MessageBoxResult.Cancel)
            {
                return;
            }
            dataModel.Tilesets.Remove(selected);
        }
        private void ReplaceEmptyMapContextEntry_Click(object sender, RoutedEventArgs e)
        {
            DisplayTuple <int, IBankModel> selected = (DisplayTuple <int, IBankModel>)MapTreeView.SelectedItem;

            if (selected == null || selected.Value.EntryMode == BankEntryType.Bank)
            {
                return;
            }
            MessageBoxResult result = MessageBoxResult.Cancel;

            result = MessageBox.Show("Replace this bank placeholder with a real one?", "Replace map", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
            if (result == MessageBoxResult.OK)
            {
                selected.Value = new BankModel(new List <LazyReference <MapHeader> >(), App.MainViewModel);
            }
        }
        private void ReplaceMapContextEntry_Click(object sender, RoutedEventArgs e)
        {
            DisplayTuple <int, IMapModel> selected = (DisplayTuple <int, IMapModel>)MapTreeView.SelectedItem;

            if (selected == null)
            {
                return;
            }
            MessageBoxResult result = MessageBoxResult.Cancel;

            result = MessageBox.Show("Replace this map with a new one?", "Replace map", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
            if (result == MessageBoxResult.OK)
            {
                selected.Value = new MapHeaderModel(new LazyReference <MapHeader>(new MapHeader()), selected.Value.Bank, App.MainViewModel);
            }
        }
        private void AddTilesetButton_Click(object sender, RoutedEventArgs e)
        {
            string namePrefix  = "NONAME";
            int    nameCounter = 0;

            while (true)
            {
                if (!dataModel.Tilesets.Any(p => p.Index == namePrefix + nameCounter))
                {
                    break;
                }
                nameCounter++;
            }
            DisplayTuple <string, TilesetModel> newElement = new DisplayTuple <string, TilesetModel>(namePrefix + nameCounter, new TilesetModel(new LazyReference <Tileset>(new Tileset()), dataModel));

            dataModel.Tilesets.Add(newElement);
            TilesetListBox.SelectedItem = newElement;
        }
        private void MoveBankDownContextEntry_Click(object sender, RoutedEventArgs e)
        {
            DisplayTuple <int, IBankModel> selected = (DisplayTuple <int, IBankModel>)MapTreeView.SelectedItem;

            if (selected == null)
            {
                return;
            }
            int index = App.MainViewModel.Banks.IndexOf(selected);

            if (index < App.MainViewModel.Banks.Count - 1)
            {
                DisplayTuple <int, IBankModel> target = App.MainViewModel.Banks[index + 1];
                target.Index   -= 1;
                selected.Index += 1;
                App.MainViewModel.Banks[index + 1] = App.MainViewModel.Banks[index];
                App.MainViewModel.Banks[index]     = target;
            }
        }
Exemple #10
0
        private void MoveMapDownContextEntry_Click(object sender, RoutedEventArgs e)
        {
            DisplayTuple <int, IMapModel> selected = (DisplayTuple <int, IMapModel>)MapTreeView.SelectedItem;

            if (selected == null)
            {
                return;
            }
            BankModel currentBank = selected.Value.Bank;
            int       index       = currentBank.Maps.IndexOf(selected);

            if (index < selected.Value.Bank.Maps.Count - 1)
            {
                DisplayTuple <int, IMapModel> target = selected.Value.Bank.Maps[index + 1];
                target.Index   -= 1;
                selected.Index += 1;
                currentBank.Maps[index + 1] = selected.Value.Bank.Maps[index];
                currentBank.Maps[index]     = target;
            }
        }
Exemple #11
0
        private void RemoveMapContextEntry_Click(object sender, RoutedEventArgs e)
        {
            DisplayTuple <int, IMapModel> selected = (DisplayTuple <int, IMapModel>)MapTreeView.SelectedItem;

            if (selected == null)
            {
                return;
            }
            MessageBoxResult result = MessageBoxResult.Cancel;

            if (selected.Value.EntryMode == MapEntryType.Map)
            {
                result = MessageBox.Show
                             ("You are about to delete a map. Do you want to replace it with a placeholder?", "Delete map", MessageBoxButton.YesNoCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
            }
            else
            {
                result = MessageBox.Show
                             ("You are about to delete a map placeholder. Update indices?", "Delete map placeholder", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
            }
            if (result != MessageBoxResult.Cancel)
            {
                if (result == MessageBoxResult.Yes)
                {
                    selected.Value = new NullpointerMapModel(selected.Value.Bank);
                }
                else if (result == MessageBoxResult.No || result == MessageBoxResult.OK)
                {
                    var bank = selected.Value.Bank;
                    bank.Maps.Remove(selected);
                    for (int i = 0; i < bank.Maps.Count; i++)
                    {
                        bank.Maps[i].Index = i;
                    }
                }
            }
        }