00001 import mx.utils.Delegate;
00002
00003 import gugga.application.SectionsTransition;
00004 import gugga.common.EventDescriptor;
00005 import gugga.sequence.FictiveTask;
00006 import gugga.sequence.PreconditionsTask;
00007 import gugga.sequence.ProgressMonitor;
00008 import gugga.utils.DoLaterUtil;
00009
00014 class gugga.application.FictiveSectionsTransition extends SectionsTransition
00015 {
00016 private var mFictiveLoadingTask : FictiveTask;
00017 private var mCompletionPreconditionsTask : PreconditionsTask;
00018
00019 public function FictiveSectionsTransition(aCompletionPrecondition : EventDescriptor)
00020 {
00021 mFictiveLoadingTask = new FictiveTask();
00022
00023 mPreOpenProgressMonitor = new ProgressMonitor();
00024 mPreOpenProgressMonitor.addTask(mFictiveLoadingTask);
00025 mPreOpenProgressMonitor.start();
00026
00027 if(aCompletionPrecondition)
00028 {
00029 mCompletionPreconditionsTask = new PreconditionsTask();
00030 mCompletionPreconditionsTask.add(aCompletionPrecondition);
00031
00032 mCompletionPreconditionsTask.addEventListener("completed",
00033 Delegate.create(this, onCompletionPreconditionsTaskCompleted));
00034 }
00035 }
00036
00037 public function start() : Void
00038 {
00039 mIsRunning = true;
00040 dispatchEvent({type: "start", target: this});
00041
00042 DoLaterUtil.doLater(this, doMiddlePointTasks, null, 1);
00043 }
00044
00045 private function doMiddlePointTasks() : Void
00046 {
00047 mFictiveLoadingTask.start();
00048 dispatchEvent({type: "sectionsSwapped", target: this});
00049
00050 if(mCompletionPreconditionsTask)
00051 {
00052 mCompletionPreconditionsTask.start();
00053 }
00054 else
00055 {
00056 DoLaterUtil.doLater(this, complete, null, 1);
00057 }
00058 }
00059
00060 public function canInterrupt() : Boolean
00061 {
00062 return false;
00063 }
00064
00065 private function complete()
00066 {
00067 mIsRunning = false;
00068 dispatchEvent({type: "completed", target: this});
00069 dispatchEvent({type: "disposed", target: this});
00070 }
00071
00072 private function onCompletionPreconditionsTaskCompleted(aEvent : Object) : Void
00073 {
00074 complete();
00075 }
00076 }