2 * Copyright (C) 2013 FooProject
3 * * This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
6 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
7 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
9 You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
13 using System.Windows.Controls;
14 using System.Windows.Documents;
15 using System.Windows.Media;
16 using System.Windows.Threading;
18 using FooEditEngine.WPF;
19 using Microsoft.Win32;
24 /// MainWindow.xaml の相互作用ロジック
26 public partial class MainWindow : Window
28 System.Threading.CancellationTokenSource cancleTokenSrc = new System.Threading.CancellationTokenSource();
31 InitializeComponent();
32 this.fooTextBox.MouseDoubleClick += new System.Windows.Input.MouseButtonEventHandler(fooTextBox_MouseDoubleClick);
33 this.fooTextBox.ShowTab = true;
34 this.fooTextBox.ShowFullSpace = true;
35 this.fooTextBox.ShowLineBreak = true;
36 this.fooTextBox.FoldingStrategy = new CharFoldingMethod('{', '}');
37 this.Enable.IsChecked = true;
38 this.URLMark.IsChecked = true;
40 this.Closed += MainWindow_Closed;
43 void MainWindow_Closed(object sender, System.EventArgs e)
45 this.cancleTokenSrc.Cancel();
46 this.fooTextBox.Dispose();
49 void fooTextBox_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
51 FooMouseButtonEventArgs fe = (FooMouseButtonEventArgs)e;
52 foreach (Marker m in this.fooTextBox.Document.GetMarkers(fe.Index))
54 if (m.hilight == HilightType.Url)
56 MessageBox.Show(this.fooTextBox.Document.ToString(m.start, m.length));
63 private void MenuItem_Click(object sender, RoutedEventArgs e)
65 if (this.fooTextBox.IsEnabled)
66 this.fooTextBox.IsEnabled = false;
68 this.fooTextBox.IsEnabled = true;
69 this.Enable.IsChecked = this.fooTextBox.IsEnabled;
70 this.fooTextBox.Refresh();
73 private void MenuItem_Click_1(object sender, RoutedEventArgs e)
75 if (this.fooTextBox.DrawLineNumber)
76 this.fooTextBox.DrawLineNumber = false;
78 this.fooTextBox.DrawLineNumber = true;
79 this.ShowLineNumber.IsChecked = this.fooTextBox.DrawLineNumber;
80 this.fooTextBox.Refresh();
83 private void MenuItem_Click_2(object sender, RoutedEventArgs e)
85 PrintDialog pd = new PrintDialog();
86 pd.PageRangeSelection = PageRangeSelection.AllPages;
87 pd.UserPageRangeEnabled = true;
88 if (pd.ShowDialog() == false)
90 FooPrintText printtext = new FooPrintText();
91 printtext.Document = this.fooTextBox.Document;
92 printtext.Font = this.fooTextBox.FontFamily;
93 printtext.FontSize = this.fooTextBox.FontSize;
94 printtext.DrawLineNumber = this.fooTextBox.DrawLineNumber;
95 printtext.Header = "header";
96 printtext.Footer = "footter";
97 printtext.LineBreakMethod = this.fooTextBox.LineBreakMethod;
98 printtext.LineBreakCharCount = this.fooTextBox.LineBreakCharCount;
99 printtext.MarkURL = true;
100 printtext.Hilighter = this.fooTextBox.Hilighter;
101 printtext.Foreground = this.fooTextBox.Foreground;
102 printtext.URL = this.fooTextBox.URL;
103 printtext.Comment = this.fooTextBox.Comment;
104 printtext.Keyword1 = this.fooTextBox.Keyword1;
105 printtext.Keyword2 = this.fooTextBox.Keyword2;
106 printtext.Litral = this.fooTextBox.Literal;
107 printtext.FlowDirection = this.fooTextBox.FlowDirection;
108 if (pd.PageRangeSelection == PageRangeSelection.AllPages)
110 printtext.StartPage = -1;
111 printtext.EndPage = -1;
115 printtext.StartPage = pd.PageRange.PageFrom;
116 printtext.EndPage = pd.PageRange.PageTo;
118 printtext.PageRect = new Rect(0,0,pd.PrintableAreaWidth, pd.PrintableAreaHeight);
122 private async void MenuItem_Click_3(object sender, RoutedEventArgs e)
124 OpenFileDialog ofd = new OpenFileDialog();
125 bool result = (bool)ofd.ShowDialog(this);
128 await this.fooTextBox.Document.LoadAsync(ofd.FileName, Encoding.Default,this.cancleTokenSrc);
129 this.fooTextBox.Refresh();
133 private void MenuItem_Click_4(object sender, RoutedEventArgs e)
135 if (this.fooTextBox.LineBreakMethod == LineBreakMethod.None)
136 this.fooTextBox.LineBreakMethod = LineBreakMethod.CharUnit;
138 this.fooTextBox.LineBreakMethod = LineBreakMethod.None;
139 this.fooTextBox.LineBreakCharCount = 10;
140 this.fooTextBox.PerfomLayouts();
141 this.fooTextBox.Refresh();
144 private void MenuItem_Click_5(object sender, RoutedEventArgs e)
146 Document doc = this.fooTextBox.Document;
147 doc.Insert(0,"this is a pen");
148 doc.SetMarker(Marker.Create(0, 4, HilightType.Sold));
149 doc.SetMarker(Marker.Create(8, 1, HilightType.Select, 255, 128, 128, 128));
150 doc.SetMarker(Marker.Create(10, 3, HilightType.Squiggle, 255, 255, 0, 0));
151 this.fooTextBox.Refresh();
154 private void MenuItem_Click_6(object sender, RoutedEventArgs e)
156 this.fooTextBox.FlowDirection = this.RTL.IsChecked ? FlowDirection.RightToLeft : FlowDirection.LeftToRight;
157 this.fooTextBox.Refresh();
160 private void MenuItem_Click_7(object sender, RoutedEventArgs e)
162 if (this.fooTextBox.Hilighter != null)
164 this.fooTextBox.Hilighter = null;
165 this.fooTextBox.LayoutLineCollection.ClearHilight();
166 this.XMLHilight.IsChecked = false;
170 this.fooTextBox.Hilighter = new XmlHilighter();
171 this.fooTextBox.LayoutLineCollection.HilightAll();
172 this.XMLHilight.IsChecked = true;
174 this.fooTextBox.Refresh();
177 private void MenuItem_Click_9(object sender, RoutedEventArgs e)
179 this.fooTextBox.LayoutLineCollection.GenerateFolding();
180 this.fooTextBox.Refresh();
183 private void MenuItem_Click_8(object sender, RoutedEventArgs e)
185 if (this.fooTextBox.DrawRuler)
186 this.fooTextBox.DrawRuler = false;
188 this.fooTextBox.DrawRuler = true;
189 this.ShowRuler.IsChecked = this.fooTextBox.DrawRuler;
190 this.fooTextBox.Refresh();
193 private async void MenuItem_Click_10(object sender, RoutedEventArgs e)
195 SaveFileDialog sfd = new SaveFileDialog();
196 bool result = (bool)sfd.ShowDialog(this);
199 await this.fooTextBox.Document.SaveAsync(sfd.FileName,Encoding.Default,"\r\n",cancleTokenSrc);
200 MessageBox.Show("complete");
204 private void ReplaceAll_Click(object sender, RoutedEventArgs e)
206 System.Diagnostics.Stopwatch time = new System.Diagnostics.Stopwatch();
208 this.fooTextBox.Document.FireUpdateEvent = false;
209 this.fooTextBox.Document.ReplaceAll2(this.FindPattern.Text, this.ReplacePattern.Text,true);
210 this.fooTextBox.Document.FireUpdateEvent = true;
212 this.fooTextBox.Refresh();
213 MessageBox.Show(string.Format("complete elpased time:{0}s",time.ElapsedMilliseconds/1000.0f));
216 private void URLMark_Click(object sender, RoutedEventArgs e)
218 if (this.fooTextBox.MarkURL)
220 this.fooTextBox.MarkURL = false;
221 this.URLMark.IsChecked = false;
225 this.fooTextBox.MarkURL = true;
226 this.URLMark.IsChecked = true;
228 this.fooTextBox.Refresh();
231 private void ShowLineMarker_Click(object sender, RoutedEventArgs e)
233 if (this.fooTextBox.DrawCaretLine)
235 this.fooTextBox.DrawCaretLine = false;
236 this.ShowLineMarker.IsEnabled = false;
240 this.fooTextBox.DrawCaretLine = true;
241 this.ShowLineMarker.IsEnabled = true;
243 this.fooTextBox.Refresh();
246 public class TextRangeConveter : System.Windows.Data.IValueConverter
248 public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
250 FooEditEngine.TextRange range = (FooEditEngine.TextRange)value;
251 return string.Format("Index:{0} Length:{1}", range.Index, range.Length);
254 public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
256 throw new System.NotImplementedException();