/* ----------------------------------------------------------------- */ /// /// ProgressForm /// /// <summary> /// オブジェクトを初期化します。 /// </summary> /// /* ----------------------------------------------------------------- */ public ProgressForm() { InitializeComponent(); ExitButton.Click += (s, e) => Close(); SaveButton.Click += (s, e) => Aggregator.GetEvents()?.Save.Publish(null); PreviewButton.Click += (s, e) => Aggregator.GetEvents()?.Preview.Publish(); }
/* ----------------------------------------------------------------- */ /// /// ProgressPresenter /// /// <summary> /// オブジェクトを初期化します。 /// </summary> /// /// <param name="view">View オブジェクト</param> /// <param name="model">Model オブジェクト</param> /// <param name="ea">イベント集約オブジェクト</param> /// /* ----------------------------------------------------------------- */ public ProgressPresenter(ProgressForm view, ImageCollection model, IAggregator ea) : base(view, model, ea) { View.FileName = IoEx.Path.GetFileName(Model.Path); View.Aggregator = Aggregator; Aggregator.GetEvents()?.Save.Subscribe(Save_Handle); Aggregator.GetEvents()?.Preview.Subscribe(Preview_Handle); View.Shown += View_Shown; }
/* ----------------------------------------------------------------- */ /// /// InitializeEvents /// /// <summary> /// 各種イベントを初期化します。 /// </summary> /// /* ----------------------------------------------------------------- */ private void InitializeEvents() { ExitButton.Click += (s, e) => Close(); TitleButton.Click += (s, e) => Aggregator.GetEvents()?.Version.Publish(); SaveAllButton.Click += (s, e) => Aggregator.GetEvents()?.Save.Publish(null); SaveButton.Click += (s, e) => RaiseSave(); MenuControl.PreviewMenu.Click += (s, e) => Aggregator.GetEvents()?.PreviewImage.Publish(); MenuControl.RemoveMenu.Click += (s, e) => Aggregator.GetEvents()?.Remove.Publish(); MenuControl.SaveMenu.Click += (s, e) => RaiseSave(); MenuControl.SelectAllMenu.Click += (s, e) => SelectAll(); ImageListView.DoubleClick += (s, e) => Aggregator.GetEvents()?.PreviewImage.Publish(); ImageListView.SelectedIndexChanged += (s, e) => Refresh(); }
/* --------------------------------------------------------------------- */ /// /// View_Shown /// /// <summary> /// フォームの表示直後に実行されるハンドラです。 /// </summary> /// /* --------------------------------------------------------------------- */ private void View_Shown(object sender, EventArgs e) { View.Aggregator = Aggregator; var ea = Aggregator.GetEvents(); if (ea != null) { _events.Add(ea.PreviewImage.Subscribe(PreviewImage_Handle)); _events.Add(ea.Remove.Subscribe(Remove_Handle)); _events.Add(ea.SaveComplete.Subscribe(SaveComplete_Handle)); _events.Add(ea.Version.Subscribe(Version_Handle)); } View.Cursor = Cursors.WaitCursor; View.AddRange(Model.Select(x => Shrink(x, View.ImageSize))); View.Cursor = Cursors.Default; }
/* ----------------------------------------------------------------- */ /// /// OnKeyDown /// /// <summary> /// キーが押下された時に実行されます。 /// </summary> /// /* ----------------------------------------------------------------- */ protected override void OnKeyDown(KeyEventArgs e) { try { if (!e.Control) { return; } var result = true; switch (e.KeyCode) { case Keys.A: SelectAll(); break; case Keys.D: Aggregator.GetEvents()?.Remove.Publish(); break; case Keys.R: Aggregator.GetEvents()?.PreviewImage.Publish(); break; case Keys.S: if (e.Shift) { Aggregator.GetEvents()?.Save.Publish(null); } else if (AnyItemsSelected) { RaiseSave(); } break; default: result = false; break; } e.Handled = result; } finally { base.OnKeyDown(e); } }
/* ----------------------------------------------------------------- */ /// /// Save_Handle /// /// <summary> /// 抽出画像が保存される時に実行されるハンドラです。 /// </summary> /// /* ----------------------------------------------------------------- */ private async void Save_Handle(int[] files) { var path = GetSaveFile(); if (string.IsNullOrEmpty(path)) { return; } SyncWait(() => View.AllowOperation = false); try { await Async(() => { if (files == null) { Model.Save(path); } else { Model.Save(path, files); } }); Aggregator.GetEvents()?.SaveComplete.Publish(); } catch (Exception err) { this.LogError(err.Message, err); } SyncWait(() => { View.AllowOperation = true; if (View.Visible) { View.Close(); } }); }
/* ----------------------------------------------------------------- */ /// /// RaiseSave /// /// <summary> /// Save イベントを発生させます。 /// </summary> /// /* ----------------------------------------------------------------- */ private void RaiseSave() => Aggregator.GetEvents()?.Save.Publish(SelectedIndices.Ascend().ToArray());