Ejemplo n.º 1
0
        private void ListsCheckedListBox_MouseDown(object sender, MouseEventArgs e)
        {
            switch (e.Button)
            {
            case MouseButtons.Left:

                // 項目が無い部分をクリックしても、選択されている項目のチェック状態が変更されてしまうので、その対策
                for (var index = 0; index < ListsCheckedListBox.Items.Count; index++)
                {
                    if (ListsCheckedListBox.GetItemRectangle(index).Contains(e.Location))
                    {
                        return;
                    }
                }

                ListsCheckedListBox.SelectedItem = null;
                break;

            case MouseButtons.Right:

                // コンテキストメニューの項目実行時にSelectedItemプロパティを利用出来るように
                for (var index = 0; index < ListsCheckedListBox.Items.Count; index++)
                {
                    if (ListsCheckedListBox.GetItemRectangle(index).Contains(e.Location))
                    {
                        ListsCheckedListBox.SetSelected(index, true);
                        return;
                    }
                }

                ListsCheckedListBox.SelectedItem = null;
                break;
            }
        }
Ejemplo n.º 2
0
 private void ReloadListToolStripMenuItem_Click(object sender, EventArgs e)
 {
     ListsCheckedListBox.ItemCheck -= ListsCheckedListBox_ItemCheck;
     ListsCheckedListBox.SetItemCheckState(ListsCheckedListBox.SelectedIndex, CheckState.Indeterminate);
     ListsCheckedListBox.ItemCheck += ListsCheckedListBox_ItemCheck;
     ListsCheckedListBox.SetItemCheckState(ListsCheckedListBox.SelectedIndex, CheckState.Checked);
 }
Ejemplo n.º 3
0
        private void LoadList()
        {
            ListsCheckedListBox.ItemCheck -= ListsCheckedListBox_ItemCheck;

            var listElements = TabInformations.Instance.SubscribableLists.FindAll(item => item.Username == _twitter.Username);

            foreach (var t in listElements)
            {
                ListsCheckedListBox.Items.Add(t);
            }

            for (var i = 0; i < ListsCheckedListBox.Items.Count; i++)
            {
                var listItem = (ListElement)ListsCheckedListBox.Items[i];

                var listPost  = new List <PostClass>();
                var otherPost = new List <PostClass>();

                foreach (var tab in TabInformations.Instance.Tabs.Values.Where(tab => tab.TabType == TabUsageType.Lists))
                {
                    if (listItem.Id == tab.ListInfo.Id)
                    {
                        listPost.AddRange(tab.Posts.Values);
                    }
                    else
                    {
                        otherPost.AddRange(tab.Posts.Values);
                    }
                }

                // リストが空の場合は推定不能
                if (listPost.Count == 0)
                {
                    ListsCheckedListBox.SetItemCheckState(i, CheckState.Indeterminate);
                    continue;
                }

                // リストに該当ユーザーのポストが含まれていれば、リストにユーザーが含まれているとする。
                if (listPost.Exists(item => item.ScreenName == _contextUserName))
                {
                    ListsCheckedListBox.SetItemChecked(i, true);
                    continue;
                }

                var listPostUserIDs         = new List <long>();
                var listPostUserNames       = new List <string>();
                var listOlderPostCreatedAt  = DateTime.MaxValue;
                var listNewistPostCreatedAt = DateTime.MinValue;

                foreach (var post in listPost)
                {
                    if (post.UserId > 0 && !listPostUserIDs.Contains(post.UserId))
                    {
                        listPostUserIDs.Add(post.UserId);
                    }

                    if (post.ScreenName != null && !listPostUserNames.Contains(post.ScreenName))
                    {
                        listPostUserNames.Add(post.ScreenName);
                    }

                    if (post.CreatedAt < listOlderPostCreatedAt)
                    {
                        listOlderPostCreatedAt = post.CreatedAt;
                    }

                    if (post.CreatedAt > listNewistPostCreatedAt)
                    {
                        listNewistPostCreatedAt = post.CreatedAt;
                    }
                }

                // リスト中のユーザーの人数がlistItem.MemberCount以上で、かつ該当のユーザーが含まれていなければ、リストにユーザーは含まれていないとする。
                if (listItem.MemberCount > 0 &&
                    listItem.MemberCount <= listPostUserIDs.Count &&
                    (!listPostUserNames.Contains(_contextUserName)))
                {
                    ListsCheckedListBox.SetItemChecked(i, false);
                    continue;
                }

                otherPost.AddRange(TabInformations.Instance.Posts.Values);

                // リストに該当ユーザーのポストが含まれていないのにリスト以外で取得したポストの中にリストに含まれるべきポストがある場合は、リストにユーザーは含まれていないとする。
                if (otherPost.Exists(item => (item.ScreenName == _contextUserName) &&
                                     (item.CreatedAt > listOlderPostCreatedAt) &&
                                     (item.CreatedAt < listNewistPostCreatedAt) &&
                                     ((!item.IsReply) || listPostUserNames.Contains(item.InReplyToUser))))
                {
                    ListsCheckedListBox.SetItemChecked(i, false);
                    continue;
                }

                ListsCheckedListBox.SetItemCheckState(i, CheckState.Indeterminate);
            }

            ListsCheckedListBox.ItemCheck += ListsCheckedListBox_ItemCheck;
        }