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.Label1 = new System.Windows.Forms.Label();
this.ProfilePanel = new System.Windows.Forms.Panel();
this.SplitContainer3 = new System.Windows.Forms.SplitContainer();
this.SplitContainer2 = new System.Windows.Forms.SplitContainer();
//
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.Controls.Add(this.Label1);
this.ImagePathPanel.Name = "ImagePathPanel";
this.ToolTip1.SetToolTip(this.ImagePathPanel, resources.GetString("ImagePathPanel.ToolTip"));
//
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.ImageCancelButton.UseVisualStyleBackColor = true;
this.ImageCancelButton.Click += new System.EventHandler(this.ImageCancelButton_Click);
//
- // Label1
- //
- resources.ApplyResources(this.Label1, "Label1");
- this.Label1.Name = "Label1";
- this.ToolTip1.SetToolTip(this.Label1, resources.GetString("Label1.ToolTip"));
- //
// ProfilePanel
//
resources.ApplyResources(this.ProfilePanel, "ProfilePanel");
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 System.Windows.Forms.Label Label1;
internal System.Windows.Forms.Panel ProfilePanel;
internal System.Windows.Forms.SplitContainer SplitContainer3;
internal System.Windows.Forms.SplitContainer SplitContainer2;
//画像投稿サービス
this.CreatePictureServices();
SetImageServiceCombo();
- ImageSelectionPanel.Enabled = false;
+ SetImagePageCombo();
SelectImageServiceComboItem(_cfgCommon.UseImageServiceName, _cfgCommon.UseImageService);
if (ImageSelectionPanel.Visible)
{
//画像投稿
- if (!TryGetSelectedMedia(out args.status.imageService, out args.status.imagePath))
+ string[] imagePaths;
+ if (!TryGetSelectedMedia(out args.status.imageService, out imagePaths))
return;
+
+ // TODO: 複数画像投稿への対応
+ args.status.imagePath = imagePaths[0];
}
RunAsync(args);
// pLen += m.Result("${url}").Length - SettingDialog.TwitterConfiguration.ShortUrlLength;
//}
}
- if (ImageSelectionPanel.Visible && ImageSelectedPicture.Tag != null && !string.IsNullOrEmpty(this.ImageService))
+ if (ImageSelectionPanel.Visible && !string.IsNullOrEmpty(this.ImageService))
{
pLen -= SettingDialog.TwitterConfiguration.CharactersReservedPerMedia;
}
this._apiGauge.BorderSides = ToolStripStatusLabelBorderSides.Right;
this.StatusStrip1.Items.Insert(2, this._apiGauge);
+ ImageSelectionPanel.Enabled = false;
this.ImageSelectedPicture.InitialImage = Properties.Resources.InitialImage;
this.ReplaceAppName();
};
}
+ 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)
private void SelectMedia_DragDrop(DragEventArgs e)
{
+ if (!ImageSelectionPanel.Visible)
+ {
+ // 画像選択パネル非表示時のドロップは新規選択として扱う
+ SetImagePageCombo();
+ }
this.Activate();
this.BringToFront();
OpenImageSelectionPanel();
try
{
ImagefilePathText.Text = ImagefilePathText.Text.Trim();
- if (string.IsNullOrEmpty(ImagefilePathText.Text) || string.IsNullOrEmpty(this.ImageService))
+ var serviceName = this.ImageService;
+ if (string.IsNullOrEmpty(ImagefilePathText.Text) || string.IsNullOrEmpty(serviceName))
{
- ImagefilePathText.Text = "";
+ ClearSelectedImagePage();
return;
}
FileInfo fl = new FileInfo(ImagefilePathText.Text);
string ext = fl.Extension;
- var imageService = this.pictureService[this.ImageService];
+ var imageService = this.pictureService[serviceName];
if (!imageService.CheckValidExtension(ext))
{
//画像以外の形式
- ImagefilePathText.Text = "";
+ ClearSelectedImagePage();
if (!suppressMsgBox)
{
MessageBox.Show(
- string.Format(Properties.Resources.PostPictureWarn3, this.ImageService, MakeAvailableServiceText(ext, fl.Length), ext),
+ string.Format(Properties.Resources.PostPictureWarn3, serviceName, MakeAvailableServiceText(ext, fl.Length), ext),
Properties.Resources.PostPictureWarn4,
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
if (!imageService.CheckValidFilesize(ext, fl.Length))
{
// ファイルサイズが大きすぎる
- ImagefilePathText.Text = "";
+ ClearSelectedImagePage();
if (!suppressMsgBox)
{
MessageBox.Show(
- string.Format(Properties.Resources.PostPictureWarn5, this.ImageService, MakeAvailableServiceText(ext, fl.Length)),
+ string.Format(Properties.Resources.PostPictureWarn5, serviceName, MakeAvailableServiceText(ext, fl.Length)),
Properties.Resources.PostPictureWarn4,
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
{
ImageSelectedPicture.Image = MemoryImage.CopyFromStream(fs);
}
- ImageSelectedPicture.Tag = MyCommon.UploadFileType.Picture;
+ SetSelectedImagePage(ImagefilePathText.Text, MyCommon.UploadFileType.Picture);
break;
case MyCommon.UploadFileType.MultiMedia:
- ImageSelectedPicture.Tag = MyCommon.UploadFileType.MultiMedia;
+ SetSelectedImagePage(ImagefilePathText.Text, MyCommon.UploadFileType.MultiMedia);
break;
default:
- ImagefilePathText.Text = "";
+ ClearSelectedImagePage();
break;
}
}
catch (FileNotFoundException)
{
- ImagefilePathText.Text = "";
+ ClearSelectedImagePage();
if (!suppressMsgBox) MessageBox.Show("File not found.");
}
catch (Exception)
{
- ImagefilePathText.Text = "";
+ ClearSelectedImagePage();
if (!suppressMsgBox) MessageBox.Show("The type of this file is not image.");
}
}
oldImage.Dispose();
}
- this.ImageSelectedPicture.Tag = null;
this.ImageSelectedPicture.ShowInitialImage();
}
}
}
- private bool TryGetSelectedMedia(out string imageService, out string imagePath)
+ private bool TryGetSelectedMedia(out string imageService, out string[] imagePath)
{
- if (ImageSelectedPicture.Tag != null &&
- ImageServiceCombo.SelectedIndex > -1 &&
- !string.IsNullOrEmpty(ImagefilePathText.Text))
+ var validPaths = ImagePageCombo.Items.Cast<SelectedMedia>()
+ .Where(x => x.IsValid).Select(x => x.Path).ToArray();
+
+ if (validPaths.Length > 0 &&
+ ImageServiceCombo.SelectedIndex > -1)
{
- if (MessageBox.Show(string.Format(Properties.Resources.PostPictureConfirm1, this.ImageService),
+ 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 = ImageServiceCombo.Text;
- imagePath = ImagefilePathText.Text;
+ imageService = serviceName;
+ imagePath = validPaths;
CloseImageSelectionPanel();
- ImagefilePathText.Text = "";
+ SetImagePageCombo();
return true;
}
}
private void SetImageServiceCombo()
{
- string svc = "";
- if (ImageServiceCombo.SelectedIndex > -1) svc = ImageServiceCombo.SelectedItem.ToString();
- ImageServiceCombo.Items.Clear();
-
- // Add service names to combobox
- foreach (var key in pictureService.Keys)
+ using (ControlTransaction.Update(ImageServiceCombo))
{
- ImageServiceCombo.Items.Add(key);
- }
+ string svc = "";
+ if (ImageServiceCombo.SelectedIndex > -1) svc = ImageServiceCombo.SelectedItem.ToString();
+ ImageServiceCombo.Items.Clear();
- SelectImageServiceComboItem(svc);
+ // 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)
private void ImageServiceCombo_SelectedIndexChanged(object sender, EventArgs e)
{
- if (ImageSelectedPicture.Tag != null && !string.IsNullOrEmpty(this.ImageService))
+ if (ImageSelectionPanel.Visible)
{
- try
+ var serviceName = this.ImageService;
+ if (!string.IsNullOrEmpty(serviceName))
{
- FileInfo fi = new FileInfo(ImagefilePathText.Text.Trim());
- string ext = fi.Extension;
- var imageService = this.pictureService[this.ImageService];
- if (!imageService.CheckValidFilesize(ext, fi.Length))
+ // 画像が選択された投稿先に対応しているかをチェックする
+ // TODO: 複数の選択済み画像があるなら、できれば全てを再チェックしたほうがいい
+ var isTwitter = serviceName.Equals("Twitter");
+ var invalidate = true;
+
+ if (ImagePageCombo.Items.Count == 0)
+ SetImagePageCombo();
+
+ if (isTwitter)
+ {
+ ValidateSelectedImagePage();
+ invalidate = false;
+ }
+ else
{
- ClearImageSelectedPicture();
- ImagefilePathText.Text = "";
+ if (ImagePageCombo.Items.Count > 1)
+ SetImagePageCombo((SelectedMedia)ImagePageCombo.Items[0]);
+ else
+ ImagePageCombo.Enabled = false;
}
+
+ if (invalidate)
+ {
+ 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);
}
- catch (Exception)
+ }
+ }
+
+ 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
{
- ClearImageSelectedPicture();
+ ImagePageCombo.Items.Add(new SelectedMedia("1"));
ImagefilePathText.Text = "";
}
- _modifySettingCommon = true;
- SaveConfigsAll(true);
- if (this.ImageService == "Twitter")
+ ImagePageCombo.SelectedIndex = 0;
+ }
+ }
+
+ private void AddNewImagePage(int selectedIndex)
+ {
+ if (this.ImageService.Equals("Twitter") && selectedIndex < 3)
+ {
+ // 投稿先が Twitter であれば、最大 4 枚まで選択できるようにする
+ var count = ImagePageCombo.Items.Count;
+ if (selectedIndex == count - 1)
{
- this.StatusText_TextChanged(null, null);
+ 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();
+ }
+
private void ImageSelectionPanel_VisibleChanged(object sender, EventArgs e)
{
this.StatusText_TextChanged(null, null);
<data name="ShowUserStatusContextMenuItem.Text" xml:space="preserve">
<value>プロフィール表示(&P)</value>
</data>
- <data name="Label1.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
- <value>MiddleLeft</value>
- </data>
<data name="FriendshipAllMenuItem.Text" xml:space="preserve">
<value>全ユーザーのフォロー状態(&A)</value>
</data>
<data name=">>SplitContainer1.Panel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
- <data name=">>Label1.ZOrder" xml:space="preserve">
- <value>5</value>
+ <data name=">>ImagePageCombo.ZOrder" xml:space="preserve">
+ <value>1</value>
</data>
<data name=">>HashStripSplitButton.Name" xml:space="preserve">
<value>HashStripSplitButton</value>
</data>
- <data name=">>Label1.Type" xml:space="preserve">
- <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ <data name=">>ImagePageCombo.Type" xml:space="preserve">
+ <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name=">>TabMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>306, 24</value>
</data>
<data name=">>ImageCancelButton.ZOrder" xml:space="preserve">
- <value>4</value>
+ <value>5</value>
</data>
<data name="RefreshMoreStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>288, 24</value>
<data name=">>ContextMenuFile.Name" xml:space="preserve">
<value>ContextMenuFile</value>
</data>
- <data name="Label1.Text" xml:space="preserve">
- <value>ファイル</value>
- </data>
<data name=">>ToolStripSeparator37.Name" xml:space="preserve">
<value>ToolStripSeparator37</value>
</data>
<data name=">>TabMenuItem.Name" xml:space="preserve">
<value>TabMenuItem</value>
</data>
- <data name="Label1.Location" type="System.Drawing.Point, System.Drawing">
+ <data name="ImagePageCombo.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 4</value>
</data>
<data name="NameLabel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<data name=">>ToolStripSeparator22.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
- <data name="Label1.ToolTip" xml:space="preserve">
+ <data name="ImagePageCombo.ToolTip" xml:space="preserve">
<value />
</data>
<data name="UserFavorareToolStripMenuItem.Text" xml:space="preserve">
<data name="ToolStripSeparator43.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 6</value>
</data>
- <data name="Label1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+ <data name="ImagePageCombo.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Left</value>
</data>
<data name=">>ToolStripSeparator8.Name" xml:space="preserve">
<data name="ShowUserTimelineContextMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>288, 24</value>
</data>
- <data name="Label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+ <data name="ImagePageCombo.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Off</value>
</data>
<data name=">>ImageSelectionPanel.Name" xml:space="preserve">
<data name=">>FriendshipMenuItem.Name" xml:space="preserve">
<value>FriendshipMenuItem</value>
</data>
- <data name=">>Label1.Parent" xml:space="preserve">
+ <data name=">>ImagePageCombo.Parent" xml:space="preserve">
<value>ImagePathPanel</value>
</data>
<data name=">>JumpReadOpMenuItem.Type" xml:space="preserve">
<value>210, 24</value>
</data>
<data name=">>FilePickButton.ZOrder" xml:space="preserve">
- <value>1</value>
+ <value>2</value>
</data>
<data name="SelectAllMenuItem.Text" xml:space="preserve">
<value>全て選択(&A)</value>
<data name="UxnuMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>269, 24</value>
</data>
- <data name=">>Label1.Name" xml:space="preserve">
- <value>Label1</value>
+ <data name=">>ImagePageCombo.Name" xml:space="preserve">
+ <value>ImagePageCombo</value>
</data>
<data name="SourceLinkLabel.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
<data name=">>ToolStripSeparator6.Name" xml:space="preserve">
<value>ToolStripSeparator6</value>
</data>
- <data name="Label1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
+ <data name="ImagePageCombo.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="DmOpMenuItem.Text" xml:space="preserve">
<data name=">>SearchWikipediaContextMenuItem.Name" xml:space="preserve">
<value>SearchWikipediaContextMenuItem</value>
</data>
- <data name="Label1.Size" type="System.Drawing.Size, System.Drawing">
+ <data name="ImagePageCombo.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 27</value>
</data>
<data name="IdFilterAddMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>LockListFileMenuItem</value>
</data>
<data name=">>Label2.ZOrder" xml:space="preserve">
- <value>2</value>
+ <value>3</value>
</data>
<data name=">>ToolStripSeparator11.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>ToolStripContainer1</value>
</data>
<data name=">>ImageServiceCombo.ZOrder" xml:space="preserve">
- <value>3</value>
+ <value>4</value>
</data>
- <data name="Label1.TabIndex" type="System.Int32, mscorlib">
+ <data name="ImagePageCombo.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name=">>ImagePathPanel.Name" xml:space="preserve">