/// <summary> /// ログテーラーウィンドウの作成 /// </summary> /// <param name="tailer"></param> /// <returns></returns> LogTailerWindow _CreateLogTailerWindow( Tailer tailer, FontFamily fontFamily, double fontSize ) { var logTailerWindow = new LogTailerWindow( tailer, fontFamily, fontSize ) { FontFamily = fontFamily, FontSize = fontSize, }; logTailerWindow.Closing += _LogTailerWindow_Closing; // ユーザー設定の適用 { // ユーザー設定ファイル名の取得 var userSettingFilePath = _GetUserSettingFilePath( tailer ); // ユーザー設定の読み込み var userSetting = DataSettingLoader.LoadSetting<UserSetting>( userSettingFilePath ); if( userSetting != null ) { // 適用 logTailerWindow.Left = userSetting.ViewSetting.WindowLocation.X; logTailerWindow.Top = userSetting.ViewSetting.WindowLocation.Y; logTailerWindow.Height = userSetting.ViewSetting.WindowSize.Height; logTailerWindow.Width = userSetting.ViewSetting.WindowSize.Width; logTailerWindow.WindowState = userSetting.ViewSetting.WindowState; } } var windowLayoutWatcher = new WindowLayoutWatcher( logTailerWindow ); // ログテーラーウィンドウとそのレイアウト監視をセットで記憶する m_logTailerWindowMap.Add( logTailerWindow, windowLayoutWatcher ); return logTailerWindow; }
/// <summary> /// コンストラクタ /// </summary> /// <param name="tailer"></param> public LogTailerWindow( Tailer tailer, FontFamily fontFamily, double fontSize ) { InitializeComponent(); Tailer = tailer; // タイトルバー Title = string.Format( "LogTailer - {0}",tailer.Name ); // シャッターの設定 { // タイトル m_title.Text = tailer.Name; // バージョン番号 var cetExecutingAssembly = System.Reflection.Assembly.GetExecutingAssembly(); var varsion = cetExecutingAssembly.GetName().Version; m_version.Text = string.Format( "ver {0}.{1}", varsion.Major, varsion.Minor ); } // コピーコマンド this.CommandBindings.Add( new CommandBinding( ApplicationCommands.Copy, _CopyExecuted, _CanCopyExecute ) ); // LogListBox の設定 { // ScrollViewer.SetIsDeferredScrollingEnabled( m_listbox, true ); // スクロール中は描画を更新しない // ScrollViewer.SetCanContentScroll( m_listbox, false ); // 仮想化OFF // VirtualizingPanel.SetScrollUnit( m_logListBox, ScrollUnit.Pixel ); // ピクセル単位のスクロール or 行単位のスクロール } // Data と ListBox をバインド { var binding = new Binding() { Mode = BindingMode.OneWay, Source = m_viewSource, }; m_viewSource.Source = m_data; m_viewSource.Filter += m_viewSource_Filter; m_logListBox.SetBinding( ListBox.DataContextProperty, binding ); } // ログファイルリーダー m_logReader = new LogFileReader() { FilePath = Tailer.FilePath, Encoding = Tailer.Encoding, }; // ログファイルの監視 m_logWatcher = new LogFileSystemWatcher() { FilePath = Tailer.FilePath, UpdatePeriod = Tailer.UpdatePeriod, }; m_logWatcher.LogFileChanged += _logWatcher_LogFileChanged; // m_logWatcher.Start(); // 表示状態の変更により開始される m_filterTextBox.FilterChanged += m_filterTextBox_FilterChanged; // ログテキストブロックのフォント設定を保存する { var dummy = new LineListBoxItem( null ); m_logFontFamily = fontFamily; m_logTypeface = new Typeface( fontFamily, dummy.FontStyle, dummy.FontWeight, dummy.FontStretch ); m_logFontSize = fontSize; m_logForeground = dummy.Foreground; } // ハイパーリンクの設定 if( string.IsNullOrEmpty( tailer.LinkName ) || string.IsNullOrEmpty( tailer.LinkUri ) ) { m_linkTextBlock.Visibility = Visibility.Hidden; } else { var hyperlink = new Hyperlink() { NavigateUri = new Uri( tailer.LinkUri ), }; hyperlink.Inlines.Add( new Run( tailer.LinkName ) ); hyperlink.Click += hyperlink_Click; m_linkTextBlock.Inlines.Clear(); m_linkTextBlock.Inlines.Add( hyperlink ); } }
/// <summary> /// ユーザー設定ファイル名の取得 /// </summary> /// <param name="tailer"></param> /// <returns></returns> string _GetUserSettingFilePath( Tailer tailer ) { var LocalApplicationData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData ); var fileName = string.Format( "{0}.xml", tailer.Name ); var userSettingFilePath = Path.Combine( LocalApplicationData, "LogTailer", "UserSettings", Path.GetFileNameWithoutExtension( m_commandLine.SettingFilePath ), fileName ); return userSettingFilePath; }