private void InitEvent() { this.SourceInitialized += (s, e) => { // ウインドウ位置復元が正常に行われたかチェック Win32.SetWindowPosProperly(new WindowInteropHelper(this).Handle, (int)this.Left, (int)this.Top, true, 0, true); }; this.SizeChanged += (s, e) => { // 以下の処理は、ウインドウ枠ドラッグでのサイズ変更時のみ有効 if (IgnoreResizeEvent) { return; } // 画像拡大パネルのサイズ更新、拡大中ならリセット if (TileExpantionPanel.IsShowing) { TileExpantionPanel.FitToMainWindow(); } // アス比非固定時 if (Setting.TempProfile.NonFixAspectRatio.Value) { // 現在のプロファイル Profile pf = Setting.TempProfile; // タイルサイズ(アス比)の決定 double w = (this.Width - MainContent.Margin.Left * 2) / pf.NumofMatrix.Col; double h = (this.Height - MainContent.Margin.Left * 2) / pf.NumofMatrix.Row; double gridRatio = h / w; int gridWidth = ImgContainer.StandardInnerTileWidth + pf.TilePadding.Value * 2; int gridHeight = (int)(gridWidth * gridRatio); pf.AspectRatio.Value = new int[] { ImgContainer.StandardInnerTileWidth, gridHeight - pf.TilePadding.Value * 2 }; // コンテナサイズの決定 ImgContainerManager.InitContainerSize(); ImgContainerManager.InitWrapPoint(pf.SlideDirection.Value); // BitmapDecodePixelOfTilewを更新 ImgContainerManager.InitBitmapDecodePixelOfTile(); // 位置を正規化 ImgContainerManager.InitContainerPos(); } // アス比固定・非固定に関わらず拡大縮小 FitMainContentToWindow(); }; this.Closing += (s, e) => { ShortcutManager.UnhookWindowsHook(); }; this.PreviewDragOver += (s, e) => { if (e.Data.GetDataPresent(DataFormats.FileDrop, true)) { e.Effects = DragDropEffects.All; } else { e.Effects = DragDropEffects.None; } e.Handled = true; }; this.Drop += (s, e) => { SaveHistoryItem(); // メインウインドウをアクティブに this.Activate(); string[] files = e.Data.GetData(DataFormats.FileDrop) as string[]; if (IsCtrlOrShiftKeyPressed) { // 追加読み込み ReadFiles(files, true); var t = ImgContainerManager.InitAllContainer(0); } else { // 通常読み込み DropNewFiles(files); } }; // end of method }
/* ---------------------------------------------------- */ // メソッド /* ---------------------------------------------------- */ private void InitMainWindow(AppSetting setting) { Setting = setting; this.AllowsTransparency = (bool)Setting.TempProfile.AllowTransparency.Value; IgnoreResizeEvent = true; InitializeComponent(); // debug #if DEBUG //Setting.ShortcutSetting = new ShortcutSetting(); //Setting.TempProfile.DetectionOfSpread.Value = DetectionOfSpread.ByWideImage; #endif // 色々初期化 InitControls(); InitControlsEvent(); InitHelper(); InitEvent(); // コンテナマネージャ初期化 ImgContainerManager.Initialize(); ImgContainerManager.Containers.ForEach(tc => MainContent.Children.Add(tc)); // ショートカットマネージャー ShortcutManager = new ShortcutManager(); // 前回の状態を復元 Profile pf = Setting.TempProfile; // ウインドウ位置・フルスクリーン復元 this.Left = pf.WindowPos.X; this.Top = pf.WindowPos.Y; this.Width = pf.WindowSize.Width; this.Height = pf.WindowSize.Height; if (pf.IsFullScreenMode.Value) { pf.IsFullScreenMode.Value = false; ToggleFullScreen(); IgnoreResizeEvent = true; } // 画像情報の読み込みとソート String[] files = pf.Path.Value.ToArray(); ReadFiles(files, false); var t = ImgContainerManager.InitAllContainer(pf.LastPageIndex.Value); // 背景色と不透明度 ApplyColorAndOpacitySetting(); // UI設定( UpdateMainWindowView()も実行される ) UpdateUI(); // ツールバーの見た目 UpdateToolbarViewing(); // 最前面 this.Topmost = Setting.TempProfile.TopMost.Value; // ウインドウ描画完了後、リサイズイベントの許可 this.ContentRendered += (s, e) => { IgnoreResizeEvent = false; }; // 自動再生 if (pf.SlideShowAutoStart.Value) { ImgContainerManager.StartSlideShow(true); } }
// ツールバーボタン(読み込み) private void MenuItem_Load_SubmenuOpened(object sender, RoutedEventArgs e) { // イベントの発生元チェック(子要素からのイベントなら無視) MenuItem miSrc = e.OriginalSource as MenuItem; if (miSrc == null || miSrc.Name != MenuItem_Load.Name) { return; } // 項目追加前に、基本メニュー以外を削除 for (int i = MenuItem_Load.Items.Count - 1; i >= 0; i--) { MenuItem mi = MenuItem_Load.Items[i] as MenuItem; if (mi != null && (string)mi.Tag == "BasicItemLast") { break; } MenuItem_Load.Items.RemoveAt(i); } // 追加読み込み if (Setting.ShowMenuItem_AdditionalRead) { MenuItem_Load.Items.Add(new Separator()); MenuItem mi_addFolder = new MenuItem(); mi_addFolder.Header = "フォルダを追加読み込み"; mi_addFolder.Click += Toolbar_Add_Folder_Click; MenuItem_Load.Items.Add(mi_addFolder); MenuItem mi_addFile = new MenuItem(); mi_addFile.Header = "ファイルを追加読み込み"; mi_addFile.Click += Toolbar_Add_File_Click; MenuItem_Load.Items.Add(mi_addFile); } // 再読込み(必ず表示) MenuItem_Load.Items.Add(new Separator()); MenuItem mi_reload = new MenuItem(); mi_reload.Header = "再読み込み"; mi_reload.Click += Toolbar_Load_Reload_Click; MenuItem_Load.Items.Add(mi_reload); // エクスプローラーでフォルダを開く(必ず表示) MenuItem mi_openFolder = new MenuItem(); mi_openFolder.Header = "エクスプローラーでフォルダを開く"; mi_openFolder.Click += (s, ev) => { OpenCurrentFolderByExplorer(); }; MenuItem_Load.Items.Add(mi_openFolder); // ヒストリーなし Action addHistorySettingMenu = () => { MenuItem_Load.Items.Add(new Separator()); MenuItem m0 = new MenuItem(); m0.Header = "履歴設定..."; m0.Click += (s, ev) => ShowAppSettingDialog((int)AppSettingDialogTabIndex.History); MenuItem_Load.Items.Add(m0); }; if (Setting.History.Count < 1) { addHistorySettingMenu.Invoke(); return; } // セパレータ MenuItem_Load.Items.Add(new Separator()); // ヒストリーの右クリックメニュー ContextMenu contextMenu = new ContextMenu(); MenuItem cmi1 = new MenuItem(); MenuItem cmi2 = new MenuItem(); MenuItem cmi3 = new MenuItem(); cmi1.Header = "追加読み込み"; cmi2.Header = "エクスプローラーで開く"; cmi3.Header = "削除"; // 追加読み込み cmi1.Click += (se, ev) => { MenuItem mi = ((ev.Source as MenuItem).Parent as ContextMenu).PlacementTarget as MenuItem; if (mi == null) { return; } string[] path = { mi.ToolTip.ToString() }; ReadFiles(path, true); var t = ImgContainerManager.InitAllContainer(0); }; // エクスプローラーで開く cmi2.Click += (se, ev) => { MenuItem mi = ((ev.Source as MenuItem).Parent as ContextMenu).PlacementTarget as MenuItem; if (mi == null) { return; } string path = mi.ToolTip.ToString(); //Process.Start(path); Process.Start("explorer.exe", "/select,\"" + path + "\""); }; // 削除 cmi3.Click += (se, ev) => { MenuItem mi = ((ev.Source as MenuItem).Parent as ContextMenu).PlacementTarget as MenuItem; if (mi == null) { return; } string path = mi.ToolTip.ToString(); Setting.History.RemoveAll(h => h.ArchiverPath == path); MenuItem_Load_SubmenuOpened(this, new RoutedEventArgs(null, MenuItem_Load)); }; contextMenu.Items.Add(cmi1); contextMenu.Items.Add(cmi2); contextMenu.Items.Add(cmi3); // メインヒストリー追加 for (int i = 0; i < Setting.NumofHistoryInMainMenu; i++) { if (i < Setting.History.Count) { MenuItem mi = new MenuItem(); mi.Header = System.IO.Path.GetFileName(Setting.History[i].ArchiverPath).Replace("_", "__"); mi.ToolTip = Setting.History[i].ArchiverPath; mi.Click += OnHistoryItemSelected; mi.ContextMenu = contextMenu; MenuItem_Load.Items.Add(mi); } } // サブヒストリー追加 if (Setting.History.Count > Setting.NumofHistoryInMainMenu && Setting.NumofHistoryInMenu > Setting.NumofHistoryInMainMenu) { MenuItem continuation = new MenuItem(); continuation.Header = "フォルダ履歴の続き"; MenuItem_Load.Items.Add(continuation); for (int i = Setting.NumofHistoryInMainMenu; i < Setting.NumofHistoryInMenu; i++) { if (i > Setting.History.Count - 1) { break; } MenuItem mi = new MenuItem(); mi.Header = System.IO.Path.GetFileName(Setting.History[i].ArchiverPath).Replace("_", "__"); mi.ToolTip = Setting.History[i].ArchiverPath; mi.Click += OnHistoryItemSelected; mi.ContextMenu = contextMenu; continuation.Items.Add(mi); } } // 履歴設定 addHistorySettingMenu.Invoke(); }