From: spx Date: Thu, 5 Jun 2014 21:28:29 +0000 (+0900) Subject: 投稿画像選択のUIをMediaSelectorクラスとして分離 X-Git-Tag: OpenTween_v1.2.2~27^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=388ef66ae76db3bf21a18658b096be1669e106ca;hp=487d91f18d4a06dbb2c6226c03308148d6218fae;p=opentween%2Fopen-tween.git 投稿画像選択のUIをMediaSelectorクラスとして分離 --- diff --git a/OpenTween/MediaSelector.Designer.cs b/OpenTween/MediaSelector.Designer.cs new file mode 100644 index 00000000..6a15cd8e --- /dev/null +++ b/OpenTween/MediaSelector.Designer.cs @@ -0,0 +1,141 @@ +namespace OpenTween +{ + partial class MediaSelector + { + /// + /// 必要なデザイナー変数です。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 使用中のリソースをすべてクリーンアップします。 + /// + /// マネージ リソースが破棄される場合 true、破棄されない場合は false です。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region コンポーネント デザイナーで生成されたコード + + /// + /// デザイナー サポートに必要なメソッドです。このメソッドの内容を + /// コード エディターで変更しないでください。 + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MediaSelector)); + this.ImageSelectedPicture = new OpenTween.OTPictureBox(); + this.ImagePathPanel = new System.Windows.Forms.Panel(); + this.ImagefilePathText = new System.Windows.Forms.TextBox(); + this.ImagePageCombo = new System.Windows.Forms.ComboBox(); + this.FilePickButton = new System.Windows.Forms.Button(); + this.Label2 = new System.Windows.Forms.Label(); + this.ImageServiceCombo = new System.Windows.Forms.ComboBox(); + this.ImageCancelButton = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.ImageSelectedPicture)).BeginInit(); + this.ImagePathPanel.SuspendLayout(); + this.SuspendLayout(); + // + // ImageSelectedPicture + // + resources.ApplyResources(this.ImageSelectedPicture, "ImageSelectedPicture"); + this.ImageSelectedPicture.Name = "ImageSelectedPicture"; + this.ImageSelectedPicture.TabStop = false; + // + // ImagePathPanel + // + this.ImagePathPanel.Controls.Add(this.ImagefilePathText); + this.ImagePathPanel.Controls.Add(this.ImagePageCombo); + this.ImagePathPanel.Controls.Add(this.FilePickButton); + this.ImagePathPanel.Controls.Add(this.Label2); + this.ImagePathPanel.Controls.Add(this.ImageServiceCombo); + this.ImagePathPanel.Controls.Add(this.ImageCancelButton); + resources.ApplyResources(this.ImagePathPanel, "ImagePathPanel"); + this.ImagePathPanel.Name = "ImagePathPanel"; + // + // ImagefilePathText + // + resources.ApplyResources(this.ImagefilePathText, "ImagefilePathText"); + this.ImagefilePathText.Name = "ImagefilePathText"; + this.ImagefilePathText.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ImageSelection_KeyDown); + this.ImagefilePathText.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ImageSelection_KeyPress); + this.ImagefilePathText.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.ImageSelection_PreviewKeyDown); + this.ImagefilePathText.Validating += new System.ComponentModel.CancelEventHandler(this.ImagefilePathText_Validating); + // + // ImagePageCombo + // + resources.ApplyResources(this.ImagePageCombo, "ImagePageCombo"); + this.ImagePageCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ImagePageCombo.FormattingEnabled = true; + this.ImagePageCombo.Name = "ImagePageCombo"; + this.ImagePageCombo.SelectedIndexChanged += new System.EventHandler(this.ImagePageCombo_SelectedIndexChanged); + this.ImagePageCombo.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ImageSelection_KeyDown); + this.ImagePageCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ImageSelection_KeyPress); + this.ImagePageCombo.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.ImageSelection_PreviewKeyDown); + // + // FilePickButton + // + resources.ApplyResources(this.FilePickButton, "FilePickButton"); + this.FilePickButton.Name = "FilePickButton"; + this.FilePickButton.UseVisualStyleBackColor = true; + this.FilePickButton.Click += new System.EventHandler(this.FilePickButton_Click); + this.FilePickButton.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ImageSelection_KeyDown); + this.FilePickButton.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ImageSelection_KeyPress); + this.FilePickButton.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.ImageSelection_PreviewKeyDown); + // + // Label2 + // + resources.ApplyResources(this.Label2, "Label2"); + this.Label2.Name = "Label2"; + // + // ImageServiceCombo + // + resources.ApplyResources(this.ImageServiceCombo, "ImageServiceCombo"); + this.ImageServiceCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ImageServiceCombo.FormattingEnabled = true; + this.ImageServiceCombo.Items.AddRange(new object[] { + resources.GetString("ImageServiceCombo.Items")}); + this.ImageServiceCombo.Name = "ImageServiceCombo"; + this.ImageServiceCombo.SelectedIndexChanged += new System.EventHandler(this.ImageServiceCombo_SelectedIndexChanged); + this.ImageServiceCombo.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ImageSelection_KeyDown); + this.ImageServiceCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ImageSelection_KeyPress); + this.ImageServiceCombo.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.ImageSelection_PreviewKeyDown); + // + // ImageCancelButton + // + resources.ApplyResources(this.ImageCancelButton, "ImageCancelButton"); + this.ImageCancelButton.Name = "ImageCancelButton"; + this.ImageCancelButton.UseVisualStyleBackColor = true; + this.ImageCancelButton.Click += new System.EventHandler(this.ImageCancelButton_Click); + // + // MediaSelector + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.Controls.Add(this.ImageSelectedPicture); + this.Controls.Add(this.ImagePathPanel); + this.Name = "MediaSelector"; + ((System.ComponentModel.ISupportInitialize)(this.ImageSelectedPicture)).EndInit(); + this.ImagePathPanel.ResumeLayout(false); + this.ImagePathPanel.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + internal OTPictureBox ImageSelectedPicture; + internal System.Windows.Forms.Panel ImagePathPanel; + internal System.Windows.Forms.TextBox ImagefilePathText; + internal System.Windows.Forms.ComboBox ImagePageCombo; + internal System.Windows.Forms.Button FilePickButton; + internal System.Windows.Forms.Label Label2; + internal System.Windows.Forms.ComboBox ImageServiceCombo; + internal System.Windows.Forms.Button ImageCancelButton; + } +} diff --git a/OpenTween/MediaSelector.cs b/OpenTween/MediaSelector.cs new file mode 100644 index 00000000..ca591445 --- /dev/null +++ b/OpenTween/MediaSelector.cs @@ -0,0 +1,604 @@ +// OpenTween - Client of Twitter +// Copyright (c) 2014 spx (@5px) +// All rights reserved. +// +// This file is part of OpenTween. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 3 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program. If not, see , or write to +// the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, +// Boston, MA 02110-1301, USA. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using OpenTween.Connection; + +namespace OpenTween +{ + public partial class MediaSelector : UserControl + { + public event EventHandler BeginSelecting; + public event EventHandler EndSelecting; + + public event EventHandler FilePickDialogOpening; + public event EventHandler FilePickDialogClosed; + + public event EventHandler SelectedServiceChanged; + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public OpenFileDialog FilePickDialog { get; set; } + + /// + /// 選択されている投稿先名を取得する。 + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public string ServiceName + { + get { return ImageServiceCombo.Text; } + } + + /// + /// 選択されている投稿先を示すインデックスを取得する。 + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int ServiceIndex + { + get { return ImageServiceCombo.SelectedIndex; } + } + + /// + /// 指定された投稿先名から、作成済みの IMultimediaShareService インスタンスを取得する。 + /// + public IMultimediaShareService GetService(string serviceName) + { + IMultimediaShareService service; + this.pictureService.TryGetValue(serviceName, out service); + return service; + } + + private class SelectedMedia + { + public string Path { get; set; } + public MyCommon.UploadFileType Type { get; set; } + public string Text { get; set; } + + public SelectedMedia(string path, MyCommon.UploadFileType type, string text) + { + this.Path = path; + this.Type = type; + this.Text = text; + } + + public SelectedMedia(string text) + : this("", MyCommon.UploadFileType.Invalid, text) + { + } + + public bool IsValid + { + get { return this.Type != MyCommon.UploadFileType.Invalid; } + } + + public override string ToString() + { + return this.Text; + } + } + + private Dictionary pictureService; + + private void CreateServices(Twitter tw) + { + if (this.pictureService != null) this.pictureService.Clear(); + this.pictureService = null; + + this.pictureService = new Dictionary { + {"TwitPic", new TwitPic(tw)}, + {"img.ly", new imgly(tw)}, + {"yfrog", new yfrog(tw)}, + {"Twitter", new TwitterPhoto(tw)}, + {"ついっぷるフォト", new TwipplePhoto(tw)}, + {"Imgur", new Imgur(tw)}, + }; + } + + public MediaSelector() + { + InitializeComponent(); + + this.ImageSelectedPicture.InitialImage = Properties.Resources.InitialImage; + } + + /// + /// 投稿先サービスなどを初期化する。 + /// + public void Initialize(Twitter tw, string svc, int? index = null) + { + CreateServices(tw); + + SetImageServiceCombo(); + SetImagePageCombo(); + + SelectImageServiceComboItem(svc, index); + } + + /// + /// 投稿先サービスを再作成する。 + /// + public void Reset(Twitter tw) + { + CreateServices(tw); + + SetImageServiceCombo(); + } + + /// + /// 指定されたファイルの投稿に対応した投稿先があるかどうかを示す値を取得する。 + /// + public bool HasUploadableService(string fileName) + { + FileInfo fl = new FileInfo(fileName); + string ext = fl.Extension; + + var serviceName = this.ServiceName; + if (!string.IsNullOrEmpty(serviceName) && + this.pictureService[serviceName].CheckValidFilesize(ext, fl.Length)) + { + return true; + } + + foreach (string svc in ImageServiceCombo.Items) + { + if (!string.IsNullOrEmpty(svc) && + this.pictureService[svc].CheckValidFilesize(ext, fl.Length)) + { + return true; + } + } + + return false; + } + + /// + /// 投稿するファイルとその投稿先を選択するためのコントロールを表示する。 + /// D&Dをサポートする場合は引数にドロップされたファイル名を指定して呼ぶこと。 + /// + public void BeginSelection(string fileName = null) + { + if (!string.IsNullOrEmpty(fileName)) + { + if (!this.Visible) + { + // 非表示時のファイル指定は新規選択として扱う + SetImagePageCombo(); + + if (this.BeginSelecting != null) + this.BeginSelecting(this, EventArgs.Empty); + + this.Visible = true; + } + this.Enabled = true; + ImagefilePathText.Text = fileName; + ImageFromSelectedFile(false); + } + else + { + if (!this.Visible) + { + if (this.BeginSelecting != null) + this.BeginSelecting(this, EventArgs.Empty); + + this.Visible = true; + this.Enabled = true; + ImageFromSelectedFile(true); + ImagefilePathText.Focus(); + } + } + } + + /// + /// 選択処理を終了してコントロールを隠す。 + /// + public void EndSelection() + { + if (this.Visible) + { + ImagefilePathText.CausesValidation = false; + + if (this.EndSelecting != null) + this.EndSelecting(this, EventArgs.Empty); + + this.Visible = false; + this.Enabled = false; + ClearImageSelectedPicture(); + + ImagefilePathText.CausesValidation = true; + } + } + + /// + /// 選択された投稿先名と投稿ファイル名を取得する。 + /// + public bool TryGetSelectedMedia(out string imageService, out string[] imagePaths) + { + var validPaths = ImagePageCombo.Items.Cast() + .Where(x => x.IsValid).Select(x => x.Path).ToArray(); + + if (validPaths.Length > 0 && + ImageServiceCombo.SelectedIndex > -1) + { + var serviceName = this.ServiceName; + if (MessageBox.Show(string.Format(Properties.Resources.PostPictureConfirm1, serviceName, validPaths.Length), + Properties.Resources.PostPictureConfirm2, + MessageBoxButtons.OKCancel, + MessageBoxIcon.Question, + MessageBoxDefaultButton.Button1) + == DialogResult.OK) + { + imageService = serviceName; + imagePaths = validPaths; + EndSelection(); + SetImagePageCombo(); + return true; + } + } + else + { + MessageBox.Show(Properties.Resources.PostPictureWarn1, Properties.Resources.PostPictureWarn2); + } + + EndSelection(); + imageService = null; + imagePaths = null; + return false; + } + + private void FilePickButton_Click(object sender, EventArgs e) + { + if (FilePickDialog == null || string.IsNullOrEmpty(this.ServiceName)) return; + FilePickDialog.Filter = this.pictureService[this.ServiceName].GetFileOpenDialogFilter(); + FilePickDialog.Title = Properties.Resources.PickPictureDialog1; + FilePickDialog.FileName = ""; + + if (this.FilePickDialogOpening != null) + this.FilePickDialogOpening(this, EventArgs.Empty); + + try + { + if (FilePickDialog.ShowDialog() == DialogResult.Cancel) return; + } + finally + { + if (this.FilePickDialogClosed != null) + this.FilePickDialogClosed(this, EventArgs.Empty); + } + + ImagefilePathText.Text = FilePickDialog.FileName; + ImageFromSelectedFile(false); + } + + private void ImagefilePathText_Validating(object sender, CancelEventArgs e) + { + if (ImageCancelButton.Focused) + { + ImagefilePathText.CausesValidation = false; + return; + } + + ImageFromSelectedFile(false); + } + + private void ImageFromSelectedFile(bool suppressMsgBox) + { + this.ClearImageSelectedPicture(); + + try + { + ImagefilePathText.Text = ImagefilePathText.Text.Trim(); + var fileName = ImagefilePathText.Text; + var serviceName = this.ServiceName; + if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(serviceName)) + { + ClearSelectedImagePage(); + return; + } + + FileInfo fl = new FileInfo(fileName); + string ext = fl.Extension; + var imageService = this.pictureService[serviceName]; + + if (!imageService.CheckValidExtension(ext)) + { + //画像以外の形式 + ClearSelectedImagePage(); + if (!suppressMsgBox) + { + MessageBox.Show( + string.Format(Properties.Resources.PostPictureWarn3, serviceName, MakeAvailableServiceText(ext, fl.Length), ext), + Properties.Resources.PostPictureWarn4, + MessageBoxButtons.OK, + MessageBoxIcon.Warning); + } + return; + } + + if (!imageService.CheckValidFilesize(ext, fl.Length)) + { + // ファイルサイズが大きすぎる + ClearSelectedImagePage(); + if (!suppressMsgBox) + { + MessageBox.Show( + string.Format(Properties.Resources.PostPictureWarn5, serviceName, MakeAvailableServiceText(ext, fl.Length)), + Properties.Resources.PostPictureWarn4, + MessageBoxButtons.OK, + MessageBoxIcon.Warning); + } + return; + } + + switch (imageService.GetFileType(ext)) + { + case MyCommon.UploadFileType.Picture: + using (var fs = File.OpenRead(fileName)) + { + ImageSelectedPicture.Image = MemoryImage.CopyFromStream(fs); + } + SetSelectedImagePage(fileName, MyCommon.UploadFileType.Picture); + break; + case MyCommon.UploadFileType.MultiMedia: + SetSelectedImagePage(fileName, MyCommon.UploadFileType.MultiMedia); + break; + default: + ClearSelectedImagePage(); + break; + } + } + catch (FileNotFoundException) + { + ClearSelectedImagePage(); + if (!suppressMsgBox) MessageBox.Show("File not found."); + } + catch (Exception) + { + ClearSelectedImagePage(); + if (!suppressMsgBox) MessageBox.Show("The type of this file is not image."); + } + } + + private string MakeAvailableServiceText(string ext, long fileSize) + { + var text = string.Join(", ", + ImageServiceCombo.Items.Cast() + .Where(x => !string.IsNullOrEmpty(x) && this.pictureService[x].CheckValidFilesize(ext, fileSize))); + + if (string.IsNullOrEmpty(text)) + return Properties.Resources.PostPictureWarn6; + + return text; + } + + private void ClearImageSelectedPicture() + { + var oldImage = this.ImageSelectedPicture.Image; + if (oldImage != null) + { + this.ImageSelectedPicture.Image = null; + oldImage.Dispose(); + } + + this.ImageSelectedPicture.ShowInitialImage(); + } + + private void ImageCancelButton_Click(object sender, EventArgs e) + { + EndSelection(); + } + + private void ImageSelection_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Escape) + { + EndSelection(); + } + } + + private void ImageSelection_KeyPress(object sender, KeyPressEventArgs e) + { + if (Convert.ToInt32(e.KeyChar) == 0x1B) + { + ImagefilePathText.CausesValidation = false; + e.Handled = true; + } + } + + private void ImageSelection_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) + { + if (e.KeyCode == Keys.Escape) + { + ImagefilePathText.CausesValidation = false; + } + } + + private void SetImageServiceCombo() + { + using (ControlTransaction.Update(ImageServiceCombo)) + { + string svc = ""; + if (ImageServiceCombo.SelectedIndex > -1) svc = ImageServiceCombo.Text; + ImageServiceCombo.Items.Clear(); + + // Add service names to combobox + foreach (var key in pictureService.Keys) + { + ImageServiceCombo.Items.Add(key); + } + + SelectImageServiceComboItem(svc); + } + } + + private void SelectImageServiceComboItem(string svc, int? index = null) + { + int idx; + if (string.IsNullOrEmpty(svc)) + { + idx = index ?? 0; + } + else + { + idx = ImageServiceCombo.Items.IndexOf(svc); + if (idx == -1) idx = index ?? 0; + } + + try + { + ImageServiceCombo.SelectedIndex = idx; + } + catch (ArgumentOutOfRangeException) + { + ImageServiceCombo.SelectedIndex = 0; + } + } + + private void ImageServiceCombo_SelectedIndexChanged(object sender, EventArgs e) + { + if (this.Visible) + { + var serviceName = this.ServiceName; + if (!string.IsNullOrEmpty(serviceName)) + { + if (ImagePageCombo.Items.Count > 0) + { + // 画像が選択された投稿先に対応しているかをチェックする + // TODO: 複数の選択済み画像があるなら、できれば全てを再チェックしたほうがいい + if (serviceName.Equals("Twitter")) + { + ValidateSelectedImagePage(); + } + else + { + if (ImagePageCombo.Items.Count > 1) + { + // 複数の選択済み画像のうち、1枚目のみを残す + SetImagePageCombo((SelectedMedia)ImagePageCombo.Items[0]); + } + else + { + ImagePageCombo.Enabled = false; + + try + { + FileInfo fi = new FileInfo(ImagefilePathText.Text.Trim()); + string ext = fi.Extension; + var imageService = this.pictureService[serviceName]; + if (!imageService.CheckValidFilesize(ext, fi.Length)) + { + ClearImageSelectedPicture(); + ClearSelectedImagePage(); + } + } + catch (Exception) + { + ClearImageSelectedPicture(); + ClearSelectedImagePage(); + } + } + } + } + } + } + + if (this.SelectedServiceChanged != null) + this.SelectedServiceChanged(this, EventArgs.Empty); + } + + private void SetImagePageCombo(SelectedMedia media = null) + { + using (ControlTransaction.Update(ImagePageCombo)) + { + ImagePageCombo.Enabled = false; + ImagePageCombo.Items.Clear(); + if (media != null) + { + ImagePageCombo.Items.Add(media); + ImagefilePathText.Text = media.Path; + } + else + { + ImagePageCombo.Items.Add(new SelectedMedia("1")); + ImagefilePathText.Text = ""; + } + ImagePageCombo.SelectedIndex = 0; + } + } + + private void AddNewImagePage(int selectedIndex) + { + if (this.ServiceName.Equals("Twitter") && selectedIndex < 3) + { + // 投稿先が Twitter であれば、最大 4 枚まで選択できるようにする + var count = ImagePageCombo.Items.Count; + if (selectedIndex == count - 1) + { + count++; + ImagePageCombo.Items.Add(new SelectedMedia(count.ToString())); + ImagePageCombo.Enabled = true; + } + } + } + + private void SetSelectedImagePage(string path, MyCommon.UploadFileType type) + { + var idx = ImagePageCombo.SelectedIndex; + var item = (SelectedMedia)ImagePageCombo.Items[idx]; + item.Path = path; + item.Type = type; + + AddNewImagePage(idx); + } + + private void ClearSelectedImagePage() + { + var item = (SelectedMedia)ImagePageCombo.SelectedItem; + item.Path = ""; + item.Type = MyCommon.UploadFileType.Invalid; + ImagefilePathText.Text = ""; + } + + private void ValidateSelectedImagePage() + { + var idx = ImagePageCombo.SelectedIndex; + var item = (SelectedMedia)ImagePageCombo.Items[idx]; + ImageServiceCombo.Enabled = (idx == 0); // idx == 0 以外では投稿先サービスを選べないようにする + ImagefilePathText.Text = item.Path; + ImageFromSelectedFile(true); + } + + private void ImagePageCombo_SelectedIndexChanged(object sender, EventArgs e) + { + ValidateSelectedImagePage(); + } + } +} diff --git a/OpenTween/MediaSelector.en.resx b/OpenTween/MediaSelector.en.resx new file mode 100644 index 00000000..5ee02f6b --- /dev/null +++ b/OpenTween/MediaSelector.en.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Service + + \ No newline at end of file diff --git a/OpenTween/MediaSelector.resx b/OpenTween/MediaSelector.resx new file mode 100644 index 00000000..89eafbc6 --- /dev/null +++ b/OpenTween/MediaSelector.resx @@ -0,0 +1,363 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Fill + + + NoControl + + + + 0, 0 + + + 608, 252 + + + Zoom + + + + 0 + + + ImageSelectedPicture + + + OpenTween.OTPictureBox, OpenTween, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null + + + $this + + + 0 + + + Fill + + + 61, 3 + + + 297, 19 + + + 1 + + + ImagefilePathText + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ImagePathPanel + + + 0 + + + Left + + + 3, 3 + + + 58, 20 + + + 0 + + + ImagePageCombo + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ImagePathPanel + + + 1 + + + Right + + + NoControl + + + 358, 3 + + + 23, 22 + + + 2 + + + ... + + + FilePickButton + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ImagePathPanel + + + 2 + + + Right + + + NoControl + + + 381, 3 + + + 61, 22 + + + 3 + + + 投稿先 + + + MiddleRight + + + Label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ImagePathPanel + + + 3 + + + Right + + + TwitPic + + + 442, 3 + + + 103, 20 + + + 4 + + + ImageServiceCombo + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ImagePathPanel + + + 4 + + + Right + + + NoControl + + + 545, 3 + + + 60, 22 + + + 5 + + + Cancel + + + ImageCancelButton + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ImagePathPanel + + + 5 + + + Bottom + + + 0, 252 + + + 3, 3, 3, 3 + + + 608, 28 + + + 0 + + + ImagePathPanel + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + True + + + 96, 96 + + + 608, 280 + + + MediaSelector + + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/OpenTween/MediaSelector.zh-CHS.resx b/OpenTween/MediaSelector.zh-CHS.resx new file mode 100644 index 00000000..ce822344 --- /dev/null +++ b/OpenTween/MediaSelector.zh-CHS.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 上传到 + + + 取消 + + \ No newline at end of file diff --git a/OpenTween/OpenTween.csproj b/OpenTween/OpenTween.csproj index fa8ff0cb..2a06caf5 100644 --- a/OpenTween/OpenTween.csproj +++ b/OpenTween/OpenTween.csproj @@ -133,6 +133,12 @@ InputDialog.cs + + UserControl + + + MediaSelector.cs + Form @@ -464,6 +470,15 @@ ListManage.cs + + MediaSelector.cs + + + MediaSelector.cs + + + MediaSelector.cs + ActionPanel.cs diff --git a/OpenTween/Tween.Designer.cs b/OpenTween/Tween.Designer.cs index 297f1c82..e3125116 100644 --- a/OpenTween/Tween.Designer.cs +++ b/OpenTween/Tween.Designer.cs @@ -65,15 +65,7 @@ this.ToolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); this.DeleteTabMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.TabImage = new System.Windows.Forms.ImageList(this.components); - this.ImageSelectionPanel = new System.Windows.Forms.Panel(); - this.ImageSelectedPicture = new OpenTween.OTPictureBox(); - this.ImagePathPanel = new System.Windows.Forms.Panel(); - this.ImagefilePathText = new System.Windows.Forms.TextBox(); - this.ImagePageCombo = new System.Windows.Forms.ComboBox(); - this.FilePickButton = new System.Windows.Forms.Button(); - this.Label2 = new System.Windows.Forms.Label(); - this.ImageServiceCombo = new System.Windows.Forms.ComboBox(); - this.ImageCancelButton = new System.Windows.Forms.Button(); + this.ImageSelector = new MediaSelector(); this.ProfilePanel = new System.Windows.Forms.Panel(); this.SplitContainer3 = new System.Windows.Forms.SplitContainer(); this.SplitContainer2 = new System.Windows.Forms.SplitContainer(); @@ -335,9 +327,7 @@ this.SplitContainer1.SuspendLayout(); this.TimelinePanel.SuspendLayout(); this.ContextMenuTabProperty.SuspendLayout(); - this.ImageSelectionPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ImageSelectedPicture)).BeginInit(); - this.ImagePathPanel.SuspendLayout(); + this.ImageSelector.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.SplitContainer3)).BeginInit(); this.SplitContainer3.Panel1.SuspendLayout(); this.SplitContainer3.Panel2.SuspendLayout(); @@ -537,7 +527,7 @@ // resources.ApplyResources(this.SplitContainer1.Panel1, "SplitContainer1.Panel1"); this.SplitContainer1.Panel1.Controls.Add(this.TimelinePanel); - this.SplitContainer1.Panel1.Controls.Add(this.ImageSelectionPanel); + this.SplitContainer1.Panel1.Controls.Add(this.ImageSelector); this.SplitContainer1.Panel1.Controls.Add(this.ProfilePanel); this.ToolTip1.SetToolTip(this.SplitContainer1.Panel1, resources.GetString("SplitContainer1.Panel1.ToolTip")); // @@ -687,93 +677,16 @@ resources.ApplyResources(this.TabImage, "TabImage"); this.TabImage.TransparentColor = System.Drawing.Color.Transparent; // - // ImageSelectionPanel - // - resources.ApplyResources(this.ImageSelectionPanel, "ImageSelectionPanel"); - this.ImageSelectionPanel.Controls.Add(this.ImageSelectedPicture); - this.ImageSelectionPanel.Controls.Add(this.ImagePathPanel); - this.ImageSelectionPanel.Name = "ImageSelectionPanel"; - this.ToolTip1.SetToolTip(this.ImageSelectionPanel, resources.GetString("ImageSelectionPanel.ToolTip")); - this.ImageSelectionPanel.VisibleChanged += new System.EventHandler(this.ImageSelectionPanel_VisibleChanged); - // - // ImageSelectedPicture - // - resources.ApplyResources(this.ImageSelectedPicture, "ImageSelectedPicture"); - this.ImageSelectedPicture.Name = "ImageSelectedPicture"; - this.ImageSelectedPicture.TabStop = false; - this.ToolTip1.SetToolTip(this.ImageSelectedPicture, resources.GetString("ImageSelectedPicture.ToolTip")); - // - // ImagePathPanel - // - resources.ApplyResources(this.ImagePathPanel, "ImagePathPanel"); - this.ImagePathPanel.Controls.Add(this.ImagefilePathText); - this.ImagePathPanel.Controls.Add(this.ImagePageCombo); - this.ImagePathPanel.Controls.Add(this.FilePickButton); - this.ImagePathPanel.Controls.Add(this.Label2); - this.ImagePathPanel.Controls.Add(this.ImageServiceCombo); - this.ImagePathPanel.Controls.Add(this.ImageCancelButton); - this.ImagePathPanel.Name = "ImagePathPanel"; - this.ToolTip1.SetToolTip(this.ImagePathPanel, resources.GetString("ImagePathPanel.ToolTip")); - // - // ImagefilePathText - // - resources.ApplyResources(this.ImagefilePathText, "ImagefilePathText"); - this.ImagefilePathText.Name = "ImagefilePathText"; - this.ToolTip1.SetToolTip(this.ImagefilePathText, resources.GetString("ImagefilePathText.ToolTip")); - this.ImagefilePathText.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ImageSelection_KeyDown); - this.ImagefilePathText.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ImageSelection_KeyPress); - this.ImagefilePathText.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.ImageSelection_PreviewKeyDown); - this.ImagefilePathText.Validating += new System.ComponentModel.CancelEventHandler(this.ImagefilePathText_Validating); - // - // ImagePageCombo - // - resources.ApplyResources(this.ImagePageCombo, "ImagePageCombo"); - this.ImagePageCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ImagePageCombo.FormattingEnabled = true; - this.ImagePageCombo.Name = "ImagePageCombo"; - this.ImagePageCombo.SelectedIndexChanged += new System.EventHandler(this.ImagePageCombo_SelectedIndexChanged); - this.ImagePageCombo.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ImageSelection_KeyDown); - this.ImagePageCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ImageSelection_KeyPress); - this.ImagePageCombo.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.ImageSelection_PreviewKeyDown); - // - // FilePickButton - // - resources.ApplyResources(this.FilePickButton, "FilePickButton"); - this.FilePickButton.Name = "FilePickButton"; - this.ToolTip1.SetToolTip(this.FilePickButton, resources.GetString("FilePickButton.ToolTip")); - this.FilePickButton.UseVisualStyleBackColor = true; - this.FilePickButton.Click += new System.EventHandler(this.FilePickButton_Click); - this.FilePickButton.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ImageSelection_KeyDown); - this.FilePickButton.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ImageSelection_KeyPress); - this.FilePickButton.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.ImageSelection_PreviewKeyDown); - // - // Label2 - // - resources.ApplyResources(this.Label2, "Label2"); - this.Label2.Name = "Label2"; - this.ToolTip1.SetToolTip(this.Label2, resources.GetString("Label2.ToolTip")); - // - // ImageServiceCombo - // - resources.ApplyResources(this.ImageServiceCombo, "ImageServiceCombo"); - this.ImageServiceCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ImageServiceCombo.FormattingEnabled = true; - this.ImageServiceCombo.Items.AddRange(new object[] { - resources.GetString("ImageServiceCombo.Items")}); - this.ImageServiceCombo.Name = "ImageServiceCombo"; - this.ToolTip1.SetToolTip(this.ImageServiceCombo, resources.GetString("ImageServiceCombo.ToolTip")); - this.ImageServiceCombo.SelectedIndexChanged += new System.EventHandler(this.ImageServiceCombo_SelectedIndexChanged); - this.ImageServiceCombo.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ImageSelection_KeyDown); - this.ImageServiceCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ImageSelection_KeyPress); - this.ImageServiceCombo.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.ImageSelection_PreviewKeyDown); - // - // ImageCancelButton - // - resources.ApplyResources(this.ImageCancelButton, "ImageCancelButton"); - this.ImageCancelButton.Name = "ImageCancelButton"; - this.ToolTip1.SetToolTip(this.ImageCancelButton, resources.GetString("ImageCancelButton.ToolTip")); - this.ImageCancelButton.UseVisualStyleBackColor = true; - this.ImageCancelButton.Click += new System.EventHandler(this.ImageCancelButton_Click); + // ImageSelector + // + resources.ApplyResources(this.ImageSelector, "ImageSelector"); + this.ImageSelector.Name = "ImageSelector"; + this.ImageSelector.BeginSelecting += new System.EventHandler(this.ImageSelector_BeginSelecting); + this.ImageSelector.EndSelecting += new System.EventHandler(this.ImageSelector_EndSelecting); + this.ImageSelector.FilePickDialogClosed += new System.EventHandler(ImageSelector_FilePickDialogClosed); + this.ImageSelector.FilePickDialogOpening += new System.EventHandler(ImageSelector_FilePickDialogOpening); + this.ImageSelector.SelectedServiceChanged += new System.EventHandler(this.ImageSelector_SelectedServiceChanged); + this.ImageSelector.VisibleChanged += new System.EventHandler(this.ImageSelector_VisibleChanged); // // ProfilePanel // @@ -2617,10 +2530,7 @@ this.SplitContainer1.ResumeLayout(false); this.TimelinePanel.ResumeLayout(false); this.ContextMenuTabProperty.ResumeLayout(false); - this.ImageSelectionPanel.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ImageSelectedPicture)).EndInit(); - this.ImagePathPanel.ResumeLayout(false); - this.ImagePathPanel.PerformLayout(); + this.ImageSelector.ResumeLayout(false); this.SplitContainer3.Panel1.ResumeLayout(false); this.SplitContainer3.Panel2.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.SplitContainer3)).EndInit(); @@ -2682,15 +2592,7 @@ internal System.Windows.Forms.ToolStripSeparator ToolStripSeparator11; internal System.Windows.Forms.ToolStripMenuItem DeleteTabMenuItem; internal System.Windows.Forms.ImageList TabImage; - internal System.Windows.Forms.Panel ImageSelectionPanel; - internal OTPictureBox ImageSelectedPicture; - internal System.Windows.Forms.Panel ImagePathPanel; - internal System.Windows.Forms.TextBox ImagefilePathText; - internal System.Windows.Forms.ComboBox ImagePageCombo; - internal System.Windows.Forms.Button FilePickButton; - internal System.Windows.Forms.Label Label2; - internal System.Windows.Forms.ComboBox ImageServiceCombo; - internal System.Windows.Forms.Button ImageCancelButton; + internal MediaSelector ImageSelector; internal System.Windows.Forms.Panel ProfilePanel; internal System.Windows.Forms.SplitContainer SplitContainer3; internal System.Windows.Forms.SplitContainer SplitContainer2; diff --git a/OpenTween/Tween.cs b/OpenTween/Tween.cs index 44f936d2..9d0fcec2 100644 --- a/OpenTween/Tween.cs +++ b/OpenTween/Tween.cs @@ -211,7 +211,6 @@ namespace OpenTween private bool _DoFavRetweetFlags = false; private bool osResumed = false; - private Dictionary pictureService; ////////////////////////////////////////////////////////////////////////////////////////////////////////// private string _postBrowserStatusText = ""; @@ -1016,11 +1015,7 @@ namespace OpenTween AllrepliesToolStripMenuItem.Checked = tw.AllAtReply; //画像投稿サービス - this.CreatePictureServices(); - SetImageServiceCombo(); - SetImagePageCombo(); - - SelectImageServiceComboItem(_cfgCommon.UseImageServiceName, _cfgCommon.UseImageService); + ImageSelector.Initialize(tw, _cfgCommon.UseImageServiceName, _cfgCommon.UseImageService); //ウィンドウ設定 this.ClientSize = _cfgLocal.FormSize; @@ -2113,7 +2108,7 @@ namespace OpenTween { if (StatusText.Text.Trim().Length == 0) { - if (!ImageSelectionPanel.Enabled) + if (!ImageSelector.Enabled) { DoRefresh(); return; @@ -2293,10 +2288,10 @@ namespace OpenTween args.status.inReplyToId = _reply_to_id; args.status.inReplyToName = _reply_to_name; - if (ImageSelectionPanel.Visible) + if (ImageSelector.Visible) { //画像投稿 - if (!TryGetSelectedMedia(out args.status.imageService, out args.status.imagePath)) + if (!ImageSelector.TryGetSelectedMedia(out args.status.imageService, out args.status.imagePath)) return; } @@ -2522,7 +2517,7 @@ namespace OpenTween } else { - var service = this.pictureService[args.status.imageService]; + var service = ImageSelector.GetService(args.status.imageService); if (args.status.imagePath.Length > 1 && args.status.imageService.Equals("Twitter")) { @@ -3073,7 +3068,9 @@ namespace OpenTween //_waitFollower = false if (SettingDialog.TwitterConfiguration.PhotoSizeLimit != 0) { - pictureService["Twitter"].Configuration("MaxUploadFilesize", SettingDialog.TwitterConfiguration.PhotoSizeLimit); + var service = ImageSelector.GetService("Twitter"); + if (service != null) + service.Configuration("MaxUploadFilesize", SettingDialog.TwitterConfiguration.PhotoSizeLimit); } this.PurgeListViewItemCache(); if (_curList != null) _curList.Refresh(); @@ -3930,7 +3927,8 @@ namespace OpenTween SettingDialog.ProxyPort, SettingDialog.ProxyUser, SettingDialog.ProxyPassword); - this.CreatePictureServices(); + + ImageSelector.Reset(tw); try { @@ -4133,7 +4131,6 @@ namespace OpenTween if (uid != tw.Username) this.doGetFollowersMenu(); - SetImageServiceCombo(); if (SettingDialog.IsNotifyUseGrowl) gh.RegisterGrowl(); try { @@ -5052,7 +5049,7 @@ namespace OpenTween // pLen += m.Result("${url}").Length - SettingDialog.TwitterConfiguration.ShortUrlLength; //} } - if (ImageSelectionPanel.Visible && !string.IsNullOrEmpty(this.ImageService)) + if (ImageSelector.Visible && !string.IsNullOrEmpty(ImageSelector.ServiceName)) { pLen -= SettingDialog.TwitterConfiguration.CharactersReservedPerMedia; } @@ -5797,7 +5794,7 @@ namespace OpenTween int idx = -1; DetailsListView lst = null; - if (ImageSelectionPanel.Enabled) + if (ImageSelector.Enabled) return; //現在タブから最終タブまで探索 @@ -7893,8 +7890,8 @@ namespace OpenTween _cfgCommon.AllAtReply = tw.AllAtReply; _cfgCommon.OpenUserTimeline = SettingDialog.OpenUserTimeline; _cfgCommon.ListCountApi = SettingDialog.ListCountApi; - _cfgCommon.UseImageService = ImageServiceCombo.SelectedIndex; - _cfgCommon.UseImageServiceName = this.ImageService; + _cfgCommon.UseImageService = ImageSelector.ServiceIndex; + _cfgCommon.UseImageServiceName = ImageSelector.ServiceName; _cfgCommon.ListDoubleClickAction = SettingDialog.ListDoubleClickAction; _cfgCommon.UserAppointUrl = SettingDialog.UserAppointUrl; _cfgCommon.HideDuplicatedRetweets = SettingDialog.HideDuplicatedRetweets; @@ -12327,9 +12324,9 @@ namespace OpenTween this._apiGauge.BorderSides = ToolStripStatusLabelBorderSides.Right; this.StatusStrip1.Items.Insert(2, this._apiGauge); - ImageSelectionPanel.Visible = false; - ImageSelectionPanel.Enabled = false; - this.ImageSelectedPicture.InitialImage = Properties.Resources.InitialImage; + this.ImageSelector.Visible = false; + this.ImageSelector.Enabled = false; + this.ImageSelector.FilePickDialog = OpenFileDialog1; this.ReplaceAppName(); } @@ -12385,105 +12382,21 @@ namespace OpenTween } #region "画像投稿" - private void CreatePictureServices() - { - if (this.pictureService != null) this.pictureService.Clear(); - this.pictureService = null; - this.pictureService = new Dictionary { - {"TwitPic", new TwitPic(tw)}, - {"img.ly", new imgly(tw)}, - {"yfrog", new yfrog(tw)}, - {"Twitter", new TwitterPhoto(tw)}, - {"ついっぷるフォト", new TwipplePhoto(tw)}, - {"Imgur", new Imgur(tw)}, - }; - } - - private class SelectedMedia - { - public string Path { get; set; } - public MyCommon.UploadFileType Type { get; set; } - public string Text { get; set; } - - public SelectedMedia(string path, MyCommon.UploadFileType type, string text) - { - this.Path = path; - this.Type = type; - this.Text = text; - } - - public SelectedMedia(string text) - : this("", MyCommon.UploadFileType.Invalid, text) - { - } - - public bool IsValid - { - get { return this.Type != MyCommon.UploadFileType.Invalid; } - } - - public override string ToString() - { - return this.Text; - } - } - private void ImageSelectMenuItem_Click(object sender, EventArgs e) { - if (ImageSelectionPanel.Visible) - { - CloseImageSelectionPanel(); - } + if (ImageSelector.Visible) + ImageSelector.EndSelection(); else - { - OpenImageSelectionPanel(); - ImageFromSelectedFile(true); - ImagefilePathText.Focus(); - } - } - - private void OpenImageSelectionPanel() - { - ImageSelectionPanel.Visible = true; - ImageSelectionPanel.Enabled = true; - TimelinePanel.Visible = false; - TimelinePanel.Enabled = false; - } - - private void CloseImageSelectionPanel() - { - ImagefilePathText.CausesValidation = false; - TimelinePanel.Visible = true; - TimelinePanel.Enabled = true; - ImageSelectionPanel.Visible = false; - ImageSelectionPanel.Enabled = false; - ((DetailsListView)ListTab.SelectedTab.Tag).Focus(); - ClearImageSelectedPicture(); - ImagefilePathText.CausesValidation = true; + ImageSelector.BeginSelection(); } private void SelectMedia_DragEnter(DragEventArgs e) { - string filename = ((string[])e.Data.GetData(DataFormats.FileDrop, false))[0]; - FileInfo fl = new FileInfo(filename); - string ext = fl.Extension; - - if (!string.IsNullOrEmpty(this.ImageService) && - this.pictureService[this.ImageService].CheckValidFilesize(ext, fl.Length)) + if (ImageSelector.HasUploadableService(((string[])e.Data.GetData(DataFormats.FileDrop, false))[0])) { e.Effect = DragDropEffects.Copy; return; } - foreach (string svc in ImageServiceCombo.Items) - { - if (!string.IsNullOrEmpty(svc) && - this.pictureService[svc].CheckValidFilesize(ext, fl.Length)) - { - //ImageServiceCombo.SelectedItem = svc; - e.Effect = DragDropEffects.Copy; - return; - } - } e.Effect = DragDropEffects.None; } @@ -12494,388 +12407,48 @@ namespace OpenTween private void SelectMedia_DragDrop(DragEventArgs e) { - if (!ImageSelectionPanel.Visible) - { - // 画像選択パネル非表示時のドロップは新規選択として扱う - SetImagePageCombo(); - } this.Activate(); this.BringToFront(); - OpenImageSelectionPanel(); - ImagefilePathText.Text = ((string[])e.Data.GetData(DataFormats.FileDrop, false))[0]; - ImageFromSelectedFile(false); + ImageSelector.BeginSelection(((string[])e.Data.GetData(DataFormats.FileDrop, false))[0]); StatusText.Focus(); } - private void FilePickButton_Click(object sender, EventArgs e) - { - if (string.IsNullOrEmpty(this.ImageService)) return; - OpenFileDialog1.Filter = this.pictureService[this.ImageService].GetFileOpenDialogFilter(); - OpenFileDialog1.Title = Properties.Resources.PickPictureDialog1; - OpenFileDialog1.FileName = ""; - - try - { - this.AllowDrop = false; - if (OpenFileDialog1.ShowDialog() == DialogResult.Cancel) return; - } - finally - { - this.AllowDrop = true; - } - - ImagefilePathText.Text = OpenFileDialog1.FileName; - ImageFromSelectedFile(false); - } - - private void ImagefilePathText_Validating(object sender, CancelEventArgs e) + private void ImageSelector_BeginSelecting(object sender, EventArgs e) { - if (ImageCancelButton.Focused) - { - ImagefilePathText.CausesValidation = false; - return; - } - - ImageFromSelectedFile(false); - } - - private void ImageFromSelectedFile(bool suppressMsgBox) - { - this.ClearImageSelectedPicture(); - - try - { - ImagefilePathText.Text = ImagefilePathText.Text.Trim(); - var fileName = ImagefilePathText.Text; - var serviceName = this.ImageService; - if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(serviceName)) - { - ClearSelectedImagePage(); - return; - } - - FileInfo fl = new FileInfo(fileName); - string ext = fl.Extension; - var imageService = this.pictureService[serviceName]; - - if (!imageService.CheckValidExtension(ext)) - { - //画像以外の形式 - ClearSelectedImagePage(); - if (!suppressMsgBox) - { - MessageBox.Show( - string.Format(Properties.Resources.PostPictureWarn3, serviceName, MakeAvailableServiceText(ext, fl.Length), ext), - Properties.Resources.PostPictureWarn4, - MessageBoxButtons.OK, - MessageBoxIcon.Warning); - } - return; - } - - if (!imageService.CheckValidFilesize(ext, fl.Length)) - { - // ファイルサイズが大きすぎる - ClearSelectedImagePage(); - if (!suppressMsgBox) - { - MessageBox.Show( - string.Format(Properties.Resources.PostPictureWarn5, serviceName, MakeAvailableServiceText(ext, fl.Length)), - Properties.Resources.PostPictureWarn4, - MessageBoxButtons.OK, - MessageBoxIcon.Warning); - } - return; - } - - switch (imageService.GetFileType(ext)) - { - case MyCommon.UploadFileType.Picture: - using (var fs = File.OpenRead(fileName)) - { - ImageSelectedPicture.Image = MemoryImage.CopyFromStream(fs); - } - SetSelectedImagePage(fileName, MyCommon.UploadFileType.Picture); - break; - case MyCommon.UploadFileType.MultiMedia: - SetSelectedImagePage(fileName, MyCommon.UploadFileType.MultiMedia); - break; - default: - ClearSelectedImagePage(); - break; - } - } - catch (FileNotFoundException) - { - ClearSelectedImagePage(); - if (!suppressMsgBox) MessageBox.Show("File not found."); - } - catch (Exception) - { - ClearSelectedImagePage(); - if (!suppressMsgBox) MessageBox.Show("The type of this file is not image."); - } - } - - private string MakeAvailableServiceText(string ext, long fileSize) - { - var text = string.Join(", ", - ImageServiceCombo.Items.Cast() - .Where(x => !string.IsNullOrEmpty(x) && this.pictureService[x].CheckValidFilesize(ext, fileSize))); - - if (string.IsNullOrEmpty(text)) - return Properties.Resources.PostPictureWarn6; - - return text; - } - - private void ClearImageSelectedPicture() - { - var oldImage = this.ImageSelectedPicture.Image; - if (oldImage != null) - { - this.ImageSelectedPicture.Image = null; - oldImage.Dispose(); - } - - this.ImageSelectedPicture.ShowInitialImage(); - } - - private void ImageCancelButton_Click(object sender, EventArgs e) - { - CloseImageSelectionPanel(); - } - - private void ImageSelection_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Escape) - { - CloseImageSelectionPanel(); - } - } - - private void ImageSelection_KeyPress(object sender, KeyPressEventArgs e) - { - if (Convert.ToInt32(e.KeyChar) == 0x1B) - { - ImagefilePathText.CausesValidation = false; - e.Handled = true; - } - } - - private void ImageSelection_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) - { - if (e.KeyCode == Keys.Escape) - { - ImagefilePathText.CausesValidation = false; - } - } - - private bool TryGetSelectedMedia(out string imageService, out string[] imagePath) - { - var validPaths = ImagePageCombo.Items.Cast() - .Where(x => x.IsValid).Select(x => x.Path).ToArray(); - - if (validPaths.Length > 0 && - ImageServiceCombo.SelectedIndex > -1) - { - var serviceName = this.ImageService; - if (MessageBox.Show(string.Format(Properties.Resources.PostPictureConfirm1, serviceName, validPaths.Length), - Properties.Resources.PostPictureConfirm2, - MessageBoxButtons.OKCancel, - MessageBoxIcon.Question, - MessageBoxDefaultButton.Button1) - == DialogResult.OK) - { - imageService = serviceName; - imagePath = validPaths; - CloseImageSelectionPanel(); - SetImagePageCombo(); - return true; - } - } - else - { - MessageBox.Show(Properties.Resources.PostPictureWarn1, Properties.Resources.PostPictureWarn2); - } - - CloseImageSelectionPanel(); - imageService = null; - imagePath = null; - return false; - } - - private void SetImageServiceCombo() - { - using (ControlTransaction.Update(ImageServiceCombo)) - { - string svc = ""; - if (ImageServiceCombo.SelectedIndex > -1) svc = ImageServiceCombo.SelectedItem.ToString(); - ImageServiceCombo.Items.Clear(); - - // Add service names to combobox - foreach (var key in pictureService.Keys) - { - ImageServiceCombo.Items.Add(key); - } - - SelectImageServiceComboItem(svc); - } + TimelinePanel.Visible = false; + TimelinePanel.Enabled = false; } - private void SelectImageServiceComboItem(string svc, int? index = null) + private void ImageSelector_EndSelecting(object sender, EventArgs e) { - int idx; - if (string.IsNullOrEmpty(svc)) - { - idx = index ?? 0; - } - else - { - idx = ImageServiceCombo.Items.IndexOf(svc); - if (idx == -1) idx = index ?? 0; - } - - try - { - ImageServiceCombo.SelectedIndex = idx; - } - catch (ArgumentOutOfRangeException) - { - ImageServiceCombo.SelectedIndex = 0; - } + TimelinePanel.Visible = true; + TimelinePanel.Enabled = true; + ((DetailsListView)ListTab.SelectedTab.Tag).Focus(); } - private string ImageService + private void ImageSelector_FilePickDialogOpening(object sender, EventArgs e) { - get { return ImageServiceCombo.SelectedItem.ToString(); } + this.AllowDrop = false; } - private void ImageServiceCombo_SelectedIndexChanged(object sender, EventArgs e) + private void ImageSelector_FilePickDialogClosed(object sender, EventArgs e) { - if (ImageSelectionPanel.Visible) - { - var serviceName = this.ImageService; - if (!string.IsNullOrEmpty(serviceName)) - { - var isTwitter = serviceName.Equals("Twitter"); - - if (ImagePageCombo.Items.Count > 0) - { - // 画像が選択された投稿先に対応しているかをチェックする - // TODO: 複数の選択済み画像があるなら、できれば全てを再チェックしたほうがいい - if (isTwitter) - { - ValidateSelectedImagePage(); - } - else - { - if (ImagePageCombo.Items.Count > 1) - { - // 複数の選択済み画像のうち、1枚目のみを残す - SetImagePageCombo((SelectedMedia)ImagePageCombo.Items[0]); - } - else - { - ImagePageCombo.Enabled = false; - - try - { - FileInfo fi = new FileInfo(ImagefilePathText.Text.Trim()); - string ext = fi.Extension; - var imageService = this.pictureService[serviceName]; - if (!imageService.CheckValidFilesize(ext, fi.Length)) - { - ClearImageSelectedPicture(); - ClearSelectedImagePage(); - } - } - catch (Exception) - { - ClearImageSelectedPicture(); - ClearSelectedImagePage(); - } - } - } - } - - _modifySettingCommon = true; - SaveConfigsAll(true); - - if (isTwitter) - this.StatusText_TextChanged(null, null); - } - } + this.AllowDrop = true; } - private void SetImagePageCombo(SelectedMedia media = null) + private void ImageSelector_SelectedServiceChanged(object sender, EventArgs e) { - using (ControlTransaction.Update(ImagePageCombo)) + if (ImageSelector.Visible) { - ImagePageCombo.Enabled = false; - ImagePageCombo.Items.Clear(); - if (media != null) - { - ImagePageCombo.Items.Add(media); - ImagefilePathText.Text = media.Path; - } - else - { - ImagePageCombo.Items.Add(new SelectedMedia("1")); - ImagefilePathText.Text = ""; - } - ImagePageCombo.SelectedIndex = 0; - } - } + _modifySettingCommon = true; + SaveConfigsAll(true); - private void AddNewImagePage(int selectedIndex) - { - if (this.ImageService.Equals("Twitter") && selectedIndex < 3) - { - // 投稿先が Twitter であれば、最大 4 枚まで選択できるようにする - var count = ImagePageCombo.Items.Count; - if (selectedIndex == count - 1) - { - count++; - ImagePageCombo.Items.Add(new SelectedMedia(count.ToString())); - ImagePageCombo.Enabled = true; - } + if (ImageSelector.ServiceName.Equals("Twitter")) + this.StatusText_TextChanged(null, null); } } - private void SetSelectedImagePage(string path, MyCommon.UploadFileType type) - { - var idx = ImagePageCombo.SelectedIndex; - var item = (SelectedMedia)ImagePageCombo.Items[idx]; - item.Path = path; - item.Type = type; - - AddNewImagePage(idx); - } - - private void ClearSelectedImagePage() - { - var item = (SelectedMedia)ImagePageCombo.SelectedItem; - item.Path = ""; - item.Type = MyCommon.UploadFileType.Invalid; - ImagefilePathText.Text = ""; - } - - private void ValidateSelectedImagePage() - { - var idx = ImagePageCombo.SelectedIndex; - var item = (SelectedMedia)ImagePageCombo.Items[idx]; - ImageServiceCombo.Enabled = (idx == 0); // idx == 0 以外では投稿先サービスを選べないようにする - ImagefilePathText.Text = item.Path; - ImageFromSelectedFile(true); - } - - private void ImagePageCombo_SelectedIndexChanged(object sender, EventArgs e) - { - ValidateSelectedImagePage(); - } - - private void ImageSelectionPanel_VisibleChanged(object sender, EventArgs e) + private void ImageSelector_VisibleChanged(object sender, EventArgs e) { this.StatusText_TextChanged(null, null); } diff --git a/OpenTween/Tween.en.resx b/OpenTween/Tween.en.resx index 97735efb..4116851f 100644 --- a/OpenTween/Tween.en.resx +++ b/OpenTween/Tween.en.resx @@ -292,60 +292,6 @@ - - 570, 114 - - - - - - 182, 22 - - - - - - 258, 4 - - - - - - 287, 4 - - - Service - - - - - - 363, 4 - - - - - - 491, 4 - - - - - - 0, 114 - - - 570, 35 - - - - - - 570, 149 - - - - 570, 149 diff --git a/OpenTween/Tween.resx b/OpenTween/Tween.resx index 8a81d328..b8bb04af 100644 --- a/OpenTween/Tween.resx +++ b/OpenTween/Tween.resx @@ -121,9 +121,6 @@ MenuItemSearchNext - - Right - 233, 24 @@ -146,9 +143,6 @@ ReadOpMenuItem - - Off - ToolStripContainer1.RightToolStripPanel @@ -161,9 +155,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Fill - HashToggleMenuItem @@ -194,9 +185,6 @@ ClearTbMenuItem - - Off - 4 @@ -288,9 +276,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 761, 35 - デバッグモード @@ -351,9 +336,6 @@ 301, 24 - - 29, 27 - @@ -363,9 +345,6 @@ 233, 24 - - Bottom - 新着通知表示(&Q) @@ -381,9 +360,6 @@ Post - - 478, 4 - URLからの全角文字列の切り離し @@ -393,9 +369,6 @@ FollowToolStripMenuItem - - ImageSelectedPicture - 0, 0 @@ -432,15 +405,9 @@ 0 - - 1 - HashStripSplitButton - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -453,9 +420,6 @@ 306, 24 - - 5 - 288, 24 @@ -489,9 +453,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 1 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -570,9 +531,6 @@ CreateTbMenuItem - - 4, 4, 4, 4 - 233, 24 @@ -615,13 +573,10 @@ 返信元ステータスを開く(&I) - - 0, 356 - FavoriteRetweetUnofficialMenuItem - + 1 @@ -630,9 +585,6 @@ 0 - - 4, 4, 4, 4 - 87 @@ -699,18 +651,12 @@ ListManageToolStripMenuItem - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 377, 24 System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - リスト管理(&L) @@ -774,9 +720,6 @@ フォーカスを発言欄へロックする - - ImageSelectionPanel - @@ -825,9 +768,6 @@ MatomeMenuItem - - Right - 削除(&D) @@ -867,7 +807,7 @@ - + Fill @@ -948,9 +888,6 @@ 0 - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - IdeographicSpaceToSpaceToolStripMenuItem @@ -1020,9 +957,6 @@ 306, 24 - - TwitPic - 2 @@ -1176,9 +1110,6 @@ ハッシュタグを固定(&H) - - 4, 0, 4, 0 - 5, 5, 5, 5 @@ -1200,13 +1131,10 @@ ユーザーのタイムラインを表示(&T) - - ImagefilePathText - lblLen - + 1 @@ -1218,9 +1146,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Fill - False @@ -1233,9 +1158,6 @@ 206, 24 - - ImagePathPanel - ToolStripSeparator41 @@ -1254,9 +1176,6 @@ TabMenuItem - - 4, 4 - Off @@ -1281,9 +1200,6 @@ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ユーザーのふぁぼられを開く @@ -1317,9 +1233,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ImageSelectionPanel - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1347,9 +1260,6 @@ 643, 22 - - - ApiUsageInfoMenuItem @@ -1362,9 +1272,6 @@ 279, 6 - - 5 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1401,9 +1308,6 @@ 306, 24 - - 4, 4, 4, 4 - プロフィール表示 @@ -1494,9 +1398,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 5 - Ctrl+I @@ -1506,9 +1407,6 @@ ファイル保存(&S) - - Off - SettingStripMenuItem @@ -1536,9 +1434,6 @@ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1704,12 +1599,6 @@ ToolStripSeparator32 - - 761, 356 - - - ImagePathPanel - SelectionAllContextMenuItem @@ -1764,9 +1653,6 @@ 203, 6 - - Left - ToolStripSeparator8 @@ -1830,9 +1716,6 @@ System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - MiddleRight - DebugModeToolStripMenuItem @@ -1854,9 +1737,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - OpenRterHomeMenuItem @@ -1872,21 +1752,12 @@ 288, 24 - - Off - - - ImageSelectionPanel - - - 4, 4, 4, 4 + + ImageSelector FriendshipMenuItem - - ImagePathPanel - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -1911,9 +1782,6 @@ NameLabel - - 0 - 279, 6 @@ -1947,7 +1815,7 @@ 元に戻す - + 0, 0 @@ -2043,18 +1911,12 @@ SplitContainer2 - - 4, 4, 4, 4 - None 210, 24 - - 2 - 全て選択(&A) @@ -2103,10 +1965,7 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 4, 4, 4, 4 - - + True @@ -2118,9 +1977,6 @@ 269, 24 - - ImagePageCombo - 7 @@ -2145,9 +2001,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 449, 4 - 203, 6 @@ -2160,9 +2013,6 @@ 306, 24 - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 相互フォロー状態表示(&R) @@ -2193,8 +2043,8 @@ 288, 24 - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + OpenTween.MediaSelector, OpenTween, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null 279, 6 @@ -2223,9 +2073,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 - MS UI Gothic, 9pt, style=Bold @@ -2298,9 +2145,6 @@ UserFavorareToolStripMenuItem - - Off - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -2310,9 +2154,6 @@ アイコンキャッシュ使用状況 - - 4, 4, 4, 4 - 206, 24 @@ -2322,9 +2163,6 @@ 0 - - 76, 27 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -2334,18 +2172,12 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 0 - OpenStatusOpMenuItem ToolStripSeparator6 - - 4, 0, 4, 0 - DM送信(&M) @@ -2388,9 +2220,6 @@ SearchWikipediaContextMenuItem - - 72, 27 - 282, 24 @@ -2403,9 +2232,6 @@ LockListFileMenuItem - - 3 - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -2427,9 +2253,6 @@ 2 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -2496,9 +2319,6 @@ 279, 6 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -2511,7 +2331,7 @@ IdFilterAddMenuItem - + 4, 4, 4, 4 @@ -2565,9 +2385,6 @@ System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ToolStripSeparator5 @@ -2676,9 +2493,6 @@ Fill - - - %AppName% ウェブサイト(&H) @@ -2721,9 +2535,6 @@ False - - 1 - Ctrl+Shift+B @@ -2763,15 +2574,12 @@ 4, 4, 4, 4 - + SplitContainer1.Panel1 2 - - Cancel - このユーザーのTLを取得(&F) @@ -2799,9 +2607,6 @@ 285, 6 - - 2 - ステータスを開く(&O) @@ -2814,9 +2619,6 @@ 288, 24 - - Zoom - 233, 24 @@ -2895,9 +2697,6 @@ SettingFileMenuItem - - 75, 27 - TinyURLToolStripMenuItem @@ -2952,9 +2751,6 @@ SplitContainer2.Panel2 - - FilePickButton - 振り分けルール編集(&F)... @@ -3015,9 +2811,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 - 203, 6 @@ -3048,9 +2841,6 @@ 抽出条件入力(&Q) - - 682, 4 - 203, 6 @@ -3210,9 +3000,6 @@ 206, 24 - - Right - None @@ -3264,9 +3051,6 @@ 282, 24 - - 76, 4 - ToolStripSeparator33 @@ -3294,9 +3078,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 4 - 87, 23 @@ -3330,12 +3111,6 @@ 4, 4, 4, 4 - - 554, 4 - - - Right - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -3423,9 +3198,6 @@ MenuItemFile - - ImagePathPanel - 233, 24 @@ -3441,9 +3213,6 @@ 新着時リスト固定(&L) - - ImageServiceCombo - @@ -3593,9 +3362,6 @@ ID振分ルール作成(&I) - - ImagePathPanel - 282, 24 @@ -3617,9 +3383,6 @@ タブ名変更(&R) - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 0 @@ -3638,10 +3401,7 @@ SearchAtPostsDetailToolStripMenuItem - - ImageCancelButton - - + False @@ -3674,15 +3434,6 @@ ToolStripContainer1 - - 4 - - - 0 - - - ImagePathPanel - ToolStripSeparator17 @@ -4007,9 +3758,6 @@ EndFileMenuItem - - ImagePathPanel - ToolStripContainer1 @@ -4097,9 +3845,6 @@ ShowFriendShipToolStripMenuItem - - 3 - SplitContainer1 @@ -4151,9 +3896,6 @@ Horizontal - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - UnreadMngTbMenuItem @@ -4190,9 +3932,6 @@ SplitContainer2.Panel1 - - Label2 - ToolStripSeparator28 @@ -4208,13 +3947,10 @@ UreadManageMenuItem - - 投稿先 - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 761, 391 @@ -4277,9 +4013,6 @@ Alt+R - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -4307,9 +4040,6 @@ TraceOut出力 - - 128, 23 - 0, 0 @@ -4400,9 +4130,6 @@ - - OpenTween.OTPictureBox, OpenTween, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null - ユーザーのタイムラインを表示 @@ -4424,9 +4151,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 373, 22 - DeleteStripMenuItem @@ -4445,9 +4169,6 @@ UxnuMenuItem - - ... - 765, 570 diff --git a/OpenTween/Tween.zh-CHS.resx b/OpenTween/Tween.zh-CHS.resx index a13748be..f2a8062f 100644 --- a/OpenTween/Tween.zh-CHS.resx +++ b/OpenTween/Tween.zh-CHS.resx @@ -241,12 +241,6 @@ 186, 207 - - 上传到 - - - 取消 - 170, 22