Пример #1
0
        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
        }
Пример #2
0
        /* ---------------------------------------------------- */
        //     メソッド
        /* ---------------------------------------------------- */
        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);
            }
        }
Пример #3
0
        // ツールバーボタン(読み込み)
        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();
        }