string _ToggleItem; // The name of the textbox used to // hide/unhide this report item. Clicking on //an instance of the ToggleItem will toggle //the hidden state of every corresponding //instance of this item. If the Toggle item //becomes hidden, this item should become //hidden. //Must be a textbox in the same grouping //scope as this item or in any containing (ancestor) grouping scope //If omitted, no item will toggle the hidden //state of this item. //Not allowed on and cannot refer to report //items contained in a page header or //footer. //Cannot refer to a report item contained //within the current report item unless //current grouping scope has a Parent. public Visibility(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _Hidden=null; _ToggleItem=null; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Hidden": _Hidden = new Expression(r, this, xNodeLoop, ExpressionType.Boolean); break; case "ToggleItem": _ToggleItem = xNodeLoop.InnerText; break; default: // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown Visibility element '" + xNodeLoop.Name + "' ignored."); break; } } }
TitlePositionEnum _Position; // The position of the title; Default: center public Title(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _Caption=null; _Style=null; _Position=TitlePositionEnum.Center; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Caption": _Caption = new Expression(r, this, xNodeLoop, ExpressionType.String); break; case "Style": _Style = new Style(r, this, xNodeLoop); break; case "Position": _Position = TitlePosition.GetStyle(xNodeLoop.InnerText, OwnerReport.rl); break; default: // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown Title element '" + xNodeLoop.Name + "' ignored."); break; } } }
Expression _Label; // (string) The label displayed on the legend. public DynamicSeries(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _Grouping=null; _Sorting=null; _Label=null; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Grouping": _Grouping = new Grouping(r, this, xNodeLoop); break; case "Sorting": _Sorting = new Sorting(r, this, xNodeLoop); break; case "Label": _Label = new Expression(r, this, xNodeLoop, ExpressionType.String); break; default: break; } } if (_Grouping == null) OwnerReport.rl.LogError(8, "DynamicSeries requires the Grouping element."); if (_Label == null) OwnerReport.rl.LogError(8, "DynamicSeries requires the Label element."); }
SortDirectionEnum _Direction; // Indicates the direction of the sort // Ascending (Default) | Descending public SortBy(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _SortExpression=null; _Direction=SortDirectionEnum.Ascending; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "SortExpression": _SortExpression = new Expression(r, this, xNodeLoop, ExpressionType.Variant); break; case "Direction": _Direction = SortDirection.GetStyle(xNodeLoop.InnerText, OwnerReport.rl); break; default: // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown SortBy element '" + xNodeLoop.Name + "' ignored."); break; } } if (_SortExpression == null) OwnerReport.rl.LogError(8, "SortBy requires the SortExpression element."); }
public bool DataRegionElement(XmlNode xNodeLoop) { switch (xNodeLoop.Name) { case "KeepTogether": _KeepTogether = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; case "NoRows": _NoRows = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.String); break; case "DataSetName": _DataSetName = xNodeLoop.InnerText; break; case "PageBreakAtStart": _PageBreakAtStart = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; case "PageBreakAtEnd": _PageBreakAtEnd = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; case "Filters": _Filters = new Filters(OwnerReport, this, xNodeLoop); break; default: // Will get many that are handled by the specific // type of data region: ie list,chart,matrix,table if (ReportItemElement(xNodeLoop)) // try at ReportItem level break; return false; } return true; }
Expression _Bottom; //(Size) Width of the bottom border. Max: 20 pt Min: 0.25 pt public StyleBorderWidth(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _Default=null; _Left=null; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Default": _Default = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit); break; case "Left": _Left = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit); break; case "Right": _Right = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit); break; case "Top": _Top = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit); break; case "Bottom": _Bottom = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit); break; default: // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown BorderWidth element '" + xNodeLoop.Name + "' ignored."); break; } } }
Expression _Label; // Label (string) for the value to display in the UI // If not supplied, the _Value is used as the label. If // _Value not supplied, _Label is the empty string; public ParameterValue(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _Value=null; _Label=null; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Value": _Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant); break; case "Label": _Label = new Expression(r, this, xNodeLoop, ExpressionType.String); break; default: break; } } }
Expression _BookmarkLink; // (string) //An expression that evaluates to the ID of a //bookmark within the report to go to when this //report item is clicked on. //(If no bookmark with this ID is found, the link //will not be included in the report. If the //bookmark is hidden, the link will go to the start //of the page the bookmark is on. If multiple //bookmarks with this ID are found, the link will //go to the first one) // Constructor public Action(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _Hyperlink = null; _Drillthrough = null; _BookmarkLink = null; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Hyperlink": _Hyperlink = new Expression(r, this, xNodeLoop, ExpressionType.URL); break; case "Drillthrough": _Drillthrough = new Drillthrough(r, this, xNodeLoop); break; case "BookmarkLink": _BookmarkLink = new Expression(r, this, xNodeLoop, ExpressionType.String); break; default: break; } } }
static readonly Regex HTMLEXPR = new Regex("(<expr>.+</expr>)"); // Split on all expressions. public Textbox(ReportDefn r, ReportLink p, XmlNode xNode):base(r,p,xNode) { _Value=null; _CanGrow=false; _CanShrink=false; _HideDuplicates=null; _ToggleImage=null; _DataElementStyle=DataElementStyleEnum.Auto; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Value": _Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant); break; case "CanGrow": _CanGrow = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; case "CanShrink": _CanShrink = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; case "HideDuplicates": _HideDuplicates = xNodeLoop.InnerText; break; case "ToggleImage": _ToggleImage = new ToggleImage(r, this, xNodeLoop); break; case "DataElementStyle": _DataElementStyle = Oranikle.Report.Engine.DataElementStyle.GetStyle(xNodeLoop.InnerText, OwnerReport.rl); break; default: if (ReportItemElement(xNodeLoop)) // try at ReportItem level break; // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown Textbox element '" + xNodeLoop.Name + "' ignored."); break; } } if (_Value == null) OwnerReport.rl.LogError(8, "Textbox value not specified for " + (this.Name == null? "'name not specified'": this.Name.Nm)); if (this.Name != null) { try { OwnerReport.LUReportItems.Add(this.Name.Nm, this); // add to referenceable TextBoxes } catch // Duplicate name { OwnerReport.rl.LogError(4, "Duplicate Textbox name '" + this.Name.Nm + "' ignored."); } } }
DataRegion _ParentDataRegion; // when DataRegions are nested; the nested regions have the parent set public DataRegion(ReportDefn r, ReportLink p, XmlNode xNode):base(r,p,xNode) { _KeepTogether=false; _NoRows=null; _DataSetName=null; _DataSetDefn=null; _PageBreakAtStart=false; _PageBreakAtEnd=false; _Filters=null; }
public ChartExpression(ReportDefn r, ReportLink p, XmlNode xNode):base(r,p,xNode) { _Values=null; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { //case "Value": // _Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant); // break; case "DataValues": _Values = new DataValues(r, p, xNodeLoop); break; case "DataPoint": _DataPoint = (DataPoint) this.OwnerReport.LUDynamicNames[xNodeLoop.InnerText]; break; case "ChartLabel": _ChartLabel = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Variant); break; // 05122007AJM & GJL Added to store PlotType case "PlotType": _PlotType = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Variant); break; //140208 GJL Added for left/Right YAxis Support case "YAxis": _YAxis = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.String); break; case "NoMarker": case "fyi:NoMarker": _NoMarker = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.String); break; case "LineSize": case "fyi:LineSize": _LineSize = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.String); break; case "fyi:Color": case "Color": case "Colour": _Colour = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.String); break; default: if (ReportItemElement(xNodeLoop)) // try at ReportItem level break; // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown Chart element '" + xNodeLoop.Name + "' ignored."); break; } } }
IDictionary _Columns; // QueryColumn (when SQL) public Query(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _DataSourceName=null; _QueryCommandType=QueryCommandTypeEnum.Text; _CommandText=null; _QueryParameters=null; _Timeout=0; _RowLimit=0; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "DataSourceName": _DataSourceName = xNodeLoop.InnerText; break; case "CommandType": _QueryCommandType = Oranikle.Report.Engine.QueryCommandType.GetStyle(xNodeLoop.InnerText, OwnerReport.rl); break; case "CommandText": _CommandText = new Expression(r, this, xNodeLoop, ExpressionType.String); break; case "QueryParameters": _QueryParameters = new QueryParameters(r, this, xNodeLoop); break; case "Timeout": _Timeout = XmlUtil.Integer(xNodeLoop.InnerText); break; case "RowLimit": // Extension of RDL specification _RowLimit = XmlUtil.Integer(xNodeLoop.InnerText); break; default: // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown Query element '" + xNodeLoop.Name + "' ignored."); break; } // end of switch } // end of foreach // Resolve the data source name to the object if (_DataSourceName == null) { r.rl.LogError(8, "DataSourceName element not specified for Query."); return; } }
public ChartBase(Report r, Row row, Chart c, MatrixCellEntry[,] m, Expression showTooltips, Expression showTooltipsX,Expression _ToolTipYFormat, Expression _ToolTipXFormat) { _ChartDefn = c; _row = row; _DataDefn = m; _bm = null; int width = _ChartDefn.WidthCalc(r, null); int height = RSize.PixelsFromPoints(_ChartDefn.HeightOrOwnerHeight); Layout = new ChartLayout(width, height); _SeriesBrush = null; _SeriesMarker = null; _showToolTips = showTooltips.EvaluateBoolean(r, row); _showToolTipsX = showTooltipsX.EvaluateBoolean(r, row); _tooltipYFormat = _ToolTipYFormat.EvaluateString(r, row); _tooltipXFormat = _ToolTipXFormat.EvaluateString(r, row); }
Expression _Value; // (Variant) An expression that evaluates to the value of // this field. For example, =Fields!Price.Value+Fields!Tax.Value // The expression cannot contain aggregates or references to report items. public Field(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _Name=null; _DataField=null; _Value=null; _ColumnNumber = -1; _Type = TypeCode.String; // Run thru the attributes foreach(XmlAttribute xAttr in xNode.Attributes) { switch (xAttr.Name) { case "Name": _Name = new Name(xAttr.Value); break; } } // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "DataField": _DataField = xNodeLoop.InnerText; break; case "TypeName": // Extension !!!!!!!!!!!!!!!!! case "rd:TypeName": // Microsoft Designer uses this extension _Type = DataType.GetStyle(xNodeLoop.InnerText, this.OwnerReport); break; case "Value": _Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant); break; default: // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown Field element '" + xNodeLoop.Name + "' ignored."); break; } } if (_DataField != null && _Value != null) OwnerReport.rl.LogError(8, "Only DataField or Value may be specified in a Field element, not both."); else if (_DataField == null && _Value == null) OwnerReport.rl.LogError(8, "Either DataField or Value must be specified in a Field element."); }
Expression _Value; // (Variant) An expression that evaluates to the value to // hand in for the parameter to the Subreport. public SubreportParameter(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _Name=null; _Value=null; // Run thru the attributes foreach(XmlAttribute xAttr in xNode.Attributes) { switch (xAttr.Name) { case "Name": _Name = new Name(xAttr.Value); break; } } if (_Name == null) { // Name is required for parameters OwnerReport.rl.LogError(8, "Parameter Name attribute required."); } // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Value": _Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant); break; default: // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown Subreport parameter element '" + xNodeLoop.Name + "' ignored."); break; } } if (_Value == null) { // Value is required for parameters OwnerReport.rl.LogError(8, "The Parameter Value element is required but was not specified."); } }
Expression _Label; //(Variant) The label for the static member (displayed either on // the category axis or legend, as appropriate). public StaticMember(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _Label=null; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Label": _Label = new Expression(r, this, xNodeLoop, ExpressionType.Variant); break; default: break; } } if (_Label == null) OwnerReport.rl.LogError(8, "StaticMember requires the Label element."); }
ReportDefn _ReportDefn; // loaded report definition public Subreport(ReportDefn r, ReportLink p, XmlNode xNode) :base(r, p, xNode) { _ReportName=null; _Parameters=null; _NoRows=null; _MergeTransactions=true; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "ReportName": _ReportName = xNodeLoop.InnerText; break; case "Parameters": _Parameters = new SubReportParameters(r, this, xNodeLoop); break; case "NoRows": _NoRows = new Expression(r, this, xNodeLoop, ExpressionType.String); break; case "MergeTransactions": _MergeTransactions = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; default: if (ReportItemElement(xNodeLoop)) // try at ReportItem level break; // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown Image element " + xNodeLoop.Name + " ignored."); break; } } if (_ReportName == null) OwnerReport.rl.LogError(8, "Subreport requires the ReportName element."); OwnerReport.ContainsSubreport = true; // owner report contains a subreport }
bool _ConstantImage; // true if constant image public StyleBackgroundImage(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _Source=StyleBackgroundImageSourceEnum.Unknown; _Value=null; _MIMEType=null; _BackgroundRepeat=null; _ConstantImage=false; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Source": _Source = StyleBackgroundImageSource.GetStyle(xNodeLoop.InnerText); break; case "Value": _Value = new Expression(r, this, xNodeLoop, ExpressionType.String); break; case "MIMEType": _MIMEType = new Expression(r, this, xNodeLoop, ExpressionType.String); break; case "BackgroundRepeat": _BackgroundRepeat = new Expression(r, this, xNodeLoop, ExpressionType.Enum); break; default: // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown BackgroundImage element '" + xNodeLoop.Name + "' ignored."); break; } } if (_Source == StyleBackgroundImageSourceEnum.Unknown) OwnerReport.rl.LogError(8, "BackgroundImage requires the Source element."); if (_Value == null) OwnerReport.rl.LogError(8, "BackgroundImage requires the Value element."); }
Expression _InitialState; //(Boolean) //A Boolean expression, the value of which //determines the initial state of the toggle image. //True = “expanded” (i.e. a minus sign). False = //“collapsed” (i.e. a plus sign) public ToggleImage(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _InitialState=null; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "InitialState": _InitialState = new Expression(r, this, xNodeLoop, ExpressionType.Boolean); break; default: // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown ToggleImage element '" + xNodeLoop.Name + "' ignored."); break; } } if (_InitialState == null) OwnerReport.rl.LogError(8, "ToggleImage requires the InitialState element."); }
int _Rotation; // Angle of rotation of the label text public DataLabel(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _Style=null; _Value=null; _Visible=false; _Position=DataLabelPositionEnum.Auto; _Rotation=0; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Style": _Style = new Style(r, this, xNodeLoop); break; case "Value": _Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant); break; case "Visible": _Visible = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; case "Position": _Position = DataLabelPosition.GetStyle(xNodeLoop.InnerText, OwnerReport.rl); break; case "Rotation": _Rotation = XmlUtil.Integer(xNodeLoop.InnerText); break; default: break; } } }
string _Prompt; // The prompt displayed to the user when // prompting for database credentials for this data source. public ConnectionProperties(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _DataProvider=null; _ConnectString=null; _IntegratedSecurity=false; _Prompt=null; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "DataProvider": _DataProvider = xNodeLoop.InnerText; break; case "ConnectString": _ConnectString = new Expression(r, this, xNodeLoop, ExpressionType.String); break; case "IntegratedSecurity": _IntegratedSecurity = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; case "Prompt": _Prompt = xNodeLoop.InnerText; break; default: // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown ConnectionProperties element '" + xNodeLoop.Name + "' ignored."); break; } } if (_DataProvider == null) OwnerReport.rl.LogError(8, "ConnectionProperties DataProvider is required."); if (_ConnectString == null) OwnerReport.rl.LogError(8, "ConnectionProperties ConnectString is required."); }
Expression _Value; // (Variant or Variant Array) //An expression that evaluates to the value to //hand to the data source. The expression can //refer to report parameters but cannot contain //references to report elements, fields in the data //model or aggregate functions. //In the case of a parameter to a Values or //DefaultValue query, the expression can only //refer to report parameters that occur earlier in //the parameters list. The value for this query //parameter is then taken from the user selection //for that earlier report parameter. public QueryParameter(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _Name=null; _Value=null; // Run thru the attributes foreach(XmlAttribute xAttr in xNode.Attributes) { switch (xAttr.Name) { case "Name": _Name = new Name(xAttr.Value); break; } } // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Value": _Value = new Expression(r, this, xNodeLoop, ExpressionType.Variant); break; default: // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown QueryParameter element '" + xNodeLoop.Name + "' ignored."); break; } } if (_Name == null) OwnerReport.rl.LogError(8, "QueryParameter name is required but not specified."); if (_Value == null) OwnerReport.rl.LogError(8, "QueryParameter Value is required but not specified or invalid for " + _Name==null? "<unknown name>": _Name.Nm); }
// Handle simple case with single expression void CreateChartExpression(XmlDocument mDoc, XmlElement ce, string expr, Expression label) { XmlElement dvs = mDoc.CreateElement("DataValues"); ce.AppendChild(dvs); XmlElement dvv = mDoc.CreateElement("DataValue"); dvs.AppendChild(dvv); XmlElement dve = mDoc.CreateElement("Value"); dvv.AppendChild(dve); dve.InnerText = expr; if (label == null) return; XmlElement lbl = mDoc.CreateElement("ChartLabel"); ce.AppendChild(lbl); lbl.InnerText = label.Source; }
public Chart(ReportDefn r, ReportLink p, XmlNode xNode):base(r, p, xNode) { _Type=ChartTypeEnum.Column; _Subtype= new Expression(r,p,"Plain",ExpressionType.Enum); //AJM GJL 14082008 Allowing Expression _SeriesGroupings=null; _CategoryGroupings=null; _ChartData=null; _Legend=null; _CategoryAxis=null; _ValueAxis=null; _Title=null; _PointWidth=0; _Palette = new Expression(r, p, "Default", ExpressionType.Enum); //AJM GJL 14082008 Allowing Expression _ThreeDProperties=null; _PlotArea=null; _ChartElementOutput=ChartElementOutputEnum.Output; _isHYNEsWonderfulVector = new Expression(r, p, "False", ExpressionType.Boolean); _showTooltips = new Expression(r,p,"False",ExpressionType.Boolean); _showTooltipsX = new Expression(r, p, "False", ExpressionType.Boolean); _ToolTipXFormat = new Expression(r, p, "", ExpressionType.String); _ToolTipYFormat = new Expression(r, p, "", ExpressionType.String); // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Type": _Type = ChartType.GetStyle(xNodeLoop.InnerText); if (_Type == ChartTypeEnum.Stock || _Type == ChartTypeEnum.Unknown) { OwnerReport.rl.LogError(8, "Chart type '" + xNodeLoop.InnerText + "' is not currently supported."); } break; case "Subtype": _Subtype = new Expression(r, p, xNodeLoop, ExpressionType.Enum); //AJM GJL 14082008 break; case "SeriesGroupings": _SeriesGroupings = new SeriesGroupings(r, this, xNodeLoop); break; case "CategoryGroupings": _CategoryGroupings = new CategoryGroupings(r, this, xNodeLoop); break; case "ChartData": _ChartData = new ChartData(r, this, xNodeLoop); break; case "Legend": _Legend = new Legend(r, this, xNodeLoop); break; case "CategoryAxis": _CategoryAxis = new CategoryAxis(r, this, xNodeLoop); break; case "ValueAxis": _ValueAxis = new ValueAxis(r, this, xNodeLoop); break; case "Title": _Title = new Title(r, this, xNodeLoop); break; case "PointWidth": _PointWidth = XmlUtil.Integer(xNodeLoop.InnerText); break; case "Palette": _Palette = new Expression(r, p, xNodeLoop, ExpressionType.Enum); //AJM GJL 14082008 break; case "ThreeDProperties": _ThreeDProperties = new ThreeDProperties(r, this, xNodeLoop); break; case "PlotArea": _PlotArea = new PlotArea(r, this, xNodeLoop); break; case "ChartElementOutput": _ChartElementOutput = Oranikle.Report.Engine.ChartElementOutput.GetStyle(xNodeLoop.InnerText, OwnerReport.rl); break; case "HyneWonderfulVector": //AJM GJL 14082008 case "RenderAsVector": case "fyi:RenderAsVector": _isHYNEsWonderfulVector = new Expression(r,p,xNodeLoop,ExpressionType.Boolean); break; case "fyi:tooltip": case "fyi:Tooltip": _showTooltips = new Expression(r, p, xNodeLoop, ExpressionType.Boolean); break; case "fyi:TooltipX": _showTooltipsX = new Expression(r, p, xNodeLoop, ExpressionType.Boolean); break; case "fyi:TooltipYFormat": _ToolTipYFormat = new Expression(r, p, xNodeLoop, ExpressionType.Boolean); break; case "fyi:TooltipXFormat": _ToolTipXFormat = new Expression(r, p, xNodeLoop, ExpressionType.Boolean); break; default: if (DataRegionElement(xNodeLoop)) // try at DataRegion level break; // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown Chart element '" + xNodeLoop.Name + "' ignored."); break; } } DataRegionFinish(); // Tidy up the DataRegion if (_SeriesGroupings == null && _CategoryGroupings == null) OwnerReport.rl.LogError(8, "Chart requires either the SeriesGroupings element or CategoryGroupings element or both."); if (OwnerReport.rl.MaxSeverity > 4) // if we already have severe error don't check for these additional issues return; // Do some specific checking based on the type of the Chart specified switch (_Type) { case ChartTypeEnum.Bubble: if (_ChartData == null || _ChartData.Items[0].Datapoints.Items[0].DataValues.Items.Count != 3) OwnerReport.rl.LogError(8, "Bubble charts require three DataPoints defined."); break; case ChartTypeEnum.Scatter: if (_ChartData == null || _ChartData.Items[0].Datapoints.Items[0].DataValues.Items.Count != 2) OwnerReport.rl.LogError(8, "Scatter charts require two DataPoints defined."); break; default: break; } }
Expression _Value; // value of the property public CustomProperty(Expression name, Expression val) { _Name = name; _Value = val; }
Type _CodeType; // used for parsing of expressions; DONT USE AT RUNTIME // Constructor public ReportDefn(XmlNode xNode, ReportLog replog, string folder, NeedPassword getpswd, int objcount) // report has no parents { rl = replog; // used for error reporting _ObjectCount = objcount; // starting number for objects in this report; 0 other than for subreports GetDataSourceReferencePassword = getpswd; _ParseFolder = folder; _Description = null; _Author = null; _AutoRefresh = -1; _DataSourcesDefn = null; _DataSetsDefn = null; _Body = null; _Width = null; _PageHeader = null; _PageFooter = null; _PageHeight = null; _PageWidth = null; _LeftMargin = null; _RightMargin = null; _TopMargin = null; _BottomMargin = null; _EmbeddedImages = null; _Language = null; _CodeModules = null; _Code = null; _Classes = null; _DataTransform = null; _DataSchema = null; _DataElementName = null; _DataElementStyle = DataElementStyleEnum.AttributeNormal; _LUReportItems = new Hashtable(); // to hold all the textBoxes _LUAggrScope = new ListDictionary(); // to hold all dataset, dataregion, grouping names _LUEmbeddedImages = new ListDictionary(); // probably not very many _LUDynamicNames = new Hashtable(); _DataCache = new List<ICacheData>(); // Run thru the attributes foreach(XmlAttribute xAttr in xNode.Attributes) { switch (xAttr.Name) { case "Name": _Name = new Name(xAttr.Value); break; } } // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Description": _Description = xNodeLoop.InnerText; break; case "Author": _Author = xNodeLoop.InnerText; break; case "AutoRefresh": _AutoRefresh = XmlUtil.Integer(xNodeLoop.InnerText); break; case "DataSources": _DataSourcesDefn = new DataSourcesDefn(this, null, xNodeLoop); break; case "DataSets": _DataSetsDefn = new DataSetsDefn(this, null, xNodeLoop); break; case "Body": _Body = new Body(this, null, xNodeLoop); break; case "ReportParameters": _ReportParameters = new ReportParameters(this, null, xNodeLoop); break; case "Width": _Width = new RSize(this, xNodeLoop); break; case "PageHeader": _PageHeader = new PageHeader(this, null, xNodeLoop); break; case "PageFooter": _PageFooter = new PageFooter(this, null, xNodeLoop); break; case "PageHeight": _PageHeight = new RSize(this, xNodeLoop); break; case "PageWidth": _PageWidth = new RSize(this, xNodeLoop); break; case "LeftMargin": _LeftMargin = new RSize(this, xNodeLoop); break; case "RightMargin": _RightMargin = new RSize(this, xNodeLoop); break; case "TopMargin": _TopMargin = new RSize(this, xNodeLoop); break; case "BottomMargin": _BottomMargin = new RSize(this, xNodeLoop); break; case "EmbeddedImages": _EmbeddedImages = new EmbeddedImages(this, null, xNodeLoop); break; case "Language": _Language = new Expression(this, null, xNodeLoop, ExpressionType.String); break; case "Code": _Code = new Code(this, null, xNodeLoop); break; case "CodeModules": _CodeModules = new CodeModules(this, null, xNodeLoop); break; case "Classes": _Classes = new Classes(this, null, xNodeLoop); break; case "DataTransform": _DataTransform = xNodeLoop.InnerText; break; case "DataSchema": _DataSchema = xNodeLoop.InnerText; break; case "DataElementName": _DataElementName = xNodeLoop.InnerText; break; case "DataElementStyle": _DataElementStyle = Oranikle.Report.Engine.DataElementStyle.GetStyle(xNodeLoop.InnerText, this.rl); break; default: // don't know this element - log it this.rl.LogError(4, "Unknown Report element '" + xNodeLoop.Name + "' ignored."); break; } } if (_Body == null) rl.LogError(8, "Body not specified for report."); if (_Width == null) rl.LogError(4, "Width not specified for report. Assuming page width."); if (rl.MaxSeverity <= 4) // don't do final pass if already have serious errors { FinalPass(folder); // call final parser pass for expression resolution } // Cleanup any dangling resources if (_DataSourcesDefn != null) _DataSourcesDefn.CleanUp(null); }
bool _CanOmit=false; // When display values don't fit, is it OK to drop some from display public Axis(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _Visible =false; _Style = null; _Title = null; _Title2 = null;// 20022008 AJM GJL _Margin = false; _MajorTickMarks = AxisTickMarksEnum.None; _MinorTickMarks = AxisTickMarksEnum.None; _MajorGridLines = null; _MinorGridLines = null; _MajorInterval = null; _MinorInterval =null; _Reverse = false; _CrossAt = 0; _Interlaced = false; _Scalar=false; _Min=null; _Max=null; _LogScale=false; _Month = false; //12052008 WP // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "Visible": _Visible = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; case "Style": _Style = new Style(r, this, xNodeLoop); break; case "Title": _Title = new Title(r, this, xNodeLoop); break; // 20022008 AJM GJL - Second Y axis case "Title2": case "fyi:Title2": _Title2 = new Title(r, this, xNodeLoop); break; case "Margin": _Margin = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; case "MajorTickMarks": _MajorTickMarks = AxisTickMarks.GetStyle(xNodeLoop.InnerText, OwnerReport.rl); break; case "MinorTickMarks": _MinorTickMarks = AxisTickMarks.GetStyle(xNodeLoop.InnerText, OwnerReport.rl); break; case "MajorGridLines": _MajorGridLines = new ChartGridLines(r, this, xNodeLoop); break; case "MinorGridLines": _MinorGridLines = new ChartGridLines(r, this, xNodeLoop); break; case "MajorInterval": _MajorInterval = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Integer); OwnerReport.rl.LogError(4, "Axis element MajorInterval is currently ignored."); break; case "MinorInterval": _MinorInterval = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Integer); OwnerReport.rl.LogError(4, "Axis element MinorInterval is currently ignored."); break; case "Reverse": _Reverse = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; case "CrossAt": _CrossAt = XmlUtil.Integer(xNodeLoop.InnerText); break; case "Interlaced": _Interlaced = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; case "Scalar": _Scalar = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; case "Min": _Min = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Integer); break; case "Max": _Max = new Expression(OwnerReport, this, xNodeLoop, ExpressionType.Integer); break; case "LogScale": _LogScale = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; case "Month": case "fyi:Month": _Month = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; case "fyi:CanOmit": _CanOmit = XmlUtil.Boolean(xNodeLoop.InnerText, OwnerReport.rl); break; default: // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown Axis element '" + xNodeLoop.Name + "' ignored."); break; } } }
bool _FilterOperatorSingleRow; // false for Top/Bottom N and Percent; otherwise true public Filter(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _FilterExpression=null; _FilterOperator=FilterOperatorEnum.Unknown; _FilterValues=null; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "FilterExpression": _FilterExpression = new Expression(r, this, xNodeLoop, ExpressionType.Variant); break; case "Operator": _FilterOperator = Oranikle.Report.Engine.FilterOperator.GetStyle(xNodeLoop.InnerText); if (_FilterOperator == FilterOperatorEnum.Unknown) OwnerReport.rl.LogError(8, "Unknown Filter operator '" + xNodeLoop.InnerText + "'."); break; case "FilterValues": _FilterValues = new FilterValues(r, this, xNodeLoop); break; default: // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown Filter element '" + xNodeLoop.Name + "' ignored."); break; } } if (_FilterExpression == null) OwnerReport.rl.LogError(8, "Filter requires the FilterExpression element."); if (_FilterValues == null) { OwnerReport.rl.LogError(8, "Filter requires the FilterValues element."); return; // some of the filter operator checks require values } _FilterOperatorSingleRow = true; switch (_FilterOperator) { case FilterOperatorEnum.Like: case FilterOperatorEnum.Equal: case FilterOperatorEnum.NotEqual: case FilterOperatorEnum.GreaterThan: case FilterOperatorEnum.GreaterThanOrEqual: case FilterOperatorEnum.LessThan: case FilterOperatorEnum.LessThanOrEqual: if (_FilterValues.Items.Count != 1) OwnerReport.rl.LogError(8, "Filter Operator requires exactly 1 FilterValue."); break; case FilterOperatorEnum.TopN: case FilterOperatorEnum.BottomN: case FilterOperatorEnum.TopPercent: case FilterOperatorEnum.BottomPercent: _FilterOperatorSingleRow = false; if (_FilterValues.Items.Count != 1) OwnerReport.rl.LogError(8, "Filter Operator requires exactly 1 FilterValue."); break; case FilterOperatorEnum.In: break; case FilterOperatorEnum.Between: if (_FilterValues.Items.Count != 2) OwnerReport.rl.LogError(8, "Filter Operator Between requires exactly 2 FilterValues."); break; default: OwnerReport.rl.LogError(8, "Valid Filter operator must be specified."); break; } }
int _GapSize = 6; // TODO: hard code for now public ChartBar(Report r, Row row, Chart c, MatrixCellEntry[,] m, Expression showTooltips, Expression showTooltipsX,Expression _ToolTipYFormat, Expression _ToolTipXFormat) : base(r, row, c, m,showTooltips,showTooltipsX,_ToolTipYFormat,_ToolTipXFormat) { }
bool _ConstantStyle; // true if all Style elements are constant public Style(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { _BorderColor=null; _BorderStyle=null; _BorderWidth=null; _BackgroundColor=null; _BackgroundGradientType=null; _BackgroundGradientEndColor=null; _BackgroundImage=null; _FontStyle=null; _FontFamily=null; _FontSize=null; _FontWeight=null; _Format=null; _TextDecoration=null; _TextAlign=null; _VerticalAlign=null; _Color=null; _PaddingLeft=null; _PaddingRight=null; _PaddingTop=null; _PaddingBottom=null; _LineHeight=null; _Direction=null; _WritingMode=null; _Language=null; _UnicodeBiDirectional=null; _Calendar=null; _NumeralLanguage=null; _NumeralVariant=null; // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; switch (xNodeLoop.Name) { case "BorderColor": _BorderColor = new StyleBorderColor(r, this, xNodeLoop); break; case "BorderStyle": _BorderStyle = new StyleBorderStyle(r, this, xNodeLoop); break; case "BorderWidth": _BorderWidth = new StyleBorderWidth(r, this, xNodeLoop); break; case "BackgroundColor": _BackgroundColor = new Expression(r, this, xNodeLoop, ExpressionType.Color); break; case "BackgroundGradientType": _BackgroundGradientType = new Expression(r, this, xNodeLoop, ExpressionType.Enum); break; case "BackgroundGradientEndColor": _BackgroundGradientEndColor = new Expression(r, this, xNodeLoop, ExpressionType.Color); break; case "BackgroundImage": _BackgroundImage = new StyleBackgroundImage(r, this, xNodeLoop); break; case "FontStyle": _FontStyle = new Expression(r, this, xNodeLoop, ExpressionType.Enum); break; case "FontFamily": _FontFamily = new Expression(r, this, xNodeLoop, ExpressionType.String); break; case "FontSize": _FontSize = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit); break; case "FontWeight": _FontWeight = new Expression(r, this, xNodeLoop, ExpressionType.Enum); break; case "Format": _Format = new Expression(r, this, xNodeLoop, ExpressionType.String); break; case "TextDecoration": _TextDecoration = new Expression(r, this, xNodeLoop, ExpressionType.Enum); break; case "TextAlign": _TextAlign = new Expression(r, this, xNodeLoop, ExpressionType.Enum); break; case "VerticalAlign": _VerticalAlign = new Expression(r, this, xNodeLoop, ExpressionType.Enum); break; case "Color": _Color = new Expression(r, this, xNodeLoop, ExpressionType.Color); break; case "PaddingLeft": _PaddingLeft = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit); break; case "PaddingRight": _PaddingRight = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit); break; case "PaddingTop": _PaddingTop = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit); break; case "PaddingBottom": _PaddingBottom = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit); break; case "LineHeight": _LineHeight = new Expression(r, this, xNodeLoop, ExpressionType.ReportUnit); break; case "Direction": _Direction = new Expression(r, this, xNodeLoop, ExpressionType.Enum); break; case "WritingMode": _WritingMode = new Expression(r, this, xNodeLoop, ExpressionType.Enum); break; case "Language": _Language = new Expression(r, this, xNodeLoop, ExpressionType.Language); break; case "UnicodeBiDirectional": _UnicodeBiDirectional = new Expression(r, this, xNodeLoop, ExpressionType.Enum); break; case "Calendar": _Calendar = new Expression(r, this, xNodeLoop, ExpressionType.Enum); break; case "NumeralLanguage": _NumeralLanguage = new Expression(r, this, xNodeLoop, ExpressionType.Language); break; case "NumeralVariant": _NumeralVariant = new Expression(r, this, xNodeLoop, ExpressionType.Integer); break; default: // don't know this element - log it OwnerReport.rl.LogError(4, "Unknown Style element '" + xNodeLoop.Name + "' ignored."); break; } } }