1 // OpenTween - Client of Twitter
2 // Copyright (c) 2007-2011 kiri_feather (@kiri_feather) <kiri.feather@gmail.com>
3 // (c) 2008-2011 Moz (@syo68k)
4 // (c) 2008-2011 takeshik (@takeshik) <http://www.takeshik.org/>
5 // (c) 2010-2011 anis774 (@anis774) <http://d.hatena.ne.jp/anis774/>
6 // (c) 2010-2011 fantasticswallow (@f_swallow) <http://twitter.com/f_swallow>
7 // (c) 2011-2012 kim_upsilon (@kim_upsilon) <https://upsilo.net/~upsilon/>
8 // All rights reserved.
10 // This file is part of OpenTween.
12 // This program is free software; you can redistribute it and/or modify it
13 // under the terms of the GNU General Public License as published by the Free
14 // Software Foundation; either version 3 of the License, or (at your option)
17 // This program is distributed in the hope that it will be useful, but
18 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
19 // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 // You should have received a copy of the GNU General Public License along
23 // with this program. If not, see <http://www.gnu.org/licenses/>, or write to
24 // the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
25 // Boston, MA 02110-1301, USA.
28 using System.Collections.Generic;
29 using System.ComponentModel;
34 using System.Windows.Forms;
35 using System.Linq.Expressions;
36 using System.Text.RegularExpressions;
38 using System.Collections.Specialized;
42 public partial class FilterDialog : OTBaseForm
44 private EDITMODE _mode;
45 private bool _directAdd;
46 private TabInformations _sts;
48 private List<string> idlist = new List<string>();
59 InitializeComponent();
62 private void SetFilters(string tabName)
64 if (ListTabs.Items.Count == 0) return;
66 ListFilters.Items.Clear();
67 ListFilters.Items.AddRange(_sts.Tabs[tabName].GetFilters());
68 if (ListFilters.Items.Count > 0) ListFilters.SelectedIndex = 0;
70 if (TabInformations.GetInstance().IsDefaultTab(tabName))
72 CheckProtected.Checked = true;
73 CheckProtected.Enabled = false;
77 CheckProtected.Checked = _sts.Tabs[tabName].Protected;
78 CheckProtected.Enabled = true;
81 CheckManageRead.Checked = _sts.Tabs[tabName].UnreadManage;
82 CheckNotifyNew.Checked = _sts.Tabs[tabName].Notify;
84 int idx = ComboSound.Items.IndexOf(_sts.Tabs[tabName].SoundFile);
85 if (idx == -1) idx = 0;
86 ComboSound.SelectedIndex = idx;
88 if (_directAdd) return;
90 ListTabs.Enabled = true;
91 GroupTab.Enabled = true;
92 ListFilters.Enabled = true;
93 if (ListFilters.SelectedIndex != -1)
97 EditFilterGroup.Enabled = false;
98 switch (TabInformations.GetInstance().Tabs[tabName].TabType)
100 case MyCommon.TabUsageType.Home:
101 case MyCommon.TabUsageType.DirectMessage:
102 case MyCommon.TabUsageType.Favorites:
103 case MyCommon.TabUsageType.PublicSearch:
104 case MyCommon.TabUsageType.Lists:
105 case MyCommon.TabUsageType.Related:
106 case MyCommon.TabUsageType.UserTimeline:
107 ButtonNew.Enabled = false;
108 ButtonEdit.Enabled = false;
109 ButtonDelete.Enabled = false;
110 ButtonRuleUp.Enabled = false;
111 ButtonRuleDown.Enabled = false;
112 ButtonRuleCopy.Enabled = false;
113 ButtonRuleMove.Enabled = false;
116 ButtonNew.Enabled = true;
117 if (ListFilters.SelectedIndex > -1)
119 ButtonEdit.Enabled = true;
120 ButtonDelete.Enabled = true;
121 ButtonRuleUp.Enabled = true;
122 ButtonRuleDown.Enabled = true;
123 ButtonRuleCopy.Enabled = true;
124 ButtonRuleMove.Enabled = true;
128 ButtonEdit.Enabled = false;
129 ButtonDelete.Enabled = false;
130 ButtonRuleUp.Enabled = false;
131 ButtonRuleDown.Enabled = false;
132 ButtonRuleCopy.Enabled = false;
133 ButtonRuleMove.Enabled = false;
137 switch (TabInformations.GetInstance().Tabs[tabName].TabType)
139 case MyCommon.TabUsageType.Home:
140 LabelTabType.Text = Properties.Resources.TabUsageTypeName_Home;
142 case MyCommon.TabUsageType.Mentions:
143 LabelTabType.Text = Properties.Resources.TabUsageTypeName_Mentions;
145 case MyCommon.TabUsageType.DirectMessage:
146 LabelTabType.Text = Properties.Resources.TabUsageTypeName_DirectMessage;
148 case MyCommon.TabUsageType.Favorites:
149 LabelTabType.Text = Properties.Resources.TabUsageTypeName_Favorites;
151 case MyCommon.TabUsageType.UserDefined:
152 LabelTabType.Text = Properties.Resources.TabUsageTypeName_UserDefined;
154 case MyCommon.TabUsageType.PublicSearch:
155 LabelTabType.Text = Properties.Resources.TabUsageTypeName_PublicSearch;
157 case MyCommon.TabUsageType.Lists:
158 LabelTabType.Text = Properties.Resources.TabUsageTypeName_Lists;
160 case MyCommon.TabUsageType.Related:
161 LabelTabType.Text = Properties.Resources.TabUsageTypeName_Related;
163 case MyCommon.TabUsageType.UserTimeline:
164 LabelTabType.Text = Properties.Resources.TabUsageTypeName_UserTimeline;
167 LabelTabType.Text = "UNKNOWN";
170 ButtonRenameTab.Enabled = true;
171 if (TabInformations.GetInstance().IsDefaultTab(tabName) || TabInformations.GetInstance().Tabs[tabName].Protected)
173 ButtonDeleteTab.Enabled = false;
177 ButtonDeleteTab.Enabled = true;
179 ButtonClose.Enabled = true;
182 public void SetCurrent(string TabName)
187 public void AddNewFilter(string id, string msg)
190 ButtonNew.Enabled = false;
191 ButtonEdit.Enabled = false;
192 ButtonRuleUp.Enabled = false;
193 ButtonRuleDown.Enabled = false;
194 ButtonRuleCopy.Enabled = false;
195 ButtonRuleMove.Enabled = false;
196 ButtonDelete.Enabled = false;
197 ButtonClose.Enabled = false;
198 EditFilterGroup.Enabled = true;
199 ListTabs.Enabled = false;
200 GroupTab.Enabled = false;
201 ListFilters.Enabled = false;
203 RadioAND.Checked = true;
204 RadioPLUS.Checked = false;
209 MSG2.Text = id + msg;
211 TextSource.Text = "";
214 MSG2.Enabled = false;
215 CheckRegex.Checked = false;
216 CheckURL.Checked = false;
217 CheckCaseSensitive.Checked = false;
218 CheckRetweet.Checked = false;
219 CheckLambda.Checked = false;
221 RadioExAnd.Checked = true;
222 RadioExPLUS.Checked = false;
229 TextExSource.Text = "";
230 ExUID.Enabled = true;
231 ExMSG1.Enabled = true;
232 ExMSG2.Enabled = false;
233 CheckExRegex.Checked = false;
234 CheckExURL.Checked = false;
235 CheckExCaseSensitive.Checked = false;
236 CheckExRetweet.Checked = false;
237 CheckExLambDa.Checked = false;
239 OptCopy.Checked = true;
240 CheckMark.Checked = true;
242 _mode = EDITMODE.AddNew;
246 private void ButtonNew_Click(object sender, EventArgs e)
248 ButtonNew.Enabled = false;
249 ButtonEdit.Enabled = false;
250 ButtonClose.Enabled = false;
251 ButtonRuleUp.Enabled = false;
252 ButtonRuleDown.Enabled = false;
253 ButtonRuleCopy.Enabled = false;
254 ButtonRuleMove.Enabled = false;
255 ButtonDelete.Enabled = false;
256 ButtonClose.Enabled = false;
257 EditFilterGroup.Enabled = true;
258 ListTabs.Enabled = false;
259 GroupTab.Enabled = false;
260 ListFilters.Enabled = false;
262 RadioAND.Checked = true;
263 RadioPLUS.Checked = false;
267 TextSource.Text = "";
270 MSG2.Enabled = false;
271 CheckRegex.Checked = false;
272 CheckURL.Checked = false;
273 CheckCaseSensitive.Checked = false;
274 CheckRetweet.Checked = false;
275 CheckLambda.Checked = false;
277 RadioExAnd.Checked = true;
278 RadioExPLUS.Checked = false;
282 TextExSource.Text = "";
283 ExUID.Enabled = true;
284 ExMSG1.Enabled = true;
285 ExMSG2.Enabled = false;
286 CheckExRegex.Checked = false;
287 CheckExURL.Checked = false;
288 CheckExCaseSensitive.Checked = false;
289 CheckExRetweet.Checked = false;
290 CheckExLambDa.Checked = false;
292 OptCopy.Checked = true;
293 CheckMark.Checked = true;
295 _mode = EDITMODE.AddNew;
298 private void ButtonEdit_Click(object sender, EventArgs e)
300 if (ListFilters.SelectedIndex == -1) return;
304 int idx = ListFilters.SelectedIndex;
305 ListFilters.SelectedIndex = -1;
306 ListFilters.SelectedIndex = idx;
307 ListFilters.Enabled = false;
309 ButtonNew.Enabled = false;
310 ButtonEdit.Enabled = false;
311 ButtonDelete.Enabled = false;
312 ButtonClose.Enabled = false;
313 ButtonRuleUp.Enabled = false;
314 ButtonRuleDown.Enabled = false;
315 ButtonRuleCopy.Enabled = false;
316 ButtonRuleMove.Enabled = false;
317 EditFilterGroup.Enabled = true;
318 ListTabs.Enabled = false;
319 GroupTab.Enabled = false;
321 _mode = EDITMODE.Edit;
324 private void ButtonDelete_Click(object sender, EventArgs e)
326 if (ListFilters.SelectedIndex == -1) return;
330 if (ListFilters.SelectedIndices.Count == 1)
332 tmp = string.Format(Properties.Resources.ButtonDelete_ClickText1, "\r\n", ListFilters.SelectedItem.ToString());
333 rslt = MessageBox.Show(tmp, Properties.Resources.ButtonDelete_ClickText2,
334 MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
338 tmp = string.Format(Properties.Resources.ButtonDelete_ClickText3, ListFilters.SelectedIndices.Count.ToString());
339 rslt = MessageBox.Show(tmp, Properties.Resources.ButtonDelete_ClickText2,
340 MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
342 if (rslt == DialogResult.Cancel) return;
344 for (int idx = ListFilters.Items.Count - 1; idx >= 0; idx--)
346 if (ListFilters.GetSelected(idx))
348 _sts.Tabs[ListTabs.SelectedItem.ToString()].RemoveFilter((PostFilterRule)ListFilters.Items[idx]);
349 ListFilters.Items.RemoveAt(idx);
354 private void ButtonCancel_Click(object sender, EventArgs e)
356 ListTabs.Enabled = true;
357 GroupTab.Enabled = true;
358 ListFilters.Enabled = true;
360 if (ListFilters.SelectedIndex != -1)
364 EditFilterGroup.Enabled = false;
365 ButtonNew.Enabled = true;
366 if (ListFilters.SelectedIndex > -1)
368 ButtonEdit.Enabled = true;
369 ButtonDelete.Enabled = true;
370 ButtonRuleUp.Enabled = true;
371 ButtonRuleDown.Enabled = true;
372 ButtonRuleCopy.Enabled = true;
373 ButtonRuleMove.Enabled = true;
377 ButtonEdit.Enabled = false;
378 ButtonDelete.Enabled = false;
379 ButtonRuleUp.Enabled = false;
380 ButtonRuleDown.Enabled = false;
381 ButtonRuleCopy.Enabled = false;
382 ButtonRuleMove.Enabled = false;
384 ButtonClose.Enabled = true;
391 private void ShowDetail()
393 if (_directAdd) return;
395 if (ListFilters.SelectedIndex > -1)
397 PostFilterRule fc = (PostFilterRule)ListFilters.SelectedItem;
400 RadioAND.Checked = true;
401 RadioPLUS.Checked = false;
404 MSG2.Enabled = false;
405 UID.Text = fc.FilterName;
407 MSG1.Text = string.Join(" ", fc.FilterBody);
413 RadioPLUS.Checked = true;
414 RadioAND.Checked = false;
416 MSG1.Enabled = false;
420 MSG2.Text = string.Join(" ", fc.FilterBody);
423 TextSource.Text = fc.FilterSource;
424 CheckRegex.Checked = fc.UseRegex;
425 CheckURL.Checked = fc.FilterByUrl;
426 CheckCaseSensitive.Checked = fc.CaseSensitive;
427 CheckRetweet.Checked = fc.FilterRt;
428 CheckLambda.Checked = fc.UseLambda;
430 if (fc.ExUseNameField)
432 RadioExAnd.Checked = true;
433 RadioExPLUS.Checked = false;
434 ExUID.Enabled = true;
435 ExMSG1.Enabled = true;
436 ExMSG2.Enabled = false;
437 ExUID.Text = fc.ExFilterName;
439 ExMSG1.Text = string.Join(" ", fc.ExFilterBody);
445 RadioExPLUS.Checked = true;
446 RadioExAnd.Checked = false;
447 ExUID.Enabled = false;
448 ExMSG1.Enabled = false;
449 ExMSG2.Enabled = true;
452 ExMSG2.Text = string.Join(" ", fc.ExFilterBody);
455 TextExSource.Text = fc.ExFilterSource;
456 CheckExRegex.Checked = fc.ExUseRegex;
457 CheckExURL.Checked = fc.ExFilterByUrl;
458 CheckExCaseSensitive.Checked = fc.ExCaseSensitive;
459 CheckExRetweet.Checked = fc.ExFilterRt;
460 CheckExLambDa.Checked = fc.ExUseLambda;
464 OptMove.Checked = true;
468 OptCopy.Checked = true;
470 CheckMark.Checked = fc.MarkMatches;
472 ButtonEdit.Enabled = true;
473 ButtonDelete.Enabled = true;
474 ButtonRuleUp.Enabled = true;
475 ButtonRuleDown.Enabled = true;
476 ButtonRuleCopy.Enabled = true;
477 ButtonRuleMove.Enabled = true;
481 RadioAND.Checked = true;
482 RadioPLUS.Checked = false;
485 MSG2.Enabled = false;
489 TextSource.Text = "";
490 CheckRegex.Checked = false;
491 CheckURL.Checked = false;
492 CheckCaseSensitive.Checked = false;
493 CheckRetweet.Checked = false;
494 CheckLambda.Checked = false;
496 RadioExAnd.Checked = true;
497 RadioExPLUS.Checked = false;
498 ExUID.Enabled = true;
499 ExMSG1.Enabled = true;
500 ExMSG2.Enabled = false;
504 TextExSource.Text = "";
505 CheckExRegex.Checked = false;
506 CheckExURL.Checked = false;
507 CheckExCaseSensitive.Checked = false;
508 CheckExRetweet.Checked = false;
509 CheckExLambDa.Checked = false;
511 OptCopy.Checked = true;
512 CheckMark.Checked = true;
514 ButtonEdit.Enabled = false;
515 ButtonDelete.Enabled = false;
516 ButtonRuleUp.Enabled = false;
517 ButtonRuleDown.Enabled = false;
518 ButtonRuleCopy.Enabled = false;
519 ButtonRuleMove.Enabled = false;
523 private void RadioAND_CheckedChanged(object sender, EventArgs e)
525 bool flg = RadioAND.Checked;
531 private void ButtonOK_Click(object sender, EventArgs e)
533 bool isBlankMatch = false;
534 bool isBlankExclude = false;
537 if (!CheckMatchRule(out isBlankMatch) || !CheckExcludeRule(out isBlankExclude))
541 if (isBlankMatch && isBlankExclude)
543 MessageBox.Show(Properties.Resources.ButtonOK_ClickText1, Properties.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
547 int i = ListFilters.SelectedIndex;
550 ft = new PostFilterRule();
552 ft.MoveMatches = OptMove.Checked;
553 ft.MarkMatches = CheckMark.Checked;
556 if (RadioAND.Checked)
558 ft.FilterName = UID.Text;
559 TweenMain owner = (TweenMain)this.Owner;
560 int cnt = owner.AtIdSupl.ItemCount;
561 owner.AtIdSupl.AddItem("@" + ft.FilterName);
562 if (cnt != owner.AtIdSupl.ItemCount)
564 owner.ModifySettingAtId = true;
566 ft.UseNameField = true;
572 ft.UseNameField = false;
575 ft.FilterSource = TextSource.Text;
577 if (CheckRegex.Checked || CheckLambda.Checked)
579 ft.FilterBody = new[] { bdy };
583 ft.FilterBody = bdy.Split(' ', ' ')
584 .Where(x => !string.IsNullOrEmpty(x))
588 ft.UseRegex = CheckRegex.Checked;
589 ft.FilterByUrl = CheckURL.Checked;
590 ft.CaseSensitive = CheckCaseSensitive.Checked;
591 ft.FilterRt = CheckRetweet.Checked;
592 ft.UseLambda = CheckLambda.Checked;
595 if (RadioExAnd.Checked)
597 ft.ExFilterName = ExUID.Text;
598 ft.ExUseNameField = true;
603 ft.ExFilterName = "";
604 ft.ExUseNameField = false;
607 ft.ExFilterSource = TextExSource.Text;
609 if (CheckExRegex.Checked || CheckExLambDa.Checked)
611 ft.ExFilterBody = new[] { bdy };
615 ft.ExFilterBody = bdy.Split(' ', ' ')
616 .Where(x => !string.IsNullOrEmpty(x))
620 ft.ExUseRegex = CheckExRegex.Checked;
621 ft.ExFilterByUrl = CheckExURL.Checked;
622 ft.ExCaseSensitive = CheckExCaseSensitive.Checked;
623 ft.ExFilterRt = CheckExRetweet.Checked;
624 ft.ExUseLambda = CheckExLambDa.Checked;
626 if (_mode == EDITMODE.AddNew)
628 if (!_sts.Tabs[ListTabs.SelectedItem.ToString()].AddFilter(ft))
629 MessageBox.Show(Properties.Resources.ButtonOK_ClickText4, Properties.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Error);
633 _sts.Tabs[ListTabs.SelectedItem.ToString()].EditFilter((PostFilterRule)ListFilters.SelectedItem, ft);
636 SetFilters(ListTabs.SelectedItem.ToString());
637 ListFilters.SelectedIndex = -1;
638 if (_mode == EDITMODE.AddNew)
640 ListFilters.SelectedIndex = ListFilters.Items.Count - 1;
644 ListFilters.SelectedIndex = i;
646 _mode = EDITMODE.None;
654 private bool IsValidLambdaExp(string text)
657 // TODO DynamicQuery相当のGPLv3互換なライブラリで置換する
660 private bool IsValidRegexp(string text)
668 MessageBox.Show(Properties.Resources.ButtonOK_ClickText3 + ex.Message, Properties.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
674 private bool CheckMatchRule(out bool isBlank)
677 if (RadioAND.Checked)
679 if (string.IsNullOrEmpty(UID.Text) && string.IsNullOrEmpty(MSG1.Text) && string.IsNullOrEmpty(TextSource.Text) && CheckRetweet.Checked == false)
684 if (CheckLambda.Checked)
686 if (!IsValidLambdaExp(UID.Text))
690 if (!IsValidLambdaExp(MSG1.Text))
695 else if (CheckRegex.Checked)
697 if (!IsValidRegexp(UID.Text))
701 if (!IsValidRegexp(MSG1.Text))
709 if (string.IsNullOrEmpty(MSG2.Text) && string.IsNullOrEmpty(TextSource.Text) && CheckRetweet.Checked == false)
714 if (CheckLambda.Checked && !IsValidLambdaExp(MSG2.Text))
718 else if (CheckRegex.Checked && !IsValidRegexp(MSG2.Text))
724 if (CheckRegex.Checked && !IsValidRegexp(TextSource.Text))
731 private bool CheckExcludeRule(out bool isBlank)
734 if (RadioExAnd.Checked)
736 if (string.IsNullOrEmpty(ExUID.Text) && string.IsNullOrEmpty(ExMSG1.Text) && string.IsNullOrEmpty(TextExSource.Text) && CheckExRetweet.Checked == false)
741 if (CheckExLambDa.Checked)
743 if (!IsValidLambdaExp(ExUID.Text))
747 if (!IsValidLambdaExp(ExMSG1.Text))
752 else if (CheckExRegex.Checked)
754 if (!IsValidRegexp(ExUID.Text))
758 if (!IsValidRegexp(ExMSG1.Text))
766 if (string.IsNullOrEmpty(ExMSG2.Text) && string.IsNullOrEmpty(TextExSource.Text) && CheckExRetweet.Checked == false)
771 if (CheckExLambDa.Checked && !IsValidLambdaExp(ExMSG2.Text))
775 else if (CheckExRegex.Checked && !IsValidRegexp(ExMSG2.Text))
781 if (CheckExRegex.Checked && !IsValidRegexp(TextExSource.Text))
789 private void ListFilters_SelectedIndexChanged(object sender, EventArgs e)
794 private void ButtonClose_Click(object sender, EventArgs e)
799 private void FilterDialog_FormClosed(object sender, FormClosedEventArgs e)
804 private void FilterDialog_KeyDown(object sender, KeyEventArgs e)
806 if (e.KeyCode == Keys.Escape)
808 if (EditFilterGroup.Enabled)
809 ButtonCancel_Click(null, null);
811 ButtonClose_Click(null, null);
815 private void ListFilters_DoubleClick(object sender, EventArgs e)
817 if (ListFilters.SelectedItem == null)
822 if (ListFilters.IndexFromPoint(ListFilters.PointToClient(Control.MousePosition)) == ListBox.NoMatches)
827 if (ListFilters.Items[ListFilters.IndexFromPoint(ListFilters.PointToClient(Control.MousePosition))] == null)
831 ButtonEdit_Click(sender, e);
834 private void FilterDialog_Shown(object sender, EventArgs e)
836 _sts = TabInformations.GetInstance();
837 ListTabs.Items.Clear();
838 foreach (string key in _sts.Tabs.Keys)
840 ListTabs.Items.Add(key);
843 ComboSound.Items.Clear();
844 ComboSound.Items.Add("");
845 DirectoryInfo oDir = new DirectoryInfo(Application.StartupPath + Path.DirectorySeparatorChar);
846 if (Directory.Exists(Path.Combine(Application.StartupPath, "Sounds")))
848 oDir = oDir.GetDirectories("Sounds")[0];
850 foreach (FileInfo oFile in oDir.GetFiles("*.wav"))
852 ComboSound.Items.Add(oFile.Name);
856 foreach (string tmp in ((TweenMain)this.Owner).AtIdSupl.GetItemList())
858 idlist.Add(tmp.Remove(0, 1)); // @文字削除
860 UID.AutoCompleteCustomSource.Clear();
861 UID.AutoCompleteCustomSource.AddRange(idlist.ToArray());
863 ExUID.AutoCompleteCustomSource.Clear();
864 ExUID.AutoCompleteCustomSource.AddRange(idlist.ToArray());
867 if (ListTabs.Items.Count > 0)
871 for (int i = 0; i < ListTabs.Items.Count; i++)
873 if (_cur == ListTabs.Items[i].ToString())
875 ListTabs.SelectedIndex = i;
876 //tabdialog.TabList.Items.Remove(_cur);
884 private void ListTabs_SelectedIndexChanged(object sender, EventArgs e)
886 if (ListTabs.SelectedIndex > -1)
887 SetFilters(ListTabs.SelectedItem.ToString());
889 ListFilters.Items.Clear();
892 private void ButtonAddTab_Click(object sender, EventArgs e)
894 string tabName = null;
895 MyCommon.TabUsageType tabType;
896 using (InputTabName inputName = new InputTabName())
898 inputName.TabName = _sts.GetUniqueTabName();
899 inputName.IsShowUsage = true;
900 inputName.ShowDialog();
901 if (inputName.DialogResult == DialogResult.Cancel) return;
902 tabName = inputName.TabName;
903 tabType = inputName.Usage;
905 if (!string.IsNullOrEmpty(tabName))
908 ListElement list = null;
909 if (tabType == MyCommon.TabUsageType.Lists)
911 string rslt = ((TweenMain)this.Owner).TwitterInstance.GetListsApi();
912 if (!string.IsNullOrEmpty(rslt))
914 MessageBox.Show("Failed to get lists. (" + rslt + ")");
916 using (ListAvailable listAvail = new ListAvailable())
918 if (listAvail.ShowDialog(this) == DialogResult.Cancel) return;
919 if (listAvail.SelectedList == null) return;
920 list = listAvail.SelectedList;
923 if (!_sts.AddTab(tabName, tabType, list) || !((TweenMain)this.Owner).AddNewTab(tabName, false, tabType, list))
925 string tmp = string.Format(Properties.Resources.AddTabMenuItem_ClickText1, tabName);
926 MessageBox.Show(tmp, Properties.Resources.AddTabMenuItem_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
932 ListTabs.Items.Add(tabName);
937 private void ButtonDeleteTab_Click(object sender, EventArgs e)
939 if (ListTabs.SelectedIndex > -1 && !string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
941 string tb = ListTabs.SelectedItem.ToString();
942 int idx = ListTabs.SelectedIndex;
943 if (((TweenMain)this.Owner).RemoveSpecifiedTab(tb, true))
945 ListTabs.Items.RemoveAt(idx);
947 if (idx < 0) idx = 0;
948 ListTabs.SelectedIndex = idx;
953 private void ButtonRenameTab_Click(object sender, EventArgs e)
955 if (ListTabs.SelectedIndex > -1 && !string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
957 string tb = ListTabs.SelectedItem.ToString();
958 int idx = ListTabs.SelectedIndex;
959 if (((TweenMain)this.Owner).TabRename(ref tb))
961 ListTabs.Items.RemoveAt(idx);
962 ListTabs.Items.Insert(idx, tb);
963 ListTabs.SelectedIndex = idx;
968 private void CheckManageRead_CheckedChanged(object sender, EventArgs e)
970 if (ListTabs.SelectedIndex > -1 && !string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
972 ((TweenMain)this.Owner).ChangeTabUnreadManage(
973 ListTabs.SelectedItem.ToString(),
974 CheckManageRead.Checked);
978 private void ButtonUp_Click(object sender, EventArgs e)
980 if (ListTabs.SelectedIndex > 0 && !string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
982 string selName = ListTabs.SelectedItem.ToString();
983 string tgtName = ListTabs.Items[ListTabs.SelectedIndex - 1].ToString();
984 ((TweenMain)this.Owner).ReOrderTab(
988 int idx = ListTabs.SelectedIndex;
989 ListTabs.Items.RemoveAt(idx - 1);
990 ListTabs.Items.Insert(idx, tgtName);
994 private void ButtonDown_Click(object sender, EventArgs e)
996 if (ListTabs.SelectedIndex > -1 && ListTabs.SelectedIndex < ListTabs.Items.Count - 1 && !string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
998 string selName = ListTabs.SelectedItem.ToString();
999 string tgtName = ListTabs.Items[ListTabs.SelectedIndex + 1].ToString();
1000 ((TweenMain)this.Owner).ReOrderTab(
1004 int idx = ListTabs.SelectedIndex;
1005 ListTabs.Items.RemoveAt(idx + 1);
1006 ListTabs.Items.Insert(idx, tgtName);
1010 private void CheckLocked_CheckedChanged(object sender, EventArgs e)
1012 if (ListTabs.SelectedIndex > -1 && !string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
1014 _sts.Tabs[ListTabs.SelectedItem.ToString()].Protected = CheckProtected.Checked;
1015 ButtonDeleteTab.Enabled = !CheckProtected.Checked;
1019 private void CheckNotifyNew_CheckedChanged(object sender, EventArgs e)
1021 if (ListTabs.SelectedIndex > -1 && !string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
1023 _sts.Tabs[ListTabs.SelectedItem.ToString()].Notify = CheckNotifyNew.Checked;
1027 private void ComboSound_SelectedIndexChanged(object sender, EventArgs e)
1029 if (ListTabs.SelectedIndex > -1 && string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
1031 string filename = "";
1032 if (ComboSound.SelectedIndex > -1) filename = ComboSound.SelectedItem.ToString();
1033 _sts.Tabs[ListTabs.SelectedItem.ToString()].SoundFile = filename;
1037 private void RadioExAnd_CheckedChanged(object sender, EventArgs e)
1039 bool flg = RadioExAnd.Checked;
1040 ExUID.Enabled = flg;
1041 ExMSG1.Enabled = flg;
1042 ExMSG2.Enabled = !flg;
1045 private void OptMove_CheckedChanged(object sender, EventArgs e)
1047 CheckMark.Enabled = !OptMove.Checked;
1050 private void ButtonRuleUp_Click(object sender, EventArgs e)
1052 if (ListTabs.SelectedIndex > -1 && ListFilters.SelectedItem != null && ListFilters.SelectedIndex > 0)
1054 string tabname = ListTabs.SelectedItem.ToString();
1055 PostFilterRule target = _sts.Tabs[tabname].Filters[ListFilters.SelectedIndex - 1];
1056 int idx = ListFilters.SelectedIndex;
1057 ListFilters.Items.RemoveAt(idx - 1);
1058 ListFilters.Items.Insert(idx, target);
1059 _sts.Tabs[tabname].Filters.RemoveAt(idx - 1);
1060 _sts.Tabs[tabname].Filters.Insert(idx, target);
1064 private void ButtonRuleDown_Click(object sender, EventArgs e)
1066 if (ListTabs.SelectedIndex > -1 && ListFilters.SelectedItem != null && ListFilters.SelectedIndex < ListFilters.Items.Count - 1)
1068 string tabname = ListTabs.SelectedItem.ToString();
1069 PostFilterRule target = _sts.Tabs[tabname].Filters[ListFilters.SelectedIndex + 1];
1070 int idx = ListFilters.SelectedIndex;
1071 ListFilters.Items.RemoveAt(idx + 1);
1072 ListFilters.Items.Insert(idx, target);
1073 _sts.Tabs[tabname].Filters.RemoveAt(idx + 1);
1074 _sts.Tabs[tabname].Filters.Insert(idx, target);
1078 private void ButtonRuleCopy_Click(object sender, EventArgs e)
1080 if (ListTabs.SelectedIndex > -1 && ListFilters.SelectedItem != null)
1082 TabClass[] selectedTabs;
1083 using (TabsDialog dialog = new TabsDialog(_sts))
1085 dialog.MultiSelect = true;
1086 dialog.Text = Properties.Resources.ButtonRuleCopy_ClickText1;
1088 if (dialog.ShowDialog(this) == DialogResult.Cancel) return;
1090 selectedTabs = dialog.SelectedTabs;
1093 string tabname = ListTabs.SelectedItem.ToString();
1094 List<PostFilterRule> filters = new List<PostFilterRule>();
1096 foreach (int idx in ListFilters.SelectedIndices)
1098 filters.Add(_sts.Tabs[tabname].Filters[idx].Clone());
1100 foreach (var tb in selectedTabs)
1102 if (tb.TabName == tabname) continue;
1104 foreach (PostFilterRule flt in filters)
1106 if (!tb.Filters.Contains(flt))
1107 tb.AddFilter(flt.Clone());
1110 SetFilters(tabname);
1114 private void ButtonRuleMove_Click(object sender, EventArgs e)
1116 if (ListTabs.SelectedIndex > -1 && ListFilters.SelectedItem != null)
1118 TabClass[] selectedTabs;
1119 using (var dialog = new TabsDialog(_sts))
1121 dialog.MultiSelect = true;
1122 dialog.Text = Properties.Resources.ButtonRuleMove_ClickText1;
1124 if (dialog.ShowDialog(this) == DialogResult.Cancel) return;
1126 selectedTabs = dialog.SelectedTabs;
1128 string tabname = ListTabs.SelectedItem.ToString();
1129 List<PostFilterRule> filters = new List<PostFilterRule>();
1131 foreach (int idx in ListFilters.SelectedIndices)
1133 filters.Add(_sts.Tabs[tabname].Filters[idx].Clone());
1135 if (selectedTabs.Length == 1 && selectedTabs[0].TabName == tabname) return;
1136 foreach (var tb in selectedTabs)
1138 if (tb.TabName == tabname) continue;
1140 foreach (PostFilterRule flt in filters)
1142 if (!tb.Filters.Contains(flt))
1143 tb.AddFilter(flt.Clone());
1146 for (int idx = ListFilters.Items.Count - 1; idx >= 0; idx--)
1148 if (ListFilters.GetSelected(idx))
1150 _sts.Tabs[ListTabs.SelectedItem.ToString()].RemoveFilter((PostFilterRule)ListFilters.Items[idx]);
1151 ListFilters.Items.RemoveAt(idx);
1154 SetFilters(tabname);
1158 private void FilterTextBox_KeyDown(object sender, KeyEventArgs e)
1160 if (e.KeyCode == Keys.Space && e.Modifiers == (Keys.Shift | Keys.Control))
1162 TweenMain main = (TweenMain)this.Owner;
1163 TextBox tbox = (TextBox)sender;
1164 if (tbox.SelectionStart > 0)
1166 int endidx = tbox.SelectionStart - 1;
1167 string startstr = "";
1168 for (int i = tbox.SelectionStart - 1; i >= 0; i--)
1170 char c = tbox.Text[i];
1171 if (Char.IsLetterOrDigit(c) || c == '_')
1177 startstr = tbox.Text.Substring(i + 1, endidx - i);
1178 main.ShowSuplDialog(tbox, main.AtIdSupl, startstr.Length + 1, startstr);
1182 startstr = tbox.Text.Substring(i + 1, endidx - i);
1183 main.ShowSuplDialog(tbox, main.HashSupl, startstr.Length + 1, startstr);
1195 private void FilterTextBox_KeyPress(object sender, KeyPressEventArgs e)
1197 TweenMain main = (TweenMain)this.Owner;
1198 TextBox tbox = (TextBox)sender;
1199 if (e.KeyChar == '@')
1201 //if (!SettingDialog.UseAtIdSupplement) return;
1203 main.ShowSuplDialog(tbox, main.AtIdSupl);
1206 else if (e.KeyChar == '#')
1208 //if (!SettingDialog.UseHashSupplement) return;
1209 main.ShowSuplDialog(tbox, main.HashSupl);