/// <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; }
/// <summary> /// /// </summary> /// <param name="mainWindow"></param> /// <param name="pcgFileName"></param> /// <param name="pcgMemory"></param> public PcgWindow(MainWindow mainWindow, string pcgFileName, IPcgMemory pcgMemory) { InitializeComponent(); _mainWindow = mainWindow; ViewModel = new PcgViewModel(mainWindow.ViewModel.PcgClipBoard) { ShowDialog = (type, items) => { Window window = null; switch (type) { // Programs case ViewModels.PcgViewModel.DialogType.EditSingleProgram: window = new WindowEditSingleProgram(items.First() as IProgram) { Owner = _mainWindow }; break; case ViewModels.PcgViewModel.DialogType.EditMultiplePrograms: //window = new WindowEditMultiplePrograms(items as List<IProgram>) { Owner = _mainWindow }; break; case ViewModels.PcgViewModel.DialogType.EditSingleProgramBank: //window = new WindowEditSingleProgramBank(items.First() as IProgramBank) { Owner = _mainWindow }; break; case ViewModels.PcgViewModel.DialogType.EditMultipleProgramBanks: //window = new WindowEditMultipleProgramBanks(items as List<IProgramBank>) { Owner = _mainWindow }; break; // Combis case ViewModels.PcgViewModel.DialogType.EditSingleCombi: window = new WindowEditSingleCombi(items.First() as ICombi) { Owner = _mainWindow }; break; case ViewModels.PcgViewModel.DialogType.EditMultipleCombis: //window = new WindowEditMultipleCombis(items as List<ICombi>) { Owner = _mainWindow }; break; case ViewModels.PcgViewModel.DialogType.EditSingleCombiBank: //window = new WindowEditSingleCombiBank(items.First() as ICombiBank) { Owner = _mainWindow }; break; case ViewModels.PcgViewModel.DialogType.EditMultipleCombiBanks: //window = new WindowEditMultipleCombiBanks(items as List<ICombiBank>) { Owner = _mainWindow }; break; // Set list slots case ViewModels.PcgViewModel.DialogType.EditSingleSetListSlot: window = new WindowEditSingleSetListSlot(items.First() as ISetListSlot) { Owner = _mainWindow }; break; case ViewModels.PcgViewModel.DialogType.EditMultipleSetListSlots: //window = new WindowEditMultipleSetListSlot(items as List<ISetListSlot>) //{ // Owner = _mainWindow //}; break; case ViewModels.PcgViewModel.DialogType.EditSingleSetList: window = new WindowEditSingleSetList(items.First() as ISetList) { Owner = _mainWindow }; break; case ViewModels.PcgViewModel.DialogType.EditMultipleSetLists: //window = new WindowEditMultipleSetLists(items as List<ISetLists>) { Owner = _mainWindow }; break; default: throw new ApplicationException("Illegal window type"); } window?.ShowDialog(); }, ShowPasteWindow = () => { var window = new SettingsWindow { Owner = _mainWindow }; window.ShowDialog(); }, ShowMessageBox = (text, title, messageBoxButton, messageBoxImage, messageBoxResult) => WindowUtils.ShowMessageBox(_mainWindow, text, title, messageBoxButton, messageBoxImage, messageBoxResult), SetCursor = WindowUtils.SetCursor, ShowListGenerator = () => { var window = new ListGeneratorWindow((PcgMemory)ViewModel.SelectedMemory) { Owner = _mainWindow }; try { window.ShowDialog(); } catch (InvalidOperationException) { // Do nothing } }, ShowProgramReferencesChanger = () => { var window = new ProgramReferenceChangerWindow((PcgMemory)ViewModel.SelectedMemory) { Owner = _mainWindow }; try { window.ShowDialog(); } catch (InvalidOperationException) { // Do nothing } }, ShowTimbresWindow = (combi, width, height) => { // Check if already exists. If so, show the already opened window. foreach (var child in from child in _mainWindow.Container.Children where (child.Content is CombiWindow) let combiWindowIteration = child.Content as CombiWindow where combiWindowIteration.CombiViewModel.Combi == combi select child) { child.Focus(); return; } // Create combi window if not already present. var mdiChild = new MdiChild { Title = GenerateCombiWindowTitle(combi), Content = new CombiWindow(PcgViewModel, combi), MinimizeBox = false, MaximizeBox = false, Width = width, Height = height, Margin = new Thickness(0, 0, 0, 0) }; ((CombiWindow)(mdiChild.Content)).MdiChild = mdiChild; _mainWindow.Container.Children.Add(mdiChild); mdiChild.GotFocus += _mainWindow.MdiGotFocus; mdiChild.Closing += _mainWindow.MdiClosing; }, EditParameterWindow = patches => { var window = new WindowEditParameter(patches); window.ShowDialog(); }, UpdateTimbresWindows = () => { // Update every timbre window. foreach (var child in from child in _mainWindow.Container.Children where (child.Content is CombiWindow) select child) { var viewModel = ((CombiWindow)(child.Content)).CombiViewModel; viewModel.UpdateUiContent(); child.Title = GenerateCombiWindowTitle(viewModel.Combi); } /* * // If it is a master file being changed, also update all other windows. * var masterFile = MasterFiles.Instances.FindMasterPcg(PcgMemory.ModelType); * if (masterFile != null) * { * * _mainWindow.ViewModel.UpdatePcgWindowsOfModelType(PcgMemory.ModelType); * } */ }, MoveSelectedPatchesUp = MoveSelectedPatchesUp, MoveSelectedPatchesDown = MoveSelectedPatchesDown, GetSelectedPatchListViewIndex = () => listViewPatches.SelectedIndex, SetPcgFileAsMasterFile = SetPcgFileAsMasterFile, CloseWindow = CloseWindow }; DataContext = ViewModel; ViewModel.PropertyChanged += OnViewPropertyChanged; listViewBanks.ItemsSource = PcgViewModel.Banks; listViewPatches.ItemsSource = PcgViewModel.Patches; _pcgMemory = pcgMemory; _pcgMemory.FileName = pcgFileName; if (_pcgMemory.CombiBanks == null) { ButtonTimbres.Visibility = Visibility.Collapsed; } if (_pcgMemory.SetLists == null) { ButtonAssign.Visibility = Visibility.Collapsed; } //ToolTipService.ShowOnDisabled = "True" // ToolTipService.IsEnabled = "{Binding Path=ToolTipEnabled, Converter={StaticResource InverseBooleanConverter}}" // ToolTipService.ToolTip = "{Binding Path=ToolTip, Mode=OneTime}" }