一個簡單的狀態列示例
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
- 寫一個簡單的 Facade 示例
- 一個簡單的 indexedDB 應用示例Index
- 使用 Hooks 實現一個簡單的狀態管理器Hook
- WebGL簡易教程(一):第一個簡單示例Web
- AcWing 242. 一個簡單的整數問題(樹狀陣列解法)陣列
- 一個超高自定義度又簡單使用的頁面狀態管理庫
- 不到150行程式碼,寫一個簡單的Flutter狀態管理元件行程Flutter元件
- 簡單介紹一個用於 Vue.js 的狀態管理庫:PiniaVue.js
- 狀態模式的理解和示例模式
- Blazor一個簡單的示例讓我們來起飛Blazor
- 一個簡單靜態網頁網頁
- vuex狀態管理簡單入門Vue
- Flutter狀態管理Provider,簡單上手FlutterIDE
- python List,它不是一個簡單的陣列Python陣列
- 狀態列
- Flutter的一個更精簡的狀態管理工具:consumerFlutter
- startViewTransition的簡單示例View
- Pet:一個簡單的命令列片段管理器命令列
- Zustand 讓 React 狀態變得太簡單React
- 簡簡單單的Vue3(外掛開發,路由系統,狀態管理)Vue路由
- React Native 中的狀態列React Native
- 沉浸式狀態列
- 狀態列相關
- Android 狀態列透明Android
- Java使用ObjectMapper的簡單示例JavaObjectAPP
- mobx-簡單可擴充套件的狀態管理庫套件
- c#12 實驗特性Interceptor如何使用的一個簡單但完整的示例C#
- 使用Netty和動態代理實現一個簡單的RPCNettyRPC
- Flutter狀態管理Provider(一) 簡易使用FlutterIDE
- Flutter改變狀態列字型、狀態列背景顏色、Appbar背景顏色的方式FlutterAPP
- 陣列的七個 API 的簡單實現陣列API
- resso,世界上最簡單的 React 狀態管理器React
- gpt給出的operator簡單示例GPT
- 最佳化兩個簡單的巢狀迴圈巢狀
- 一個簡簡單單的紅點系統框架框架
- 一個簡單的 PWA 指南
- 一個簡單的Tessellation Shader
- 一個簡單的「IOC」例子