// ページ番号が初期化された状態
var pages = mediaSelector.ImagePageCombo.Items;
Assert.Equal(new[] { "1" }, pages.Cast<object>().Select(x => x.ToString()));
+
+ // 代替テキストの入力欄が表示された状態
+ Assert.True(mediaSelector.AlternativeTextPanel.Visible);
}
}
// ページ番号が初期化された状態
var pages = mediaSelector.ImagePageCombo.Items;
Assert.Equal(new[] { "1" }, pages.Cast<object>().Select(x => x.ToString()));
+
+ // 代替テキストの入力欄が非表示の状態
+ Assert.False(mediaSelector.AlternativeTextPanel.Visible);
}
}
}
[Fact]
+ public void PageChange_AlternativeTextTest()
+ {
+ using (var twitter = new Twitter())
+ using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false })
+ {
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter");
+
+ var images = new[] { "Resources/re.gif", "Resources/re1.png" };
+ mediaSelector.BeginSelection(images);
+
+ // 1 ページ目
+ mediaSelector.ImagePageCombo.SelectedIndex = 0;
+ mediaSelector.AlternativeTextBox.Text = "Page 1";
+
+ // 2 ページ目
+ mediaSelector.ImagePageCombo.SelectedIndex = 1;
+ mediaSelector.AlternativeTextBox.Text = "Page 2";
+
+ // 3 ページ目 (新規ページ)
+ mediaSelector.ImagePageCombo.SelectedIndex = 2;
+ mediaSelector.AlternativeTextBox.Text = "Page 3";
+
+ mediaSelector.ImagePageCombo.SelectedIndex = 0;
+ Assert.Equal("Page 1", mediaSelector.AlternativeTextBox.Text);
+
+ mediaSelector.ImagePageCombo.SelectedIndex = 1;
+ Assert.Equal("Page 2", mediaSelector.AlternativeTextBox.Text);
+
+ // 画像が指定されていないページは入力した代替テキストも保持されない
+ mediaSelector.ImagePageCombo.SelectedIndex = 2;
+ Assert.Equal("", mediaSelector.AlternativeTextBox.Text);
+ }
+ }
+
+ [Fact]
public void PageChange_ImageDisposeTest()
{
using (var twitter = new Twitter())
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.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.AlternativeTextPanel = new System.Windows.Forms.Panel();
+ this.AlternativeTextBox = new System.Windows.Forms.TextBox();
+ this.AlternativeTextLabel = new System.Windows.Forms.Label();
+ this.ImageSelectedPicture = new OpenTween.OTPictureBox();
this.ImagePathPanel.SuspendLayout();
+ this.AlternativeTextPanel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.ImageSelectedPicture)).BeginInit();
this.SuspendLayout();
//
- // ImageSelectedPicture
- //
- resources.ApplyResources(this.ImageSelectedPicture, "ImageSelectedPicture");
- this.ImageSelectedPicture.Name = "ImageSelectedPicture";
- this.ImageSelectedPicture.TabStop = false;
- //
// ImagePathPanel
//
this.ImagePathPanel.Controls.Add(this.ImagefilePathText);
this.ImageCancelButton.UseVisualStyleBackColor = true;
this.ImageCancelButton.Click += new System.EventHandler(this.ImageCancelButton_Click);
//
+ // AlternativeTextPanel
+ //
+ resources.ApplyResources(this.AlternativeTextPanel, "AlternativeTextPanel");
+ this.AlternativeTextPanel.Controls.Add(this.AlternativeTextBox);
+ this.AlternativeTextPanel.Controls.Add(this.AlternativeTextLabel);
+ this.AlternativeTextPanel.Name = "AlternativeTextPanel";
+ //
+ // AlternativeTextBox
+ //
+ resources.ApplyResources(this.AlternativeTextBox, "AlternativeTextBox");
+ this.AlternativeTextBox.Name = "AlternativeTextBox";
+ this.AlternativeTextBox.TextChanged += new System.EventHandler(this.AlternativeTextBox_TextChanged);
+ //
+ // AlternativeTextLabel
+ //
+ resources.ApplyResources(this.AlternativeTextLabel, "AlternativeTextLabel");
+ this.AlternativeTextLabel.Name = "AlternativeTextLabel";
+ //
+ // ImageSelectedPicture
+ //
+ resources.ApplyResources(this.ImageSelectedPicture, "ImageSelectedPicture");
+ this.ImageSelectedPicture.Name = "ImageSelectedPicture";
+ this.ImageSelectedPicture.TabStop = false;
+ //
// MediaSelector
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Controls.Add(this.ImageSelectedPicture);
+ this.Controls.Add(this.AlternativeTextPanel);
this.Controls.Add(this.ImagePathPanel);
this.Name = "MediaSelector";
- ((System.ComponentModel.ISupportInitialize)(this.ImageSelectedPicture)).EndInit();
this.ImagePathPanel.ResumeLayout(false);
this.ImagePathPanel.PerformLayout();
+ this.AlternativeTextPanel.ResumeLayout(false);
+ this.AlternativeTextPanel.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.ImageSelectedPicture)).EndInit();
this.ResumeLayout(false);
+ this.PerformLayout();
}
internal System.Windows.Forms.Label Label2;
internal System.Windows.Forms.ComboBox ImageServiceCombo;
internal System.Windows.Forms.Button ImageCancelButton;
+ internal System.Windows.Forms.Panel AlternativeTextPanel;
+ internal System.Windows.Forms.TextBox AlternativeTextBox;
+ internal System.Windows.Forms.Label AlternativeTextLabel;
}
}
}
}
+ public string AltText => this.Item?.AltText ?? "";
+
public override string ToString()
{
return this.Text;
if (count == 1)
{
ImagefilePathText.Text = items[0].Path;
+ AlternativeTextBox.Text = items[0].AltText;
ImageFromSelectedFile(items[0], false);
}
else
for (int i = 0; i < count; i++)
{
var index = ImagePageCombo.Items.Count - 1;
- if (index == 0) ImagefilePathText.Text = items[i].Path;
+ if (index == 0)
+ {
+ ImagefilePathText.Text = items[i].Path;
+ AlternativeTextBox.Text = items[i].AltText;
+ }
ImageFromSelectedFile(index, items[i], false);
}
}
media.Item = null;
item = CreateFileMediaItem(path, noMsgBox);
+ item.AltText = AlternativeTextBox.Text;
}
ImagefilePathText.Text = path;
{
ImageServiceCombo.SelectedIndex = 0;
}
+
+ this.UpdateAltTextPanelVisible();
}
+ private void UpdateAltTextPanelVisible()
+ => this.AlternativeTextPanel.Visible = this.SelectedService.CanUseAltText;
+
private void ImageServiceCombo_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.Visible)
var imageService = this.SelectedService;
if (imageService != null)
{
+ this.UpdateAltTextPanelVisible();
+
if (ImagePageCombo.Items.Count > 0)
{
// 画像が選択された投稿先に対応しているかをチェックする
ImagePageCombo.Items.Add(media);
ImagefilePathText.Text = media.Path;
+ AlternativeTextBox.Text = media.AltText;
ImagePageCombo.SelectedIndex = 0;
}
media.Item = null;
media.Type = MyCommon.UploadFileType.Invalid;
- if (index == selectedIndex) ImagefilePathText.Text = "";
+ if (index == selectedIndex)
+ {
+ ImagefilePathText.Text = "";
+ AlternativeTextBox.Text = "";
+ }
}
private void ValidateSelectedImagePage()
var media = (SelectedMedia)ImagePageCombo.Items[idx];
ImageServiceCombo.Enabled = (idx == 0); // idx == 0 以外では投稿先サービスを選べないようにする
ImagefilePathText.Text = media.Path;
+ AlternativeTextBox.Text = media.AltText;
ImageFromSelectedFile(media.Item, true);
}
{
ValidateSelectedImagePage();
}
+
+ private void AlternativeTextBox_TextChanged(object sender, EventArgs e)
+ {
+ var selectedMedia = (SelectedMedia)this.ImagePageCombo.SelectedItem;
+ if (selectedMedia.Item == null)
+ return;
+
+ selectedMedia.Item.AltText = this.AlternativeTextBox.Text;
+ }
}
}
<data name="Label2.Text" xml:space="preserve">
<value>Service</value>
</data>
+ <data name="AlternativeTextLabel.Text" xml:space="preserve">
+ <value>&Alternative text:</value>
+ </data>
</root>
\ No newline at end of file
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
- <data name="ImageSelectedPicture.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
- <value>Fill</value>
- </data>
- <data name="ImageSelectedPicture.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
- <value>NoControl</value>
- </data>
- <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
- <data name="ImageSelectedPicture.Location" type="System.Drawing.Point, System.Drawing">
- <value>0, 0</value>
- </data>
- <data name="ImageSelectedPicture.Size" type="System.Drawing.Size, System.Drawing">
- <value>608, 252</value>
- </data>
- <data name="ImageSelectedPicture.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
- <value>Zoom</value>
- </data>
- <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
- <data name="ImageSelectedPicture.TabIndex" type="System.Int32, mscorlib">
- <value>0</value>
- </data>
- <data name=">>ImageSelectedPicture.Name" xml:space="preserve">
- <value>ImageSelectedPicture</value>
- </data>
- <data name=">>ImageSelectedPicture.Type" xml:space="preserve">
- <value>OpenTween.OTPictureBox, OpenTween, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null</value>
- </data>
- <data name=">>ImageSelectedPicture.Parent" xml:space="preserve">
- <value>$this</value>
- </data>
- <data name=">>ImageSelectedPicture.ZOrder" xml:space="preserve">
- <value>0</value>
- </data>
<data name="ImagefilePathText.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="ImagefilePathText.Location" type="System.Drawing.Point, System.Drawing">
<value>61, 3</value>
</data>
<data name="ImagefilePathText.Size" type="System.Drawing.Size, System.Drawing">
<value>297, 19</value>
</data>
+ <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ImagefilePathText.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<value>$this</value>
</data>
<data name=">>ImagePathPanel.ZOrder" xml:space="preserve">
+ <value>2</value>
+ </data>
+ <data name="AlternativeTextPanel.AutoSize" type="System.Boolean, mscorlib">
+ <value>True</value>
+ </data>
+ <data name="AlternativeTextBox.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+ <value>Top, Left, Right</value>
+ </data>
+ <data name="AlternativeTextBox.Location" type="System.Drawing.Point, System.Drawing">
+ <value>109, 3</value>
+ </data>
+ <data name="AlternativeTextBox.Size" type="System.Drawing.Size, System.Drawing">
+ <value>496, 19</value>
+ </data>
+ <data name="AlternativeTextBox.TabIndex" type="System.Int32, mscorlib">
+ <value>1</value>
+ </data>
+ <data name=">>AlternativeTextBox.Name" xml:space="preserve">
+ <value>AlternativeTextBox</value>
+ </data>
+ <data name=">>AlternativeTextBox.Type" xml:space="preserve">
+ <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name=">>AlternativeTextBox.Parent" xml:space="preserve">
+ <value>AlternativeTextPanel</value>
+ </data>
+ <data name=">>AlternativeTextBox.ZOrder" xml:space="preserve">
+ <value>0</value>
+ </data>
+ <data name="AlternativeTextLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+ <value>Top, Bottom, Left</value>
+ </data>
+ <data name="AlternativeTextLabel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+ <value>NoControl</value>
+ </data>
+ <data name="AlternativeTextLabel.Location" type="System.Drawing.Point, System.Drawing">
+ <value>3, 3</value>
+ </data>
+ <data name="AlternativeTextLabel.Size" type="System.Drawing.Size, System.Drawing">
+ <value>100, 19</value>
+ </data>
+ <data name="AlternativeTextLabel.TabIndex" type="System.Int32, mscorlib">
+ <value>0</value>
+ </data>
+ <data name="AlternativeTextLabel.Text" xml:space="preserve">
+ <value>代替テキスト(&A):</value>
+ </data>
+ <data name="AlternativeTextLabel.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
+ <value>MiddleRight</value>
+ </data>
+ <data name=">>AlternativeTextLabel.Name" xml:space="preserve">
+ <value>AlternativeTextLabel</value>
+ </data>
+ <data name=">>AlternativeTextLabel.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name=">>AlternativeTextLabel.Parent" xml:space="preserve">
+ <value>AlternativeTextPanel</value>
+ </data>
+ <data name=">>AlternativeTextLabel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
+ <data name="AlternativeTextPanel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+ <value>Bottom</value>
+ </data>
+ <data name="AlternativeTextPanel.Location" type="System.Drawing.Point, System.Drawing">
+ <value>0, 227</value>
+ </data>
+ <data name="AlternativeTextPanel.Size" type="System.Drawing.Size, System.Drawing">
+ <value>608, 25</value>
+ </data>
+ <data name="AlternativeTextPanel.TabIndex" type="System.Int32, mscorlib">
+ <value>2</value>
+ </data>
+ <data name="AlternativeTextPanel.Visible" type="System.Boolean, mscorlib">
+ <value>False</value>
+ </data>
+ <data name=">>AlternativeTextPanel.Name" xml:space="preserve">
+ <value>AlternativeTextPanel</value>
+ </data>
+ <data name=">>AlternativeTextPanel.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name=">>AlternativeTextPanel.Parent" xml:space="preserve">
+ <value>$this</value>
+ </data>
+ <data name=">>AlternativeTextPanel.ZOrder" xml:space="preserve">
+ <value>1</value>
+ </data>
+ <data name="ImageSelectedPicture.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+ <value>Fill</value>
+ </data>
+ <data name="ImageSelectedPicture.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+ <value>NoControl</value>
+ </data>
+ <data name="ImageSelectedPicture.Location" type="System.Drawing.Point, System.Drawing">
+ <value>0, 0</value>
+ </data>
+ <data name="ImageSelectedPicture.Size" type="System.Drawing.Size, System.Drawing">
+ <value>608, 227</value>
+ </data>
+ <data name="ImageSelectedPicture.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
+ <value>Zoom</value>
+ </data>
+ <data name="ImageSelectedPicture.TabIndex" type="System.Int32, mscorlib">
+ <value>0</value>
+ </data>
+ <data name=">>ImageSelectedPicture.Name" xml:space="preserve">
+ <value>ImageSelectedPicture</value>
+ </data>
+ <data name=">>ImageSelectedPicture.Type" xml:space="preserve">
+ <value>OpenTween.OTPictureBox, OpenTween, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null</value>
+ </data>
+ <data name=">>ImageSelectedPicture.Parent" xml:space="preserve">
+ <value>$this</value>
+ </data>
+ <data name=">>ImageSelectedPicture.ZOrder" xml:space="preserve">
+ <value>0</value>
+ </data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
==== Ver 1.3.3-dev(2016/xx/xx)
* NEW: twemoji V2 に対応しました
- 「絵文字を画像で表示する(Twemoji)」が有効な場合に Unicode 8.0 で追加された絵文字が表示されるようになります
+ * NEW: pic.twitter.com の画像アップロード時に代替テキストを送信できるようになりました
+ - 代替テキストについては https://blog.twitter.com/ja/2016/0330alt を参照して下さい
==== Ver 1.3.2(2016/04/12)
* NEW: touch.pixiv.net のサムネイル表示に対応 (pixiv.net は既に対応しています)