using FastReport.Utils; using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Web.UI; using System.Web.UI.WebControls; namespace FastReport.Web { #region Toolbar enums /// /// Describes sizes of Toolbar enum /// public enum ToolbarStyle { /// /// Small size toolbar /// Small, /// /// Big size toolbar /// Large } /// /// Toolbar Icons Styles /// public enum ToolbarIconsStyle { /// /// Red Icons /// Red, /// /// Green Icons /// Green, /// /// Blue Icons /// Blue, /// /// Black Icons /// Black, /// /// Custom Icons /// Custom } /// /// Toolbar Background Styles. /// public enum ToolbarBackgroundStyle { /// /// Transparent background. /// None, /// /// Light background. /// Light, /// /// Medium dark background. /// Medium, /// /// Dark background. /// Dark, /// /// Custom background. /// Custom } #endregion /// /// Web Toolbar /// internal class WebToolbar { #region Private variables private Page page; private bool enableFit = true; private List fTabs; private int currentTab = 0; private WebRes res; private string backgroundColor = "white"; #endregion #region Public properties /// /// Gets or sets the background color. /// public string BackgroundColor { get { return backgroundColor; } set { backgroundColor = value; } } /// /// Gets or sets current tab index /// public int CurrentTabIndex { get { return currentTab; } set { currentTab = value; } } /// /// Enable or disable fitting /// public bool EnableFit { get { return enableFit; } set { enableFit = value; } } /// /// Report properties /// public WebReportProperties ReportProperties { get { return fTabs[currentTab].Properties; } set { fTabs[currentTab].Properties = value; } } /// /// Current report /// public Report Report { get { return fTabs[currentTab].Report; } set { fTabs[currentTab].Report = value; } } #endregion Public properties #region Private methods private string GetReportId() { return string.Format("", ReportProperties.ControlID); } private string GetNavigation() { StringBuilder sb = new StringBuilder(); if (ReportProperties.TotalPages > 1 && !ReportProperties.SinglePage) { res.Root("Web"); sb.Append("
 
"); if (ReportProperties.ShowFirstButton) sb.Append(string.Format("", (ReportProperties.CurrentPage == 0) ? "disabled=\"disabled\"" : "", res.Get("First"), GetNavRequest("first", "1"))); if (ReportProperties.ShowPrevButton) sb.Append(string.Format("", (ReportProperties.CurrentPage == 0) ? "disabled=\"disabled\"" : "", res.Get("Prev"), GetNavRequest("prev", "1"))); sb.Append(GetPageNumbers()); if (ReportProperties.ShowNextButton) sb.Append(string.Format("", (ReportProperties.CurrentPage < ReportProperties.TotalPages - 1) ? "" : "disabled=\"disabled\"", res.Get("Next"), GetNavRequest("next", "1"))); if (ReportProperties.ShowLastButton) { sb.Append(string.Format("", (ReportProperties.CurrentPage < ReportProperties.TotalPages - 1) ? "" : "disabled=\"disabled\"", res.Get("Last"), GetNavRequest("last", "1"))); } } sb.Append("
 
"); return sb.ToString(); } private string GetPageNumbers() { StringBuilder sb = new StringBuilder(); if (ReportProperties.ShowPageNumber) { res.Root("Web"); string id = ReportProperties.ControlID + "PageN"; string s = string.Format("", (ReportProperties.TotalPages > 0 ? ReportProperties.CurrentPage + 1 : 0).ToString(), GetNavRequest("goto", "' + document.getElementById('" + id + "').value + '"), id, res.Get("EnterPage")); sb.Append(s); sb.Append("
/
"); sb.Append(string.Format("", ReportProperties.TotalPages.ToString(), res.Get("TotalPages"))); } return sb.ToString(); } private string GetRefresh() { StringBuilder sb = new StringBuilder(); if (ReportProperties.ShowRefreshButton) { res.Root("Web"); sb.Append("
 
"); sb.Append(string.Format("", res.Get("Refresh"), GetNavRequest("refresh", "1"))); } return sb.ToString(); } private string GetBackButton() { StringBuilder sb = new StringBuilder(); if (ReportProperties.ShowBackButton && currentTab > 0) { res.Root("Web"); sb.Append("
 
"); sb.Append(string.Format("", res.Get("Back"), GetNavRequest("settab", ReportProperties.PreviousTab.ToString()))); } return sb.ToString(); } private string GetZoomMenu() { StringBuilder sb = new StringBuilder(); if (ReportProperties.ShowZoomButton) { res.Root("Web"); sb.Append("
 
"); sb.Append(""); } return sb.ToString(); } private string GetZoomItem(string actionName, string caption) { return string.Format("
  • ", CheckCurrentZoom(actionName) ? "checked" : "", actionName, caption, GetNavRequest(actionName, "1")); } private bool CheckCurrentZoom(string name) { string s = name.Substring(5); if (s == "width" && ReportProperties.ZoomMode == ZoomMode.Width) return true; else if (s == "page" && ReportProperties.ZoomMode == ZoomMode.Page) return true; else if (ReportProperties.ZoomMode == ZoomMode.Scale && Math.Round(ReportProperties.Zoom * 100).ToString() == s) return true; else return false; } private string GetTabs() { StringBuilder sb = new StringBuilder(); if (fTabs.Count > 1) { for (int i = 0; i < fTabs.Count; i++) { sb.Append("
    "); sb.Append(string.Format("", GetTabName(i), GetNavRequest("settab", i.ToString()), i == CurrentTabIndex ? "tabselected":"", fTabs[i].Name)); if (ReportProperties.ShowTabCloseButton) { sb.Append(string.Format("", "X", GetNavRequest("closetab", i.ToString()), i == CurrentTabIndex ? "tabselected" : "", "X")); } sb.Append("
    "); } if (ReportProperties.TabPosition == TabPosition.UnderToolbar) sb.Append("

    "); } return sb.ToString(); } private string GetTabName(int i) { if (String.IsNullOrEmpty(fTabs[i].Name)) { string s = fTabs[i].Report.ReportInfo.Name; if (String.IsNullOrEmpty(s)) s = Path.GetFileNameWithoutExtension(fTabs[i].Report.FileName); if (String.IsNullOrEmpty(s)) s = (i + 1).ToString(); return s; } else return fTabs[i].Name; } private string GetPrintMenu() { StringBuilder sb = new StringBuilder(); if (ReportProperties.ShowPrint) { res.Root("Web"); sb.Append("
     
    "); sb.Append(""); } return sb.ToString(); } private string GetPrintReq() { string result = ""; if (ReportProperties.PrintInPdf && !ReportProperties.PrintInBrowser) result = GetRequest("print_pdf", "1"); else if (!ReportProperties.PrintInPdf && ReportProperties.PrintInBrowser) result = GetRequest("print_browser", "1"); return result; } private string GetPrintRes() { string result = ""; res.Root("Web"); if (ReportProperties.PrintInPdf && !ReportProperties.PrintInBrowser) result = res.Get("PrintFromAcrobat"); else if (!ReportProperties.PrintInPdf && ReportProperties.PrintInBrowser) result = res.Get("PrintFromBrowser"); return result; } private string GetExportMenu() { StringBuilder sb = new StringBuilder(); if (ReportProperties.ShowExports) { sb.Append("
     
    "); sb.Append(""); } return sb.ToString(); } private string GetActionButton(string actionCode, string actionName) { return string.Format("
  • ", actionCode, actionName, GetRequest(actionCode, "1")); } private string GetRequest(string requestName, string value) { return string.Format("window.open('{0}?previewobject={1}&{2}={3}{4}')", ReportProperties.HandlerURL, ReportProperties.ControlID, requestName, value, WebUtils.GetSalt()); } private string GetNavRequest(string requestName, string value) { return string.Format("frRequestServer('{0}?previewobject={1}&{2}={3}{4}')", ReportProperties.HandlerURL, ReportProperties.ControlID, requestName, value, WebUtils.GetSalt()); } private string GetCheckBoxImageURL() { if (String.IsNullOrEmpty(ReportProperties.ButtonsPath)) return GetResourceImageUrl("Checkbox.gif"); else return ReportProperties.ButtonsPath + "Checkbox.gif"; } private string GetDisabledImagesURL() { if (ReportProperties.ToolbarStyle == ToolbarStyle.Large) return (ReportProperties.ToolbarIconsStyle == ToolbarIconsStyle.Custom) ? ReportProperties.ButtonsPath + "toolbar_disabled_big.png" : GetResourceImageUrl("toolbar_disabled_32.png"); else return (ReportProperties.ToolbarIconsStyle == ToolbarIconsStyle.Custom) ? ReportProperties.ButtonsPath + "toolbar_disabled.png" : GetResourceImageUrl("toolbar_disabled.png"); } private string GetToolBarIconsURL() { string backExt = (ReportProperties.ToolbarStyle == ToolbarStyle.Large) ? "_32.png" : ".png"; if (ReportProperties.ToolbarIconsStyle == ToolbarIconsStyle.Red) return GetResourceImageUrl("toolbar_red" + backExt); else if (ReportProperties.ToolbarIconsStyle == ToolbarIconsStyle.Green) return GetResourceImageUrl("toolbar_green" + backExt); else if (ReportProperties.ToolbarIconsStyle == ToolbarIconsStyle.Blue) return GetResourceImageUrl("toolbar_blue" + backExt); else if (ReportProperties.ToolbarIconsStyle == ToolbarIconsStyle.Black) return GetResourceImageUrl("toolbar_black" + backExt); else { // custom return (ReportProperties.ToolbarStyle == ToolbarStyle.Large) ? ReportProperties.ButtonsPath + "toolbar_big.png" : ReportProperties.ButtonsPath + "toolbar.png"; } } private string GetToolBarBackgroundURL() { string backExt = (ReportProperties.ToolbarStyle == ToolbarStyle.Large) ? "_32.png" : ".png"; if (ReportProperties.ToolbarBackgroundStyle == ToolbarBackgroundStyle.Light) return GetResourceImageUrl("toolbar_background_light" + backExt); else if (ReportProperties.ToolbarBackgroundStyle == ToolbarBackgroundStyle.Medium) return GetResourceImageUrl("toolbar_background_medium" + backExt); else if (ReportProperties.ToolbarBackgroundStyle == ToolbarBackgroundStyle.Dark) return GetResourceImageUrl("toolbar_background_dark" + backExt); else { // custom background return (ReportProperties.ToolbarStyle == ToolbarStyle.Large) ? ReportProperties.ButtonsPath + "toolbar_background_big.png" : ReportProperties.ButtonsPath + "toolbar_background.png"; } } private string GetResourceImageUrl(string resName) { return page.ClientScript.GetWebResourceUrl(this.GetType(), string.Format("FastReport.Web.Resources.Images.{0}", resName)); } private string GetResourceTemplateUrl(string resName) { return page.ClientScript.GetWebResourceUrl(this.GetType(), string.Format("FastReport.Web.Resources.Templates.{0}", resName)); } private string GetResourceJqueryUrl(string resName) { return page.ClientScript.GetWebResourceUrl(this.GetType(), string.Format("FastReport.Web.Resources.jquery.{0}", resName)); } private string GetResourceButtonUrl(string resName) { return page.ClientScript.GetWebResourceUrl(this.GetType(), string.Format("FastReport.Web.Resources.Buttons.{0}", resName)); } private string GetResourceTemplate(string name) { string result; using (Stream stream = this.GetType().Assembly.GetManifestResourceStream(string.Format("FastReport.Web.Resources.Templates.{0}", name))) using (TextReader reader = new StreamReader(stream)) result = reader.ReadToEnd(); return result; } #endregion #region Public methods /// /// Registration of scripts and styles in ClientScript /// /// /// /// /// public void RegisterGlobals(string ID, ClientScriptManager ClientScript, Type t, bool extJquery) { ClientScript.RegisterClientScriptBlock(t, ID, GetCss(), false); ClientScript.RegisterClientScriptInclude(t, "fr_util", GetResourceTemplateUrl("fr_util.js")); if (!extJquery) { ClientScript.RegisterClientScriptInclude(t, "jquery-fr", GetResourceJqueryUrl("jquery.min.js")); ClientScript.RegisterClientScriptInclude(t, "jquery-ui-fr", GetResourceJqueryUrl("jquery-ui.custom.min.js")); ClientScript.RegisterClientScriptBlock(t, "jquery-css-fr", String.Format("", GetResourceJqueryUrl("jquery-ui.min.css")), false); } } /// /// Gets Inline Registration as string /// /// public string GetInlineRegistration(bool extJquery) { StringBuilder reg = new StringBuilder(); reg.AppendLine(GetCss()); if (!extJquery) { reg.AppendLine(WebReportGlobals.StylesAsString()); reg.AppendLine(WebReportGlobals.ScriptsAsString()); } else { reg.AppendLine(WebReportGlobals.StylesWOjQueryAsString()); reg.AppendLine(WebReportGlobals.ScriptsWOjQueryAsString()); } return reg.ToString(); } /// /// Gets CSS of toolbar /// /// public string GetCss() { StringBuilder sb = new StringBuilder(); string s = GetResourceTemplate(ReportProperties.ToolbarStyle == ToolbarStyle.Large ? "styles_big.css" : "styles.css"); sb.AppendLine(""); return sb.ToString(); } /// /// /// /// public string GetHtmlBody() { WebTemplate template = new WebTemplate(GetResourceTemplate("toolbar.html"), WebTemplateMode.HTML, false); if (ReportProperties.State == ReportState.Done) { template.SetVariable("back-button", GetBackButton()); template.SetVariable("export-menu", GetExportMenu()); template.SetVariable("print-menu", GetPrintMenu()); template.SetVariable("zoom-menu", GetZoomMenu()); template.SetVariable("navigation", GetNavigation()); } template.SetVariable("refresh-button", GetRefresh()); if (ReportProperties.TabPosition == TabPosition.InsideToolbar) template.SetVariable("tabsinside", GetTabs()); else if (ReportProperties.TabPosition == TabPosition.UnderToolbar) template.SetVariable("tabsunder", GetTabs()); template.SetVariable("reportid", GetReportId()); return template.Prepare(); } /// /// /// /// /// /// /// /// /// public string GetHtmlProgress(string handlerPath, string ID, bool preview, Unit width, Unit height) { StringBuilder sb = new StringBuilder(); string progress_path = String.IsNullOrEmpty(ReportProperties.ButtonsPath) ? GetResourceImageUrl("Progress.gif") : ReportProperties.ButtonsPath + "Progress.gif"; sb.Append("
    "); sb.Append("
    "). Append("
    "); return sb.ToString(); } /// /// /// /// /// /// /// public string GetAutoRefresh(string handlerPath, string ID, int refreshTimeOut) { StringBuilder sb = new StringBuilder(); sb.Append(""); return sb.ToString(); } #endregion /// /// Constructor of WebToolbar /// /// /// /// /// public WebToolbar(string guid, List tabs, bool fit, WebRes Localization) { page = new Page(); fTabs = tabs; res = Localization; enableFit = fit; } } }