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 : Form
44 private EDITMODE _mode;
45 private bool _directAdd;
46 private TabInformations _sts;
48 private List<string> idlist = new List<string>();
50 private TabsDialog tabdialog = new TabsDialog(true);
61 InitializeComponent();
64 private void SetFilters(string tabName)
66 if (ListTabs.Items.Count == 0) return;
68 ListFilters.Items.Clear();
69 ListFilters.Items.AddRange(_sts.Tabs[tabName].GetFilters());
70 if (ListFilters.Items.Count > 0) ListFilters.SelectedIndex = 0;
72 CheckManageRead.Checked = _sts.Tabs[tabName].UnreadManage;
73 CheckNotifyNew.Checked = _sts.Tabs[tabName].Notify;
75 int idx = ComboSound.Items.IndexOf(_sts.Tabs[tabName].SoundFile);
76 if (idx == -1) idx = 0;
77 ComboSound.SelectedIndex = idx;
79 if (_directAdd) return;
81 ListTabs.Enabled = true;
82 GroupTab.Enabled = true;
83 ListFilters.Enabled = true;
84 if (ListFilters.SelectedIndex != -1)
88 EditFilterGroup.Enabled = false;
89 switch (TabInformations.GetInstance().Tabs[tabName].TabType)
91 case MyCommon.TabUsageType.Home:
92 case MyCommon.TabUsageType.DirectMessage:
93 case MyCommon.TabUsageType.Favorites:
94 case MyCommon.TabUsageType.PublicSearch:
95 case MyCommon.TabUsageType.Lists:
96 case MyCommon.TabUsageType.Related:
97 case MyCommon.TabUsageType.UserTimeline:
98 ButtonNew.Enabled = false;
99 ButtonEdit.Enabled = false;
100 ButtonDelete.Enabled = false;
101 ButtonRuleUp.Enabled = false;
102 ButtonRuleDown.Enabled = false;
103 ButtonRuleCopy.Enabled = false;
104 ButtonRuleMove.Enabled = false;
107 ButtonNew.Enabled = true;
108 if (ListFilters.SelectedIndex > -1)
110 ButtonEdit.Enabled = true;
111 ButtonDelete.Enabled = true;
112 ButtonRuleUp.Enabled = true;
113 ButtonRuleDown.Enabled = true;
114 ButtonRuleCopy.Enabled = true;
115 ButtonRuleMove.Enabled = true;
119 ButtonEdit.Enabled = false;
120 ButtonDelete.Enabled = false;
121 ButtonRuleUp.Enabled = false;
122 ButtonRuleDown.Enabled = false;
123 ButtonRuleCopy.Enabled = false;
124 ButtonRuleMove.Enabled = false;
128 switch (TabInformations.GetInstance().Tabs[tabName].TabType)
130 case MyCommon.TabUsageType.Home:
131 LabelTabType.Text = Properties.Resources.TabUsageTypeName_Home;
133 case MyCommon.TabUsageType.Mentions:
134 LabelTabType.Text = Properties.Resources.TabUsageTypeName_Mentions;
136 case MyCommon.TabUsageType.DirectMessage:
137 LabelTabType.Text = Properties.Resources.TabUsageTypeName_DirectMessage;
139 case MyCommon.TabUsageType.Favorites:
140 LabelTabType.Text = Properties.Resources.TabUsageTypeName_Favorites;
142 case MyCommon.TabUsageType.UserDefined:
143 LabelTabType.Text = Properties.Resources.TabUsageTypeName_UserDefined;
145 case MyCommon.TabUsageType.PublicSearch:
146 LabelTabType.Text = Properties.Resources.TabUsageTypeName_PublicSearch;
148 case MyCommon.TabUsageType.Lists:
149 LabelTabType.Text = Properties.Resources.TabUsageTypeName_Lists;
151 case MyCommon.TabUsageType.Related:
152 LabelTabType.Text = Properties.Resources.TabUsageTypeName_Related;
154 case MyCommon.TabUsageType.UserTimeline:
155 LabelTabType.Text = Properties.Resources.TabUsageTypeName_UserTimeline;
158 LabelTabType.Text = "UNKNOWN";
161 ButtonRenameTab.Enabled = true;
162 if (TabInformations.GetInstance().IsDefaultTab(tabName))
164 ButtonDeleteTab.Enabled = false;
168 ButtonDeleteTab.Enabled = true;
170 ButtonClose.Enabled = true;
173 public void SetCurrent(string TabName)
178 public void AddNewFilter(string id, string msg)
181 ButtonNew.Enabled = false;
182 ButtonEdit.Enabled = false;
183 ButtonRuleUp.Enabled = false;
184 ButtonRuleDown.Enabled = false;
185 ButtonRuleCopy.Enabled = false;
186 ButtonRuleMove.Enabled = false;
187 ButtonDelete.Enabled = false;
188 ButtonClose.Enabled = false;
189 EditFilterGroup.Enabled = true;
190 ListTabs.Enabled = false;
191 GroupTab.Enabled = false;
192 ListFilters.Enabled = false;
194 RadioAND.Checked = true;
195 RadioPLUS.Checked = false;
200 MSG2.Text = id + msg;
202 TextSource.Text = "";
205 MSG2.Enabled = false;
206 CheckRegex.Checked = false;
207 CheckURL.Checked = false;
208 CheckCaseSensitive.Checked = false;
209 CheckRetweet.Checked = false;
210 CheckLambda.Checked = false;
212 RadioExAnd.Checked = true;
213 RadioExPLUS.Checked = false;
220 TextExSource.Text = "";
221 ExUID.Enabled = true;
222 ExMSG1.Enabled = true;
223 ExMSG2.Enabled = false;
224 CheckExRegex.Checked = false;
225 CheckExURL.Checked = false;
226 CheckExCaseSensitive.Checked = false;
227 CheckExRetweet.Checked = false;
228 CheckExLambDa.Checked = false;
230 OptCopy.Checked = true;
231 CheckMark.Checked = true;
233 _mode = EDITMODE.AddNew;
237 private void ButtonNew_Click(object sender, EventArgs e)
239 ButtonNew.Enabled = false;
240 ButtonEdit.Enabled = false;
241 ButtonClose.Enabled = false;
242 ButtonRuleUp.Enabled = false;
243 ButtonRuleDown.Enabled = false;
244 ButtonRuleCopy.Enabled = false;
245 ButtonRuleMove.Enabled = false;
246 ButtonDelete.Enabled = false;
247 ButtonClose.Enabled = false;
248 EditFilterGroup.Enabled = true;
249 ListTabs.Enabled = false;
250 GroupTab.Enabled = false;
251 ListFilters.Enabled = false;
253 RadioAND.Checked = true;
254 RadioPLUS.Checked = false;
258 TextSource.Text = "";
261 MSG2.Enabled = false;
262 CheckRegex.Checked = false;
263 CheckURL.Checked = false;
264 CheckCaseSensitive.Checked = false;
265 CheckRetweet.Checked = false;
266 CheckLambda.Checked = false;
268 RadioExAnd.Checked = true;
269 RadioExPLUS.Checked = false;
273 TextExSource.Text = "";
274 ExUID.Enabled = true;
275 ExMSG1.Enabled = true;
276 ExMSG2.Enabled = false;
277 CheckExRegex.Checked = false;
278 CheckExURL.Checked = false;
279 CheckExCaseSensitive.Checked = false;
280 CheckExRetweet.Checked = false;
281 CheckExLambDa.Checked = false;
283 OptCopy.Checked = true;
284 CheckMark.Checked = true;
286 _mode = EDITMODE.AddNew;
289 private void ButtonEdit_Click(object sender, EventArgs e)
291 if (ListFilters.SelectedIndex == -1) return;
295 int idx = ListFilters.SelectedIndex;
296 ListFilters.SelectedIndex = -1;
297 ListFilters.SelectedIndex = idx;
298 ListFilters.Enabled = false;
300 ButtonNew.Enabled = false;
301 ButtonEdit.Enabled = false;
302 ButtonDelete.Enabled = false;
303 ButtonClose.Enabled = false;
304 ButtonRuleUp.Enabled = false;
305 ButtonRuleDown.Enabled = false;
306 ButtonRuleCopy.Enabled = false;
307 ButtonRuleMove.Enabled = false;
308 EditFilterGroup.Enabled = true;
309 ListTabs.Enabled = false;
310 GroupTab.Enabled = false;
312 _mode = EDITMODE.Edit;
315 private void ButtonDelete_Click(object sender, EventArgs e)
317 if (ListFilters.SelectedIndex == -1) return;
321 if (ListFilters.SelectedIndices.Count == 1)
323 tmp = string.Format(Properties.Resources.ButtonDelete_ClickText1, "\r\n", ListFilters.SelectedItem.ToString());
324 rslt = MessageBox.Show(tmp, Properties.Resources.ButtonDelete_ClickText2,
325 MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
329 tmp = string.Format(Properties.Resources.ButtonDelete_ClickText3, ListFilters.SelectedIndices.Count.ToString());
330 rslt = MessageBox.Show(tmp, Properties.Resources.ButtonDelete_ClickText2,
331 MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
333 if (rslt == DialogResult.Cancel) return;
335 for (int idx = ListFilters.Items.Count - 1; idx >= 0; idx--)
337 if (ListFilters.GetSelected(idx))
339 _sts.Tabs[ListTabs.SelectedItem.ToString()].RemoveFilter((FiltersClass)ListFilters.Items[idx]);
340 ListFilters.Items.RemoveAt(idx);
345 private void ButtonCancel_Click(object sender, EventArgs e)
347 ListTabs.Enabled = true;
348 GroupTab.Enabled = true;
349 ListFilters.Enabled = true;
351 if (ListFilters.SelectedIndex != -1)
355 EditFilterGroup.Enabled = false;
356 ButtonNew.Enabled = true;
357 if (ListFilters.SelectedIndex > -1)
359 ButtonEdit.Enabled = true;
360 ButtonDelete.Enabled = true;
361 ButtonRuleUp.Enabled = true;
362 ButtonRuleDown.Enabled = true;
363 ButtonRuleCopy.Enabled = true;
364 ButtonRuleMove.Enabled = true;
368 ButtonEdit.Enabled = false;
369 ButtonDelete.Enabled = false;
370 ButtonRuleUp.Enabled = false;
371 ButtonRuleDown.Enabled = false;
372 ButtonRuleCopy.Enabled = false;
373 ButtonRuleMove.Enabled = false;
375 ButtonClose.Enabled = true;
382 private void ShowDetail()
384 if (_directAdd) return;
386 if (ListFilters.SelectedIndex > -1)
388 FiltersClass fc = (FiltersClass)ListFilters.SelectedItem;
391 RadioAND.Checked = true;
392 RadioPLUS.Checked = false;
395 MSG2.Enabled = false;
396 UID.Text = fc.NameFilter;
400 foreach (string bf in fc.BodyFilter)
402 MSG1.Text += bf + " ";
404 MSG1.Text = MSG1.Text.Trim();
409 RadioPLUS.Checked = true;
410 RadioAND.Checked = false;
412 MSG1.Enabled = false;
417 foreach (string bf in fc.BodyFilter)
419 MSG2.Text += bf + " ";
421 MSG2.Text = MSG2.Text.Trim();
424 TextSource.Text = fc.Source;
425 CheckRegex.Checked = fc.UseRegex;
426 CheckURL.Checked = fc.SearchUrl;
427 CheckCaseSensitive.Checked = fc.CaseSensitive;
428 CheckRetweet.Checked = fc.IsRt;
429 CheckLambda.Checked = fc.UseLambda;
433 RadioExAnd.Checked = true;
434 RadioExPLUS.Checked = false;
435 ExUID.Enabled = true;
436 ExMSG1.Enabled = true;
437 ExMSG2.Enabled = false;
438 ExUID.Text = fc.ExNameFilter;
442 foreach (string bf in fc.ExBodyFilter)
444 ExMSG1.Text += bf + " ";
446 ExMSG1.Text = ExMSG1.Text.Trim();
451 RadioExPLUS.Checked = true;
452 RadioExAnd.Checked = false;
453 ExUID.Enabled = false;
454 ExMSG1.Enabled = false;
455 ExMSG2.Enabled = true;
459 foreach (string bf in fc.ExBodyFilter)
461 ExMSG2.Text += bf + " ";
463 ExMSG2.Text = ExMSG2.Text.Trim();
466 TextExSource.Text = fc.ExSource;
467 CheckExRegex.Checked = fc.ExUseRegex;
468 CheckExURL.Checked = fc.ExSearchUrl;
469 CheckExCaseSensitive.Checked = fc.ExCaseSensitive;
470 CheckExRetweet.Checked = fc.IsExRt;
471 CheckExLambDa.Checked = fc.ExUseLambda;
475 OptMove.Checked = true;
479 OptCopy.Checked = true;
481 CheckMark.Checked = fc.SetMark;
483 ButtonEdit.Enabled = true;
484 ButtonDelete.Enabled = true;
485 ButtonRuleUp.Enabled = true;
486 ButtonRuleDown.Enabled = true;
487 ButtonRuleCopy.Enabled = true;
488 ButtonRuleMove.Enabled = true;
492 RadioAND.Checked = true;
493 RadioPLUS.Checked = false;
496 MSG2.Enabled = false;
500 TextSource.Text = "";
501 CheckRegex.Checked = false;
502 CheckURL.Checked = false;
503 CheckCaseSensitive.Checked = false;
504 CheckRetweet.Checked = false;
505 CheckLambda.Checked = false;
507 RadioExAnd.Checked = true;
508 RadioExPLUS.Checked = false;
509 ExUID.Enabled = true;
510 ExMSG1.Enabled = true;
511 ExMSG2.Enabled = false;
515 TextExSource.Text = "";
516 CheckExRegex.Checked = false;
517 CheckExURL.Checked = false;
518 CheckExCaseSensitive.Checked = false;
519 CheckExRetweet.Checked = false;
520 CheckExLambDa.Checked = false;
522 OptCopy.Checked = true;
523 CheckMark.Checked = true;
525 ButtonEdit.Enabled = false;
526 ButtonDelete.Enabled = false;
527 ButtonRuleUp.Enabled = false;
528 ButtonRuleDown.Enabled = false;
529 ButtonRuleCopy.Enabled = false;
530 ButtonRuleMove.Enabled = false;
534 private void RadioAND_CheckedChanged(object sender, EventArgs e)
536 bool flg = RadioAND.Checked;
542 private void ButtonOK_Click(object sender, EventArgs e)
544 bool isBlankMatch = false;
545 bool isBlankExclude = false;
548 if (!CheckMatchRule(out isBlankMatch) || !CheckExcludeRule(out isBlankExclude))
552 if (isBlankMatch && isBlankExclude)
554 MessageBox.Show(Properties.Resources.ButtonOK_ClickText1, Properties.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
558 int i = ListFilters.SelectedIndex;
561 ft = new FiltersClass();
563 ft.MoveFrom = OptMove.Checked;
564 ft.SetMark = CheckMark.Checked;
567 if (RadioAND.Checked)
569 ft.NameFilter = UID.Text;
570 TweenMain owner = (TweenMain)this.Owner;
571 int cnt = owner.AtIdSupl.ItemCount;
572 owner.AtIdSupl.AddItem("@" + ft.NameFilter);
573 if (cnt != owner.AtIdSupl.ItemCount)
575 owner.ModifySettingAtId = true;
577 ft.SearchBoth = true;
583 ft.SearchBoth = false;
586 ft.Source = TextSource.Text.Trim();
588 if (CheckRegex.Checked || CheckLambda.Checked)
590 ft.BodyFilter.Add(bdy);
594 string[] bf = bdy.Trim().Split((char)32);
595 foreach (string bfs in bf)
597 if (!string.IsNullOrEmpty(bfs)) ft.BodyFilter.Add(bfs.Trim());
601 ft.UseRegex = CheckRegex.Checked;
602 ft.SearchUrl = CheckURL.Checked;
603 ft.CaseSensitive = CheckCaseSensitive.Checked;
604 ft.IsRt = CheckRetweet.Checked;
605 ft.UseLambda = CheckLambda.Checked;
608 if (RadioExAnd.Checked)
610 ft.ExNameFilter = ExUID.Text;
611 ft.ExSearchBoth = true;
616 ft.ExNameFilter = "";
617 ft.ExSearchBoth = false;
620 ft.ExSource = TextExSource.Text.Trim();
622 if (CheckExRegex.Checked || CheckExLambDa.Checked)
624 ft.ExBodyFilter.Add(bdy);
628 string[] bf = bdy.Trim().Split((char)32);
629 foreach (string bfs in bf)
631 if (!string.IsNullOrEmpty(bfs)) ft.ExBodyFilter.Add(bfs.Trim());
635 ft.ExUseRegex = CheckExRegex.Checked;
636 ft.ExSearchUrl = CheckExURL.Checked;
637 ft.ExCaseSensitive = CheckExCaseSensitive.Checked;
638 ft.IsExRt = CheckExRetweet.Checked;
639 ft.ExUseLambda = CheckExLambDa.Checked;
641 if (_mode == EDITMODE.AddNew)
643 if (!_sts.Tabs[ListTabs.SelectedItem.ToString()].AddFilter(ft))
644 MessageBox.Show(Properties.Resources.ButtonOK_ClickText4, Properties.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Error);
648 _sts.Tabs[ListTabs.SelectedItem.ToString()].EditFilter((FiltersClass)ListFilters.SelectedItem, ft);
651 SetFilters(ListTabs.SelectedItem.ToString());
652 ListFilters.SelectedIndex = -1;
653 if (_mode == EDITMODE.AddNew)
655 ListFilters.SelectedIndex = ListFilters.Items.Count - 1;
659 ListFilters.SelectedIndex = i;
661 _mode = EDITMODE.None;
669 private bool IsValidLambdaExp(string text)
672 // TODO DynamicQuery相当のGPLv3互換なライブラリで置換する
675 private bool IsValidRegexp(string text)
679 Regex rgx = new Regex(text);
683 MessageBox.Show(Properties.Resources.ButtonOK_ClickText3 + ex.Message, Properties.Resources.ButtonOK_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
689 private bool CheckMatchRule(out bool isBlank)
692 TextSource.Text = TextSource.Text.Trim();
693 if (RadioAND.Checked)
695 MSG1.Text = MSG1.Text.Trim();
696 UID.Text = UID.Text.Trim();
697 if (!CheckRegex.Checked && !CheckLambda.Checked) MSG1.Text = MSG1.Text.Replace(" ", " ");
699 if (string.IsNullOrEmpty(UID.Text) && string.IsNullOrEmpty(MSG1.Text) && string.IsNullOrEmpty(TextSource.Text) && CheckRetweet.Checked == false)
704 if (CheckLambda.Checked)
706 if (!IsValidLambdaExp(UID.Text))
710 if (!IsValidLambdaExp(MSG1.Text))
715 else if (CheckRegex.Checked)
717 if (!IsValidRegexp(UID.Text))
721 if (!IsValidRegexp(MSG1.Text))
729 MSG2.Text = MSG2.Text.Trim();
730 if (!CheckRegex.Checked && !CheckLambda.Checked) MSG2.Text = MSG2.Text.Replace(" ", " ");
731 if (string.IsNullOrEmpty(MSG2.Text) && string.IsNullOrEmpty(TextSource.Text) && CheckRetweet.Checked == false)
736 if (CheckLambda.Checked && !IsValidLambdaExp(MSG2.Text))
740 else if (CheckRegex.Checked && !IsValidRegexp(MSG2.Text))
746 if (CheckRegex.Checked && !IsValidRegexp(TextSource.Text))
753 private bool CheckExcludeRule(out bool isBlank)
756 TextExSource.Text = TextExSource.Text.Trim();
757 if (RadioExAnd.Checked)
759 ExMSG1.Text = ExMSG1.Text.Trim();
760 if (!CheckExRegex.Checked && !CheckExLambDa.Checked) ExMSG1.Text = ExMSG1.Text.Replace(" ", " ");
761 ExUID.Text = ExUID.Text.Trim();
762 if (string.IsNullOrEmpty(ExUID.Text) && string.IsNullOrEmpty(ExMSG1.Text) && string.IsNullOrEmpty(TextExSource.Text) && CheckExRetweet.Checked == false)
767 if (CheckExLambDa.Checked)
769 if (!IsValidLambdaExp(ExUID.Text))
773 if (!IsValidLambdaExp(ExMSG1.Text))
778 else if (CheckExRegex.Checked)
780 if (!IsValidRegexp(ExUID.Text))
784 if (!IsValidRegexp(ExMSG1.Text))
792 ExMSG2.Text = ExMSG2.Text.Trim();
793 if (!CheckExRegex.Checked && !CheckExLambDa.Checked) ExMSG2.Text = ExMSG2.Text.Replace(" ", " ");
794 if (string.IsNullOrEmpty(ExMSG2.Text) && string.IsNullOrEmpty(TextExSource.Text) && CheckExRetweet.Checked == false)
799 if (CheckExLambDa.Checked && !IsValidLambdaExp(ExMSG2.Text))
803 else if (CheckExRegex.Checked && !IsValidRegexp(ExMSG2.Text))
809 if (CheckExRegex.Checked && !IsValidRegexp(TextExSource.Text))
817 private void ListFilters_SelectedIndexChanged(object sender, EventArgs e)
822 private void ButtonClose_Click(object sender, EventArgs e)
827 private void FilterDialog_FormClosed(object sender, FormClosedEventArgs e)
832 private void FilterDialog_KeyDown(object sender, KeyEventArgs e)
834 if (e.KeyCode == Keys.Escape)
836 if (EditFilterGroup.Enabled)
837 ButtonCancel_Click(null, null);
839 ButtonClose_Click(null, null);
843 private void ListFilters_DoubleClick(object sender, EventArgs e)
845 if (ListFilters.SelectedItem == null)
850 if (ListFilters.IndexFromPoint(ListFilters.PointToClient(Control.MousePosition)) == ListBox.NoMatches)
855 if (ListFilters.Items[ListFilters.IndexFromPoint(ListFilters.PointToClient(Control.MousePosition))] == null)
859 ButtonEdit_Click(sender, e);
862 private void FilterDialog_Shown(object sender, EventArgs e)
864 _sts = TabInformations.GetInstance();
865 ListTabs.Items.Clear();
866 foreach (string key in _sts.Tabs.Keys)
868 ListTabs.Items.Add(key);
870 SetTabnamesToDialog();
872 ComboSound.Items.Clear();
873 ComboSound.Items.Add("");
874 DirectoryInfo oDir = new DirectoryInfo(Application.StartupPath + Path.DirectorySeparatorChar);
875 if (Directory.Exists(Path.Combine(Application.StartupPath, "Sounds")))
877 oDir = oDir.GetDirectories("Sounds")[0];
879 foreach (FileInfo oFile in oDir.GetFiles("*.wav"))
881 ComboSound.Items.Add(oFile.Name);
885 foreach (string tmp in ((TweenMain)this.Owner).AtIdSupl.GetItemList())
887 idlist.Add(tmp.Remove(0, 1)); // @文字削除
889 UID.AutoCompleteCustomSource.Clear();
890 UID.AutoCompleteCustomSource.AddRange(idlist.ToArray());
892 ExUID.AutoCompleteCustomSource.Clear();
893 ExUID.AutoCompleteCustomSource.AddRange(idlist.ToArray());
896 if (ListTabs.Items.Count > 0)
900 for (int i = 0; i < ListTabs.Items.Count; i++)
902 if (_cur == ListTabs.Items[i].ToString())
904 ListTabs.SelectedIndex = i;
905 //tabdialog.TabList.Items.Remove(_cur);
913 private void SetTabnamesToDialog()
915 tabdialog.ClearTab();
916 foreach (string key in _sts.Tabs.Keys)
918 if (TabInformations.GetInstance().IsDistributableTab(key)) tabdialog.AddTab(key);
922 private void ListTabs_SelectedIndexChanged(object sender, EventArgs e)
924 if (ListTabs.SelectedIndex > -1)
925 SetFilters(ListTabs.SelectedItem.ToString());
927 ListFilters.Items.Clear();
930 private void ButtonAddTab_Click(object sender, EventArgs e)
932 string tabName = null;
933 MyCommon.TabUsageType tabType;
934 using (InputTabName inputName = new InputTabName())
936 inputName.TabName = _sts.GetUniqueTabName();
937 inputName.IsShowUsage = true;
938 inputName.ShowDialog();
939 if (inputName.DialogResult == DialogResult.Cancel) return;
940 tabName = inputName.TabName;
941 tabType = inputName.Usage;
943 if (!string.IsNullOrEmpty(tabName))
946 ListElement list = null;
947 if (tabType == MyCommon.TabUsageType.Lists)
949 string rslt = ((TweenMain)this.Owner).TwitterInstance.GetListsApi();
950 if (!string.IsNullOrEmpty(rslt))
952 MessageBox.Show("Failed to get lists. (" + rslt + ")");
954 using (ListAvailable listAvail = new ListAvailable())
956 if (listAvail.ShowDialog(this) == DialogResult.Cancel) return;
957 if (listAvail.SelectedList == null) return;
958 list = listAvail.SelectedList;
961 if (!_sts.AddTab(tabName, tabType, list) || !((TweenMain)this.Owner).AddNewTab(tabName, false, tabType, list))
963 string tmp = string.Format(Properties.Resources.AddTabMenuItem_ClickText1, tabName);
964 MessageBox.Show(tmp, Properties.Resources.AddTabMenuItem_ClickText2, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
970 ListTabs.Items.Add(tabName);
971 SetTabnamesToDialog();
976 private void ButtonDeleteTab_Click(object sender, EventArgs e)
978 if (ListTabs.SelectedIndex > -1 && !string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
980 string tb = ListTabs.SelectedItem.ToString();
981 int idx = ListTabs.SelectedIndex;
982 if (((TweenMain)this.Owner).RemoveSpecifiedTab(tb, true))
984 ListTabs.Items.RemoveAt(idx);
986 if (idx < 0) idx = 0;
987 ListTabs.SelectedIndex = idx;
988 SetTabnamesToDialog();
993 private void ButtonRenameTab_Click(object sender, EventArgs e)
995 if (ListTabs.SelectedIndex > -1 && !string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
997 string tb = ListTabs.SelectedItem.ToString();
998 int idx = ListTabs.SelectedIndex;
999 if (((TweenMain)this.Owner).TabRename(ref tb))
1001 ListTabs.Items.RemoveAt(idx);
1002 ListTabs.Items.Insert(idx, tb);
1003 ListTabs.SelectedIndex = idx;
1004 SetTabnamesToDialog();
1009 private void CheckManageRead_CheckedChanged(object sender, EventArgs e)
1011 if (ListTabs.SelectedIndex > -1 && !string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
1013 ((TweenMain)this.Owner).ChangeTabUnreadManage(
1014 ListTabs.SelectedItem.ToString(),
1015 CheckManageRead.Checked);
1019 private void ButtonUp_Click(object sender, EventArgs e)
1021 if (ListTabs.SelectedIndex > 0 && !string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
1023 string selName = ListTabs.SelectedItem.ToString();
1024 string tgtName = ListTabs.Items[ListTabs.SelectedIndex - 1].ToString();
1025 ((TweenMain)this.Owner).ReOrderTab(
1029 int idx = ListTabs.SelectedIndex;
1030 ListTabs.Items.RemoveAt(idx - 1);
1031 ListTabs.Items.Insert(idx, tgtName);
1035 private void ButtonDown_Click(object sender, EventArgs e)
1037 if (ListTabs.SelectedIndex > -1 && ListTabs.SelectedIndex < ListTabs.Items.Count - 1 && !string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
1039 string selName = ListTabs.SelectedItem.ToString();
1040 string tgtName = ListTabs.Items[ListTabs.SelectedIndex + 1].ToString();
1041 ((TweenMain)this.Owner).ReOrderTab(
1045 int idx = ListTabs.SelectedIndex;
1046 ListTabs.Items.RemoveAt(idx + 1);
1047 ListTabs.Items.Insert(idx, tgtName);
1051 private void CheckNotifyNew_CheckedChanged(object sender, EventArgs e)
1053 if (ListTabs.SelectedIndex > -1 && !string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
1055 _sts.Tabs[ListTabs.SelectedItem.ToString()].Notify = CheckNotifyNew.Checked;
1059 private void ComboSound_SelectedIndexChanged(object sender, EventArgs e)
1061 if (ListTabs.SelectedIndex > -1 && string.IsNullOrEmpty(ListTabs.SelectedItem.ToString()))
1063 string filename = "";
1064 if (ComboSound.SelectedIndex > -1) filename = ComboSound.SelectedItem.ToString();
1065 _sts.Tabs[ListTabs.SelectedItem.ToString()].SoundFile = filename;
1069 private void RadioExAnd_CheckedChanged(object sender, EventArgs e)
1071 bool flg = RadioExAnd.Checked;
1072 ExUID.Enabled = flg;
1073 ExMSG1.Enabled = flg;
1074 ExMSG2.Enabled = !flg;
1077 private void OptMove_CheckedChanged(object sender, EventArgs e)
1079 CheckMark.Enabled = !OptMove.Checked;
1082 private void ButtonRuleUp_Click(object sender, EventArgs e)
1084 if (ListTabs.SelectedIndex > -1 && ListFilters.SelectedItem != null && ListFilters.SelectedIndex > 0)
1086 string tabname = ListTabs.SelectedItem.ToString();
1087 FiltersClass selected = _sts.Tabs[tabname].Filters[ListFilters.SelectedIndex];
1088 FiltersClass target = _sts.Tabs[tabname].Filters[ListFilters.SelectedIndex - 1];
1089 int idx = ListFilters.SelectedIndex;
1090 ListFilters.Items.RemoveAt(idx - 1);
1091 ListFilters.Items.Insert(idx, target);
1092 _sts.Tabs[tabname].Filters.RemoveAt(idx - 1);
1093 _sts.Tabs[tabname].Filters.Insert(idx, target);
1097 private void ButtonRuleDown_Click(object sender, EventArgs e)
1099 if (ListTabs.SelectedIndex > -1 && ListFilters.SelectedItem != null && ListFilters.SelectedIndex < ListFilters.Items.Count - 1)
1101 string tabname = ListTabs.SelectedItem.ToString();
1102 FiltersClass selected = _sts.Tabs[tabname].Filters[ListFilters.SelectedIndex];
1103 FiltersClass target = _sts.Tabs[tabname].Filters[ListFilters.SelectedIndex + 1];
1104 int idx = ListFilters.SelectedIndex;
1105 ListFilters.Items.RemoveAt(idx + 1);
1106 ListFilters.Items.Insert(idx, target);
1107 _sts.Tabs[tabname].Filters.RemoveAt(idx + 1);
1108 _sts.Tabs[tabname].Filters.Insert(idx, target);
1112 private void ButtonRuleCopy_Click(object sender, EventArgs e)
1114 if (ListTabs.SelectedIndex > -1 && ListFilters.SelectedItem != null)
1116 tabdialog.Text = Properties.Resources.ButtonRuleCopy_ClickText1;
1117 if (tabdialog.ShowDialog() == DialogResult.Cancel)
1121 string tabname = ListTabs.SelectedItem.ToString();
1122 StringCollection tabs = tabdialog.SelectedTabNames;
1123 List<FiltersClass> filters = new List<FiltersClass>();
1125 foreach (int idx in ListFilters.SelectedIndices)
1127 filters.Add(_sts.Tabs[tabname].Filters[idx].CopyTo(new FiltersClass()));
1129 foreach (string tb in tabs)
1133 foreach (FiltersClass flt in filters)
1135 if (!_sts.Tabs[tb].Filters.Contains(flt))
1136 _sts.Tabs[tb].AddFilter(flt.CopyTo(new FiltersClass()));
1140 SetFilters(tabname);
1144 private void ButtonRuleMove_Click(object sender, EventArgs e)
1146 if (ListTabs.SelectedIndex > -1 && ListFilters.SelectedItem != null)
1148 tabdialog.Text = Properties.Resources.ButtonRuleMove_ClickText1;
1149 if (tabdialog.ShowDialog() == DialogResult.Cancel)
1153 string tabname = ListTabs.SelectedItem.ToString();
1154 StringCollection tabs = tabdialog.SelectedTabNames;
1155 List<FiltersClass> filters = new List<FiltersClass>();
1157 foreach (int idx in ListFilters.SelectedIndices)
1159 filters.Add(_sts.Tabs[tabname].Filters[idx].CopyTo(new FiltersClass()));
1161 if (tabs.Count == 1 && tabs[0] == tabname) return;
1162 foreach (string tb in tabs)
1166 foreach (FiltersClass flt in filters)
1168 if (!_sts.Tabs[tb].Filters.Contains(flt))
1169 _sts.Tabs[tb].AddFilter(flt.CopyTo(new FiltersClass()));
1173 for (int idx = ListFilters.Items.Count - 1; idx >= 0; idx--)
1175 if (ListFilters.GetSelected(idx))
1177 _sts.Tabs[ListTabs.SelectedItem.ToString()].RemoveFilter((FiltersClass)ListFilters.Items[idx]);
1178 ListFilters.Items.RemoveAt(idx);
1181 SetFilters(tabname);
1185 private void FilterTextBox_KeyDown(object sender, KeyEventArgs e)
1187 if (e.KeyCode == Keys.Space && e.Modifiers == (Keys.Shift | Keys.Control))
1189 TweenMain main = (TweenMain)this.Owner;
1190 TextBox tbox = (TextBox)sender;
1191 if (tbox.SelectionStart > 0)
1193 int endidx = tbox.SelectionStart - 1;
1194 string startstr = "";
1195 for (int i = tbox.SelectionStart - 1; i >= 0; i--)
1197 char c = tbox.Text[i];
1198 if (Char.IsLetterOrDigit(c) || c == '_')
1204 startstr = tbox.Text.Substring(i + 1, endidx - i);
1205 main.ShowSuplDialog(tbox, main.AtIdSupl, startstr.Length + 1, startstr);
1209 startstr = tbox.Text.Substring(i + 1, endidx - i);
1210 main.ShowSuplDialog(tbox, main.HashSupl, startstr.Length + 1, startstr);
1222 private void FilterTextBox_KeyPress(object sender, KeyPressEventArgs e)
1224 TweenMain main = (TweenMain)this.Owner;
1225 TextBox tbox = (TextBox)sender;
1226 if (e.KeyChar == '@')
1228 //if (!SettingDialog.UseAtIdSupplement) return;
1230 main.ShowSuplDialog(tbox, main.AtIdSupl);
1233 else if (e.KeyChar == '#')
1235 //if (!SettingDialog.UseHashSupplement) return;
1236 main.ShowSuplDialog(tbox, main.HashSupl);