TWaver - 專注UI技術

          http://twaver.servasoft.com/
          posts - 171, comments - 191, trackbacks - 0, articles - 2
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          自定義告警染色

          Posted on 2012-05-03 14:13 TWaver 閱讀(2054) 評論(3)  編輯  收藏
          在TWaver中,拓撲上的告警呈現的方式是多種多樣的,最常見、最通用的是在原來的圖片上疊加上告警級別所對應的顏色,這種方式在TWaver的各個分支版本中都是支持的,呈現效果如下圖所示:

          另外還有兩種是將告警顏色添加在網元的前景或背景上,效果如下:
              我們主要來看默認的渲染方式,這種方式是采取圖片顏色疊加處理,也就是在原來網元的圖片上疊加上告警的顏色,對于大部分的圖片來說是沒有什么問題的,比如任意從網上找兩種圖片進行告警渲染:
               看得出來效果還是可以的,兩張圖片的染色都沒有保持著告警的顏色。但有些圖片的渲染就不是那么讓人滿意了,從客戶那邊取過來一個icon圖片做了一下測試,結果發現:
           
              圖中對于Major,Minor和custom這三種級別的告警渲染的顏色和冒泡的顏色顯然有些不同。對于這種情況該如何處理呢,經查閱API獲得TWaver可以自定義告警染色的規則,默認采用了Defaults中的PIXEL_FILTER_FUNCTION,我們來看看默認的實現:
          1 function(sourceColor:uint, filterColor:uint):uint {
          2 var r:uint = (sourceColor >> 16) & 0xFF;
          3 var g:uint = (sourceColor &gt;&gt; <img src="http://twaver.servasoft.com/wp-includes/images/smilies/icon_cool.gif" alt="8)" class="wp-smiley"> &amp; 0xFF;
          4 var b:uint = sourceColor &amp; 0xFF;
          5 sourceColor = (r * 77 + g * 151 + b * 28) &gt;&gt; 8;
          6 sourceColor = (sourceColor &lt;&lt; 16) | (sourceColor &lt;&lt; 8 ) | sourceColor;
          7 return sourceColor &amp; filterColor;
          8 }

           有了這個方法之后,我們就可以對其進行定制,可以將這三種顏色進行一下特殊處理,直接返回告警的顏色
          1 var s:uint = (162 &lt;&lt; 16) | (193 &lt;&lt; <img src="http://twaver.servasoft.com/wp-includes/images/smilies/icon_cool.gif" alt="8)" class="wp-smiley"> | 210; twaver.Defaults.PIXEL_FILTER_FUNCTION = function(sourceColor:uint, filterColor:uint):uint {     if(sourceColor == s &amp;&amp; (filterColor == AlarmSeverity.MAJOR.color ||         filterColor == AlarmSeverity.MINOR.color         || filterColor == customAlarmSeverity.color)) {         return filterColor;     }     var r:uint = (sourceColor &gt;&gt; 16) &amp; 0xFF;
          2 var g:uint = (sourceColor &gt;&gt; <img src="http://twaver.servasoft.com/wp-includes/images/smilies/icon_cool.gif" alt="8)" class="wp-smiley"> &amp; 0xFF;
          3 var b:uint = sourceColor &amp; 0xFF;
          4 sourceColor = (r * 77 + g * 151 + b * 28) &gt;&gt; 8;
          5 sourceColor = (sourceColor &lt;&lt; 16) | (sourceColor &lt;&lt; 8 ) | sourceColor;
          6 return sourceColor &amp; filterColor;
          7 };

          運行后再來看看效果:

          最新附上完整的代碼供大家參考:
           1 <?xml version="1.0" encoding="utf-8"?>
           2 <mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
           3                 xmlns:twaver="http://www.servasoftware.com/2009/twaver/flex"
           4                 width="100%" height="100%"
           5                 creationComplete="init()" backgroundColor="#FFFFFF" >
           6     <mx:Script>
           7         <![CDATA[
           8             import twaver.AlarmSeverity;
           9             import twaver.Defaults;
          10             import twaver.Node;
          11             import twaver.Utils;
          12             import twaver.Consts;
          13             import twaver.Styles;
          14 
          15             [Embed(source="/image/BTSGroup.png")]
          16             private static var bts:Class;
          17 
          18             [Embed(source="/image/network_server.png")]
          19             private static var wireless:Class;
          20 
          21             private static var customAlarmSeverity:AlarmSeverity = AlarmSeverity.register(3, 'custom', 'custom', 0xE4DC8A);
          22 
          23             private function init():void {
          24                 var s:uint = (162 << 16 ) | (193 << 8 ) | 210;
          25                 Utils.registerImageByClass('bts', bts);
          26                 Utils.registerImageByClass('wireless', wireless);
          27                 twaver.Defaults.PIXEL_FILTER_FUNCTION = function(sourceColor:uint, filterColor:uint):uint {
          28                     if(sourceColor == s && (filterColor == AlarmSeverity.MAJOR.color ||
          29                         filterColor == AlarmSeverity.MINOR.color
          30                         || filterColor == customAlarmSeverity.color)) {
          31                         return filterColor;
          32                     }
          33                     var r:uint = (sourceColor >> 16 ) & 0xFF;
          34                     var g:uint = (sourceColor >> 8 ) & 0xFF;
          35                     var b:uint = sourceColor & 0xFF;
          36                     sourceColor = (r * 77 + g * 151 + b * 28 ) >> 8;
          37                     sourceColor = (sourceColor << 16 ) | (sourceColor << 8 ) | sourceColor;
          38                     return sourceColor & filterColor;
          39                 };
          40 
          41                 addNode(AlarmSeverity.CRITICAL, 220, 100,'bts');
          42                 addNode(AlarmSeverity.MAJOR, 340, 100,'bts');
          43                 addNode(AlarmSeverity.MINOR, 460, 100,'bts');
          44                 addNode(AlarmSeverity.WARNING, 580, 100,'bts');
          45                 addNode(AlarmSeverity.INDETERMINATE, 700, 100,'bts');
          46 
          47                 addNode(AlarmSeverity.CRITICAL, 220, 250,'wireless');
          48                 addNode(AlarmSeverity.MAJOR, 340, 250,'wireless');
          49                 addNode(AlarmSeverity.MINOR, 460, 250,'wireless');
          50                 addNode(AlarmSeverity.WARNING, 580, 250,'wireless');
          51                 addNode(AlarmSeverity.INDETERMINATE, 700, 250,'wireless');
          52             }
          53 
          54             private function addNode(alarmSeverity:AlarmSeverity, x:Number, y:Number,image):void {
          55                 var node:Node = new Node();
          56                 node.image = image;
          57                 if(image == "bts"){
          58                     node.setStyle(Styles.INNER_STYLE, Consts.INNER_STYLE_SHAPE);
          59                     node.setStyle(Styles.INNER_SHAPE, Consts.SHAPE_CIRCLE);
          60                     node.setStyle(Styles.INNER_GRADIENT, Consts.GRADIENT_RADIAL_CENTER);
          61                     node.setStyle(Styles.INNER_GRADIENT_ALPHA, 0.5);
          62                     node.setStyle(Styles.INNER_ALPHA, 0.8);
          63                     node.setStyle(Styles.INNER_PADDING, -6);
          64                     node.setStyle(Styles.INNER_BACK, false);
          65                 }else if(image == "wireless"){
          66                     node.setStyle(Styles.INNER_STYLE, Consts.INNER_STYLE_SHAPE);
          67                     node.setStyle(Styles.INNER_SHAPE, Consts.SHAPE_DIAMOND);
          68                     node.setStyle(Styles.INNER_GRADIENT, Consts.GRADIENT_RADIAL_SOUTHWEST);
          69                     node.setStyle(Styles.INNER_PADDING_TOP, 10);
          70                     node.setStyle(Styles.INNER_PADDING_BOTTOM, -5);
          71                     node.setStyle(Styles.INNER_PADDING_LEFT, -20);
          72                     node.setStyle(Styles.INNER_PADDING_RIGHT, -20);
          73                 }
          74 
          75                 node.name = alarmSeverity.name ;
          76                 node.location = new Point(x, y);
          77                 node.alarmState.setNewAlarmCount(alarmSeverity, 22);
          78                 network.elementBox.add(node);
          79             }
          80         ]]>
          81     </mx:Script>
          82     <twaver:Network id="network" width="100%" height="100%" />
          83 </mx:HBox>
           

          評論

          # re: 自定義告警染色  回復  更多評論   

          2012-05-09 13:09 by 上海婚慶公司
          這個有點復雜的

          # re: 自定義告警染色  回復  更多評論   

          2012-05-14 12:37 by 35crmo合金管
          這個代碼有點復雜

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 文昌市| 尖扎县| 增城市| 天峨县| 秦安县| 黄平县| 七台河市| 永吉县| 大新县| 轮台县| 宁德市| 吉安市| 合作市| 读书| 钟祥市| 澄城县| 宣武区| 玛纳斯县| 普兰县| 彰化县| 沙雅县| 台南县| 马龙县| 南江县| 周宁县| 陕西省| 达日县| 余江县| 临城县| 年辖:市辖区| 正定县| 化州市| 海安县| 新丰县| 宁明县| 延长县| 革吉县| 栾城县| 张北县| 黔东| 正蓝旗|