チェンジセット 1643

差分発生行の前後
無視リスト:
コミット日時:
2008/10/17 04:19:47 (3 ヶ月前)
コミッタ:
n_mattun
ログメッセージ:

dataプロパティ文字列のeval化/toolTipプロパティ追加/sizeChangePointプロパティ(wとh変更時に中心点になる場所)追加 など。

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • mxp/specialbutton/as3/src/n_mattun/display/SpecialButton.as

    r1626 r1643  
    44        import flash.geom.*; 
    55        import flash.text.TextField; 
     6        import flash.text.TextFormat; 
    67        import flash.display.DisplayObject; 
    78        import flash.display.Shape; 
     
    6970                private var focusListener   :FocusManager; 
    7071                private var repeatTimer         :Timer = new Timer(0,0); 
     72                private var toolTip_txt         :TextField; 
     73                private var toolTipTimer        :Timer = new Timer(600,1); 
     74                private var isToolTipHandle     :Boolean = false; 
    7175 
    7276                public var __w                          :Number = 80; 
     
    8387                public var __bgAlpha            :Number = 100; 
    8488                public var __labelAlpha         :Number = 100; 
    85                 public var __data                       :Array  = [true]; 
     89                public var __data                       :Array  = []; 
    8690                public var __actionType         :String = "ハンドラ起動"; 
    8791                public var __enabled            :Boolean= true; 
    8892                public var __useHandCursor      :Boolean= true; 
    8993                public var __pushPixel          :Number = 1; 
     94                public var __sizeChangePoint:String = "左上"; 
     95                public var __toolTip            :String = ""; 
    9096                 
    9197                //ハンドラ郡 
     
    115121                                _vw = __w; 
    116122                                _vh = __h; 
     123                                //コンストラクタ引数のパスを親として自分をaddChildする 
    117124                                args[0].addChild(this); 
    118125                        }else{ 
     
    152159                        this.labelPosition      = __labelPosition; 
    153160                        this.pushPixel          = __pushPixel; 
    154                          
     161                        this.data                       = __data; 
     162                        this.sizeChangePoint= __sizeChangePoint; 
     163                        this.toolTip            = __toolTip; 
     164                        this.repeat                     = __repeat; 
    155165                        //テスト用 
    156                         //this.__upView.handler             = "stopDrag"; 
    157                         //this.__overView.handler               = "BorderBox_bb.width"; 
    158                         //this.__downView.handler               = "startDrag"; 
    159                         //this.__disableView.handler    = "ButtonBox_box.width"; 
    160  
    161                         __shortCutKey = "shift+a"; 
    162                         repeat    =     500;//ボタン押しっぱで連続ハンドラ起動する場合のリピート間隔(0の場合はリピートなし) 
    163                          
     166                        //this.__upView.handler             = "upHandler"; 
     167                        //this.__overView.handler               = "overHandler"; 
     168                        //this.__downView.handler               = "downHandler"; 
     169                        //this.__disableView.handler    = "disableHandler"; 
    164170                        //ショートカットキーを設定しておく 
    165171                        scDownListener = new ShortCutListener(this,"shortCutDownHandler",__shortCutKey,"down",0,0); 
    166172                        scUpListener   = new ShortCutListener(this,"shortCutUpHandler"  ,__shortCutKey,"up",0,0); 
    167  
    168                         this.__initHandler                      = "initHandler"; 
    169                         this.__clickHandler                     = "initHandler"; 
    170                         this.__dbClickHandler           = "initHandler"; 
    171                         this.shortCutKey                        = __shortCutKey; 
    172                          
     173                         
     174                        this.initHandler                = __initHandler; 
     175                        this.clickHandler               = __clickHandler; 
     176                        this.dbClickHandler             = __dbClickHandler; 
     177                        this.shortCutKey                = __shortCutKey; 
    173178                         
    174179                        this.buttonMode           = true; 
     
    176181                        this.mouseChildren        = false;//子インスタンスのイベント検知有無 
    177182                        this.doubleClickEnabled   = true;//ダブルクリックイベントの検知可否 
    178                          
    179                         this.useHandCursor   = __useHandCursor; 
    180183                         
    181184                        this.enabled                            = __enabled; 
     
    440443                public override function set width(_num:Number):void { 
    441444                        if(autoSize == false){ 
     445                                var _abs = _num-__w;//変化量を取得しておく 
    442446                                __w = _num; 
    443447                                mask_mc.width = __w-outerSize*2; 
     
    446450                                innerPosition = __innerPosition; 
    447451                                cornerPart = __cornerPart; 
     452                                //変化量に応じてボタン本体のx位置を更新する 
     453                                updateXYposition("x",_abs); 
    448454                        } 
    449455                } 
     
    451457                public override function set height(_num:Number):void { 
    452458                        if(autoSize == false){ 
     459                                var _abs = _num-__h;//変化量を取得しておく 
    453460                                __h = _num; 
    454461                                body_mc.height = __h; 
     
    457464                                innerPosition = __innerPosition; 
    458465                                cornerPart = __cornerPart; 
     466                                //変化量に応じてボタン本体のx位置を更新する 
     467                                updateXYposition("y",_abs); 
    459468                        } 
    460469                } 
     
    506515                        var i=0; 
    507516                        for(i=0;i < _params.length;i++){ 
    508                                 __data[i] = _params[i]; 
     517                                //セットされたデータは評価して突っ込む 
     518                                trace("評価前:",_params[i]); 
     519                                __data[i] = dataStrToPath(_params[i]); 
     520                                trace("評価後:",__data[i]); 
    509521                        } 
    510522                } 
     
    638650                        __shortCutKey = _str; 
    639651                        scDownListener.shortCutKey = _str; 
    640                         scUpListener.shortCutKey = _str; 
     652                        scUpListener.shortCutKey   = _str; 
    641653                } 
    642654                // -------------------------------------------------------------------// 
     
    652664                        } 
    653665                } 
     666                // -------------------------------------------------------------------// 
     667                //[Inspectable(defaultValue="", name="28.ダブルクリックハンドラ名", type="String")] 
     668                public override function set useHandCursor(_bool:Boolean):void { 
     669                        __useHandCursor = _bool; 
     670                        super.useHandCursor = _bool; 
     671                } 
     672                // -------------------------------------------------------------------// 
     673                //[Inspectable(defaultValue="", name="28.ダブルクリックハンドラ名", type="String")] 
     674                public function set sizeChangePoint(_str:String):void { 
     675                        __sizeChangePoint = _str; 
     676                } 
     677                // -------------------------------------------------------------------// 
     678                //[Inspectable(defaultValue="", name="28.ダブルクリックハンドラ名", type="String")] 
     679                public function set toolTip(_str:String):void { 
     680                        __toolTip = _str; 
     681                        if(_str == ""){ 
     682                                if(isToolTipHandle == true){ 
     683                                        removeEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler); 
     684                                        toolTipTimer.removeEventListener(TimerEvent.TIMER, toolTipTimerHandler); 
     685                                        isToolTipHandle = false; 
     686                                } 
     687                        }else{ 
     688                                if(isToolTipHandle == false){ 
     689                                        addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler); 
     690                                        toolTipTimer.addEventListener(TimerEvent.TIMER, toolTipTimerHandler); 
     691                                        isToolTipHandle = true; 
     692                                } 
     693                        } 
     694                } 
    654695                // ===================================================================// 
    655696                // getter 
     
    910951                public function get repeat():uint { 
    911952                        return __repeat; 
     953                } 
     954                // -------------------------------------------------------------------// 
     955                public override function get useHandCursor():Boolean { 
     956                        return __useHandCursor; 
     957                } 
     958                // -------------------------------------------------------------------// 
     959                public function get sizeChangePoint():String { 
     960                        return __sizeChangePoint; 
     961                } 
     962                // -------------------------------------------------------------------// 
     963                public function get toolTip():String { 
     964                        return __toolTip; 
    912965                } 
    913966                // ===================================================================// 
     
    11881241                                        _obj = __upView; 
    11891242                                        btnStatus = "out"; 
     1243                                        deleteToolTip();//ツールチップがあったら消しておく 
    11901244                                        if(repeat != 0) repeatTimer.stop(); 
    11911245                                break; 
     
    12781332                private function btnClickHandler(e:*):void { 
    12791333                        trace("---------------btnClickHandler",actionType); 
     1334                        //ツールチップが表示されていたらここで消す 
     1335                        deleteToolTip(); 
    12801336                         
    12811337                        var _array:Array     = new Array(2); 
     
    12931349                         
    12941350                        switchHandler(_objPath,_objProp); 
    1295                         /* 
    1296                         //repeatが0の場合は速攻魔法発動 
    1297                         if(repeat == 0){ 
    1298                                 switchHandler(_objPath,_objProp); 
    1299                         }else{ 
    1300                         //違う場合はTimer経由でずっと俺のタ(ry 
    1301                                 repeatTimer.start(); 
    1302                         } 
    1303                         */ 
    13041351                } 
    13051352                // -------------------------------------------------------------------// 
     
    14021449                        trace("---------------btnUpHandler",actionType); 
    14031450                         
     1451                        //音を鳴らす 
     1452                        playLinkSound(__upView.sound); 
     1453                         
    14041454                        var _array:Array     = new Array(2); 
    14051455                        var _objPath:*       = this.parent; 
     
    14241474                                return; 
    14251475                        } 
    1426                          
    1427                         //音を鳴らす 
    1428                         playLinkSound(__upView.sound); 
    14291476                } 
    14301477                // -------------------------------------------------------------------// 
     
    14321479                private function btnOverHandler(e:*):void { 
    14331480                        trace("---------------btnOverHandler",e.target.parent.name,e.target.name); 
     1481                         
     1482                        //音を鳴らす 
     1483                        playLinkSound(__overView.sound); 
    14341484                         
    14351485                        var _array:Array     = new Array(2); 
     
    14551505                                return; 
    14561506                        } 
    1457                          
    1458                         //音を鳴らす 
    1459                         playLinkSound(__overView.sound); 
    14601507                } 
    14611508                // -------------------------------------------------------------------// 
     
    14641511                        trace("---------------\nbtnDownHandler"); 
    14651512 
     1513                        //音を鳴らす 
     1514                        playLinkSound(__downView.sound); 
     1515                         
    14661516                        var _array:Array     = new Array(2); 
    14671517                        var _objPath:*       = this.parent; 
     
    14861536                                return; 
    14871537                        } 
    1488                          
    1489                         //音を鳴らす 
    1490                         playLinkSound(__downView.sound); 
    14911538                } 
    14921539                // -------------------------------------------------------------------// 
     
    14941541                private function btnDisableHandler(e:*):void { 
    14951542                        trace("---------------\nbtnDisableHandler"); 
     1543                         
     1544                        //音を鳴らす 
     1545                        playLinkSound(__disableView.sound); 
    14961546                         
    14971547                        var _array:Array     = new Array(2); 
     
    15171567                                return; 
    15181568                        } 
    1519                          
    1520                         //音を鳴らす 
    1521                         playLinkSound(__disableView.sound); 
    15221569                } 
    15231570                // -------------------------------------------------------------------// 
     
    15821629                // -------------------------------------------------------------------// 
    15831630                //オブジェクト文字列を分割してターゲットパスとプロパティに分割する 
    1584                 private function getHandlerTargetPath(_str:String):Array { 
    1585                         var _array:* = new Array(); 
    1586                         var _rPath:* = this.parent; 
    1587                         var i = 0; 
    1588                         //まず.で区切る 
    1589                         _array = _str.split("."); 
    1590                         //区切った文字列を順次パスとしてプッシュ 
    1591                         for(i=0;i<_array.length-1;i++){ 
    1592                                 trace(_rPath,_array[i]); 
    1593                                 switch(_array[i]){ 
    1594                                         case "this": 
    1595                                         break; 
    1596                                         case "root": 
    1597                                                 _rPath = root; 
    1598                                         break; 
    1599                                         case "parent": 
    1600                                                 _rPath = _rPath.parent; 
    1601                                         break; 
    1602                                         default: 
    1603                                         _rPath = _rPath[_array[i]]; 
     1631                private function dataStrToPath(_obj:*):* { 
     1632                        //文字列の場合は・・・ 
     1633                        if(_obj is String){ 
     1634                                //数値に変換できるものはuintにキャストして返す 
     1635                                if(isNaN(_obj) == false) return uint(_obj); 
     1636                                //Booleanに変換できるものはtrue/falseにして返す 
     1637                                if(_obj == "true")  return true; 
     1638                                if(_obj == "false") return false; 
     1639                                //ブランクもそのまま返す 
     1640                                if(_obj == "")      return ""; 
     1641                                //文字列にドットがない場合は文字列そのものとして返す 
     1642                                if(_obj.indexOf(".") < 0){ 
     1643                                        return _obj; 
     1644                                }else{ 
     1645                                        //ドットが『\.』の場合は文字列として見なして返してしまう。 
     1646                                        if(_obj.indexOf("\\.") > 0) return _obj; 
     1647                                        //そうじゃない場合はパスと見なして評価して返す 
     1648                                        var _array:Array     = new Array(2); 
     1649                                        var _objPath:*       = this.parent; 
     1650                                        var _objProp:String  = ""; 
     1651                                        //ハンドラ文字列をパスとプロパティに分割する 
     1652                                        _array   = splitHandlerPath(_obj); 
     1653                                        _objPath = _array[0]; 
     1654                                        _objProp = _array[1]; 
     1655                                        //分割したパスをそのまま返す 
     1656                                        return _objPath[_objProp]; 
    16041657                                } 
    16051658                        } 
    1606                         return [_rPath,_array[_array.length-1]]; 
     1659                        //nullとundefinedはぬるぽ防止にブランクを返しておく 
     1660                        if(_obj == null)        return ""; 
     1661                        if(_obj == undefined)   return ""; 
     1662                        //ここまで総スルーの場合はリファレンスオブジェクト系か 
     1663                        //そのまま返せるものなのでそのまま返す 
     1664                        return _obj; 
    16071665                } 
    16081666                // -------------------------------------------------------------------// 
     
    16501708                } 
    16511709                // -------------------------------------------------------------------// 
     1710                //ボタンのxy表示位置を更新する 
     1711                private function updateXYposition(xy:String,_abs:Number):void { 
     1712                         
     1713                        switch(sizeChangePoint){ 
     1714                                case "左上"               : 
     1715                                case "LT"               : 
     1716                                        return; 
     1717                                break; 
     1718                                case "上"                : 
     1719                                case "top"              : 
     1720                                        if(xy == "x")   this.x -= (_abs / 2); 
     1721                                break; 
     1722                                case "右上"               : 
     1723                                case "RT"               : 
     1724                                        if(xy == "x")   this.x -= (_abs); 
     1725                                break; 
     1726                                case "左"                : 
     1727                                case "left"             : 
     1728                                        if(xy == "y")   this.y -= (_abs / 2); 
     1729                                break; 
     1730                                case "中央"               : 
     1731                                case "center"   : 
     1732                                        if(xy == "y")   this.y -= (_abs / 2); 
     1733                                        if(xy == "x")   this.x -= (_abs / 2); 
     1734                                break; 
     1735                                case "右"                : 
     1736                                case "right"    : 
     1737                                        if(xy == "y")   this.y -= (_abs / 2); 
     1738                                        if(xy == "x")   this.x -= (_abs); 
     1739                                break; 
     1740                                case "左下"               : 
     1741                                case "LB"               : 
     1742                                        if(xy == "y")   this.y -= (_abs); 
     1743                                break; 
     1744                                case "下"                : 
     1745                                case "bottom"   : 
     1746                                        if(xy == "y")   this.y -= (_abs); 
     1747                                        if(xy == "x")   this.x -= (_abs / 2); 
     1748                                break; 
     1749                                case "右下"               : 
     1750                                case "RB"               : 
     1751                                        if(xy == "y")   this.y -= (_abs); 
     1752                                        if(xy == "x")   this.x -= (_abs); 
     1753                                break; 
     1754                        } 
     1755                } 
     1756                // -------------------------------------------------------------------// 
     1757                //マウス移動検知ハンドラ 
     1758                private function mouseMoveHandler(e:*):void { 
     1759                        //表示されていたら消す 
     1760                        deleteToolTip(); 
     1761                        //マウスの移動が発生したら計りなおす 
     1762                        toolTipTimer.stop(); 
     1763                        toolTipTimer.start(); 
     1764                } 
     1765                // -------------------------------------------------------------------// 
     1766                //ツールチップ表示までの待ち時間が経過したら発動するハンドラ 
     1767                private function toolTipTimerHandler(e:*):void { 
     1768                        //すでにボタンから離れていたら何もしない 
     1769                        if(btnStatus == "out") return; 
     1770                        //すでに表示されていたら何もしない 
     1771                        if(toolTip_txt != null) return; 
     1772                        //作る 
     1773                        createToolTip(); 
     1774                } 
     1775                // -------------------------------------------------------------------// 
     1776                //ツールチップを表示する 
     1777                private function createToolTip():void { 
     1778                        var _fmt:TextFormat = new TextFormat("_ゴシック"); 
     1779                        toolTip_txt = new TextField(); 
     1780                        toolTip_txt.autoSize        = TextFieldAutoSize.LEFT; 
     1781                        toolTip_txt.selectable      = false; 
     1782                        toolTip_txt.border          = true; 
     1783                        toolTip_txt.borderColor     = 0x000000; 
     1784                        toolTip_txt.background      = true; 
     1785                        toolTip_txt.backgroundColor = 0xFFFFE1; 
     1786                        toolTip_txt.text            = toolTip; 
     1787                        toolTip_txt.textColor       = 0x000000; 
     1788                        toolTip_txt.setTextFormat(_fmt); 
     1789                        toolTip_txt.mouseEnabled    = false; 
     1790                         
     1791                        this.parent.addChild(toolTip_txt); 
     1792                        trace(toolTip_txt.visible,"["+toolTip+"]",toolTip_txt.width,toolTip_txt.height); 
     1793                        updateToolTipPosition(); 
     1794                } 
     1795                // -------------------------------------------------------------------// 
     1796                //ツールチップの表示位置を更新する 
     1797                private function updateToolTipPosition():void { 
     1798                        var _vx = this.parent.mouseX; 
     1799                        var _vy = this.parent.mouseY; 
     1800                        _vy += 22;//マウスポインタにカぶらせないための下余白 
     1801                         
     1802                        //右にはみ出る場合 
     1803                        if(_vx + toolTip_txt.width > this.stage.stageWidth){ 
     1804                                _vx -= (_vx + toolTip_txt.width) - this.stage.stageWidth+2; 
     1805                        } 
     1806                        //下にはみ出る場合 
     1807                        if(_vy + toolTip_txt.height > this.stage.stageHeight){ 
     1808                                _vy -= (_vy + toolTip_txt.height) - this.stage.stageHeight+2; 
     1809                        } 
     1810                        //実装 
     1811                        toolTip_txt.x = _vx; 
     1812                        toolTip_txt.y = _vy; 
     1813                } 
     1814                // -------------------------------------------------------------------// 
     1815                //ツールチップを消す 
     1816                private function deleteToolTip():void { 
     1817                        if(toolTip_txt == null) return;         //すでに消してたら何もしない 
     1818                        this.parent.removeChild(toolTip_txt);//まずステージから消す 
     1819                        toolTip_txt = null;                                     //そのあと参照をnullにしてガベコレさせる 
     1820                } 
     1821                // -------------------------------------------------------------------// 
    16521822        } 
    16531823} 
  • mxp/specialbutton/as3/src/sample.txt

    r1626 r1643  
    1212 角の内側が二重に描画してるので均一に透明にならない状態をどうにかしたい。   〆 
    1313 repeatプロパティ(ボタン押しっぱで指定のミリ秒ハンドラが起動し続ける。0だとリピートなし)を追加    〆 
    14  spb.shortCutKey        //ショートカットキー 
    15  
     14 spb.shortCutKey        //ショートカットキー     〆 
     15 dataのターゲットパスも評価の対象にする。 〆 
     16 spb.sizeChangePoint(サイズ変更時の基準点)        〆 
     17 spb.toolTip(ツールチップ)                                    〆 
    1618 
    1719■これから実装するもの 
    1820 
    19  spb.toolTip 
    20  spb.sizeChangePoint 
    2121 spb.overImage 
    2222 
    2323 日本語プロパティの英語表記プロパティも平行実装? 
    2424 
    25  
    2625■のちのち実装したいもの 
    2726 textlabel単体,imageLabel単体のコンポーネント化 
    2827 ショートカットキーのenabledをkeyListner起動しっぱなしで上位のenabledのみで判断してるため暇があったら改善したいね。 
     28 
     29 
     30memo.ブラウザ標準のtooltipの仕様 
     31        画像上でマウスが停止して0.6秒後に、マウス位置より20px程度右下にツールチップが表示される 
     32        ツールチップの表示後のツールチップ消去の条件は 
     33                ・画像から離れる 
     34                ・ツールチップ本体にマウスが触れる 
     35  のどちらか。なお、ツールチップにマウスが触れた場合は相対位置に再表示される。 
     36  表示位置がstageの描画領域をオーバーする場合は調節される。