using Microsoft.Win32; using QuikDawEditor.EditingClasses; using QuikDawEditor.MiscClasses; using QuikDawEditor.Properties; using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Windows; using static QuikDawEditor.EDITING.MiscMethods; using static QuikDawEditor.EDITING.StaticProperties; namespace QuikDawEditor; public partial class EditorWindow : Window, INotifyPropertyChanged { private SetupInfoWindow setupInfoWin = new SetupInfoWindow(); private MixdownsWindow mixdownsWin; private void MixdownsMenuItem_Click(object sender, RoutedEventArgs e) { mixdownsWin = new MixdownsWindow() { Owner = this, ShowInTaskbar = false, Topmost = true, mainEditor = MainEditor }; mixdownsWin.ShowDialog(); } private void OpenProjDirMenuItem_Click(object sender, RoutedEventArgs e) { Process.Start("explorer.exe", "\"" + EditingProjectPath + "\""); } private void RenameProject_Click(object sender, RoutedEventArgs e) { RenameProject(); } private void RenameProject() { if (editingProject.NeedsSaving) { MessageBox.Show("Project has changes that have not been saved.\nSave changes before renaming project", "Unsaved changes", MessageBoxButton.OK, MessageBoxImage.Warning); return; } InputBox inputBox = new InputBox("Rename project", editingProject.ProjectName); inputBox.ShowDialog(); if (inputBox.Result == "Ok") { if (MessageBox.Show("Rename project?:\n" + editingProject.ProjectName + "\nto:\n" + inputBox.TextBoxText + "\n\n(Selecting yes will close and reopen project with new name)", "Rename project", MessageBoxButton.YesNo) == MessageBoxResult.No) return; string oldName = editingProject.ProjectName; if (!File.Exists(editingProject.ProjectName)) editingProject.Save(); string originalDirectory = Path.GetDirectoryName(editingProject.OpenedOriginalFilePath); editingProject.ProjectName = inputBox.TextBoxText; File.Move(editingProject.OpenedOriginalFilePath, originalDirectory + "\\" + editingProject.ProjectName + ".qdd"); if (CloseProject(true)) { string newDirectory = Path.GetDirectoryName(originalDirectory) + "\\" + editingProject.ProjectName; Directory.Move(originalDirectory, newDirectory); string newProjectPath = newDirectory + "\\" + editingProject.ProjectName + ".qdd"; LoadProject(newProjectPath); } } } private void ManageVstsMenuItem_Click(object sender, RoutedEventArgs e) { ManageVstsWindow manageVstsWin = new ManageVstsWindow(); manageVstsWin.ShowDialog(); } private void CloseQuikDawMenuItem_Click(object sender, RoutedEventArgs e) { this.Close(); //Application.Current.Shutdown(); } private void LoadProjectMenuItem_Click(object sender, RoutedEventArgs e) { if (editingProject != null) { if (MessageBox.Show("Project is open. Close and load different project?", "Load project", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No, MessageBoxOptions.DefaultDesktopOnly) == MessageBoxResult.No) return; } OpenFileDialog ofd = new OpenFileDialog() { InitialDirectory = ProjectsDirectory, Filter = "QuikDaw files | *.qdd" }; if ((bool)ofd.ShowDialog() == false) return; if (CloseProject()) LoadProject(ofd.FileName); } private void NewProjectMenuItem_Click(object sender, RoutedEventArgs e) { if (editingProject != null) { if (MessageBox.Show("A project is already open. Close and start new project?", "Open new project", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No, MessageBoxOptions.DefaultDesktopOnly) == MessageBoxResult.No) return; } InputBox inputbox = new InputBox("Create new project?", "New project name") { Owner = this, Topmost = true }; inputbox.ShowDialog(); if (inputbox.Result == "Ok") { string newProjectName = inputbox.TextBoxText == "" ? "New project" : inputbox.TextBoxText; if (Directory.Exists(ProjectsDirectory + "\\" + newProjectName)) { MessageBox.Show("Project name already exists. Please select a different name", "Project exists", MessageBoxButton.OK, MessageBoxImage.Warning, MessageBoxResult.OK, MessageBoxOptions.DefaultDesktopOnly); return; } if (CloseProject()) { editingProject = new Project(); CreateNewProject(newProjectName); } } } private void CreateNewProject(string newProjectName) { editingProject = new Project(); editingProject.MasterTrack = new MasterTrack(); Track newTrack = new Track(TrackType.Audio) { TrackName = "New track" }; editingProject.Tracks.Add(newTrack); editingProject.ProjectName = newProjectName; editingProject.StartingBookmarkMs = 0; editingProject.Markers = new ObservableCollection(); editingProject.OpenedOriginalFilePath = ProjectsDirectory + "\\" + newProjectName + "\\" + newProjectName + ".qdd"; LoadProject(editingProject); } private void QuikDawSettingsMenuItem_Click(object sender, RoutedEventArgs e) { setupInfoWin.ShowDialog(); EnsureGlobalDirectories(); if (setupInfoWin.AudioWasReset) { MessageBox.Show("Audio was reset: QuikDaw will now close. Please reopen to use new audio."); Application.Current.Shutdown(); //if (projPlayer != null) //{ // if (projPlayer.ResetAudio()) // projPlayer.StartAudio(); //} } } private void CloneProjectMenuItem_Click(object sender, RoutedEventArgs e) { //MessageBox.Show(editingProject.OpenedOriginalFilePatx); if (!File.Exists(editingProject.OpenedOriginalFilePath)) { MessageBox.Show("Cannot clone project before it is saved."); return; } InputBox inputBox = new InputBox("Clone this project to new name:", editingProject.ProjectName + "_1"); inputBox.ShowDialog(); if (inputBox.Result == "Ok") { if (MessageBox.Show("Clone project:\n" + editingProject.ProjectName + "\nto:\n" + inputBox.TextBoxText, "Clone project", MessageBoxButton.YesNo) == MessageBoxResult.No) return; string oldName = editingProject.ProjectName; string newDirectory = ProjectsDirectory + "\\" + inputBox.TextBoxText; if (Directory.Exists(ProjectsDirectory + "\\" + inputBox.TextBoxText)) { MessageBox.Show("That directory already exists, choose another"); return; } string originalDirectory = Path.GetDirectoryName(editingProject.OpenedOriginalFilePath); try { CopyAll(new DirectoryInfo(originalDirectory), new DirectoryInfo(newDirectory)); }   catch (Exception ex) { MessageBox.Show("Error cloning directory"); } string newPath = newDirectory + "\\" + inputBox.TextBoxText + ".qdd"; File.Move(newDirectory + "\\" + editingProject.ProjectName + ".qdd", newPath); MessageBox.Show("Project cloned successfully to:\n" + newPath); } } public static void CopyAll(DirectoryInfo source, DirectoryInfo target) { Directory.CreateDirectory(target.FullName); foreach (FileInfo fi in source.GetFiles()) { fi.CopyTo(Path.Combine(target.FullName, fi.Name), true); } foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) { DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name); CopyAll(diSourceSubDir, nextTargetSubDir); } } private void SaveProjectMenuItem_Click(object sender, RoutedEventArgs e) { editingProject.Save(); } private void ExitQuikDawBut_Click(object sender, RoutedEventArgs e) { this.Close(); } private void PreferencesMenuItem_Click(object sender, RoutedEventArgs e) { PreferencesWindow prefWin = new PreferencesWindow(this) { DataContext = Settings.Default }; prefWin.ShowDialog(); } }