using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using ScrewTurn.Wiki.PluginFramework; namespace ScrewTurn.Wiki { public partial class PageListBuilder : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { if(!Page.IsPostBack) { CurrentProvider = Settings.DefaultPagesProvider; } } /// /// Gets or sets the current namespace. /// public string CurrentNamespace { get { return ViewState["CN"] as string; } set { ViewState["CN"] = value; } } /// /// Gets or sets the current provider. /// public string CurrentProvider { get { return ViewState["CP"] as string; } set { ViewState["CP"] = value; ResetControl(); } } /// /// Gets or the selected pages. /// public IList SelectedPages { get { List result = new List(lstPages.Items.Count); foreach(ListItem item in lstPages.Items) { result.Add(item.Value); } return result; } } /// /// Resets the editor. /// public void ResetControl() { txtPageName.Text = ""; lstAvailablePage.Items.Clear(); btnAddPage.Enabled = false; lstPages.Items.Clear(); btnRemove.Enabled = false; } protected void btnSearch_Click(object sender, EventArgs e) { lstAvailablePage.Items.Clear(); btnAddPage.Enabled = false; txtPageName.Text = txtPageName.Text.Trim(); if(txtPageName.Text.Length == 0) return; PageInfo[] pages = SearchTools.SearchSimilarPages(txtPageName.Text, CurrentNamespace); string cp = CurrentProvider; foreach(PageInfo page in from p in pages where p.Provider.GetType().FullName == cp select p) { // Filter pages already in the list bool found = false; foreach(ListItem item in lstPages.Items) { if(item.Value == page.FullName) { found = true; break; } } if(!found) { PageContent content = Content.GetPageContent(page, false); lstAvailablePage.Items.Add(new ListItem(FormattingPipeline.PrepareTitle(content.Title, false, FormattingContext.Other, page), page.FullName)); } } btnAddPage.Enabled = lstAvailablePage.Items.Count > 0; } protected void btnAddPage_Click(object sender, EventArgs e) { PageInfo page = Pages.FindPage(lstAvailablePage.SelectedValue); PageContent content = Content.GetPageContent(page, false); lstPages.Items.Add(new ListItem(FormattingPipeline.PrepareTitle(content.Title, false, FormattingContext.Other, page), page.FullName)); lstAvailablePage.Items.RemoveAt(lstAvailablePage.SelectedIndex); btnAddPage.Enabled = lstAvailablePage.Items.Count > 0; } protected void lstPages_SelectedIndexChanged(object sender, EventArgs e) { btnRemove.Enabled = lstPages.SelectedIndex != -1; } protected void btnRemove_Click(object sender, EventArgs e) { lstPages.Items.RemoveAt(lstPages.SelectedIndex); lstPages.SelectedIndex = -1; btnRemove.Enabled = false; } } }