public CodeForm(string codePath, MainWindow mainWindow, EditorManager editorManager) { this.mainWindow = mainWindow; this.editorManager = editorManager; FileStream fs = new FileStream(codePath, FileMode.Open); StreamReader sr = new StreamReader(fs, new UTF8Encoding(false)); codeContent = sr.ReadToEnd(); sr.Close(); fs.Close(); int pe = ParsingCode(codePath); if (pe == -1) { //OperationInterface.SetStatusText(LocalizedLangExtension.GetString("CodeFormatSuccessful")); } if (pe > -1) { OperationInterface.SetStatusText(string.Format("{0}: {1} {2}, {3}", LocalizedLangExtension.GetString("Error"), pe, LocalizedLangExtension.GetString("Line"), LocalizedLangExtension.GetString("MissingBraces")), OperationInterface.StatusText.Warning); } else if (pe == -2) { OperationInterface.SetStatusText(string.Format("{0}: {1}", LocalizedLangExtension.GetString("Error"), LocalizedLangExtension.GetString("MissingBraces")), OperationInterface.StatusText.Warning); } }
private void ButtonCreate_Click(TextBox textBoxName, TextBox textBoxVersion, TextBox textBoxDirectory, MetroWindow win) { if (string.IsNullOrWhiteSpace(textBoxName.Text)) { MessageBox.Show(LocalizedLangExtension.GetString("PleaseEnterName")); return; } if (string.IsNullOrWhiteSpace(textBoxVersion.Text)) { MessageBox.Show(LocalizedLangExtension.GetString("PleaseEnterVersion")); return; } if (string.IsNullOrWhiteSpace(textBoxDirectory.Text.Replace("mod/", ""))) { MessageBox.Show(LocalizedLangExtension.GetString("PleaseEnterDirectory")); return; } if (newTags.Count == 0) { MessageBox.Show(LocalizedLangExtension.GetString("PleaseSelectTag")); return; } string hoi4 = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\" + "Paradox Interactive" + "\\" + "Hearts of Iron IV"; string hoi4ModFile = hoi4 + "\\" + textBoxDirectory.Text + ".mod"; string hoi4ModFolder = hoi4 + "\\" + textBoxDirectory.Text; //整合模组配置字符串 string strDec = ""; string strMod = ""; strMod += string.Format("name=\"{0}\"\n", textBoxName.Text); strMod += string.Format("version=\"{0}\"\n", textBoxVersion.Text); strMod += "tags={\n"; foreach (var item in newTags) { strMod += string.Format("\t\"{0}\"\n", item); } strMod += "}\n"; strDec = strMod; strMod += string.Format("path=\"{0}\"\n", hoi4ModFolder.Replace("\\", "/")); FileStream fs = new FileStream(hoi4ModFile, FileMode.Create); StreamWriter sw = new StreamWriter(fs, new UTF8Encoding(false)); sw.Write(strMod); sw.Close(); fs.Close(); Directory.CreateDirectory(hoi4ModFolder); FileStream fs1 = new FileStream(hoi4ModFolder + "\\" + "descriptor.mod", FileMode.Create); StreamWriter sw1 = new StreamWriter(fs1, new UTF8Encoding(false)); sw1.Write(strDec); sw1.Close(); fs1.Close(); win.Close(); }
public void LoadDataFromFile(string path) { if (File.Exists(path)) { try { if (Util.IsExtensionName(Path.GetExtension(path))) { FileStream fs = new FileStream(path, FileMode.Open); StreamReader sr = new StreamReader(fs, new UTF8Encoding(false)); mainWindow.Title = LocalizedLangExtension.GetString("MookEditor") + " - " + Path.GetFileName(path); currentPath = path; codeEditor.Text = sr.ReadToEnd(); sr.Close(); fs.Close(); } else { return; } } catch (Exception) { MessageBox.Show("该文件不可读写,请取消只读"); } } }
private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if (MessageBox.Show(LocalizedLangExtension.GetString("CloseProgram"), LocalizedLangExtension.GetString("Tip"), MessageBoxButton.OKCancel) == MessageBoxResult.Cancel) { e.Cancel = true; } else { e.Cancel = false; } }
//失去焦点 private void TextBox_LostFocus(object sender, RoutedEventArgs e) { TextBox textBox = sender as TextBox; Image image = ((sender as TextBox).Parent as StackPanel).Children[0] as Image; TextBlock textBlock = ((sender as TextBox).Parent as StackPanel).Children[1] as TextBlock; TreeViewItem tempTreeViewItem = ((sender as TextBox).Parent as StackPanel).Parent as TreeViewItem; TVItems tVItems = listItems.Find(delegate(TVItems tv) { return(tv.ViewItem.Equals(tempTreeViewItem)); }); //文件或文件夹是否存在 bool isFF = !string.IsNullOrWhiteSpace(Path.GetFileName(tVItems.path)); //新建 if (!isFF) { TVItems tVItems1 = listItems.Find(delegate(TVItems tv) { return(tv.path.Equals(Path.GetDirectoryName(tVItems.path) + "\\" + textBox.Text)); }); //当前节点是空白,则删除 || 重复文件名 || 文件名无效 if (string.IsNullOrWhiteSpace(textBox.Text) || tVItems1 != null || textBox.Text.IndexOfAny(Path.GetInvalidFileNameChars()) != -1) { (tempTreeViewItem.Parent as TreeViewItem).Items.Remove(tempTreeViewItem); listItems.Remove(tVItems); } else { if (!tVItems.isFolder) { string str = textBox.Text.Replace(Util.extension, ""); textBox.Text = str + ".me"; } tVItems.path = Path.GetDirectoryName(tVItems.path) + "\\" + textBox.Text; textBox.Text = Path.GetFileName(tVItems.path); if (tVItems.isFolder) { Directory.CreateDirectory(Path.GetDirectoryName(tVItems.path) + "\\" + textBox.Text); textBlock.Text = LocalizedLangExtension.GetString(Path.GetFileNameWithoutExtension(tVItems.path)); } else { FileStream fs = new FileStream(Path.GetDirectoryName(tVItems.path) + "\\" + textBox.Text, FileMode.Create); StreamWriter sw = new StreamWriter(fs, new UTF8Encoding(false)); var serializer = new SerializerBuilder().Build(); var yaml = serializer.Serialize(new List <ModClass>()); sw.Write(yaml); sw.Close(); fs.Close(); textBlock.Text = Path.GetFileName(tVItems.path); //后缀 if (Path.GetExtension(tVItems.path) == ".me") { image.Source = new BitmapImage(new Uri("pack://application:,,,/" + "Resources/Images/CodeFile.png")); } } //选中更改 tempTreeViewItem.IsSelected = false; tempTreeViewItem.IsSelected = true; } } else { //重命名 if (textBox.Text != Path.GetFileName(tVItems.path) && !(textBox.Text.IndexOfAny(Path.GetInvalidFileNameChars()) != -1) && !string.IsNullOrWhiteSpace(textBox.Text)) { try { //上级目录 string pd = Path.GetDirectoryName(tVItems.path) + "\\"; //要修改的路径 string md = tVItems.path; // Computer computer = new Computer(); if (tVItems.isFolder) { computer.FileSystem.RenameDirectory(tVItems.path, textBox.Text); } else { string str = textBox.Text.Replace(Util.extension, ""); textBox.Text = str + ".me"; computer.FileSystem.RenameFile(tVItems.path, textBox.Text); } //遍历相同的路径并更改 foreach (TVItems itm in listItems) { itm.path = itm.path.Replace(md, pd + textBox.Text); } tVItems.path = pd + textBox.Text; if (tVItems.isFolder) { textBlock.Text = LocalizedLangExtension.GetString(Path.GetFileNameWithoutExtension(tVItems.path)); } else { textBlock.Text = Path.GetFileName(tVItems.path); //后缀 if (Path.GetExtension(tVItems.path) == ".me") { image.Source = new BitmapImage(new Uri("pack://application:,,,/" + "Resources/Images/CodeFile.png")); } } textBox.Text = Path.GetFileName(tVItems.path); string tmd = md.Replace("\\", "\\\\"); //是否匹配已打开的文件,匹配则重载 if (Regex.IsMatch(editorManager.currentPath, @tmd)) { //选中更改 tempTreeViewItem.IsSelected = false; tempTreeViewItem.IsSelected = true; } } catch (Exception) { textBox.Text = Path.GetFileName(tVItems.path); } } else { textBox.Text = Path.GetFileName(tVItems.path); } } textBox.Visibility = Visibility.Collapsed; textBlock.Visibility = Visibility.Visible; }
//新建模组 private void menuNewMod_Click(object sender, RoutedEventArgs e) { MetroWindow win = new MetroWindow(); win.Title = LocalizedLangExtension.GetString("NewModule"); win.Width = 500; win.Height = 520; win.ShowMaxRestoreButton = false; win.ShowMinButton = false; win.WindowStyle = WindowStyle.None; win.WindowTitleBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#3C3C3C")); win.WindowStartupLocation = WindowStartupLocation.CenterScreen; StackPanel stackPanelV = new StackPanel(); StackPanel stackPanelNameAndVersion = new StackPanel(); stackPanelNameAndVersion.Orientation = Orientation.Horizontal; StackPanel stackPanelName = new StackPanel(); TextBlock textBlockName = new TextBlock(); textBlockName.Text = LocalizedLangExtension.GetString("Name"); textBlockName.Margin = new Thickness(32, 24, 0, 0); TextBox textBoxName = new TextBox(); textBoxName.Width = 200; textBoxName.Margin = new Thickness(32, 8, 16, 0); stackPanelName.Children.Add(textBlockName); stackPanelName.Children.Add(textBoxName); StackPanel stackPanelVersion = new StackPanel(); TextBlock textBlockVersion = new TextBlock(); textBlockVersion.Text = LocalizedLangExtension.GetString("Version"); textBlockVersion.Margin = new Thickness(24, 24, 0, 0); TextBox textBoxVersion = new TextBox(); textBoxVersion.Width = 200; textBoxVersion.Margin = new Thickness(24, 8, 16, 0); stackPanelVersion.Children.Add(textBlockVersion); stackPanelVersion.Children.Add(textBoxVersion); stackPanelNameAndVersion.Children.Add(stackPanelName); stackPanelNameAndVersion.Children.Add(stackPanelVersion); StackPanel stackPanelDirectory = new StackPanel(); TextBlock textBlockDirectory = new TextBlock(); textBlockDirectory.Text = LocalizedLangExtension.GetString("Directory"); textBlockDirectory.Margin = new Thickness(32, 24, 0, 0); TextBox textBoxDirectory = new TextBox(); textBoxDirectory.Text = "mod/"; textBoxDirectory.Margin = new Thickness(32, 8, 24, 0); stackPanelDirectory.Children.Add(textBlockDirectory); stackPanelDirectory.Children.Add(textBoxDirectory); StackPanel stackPanelTag = new StackPanel(); TextBlock textBlockTag = new TextBlock(); textBlockTag.Text = LocalizedLangExtension.GetString("Tag"); textBlockTag.Margin = new Thickness(32, 24, 0, 0); StackPanel stackPanelTagLeft = new StackPanel(); stackPanelTagLeft.Children.Add(SetGridCheckBox("Alternative History")); stackPanelTagLeft.Children.Add(SetGridCheckBox("Events")); stackPanelTagLeft.Children.Add(SetGridCheckBox("Gameplay")); stackPanelTagLeft.Children.Add(SetGridCheckBox("Historical")); stackPanelTagLeft.Children.Add(SetGridCheckBox("Map")); stackPanelTagLeft.Children.Add(SetGridCheckBox("National Focuses")); stackPanelTagLeft.Children.Add(SetGridCheckBox("Technologies")); stackPanelTagLeft.Children.Add(SetGridCheckBox("Utilities")); stackPanelTagLeft.Margin = new Thickness(32, 8, 24, 0); stackPanelTagLeft.HorizontalAlignment = HorizontalAlignment.Left; StackPanel stackPanelTagRight = new StackPanel(); stackPanelTagRight.Children.Add(SetGridCheckBox("Balance")); stackPanelTagRight.Children.Add(SetGridCheckBox("Fixes")); stackPanelTagRight.Children.Add(SetGridCheckBox("Graphics")); stackPanelTagRight.Children.Add(SetGridCheckBox("Ideologies")); stackPanelTagRight.Children.Add(SetGridCheckBox("Military")); stackPanelTagRight.Children.Add(SetGridCheckBox("Sound")); stackPanelTagRight.Children.Add(SetGridCheckBox("Translation")); stackPanelTagRight.Margin = new Thickness(80, 8, 24, 0); stackPanelTagRight.HorizontalAlignment = HorizontalAlignment.Right; StackPanel stackPanelTagChild = new StackPanel(); stackPanelTagChild.Orientation = Orientation.Horizontal; stackPanelTagChild.Children.Add(stackPanelTagLeft); stackPanelTagChild.Children.Add(stackPanelTagRight); stackPanelTag.Children.Add(textBlockTag); stackPanelTag.Children.Add(stackPanelTagChild); StackPanel stackPanelCreate = new StackPanel(); stackPanelCreate.Orientation = Orientation.Horizontal; Button buttonCreate = new Button(); buttonCreate.SetValue(Button.StyleProperty, Application.Current.Resources["AccentedSquareButtonStyle"]); buttonCreate.Content = string.Format(" {0} ", LocalizedLangExtension.GetString("CreateModule")); buttonCreate.Margin = new Thickness(40, 24, 0, 0); buttonCreate.Click += (s, ee) => ButtonCreate_Click(textBoxName, textBoxVersion, textBoxDirectory, win); Button buttonCancel = new Button(); buttonCancel.SetValue(Button.StyleProperty, Application.Current.Resources["SquareButtonStyle"]); buttonCancel.Content = string.Format(" {0} ", LocalizedLangExtension.GetString("Cancel")); buttonCancel.Margin = new Thickness(268, 24, 40, 0); buttonCancel.Click += (s, ee) => ButtonCancel_Click(win); stackPanelCreate.Children.Add(buttonCreate); stackPanelCreate.Children.Add(buttonCancel); stackPanelV.Children.Add(stackPanelNameAndVersion); stackPanelV.Children.Add(stackPanelDirectory); stackPanelV.Children.Add(stackPanelTag); stackPanelV.Children.Add(stackPanelCreate); win.Content = stackPanelV; win.ShowDialog(); }
//新建项目 private void menuNewProject_Click(object sender, RoutedEventArgs e) { MetroWindow win = new MetroWindow(); win.Title = LocalizedLangExtension.GetString("NewProject"); win.Width = 520; win.Height = 400; win.ShowMaxRestoreButton = false; win.ShowMinButton = false; win.WindowStyle = WindowStyle.None; win.WindowTitleBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#3C3C3C")); win.WindowStartupLocation = WindowStartupLocation.CenterScreen; StackPanel stackPanelV = new StackPanel(); StackPanel stackPanelButton1 = new StackPanel(); stackPanelButton1.Orientation = Orientation.Horizontal; Button buttonEvents = new Button(); buttonEvents.Width = 108; buttonEvents.Height = 32; buttonEvents.FontSize = 14; buttonEvents.SetValue(Button.StyleProperty, Application.Current.Resources["SquareButtonStyle"]); buttonEvents.Content = LocalizedLangExtension.GetString("events"); buttonEvents.Margin = new Thickness(32, 24, 0, 0); Button buttonNationalFocus = new Button(); buttonNationalFocus.Width = 108; buttonNationalFocus.Height = 32; buttonNationalFocus.FontSize = 14; buttonNationalFocus.SetValue(Button.StyleProperty, Application.Current.Resources["SquareButtonStyle"]); buttonNationalFocus.Content = LocalizedLangExtension.GetString("national_focus"); buttonNationalFocus.Margin = new Thickness(8, 24, 0, 0); Button buttonIdeas = new Button(); buttonIdeas.Width = 108; buttonIdeas.Height = 32; buttonIdeas.FontSize = 14; buttonIdeas.SetValue(Button.StyleProperty, Application.Current.Resources["SquareButtonStyle"]); buttonIdeas.Content = LocalizedLangExtension.GetString("ideas"); buttonIdeas.Margin = new Thickness(8, 24, 0, 0); Button buttonCountries = new Button(); buttonCountries.Width = 108; buttonCountries.Height = 32; buttonCountries.FontSize = 14; buttonCountries.SetValue(Button.StyleProperty, Application.Current.Resources["SquareButtonStyle"]); buttonCountries.Content = LocalizedLangExtension.GetString("countries"); buttonCountries.Margin = new Thickness(8, 24, 0, 0); stackPanelButton1.Children.Add(buttonEvents); stackPanelButton1.Children.Add(buttonNationalFocus); stackPanelButton1.Children.Add(buttonIdeas); stackPanelButton1.Children.Add(buttonCountries); StackPanel stackPanelButton2 = new StackPanel(); stackPanelButton2.Orientation = Orientation.Horizontal; Button buttonDecisions = new Button(); buttonDecisions.Width = 108; buttonDecisions.Height = 32; buttonDecisions.FontSize = 14; buttonDecisions.SetValue(Button.StyleProperty, Application.Current.Resources["SquareButtonStyle"]); buttonDecisions.Content = LocalizedLangExtension.GetString("decisions"); buttonDecisions.Margin = new Thickness(32, 24, 0, 0); stackPanelButton2.Children.Add(buttonDecisions); stackPanelV.Children.Add(stackPanelButton1); stackPanelV.Children.Add(stackPanelButton2); win.Content = stackPanelV; win.ShowDialog(); }
//文件树上下文菜单 void FileTreeContextMenu(TreeViewItem treeViewItem, TVItems tVItems, bool isFolder = true) { ContextMenu contextMenu = new ContextMenu(); CompositeCollection contextMenuBase = new CompositeCollection(); CompositeCollection compositeCollection = new CompositeCollection(); CollectionContainer collectionContainer = new CollectionContainer(); MenuItem cmCut = new MenuItem(); cmCut.Header = LocalizedLangExtension.GetString("Cut"); cmCut.Click += (misender, mie) => CMCut_Click(treeViewItem, tVItems); MenuItem cmCopy = new MenuItem(); cmCopy.Header = LocalizedLangExtension.GetString("Copy"); cmCopy.Click += (misender, mie) => CMCopy_Click(treeViewItem, tVItems); MenuItem cmPaste = new MenuItem(); cmPaste.Header = LocalizedLangExtension.GetString("Paste"); //cmPaste.Click += (misender, mie) => CMRename_Click(treeViewItem, tVItems); MenuItem cmRename = new MenuItem(); cmRename.Header = LocalizedLangExtension.GetString("Rename"); cmRename.Click += (misender, mie) => CMRename_Click(treeViewItem, tVItems); MenuItem cmDelete = new MenuItem(); cmDelete.Header = LocalizedLangExtension.GetString("Delete"); cmDelete.Click += (misender, mie) => CMDelete_Click(treeViewItem, tVItems); MenuItem cmNewFolder = new MenuItem(); cmNewFolder.Header = LocalizedLangExtension.GetString("NewFolder"); cmNewFolder.Click += (misender, mie) => CMNewFolder_Click(treeViewItem, tVItems); MenuItem cmNewFile = new MenuItem(); cmNewFile.Header = LocalizedLangExtension.GetString("NewFile"); cmNewFile.Click += (misender, mie) => CMNewFile_Click(treeViewItem, tVItems); cmCut.IsEnabled = false; cmPaste.IsEnabled = false; cmNewFolder.IsEnabled = false; cmNewFile.IsEnabled = false; if (isFolder) { if (Clipboard.GetDataObject() == null) { cmPaste.IsEnabled = false; } else { //cmPaste.IsEnabled = true; } cmNewFolder.IsEnabled = true; cmNewFile.IsEnabled = true; } contextMenuBase.Add(cmCut); contextMenuBase.Add(cmCopy); contextMenuBase.Add(cmPaste); contextMenuBase.Add(cmDelete); contextMenuBase.Add(new Separator()); contextMenuBase.Add(cmRename); contextMenuBase.Add(new Separator()); contextMenuBase.Add(cmNewFolder); contextMenuBase.Add(cmNewFile); collectionContainer.Collection = contextMenuBase; compositeCollection.Add(collectionContainer); contextMenu.ItemsSource = compositeCollection; contextMenu.IsOpen = true; }
/// <summary> /// 加载文件目录树 /// </summary> /// <param name="path"></param> /// <param name="tvi"></param> //TreeViewItem tvi private void LoadFileDirectory(string path, TreeViewItem parentNode) { DirectoryInfo theFolder = new DirectoryInfo(@path); //遍历文件夹 foreach (DirectoryInfo NextFolder in theFolder.GetDirectories()) { TreeViewItem childNode = SetTreeViewItem("Resources/Images/OpenFolder.png", LocalizedLangExtension.GetString(NextFolder.Name), NextFolder.Name); TVItems itemDir = new TVItems() { ViewItem = childNode, path = path + "\\" + NextFolder.Name, isFolder = true }; listItems.Add(itemDir); parentNode.Items.Add(childNode); LoadFileDirectory(NextFolder.FullName, childNode); } //遍历文件 foreach (FileInfo NextFile in theFolder.GetFiles()) { TreeViewItem childNode; if (NextFile.Extension == Util.extension) { childNode = SetTreeViewItem("Resources/Images/CodeFile.png", NextFile.Name, NextFile.Name); } else { childNode = SetTreeViewItem("Resources/Images/DefaultFile.png", NextFile.Name, NextFile.Name); } TVItems itemFile = new TVItems() { ViewItem = childNode, path = path + "\\" + NextFile.Name, isFolder = false }; listItems.Add(itemFile); parentNode.Items.Add(childNode); } }
private void Button_Click1(object sender, RoutedEventArgs e) { LocalizedLangExtension.SetLocalLanguage("zh-CN"); }
/// <summary> /// 只允许修改后重载 /// </summary> /// <param name="str"></param> public void LoadDataString(string str, string path) { mainWindow.Title = LocalizedLangExtension.GetString("MookEditor") + " - " + Path.GetFileName(path); currentPath = path; codeEditor.Text = str; }
public void Clear() { currentPath = ""; codeEditor.ClearAll(); mainWindow.Title = LocalizedLangExtension.GetString("MookEditor"); }