From bc7f73ae9cc4b8385b28911c423ed0adc3ba9e50 Mon Sep 17 00:00:00 2001 From: spx Date: Sat, 2 Aug 2014 22:55:02 +0900 Subject: [PATCH] =?utf8?q?=E7=94=BB=E5=83=8F=E6=8A=95=E7=A8=BF:=20?= =?utf8?q?=E8=A4=87=E6=95=B0=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE?= =?utf8?q?=E3=83=89=E3=83=AD=E3=83=83=E3=83=97=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- OpenTween/MediaSelector.cs | 122 +++++++++++++++++++++-------- OpenTween/Properties/Resources.Designer.cs | 6 +- OpenTween/Properties/Resources.en.resx | 2 + OpenTween/Properties/Resources.resx | 2 + OpenTween/Resources/ChangeLog.txt | 2 + OpenTween/Tween.cs | 2 +- 6 files changed, 100 insertions(+), 36 deletions(-) diff --git a/OpenTween/MediaSelector.cs b/OpenTween/MediaSelector.cs index 7858f172..052e733e 100644 --- a/OpenTween/MediaSelector.cs +++ b/OpenTween/MediaSelector.cs @@ -209,13 +209,18 @@ namespace OpenTween /// 投稿するファイルとその投稿先を選択するためのコントロールを表示する。 /// D&Dをサポートする場合は引数にドロップされたファイル名を指定して呼ぶこと。 /// - public void BeginSelection(string fileName = null) + public void BeginSelection(string[] fileNames = null) { - if (!string.IsNullOrEmpty(fileName)) + if (fileNames != null && fileNames.Length > 0) { - if (!this.Visible) + var serviceName = this.ServiceName; + if (string.IsNullOrEmpty(serviceName)) return; + var service = this.pictureService[serviceName]; + + var count = Math.Min(fileNames.Length, service.MaxMediaCount); + if (!this.Visible || count > 1) { - // 非表示時のファイル指定は新規選択として扱う + // 非表示時または複数のファイル指定は新規選択として扱う SetImagePageCombo(); if (this.BeginSelecting != null) @@ -224,8 +229,21 @@ namespace OpenTween this.Visible = true; } this.Enabled = true; - ImagefilePathText.Text = fileName; - ImageFromSelectedFile(false); + + if (count == 1) + { + ImagefilePathText.Text = fileNames[0]; + ImageFromSelectedFile(false); + } + else + { + for (int i = 0; i < count; i++) + { + var index = ImagePageCombo.Items.Count - 1; + if (index == 0) ImagefilePathText.Text = fileNames[i]; + ImageFromSelectedFile(index, fileNames[i], false); + } + } } else { @@ -336,31 +354,46 @@ namespace OpenTween private void ImageFromSelectedFile(bool suppressMsgBox) { - this.ClearImageSelectedPicture(); + ImagefilePathText.Text = ImagefilePathText.Text.Trim(); + ImageFromSelectedFile(-1, ImagefilePathText.Text, suppressMsgBox); + } - try + private void ImageFromSelectedFile(int index, string fileName, bool suppressMsgBox) + { + var serviceName = this.ServiceName; + if (string.IsNullOrEmpty(serviceName)) return; + + var selectedIndex = ImagePageCombo.SelectedIndex; + if (index < 0) index = selectedIndex; + + if (index >= ImagePageCombo.Items.Count) + throw new ArgumentOutOfRangeException("index"); + + var imageService = this.pictureService[serviceName]; + var isSelectedPage = (index == selectedIndex); + + if (isSelectedPage) + this.ClearImageSelectedPicture(); + + if (string.IsNullOrEmpty(fileName)) { - ImagefilePathText.Text = ImagefilePathText.Text.Trim(); - var fileName = ImagefilePathText.Text; - var serviceName = this.ServiceName; - if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(serviceName)) - { - ClearSelectedImagePage(); - return; - } + ClearImagePage(index); + return; + } + try + { FileInfo fl = new FileInfo(fileName); string ext = fl.Extension; - var imageService = this.pictureService[serviceName]; if (!imageService.CheckFileExtension(ext)) { //画像以外の形式 - ClearSelectedImagePage(); + ClearImagePage(index); if (!suppressMsgBox) { MessageBox.Show( - string.Format(Properties.Resources.PostPictureWarn3, serviceName, MakeAvailableServiceText(ext, fl.Length), ext), + string.Format(Properties.Resources.PostPictureWarn3, serviceName, MakeAvailableServiceText(ext, fl.Length), ext, fl.Name), Properties.Resources.PostPictureWarn4, MessageBoxButtons.OK, MessageBoxIcon.Warning); @@ -371,11 +404,11 @@ namespace OpenTween if (!imageService.CheckFileSize(ext, fl.Length)) { // ファイルサイズが大きすぎる - ClearSelectedImagePage(); + ClearImagePage(index); if (!suppressMsgBox) { MessageBox.Show( - string.Format(Properties.Resources.PostPictureWarn5, serviceName, MakeAvailableServiceText(ext, fl.Length)), + string.Format(Properties.Resources.PostPictureWarn5, serviceName, MakeAvailableServiceText(ext, fl.Length), fl.Name), Properties.Resources.PostPictureWarn4, MessageBoxButtons.OK, MessageBoxIcon.Warning); @@ -387,23 +420,27 @@ namespace OpenTween { using (var fs = File.OpenRead(fileName)) { - ImageSelectedPicture.Image = MemoryImage.CopyFromStream(fs); + var image = MemoryImage.CopyFromStream(fs); + if (isSelectedPage) + ImageSelectedPicture.Image = image; + else + image.Dispose(); //画像チェック後は使わないので破棄する } - SetSelectedImagePage(fileName, MyCommon.UploadFileType.Picture); + SetImagePage(index, fileName, MyCommon.UploadFileType.Picture); } catch (InvalidImageException) { - SetSelectedImagePage(fileName, MyCommon.UploadFileType.MultiMedia); + SetImagePage(index, fileName, MyCommon.UploadFileType.MultiMedia); } } catch (FileNotFoundException) { - ClearSelectedImagePage(); + ClearImagePage(index); if (!suppressMsgBox) MessageBox.Show("File not found."); } catch (Exception) { - ClearSelectedImagePage(); + ClearImagePage(index); if (!suppressMsgBox) MessageBox.Show("The type of this file is not image."); } } @@ -577,9 +614,12 @@ namespace OpenTween private void AddNewImagePage(int selectedIndex) { - if (this.ServiceName.Equals("Twitter") && selectedIndex < 3) + var serviceName = this.ServiceName; + if (string.IsNullOrEmpty(serviceName)) return; + + if (selectedIndex < this.pictureService[serviceName].MaxMediaCount - 1) { - // 投稿先が Twitter であれば、最大 4 枚まで選択できるようにする + // 投稿先の投稿可能枚数まで選択できるようにする var count = ImagePageCombo.Items.Count; if (selectedIndex == count - 1) { @@ -592,20 +632,36 @@ namespace OpenTween private void SetSelectedImagePage(string path, MyCommon.UploadFileType type) { - var idx = ImagePageCombo.SelectedIndex; - var item = (SelectedMedia)ImagePageCombo.Items[idx]; + SetImagePage(-1, path, type); + } + + private void SetImagePage(int index, string path, MyCommon.UploadFileType type) + { + var selectedIndex = ImagePageCombo.SelectedIndex; + if (index < 0) index = selectedIndex; + + var item = (SelectedMedia)ImagePageCombo.Items[index]; item.Path = path; item.Type = type; - AddNewImagePage(idx); + AddNewImagePage(index); } private void ClearSelectedImagePage() { - var item = (SelectedMedia)ImagePageCombo.SelectedItem; + ClearImagePage(-1); + } + + private void ClearImagePage(int index) + { + var selectedIndex = ImagePageCombo.SelectedIndex; + if (index < 0) index = selectedIndex; + + var item = (SelectedMedia)ImagePageCombo.Items[index]; item.Path = ""; item.Type = MyCommon.UploadFileType.Invalid; - ImagefilePathText.Text = ""; + + if (index == selectedIndex) ImagefilePathText.Text = ""; } private void ValidateSelectedImagePage() diff --git a/OpenTween/Properties/Resources.Designer.cs b/OpenTween/Properties/Resources.Designer.cs index f0b9adad..2402d7cd 100644 --- a/OpenTween/Properties/Resources.Designer.cs +++ b/OpenTween/Properties/Resources.Designer.cs @@ -626,6 +626,7 @@ namespace OpenTween.Properties { /// 更新履歴 /// ///==== Ver 1.2.3-beta1(2014/xx/xx) + /// * FIX: 翻訳機能使用時に発言詳細部のフォント設定が適用されない問題を修正 /// ///==== Ver 1.2.2(2014/07/06) /// * このバージョンのOpenTweenは pic.twitter.com に複数枚の画像が含まれている場合の表示に対応していますが、 @@ -636,8 +637,7 @@ namespace OpenTween.Properties { /// - 投稿先に Twitter を選択し、左端のコンボボックスを切り替えることで、最大 4 枚まで選択可能です /// - 投稿するファイルの数・サイズによっては、投稿完了までに若干の時間がかかります /// * NEW: GIFMAGAZINE のサムネイル表示に対応 - /// - pic.twitter.com に投稿されたアニメーションGIFはTwitterAPI側の対応待ちで当面の間表示はできません - /// * CHG [残りの文字列は切り詰められました]"; に類似しているローカライズされた文字列を検索します。 + /// - pic.twitter.com に投稿されたアニメーショ [残りの文字列は切り詰められました]"; に類似しているローカライズされた文字列を検索します。 /// internal static string ChangeLog { get { @@ -1854,6 +1854,7 @@ namespace OpenTween.Properties { /// [投稿先: {0}] ///"{2}" の投稿には対応していません。他の投稿先を使用してください。 /// + ///ファイル名: {3} ///使用可能な投稿先: {1} に類似しているローカライズされた文字列を検索します。 /// internal static string PostPictureWarn3 { @@ -1875,6 +1876,7 @@ namespace OpenTween.Properties { /// [投稿先: {0}] ///ファイルが大きすぎます。ファイルサイズを小さくするか、他の投稿先を使用してください。 /// + ///ファイル名: {2} ///使用可能な投稿先: {1} に類似しているローカライズされた文字列を検索します。 /// internal static string PostPictureWarn5 { diff --git a/OpenTween/Properties/Resources.en.resx b/OpenTween/Properties/Resources.en.resx index 407c660e..35a483d7 100644 --- a/OpenTween/Properties/Resources.en.resx +++ b/OpenTween/Properties/Resources.en.resx @@ -1091,6 +1091,7 @@ Do you want to upload the {1} selected media file(s)? [Service: {0}] "{2}" is unsupported file type. Use other service. +File: {3} Available service: {1} @@ -1100,6 +1101,7 @@ Available service: {1} [Service: {0}] File is too large. Reduce the file size, or use other service. +File: {2} Available service: {1} diff --git a/OpenTween/Properties/Resources.resx b/OpenTween/Properties/Resources.resx index 1d012762..7de599f4 100644 --- a/OpenTween/Properties/Resources.resx +++ b/OpenTween/Properties/Resources.resx @@ -1149,6 +1149,7 @@ [投稿先: {0}] "{2}" の投稿には対応していません。他の投稿先を使用してください。 +ファイル名: {3} 使用可能な投稿先: {1} @@ -1158,6 +1159,7 @@ [投稿先: {0}] ファイルが大きすぎます。ファイルサイズを小さくするか、他の投稿先を使用してください。 +ファイル名: {2} 使用可能な投稿先: {1} diff --git a/OpenTween/Resources/ChangeLog.txt b/OpenTween/Resources/ChangeLog.txt index 201803bb..b2a0aa85 100644 --- a/OpenTween/Resources/ChangeLog.txt +++ b/OpenTween/Resources/ChangeLog.txt @@ -1,6 +1,8 @@ 更新履歴 ==== Ver 1.2.3-beta1(2014/xx/xx) + * CHG: 複数選択状態の画像ファイルをD&Dした際の動作を変更しました + - ドロップされたファイルを一度に読み込むようにしました(投稿先の投稿可能枚数までで、現状は pic.twitter.com のみ) * FIX: 翻訳機能使用時に発言詳細部のフォント設定が適用されない問題を修正 ==== Ver 1.2.2(2014/07/06) diff --git a/OpenTween/Tween.cs b/OpenTween/Tween.cs index 95947d38..bc6426a6 100644 --- a/OpenTween/Tween.cs +++ b/OpenTween/Tween.cs @@ -12391,7 +12391,7 @@ namespace OpenTween { this.Activate(); this.BringToFront(); - ImageSelector.BeginSelection(((string[])e.Data.GetData(DataFormats.FileDrop, false))[0]); + ImageSelector.BeginSelection((string[])e.Data.GetData(DataFormats.FileDrop, false)); StatusText.Focus(); } -- 2.11.0