public FilterProperties(string name, string tooltip, SEARCHTYPE type, bool ae, bool te, bool level) { m_szNameFilter = name; m_szTooltipFilter = tooltip; m_nTooltipSearchType = type; m_bAEFilter = ae; m_bTEFilter = te; m_bLevelFilter = level; }
//private void DrawListViewItemStateIcon(DrawListViewSubItemEventArgs e, RectangleF rct) //{ // ImageListViewItem item = (ImageListViewItem)e.Item; // if (item.StateImageIndex > -1) // { // ////e.Bounds.Leftが常に0を指すから自前で計算 // //Rectangle itemRect = item.Bounds; // //itemRect.Width = e.Item.ListView.Columns[4].Width; // //foreach (ColumnHeader clm in e.Item.ListView.Columns) // //{ // // if (clm.DisplayIndex < e.Item.ListView.Columns[4].DisplayIndex) // // { // // itemRect.X += clm.Width; // // } // //} // //Rectangle iconRect = Rectangle.Intersect(new Rectangle(e.Item.GetBounds(ItemBoundsPortion.Icon).Location, new Size(_iconSz, _iconSz)), itemRect); // //iconRect.Offset(0, Math.Max(0, (itemRect.Height - _iconSz) / 2)); // if (rct.Width > 0) // { // RectangleF stateRect = RectangleF.Intersect(rct, new RectangleF(rct.Location, new Size(18, 16))); // //e.Graphics.FillRectangle(Brushes.White, rct); // //e.Graphics.InterpolationMode = Drawing2D.InterpolationMode.High; // e.Graphics.DrawImage(this.PostStateImageList.Images(item.StateImageIndex), stateRect); // } // } //} private void DoTabSearch(string _word, bool CaseSensitive, bool UseRegex, SEARCHTYPE SType) { int cidx = 0; bool fnd = false; int toIdx; int stp = 1; if (_curList.VirtualListSize == 0) { MessageBox.Show(Properties.Resources.DoTabSearchText2, Properties.Resources.DoTabSearchText3, MessageBoxButtons.OK, MessageBoxIcon.Information); } if (_curList.SelectedIndices.Count > 0) { cidx = _curList.SelectedIndices[0]; } toIdx = _curList.VirtualListSize - 1; switch (SType) { case SEARCHTYPE.DialogSearch: //ダイアログからの検索 if (_curList.SelectedIndices.Count > 0) cidx = _curList.SelectedIndices[0]; else cidx = 0; break; case SEARCHTYPE.NextSearch: //次を検索 if (_curList.SelectedIndices.Count > 0) { cidx = _curList.SelectedIndices[0] + 1; if (cidx > toIdx) cidx = toIdx; } else { cidx = 0; } break; case SEARCHTYPE.PrevSearch: //前を検索 if (_curList.SelectedIndices.Count > 0) { cidx = _curList.SelectedIndices[0] - 1; if (cidx < 0) cidx = 0; } else { cidx = toIdx; } toIdx = 0; stp = -1; break; } RegexOptions regOpt = RegexOptions.None; StringComparison fndOpt = StringComparison.Ordinal; if (!CaseSensitive) { regOpt = RegexOptions.IgnoreCase; fndOpt = StringComparison.OrdinalIgnoreCase; } try { RETRY: if (UseRegex) { // 正規表現検索 Regex _search; try { _search = new Regex(_word, regOpt); for (int idx = cidx; idx <= toIdx; idx += stp) { PostClass post; try { post = _statuses[_curTab.Text, idx]; } catch (Exception) { continue; } if (_search.IsMatch(post.Nickname) || _search.IsMatch(post.TextFromApi) || _search.IsMatch(post.ScreenName)) { SelectListItem(_curList, idx); _curList.EnsureVisible(idx); return; } } } catch (ArgumentException) { MessageBox.Show(Properties.Resources.DoTabSearchText1, "", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } else { // 通常検索 for (int idx = cidx; idx <= toIdx; idx += stp) { PostClass post; try { post = _statuses[_curTab.Text, idx]; } catch (Exception) { continue; } if (post.Nickname.IndexOf(_word, fndOpt) > -1 || post.TextFromApi.IndexOf(_word, fndOpt) > -1 || post.ScreenName.IndexOf(_word, fndOpt) > -1) { SelectListItem(_curList, idx); _curList.EnsureVisible(idx); return; } } } if (!fnd) { switch (SType) { case SEARCHTYPE.DialogSearch: case SEARCHTYPE.NextSearch: toIdx = cidx; cidx = 0; break; case SEARCHTYPE.PrevSearch: toIdx = cidx; cidx = _curList.Items.Count - 1; break; } fnd = true; goto RETRY; } } catch (ArgumentOutOfRangeException) { } MessageBox.Show(Properties.Resources.DoTabSearchText2, Properties.Resources.DoTabSearchText3, MessageBoxButtons.OK, MessageBoxIcon.Information); }
/// <summary> /// Adds a new search term to the database /// </summary> /// <param name="search">Search term</param> /// <param name="type">Type of search</param> /// <returns>true on success</returns> public bool AddSearchTerm(string search, SEARCHTYPE type) { bool bSuccess = false; if (EmailAddressFilter.CheckForEmailAddresses(search)) {//check if search contains an email - if so don't add return bSuccess; } //check profanity filter string matchingProfanity; List<Term> terms = null; int forumId = 0; forumId = InputContext.GetParamIntOrZero("forumid", "forumid if exists returns the value else returns 0"); ProfanityFilter.FilterState state = ProfanityFilter.CheckForProfanities(InputContext.CurrentSite.ModClassID, search, out matchingProfanity, out terms, forumId); if (ProfanityFilter.FilterState.Pass == state) { IDnaDataReader dataReader = InputContext.CreateDnaDataReader("updateRecentSearch"); dataReader.AddParameter("siteid", InputContext.CurrentSite.SiteID); dataReader.AddParameter("type", type); dataReader.AddParameter("searchterm", search); dataReader.Execute(); bSuccess = true; } return bSuccess; }
//private void DrawListViewItemStateIcon(DrawListViewSubItemEventArgs e, RectangleF rct) //{ // ImageListViewItem item = (ImageListViewItem)e.Item; // if (item.StateImageIndex > -1) // { // ////e.Bounds.Leftが常に0を指すから自前で計算 // //Rectangle itemRect = item.Bounds; // //itemRect.Width = e.Item.ListView.Columns[4].Width; // //foreach (ColumnHeader clm in e.Item.ListView.Columns) // //{ // // if (clm.DisplayIndex < e.Item.ListView.Columns[4].DisplayIndex) // // { // // itemRect.X += clm.Width; // // } // //} // //Rectangle iconRect = Rectangle.Intersect(new Rectangle(e.Item.GetBounds(ItemBoundsPortion.Icon).Location, new Size(_iconSz, _iconSz)), itemRect); // //iconRect.Offset(0, Math.Max(0, (itemRect.Height - _iconSz) / 2)); // if (rct.Width > 0) // { // RectangleF stateRect = RectangleF.Intersect(rct, new RectangleF(rct.Location, new Size(18, 16))); // //e.Graphics.FillRectangle(Brushes.White, rct); // //e.Graphics.InterpolationMode = Drawing2D.InterpolationMode.High; // e.Graphics.DrawImage(this.PostStateImageList.Images(item.StateImageIndex), stateRect); // } // } //} internal void DoTabSearch(string searchWord, bool caseSensitive, bool useRegex, SEARCHTYPE searchType) { var tab = this._statuses.Tabs[this._curTab.Text]; if (tab.AllCount == 0) { MessageBox.Show(Properties.Resources.DoTabSearchText2, Properties.Resources.DoTabSearchText3, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } var selectedIndex = this._curList.SelectedIndices.Count != 0 ? this._curList.SelectedIndices[0] : -1; int startIndex; switch (searchType) { case SEARCHTYPE.NextSearch: // 次を検索 if (selectedIndex != -1) startIndex = Math.Min(selectedIndex + 1, tab.AllCount - 1); else startIndex = 0; break; case SEARCHTYPE.PrevSearch: // 前を検索 if (selectedIndex != -1) startIndex = Math.Max(selectedIndex - 1, 0); else startIndex = tab.AllCount - 1; break; case SEARCHTYPE.DialogSearch: // ダイアログからの検索 default: if (selectedIndex != -1) startIndex = selectedIndex; else startIndex = 0; break; } Func<string, bool> stringComparer; try { stringComparer = this.CreateSearchComparer(searchWord, useRegex, caseSensitive); } catch (ArgumentException) { MessageBox.Show(Properties.Resources.DoTabSearchText1, Properties.Resources.DoTabSearchText3, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var reverse = searchType == SEARCHTYPE.PrevSearch; var foundIndex = tab.SearchPostsAll(stringComparer, startIndex, reverse) .DefaultIfEmpty(-1).First(); if (foundIndex == -1) { MessageBox.Show(Properties.Resources.DoTabSearchText2, Properties.Resources.DoTabSearchText3, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } this.SelectListItem(this._curList, foundIndex); this._curList.EnsureVisible(foundIndex); }