/// <summary>
        ///
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public IPcgMemory FindMasterPcg(IModel model)
        {
            IPcgViewModel viewModel = (from masterFile in this
                                       where (masterFile.Model == model) && (masterFile.FileState == MasterFile.EFileState.Loaded)
                                       select MainViewModel.FindPcgViewModelWithName(masterFile.FileName)).FirstOrDefault();

            if ((viewModel != null) && (viewModel.SelectedPcgMemory != null))
            {
                return(viewModel.SelectedPcgMemory);
            }

            return(null);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="pcgViewModel"></param>
        /// <param name="combi"></param>
        public CombiViewModel(IPcgViewModel pcgViewModel, ICombi combi)
        {
            PcgViewModel = pcgViewModel;

            Combi = combi;

            // Select first if none selected.
            if ((Combi.Timbres.TimbresCollection.Any()) &&
                (Combi.Timbres.TimbresCollection.Count(item => item.IsSelected) == 0))
            {
                Combi.Timbres.TimbresCollection[0].IsSelected = true;
            }

            Combi.PcgRoot.PropertyChanged += OnPcgRootChanged;
            ReassignClearProgram();
        }
示例#3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="pcgViewModel"></param>
        /// <param name="selectedPatches"></param>
        /// <returns>True if at least one patch cleared</returns>
        public bool ClearPatches(IPcgViewModel pcgViewModel, List <IPatch> selectedPatches)
        {
            _pcgViewModel = pcgViewModel;
            var atLeastOnePatchUsedAsReference =
                selectedPatches.OfType <IReferencable>().Any(reference => reference.NumberOfReferences > 0);

            bool clearUnusedPatches;
            bool clearUsedPatches;

            CheckPatchesToClear(atLeastOnePatchUsedAsReference, out clearUnusedPatches, out clearUsedPatches);

            if (!clearUnusedPatches && !clearUsedPatches)
            {
                return(false);
            }

            var atLeastOnePatchCleared = false;

            foreach (var patch in selectedPatches.Where(
                         patch => !(patch is IReferencable) ||                                      // Set list slots
                         ((((IReferencable)patch).NumberOfReferences > 0) && clearUsedPatches) ||   // Used patch
                         ((((IReferencable)patch).NumberOfReferences == 0) && clearUnusedPatches))) // Unused patch
            {
                if (Settings.Default.UI_ClearPatchesFixReferences)
                {
                    IPatch firstDuplicate = null;
                    if ((patch is IProgram) || (patch is ICombi))
                    {
                        firstDuplicate = patch.FirstDuplicate;
                    }

                    if (firstDuplicate != null)
                    {
                        (patch as IReferencable).ChangeReferences(firstDuplicate);
                    }
                }

                patch.Clear();
                atLeastOnePatchCleared = true;
            }

            return(atLeastOnePatchCleared);
        }
示例#4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="pcgViewModel"></param>
        /// <param name="combi"></param>
        public CombiWindow(IPcgViewModel pcgViewModel, ICombi combi)
        {
            InitializeComponent();
            ViewModel = new CombiViewModel(pcgViewModel, combi)
            {
                ShowEditDialog = () =>
                {
                    var window = new WindowEditSingleCombi(CombiViewModel.Combi);
                    var result = window.ShowDialog();
                    return(result.HasValue && result.Value);
                },

                UpdateUiContent = () =>
                {
                    listViewTimbres.Items.Refresh();
                    listViewTimbres.UpdateLayout();
                },

                CloseWindow = CloseWindow
            };

            DataContext = ViewModel;
        }
示例#5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="pcgViewModel"></param>
        public void Execute(IPcgViewModel pcgViewModel)
        {
            DoubleToSingleKeyboardWindow window = new DoubleToSingleKeyboardWindow(pcgViewModel.SelectedPcgMemory, this);

            window.ShowDialog();
        }