<?xml version="1.0" encoding="UTF-8" ?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
  
      http://www.apache.org/licenses/LICENSE-2.0
    	  
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
  
-->
<library>
    
<class name="rssFeedListItem" extends="view" layout="axis:y" bgcolor="0xFFFFFF" width="$once{ parent.width }" >
    <handler name="onmouseover">
        setCurrentMouseWheelObject(this.parent.parent._scrollbar);
    </handler>
    <handler name="onmouseout">
        disableCurrentMouseWheelObject();
    </handler>
    
    <attribute name="titel" type="string" value="" />
    <attribute name="summary" type="string" value="" />
    <attribute name="link" type="string" value="" />
    <attribute name="updated" type="string" value="" />
    
    <handler name="oninit">
        <![CDATA[
            this.urlv.setAttribute('text',"<u><FONT color='#0000CC'>"+canvas.getLabelName(285)+"</FONT></u>");
        ]]>
    </handler>
    
    <labelText fontsize="10" text="$once{ parent.titel }" fontstyle="bold" multiline="true" width="$once{ parent.width }" />
    <labelText fontsize="10" text="$once{ parent.updated }" fontstyle="italic" />
    <labelText fontsize="10" name="summaryv" text="$once{ parent.summary }"  multiline="true" width="$once{ parent.width }" />
    <labelText fontsize="10" name="urlv">
        <handler name="onclick">
            lz.Browser.loadURL(parent.link,"_blank");
        </handler>
    </labelText>
    <view height="1" width="$once{ parent.width }" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
</class>    
    
<class name="rssBox" extends="view" width="$once{ parent.width-4 }" 
	   height="$once{ parent.height-22 }" y="22" x="4"
    	bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" > 	
    <method name="outputRSS" args="value">
        this.inner.outputRSS(value);
    </method>
    <view name="inner" clip="true" bgcolor="0xFFFFFF" 
        x="1" y="1" width="${ parent.width-2 }" height="${ parent.height-2 }">
        <method name="outputRSS" args="value">
            <![CDATA[
                var t = new Array();
                for(var eg in value){
                    //Debug.write("eg: ",eg,"val",value[eg]);
                    t.push(value[eg]);
                }
                
                for (var i=t.length-1;i>-1;i--){
                    //Debug.write("i ",i,"val",t[i],t[i].title.text,t[i].link.attributes.href,t[i].summary.text);
                    new lz.rssFeedListItem(this.content,{updated:t[i].updated.text,titel:t[i].title.text,link:t[i].link.attributes.href,summary:t[i].summary.text});
                }
            ]]>
        </method>
        <view name="content" layout="axis:y" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" width="${ parent.width-10 }" />        
        <om_vscrollbar name="_scrollbar" />
    </view>
</class>   

<class name="rssPanel" extends="guiPresenter"
    width="400" height="380" closable="true" labelid="277"
    resizeable="false">
    <rssBox name="feed" />
</class> 

</library>
