root/platform/air/wasaco/src/wasaco.mxml @ 16896

Revision 16896, 20.5 kB (checked in by kan, 6 years ago)

wassrのAPIがchannelの時はcreated_onフィードしか返さないので、net.Wassrでepochフィールドを無理矢理作ってみた。これで表示とソートの問題を解決

Line 
1<?xml version="1.0" encoding="utf-8"?>
2<mx:Application
3        xmlns:mx="http://www.adobe.com/2006/mxml"
4        layout="absolute"
5        height="504"
6        width="400"
7        cornerRadius="4"
8        applicationComplete="init()"
9         xmlns:ns1="*">
10    <mx:Script>
11    <![CDATA[
12        import mx.events.CloseEvent;
13        import flash.net.URLRequestDefaults;
14        import mx.events.ResizeEvent;
15        import mx.managers.SystemManager;
16        import mx.controls.Alert;
17                import mx.controls.Text;
18                import mx.controls.Image;
19                import mx.containers.TitleWindow;
20        import mx.managers.PopUpManager;
21        import vc.kan.net.Wassr;
22        import vc.kan.data.DBObject;
23            import mx.formatters.DateFormatter;
24       
25        private const feedStyle:String = "<style>" +
26                "* { color: white; font-size: 11px; " +
27                "    font-family:\"メイリオ\",\"Hiragino Kaku Gothic Pro\", \"ヒラギノ角ゴ Pro W3\",\"MS Pゴシック\", \"Osaka\", sans-selif; }" +
28                "img.profile { width: 32px; height: 32px; margin: 2px; }" +
29                "a.reply { color: #aaaaff; font-size: 9px; }" +
30                "table { border: none; width: 100%; }" +
31                "td { vertical-align:top; }" +
32                "td.status { text-align: right; margin-bottom: 10px; }" +
33                "span.time,span.user,span.area_name { font-size: 9px; margin: 2px; }" +
34                "img.btn { width: 12px; height: 12px; padding: 1px; vertical-align:text-bottom; }" +
35        "</style>";
36       
37        private const feedTemplate:XML =
38                <div>
39                        <tr>
40                                <td rowspan="2">
41                                        <a><img class="profile" src="" /></a>
42                                </td>
43                                <td></td>
44                        </tr>
45                        <tr>
46                                <td class="status">
47                                        <span class="user"></span>
48                                        <span class="time"></span>
49                                        <a class="comment" href="javascript:void(0)"><img class="btn" src="app:assets/comment.png" /></a>
50                                        <a class="iine" href="javascript:void(0)"><img class="btn" src="app:/assets/normal.png" /></a>
51                                        <a href="#"><img class="btn" src="app:/assets/camera.png" /></a>
52                                        <a href="#"><img class="btn" src="app:/assets/map.png" /><span class="area_name"></span></a>
53                                        <a href="#"><img class="btn" src="app:/assets/world.png" /></a>
54                                </td>
55                        </tr>
56                        <tr>
57                                <td colspan="2" style="height: 5px">
58                                </td>
59                        </tr>
60                </div>;
61
62                public var timer:Timer = new Timer(60000);
63               
64                private var feed_view:Array = new Array(20);
65               
66                private var wassr:Wassr;
67               
68                public var user_id:String;
69                public var password:String;
70               
71                public var feed_item:Object;
72                private var iine_map:Object;
73               
74                private var verXML:XML;
75
76                private var settingDb:DBObject = new DBObject(Setting);
77               
78                private function init():void
79                {
80                        URLRequestDefaults.userAgent = "wasaco/"+version()+"; http://fushihara.net/wasaco.html";
81                       
82                        this.panel.title = "wasaco ver " + version();
83                        this.panel.addEventListener( MouseEvent.MOUSE_DOWN, doDrag );
84                        this.panel.addEventListener( MouseEvent.MOUSE_UP, savePosition );
85                        this.minimizeBtn.addEventListener( MouseEvent.MOUSE_UP, onMinimize );
86                        this.closeBtn.addEventListener( MouseEvent.MOUSE_UP, onClose );
87                        this.resizeBtn.addEventListener( MouseEvent.MOUSE_DOWN, startResize );
88                        this.resizeBtn.addEventListener( MouseEvent.MOUSE_UP, saveWindowSize );
89                        stage.addEventListener(Event.RESIZE, onResize);
90                        this.feedCanvas.addEventListener( Event.COMPLETE, feedLinkHook );
91                        this.feedCanvas.htmlLoader.paintsDefaultBackground = false;
92                        this.feedCanvas.htmlLoader.navigateInSystemBrowser = true;
93                        XML.prettyPrinting = false;
94                        iine_map = {};
95                       
96                        var mine:wasaco = this;
97                        settingDb.find(function (settings:Array):void {
98                                var setting_map:Object = {
99                                        backColor: 0,
100                                        backAlpha: 0.8,
101                                        windowWidth: 400,
102                                        windowHeight: 500,
103                                        windowX: 100,
104                                        windowY: 100
105                                };
106                                settings.forEach(function(conf:*, idx:Number, arr:Array):void {
107                                        setting_map[conf.key] = conf.value;
108                                });
109                                panel.setStyle("backgroundColor", setting_map.backColor);
110                                panel.setStyle("backgroundAlpha", setting_map.backAlpha);
111                                stage.nativeWindow.width = setting_map.windowWidth;
112                                stage.nativeWindow.height = setting_map.windowHeight;
113                                stage.nativeWindow.x = setting_map.windowX;
114                                stage.nativeWindow.y = setting_map.windowY;
115                        });
116                        showLoginWindow();
117                }
118               
119                private function initReplies():void {
120                        this.repliesCanvas.addEventListener( Event.COMPLETE, feedLinkHook );
121                        this.repliesCanvas.htmlLoader.paintsDefaultBackground = false;
122                        this.repliesCanvas.htmlLoader.navigateInSystemBrowser = true;
123                        get_feed();
124                }
125               
126                private function initChannel():void {
127                        this.channelCanvas.addEventListener( Event.COMPLETE, feedLinkHook );
128                        this.channelCanvas.htmlLoader.paintsDefaultBackground = false;
129                        this.channelCanvas.htmlLoader.navigateInSystemBrowser = true;
130                        get_channel_list();
131                }
132               
133                private function doDrag(event:MouseEvent):void {
134                        if ( this.panel.contains(event.target as DisplayObject) ) return;
135                        applicationDragHandler(event);
136                }
137               
138                private function feedLinkHook(event:Event):void {
139                        var links:Object = event.target.htmlLoader.window.document.links;
140                        for (var i:uint=0; i < links.length; i++) {
141                                if ( links[i].className == "comment" ) {
142                                        links[i].addEventListener("click", replyClick);
143                                } else if ( links[i].className == "iine" ) {
144                                        links[i].addEventListener("click", iineClick);
145                                } else {
146                                        links[i].addEventListener("mouseover", overLink);
147                                }
148                        }
149                }
150
151                private function overLink(evt:Object):void {
152                        var url:String = evt.target.href;
153                        if (url == null) return;
154                        message.text = url.replace(/http:\/\/wassr\.jp/, "");
155                }
156
157                private function replyClick(evt:Object):void {
158                        var comment:commentWindow = commentWindow(
159                                PopUpManager.createPopUp(this, commentWindow, true)
160                        );
161                        comment.target = this;
162                        comment.res_rid = evt.target.title;
163                        PopUpManager.centerPopUp(comment);
164                }
165
166                private function iineClick(evt:Object):void {
167                        iine_map[evt.target.title] = 1;
168                        favStatus(evt.target.title, function():void{
169                                evt.target.src = "app:/assets/good.png";
170                        });
171                }
172
173                public function saveSetting(key:String, value:*):void
174                {
175                        settingDb.find(function(settings:Array):void{
176                                if ( settings[0] ) {
177                                        settings[0].update({
178                                                "value": value
179                                        });
180                                }
181                        }, { "key": key }, null,
182                        function():void {
183                                settingDb.create({
184                                        "key": key,
185                                        "value": value
186                                }, function ():void {});
187                        });
188                }
189               
190                public function startAutoGetFeed():void
191                {
192                        updateCheck();
193                        timer.addEventListener(TimerEvent.TIMER, timerHandler);
194                        timer.start();
195                }
196               
197                private function showLoginWindow():void
198                {
199                        var login:loginWindow = loginWindow(
200                                PopUpManager.createPopUp(this, loginWindow, true)
201                        );
202                        login.target = this;
203                        login.loadProfile();
204                        PopUpManager.centerPopUp(login);
205                }
206               
207                public function get_feed():void
208                {
209                        if (!wassr) {
210                                wassr = new Wassr(user_id, password, URLRequestDefaults.userAgent);
211                                wassr.addEventListener(IOErrorEvent.IO_ERROR, function (evt:IOErrorEvent):void { });
212                        }
213                        message.text = "データ取得開始……";
214                        wassr.getFeed(displayFeed);
215                        wassr.getReplies(displayReplies);
216                }
217               
218                public function get_channel_list():void
219                {
220                        if (!wassr) {
221                                wassr = new Wassr(user_id, password, URLRequestDefaults.userAgent);
222                                wassr.addEventListener(IOErrorEvent.IO_ERROR, function (evt:IOErrorEvent):void { });
223                        }
224                        message.text = "チャンネルデータ取得開始……";
225                        wassr.getUserChannelList(function(channels:Array):void{
226                                channelList.dataProvider = channels;
227                                message.text = "";
228                        });
229                }
230               
231                public function timerHandler(evt:TimerEvent):void
232                {
233                        get_feed();
234                }
235               
236                private function displayFeed(feed_item:Object):void
237                {
238                        message.text = "データ取得完了";
239                        feedCanvas.htmlText = makeFeedHTML(feed_item);
240                        message.text = "";
241                }
242               
243                private function displayReplies(feed_item:Object):void
244                {
245                        message.text = "返信データ取得完了";
246                        if ( repliesCanvas ) {
247                                repliesCanvas.htmlText = makeFeedHTML(feed_item);
248                        }
249                        message.text = "";
250                }
251               
252                private function displayChannel(feed_item:Object):void
253                {
254                        message.text = "チャンネルデータ取得完了";
255                        if ( channelCanvas ) {
256                                channelCanvas.htmlText = makeChannelFeedHTML(feed_item);
257                        }
258                        message.text = "";
259                }
260               
261                private function makeFeedHTML(feed_item:Object):String
262                {
263                        var html:String = feedStyle;
264                        var pattern:RegExp = /(?<!src=")https?:\/\/[-_.!~*'()\w;\/?:@&=+$,%#]+/g;
265                        html += "<table>";
266                        for (var j:int=0; j<20; j++) {
267                                if (feed_item[j]) {
268                                        var reply:String = "";
269                                        if (feed_item[j].reply_message) {
270                                                reply = "<a class=\"reply\" href=\"" + feed_item[j].reply_status_url + "\"> &gt;" +
271                                                                feed_item[j].reply_message.replace(pattern, "[URL]") + " by " +
272                                                                feed_item[j].reply_user_nick + "</a><br />";
273                                        }
274                                        var image:String = "";
275                                        if (feed_item[j].photo_url) {
276                                                image = "<br /><img src=\"" + feed_item[j].photo_url + "\" width=\"100px\" />";
277                                        }
278                                        var tmpl:XML = feedTemplate.copy();
279                                        var text:String = feed_item[j].html;
280                                        tmpl.tr[0].td[0].a.img.@src = feed_item[j].user.profile_image_url;
281                                        tmpl.tr[0].td[0].a.@href = "http://wassr.jp/user/" + feed_item[j].user_login_id
282                                        try {
283                                                tmpl.tr[0].td[1] = XML("<td class=\"text\">" + reply + text.replace(pattern, "<a href=\"$&\" target=\"_blank\">[URL]</a>") + image + "</td>");
284                                        } catch (err:Error) { }
285                                        tmpl.tr[1].td.span[0] = XML("<span class=\"user\">by <a href=\"http://wassr.jp/user/" + feed_item[j].user_login_id + "\">" + feed_item[j].user.screen_name + "</a></span>");
286                                        var fmt:DateFormatter = new DateFormatter();
287                                        fmt.formatString = "YYYY/MM/DD JJ:NN";
288                                        tmpl.tr[1].td.span[1] = XML("<span class=\"time\">" + fmt.format(new Date(int(feed_item[j].epoch) * 1000)) + "</span>");
289                                        tmpl.tr[1].td.a[0].img.@title = feed_item[j].rid;
290                                        if (feed_item[j].user.protected) {
291                                                tmpl.tr[1].td.a[1].@href = "javascript:void(0)";
292                                                tmpl.tr[1].td.a[1].img.@src = "app:/assets/secret.png";
293                                        } else {
294                                                tmpl.tr[1].td.a[1].img.@title = feed_item[j].rid;
295                                                if ( iine_map[feed_item[j].rid] == 1 ) {
296                                                        tmpl.tr[1].td.a[1].img.@src = "app:/assets/good.png";
297                                                } else {
298                                                        tmpl.tr[1].td.a[1].img.@src = "app:/assets/normal.png";
299                                                }
300                                        }
301                                        if (feed_item[j].photo_url) {
302                                                tmpl.tr[1].td.a[2].@href = feed_item[j].photo_url;
303                                        } else {
304                                                tmpl.tr[1].td.a[2].@style = "display:none";
305                                        }
306                                        if (feed_item[j].areacode) {
307                                                tmpl.tr[1].td.a[3].@href = "http://wassr.jp/area/code/" + feed_item[j].areacode;
308                                                tmpl.tr[1].td.a[3].span = XML("<span class=\"area_name\">" + feed_item[j].areaname + "</span>");
309                                        } else {
310                                                tmpl.tr[1].td.a[3].@style = "display:none";
311                                        }
312                                        if (feed_item[j].slurl) {
313                                                tmpl.tr[1].td.a[4].@href = feed_item[j].slurl;
314                                        } else {
315                                                tmpl.tr[1].td.a[4].@style = "display:none";
316                                                }
317                                                trace(tmpl.toXMLString());
318                                        html += tmpl.toXMLString();
319                                }
320                        }
321                       
322                        return html + "</table>";
323                }
324
325                private function makeChannelFeedHTML(feed_item:Object):String
326                {
327                        var html:String = feedStyle;
328                        var pattern:RegExp = /(?<!src=")https?:\/\/[-_.!~*'()\w;\/?:@&=+$,%#]+/g;
329                        html += "<table>";
330                        for (var j:int=0; j<20; j++) {
331                                if (feed_item[j]) {
332                                        var tmpl:XML = feedTemplate.copy();
333                                        var text:String = feed_item[j].body;
334                                        tmpl.tr[0].td[0].a.img.@src = "http://wassr.jp/user/" + feed_item[j].user.login_id + "/profile_img.png.32." + feed_item[j].user.profimg_last_updated_at;
335                                        tmpl.tr[0].td[0].a.@href = "http://wassr.jp/user/" + feed_item[j].user.login_id
336                                        tmpl.tr[0].td[1] = XML("<td class=\"text\">" + text.replace(pattern, "<a href=\"$&\" target=\"_blank\">[URL]</a>")+"</td>");
337                                        tmpl.tr[1].td.span[0] = XML("<span class=\"user\">by <a href=\"http://wassr.jp/user/" + feed_item[j].user.login_id + "\">" + feed_item[j].user.nick + "</a></span>");
338                                        var fmt:DateFormatter = new DateFormatter();
339                                        fmt.formatString = "YYYY/MM/DD JJ:NN";
340                                        //tmpl.tr[1].td.span[1] = XML("<span class=\"time\">" + fmt.format(new Date(Date.parse(feed_item[j].created_on))) + "</span>");
341                                        tmpl.tr[1].td.span[1] = XML("<span class=\"time\">" + fmt.format(new Date(int(feed_item[j].epoch) * 1000)) + "</span>");
342                                        tmpl.tr[1].td.a[0].@style = "display:none";
343                                        tmpl.tr[1].td.a[1].@style = "display:none";
344                                        tmpl.tr[1].td.a[2].@style = "display:none";
345                                        tmpl.tr[1].td.a[3].@style = "display:none";
346                                        tmpl.tr[1].td.a[4].@style = "display:none";
347                                        trace(tmpl.toXMLString());
348                                        html += tmpl.toXMLString();
349                                }
350                        }
351                       
352                        return html + "</table>";
353                }
354               
355                private function displayParentComment(evt:Event):void
356                {
357                        Alert.show(evt.currentTarget.data);
358                }
359
360                public function applicationDragHandler(event:MouseEvent):void
361                {
362                        stage.nativeWindow.startMove();
363                }
364                   
365                private function onClose(evt:MouseEvent):void
366                {
367                        stage.nativeWindow.close();
368                }
369               
370                private function onMinimize(evt:MouseEvent):void
371                {
372                        stage.nativeWindow.minimize();
373                }
374               
375                private function showPictWindow(evt:MouseEvent):void
376                {
377                        var pict:pictWindow = pictWindow(
378                                PopUpManager.createPopUp(this, pictWindow, true)
379                        );
380                        pict.load(stat);
381                        PopUpManager.centerPopUp(pict);
382                }
383
384                public function statusUpdate(res_rid:String=null):void
385                {
386                        trace ( tabNavi.selectedIndex );
387                        if (stat.text == "") {
388                                get_feed();
389                                return;
390                        }
391                        wassr.statusUpdate(stat.text, function ():void {get_feed();}, res_rid);
392                        stat.text = "";
393                }
394               
395                public function favStatus(status_rid:String, callback:Function):void
396                {
397                        wassr.favStatus(status_rid, callback);
398                }
399               
400                private function selectChannel():void
401                {
402                        channelImage.source = channelList.selectedItem.image_url;
403                        wassr.getChannelFeed(channelList.selectedItem.name_en, displayChannel);
404                }
405               
406                public function startResize(event:MouseEvent):void
407                {
408                        stage.nativeWindow.startResize(NativeWindowResize.BOTTOM_RIGHT);
409                }
410               
411                public function onResize(event:Event):void
412                {
413                        this.height = stage.nativeWindow.height;
414                        this.width = stage.nativeWindow.width;
415                        this.panel.height = stage.nativeWindow.height;
416                        this.panel.width = stage.nativeWindow.width;
417                        this.ControlArea.width = this.panel.width - 20;
418                        this.tabNavi.width = this.panel.width - 20;
419                        this.tabNavi.height = this.height - 120;
420                        this.stat.width = this.width - 115;
421                        this.message.width = this.width - 200;
422                }
423               
424                public function alwaysFront(event:Event):void
425                {
426                        if (this.alwaysFrontChk.selected == true) {
427                                stage.nativeWindow.alwaysInFront = true;
428                        } else {
429                                stage.nativeWindow.alwaysInFront = false;
430                        }
431                }
432               
433                private function saveWindowSize(event:Event):void
434                {
435                        saveSetting("windowWidth", stage.nativeWindow.width);
436                        saveSetting("windowHeight", stage.nativeWindow.height);
437                }
438
439                private function savePosition(event:MouseEvent):void {
440                        if ( this.panel.contains(event.target as DisplayObject) ) return;
441                        saveSetting("windowX", stage.nativeWindow.x);
442                        saveSetting("windowY", stage.nativeWindow.y);
443                }
444
445                public function settingTab():void {
446                        colorSel.selectedColor = panel.getStyle("backgroundColor");
447                        alphaSel.value = panel.getStyle("backgroundAlpha");
448                }
449
450                private function doSetting():void
451                {
452                        saveSetting("backColor", colorSel.selectedColor);
453                        saveSetting("backAlpha", alphaSel.value);
454                        panel.setStyle("backgroundColor", colorSel.selectedColor);
455                        panel.setStyle("backgroundAlpha", alphaSel.value);
456                }
457               
458                private function version():String
459                {
460                        default xml namespace = new Namespace('http://ns.adobe.com/air/application/1.1');
461                        return NativeApplication.nativeApplication.applicationDescriptor.version;
462                }
463               
464                private function updateCheck():void
465                {
466                        var versionLoader:URLLoader = new URLLoader();
467                        versionLoader.addEventListener(Event.COMPLETE, function (evt:Event):void {
468                                verXML = new XML(evt.target.data);
469                                var localVer:String = version();
470                                var remoteVer:String = verXML.version;
471                                if ( remoteVer != localVer ) {
472                                        Alert.show("新しいwasacoがリリースされています。\n" +
473                                                   "更新しますか?\n\n" +
474                                                   "現在のバージョン:" + localVer + "\n" +
475                                                   "新しいバージョン:" + remoteVer,
476                                                   "確認", Alert.YES | Alert.NO, null, updateConfirm);
477                                }
478                        });
479                        versionLoader.load(new URLRequest("http://fushihara.net/wasaco/version.xml"));
480                }
481               
482                private function updateConfirm(evt:CloseEvent): void
483                {
484                        if (evt.detail == Alert.YES) {
485                                var archiveLoader:URLLoader = new URLLoader();
486                                archiveLoader.dataFormat = URLLoaderDataFormat.BINARY;
487                                archiveLoader.addEventListener(Event.COMPLETE, function (evt:Event):void {
488                                        var airFile:File = File.createTempFile();
489                                        var fs:FileStream = new FileStream();
490                                        var data:ByteArray = evt.target.data as ByteArray;
491                                        fs.open(airFile, FileMode.WRITE);
492                                        fs.writeBytes(data);
493                                        fs.close();
494                                       
495                                        var updater:Updater = new Updater();
496                                        updater.update(airFile, verXML.version);
497                                });
498                                archiveLoader.load(new URLRequest(verXML.archive));
499                                updateProgress.source = archiveLoader;
500                                updateProgress.visible = true;
501                        }
502                }
503
504        ]]>
505        </mx:Script>
506        <mx:Style>
507                Application {
508                        background-image: "";
509                        background-color: "";
510                        background-alpha: 0;
511                }
512                Panel {
513                        color: #ffffff;
514                        borderStyle: solid;
515                        roundedBottomCorners: true;
516                        cornerRadius: 15;
517                        shadowDirection: right;
518                        backgroundColor: #000000;
519                        backgroundAlpha: 0.8;
520                        width: 400px;
521                        height: 500px;
522                }
523        </mx:Style>
524        <mx:Panel id="panel" x="0" y="0" title="wasaco" titleIcon="@Embed(source='assets/wasaco.png')" width="374">
525                <mx:Canvas x="0" y="0" width="100%" height="45" id="ControlArea">
526                        <mx:TextInput x="10" y="10" width="254" id="stat" color="#111111" enter="statusUpdate();"  height="22"/>
527                        <mx:Button right="60" y="10" width="22" click="showPictWindow(event);" icon="@Embed('assets/heart.png')" fontSize="9" toolTip="絵文字入力"/>
528                        <mx:Button right="35" y="10" click="statusUpdate();" width="22" icon="@Embed('assets/action_refresh_blue.gif')" fontSize="9" toolTip="ヒトコト投稿/更新"/>
529                        <mx:Image id="minimizeBtn" source="assets/minimize_icon.png" width="16" height="16" right="16" y="0"/>
530                        <mx:Image id="closeBtn" source="assets/close_icon.png" width="16" height="16" right="0" y="0"/>
531                </mx:Canvas>
532                <mx:TabNavigator id="tabNavi" width="100%" height="380" color="#000000" backgroundAlpha="0.0">
533                        <mx:Canvas label="Timeline">
534                                <mx:HTML x="0" y="0" width="100%" height="100%" id="feedCanvas" backgroundAlpha="0.0" />
535                        </mx:Canvas>
536                        <mx:Canvas label="replies" width="100%" height="100%" backgroundAlpha="0.0">
537                                <mx:HTML x="0" y="0" width="100%" height="100%" id="repliesCanvas" backgroundAlpha="0.0" creationComplete="initReplies()" />
538                        </mx:Canvas>
539                        <mx:Canvas label="channel" width="100%" height="100%" backgroundAlpha="0.0">
540                                <mx:ComboBox x="10" y="10" width="257" id="channelList" labelField="title" change="selectChannel()"></mx:ComboBox>
541                                <mx:HTML x="0" y="100" width="100%" height="100%" id="channelCanvas" backgroundAlpha="0.0" creationComplete="initChannel()" />
542                                <mx:Image x="275" y="10" id="channelImage"/>
543                        </mx:Canvas>
544                        <mx:Canvas label="Setting" width="100%" height="100%" color="#010101" creationComplete="settingTab()">
545                                <mx:Label x="14" y="10" text="背景色"  color="#FEFEFE"/>
546                                <mx:ColorPicker x="27" y="36" id="colorSel" selectedColor="#277100"/>
547                                <mx:Label x="96.5" y="10" text="透過度"  color="#FEFEFE"/>
548                                <mx:HSlider x="94" y="39" width="121" id="alphaSel" minimum="0" maximum="1" snapInterval="0.01"/>
549                                <mx:Button x="10" y="77" label="設定する" width="99" id="okBtn" click="doSetting()" />
550                                <mx:Button x="10" y="107" label="アップデートチェック" width="122" click="updateCheck()" />
551                                <mx:ProgressBar x="140" y="119" height="10" id="updateProgress" visible="false" />
552                        </mx:Canvas>
553                </mx:TabNavigator>
554                <mx:Canvas bottom="0" width="100%" height="20" color="#ffffff" id="statusBar" backgroundAlpha="0.0">
555                        <mx:Image id="resizeBtn" source="assets/resize_icon.png" width="16" height="16" right="0" bottom="0" />
556                        <mx:CheckBox id="alwaysFrontChk" x="0" y="0" label="常に最前面に表示する" click="alwaysFront(event)" />
557                        <mx:Label id="message" x="130" width="200" height="20"  y="2"/>
558                </mx:Canvas>
559        </mx:Panel>
560</mx:Application>
Note: See TracBrowser for help on using the browser.