Charts-Legend Marker to None using code

<p>I would like to find a way to set the Legend: LIne ChartPattern</p><p>Marker Pattern to "None" using Brio Objects incode.</p><p> </p><p>I have to create Calculated columns which are part of a LIneargraph. It defaults with a Marker, becuase my X axis is verypopulated the graph defaults like an ugly Blob, unable todistinguish the line behind.</p><p> </p><p>Please let me know of any suggestions.</p><p> </p><p>Thanks</p><p> </p><p>Oscar</p>

Please use the ASP.NET forums for ASP.NET related questions:
http://forums.asp.net

Similar Messages

  • Chart legend too wide when using horizontal layout

    I am using a flex chart with about 15 series on it. I've set
    the legend direction variable to "horizontal". However since the
    panel width which contains the chart is fixed, the legend sprawls
    out to the right instead of going "wrapping around" nicely to stay
    within the panel. As a result, you can't read the whole legend when
    looking at the chart. The chart itself stays the proper width, but
    the legend is too wide and can only be seen via using the scrollbar
    to move horizontally. How can that be fixed?

    Solerous, you must create a custom legend. Here's an example
    that uses a grid to lay out the individual grid items. If you have
    a variable number of series, then you can probably come up with
    better logic for laying out the legend, but this should help get
    you going.
    hth,
    matt horn
    flex docs
    <?xml version="1.0"?>
    <!-- charts/CustomLegendInActionScript.mxml -->
    <mx:Application xmlns:mx="
    http://www.adobe.com/2006/mxml"
    backgroundColor="white" creationComplete="init()">
    <mx:Script><![CDATA[
    import mx.containers.GridItem;
    import mx.containers.GridRow;
    import mx.graphics.SolidColor;
    import mx.graphics.IFill;
    import mx.charts.LegendItem;
    import mx.charts.Legend;
    import mx.collections.ArrayCollection;
    [Bindable]
    public var expenses:ArrayCollection = new ArrayCollection([
    {Expense:"Taxes", April:2000, May:321, June:131, July:1100,
    August:200, September:1400, October:42},
    {Expense:"Rent", April:1000, May:95, June:313, July:600,
    August:400, September:200, October:52},
    {Expense:"Taxes", April:2000, May:321, June:131, July:90,
    August:500, September:900, October:300},
    {Expense:"Bills", April:100, May:478, June:841, July:400,
    August:600, September:1100, October:150}
    private function init():void {
    for (var i:int = 0; i < myChart.series.length; i++) {
    var li:LegendItem = new LegendItem();
    li.label = myChart.series
    .displayName;
    var sc:SolidColor = myChart.series.getStyle("fill");
    li.setStyle("fill", sc);
    var gi:GridItem = new GridItem();
    if (i < 3) {
    // First row
    gi.addChild(li);
    gr1.addChild(gi);
    } else if (i >= 3 && i < 6) {
    // Second row
    gi.addChild(li);
    gr2.addChild(gi);
    } else if (i >= 6) {
    // Third row
    gi.addChild(li);
    gr3.addChild(gi);
    ]]></mx:Script>
    <mx:Panel title="Bar Chart with Legend" width="500"
    height="600">
    <mx:BarChart id="myChart" dataProvider="{expenses}"
    height="400" showDataTips="true">
    <mx:verticalAxis>
    <mx:CategoryAxis
    dataProvider="{expenses}"
    categoryField="Expense"
    />
    </mx:verticalAxis>
    <mx:series>
    <mx:BarSeries xField="April" displayName="April (in
    $USD)"/>
    <mx:BarSeries
    xField="May"
    displayName="May (in $USD)"
    />
    <mx:BarSeries
    xField="June"
    displayName="June (in $USD)"
    />
    <mx:BarSeries
    xField="July"
    displayName="July (in $USD)"
    />
    <mx:BarSeries
    xField="August"
    displayName="August (in $USD)"
    />
    <mx:BarSeries
    xField="September"
    displayName="September (in $USD)"
    />
    <mx:BarSeries
    xField="October"
    displayName="October (in $USD)"
    />
    </mx:series>
    </mx:BarChart>
    <mx:Grid id="myGrid">
    <mx:GridRow id="gr1">
    </mx:GridRow>
    <mx:GridRow id="gr2">
    </mx:GridRow>
    <mx:GridRow id="gr3">
    </mx:GridRow>
    </mx:Grid>
    </mx:Panel>
    </mx:Application>

  • Use comment from X-Channel data in Chart Legend

    Hi,
      Does anybody know how to set up a chart legend that will display the channel comment for the X-Channel?  There is a standard option for selecting the Y-Channel comment and the line below also achieves this.  In my case the Y-data is shared across all curves and the X-Data is independent.  Thanks in advance!
    Display the Y-Channel Comment:
    @CC(CCN)@

    You're right, it doesn't work with "curve-related text", no idea, why...
    But there is a way - probably not the best one - to do this.
    Dim oMy2DaxisSystem, oMy2DCurve, oMyShape, oMyPosition, oMyLegendColumns, oMyCurveLegendPos
    Call Report.NewLayout()
    Set oMy2DaxisSystem = Report.ActiveSheet.Objects.Add(eReportObject2DAxisSystem,"My2DAxisSystem")
    Set oMyPosition = oMy2DAxisSystem.Position.ByCoordinate
    oMyPosition.X1 = 20
    oMyPosition.X2 = 80
    oMyPosition.Y1 = 20
    oMyPosition.Y2 = 80
    Set oMy2DCurve = oMy2DaxisSystem.Curves2D.Add(e2DShapeLine, "MyNewCurve")
    Set oMyShape = oMy2DCurve.Shape
    oMyShape.XChannel.Reference = "[1]/[15]"
    oMyShape.YChannel.Reference = "[1]/[25]"
    oMy2DaxisSystem.CurveLegend.Visible = True
    oMy2DaxisSystem.CurveLegend.Settings.ShowGridLines = FALSE
    Set oMyCurveLegendPos = oMy2DaxisSystem.CurveLegend.Position
    oMyCurveLegendPos.SizeMode = eLegendSizeElementwise
    oMyCurveLegendPos.ElementHeight = 6
    oMyCurveLegendPos.ElementWidth = 35
    oMy2DaxisSystem.CurveLegend.Settings.Font.Size = 5
    Set oMyLegendColumns = oMy2DaxisSystem.CurveLegend.Columns
    Call oMyLegendColumns.Add
    oMyLegendColumns(1).Type = eLegendTextComment
    oMyLegendColumns(1).RelativeWidth = 1
    oMyLegendColumns(2).Type = eLegendTextCustomText
    oMyLegendColumns(2).RelativeWidth = 1
    oMyLegendColumns(2).Text = "@CC(CurrXChnNo)@"
    Call Report.Refresh()
    The code is available in Examples, I just added some minor details.
    Another way (shorter, but not so universally valid) is to extend your code:
    Report.ActiveSheet.Objects.Item("2DAxis2").CurveLegend.Columns.Item(1).Type = eLegendTextCustomText
    Report.ActiveSheet.Objects.Item("2DAxis2").CurveLegend.Columns.Item(1).Text = "@CC(CurrXChnNo)@"
    IMO, this works only if you already have the graph.
    And take care about the object name ("2DAxis2"), this can vary from page to page...

  • Hide Excel Chart Legend Using LabVIEW Report Generation Toolkit or Active

    Hello Eveyone:
    I work on the report generation toolkit in labview and creat the report in excle. I create the chart into report but I can't hide the chart legend or change the font size using report generation toolkit.
    I appriciate you guys time.
    Thanks
    Solved!
    Go to Solution.

    Howdy!
    What is the version of LabVIEW and Report Generation Toolkit you are using? Have you taken a look at the LabVIEW Example Column Graph (Excel).vi
    and looked at the help for Excel Insert Graph VI and Excel Set Graph Font?
    Joshua B.
    National Instruments
    NI Services
    NI Support Resources
    NI Training Resources

  • Can anyone use the Javascript CSOM SP.Publishing.PublishingWeb in non-app code?

    I have been trying to write some javascript which can be used to create publishing pages in the current site (this is called in an application page opened via a custom action on the Pages library).
    I am trying to use code similar to the example on the
    SP Typescript demos page.  The only real difference between their and my implementation which I can see is that they are running in an app (hence checking SPHostUrl is is non-existent for me as I am on premise and non-app).
    My code is as follows:
    SP.SOD.executeFunc('mQuery.js', 'm$', function () {
    m$.ready(function () {
    m$('#CreatePage').click(function () {
    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function () {
    SP.SOD.executeOrDelayUntilScriptLoaded(function () {
    SP.SOD.executeFunc('sp.publishing.js', 'SP.Publishing', function () {
    createPage();
    }, 'SP.Runtime.js');
    function createPage() {
    var context = SP.ClientContext.get_current();
    var web = context.get_web();
    context.load(web);
    context.executeQueryAsync(function () {
    var pubWeb = SP.Publishing.PublishingWeb.getPublishingWeb(context, web);
    context.load(pubWeb);
    context.executeQueryAsync(function () {
    var pageInfo = new SP.Publishing.PublishingPageInformation();
    var newPage = pubWeb.addPublishingPage(pageInfo);
    context.load(newPage);
    context.executeQueryAsync(function () {
    var listItem = newPage.get_listItem();
    context.load(listItem);
    context.executeQueryAsync(function () {
    var link = document.getElementById("linkToPage");
    link.setAttribute("href", web.get_url() + "/Pages/" + listItem.get_fieldValues().FileLeafRef);
    link.innerText = "Go to new page!";
    }, function (sender, args) {
    alert('Failed to get new page: ' + args.get_message());
    }, function (sender, args) {
    alert('Failed to Add Page: ' + args.get_message());
    }, function (sender, args) {
    alert('Failed to get the PublishingWeb: ' + args.get_message());
    }, function (sender, args) {
    alert('Failed to get the Web: ' + args.get_message());
    However I cannot for the life of me figure out how to get the PublishingWeb object.  Everytime my code hits the "context.load(pubWeb)" I get a javascript error thrown in sp.runtime.js:
    "Object doesn't support property or method 'get_$y_0'"
    I've tried a number of alternatives such as hard coding the url for the context, but nothing seems to work.  Is this just me?  Or just non-app code?

    Hi,
    According to your post, my understanding is that you want to create publishing pages using ECMA Script.
    The following code(a aspx page) for your reference:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <%@ Page Language="C#" %>
    <html dir="ltr" xmlns="http://www.w3.org/1999/xhtml" xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
    <head runat="server">
    <meta name="WebPartPageExpansion" content="full" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Create Publishing Pages</title>
    <script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js"></script>
    <script type="text/javascript" src="/sites/DennisSite/_layouts/15/sp.runtime.js"></script>
    <script type="text/javascript" src="/sites/DennisSite/_layouts/15/sp.js"></script>
    <script type="text/javascript" src="/sites/DennisSite/_layouts/15/sp.publishing.js"></script>
    <script type="text/javascript">
    var context;
    var web;
    var pubWeb;
    var pageInfo;
    var newPage;
    var listItem;
    context = SP.ClientContext.get_current();
    function createPage() {
    web = context.get_web();
    pubWeb = SP.Publishing.PublishingWeb.getPublishingWeb(context, web);
    context.load(web);
    context.load(pubWeb);
    context.executeQueryAsync(
    function () {
    pageInfo = new SP.Publishing.PublishingPageInformation();
    newPage = pubWeb.addPublishingPage(pageInfo);
    context.load(newPage);
    context.executeQueryAsync(
    function () {
    listItem = newPage.get_listItem();
    context.load(listItem);
    context.executeQueryAsync(
    function () {
    var link = document.getElementById("linkToPage");
    link.setAttribute("href", web.get_url() + "/Pages/" + listItem.get_fieldValues().FileLeafRef);
    link.innerText = "Go to new page!";
    function (sender, args) {
    alert('Failed to get new page: ' + args.get_message());
    function (sender, args) {
    alert('Failed to Add Page: ' + args.get_message());
    function (sender, args) {
    alert('Failed to get the PublishingWeb: ' + args.get_message());
    </script>
    </head>
    <body>
    <form id="form1" runat="server">
    </form>
    <button onclick="createPage()">Create Publishing Page</button>
    <a id="linkToPage"></a>
    </body>
    </html>
    The Result:
    Best Regards
    Dennis Guo
    TechNet Community Support

  • How to refresh JPA cache from non-JPA code(JDBC)

    In the system, let say there are two different tools are available, Tool-A_Uses_JPA and Tool_B_Uses_JDBC.
    As the name of tools is self explanatory what persistence technology used by tools.
    Say,there is a table COMMON_TABLE. This can be used by both tools to perform CRUD operation.
    Lets see the problematic scenario-
    Tool_B_Uses_JDBC tries to insert some new rows in COMMON_TABLE, by performing following tasks--
    (Tool_B_Uses_JDBC already calculated how many rows will be inserted into COMMON_TABLE. Let's say it is 5.)
    1. Read JPA_GENERATED_KEYS table for getting last_value for COMMON_TABLE. Let's say it is 30.
    2. Add (last_value + number of rows to be inserted), here it 30+5 =35.
    3. Update the JPA_GENERATED_KEYS table for last_value of COMMON_TABLE by the value calculated in step 2.
    In my example it was updated by 35.
    Above three steps done in a single transaction.
    Now, ideally if any other tool use this COMMON_TABLE to perform any insert operation, the last_value from
    JPA_GENERATED_KEYS should be 35. But for Tool-A_Uses_JPA, JPA cache is enabled. So this tool still get
    last_value as 30, rather 35. And hence Tool-A_Uses_JPA, does not work properly.
    So to resolve this issue, i thought to write a code to update JPA cache while updating the last_value.
    Is there any way to update and/or send notification to all other tools to update JPA cache when updating
    last_value form NON_JPA code?
    Or is there any other way to resolve this issues?
    Thanks.

    Marking this as answered, as this can never be a situation the way JPA uses caching. This was issue with the transaction form non-JPA code. Actually when JDBC uses data source then whether transaction will be committed as soon as application issues commit, is not guaranteed. Hence need to work on transaction.

  • SSRS 2008 - Chart Legend Missing Customitems property

    Hi,
    I'm currently in the process of converting my SSRS 2005 reports originaly designed with Dundas charts, to a SSRS 2008 report and facing an
    issue with the charts legend.
    Dundas Charts allows me to create custom legend items on a row, cell collection basis.
    After BIDS 2008 has converted the rdl-file everthing looks fine except the custom legend that I have created
    in the SSRS 2005 report. The legend items did not appear in the reports preview.
    I looked thru all the legend properties and read thru Formatting the Legend on a Chart (Report Builder
    and SSRS) 
    but still unable to locate the properties.
    Anyone encounters this issue and likes to share a workaround / solution?
    Thanks
    Bodo

    Hi Mike,
    I tried your workaround and it displays properly, but problem is with displaying the Line color. I'm using reportviewer in .Net 2008 and Line control doesn't contain any expression tab. Please help me with setting line color. Attached is RDLC in XML format.
    <?xml version="1.0" encoding="utf-8"?>
    <Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
    <DataSources>
    <DataSource Name="DummyDataSource">
    <rd:DataSourceID>51fc0fcb-b3fc-4dd4-9397-dfba551fc9df</rd:DataSourceID>
    <ConnectionProperties>
    <DataProvider>SQL</DataProvider>
    <ConnectString />
    </ConnectionProperties>
    </DataSource>
    </DataSources>
    <InteractiveHeight>11in</InteractiveHeight>
    <rd:DrawGrid>true</rd:DrawGrid>
    <InteractiveWidth>8.5in</InteractiveWidth>
    <rd:SnapToGrid>true</rd:SnapToGrid>
    <RightMargin>1in</RightMargin>
    <LeftMargin>1in</LeftMargin>
    <BottomMargin>1in</BottomMargin>
    <rd:ReportID>5dd5ca48-0cc1-46e3-aa1a-c65d468d7238</rd:ReportID>
    <DataSets>
    <DataSet Name="Item">
    <Fields>
    <Field Name="Event_ID">
    <DataField>Event_ID</DataField>
    <rd:TypeName>System.String</rd:TypeName>
    </Field>
    <Field Name="Category">
    <DataField>Category</DataField>
    <rd:TypeName>System.String</rd:TypeName>
    </Field>
    <Field Name="Country">
    <DataField>Country</DataField>
    <rd:TypeName>System.String</rd:TypeName>
    </Field>
    <Field Name="OrderQtr">
    <DataField>OrderQtr</DataField>
    <rd:TypeName>System.String</rd:TypeName>
    </Field>
    <Field Name="Count">
    <DataField>Count</DataField>
    <rd:TypeName>System.String</rd:TypeName>
    </Field>
    </Fields>
    <Query>
    <DataSourceName>DummyDataSource</DataSourceName>
    <CommandText>SELECT * FROM Item</CommandText>
    </Query>
    </DataSet>
    </DataSets>
    <Width>10.625in</Width>
    <Body>
    <ReportItems>
    <List Name="list1">
    <ZIndex>3</ZIndex>
    <Left>2.375in</Left>
    <DataSetName>Item</DataSetName>
    <ReportItems>
    <Matrix Name="matrix1">
    <MatrixColumns>
    <MatrixColumn>
    <Width>2.125in</Width>
    </MatrixColumn>
    </MatrixColumns>
    <RowGroupings>
    <RowGrouping>
    <Width>0.375in</Width>
    <DynamicRows>
    <Grouping Name="matrix1_ColumnGroup1">
    <GroupExpressions>
    <GroupExpression />
    </GroupExpressions>
    </Grouping>
    <ReportItems>
    <Rectangle Name="rectangle2">
    <ZIndex>1</ZIndex>
    <ReportItems>
    <Line Name="line2">
    <Top>0.1in</Top>
    <Width>0.285in</Width>
    <Style>
    <BorderStyle>
    <Default>Solid</Default>
    </BorderStyle>
    <BorderWidth>
    <Default>8pt</Default>
    </BorderWidth>
    </Style>
    <Left>0.06in</Left>
    <Height>0in</Height>
    </Line>
    </ReportItems>
    </Rectangle>
    </ReportItems>
    </DynamicRows>
    </RowGrouping>
    </RowGroupings>
    <ColumnGroupings>
    <ColumnGrouping>
    <Height>0.05in</Height>
    <DynamicColumns>
    <Grouping Name="matrix1_ColumnGroup2">
    <Label>=Fields!Category.Value</Label>
    <GroupExpressions>
    <GroupExpression>=Fields!Category.Value</GroupExpression>
    </GroupExpressions>
    </Grouping>
    <ReportItems>
    <Textbox Name="textbox3">
    <rd:DefaultName>textbox3</rd:DefaultName>
    <Style>
    <FontSize>9pt</FontSize>
    <PaddingLeft>2pt</PaddingLeft>
    <PaddingRight>2pt</PaddingRight>
    <PaddingTop>2pt</PaddingTop>
    <PaddingBottom>2pt</PaddingBottom>
    </Style>
    <ZIndex>2</ZIndex>
    <CanGrow>true</CanGrow>
    <Value />
    </Textbox>
    </ReportItems>
    </DynamicColumns>
    </ColumnGrouping>
    </ColumnGroupings>
    <Corner>
    <ReportItems>
    <Textbox Name="textbox2">
    <rd:DefaultName>textbox2</rd:DefaultName>
    <Style>
    <FontSize>9pt</FontSize>
    <PaddingLeft>2pt</PaddingLeft>
    <PaddingRight>2pt</PaddingRight>
    <PaddingTop>2pt</PaddingTop>
    <PaddingBottom>2pt</PaddingBottom>
    </Style>
    <ZIndex>3</ZIndex>
    <CanGrow>true</CanGrow>
    <Value />
    </Textbox>
    </ReportItems>
    </Corner>
    <MatrixRows>
    <MatrixRow>
    <Height>0.19in</Height>
    <MatrixCells>
    <MatrixCell>
    <ReportItems>
    <Textbox Name="textbox5">
    <rd:DefaultName>textbox5</rd:DefaultName>
    <Style>
    <FontSize>9pt</FontSize>
    <PaddingLeft>2pt</PaddingLeft>
    <PaddingRight>2pt</PaddingRight>
    <PaddingTop>2pt</PaddingTop>
    <PaddingBottom>2pt</PaddingBottom>
    <LineHeight>8pt</LineHeight>
    </Style>
    <CanGrow>true</CanGrow>
    <Value>=Fields!Category.Value</Value>
    </Textbox>
    </ReportItems>
    </MatrixCell>
    </MatrixCells>
    </MatrixRow>
    </MatrixRows>
    <Height>0.24in</Height>
    </Matrix>
    </ReportItems>
    <Top>4.25in</Top>
    <Width>2.5in</Width>
    <Grouping Name="list1_Details_Group">
    <GroupExpressions>
    <GroupExpression>=Fields!Category.Value</GroupExpression>
    </GroupExpressions>
    </Grouping>
    <Height>0.25in</Height>
    </List>
    <Chart Name="chart2">
    <Legend>
    <Visible>true</Visible>
    <Style>
    <BorderStyle>
    <Default>Solid</Default>
    </BorderStyle>
    <BorderWidth>
    <Default>0.5pt</Default>
    </BorderWidth>
    </Style>
    <Position>RightCenter</Position>
    </Legend>
    <CategoryAxis>
    <Axis>
    <Title />
    <MajorGridLines>
    <Style>
    <BorderStyle>
    <Default>Solid</Default>
    </BorderStyle>
    </Style>
    </MajorGridLines>
    <MinorGridLines>
    <Style>
    <BorderStyle>
    <Default>Solid</Default>
    </BorderStyle>
    </Style>
    </MinorGridLines>
    <MajorTickMarks>Outside</MajorTickMarks>
    <Min>0</Min>
    <Visible>true</Visible>
    </Axis>
    </CategoryAxis>
    <ZIndex>2</ZIndex>
    <DataSetName>Item</DataSetName>
    <PlotArea>
    <Style>
    <BackgroundColor>LightGrey</BackgroundColor>
    <BorderStyle>
    <Default>Solid</Default>
    </BorderStyle>
    </Style>
    </PlotArea>
    <ThreeDProperties>
    <Enabled>true</Enabled>
    <Rotation>30</Rotation>
    <Inclination>30</Inclination>
    <Shading>Simple</Shading>
    <WallThickness>50</WallThickness>
    </ThreeDProperties>
    <PointWidth>0</PointWidth>
    <SeriesGroupings>
    <SeriesGrouping>
    <StaticSeries>
    <StaticMember>
    <Label>Value1</Label>
    </StaticMember>
    </StaticSeries>
    </SeriesGrouping>
    </SeriesGroupings>
    <Top>0.75in</Top>
    <Subtype>Plain</Subtype>
    <ValueAxis>
    <Axis>
    <Title />
    <MajorGridLines>
    <ShowGridLines>true</ShowGridLines>
    <Style>
    <BorderStyle>
    <Default>Solid</Default>
    </BorderStyle>
    </Style>
    </MajorGridLines>
    <MinorGridLines>
    <Style>
    <BorderStyle>
    <Default>Solid</Default>
    </BorderStyle>
    </Style>
    </MinorGridLines>
    <MajorTickMarks>Outside</MajorTickMarks>
    <Min>0</Min>
    <Margin>true</Margin>
    <Visible>true</Visible>
    <Scalar>true</Scalar>
    </Axis>
    </ValueAxis>
    <Type>Pie</Type>
    <Width>4.375in</Width>
    <CategoryGroupings>
    <CategoryGrouping>
    <DynamicCategories>
    <Grouping Name="chart2_CategoryGroup1">
    <GroupExpressions>
    <GroupExpression>=Fields!Country.Value</GroupExpression>
    </GroupExpressions>
    </Grouping>
    <Label>=Fields!Country.Value</Label>
    </DynamicCategories>
    </CategoryGrouping>
    </CategoryGroupings>
    <Palette>Default</Palette>
    <ChartData>
    <ChartSeries>
    <DataPoints>
    <DataPoint>
    <DataValues>
    <DataValue>
    <Value>=Count(Fields!Country.Value)</Value>
    </DataValue>
    </DataValues>
    <DataLabel>
    <Value>=Count(Fields!Country.Value)*Sum(Fields!Country.Value)/100 + "%"</Value>
    <Visible>true</Visible>
    </DataLabel>
    <Marker>
    <Size>6pt</Size>
    </Marker>
    </DataPoint>
    </DataPoints>
    </ChartSeries>
    </ChartData>
    <Style>
    <BackgroundColor>White</BackgroundColor>
    </Style>
    <Title>
    <Caption>Open Incident by Country</Caption>
    </Title>
    <Height>3.125in</Height>
    <Left>5.5in</Left>
    </Chart>
    <Chart Name="chart1">
    <Legend>
    <Visible>true</Visible>
    <Style>
    <BorderStyle>
    <Default>Solid</Default>
    </BorderStyle>
    <BorderWidth>
    <Default>0.5pt</Default>
    </BorderWidth>
    </Style>
    <Position>RightCenter</Position>
    </Legend>
    <CategoryAxis>
    <Axis>
    <Title />
    <MajorGridLines>
    <Style>
    <BorderStyle>
    <Default>Solid</Default>
    </BorderStyle>
    </Style>
    </MajorGridLines>
    <MinorGridLines>
    <Style>
    <BorderStyle>
    <Default>Solid</Default>
    </BorderStyle>
    </Style>
    </MinorGridLines>
    <MajorTickMarks>Outside</MajorTickMarks>
    <Min>0</Min>
    <Visible>true</Visible>
    </Axis>
    </CategoryAxis>
    <ZIndex>1</ZIndex>
    <DataSetName>Item</DataSetName>
    <PlotArea>
    <Style>
    <BackgroundColor>LightGrey</BackgroundColor>
    <BorderStyle>
    <Default>Solid</Default>
    </BorderStyle>
    </Style>
    </PlotArea>
    <ThreeDProperties>
    <Enabled>true</Enabled>
    <Rotation>30</Rotation>
    <Inclination>30</Inclination>
    <Shading>Simple</Shading>
    <WallThickness>50</WallThickness>
    </ThreeDProperties>
    <PointWidth>0</PointWidth>
    <SeriesGroupings>
    <SeriesGrouping>
    <StaticSeries>
    <StaticMember>
    <Label>Value1</Label>
    </StaticMember>
    </StaticSeries>
    </SeriesGrouping>
    </SeriesGroupings>
    <Top>0.75in</Top>
    <Subtype>Plain</Subtype>
    <ValueAxis>
    <Axis>
    <Title />
    <MajorGridLines>
    <ShowGridLines>true</ShowGridLines>
    <Style>
    <BorderStyle>
    <Default>Solid</Default>
    </BorderStyle>
    </Style>
    </MajorGridLines>
    <MinorGridLines>
    <Style>
    <BorderStyle>
    <Default>Solid</Default>
    </BorderStyle>
    </Style>
    </MinorGridLines>
    <MajorTickMarks>Outside</MajorTickMarks>
    <Min>0</Min>
    <Margin>true</Margin>
    <Visible>true</Visible>
    <Scalar>true</Scalar>
    </Axis>
    </ValueAxis>
    <Type>Pie</Type>
    <Width>4.375in</Width>
    <CategoryGroupings>
    <CategoryGrouping>
    <DynamicCategories>
    <Grouping Name="chart1_CategoryGroup1">
    <GroupExpressions>
    <GroupExpression>=Fields!Category.Value</GroupExpression>
    </GroupExpressions>
    </Grouping>
    <Label>=Fields!Category.Value</Label>
    </DynamicCategories>
    </CategoryGrouping>
    </CategoryGroupings>
    <Palette>Default</Palette>
    <ChartData>
    <ChartSeries>
    <DataPoints>
    <DataPoint>
    <DataValues>
    <DataValue>
    <Value>=Count(Fields!Category.Value)</Value>
    </DataValue>
    </DataValues>
    <DataLabel>
    <Value>=Count(Fields!Category.Value)</Value>
    <Visible>true</Visible>
    </DataLabel>
    <Marker>
    <Size>6pt</Size>
    </Marker>
    </DataPoint>
    </DataPoints>
    </ChartSeries>
    </ChartData>
    <Style>
    <BackgroundColor>White</BackgroundColor>
    </Style>
    <Title>
    <Caption>Open Incident by Category</Caption>
    </Title>
    <Height>3.125in</Height>
    <Left>0.25in</Left>
    </Chart>
    <Textbox Name="textbox1">
    <rd:DefaultName>textbox1</rd:DefaultName>
    <Width>5in</Width>
    <Style>
    <Color>SteelBlue</Color>
    <FontFamily>Tahoma</FontFamily>
    <FontSize>20pt</FontSize>
    <FontWeight>700</FontWeight>
    <PaddingLeft>2pt</PaddingLeft>
    <PaddingRight>2pt</PaddingRight>
    <PaddingTop>2pt</PaddingTop>
    <PaddingBottom>2pt</PaddingBottom>
    </Style>
    <CanGrow>true</CanGrow>
    <Height>0.36in</Height>
    <Value>Report1</Value>
    </Textbox>
    </ReportItems>
    <Height>5.625in</Height>
    </Body>
    <Language>en-US</Language>
    <TopMargin>1in</TopMargin>
    </Report>
    Thanks,
    Prem
    Prem

  • Custom Formatting Of Chart Legends

    I've been playing with Flex Charting, and I have lots of nice
    looking graphs that I've created from database feeds. However, what
    I really want to know how to do is format the chart legend better.
    For example I have a pie chart that has about 50 different data
    items/series and the legend is huge in either horizontal or
    vertical mode it prints all the way down the page. How can I make
    it two, three or more columns?

    Hi Justin,
    I think, there is no way to do such a customization with the standard Javadoc (i.e. powered by the Standard Doclet).
    After all, the job of the standard Javadoc is doing standard (general) things and I just cannot imagine any general rule (setting or option) that would embrace all kinds of possible customizations about displaying of annotations.
    So, the only way in your situation would be to modify the doclet itself. You can try tweaking the standard doclet: overload some its classes or change sources (according to the license they provide). However, I just can say, that way proved to have lots of limitations.
    Fortunately, I could suggest you a different rote that would allow you solving your problem in a few minutes. We have a product called "DocFlex/Javadoc":
    http://www.filigris.com/products/docflex_javadoc/
    This is a highly customizable Javadoc doclet. More exactly, this is a system for rapid development of professional quality doclets (with the support of both framed/single-file HTML and RTF output).
    With that tool, the generation of every sort of Javadoc output is programmed in special templates (using graphic Template Designer). The product is provided with the "standard template set" that generates the HTML Java API documentation very similar to the standard Javadoc.
    In fact, to solve you task, you will need to modify a subtemplate called "annotations.tpl". See on this page: http://www.filigris.com/products/docflex_javadoc/templates.php
    If you are interested about all this, we could help you to modify the necessary template absolutely free. Then, you will need only to buy a full product license to have everything work without limitations and that will be all!
    So, if you are interested, please let us know by sending a e-mail to the address found on this page:
    http://www.filigris.com/company/contact.php
    Regards,
    Leonid Rudy
    http://www.docflex.com

  • Useful Code of the Day:  Hideable Tree Nodes

    Someone posted about how they could selectively hide tree nodes, and I already had this AbstractTreeModel class (which does some things DefaultTreeModel does and some it doesn't) and a concrete subclass for TreeNode objects, so I was thinking how one could do hideable nodes. So I came up with this solution.
    There's 4 classes here:
    - AbstractTreeModel is the base for the concrete TreeNodeTreeModel
    - TreeNodeTreeModel extends AbstractTreeModel to support TreeNodes (DefautlMutableTreeNode, etc.)
    - HideableMutableTreeNode which is a DefautlMutableTreeNode subclass which has a visible field (with is/set methods, of course).
    - HideableTreeModel is the hideable model which is a subclass of TreeNodeTreeModel.
    A HideableMutableTreeNode can be set invisible directly, but the tree still needs to be notified to update. So it's best to use the methods in HideableTreeModel which set a node's visibility which notify the tree of changes accordingly. Methods are also provided to check a full path's visibility or ensure a node including all parent nodes are visible.
    A HideableTreeModel can take any TreeNode class, it doesn't have to be all HideableMutableTreeNodes, but only HideableMutableTreeNodes can be made invisible, of course. Any other TreeNode type would just be considered visible.
    Hiding nodes works basically by making the tree think there's less nodes then there are. And to do this, the node counts and child index search just works by looping thru the parent's children. This has potential perfomance drawbacks of course, since one has to loop thru the node's children to get nodes every time. This could be alleviated by not supporting non-hideable nodes changing the internal maintenance of HideableMutableTreeNode contents. But I'll leave that to whoever really needs it. It shouldn't be a problem if there are are a relatively small set of child nodes in any given parent.
    Also, note that the root node in the model cannot be made invisible, cuz it'd be redundant since JTree can be set to hide the root node.
    // *** HideableTreeModel ***
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.tree.*;
    * <code>HideableTreeModel</code> is an <code>TreeNodeTreeModel</code>
    * implementation for <code>HideableMutableTreeNode</code> objects.  The
    * model can also take any other <code>javax.swing.tree.TreeNode</code>
    * objects. 
    public class HideableTreeModel extends TreeNodeTreeModel {
          * Creates a new <code>HideableTreeModel</code> object.
          * @param  root  the root node
         public HideableTreeModel(TreeNode root) {
              super(root);
          * Checks if the specified node is visible.  A node can only be
          * hidden if the node is an instance of <code>HideableMutableTreeNode</code>.  <br />
          * <br />
          * Note that this only test the visibility of the specified node, not
          * whether a parent node is visible.  Use <code>isPathToNodeVisible(Object)</code>
          * to check if the full path is visible. 
          * @param  node  the node
          * @param  true if the node is visible, else false
         public boolean isNodeVisible(Object node) {
              if(node != getRoot()) {
                   if(node instanceof HideableMutableTreeNode) {
                        return ((HideableMutableTreeNode)node).isVisible();
              return true;
          * Sets the specified node to be hidden.  A node can only be made hidden
          * if the node is an instance of <code>HideableMutableTreeNode</code>.  <br />
          * <br />
          * Note that this method will notify the tree to reflect any changes to
          * node visibility.  <br />
          * <br />
          * Note that this will not alter the visibility of any nodes in the
          * specified node's path to the root node.  Use
          * <code>ensurePathToNodeVisible(Object)</code> instead to make sure the
          * full path down to that node is visible.  <br />
          * <br />
          * Note that this method will notify the tree to reflect any changes to
          * node visibility. 
          * @param  node  the node
          * @param  v     true for visible, false for hidden
          * @param  true if the node's visibility could actually change, else false
         public boolean setNodeVisible(Object node, boolean v) {
              // can't hide root
              if(node != getRoot()) {
                   if(node instanceof HideableMutableTreeNode) {
                        HideableMutableTreeNode n = (HideableMutableTreeNode)node;
                        // don't fix what ain't broke...
                        if(v != n.isVisible()) {
                             TreeNode parent = n.getParent();
                             if(v) {
                                  // need to get index after showing...
                                  n.setVisible(v);
                                  int index = getIndexOfChild(parent, n);
                                  super.nodeInserted(parent, n, index);
                             } else {
                                  // need to get index before hiding...
                                  int index = getIndexOfChild(parent, n);
                                  n.setVisible(v);
                                  super.nodeRemoved(parent, n, index);
                        return true;
              return false;
          * Checks if the specified node is visible and all nodes above it are
          * visible. 
          * @param  node  the node
          * @param  true if the path is visible, else false
         public boolean isPathToNodeVisible(Object node) {
              Object[] path = getPathToRoot(node);
              for(int i = 0; i < path.length; i++) {
                   if(!isNodeVisible(path)) {
                        return false;
              return true;
         * Sets the specified node and all nodes above it to be visible.
         * Note that this method will notify the tree to reflect any changes to
         * node visibility.
         * @param node the node
         public void ensurePathToNodeVisible(Object node) {
              Object[] path = getPathToRoot(node);
              for(int i = 0; i < path.length; i++) {
                   setNodeVisible(path[i], true);
         * Returns the child of parent at index index in the parent's child array.
         * @param parent the parent node
         * @param index the index
         * @return the child or null if no children
         public Object getChild(Object parent, int index) {
              if(parent instanceof TreeNode) {
                   TreeNode p = (TreeNode)parent;
                   for(int i = 0, j = -1; i < p.getChildCount(); i++) {
                        TreeNode pc = (TreeNode)p.getChildAt(i);
                        if(isNodeVisible(pc)) {
                             j++;
                        if(j == index) {
                             return pc;
              return null;
         * Returns the number of children of parent.
         * @param parent the parent node
         * @return the child count
         public int getChildCount(Object parent) {
              int count = 0;
              if(parent instanceof TreeNode) {
                   TreeNode p = (TreeNode)parent;
                   for(int i = 0; i < p.getChildCount(); i++) {
                        TreeNode pc = (TreeNode)p.getChildAt(i);
                        if(isNodeVisible(pc)) {
                             count++;
              return count;
         * Returns the index of child in parent.
         * @param parent the parent node
         * @param child the child node
         * @return the index of the child node in the parent
         public int getIndexOfChild(Object parent, Object child) {
              int index = -1;
              if(parent instanceof TreeNode && child instanceof TreeNode) {
                   TreeNode p = (TreeNode)parent;
                   TreeNode c = (TreeNode)child;
                   if(isNodeVisible(c)) {
                        index = 0;
                        for(int i = 0; i < p.getChildCount(); i++) {
                             TreeNode pc = (TreeNode)p.getChildAt(i);
                             if(pc.equals(c)) {
                                  return index;
                             if(isNodeVisible(pc)) {
                                  index++;
              return index;
         * Main method for testing.
         * @param args the command-line arguments
         public static void main(String[] args) {
              JFrame f = new JFrame();
              f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              HideableMutableTreeNode root = new HideableMutableTreeNode("root");
              root.add(new HideableMutableTreeNode("child_1"));
              final HideableMutableTreeNode c2 = new HideableMutableTreeNode("child_2");
              c2.setVisible(false);
              final HideableMutableTreeNode c2a = new HideableMutableTreeNode("child_2_A");
              c2.add(c2a);
              c2.add(new HideableMutableTreeNode("child_2_B"));
              root.add(c2);
              HideableMutableTreeNode c3 = new HideableMutableTreeNode("child_3");
              HideableMutableTreeNode cC = new HideableMutableTreeNode("child_3_C");
              cC.setVisible(false);
              c3.add(cC);
              c3.add(new HideableMutableTreeNode("child_3_D"));
              root.add(c3);
              root.add(new HideableMutableTreeNode("child_4"));
              root.add(new HideableMutableTreeNode("child_5"));
              DefaultMutableTreeNode c6 = new DefaultMutableTreeNode("child_6");
              c6.add(new DefaultMutableTreeNode("child_6_A"));
              c6.add(new DefaultMutableTreeNode("child_6_B"));
              root.add(c6);
              final HideableTreeModel model = new HideableTreeModel(root);
              JTree tree = new JTree(model);
              f.getContentPane().add(new JScrollPane(tree), BorderLayout.CENTER);
              JButton b = new JButton("toggle");
              b.addActionListener(new ActionListener() {
                   public void actionPerformed(ActionEvent e) {
                        model.setNodeVisible(c2, !model.isNodeVisible(c2));
                        //model.ensurePathToNodeVisible(c2a);
              f.getContentPane().add(b, BorderLayout.SOUTH);
              f.pack();
              f.setSize(300, 500);
              f.show();
    // *** HideableMutableTreeNode ***
    import javax.swing.*;
    import javax.swing.tree.*;
    * <code>HideableMutableTreeNode</code> is a <code>DefaultMutableTreeNode</code>
    * implementation that works with <code>HideableTreeModel</code>.
    public class HideableMutableTreeNode extends DefaultMutableTreeNode {
         * The node is visible flag.
         public boolean visible = true;
         * Creates a tree node that has no parent and no children, but which
         * allows children.
         public HideableMutableTreeNode() {
              super();
         * Creates a tree node with no parent, no children, but which allows
         * children, and initializes it with the specified user object.
         * @param userObject - an Object provided by the user that
         * constitutes the node's data
         public HideableMutableTreeNode(Object userObject) {
              super(userObject);
         * Creates a tree node with no parent, no children, initialized with the
         * specified user object, and that allows children only if specified.
         * @param userObject - an Object provided by the user that
         * constitutes the node's data
         * @param allowsChildren - if true, the node is allowed to have child
         * nodes -- otherwise, it is always a leaf node
         public HideableMutableTreeNode(Object userObject, boolean allowsChildren) {
              super(userObject, allowsChildren);
         * Checks if the node is visible.
         * @return true if the node is visible, else false
         public boolean isVisible() {
              return this.visible;
         * Sets if the node is visible.
         * @param v true if the node is visible, else false
         public void setVisible(boolean v) {
              this.visible = v;
    // *** TreeNodeTreeModel ***
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.tree.*;
    * <code>TreeNodeTreeModel</code> is an <code>AbstractTreeModel</code>
    * implementation for <code>javax.swing.tree.TreeNode</code> objects.
    public class TreeNodeTreeModel extends AbstractTreeModel {
         * Creates a new <code>TreeNodeTreeModel</code> object.
         * @param root the root node
         public TreeNodeTreeModel(TreeNode root) {
              super();
              setRoot(root);
         * Returns the parent of the child node.
         * @param node the child node
         * @return the parent or null if root
         public Object getParent(Object node) {
              if(node != getRoot() && (node instanceof TreeNode)) {
                   return ((TreeNode)node).getParent();
              return null;
         * Returns the child of parent at index index in the parent's child array.
         * @param parent the parent node
         * @param index the index
         * @return the child or null if no children
         public Object getChild(Object parent, int index) {
              if(parent instanceof TreeNode) {
                   return ((TreeNode)parent).getChildAt(index);
              return null;
         * Returns the number of children of parent.
         * @param parent the parent node
         * @return the child count
         public int getChildCount(Object parent) {
              if(parent instanceof TreeNode) {
                   return ((TreeNode)parent).getChildCount();
              return 0;
         * Returns the index of child in parent.
         * @param parent the parent node
         * @param child the child node
         * @return the index of the child node in the parent
         public int getIndexOfChild(Object parent, Object child) {
              if(parent instanceof TreeNode && child instanceof TreeNode) {
                   return ((TreeNode)parent).getIndex((TreeNode)child);
              return -1;
         * Returns true if node is a leaf.
         * @param node the node
         * @return true if the node is a leaf
         public boolean isLeaf(Object node) {
              if(node instanceof TreeNode) {
                   return ((TreeNode)node).isLeaf();
              return true;
         * Main method for testing.
         * @param args the command-line arguments
         public static void main(String[] args) {
              JFrame f = new JFrame();
              f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
              root.add(new DefaultMutableTreeNode("child_1"));
              DefaultMutableTreeNode c2 = new DefaultMutableTreeNode("child_2");
              c2.add(new DefaultMutableTreeNode("child_2_A"));
              c2.add(new DefaultMutableTreeNode("child_2_B"));
              root.add(c2);
              root.add(new DefaultMutableTreeNode("child_3"));
              root.add(new DefaultMutableTreeNode("child_4"));
              JTree tree = new JTree(new TreeNodeTreeModel(root));
              f.getContentPane().add(new JScrollPane(tree));
              f.pack();
              f.setSize(300, 500);
              f.show();
    // *** AbstractTreeModel ***
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.net.*;
    import java.text.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.tree.*;
    public abstract class AbstractTreeModel implements TreeModel {
         * The list of tree model listeners.
         private Vector modelListeners = new Vector();
         * The root object of the tree.
         private Object root = null;
         * Basic no-op constructor.
         public AbstractTreeModel() {
         * Gets the root object of the tree.
         * @return the root object
         public Object getRoot() {
              return this.root;
         * Sets the root object of the tree.
         * @param r the root object
         protected void setRoot(Object r) {
              this.root = r;
         * Gets the path to the root node for the specified object.
         * @param node the root node
         * @return the path to the object or <CODE>null</CODE>
         public Object[] getPathToRoot(Object node) {
              return getPathToRoot(node, 0);
         * Gets the path to the root node for the specified object.
         * @param node the root node
         * @param i the current index
         * @return the path to the object or <CODE>null</CODE>
         private Object[] getPathToRoot(Object node, int i) {
              Object anode[];
              if(node == null) {
                   if(i == 0) {
                        return null;
                   anode = new Object[i];
              } else {
                   i++;
                   if(node == getRoot()) {
                        anode = new Object[i];
                   } else {
                        anode = getPathToRoot(getParent(node), i);
                   anode[anode.length - i] = node;
              return anode;
         * Gets the parent object of the specified object. This method is not
         * part of the <code>javax.swing.tree.TreeModel</code> interface, but is
         * required to support the <code>getPathToRoot(Object)</code> method,
         * which is widely used in this class. Therefore, it is important to
         * correctly implement this method.
         * @param obj the object
         * @parma the parent object or null if no parent or invalid object
         protected abstract Object getParent(Object obj);
         * Adds a listener for the <CODE>TreeModelEvent</CODE> posted after the
         * tree changes.
         * @param l the tree model listener
         public void addTreeModelListener(TreeModelListener l) {
              modelListeners.addElement(l);
         * Removes a listener previously added with addTreeModelListener().
         * @param l the tree model listener
         public void removeTreeModelListener(TreeModelListener l) {
              modelListeners.removeElement(l);
         * Forces the tree to reload. This is useful when many changes occur
         * under the root node in the tree structure.
         * <b>NOTE:</b> This will cause the tree to be collapsed. To maintain
         * the expanded nodes, see the <code>getExpandedPaths(JTree)</code>
         * and <code>expandPaths(JTree, ArrayList)</code> methods.
         * @see #getExpandedPaths(JTree)
         * @see #expandPaths(JTree, ArrayList)
         public void reload() {
              reload(getRoot());
         * Forces the tree to repaint. This is useful when many changes occur
         * under a specific node in the tree structure.
         * <b>NOTE:</b> This will cause the tree to be collapsed below the
         * updated node.
         * @param node the node that changed
         public void reload(Object node) {
              if(node != null) {
                   TreePath tp = new TreePath(getPathToRoot(node));
                   fireTreeStructureChanged(new TreeModelEvent(this, tp));
         * Messaged when the user has altered the value for the item identified
         * by <CODE>path</CODE> to <CODE>newValue</CODE>.
         * @param path the path to the changed object
         * @param newValue the new value
         public void valueForPathChanged(TreePath path, Object newValue) {
              nodeChanged(path.getLastPathComponent());
         * Notifies the tree that nodes were inserted. The index is looked up
         * automatically.
         * @param node the parent node
         * @param child the inserted child node
         public void nodeInserted(Object node, Object child) {
              nodeInserted(node, child, -1);
         * Notifies the tree that nodes were inserted.
         * @param node the parent node
         * @param child the inserted child node
         * @param index the index of the child
         public void nodeInserted(Object node, Object child, int index) {
              if(index < 0) {
                   index = getIndexOfChild(node, child);
              if(node != null && child != null && index >= 0) {
                   TreePath tp = new TreePath(getPathToRoot(node));
                   int[] ai = { index };
                   Object[] ac = { child };
                   fireTreeNodesInserted(new TreeModelEvent(this, tp, ai, ac));
         * Notifies the tree that nodes were removed. The index is required
         * since by this point, the object will no longer be in the tree.
         * @param node the parent node
         * @param child the removed child node
         * @param index the index of the child
         public void nodeRemoved(Object node, Object child, int index) {
              if(node != null && child != null && index >= 0) {
                   TreePath tp = new TreePath(getPathToRoot(node));
                   int[] ai = { index };
                   Object[] ac = { child };
                   fireTreeNodesRemoved(new TreeModelEvent(this, tp, ai, ac));
         * Notifies the tree that a node was changed.
         * @param node the changed node
         public void nodeChanged(Object node) {
              if(node != null) {
                   TreePath tp = new TreePath(getPathToRoot(node));
                   fireTreeNodesChanged(new TreeModelEvent(this, tp, null, null));
         * Fires "tree nodes changed" events to all listeners.
         * @param event the tree model event
         protected void fireTreeNodesChanged(TreeModelEvent event) {
              for(int i = 0; i < modelListeners.size(); i++) {
                   ((TreeModelListener)modelListeners.elementAt(i)).treeNodesChanged(event);
         * Fires "tree nodes inserted" events to all listeners.
         * @param event the tree model event
         protected void fireTreeNodesInserted(TreeModelEvent event) {
              for(int i = 0; i < modelListeners.size(); i++) {
                   ((TreeModelListener)modelListeners.elementAt(i)).treeNodesInserted(event);
         * Fires "tree nodes removed" events to all listeners.
         * @param event the tree model event
         protected void fireTreeNodesRemoved(TreeModelEvent event) {
              for(int i = 0; i < modelListeners.size(); i++) {
                   ((TreeModelListener)modelListeners.elementAt(i)).treeNodesRemoved(event);
         * Fires "tree structure changed" events to all listeners.
         * @param event the tree model event
         protected void fireTreeStructureChanged(TreeModelEvent event) {
              for(int i = 0; i < modelListeners.size(); i++) {
                   ((TreeModelListener)modelListeners.elementAt(i)).treeStructureChanged(event);
         * Records the list of currently expanded paths in the specified tree.
         * This method is meant to be called before calling the
         * <code>reload()</code> methods to allow the tree to store the paths.
         * @param tree the tree
         * @param pathlist the list of expanded paths
         public ArrayList getExpandedPaths(JTree tree) {
              ArrayList expandedPaths = new ArrayList();
              addExpandedPaths(tree, tree.getPathForRow(0), expandedPaths);
              return expandedPaths;
         * Adds the expanded descendants of the specifed path in the specified
         * tree to the internal expanded list.
         * @param tree the tree
         * @param path the path
         * @param pathlist the list of expanded paths
         private void addExpandedPaths(JTree tree, TreePath path, ArrayList pathlist) {
              Enumeration enum = tree.getExpandedDescendants(path);
              while(enum.hasMoreElements()) {
                   TreePath tp = (TreePath)enum.nextElement();
                   pathlist.add(tp);
                   addExpandedPaths(tree, tp, pathlist);
         * Re-expands the expanded paths in the specified tree. This method is
         * meant to be called before calling the <code>reload()</code> methods
         * to allow the tree to store the paths.
         * @param tree the tree
         * @param pathlist the list of expanded paths
         public void expandPaths(JTree tree, ArrayList pathlist) {
              for(int i = 0; i < pathlist.size(); i++) {
                   tree.expandPath((TreePath)pathlist.get(i));

    Hey
    I'm not trying to show anyone up here, but having just built a tree model for displaying an XML document in a tree, I thought this seemed like a neat exercise.
    I implemented this very differently from the @OP. I only have one class, HiddenNodeTreeModel. All the hidden node data is stored in the model itself in my class. The advantage of what I've created is it will work with any TreeModel. The disadvantage is that I think it's not going to be very scalable - the additional computing to get the number of child nodes and to adjust indexes is heavy. So if you need a scalable solution definitely don't use this.
    Anyway here you go
    HiddenNodeTreeModel.java
    ======================
    package tjacobs.ui.tree;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Iterator;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JTree;
    import javax.swing.event.TreeModelListener;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.TreeModel;
    import javax.swing.tree.TreePath;
    import tjacobs.ui.WindowUtilities;
    public class HiddenNodeTreeModel implements TreeModel {
         TreeModel mModel;
         ArrayList<Object> mHidden = new ArrayList<Object>();
         public HiddenNodeTreeModel (TreeModel model) {
              mModel = model;
         public void addTreeModelListener(TreeModelListener arg0) {
              mModel.addTreeModelListener(arg0);
         private ArrayList<Integer> getHiddenChildren(Object parent) {
              ArrayList<Integer> spots = new ArrayList<Integer>();
              Iterator _i = mHidden.iterator();
              while (_i.hasNext()) {
                   Object hidden = _i.next();
                   int idx = mModel.getIndexOfChild(parent, hidden);
                   if (idx != -1) {
                        spots.add(idx);
              return spots;
         public Object getChild(Object arg0, int index) {
              ArrayList<Integer> spots = getHiddenChildren(arg0);
              Collections.sort(spots);
              Iterator<Integer> _i = spots.iterator();
              while (_i.hasNext()) {
                   int num = _i.next();
                   if (num <= index) {
                        index++;
              return mModel.getChild(arg0, index);
         public int getChildCount(Object arg0) {
              ArrayList list = getHiddenChildren(arg0);
              System.out.println("size = " + list.size());
              return mModel.getChildCount(arg0) - list.size();
         public int getIndexOfChild(Object arg0, Object arg1) {
              int index = mModel.getIndexOfChild(arg0, arg1);
              ArrayList<Integer> spots = getHiddenChildren(arg0);
              Collections.sort(spots);
              Iterator<Integer> _i = spots.iterator();
              int toSub = 0;
              while (_i.hasNext()) {
                   int num = _i.next();
                   if (num <= index) {
                        toSub++;
              return index - toSub;
         public Object getRoot() {
              // TODO Auto-generated method stub
              return mModel.getRoot();
         public boolean isLeaf(Object arg0) {
              // TODO Auto-generated method stub
              return mModel.isLeaf(arg0);
         public void removeTreeModelListener(TreeModelListener arg0) {
              mModel.removeTreeModelListener(arg0);
         public void valueForPathChanged(TreePath arg0, Object arg1) {
              mModel.valueForPathChanged(arg0, arg1);
         public void hideNode(Object node) {
              if (node instanceof TreePath) {
                   node = ((TreePath)node).getLastPathComponent();
              mHidden.add(node);
         public void showNode(Object node) {
              mHidden.remove(node);
         public void showAll() {
              mHidden.clear();
          * @param args
         public static void main(String[] args) {
              // TODO Auto-generated method stub
              DefaultMutableTreeNode A = new DefaultMutableTreeNode("A");
              DefaultMutableTreeNode B = new DefaultMutableTreeNode("B");
              DefaultMutableTreeNode C = new DefaultMutableTreeNode("C");
              DefaultMutableTreeNode D = new DefaultMutableTreeNode("D");
              DefaultMutableTreeNode E = new DefaultMutableTreeNode("E");
              DefaultMutableTreeNode F = new DefaultMutableTreeNode("F");
              A.add(B);
              B.add(C);
              B.add(D);
              B.add(E);
              E.add(F);
              DefaultTreeModel model = new DefaultTreeModel(A);
              final HiddenNodeTreeModel hmodel = new HiddenNodeTreeModel(model);
              final JTree tree = new JTree(hmodel);
              JFrame jf = new JFrame("HiddenNodeTreeModel Test");
              jf.add(tree);
              JMenuBar bar = new JMenuBar();
              jf.setJMenuBar(bar);
              JMenu menu = new JMenu("Options");
              bar.add(menu);
              final JMenuItem hide = new JMenuItem("Hide");
              final JMenuItem show = new JMenuItem("ShowAll");
              menu.add(hide);
              menu.add(show);
              ActionListener al = new ActionListener() {
                   public void actionPerformed(ActionEvent ae) {
                        if (ae.getSource() == hide) {
                             hmodel.hideNode(tree.getSelectionPath());
                             tree.updateUI();
                        else {
                             hmodel.showAll();
                             tree.updateUI();
              hide.addActionListener(al);
              show.addActionListener(al);
              jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              jf.setBounds(100,100,100,100);
              jf.setVisible(true);
    }

  • Chart Legend: Worked in Beta, No longer working in Prod

    Hi everybody,
    The legend attached to the LineChart is no longer displaying the proper color. That is, the line, in the linechart is red (as requested) but the "legend" is black. It is supposed to be a red square and the word "Jobs" but I get a black square (as it is not picking the fact that it should be red).
    <s:SolidColorStroke id="s3" color="red" />
    <mx:Legend dataProvider="{myChart}" />
    <mx:LineChart id="myChart"
      x="10" y="40" width="600" height="400"
      dataProvider="{platformsData}"
      showDataTips="true" >
    <mx:series>
    <mx:LineSeries yField="id" displayName="Jobs" lineStroke="{s3}"/>
    </mx:series>
    </mx:LineChart>
    This worked in Beta but no longer works in Production. Is this a bug or I need to make coding changes to accommodate to new Production ways of dealing with this?
    Regards,
    egm

    Seems like a bug to me.  If you remove lineStroke="{s3}", the chart legend loads fine.
    Might have something to do with fill color perhaps?
    In any case, the fills documentation says:
    "If you specify the fills property and you want to have a Legend  control, you must manually create a Legend control and add LegendItems to it."
    Perhaps the entry for lineStroke should say the same.
    In the mean time you could use the defaults, or a custom Legend, like this (place into an AIR 2 project if you try running it):
    <?xml version="1.0" encoding="utf-8"?>
    <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                                xmlns:s="library://ns.adobe.com/flex/spark"
                                xmlns:mx="library://ns.adobe.com/flex/mx" width="1059" height="722">
         <fx:Script>
              <![CDATA[
                   import mx.events.FlexEvent;
                   [Bindable]
                   public var platformsData:Array = [{id:1, jobs:'Test1'},{id:4, jobs:'Test2'},{id:6, jobs:'Test3'},{id:9, jobs:'Test4'}];
              ]]>
         </fx:Script>
         <fx:Declarations>
              <s:SolidColorStroke id="s3" color="0xFF0000" weight="2" alpha=".8"/>
         </fx:Declarations>
         <mx:Legend>
              <mx:LegendItem label="Jobs" fontWeight="bold">
                   <mx:fill>
                        <mx:SolidColor color="0xFF0000"/>
                   </mx:fill>
                   <mx:stroke>
                        <mx:SolidColorStroke color="0xFF0000" weight="2"/>
                   </mx:stroke>
              </mx:LegendItem>
         </mx:Legend>
         <mx:LineChart id="myChart" x="53" y="124" width="600" height="400" dataProvider="{platformsData}" showDataTips="true">
              <mx:series>
                   <mx:LineSeries yField="id" displayName="Jobs" lineStroke="{s3}"/>
              </mx:series>
         </mx:LineChart>
    </s:WindowedApplication>

  • Global Chart of Accounts to individual company codes

    Hi
    I would like to know the various conditions that should follow if we use a Global Chart of Accounts.
    This Global chart of accounts is to be used by many company codes.
    This Global chart of accounts will be used for consolidation. How the actual consolidation would take place ? Does it use the same principle of using the group account number in the individual company code's account number while creating the GL account master in the individual company code ? (I am confused because the company codes would be using the same account number as that is available in the Global chart of account). Or we dont have to enter the same account number again in the master GL of Individual company code ?
    Your valuable views on this are welcome.
    Regards

    Hi,
    Within Operating Chart of A/C of each Co.Code, Group Chart of Account need to be given
    Group Chart of A/C GL Codes need to be different than Operating Chart of A/C GL Codes.
    Generally, First 4 / 5 Digits of GL Code in Operating Chart of A/C can be used as GL Code in Group Chart of A/C wherever they exactly correlate with each other.
    Warm Regards...
    Ameya...

  • Pie chart legend showing digit "1" when we set "ignore blank cells"property

    All,
    We have pie chart in Xcelsius 2008 that shows the data with legend value and we have also set the ignore blank cells property to ignore the blank value from column. but once we set this property, it displays the digit "1" in the legend when there is no data.
    we are expecting that nothing should be displayed in pie chart legend when there is no data for the pie chart.
    Thanks,
    Sourabh

    hi Sourabh,
    I could replicate your scenario.
    Workaround is to create a duplicate of this chart. Go to properties of this new chart.
    Go to Appearance ->
    Uncheck
    - Legend
    - Mouse-over values
    - Data Labels
    for this chart.
    Write a logic in excel using 'IF' to verify if your data is empty.
    Use 'Dynamic Visibility' feature to display this chart only when your data is empty.
    Display your original chart if your data is not empty.
    Regards,
    Vamsee

  • SSRS Hide one data value label in chart legend

    Is it possible  to hide one value in the legend? I've got a stacked bar chart, but there's one value that I don't want to display in the Legend. Is it possible to hide this particular color and label in the legend?
    Thanks,
    Chris

    Hi Chris,
    Yes. In Reporting Services 2005, you could add a filter to hide one value label in the chart legend. This can be done with the following instructions:
    In Report Designer, open the chart properties dialog box and go to Data tab.
    Double click the item in the Series groups to open the Grouping and Sorting Properties dialog box.
    Switch to the Filter tab. Add a filter using the following setting:
    Expression: =Fields!<FieldName>.value
    Operaiton: !=
    Value: =”value”
    If you have any further questions, please let me know.
    Thanks.
    ***Xiao Min Tan***Microsoft Online Community***

  • Reporting Services Chart Legend Label

    I am creating a chart from analysis services cube data
    data is like this
    District            Year          Value
    A                    2001          10
    B                    2002          29
    (null)              2003           19
    The charts are creating fine but the legends are not showing fine. In series group i have also tried to use an expression to fix the null label.
    For null value the label is created as "Series 1". I don't want this to happen. for null value i want my chart legend to show as "State"
    Any help will be appriciated
    Regards

    Hi,
    You can use expression to achieve that. In series group, set the group on expression to be:
    =iif(Fields!<District>.Value is nothing, “State”, Fields!<District>.Value)
    Also, set the label expression to be:
    =iif(Fields!<District>.Value is nothing, “State”, Fields!<District>.Value)
    Hope this helps.
    Raymond

  • Chart Legend issues

    Is there a way to force a Bar Chart legend in Crystal Report 11.5 to display its objects in a particular order?
    For Example, say I am reporting on the consumption of "Bananas" and "Apples" by State. The Bar Chart should display the percentage of people who eat these fruits by county (Percent Bar Chart). The "Apples" percentage always displays on top of the bar chart and the "Bananas" on the bottom. The legend for this graph also displays the "Apple" color first, then the "Banana" color. However, if the "Banana" percentage is 0% the legend displays the "Banana" color first on the legend. This creates a inconsistent report (with plenty of complaints).
    I would like the "Banana" color to always display second in the legend. Hope I didn't confuse anyone and any ideas would be helpful.
    Thanks in advance!

    Can you post an example .rpt (saved with data)?
    I can throw it up in the debugger and see what's going on.
    -[Dan3D|http://www.threedgraphics.com] (who quite possibly wrote the legend code many years ago).

Maybe you are looking for

  • How to create a long text

    Want to create a long text field in Module pool table. How to create object, Object id? As text description for the Object id is to be copied into report. Ex. Form Header text is maintained in sales documents.This text is copied when description for

  • How do I uninstall 'Apple Mobile Device Support'?

    I tried to uninstall all Apple software as I was having difficulty with the latest upgrade but I stupidly did it in a random order. I now can't get rid of this last piece of software or download the new verison of itunes. Can anybody help?

  • When I open firefox it opens in a extremely small size. How do I fix this so it opens in full screen?

    Firefox opens in an extremely small size when I open it. I tried to maximize it and restart. Nothing fixes it. How do I fix this problem? It is driving me nuts.

  • Which version of SQL Dev is included with JDev 11g?

    Is there a method to tell which specific version and/or build of SQL Developer is built into JDev 11g? I've searched through the Help->About options and it mentions under the Extensions tab v11.1.1.0.30.50.26 for the SQL Developer Extensions entry, w

  • E-mail alarms always sent late

    iCal has been consistently sending me e-mail alarms to late. Generally I set an alarm to send me e-mail about upcoming events 2 or 3 days beforehand, but iCal sends me the e-mail after the event has passed! "Message" and "Message with sound" alarms e