一個簡單的狀態列示例
Flex3未提供狀態列元件,於是自己寫了一個簡單的狀態列。這個狀態列顯示的資訊有以下三種:1)文字;2)等待資訊;3)進度條。效果如下所示:
[img]http://dl.iteye.com/upload/attachment/173628/d28fee09-b2fc-365b-9f4b-94891657dd94.jpg[/img]
下面是我在專案中實際用到的狀態列,主要用於顯示系統狀態、等待資訊、進度、當前使用者以及使用者登入時間。
這裡是源程式:
[url=http://dl.iteye.com/topics/download/fb3a5e42-7fa6-36fb-9e11-d6274bf2bfe2]點選下載[/url]
[img]http://dl.iteye.com/upload/attachment/173628/d28fee09-b2fc-365b-9f4b-94891657dd94.jpg[/img]
下面是我在專案中實際用到的狀態列,主要用於顯示系統狀態、等待資訊、進度、當前使用者以及使用者登入時間。
<?xml version="1.0" encoding="utf-8"?>
<controls:IBSStatusBar xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:controls="com.ccac.ibs.controls.*"
width="100%" height="23"
styleName="mainStatusBar">
<mx:Script>
<![CDATA[
import com.ccac.ibs.controls.IBSStatusPanelMode;
import flash.events.TimerEvent;
import flash.utils.Timer;
import mx.events.FlexEvent;
import mx.formatters.DateFormatter;
import mx.utils.StringUtil;
import mx.utils.UIDUtil;
private const STATUSTEXT_TIMEOUT:Number = 3000;
private var timer:Timer = null;
private var defaultText:String = "";
private var lastText:String = "";
private var lastWaitText:String = "";
[ArrayElementType("Object")]
private var waitings:Array = [];
override protected function createChildren():void
{
super.createChildren();
timer = new Timer(1000, 1);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
panelConfig = [{percentWidth: 100},
{width: 120},
{width: 180},
{width: 180, textAlign: "center"}];
clearProgressBar();
}
public function showStatusText(text:String, timeout:Number = STATUSTEXT_TIMEOUT):void
{
if (text == null)
text = "";
if (isNaN(timeout))
timeout = STATUSTEXT_TIMEOUT;
if (timer)
timer.stop();
lastText = text;
if (timeout <= 0)
{
defaultText = text;
}
else
{
timer.delay = timeout;
timer.start();
}
if (panels(0))
{
if (panels(0).mode != IBSStatusPanelMode.TEXT)
panels(0).mode = IBSStatusPanelMode.TEXT;
panels(0).label = text;
}
}
public function clearStatusText():void
{
if (panels(0) && panels(0).mode == IBSStatusPanelMode.TEXT)
{
panels(0).label = "";
lastText = "";
defaultText = "";
}
}
public function showWaiting(text:String):String
{
var waitingId:String = UIDUtil.createUID();
if (text == null)
text = "";
waitings.push({"id": waitingId, "text": text});
lastWaitText = text;
if (panels(0))
{
panels(0).label = text;
if (panels(0).mode != IBSStatusPanelMode.WAITING)
panels(0).mode = IBSStatusPanelMode.WAITING;
}
return waitingId;
}
public function clearWaiting(waitingId:String = null):void
{
var index:int = -1;
if (waitingId == null)
waitings = [];
for (var i:int = 0; i < waitings.length; i++)
{
var waiting:Object = waitings[i];
if (waiting.id == waitingId)
{
index = i;
waitings.splice(index, 1);
break;
}
}
if (index == -1 && waitings.length > 0)
return;
if (panels(0))
{
if (waitings.length > 0)
{
if (panels(0).mode != IBSStatusPanelMode.WAITING)
panels(0).mode = IBSStatusPanelMode.WAITING;
lastWaitText = waitings[waitings.length - 1].text;
panels(0).label = waitings[waitings.length - 1].text;
}
else
{
if (panels(0).mode != IBSStatusPanelMode.TEXT)
panels(0).mode = IBSStatusPanelMode.TEXT;
panels(0).label = lastText;
}
}
}
public function showProgressBar(marqueeMode:Boolean = false):void
{
if (panels(1))
{
panels(1).mode = IBSStatusPanelMode.PROGRESSBAR;
panels(1).marqueeMode = marqueeMode;
panels(1).progressValue = 0;
panels(1).visible = true;
panels(1).includeInLayout = true;
}
}
public function setProgressValue(value:Number):void
{
if (panels(1))
panels(1).progressValue = value;
}
public function setProgress(loaded:Number, total:Number):void
{
if (panels(1))
panels(1).setProgress(loaded, total);
}
public function clearProgressBar():void
{
if (panels(1))
{
panels(1).visible = false;
panels(1).includeInLayout = false;
panels(1).mode = IBSStatusPanelMode.TEXT;
}
}
public function showCurrentUser(userName:String):void
{
clearCurrentUser();
if (panels(2))
panels(2).label = "Current User: " + userName;
}
public function clearCurrentUser():void
{
if (panels(2))
panels(2).label = "";
}
public function showLoginTime(time:Date):void
{
clearLoginTime();
if (panels(3) && time)
{
var formatter:DateFormatter = new DateFormatter();
formatter.formatString = "YYYY-MM-DD JJ:NN";
panels(3).label = "Login Time: " + formatter.format(time);
}
}
public function clearLoginTime():void
{
if (panels(3))
panels(3).label = "";
}
private function timerCompleteHandler(event:TimerEvent):void
{
if (panels(0) && panels(0).mode == IBSStatusPanelMode.TEXT)
panels(0).label = defaultText;
lastText = defaultText;
}
]]>
</mx:Script>
</controls:IBSStatusBar>
這裡是源程式:
[url=http://dl.iteye.com/topics/download/fb3a5e42-7fa6-36fb-9e11-d6274bf2bfe2]點選下載[/url]
相關文章
- [譯]ViewModels:一個簡單的示例View
- 一個簡單的 indexedDB 應用示例Index
- 使用 Hooks 實現一個簡單的狀態管理器Hook
- WebGL簡易教程(一):第一個簡單示例Web
- 寫一個簡單的 Facade 示例
- 一個簡單的MySQL資料遷移示例MySql
- android狀態列一體化(沉浸式狀態列)Android
- 不到150行程式碼,寫一個簡單的Flutter狀態管理元件行程Flutter元件
- 一個超高自定義度又簡單使用的頁面狀態管理庫
- 從一個簡單的Java單例示例談談併發Java單例
- android狀態列一體化(改變狀態列的背景顏色)Android
- 一個簡單的MapReduce示例(多個MapReduce任務處理)
- AcWing 242. 一個簡單的整數問題(樹狀陣列解法)陣列
- [快速搞定]android 狀態列一體化 沉浸式狀態列Android
- 一個簡單靜態網頁網頁
- 狀態模式的理解和示例模式
- Blazor一個簡單的示例讓我們來起飛Blazor
- vuex狀態管理簡單入門Vue
- 一個簡潔且強大的狀態管理庫 - iFlow
- 5 個處理狀態列的函式函式
- 介面測試之基於LoadRunner的一個簡單示例
- AOP的簡單示例
- 輕量簡便的android沉浸式狀態列Android
- Flutter狀態管理Provider,簡單上手FlutterIDE
- python List,它不是一個簡單的陣列Python陣列
- Pet:一個簡單的命令列片段管理器命令列
- [原創]一個佇列的簡單Java實現佇列Java
- 一個簡單的oracle函式返回陣列的例子Oracle函式陣列
- angular學習筆記(三十)-指令(9)-一個簡單的指令示例Angular筆記
- 使用MyBatis搭建一個訪問mysql資料庫的簡單示例MyBatisMySql資料庫
- IoC容器Autofac(2) - 一個簡單示例(附demo原始碼)原始碼
- Flutter的一個更精簡的狀態管理工具:consumerFlutter
- HTTP狀態碼查詢簡單介紹HTTP
- Android 沉浸式狀態列攻略 讓你的狀態列變色吧Android
- 簡簡單單的Vue3(外掛開發,路由系統,狀態管理)Vue路由
- iOS 狀態列的圖示iOS
- POJ 2352 Stars(簡單樹狀陣列)陣列
- 如何快速取得一個二進位制狀態的所有子狀態